using DBUtility; using PaintingScreen.Model; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Reflection; using System.Web; namespace PaintingScreen.Handler { public class Function { #region 喷涂下线合格率看板--滚动版 public static string GetTable1() { string tableStr = ""; try { tableStr += ""; DataTable dt = GetOnePassTable(); if (dt != null && dt.Rows.Count > 0) { for (int i = 0; i < dt.Rows.Count; i++) { tableStr += ""; for (int j = 0; j < dt.Columns.Count; j++) { tableStr += ""; } tableStr += ""; } tableStr += ""; } tableStr += "
" + dt.Rows[i][j].ToString() + "
"; return tableStr; } catch (Exception ex) { LogHelper.WriteLogManager(ex); LogHelper.WriteErrLogBase(ex.ToString(), MethodBase.GetCurrentMethod().Name); return tableStr; } } public static DataTable GetOnePassTable() { DataTable res = new DataTable(); try { string sql = @" -- 一次合格数 SELECT COUNT(DISTINCT barcode) num, productInfo INTO #a FROM [BBMPT].[dbo].[tb_InspectResult] WHERE InspectTimes = '1' AND " + GetQueryTime() + @" AND productInfo != '' AND inspectResult = '[合格]' AND SUBSTRING(productInfo,1,1) != ',' GROUP BY productInfo ORDER BY productInfo DESC -- 总合格数 SELECT COUNT(DISTINCT barcode) num, productInfo INTO #b FROM [BBMPT].[dbo].[tb_InspectResult] WHERE " + GetQueryTime() + @" AND productInfo != '' AND inspectResult = '[合格]' AND SUBSTRING(productInfo,1,1) != ',' GROUP BY productInfo ORDER BY productInfo DESC --总下线数 SELECT COUNT(DISTINCT barcode) num, productInfo INTO #c FROM [BBMPT].[dbo].[tb_InspectResult] WHERE " + GetQueryTime() + @" AND productInfo != '' AND inspectResult in ('[合格]','[抛光]','报废') AND SUBSTRING(productInfo,1,1) != ',' GROUP BY productInfo ORDER BY productInfo DESC --合并临时表 SELECT REPLACE(SUBSTRING(c.productInfo,1,charindex(',',c.productInfo)),',','') as [color] ,REPLACE(RIGHT(c.productInfo,charindex(',',REVERSE(c.productInfo))),',','') as [productInfo] ,ISNULL(c.num,0) sumNum, ISNULL(a.num,0) oncePassNum ,CONVERT(VARCHAR(20),ROUND(100*(ISNULL(a.num,0)/CONVERT(float,ISNULL(c.num,0))),2))+'%' oncePassRate ,ISNULL(b.num,0) sumPassNum ,CONVERT(VARCHAR(20),ROUND(100*(ISNULL(b.num,0)/CONVERT(float,ISNULL(c.num,0))),2))+'%' sumPassRate FROM #c c LEFT JOIN #a a ON c.productInfo = a.productInfo LEFT JOIN #b b ON c.productInfo = b.productInfo ORDER BY color,productInfo DROP TABLE #a; DROP TABLE #b; DROP TABLE #c; "; res = SqlHelper.GetDataDateTable(SqlHelper.SqlConnString, CommandType.Text, sql, null); return res; } catch (Exception ex) { LogHelper.WriteLogManager(ex); LogHelper.WriteErrLogBase(ex.ToString(), MethodBase.GetCurrentMethod().Name); return res; } } public static string GetTableSum() { string res = ""; try { #region 2019-08-06 注销:客户要求改变总合格率算法,使用总数-报废数,而不是实时合格数计算 // string sql = @" // -- 一次合格数 // SELECT COUNT(DISTINCT barcode) num, productInfo // INTO #a // FROM [BBMPT].[dbo].[tb_InspectResult] // WHERE InspectTimes = '1' AND " + GetQueryTime() + @" AND productInfo != '' AND inspectResult = '[合格]' AND SUBSTRING(productInfo,1,1) != ',' // GROUP BY productInfo // ORDER BY productInfo DESC // // -- 总合格数 // SELECT COUNT(DISTINCT barcode) num, productInfo // INTO #b // FROM [BBMPT].[dbo].[tb_InspectResult] // WHERE " + GetQueryTime() + @" AND productInfo != '' AND inspectResult = '[合格]' AND SUBSTRING(productInfo,1,1) != ',' // GROUP BY productInfo // ORDER BY productInfo DESC // // --总下线数 // SELECT COUNT(DISTINCT barcode) num, productInfo // INTO #c // FROM [BBMPT].[dbo].[tb_InspectResult] // WHERE " + GetQueryTime() + @" AND productInfo != '' AND inspectResult in ('[合格]','[抛光]','报废') AND SUBSTRING(productInfo,1,1) != ',' // GROUP BY productInfo // ORDER BY productInfo DESC // // --合并临时表 // SELECT SUM(ISNULL(c.num,0)) sumNum, SUM(ISNULL(a.num,0)) oncePassNum // ,CONVERT(VARCHAR(20),ROUND(100*(SUM(ISNULL(a.num,0))/CONVERT(float,SUM(ISNULL(c.num,0)))),2))+'%' oncePassRate // ,SUM(ISNULL(b.num,0)) sumPassNum // ,CONVERT(VARCHAR(20),ROUND(100*(SUM(ISNULL(b.num,0))/CONVERT(float,SUM(ISNULL(c.num,0)))),2))+'%' sumPassRate // FROM #c c // LEFT JOIN #a a // ON c.productInfo = a.productInfo // LEFT JOIN #b b // ON c.productInfo = b.productInfo // // DROP TABLE #a; // DROP TABLE #b; // DROP TABLE #c; // "; #endregion string sql = @" -- 一次合格数 SELECT COUNT(DISTINCT barcode) num, productInfo INTO #a FROM [BBMPT].[dbo].[tb_InspectResult] WHERE InspectTimes = '1' AND " + GetQueryTime() + @" AND productInfo != '' AND inspectResult = '[合格]' AND SUBSTRING(productInfo,1,1) != ',' GROUP BY productInfo ORDER BY productInfo DESC -- 总合格数 SELECT COUNT(DISTINCT barcode) num, productInfo INTO #b FROM [BBMPT].[dbo].[tb_InspectResult] WHERE " + GetQueryTime() + @" AND productInfo != '' AND inspectResult = '[合格]' AND SUBSTRING(productInfo,1,1) != ',' GROUP BY productInfo ORDER BY productInfo DESC -- 报废+点修补数 SELECT SUM(num) abtNum, productInfo INTO #d FROM ( SELECT num, productInfo FROM (SELECT COUNT(DISTINCT barcode) num, productInfo FROM [BBMPT].[dbo].[tb_InspectResult] WHERE " + GetQueryTime() + @" AND productInfo != '' AND inspectResult = '[报废]' AND SUBSTRING(productInfo,1,1) != ',' GROUP BY productInfo) a UNION SELECT * FROM (SELECT COUNT(DISTINCT barcode) num, productInfo FROM [BBMPT].[dbo].[tb_InspectResult] WHERE " + GetQueryTime() + @" AND productInfo != '' AND stationNo = 'S10' AND inspectResult <> '[合格]' AND SUBSTRING(productInfo,1,1) != ',' GROUP BY productInfo) b ) aa GROUP BY productInfo --总下线数 SELECT COUNT(DISTINCT barcode) num, productInfo INTO #c FROM [BBMPT].[dbo].[tb_InspectResult] WHERE " + GetQueryTime() + @" AND productInfo != '' AND inspectResult in ('[合格]','[抛光]','报废') AND SUBSTRING(productInfo,1,1) != ',' GROUP BY productInfo ORDER BY productInfo DESC --合并临时表(总合格数=总下线数-总报废数 计算比率) SELECT SUM(ISNULL(c.num,0)) sumNum, SUM(ISNULL(a.num,0)) oncePassNum, SUM(ISNULL(d.abtNum,0)) abtNum,SUM(ISNULL(b.num,0)) sumPassNum ,CONVERT(VARCHAR(20),ROUND(100*(SUM(ISNULL(a.num,0))/CONVERT(float,SUM(ISNULL(c.num,0)))),2))+'%' oncePassRate ,CONVERT(VARCHAR(20),ROUND(100*((SUM(ISNULL(c.num,0))-SUM(ISNULL(d.abtNum,0)))/CONVERT(float,SUM(ISNULL(c.num,0)))),2))+'%' sumPassRate FROM #c c LEFT JOIN #a a ON c.productInfo = a.productInfo LEFT JOIN #b b ON c.productInfo = b.productInfo LEFT JOIN #d d ON c.productInfo = d.productInfo DROP TABLE #a; DROP TABLE #b; DROP TABLE #c; DROP TABLE #d; "; DataTable dt = SqlHelper.GetDataDateTable(SqlHelper.SqlConnString, CommandType.Text, sql, null); if (dt != null && dt.Rows.Count > 0) { res += @"
总数" + dt.Rows[0]["sumNum"] + @"" + dt.Rows[0]["oncePassNum"] + "" + dt.Rows[0]["oncePassRate"] + @"" + dt.Rows[0]["sumPassNum"] + @"" + dt.Rows[0]["sumPassRate"] + @"
"; } return res; } catch (Exception ex) { LogHelper.WriteLogManager(ex); LogHelper.WriteErrLogBase(ex.ToString(), MethodBase.GetCurrentMethod().Name); return res; } } /// /// 获取班次,规定早8至晚8为A班 /// /// public static string GetQueryTime() { bool classA = IsBetweenTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), "2019-06-12 08:00:00", "2019-06-12 20:00:00"); if (classA) { //A班为当日8点至20点 return "createTime >= '" + DateTime.Now.ToShortDateString() + " 08:00:00' AND createTime <= '" + DateTime.Now.ToShortDateString() + " 20:00:00'"; } else { //B班为当日20点至次日8点 if (IsBetweenTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), "2019-06-12 20:00:00", "2019-06-12 23:59:59")) { return "createTime >= '" + DateTime.Now.ToShortDateString() + " 20:00:00' AND createTime <= '" + DateTime.Now.AddDays(1).ToShortDateString() + " 08:00:00'"; } else { return "createTime >= '" + DateTime.Now.AddDays(-1).ToShortDateString() + " 20:00:00' AND createTime <= '" + DateTime.Now.ToShortDateString() + " 08:00:00'"; } } } /// /// 判断传入时间是否在工作时间段内 /// /// /// /// /// public static bool IsBetweenTime(string timeStr, string startTime, string endTime) { //判断传入时间是否在工作时间段内 try { TimeSpan startSpan = DateTime.Parse(startTime).TimeOfDay; TimeSpan endSpan = DateTime.Parse(endTime).TimeOfDay; DateTime t1 = Convert.ToDateTime(timeStr); TimeSpan dspNow = t1.TimeOfDay; if (dspNow > startSpan && dspNow < endSpan) { return true; } return false; } catch (Exception ex) { LogHelper.WriteErrLogBase(ex.ToString(), MethodBase.GetCurrentMethod().Name); return false; } } #endregion #region 喷涂下线合格率看板--分页版 public static string CreateTable() { try { string sql = @" USE BBMPT; IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[tb_ReportPaintingScreen]') AND type in (N'U')) drop table tb_ReportPaintingScreen; -- 一次合格数 SELECT COUNT(DISTINCT barcode) num, productInfo INTO #a FROM [BBMPT].[dbo].[tb_InspectResult] WHERE InspectTimes = '1' AND " + GetQueryTime() + @" AND productInfo != '' AND inspectResult = '[合格]' AND SUBSTRING(productInfo,1,1) != ',' GROUP BY productInfo ORDER BY productInfo DESC; -- 总合格数 SELECT COUNT(DISTINCT barcode) num, productInfo INTO #b FROM [BBMPT].[dbo].[tb_InspectResult] WHERE " + GetQueryTime() + @" AND productInfo != '' AND inspectResult = '[合格]' AND SUBSTRING(productInfo,1,1) != ',' GROUP BY productInfo ORDER BY productInfo DESC; --总下线数 SELECT COUNT(DISTINCT barcode) num, productInfo INTO #c FROM [BBMPT].[dbo].[tb_InspectResult] WHERE " + GetQueryTime() + @" AND productInfo != '' AND inspectResult in ('[合格]','[抛光]','[报废]') AND SUBSTRING(productInfo,1,1) != ',' GROUP BY productInfo ORDER BY productInfo DESC; --合并临时表 SELECT REPLACE(SUBSTRING(c.productInfo,1,charindex(',',c.productInfo)),',','') as [color] ,REPLACE(RIGHT(c.productInfo,charindex(',',REVERSE(c.productInfo))),',','') as [productInfo] ,ISNULL(c.num,0) sumNum, ISNULL(a.num,0) oncePassNum ,CONVERT(VARCHAR(20),ROUND(100*(ISNULL(a.num,0)/CONVERT(float,ISNULL(c.num,0))),2))+'%' oncePassRate ,ISNULL(b.num,0) sumPassNum ,CONVERT(VARCHAR(20),ROUND(100*(ISNULL(b.num,0)/CONVERT(float,ISNULL(c.num,0))),2))+'%' sumPassRate into tb_ReportPaintingScreen FROM #c c LEFT JOIN #a a ON c.productInfo = a.productInfo LEFT JOIN #b b ON c.productInfo = b.productInfo ORDER BY color,productInfo; DROP TABLE #a; DROP TABLE #b; DROP TABLE #c; "; int res = SqlHelper.ExecuteNonQuery(SqlHelper.SqlConnString, CommandType.Text, sql, null); return "1"; } catch (Exception ex) { LogHelper.WriteErrLogBase("喷涂下线合格率看板-生成数据失败:"+ ex.ToString(), MethodBase.GetCurrentMethod().Name); return "0"; } } public static string CreateMiddleTable() { string tableStr = ""; try { tableStr += ""; for (int i = 0; i < 9; i++) { tableStr += ""; for (int j = 0; j < 7; j++) { tableStr += ""; } tableStr += ""; } tableStr += "
"; return tableStr; } catch (Exception ex) { LogHelper.WriteErrLogBase("喷涂下线合格率看板-生成MiddleTable失败:" + ex.ToString(), MethodBase.GetCurrentMethod().Name); return tableStr; } } public static string GetMiddleTableData(string page) { string res = ""; try { string sql = @" select * from tb_ReportPaintingScreen "; DataTable dt = SqlHelper.GetDataDateTable(SqlHelper.SqlConnString, CommandType.Text, sql, null); if (Convert.ToInt32(page) * 9 >= dt.Rows.Count) { //查询第一页 page = "0"; } else { //查询下一页(page+1页) page = (Convert.ToInt32(page) + 1).ToString(); } string queryStr = @" declare @pageIndex int; declare @pageSize int; set @pageIndex = "+ page +@"; set @pageSize = 9; select * from ( SELECT [color] ,[productInfo] ,[sumNum] ,[oncePassNum] ,[oncePassRate] ,[sumPassNum] ,[sumPassRate] ,ROW_NUMBER() OVER(ORDER BY color,productInfo) xh FROM [tb_ReportPaintingScreen] ) t WHERE t.xh between @pageSize*(@pageIndex - 1)+1 and @pageSize*@pageIndex "; DataTable dt_page = SqlHelper.GetDataDateTable(SqlHelper.SqlConnString, CommandType.Text, queryStr, null); if (dt_page != null && dt_page.Rows.Count > 0) { res += ""; for (int i = 0; i < dt_page.Rows.Count; i++) { res += ""; for (int j = 0; j < 7; j++) { res += ""; } res += ""; } res += "
" + dt_page.Rows[i][j].ToString() + @"
"; res += ","+ page; } return res; } catch (Exception ex) { LogHelper.WriteErrLogBase("喷涂下线合格率看板-查询中间分页数据失败:" + ex.ToString(), MethodBase.GetCurrentMethod().Name); return res; } } #endregion #region 抛光TOP5看板 public static string CreateTablePaoGuang() { try { string sql = @" USE BBMPT; IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[tb_ReportPaintingScreen_pg]') AND type in (N'U')) drop table tb_ReportPaintingScreen_pg; --------------------------------------------------------------------------- -- 总合格数 SELECT COUNT(DISTINCT barcode) num, productInfo INTO #a FROM [tb_InspectResult] WHERE " + GetQueryTime() + @" AND productInfo != '' AND inspectResult = '[合格]' AND SUBSTRING(productInfo,1,1) != ',' GROUP BY productInfo ORDER BY productInfo DESC; --总下线数 SELECT COUNT(DISTINCT barcode) num, productInfo INTO #b FROM [tb_InspectResult] WHERE " + GetQueryTime() + @" AND productInfo != '' AND inspectResult in ('[合格]','[抛光]','[报废]') AND SUBSTRING(productInfo,1,1) != ',' GROUP BY productInfo ORDER BY productInfo DESC; SELECT b.productInfo, ISNULL(b.num,0) AS sumNum, ISNULL(a.num,0) AS hgNum INTO #sum FROM #b b LEFT JOIN #a a ON b.productInfo = a.productInfo; --------------------------------------------------------------------------------------- --缺陷分类统计数 SELECT [barcode] ,[reason] ,[productInfo] INTO #result FROM [tb_InspectResult] WHERE " + GetQueryTime() + @" AND inspectResult = '[抛光]' AND reason <> '' AND reason IS NOT NULL; SELECT DISTINCT DefectName INTO #DefectName FROM [tb_Defect]; SELECT c.productInfo,COUNT(DISTINCT c.barcode) defectNum, d.DefectName INTO #Defect FROM #result c LEFT JOIN #DefectName d ON c.reason like '%'+d.DefectName+'%' GROUP BY c.productInfo, d.DefectName; ----------------------------------------------------------------------- --缺陷率top5 SELECT tmp.productInfo, defectRate, tmp.DefectName,tmp.sumNum,tmp.hgNum INTO #FinalResult FROM ( SELECT ISNULL(CONVERT(DECIMAL(10,2),(defect.defectNum/CONVERT(FLOAT, [sum].sumNum))*100),0) defectRate, [sum].productInfo, defect.DefectName,[sum].sumNum,[sum].hgNum FROM #sum [sum] LEFT JOIN #Defect defect ON [sum].productInfo = defect.productInfo WHERE defect.DefectName IS NOT NULL ) tmp GROUP BY tmp.productInfo, tmp.defectRate, tmp.DefectName,tmp.sumNum,tmp.hgNum ORDER BY tmp.productInfo, tmp.defectRate, tmp.DefectName DESC; SELECT a.productInfo, a.sumNum, a.hgNum,a.DefectName DefectName1,a.defectRate defectRate1,b.DefectName DefectName2,b.defectRate defectRate2,c.DefectName DefectName3,c.defectRate defectRate3,d.DefectName DefectName4,d.defectRate defectRate4,e.DefectName DefectName5,e.defectRate defectRate5 INTO #ResultTemp FROM #FinalResult a LEFT JOIN #FinalResult b ON a.productInfo = b.productInfo AND a.DefectName <> b.DefectName LEFT JOIN #FinalResult c ON a.productInfo = c.productInfo AND a.DefectName <> c.DefectName AND b.DefectName <> c.DefectName LEFT JOIN #FinalResult d ON a.productInfo = d.productInfo AND a.DefectName <> d.DefectName AND b.DefectName <> d.DefectName AND c.DefectName <> d.DefectName LEFT JOIN #FinalResult e ON a.productInfo = e.productInfo AND a.DefectName <> e.DefectName AND b.DefectName <> e.DefectName AND c.DefectName <> e.DefectName AND d.DefectName <> e.DefectName; SELECT *, ROW_NUMBER() OVER(PARTITION BY a.productInfo ORDER BY a.defectRate1,a.defectRate2,a.defectRate3,a.defectRate4,a.defectRate5 DESC) rowid INTO #ResultTemp2 FROM #ResultTemp a; SELECT REPLACE(SUBSTRING(a.productInfo,1,charindex(',',a.productInfo)),',','') as [color] ,REPLACE(RIGHT(a.productInfo,charindex(',',REVERSE(a.productInfo))),',','') as [productInfo] , a.sumNum, a.hgNum, a.DefectName1, a.defectRate1, a.DefectName2, a.defectRate2, a.DefectName3, a.defectRate3, a.DefectName4, a.defectRate4, a.DefectName5, a.defectRate5 INTO tb_ReportPaintingScreen_pg FROM #ResultTemp2 a JOIN ( SELECT MAX(rowid) rowid,productInfo FROM #ResultTemp2 GROUP BY productInfo ) b on a.productInfo = b.productInfo AND a.rowid = b.rowid ORDER BY a.productInfo; DROP TABLE #a; DROP TABLE #b; DROP TABLE #sum; DROP TABLE #result; DROP TABLE #DefectName; DROP TABLE #Defect; DROP TABLE #FinalResult; DROP TABLE #ResultTemp; DROP TABLE #ResultTemp2; "; int res = SqlHelper.ExecuteNonQuery(SqlHelper.SqlConnString, CommandType.Text, sql, null); return "1"; } catch (Exception ex) { LogHelper.WriteErrLogBase("抛光TOP5看板-生成数据失败:" + ex.ToString(), MethodBase.GetCurrentMethod().Name); return "0"; } } public static string GetTableSumPaoGuang() { string res = ""; try { #region 2019-08-06 注销:客户要求改变总合格率算法,使用总数-报废数,而不是实时合格数计算 // string sql = @" // -- 一次合格数 // SELECT COUNT(DISTINCT barcode) num, productInfo // INTO #a // FROM [BBMPT].[dbo].[tb_InspectResult] // WHERE InspectTimes = '1' AND " + GetQueryTime() + @" AND productInfo != '' AND inspectResult = '[合格]' AND SUBSTRING(productInfo,1,1) != ',' // GROUP BY productInfo // ORDER BY productInfo DESC // // -- 总合格数 // SELECT COUNT(DISTINCT barcode) num, productInfo // INTO #b // FROM [BBMPT].[dbo].[tb_InspectResult] // WHERE " + GetQueryTime() + @" AND productInfo != '' AND inspectResult = '[合格]' AND SUBSTRING(productInfo,1,1) != ',' // GROUP BY productInfo // ORDER BY productInfo DESC // // --总下线数 // SELECT COUNT(DISTINCT barcode) num, productInfo // INTO #c // FROM [BBMPT].[dbo].[tb_InspectResult] // WHERE " + GetQueryTime() + @" AND productInfo != '' AND inspectResult in ('[合格]','[抛光]','报废') AND SUBSTRING(productInfo,1,1) != ',' // GROUP BY productInfo // ORDER BY productInfo DESC // // --合并临时表 // SELECT SUM(ISNULL(c.num,0)) sumNum, SUM(ISNULL(a.num,0)) oncePassNum // ,CONVERT(VARCHAR(20),ROUND(100*(SUM(ISNULL(a.num,0))/CONVERT(float,SUM(ISNULL(c.num,0)))),2))+'%' oncePassRate // ,SUM(ISNULL(b.num,0)) sumPassNum // ,CONVERT(VARCHAR(20),ROUND(100*(SUM(ISNULL(b.num,0))/CONVERT(float,SUM(ISNULL(c.num,0)))),2))+'%' sumPassRate // FROM #c c // LEFT JOIN #a a // ON c.productInfo = a.productInfo // LEFT JOIN #b b // ON c.productInfo = b.productInfo // // DROP TABLE #a; // DROP TABLE #b; // DROP TABLE #c; // "; #endregion string sql = @" -- 一次合格数 SELECT COUNT(DISTINCT barcode) num, productInfo INTO #a FROM [BBMPT].[dbo].[tb_InspectResult] WHERE InspectTimes = '1' AND " + GetQueryTime() + @" AND productInfo != '' AND inspectResult = '[合格]' AND SUBSTRING(productInfo,1,1) != ',' GROUP BY productInfo ORDER BY productInfo DESC -- 总合格数 SELECT COUNT(DISTINCT barcode) num, productInfo INTO #b FROM [BBMPT].[dbo].[tb_InspectResult] WHERE " + GetQueryTime() + @" AND productInfo != '' AND inspectResult = '[合格]' AND SUBSTRING(productInfo,1,1) != ',' GROUP BY productInfo ORDER BY productInfo DESC -- 报废+点修补数 SELECT SUM(num) abtNum, productInfo INTO #d FROM ( SELECT num, productInfo FROM (SELECT COUNT(DISTINCT barcode) num, productInfo FROM [BBMPT].[dbo].[tb_InspectResult] WHERE " + GetQueryTime() + @" AND productInfo != '' AND inspectResult = '[报废]' AND SUBSTRING(productInfo,1,1) != ',' GROUP BY productInfo) a UNION SELECT * FROM (SELECT COUNT(DISTINCT barcode) num, productInfo FROM [BBMPT].[dbo].[tb_InspectResult] WHERE " + GetQueryTime() + @" AND productInfo != '' AND stationNo = 'S10' AND inspectResult <> '[合格]' AND SUBSTRING(productInfo,1,1) != ',' GROUP BY productInfo) b ) aa GROUP BY productInfo --总下线数 SELECT COUNT(DISTINCT barcode) num, productInfo INTO #c FROM [BBMPT].[dbo].[tb_InspectResult] WHERE " + GetQueryTime() + @" AND productInfo != '' AND inspectResult in ('[合格]','[抛光]','报废') AND SUBSTRING(productInfo,1,1) != ',' GROUP BY productInfo ORDER BY productInfo DESC --合并临时表(总合格数=总下线数-总报废数 计算比率) SELECT SUM(ISNULL(c.num,0)) sumNum, SUM(ISNULL(a.num,0)) oncePassNum, SUM(ISNULL(d.abtNum,0)) abtNum,SUM(ISNULL(b.num,0)) sumPassNum ,CONVERT(VARCHAR(20),ROUND(100*(SUM(ISNULL(a.num,0))/CONVERT(float,SUM(ISNULL(c.num,0)))),2))+'%' oncePassRate ,CONVERT(VARCHAR(20),ROUND(100*((SUM(ISNULL(c.num,0))-SUM(ISNULL(d.abtNum,0)))/CONVERT(float,SUM(ISNULL(c.num,0)))),2))+'%' sumPassRate FROM #c c LEFT JOIN #a a ON c.productInfo = a.productInfo LEFT JOIN #b b ON c.productInfo = b.productInfo LEFT JOIN #d d ON c.productInfo = d.productInfo DROP TABLE #a; DROP TABLE #b; DROP TABLE #c; DROP TABLE #d; "; DataTable dt = SqlHelper.GetDataDateTable(SqlHelper.SqlConnString, CommandType.Text, sql, null); if (dt != null && dt.Rows.Count > 0) { res += dt.Rows[0]["sumNum"] + "," + dt.Rows[0]["oncePassNum"] + "," + dt.Rows[0]["oncePassRate"] + "," + dt.Rows[0]["sumPassNum"] + "," + dt.Rows[0]["sumPassRate"]; } return res; } catch (Exception ex) { LogHelper.WriteErrLogBase("抛光TOP5看板-生成数据失败:" + ex.ToString(), MethodBase.GetCurrentMethod().Name); return res; } } public static string GetMiddleTablePaoGuang(string page) { string res = ""; try { string sql = @" select * from tb_ReportPaintingScreen_pg "; DataTable dt = SqlHelper.GetDataDateTable(SqlHelper.SqlConnString, CommandType.Text, sql, null); if (Convert.ToInt32(page) * 4 >= dt.Rows.Count) { //查询第一页 page = "0"; } else { //查询下一页(page+1页) page = (Convert.ToInt32(page) + 1).ToString(); } string queryStr = @" declare @pageIndex int; declare @pageSize int; set @pageIndex = " + page + @"; set @pageSize = 4; select * from ( SELECT [color] ,[productInfo] ,[sumNum] ,[hgNum] ,[DefectName1] ,[defectRate1] ,[DefectName2] ,[defectRate2] ,[DefectName3] ,[defectRate3] ,[DefectName4] ,[defectRate4] ,[DefectName5] ,[defectRate5] ,ROW_NUMBER() OVER(ORDER BY color,productInfo) xh FROM [tb_ReportPaintingScreen_pg] ) t WHERE t.xh between @pageSize*(@pageIndex - 1)+1 and @pageSize*@pageIndex "; DataTable dt_page = SqlHelper.GetDataDateTable(SqlHelper.SqlConnString, CommandType.Text, queryStr, null); if (dt_page != null && dt_page.Rows.Count > 0) { res += ""; for (int i = 0; i < dt_page.Rows.Count; i++) { res += @" "; } res += "
" + dt_page.Rows[i]["color"].ToString() + @" " + dt_page.Rows[i]["productInfo"].ToString() + @" " + dt_page.Rows[i]["sumNum"].ToString() + @" " + dt_page.Rows[i]["hgNum"].ToString() + @" " + dt_page.Rows[i]["DefectName1"].ToString() + @" " + dt_page.Rows[i]["DefectName2"].ToString() + @" " + dt_page.Rows[i]["DefectName3"].ToString() + @" " + dt_page.Rows[i]["DefectName4"].ToString() + @" " + dt_page.Rows[i]["DefectName5"].ToString() + @"
" + AddPercent(dt_page.Rows[i]["defectRate1"]) + @" " + AddPercent(dt_page.Rows[i]["defectRate2"]) + @" " + AddPercent(dt_page.Rows[i]["defectRate3"]) + @" " + AddPercent(dt_page.Rows[i]["defectRate4"]) + @" " + AddPercent(dt_page.Rows[i]["defectRate5"]) + @"
"; res += "," + page; } return res; } catch (Exception ex) { LogHelper.WriteErrLogBase("抛光TOP5看板-查询中间table数据失败:" + ex.ToString(), MethodBase.GetCurrentMethod().Name); return res; } } private static string AddPercent(object num) { if (num != null) { string tmp = num.ToString(); if (!string.IsNullOrWhiteSpace(tmp)) { return tmp + "%"; } else { return ""; } } else { return ""; } } public static string GetSumDefectPercent() { string res = ""; try { string sql = @" --缺陷分类统计数 SELECT [barcode] ,[reason] ,[productInfo] INTO #result FROM [tb_InspectResult] WHERE " + GetQueryTime() + @" AND inspectResult = '[抛光]' AND reason <> '' AND reason IS NOT NULL; SELECT DISTINCT DefectName INTO #DefectName FROM [tb_Defect]; SELECT c.productInfo,COUNT(DISTINCT c.barcode) defectNum, d.DefectName INTO #Defect FROM #result c LEFT JOIN #DefectName d ON c.reason like '%'+d.DefectName+'%' GROUP BY c.productInfo, d.DefectName; SELECT TOP 5 DefectName, CONVERT(DECIMAL(10,2),SUM(defectNum)/CONVERT(FLOAT,(SELECT SUM(defectNum) FROM #Defect))*100) defectRate FROM #Defect GROUP BY DefectName ORDER BY defectRate DESC; DROP TABLE #result; DROP TABLE #DefectName; DROP TABLE #Defect; "; DataTable dt = SqlHelper.GetDataDateTable(SqlHelper.SqlConnString, CommandType.Text, sql, null); if (dt != null && dt.Rows.Count > 0) { for (int i = 0; i < dt.Rows.Count; i++) { res += dt.Rows[i]["DefectName"].ToString() + "," + AddPercent(dt.Rows[i]["defectRate"]) + ","; } } return res; } catch (Exception ex) { LogHelper.WriteErrLogBase("抛光TOP5看板-查询总数缺陷率数据失败:" + ex.ToString(), MethodBase.GetCurrentMethod().Name); return res; } } #endregion } }