Parcourir la source

新增改洗看板

ztl il y a 2 ans
Parent
commit
f8c28f9686

+ 9 - 27
wwwroot/main/Procedure/test14/demo.ashx

@@ -499,45 +499,27 @@ CASE
 										FROM
 											(
 											SELECT DISTINCT
-												NVL( COUNT( DISTINCT TPPB.BARCODE ), 0 ) 成检不合格数,--成检本烧最后一次检验判断为次品和重烧数
-												to_char( TPPB.CREATETIME, 'yyyymmdd' ) AS CREATETIME 
+												NVL( COUNT( DISTINCT TPPD.BARCODE ), 0 ) 成检不合格数,--成检本烧最后一次检验判断为次品和重烧数
+												to_char( TPPD.CREATETIME, 'yyyymmdd' ) AS CREATETIME 
 											FROM
 												TP_PM_PRODUCTIONDATA TPPD
-												LEFT JOIN(
-												SELECT
-													DISTINCT
-													TPPD.BARCODE,
-													TPPD.CREATETIME
-												FROM
-												TP_PM_PRODUCTIONDATA TPPD
-												LEFT JOIN TP_PM_DEFECT TPD ON TPPD.BARCODE = TPD.BARCODE
-												LEFT JOIN TP_PM_GROUTINGDAILYDETAIL PGD ON PGD.BARCODE = TPPD.BARCODE
-												LEFT JOIN TP_PC_GROUTINGLINE TPGL ON TPGL.GROUTINGLINEID = PGD.GROUTINGLINEID 
-											WHERE
-												 CHECKBATCHNO = 1
-												AND TPPD.GOODSLEVELID IN (6,7)
-												AND TPD.DEFECTNAME IS NOT NULL
-												AND ISREFIRE IN (0)
-												AND TPPD.CREATETIME >= trunc( SYSDATE - 6 )
-												AND TPGL.TESTFLAG = 0 
-												AND ( SUBSTR( TPGL.GROUTINGLINENAME, 1, 3 ) = 'C05' OR SUBSTR( TPGL.GROUTINGLINECODE, 1, 3 ) = 'C06' ) 
-												AND TPPD.VALUEFLAG = 1 
-												)TPPB
-												ON TPPB.BARCODE = TPPD.BARCODE
 												LEFT JOIN TP_PM_DEFECT TPD ON TPPD.BARCODE = TPD.BARCODE
 													LEFT JOIN TP_PM_GROUTINGDAILYDETAIL PGD ON PGD.BARCODE = TPPD.BARCODE
 													LEFT JOIN TP_PC_GROUTINGLINE TPGL ON TPGL.GROUTINGLINEID = PGD.GROUTINGLINEID 
 												WHERE
-													TPPD.PROCEDUREID = 98 
+													TPD.DEFECTPROCEDUREID = 98 
+													AND TPPD.CHECKBATCHNO = 1
+													AND TPPD.ISREFIRE IN (0)
+													AND TPPD.GOODSLEVELID IN (6,7)
 													AND TPD.DEFECTNAME IS NOT NULL
-													--AND TPPD.CREATETIME >= trunc( SYSDATE - 6 )
+													AND TPPD.CREATETIME >= trunc( SYSDATE - 6 )
 													AND TPPD.VALUEFLAG = 1
 													AND TPGL.TESTFLAG = 0 
 													AND ( SUBSTR( TPGL.GROUTINGLINENAME, 1, 3 ) = 'C05' OR SUBSTR( TPGL.GROUTINGLINECODE, 1, 3 ) = 'C06' ) 
 													GROUP BY
-												to_char( TPPB.CREATETIME, 'yyyymmdd' ) 
+												to_char( TPPD.CREATETIME, 'yyyymmdd' ) 
 											ORDER BY
-												to_char( TPPB.CREATETIME, 'yyyymmdd' ) DESC 
+												to_char( TPPD.CREATETIME, 'yyyymmdd' ) DESC 
 											) 
 										) T2 ON T1.CREATETIME = T2.CREATETIME 
 									ORDER BY

+ 931 - 0
wwwroot/main/Procedure/test16/demo.ashx

@@ -0,0 +1,931 @@
+<%@ WebHandler Language="C#" Class="demo" %>
+
+using Curtain.DataAccess;
+using DK.XuWei.WebMes;
+using Newtonsoft.Json.Linq;
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Web;
+using System.Web.SessionState;
+
+public class demo : IHttpHandler {
+    
+    public void ProcessRequest (HttpContext context) {
+        context.Response.ContentType = "text/plain";
+        context.Response.ContentType = "text/plain";
+        using (IDataAccess conn = DataAccess.Create())
+        {
+				//毛坯库库存
+				if (context.Request["m"].ToString() == "kc")
+            {
+                string sqlStr = @"SELECT
+									CASE WHEN T.GOODSTYPEID = 3 THEN '连体'
+									 WHEN T.GOODSTYPEID = 18 THEN '智能'
+										ELSE '其他' END AS 产品类别,
+									T.count 数量
+									FROM (
+									SELECT
+										GOODSTYPEID,
+										COUNT( * ) count
+									FROM
+										TP_PM_INPRODUCTION TPI
+										LEFT JOIN TP_MST_GOODS TMG ON TPI.GOODSCODE = TMG.GOODSCODE 
+									WHERE
+										TPI.PROCEDUREID = 91 
+									GROUP BY
+										TMG.GOODSTYPEID) T";
+                //直接获取不分页数据
+                DataTable dt = conn.ExecuteDatatable(sqlStr);
+                string jsonStr = new JsonResult(dt).ToJson();
+                context.Response.Write(jsonStr);
+            }
+				//近30日次品折线图
+                if (context.Request["m"].ToString() == "gx")
+            {
+                string sqlStr = @"SELECT SUBSTR(T1.CREATETIME, 5, 2 )||'.'||SUBSTR(T1.CREATETIME, 7, 2 ) 日期,T1.count 改洗数量,1650 预期数量 FROM(
+								SELECT
+									to_char( TPPD.CREATETIME, 'yyyymmdd' ) AS CREATETIME,
+									COUNT( DISTINCT TPPD.BARCODE ) count 
+								FROM
+									TP_PM_PRODUCTIONDATA TPPD
+									LEFT JOIN TP_PM_DEFECT TPD ON TPPD.BARCODE = TPD.BARCODE
+								WHERE
+									TPPD.PROCEDUREID = 94 
+									AND TPPD.VALUEFLAG = 1 
+									AND TPPD.CREATETIME >= TO_CHAR( SYSDATE - 29 )
+								GROUP BY to_char( TPPD.CREATETIME, 'yyyymmdd' ) ORDER BY to_char( TPPD.CREATETIME, 'yyyymmdd' ) ) T1";
+                //直接获取不分页数据
+                DataTable dt = conn.ExecuteDatatable(sqlStr);
+                string jsonStr = new JsonResult(dt).ToJson();
+                context.Response.Write(jsonStr);
+            }
+				//每小时产量折线图
+				if (context.Request["m"].ToString() == "h")
+            {
+                string sqlStr = @"SELECT
+									CASE 
+									WHEN T.CREATETIME = 06 THEN '06-07'
+									WHEN T.CREATETIME = 07 THEN '07-08'
+									WHEN T.CREATETIME = 08 THEN '08-09'
+									WHEN T.CREATETIME = 09 THEN '09-10'
+									WHEN T.CREATETIME = 10 THEN '10-11'
+									WHEN T.CREATETIME = 11 THEN '11-12'
+									WHEN T.CREATETIME = 12 THEN '12-13'
+									WHEN T.CREATETIME = 13 THEN '13-14'
+									WHEN T.CREATETIME = 14 THEN '14-15'
+									WHEN T.CREATETIME = 15 THEN '15-16'
+									WHEN T.CREATETIME = 16 THEN '16-17'
+									WHEN T.CREATETIME = 17 THEN '17-18'
+									WHEN T.CREATETIME = 18 THEN '18-19'
+									WHEN T.CREATETIME = 19 THEN '19-20'
+									ELSE
+										'00-00'
+								END AS 日期,
+									CASE
+									WHEN TT.改洗数量 IS NULL THEN
+										0
+									ELSE
+										TT.改洗数量 
+								END  AS 改洗数量,
+								TT2.预期产量
+								FROM
+									(
+									SELECT
+										0 改洗数量,
+										'06' AS CREATETIME 
+									FROM
+										DUAL UNION ALL
+									SELECT
+										0 改洗数量,
+										'07' AS CREATETIME 
+									FROM
+										DUAL UNION ALL
+									SELECT
+										0 改洗数量,
+										'08' AS CREATETIME 
+									FROM
+										DUAL UNION ALL
+									SELECT
+										0 改洗数量,
+										'09' AS CREATETIME 
+									FROM
+										DUAL UNION ALL
+									SELECT
+										0 改洗数量,
+										'10' AS CREATETIME 
+									FROM
+										DUAL UNION ALL
+									SELECT
+										0 改洗数量,
+										'11' AS CREATETIME 
+									FROM
+										DUAL UNION ALL
+									SELECT
+										0 改洗数量,
+										'12' AS CREATETIME 
+									FROM
+										DUAL UNION ALL
+									SELECT
+										0 改洗数量,
+										'13' AS CREATETIME 
+									FROM
+										DUAL UNION ALL
+									SELECT
+										0 改洗数量,
+										'14' AS CREATETIME 
+									FROM
+										DUAL UNION ALL
+									SELECT
+										0 改洗数量,
+										'15' AS CREATETIME 
+									FROM
+										DUAL UNION ALL
+									SELECT
+										0 改洗数量,
+										'16' AS CREATETIME 
+									FROM
+										DUAL UNION ALL
+									SELECT
+										0 改洗数量,
+										'17' AS CREATETIME 
+									FROM
+										DUAL UNION ALL
+									SELECT
+										0 改洗数量,
+										'18' AS CREATETIME 
+									FROM
+										DUAL UNION ALL
+									SELECT
+										0 改洗数量,
+										'19' AS CREATETIME 
+									FROM
+										DUAL 
+									) T
+									FULL JOIN (
+									SELECT
+										T2.CREATETIME,
+										COUNT( * ) 改洗数量 
+									FROM
+										(
+										SELECT
+											SUBSTR( TO_CHAR( TPP.CREATETIME, 'yyyy-mm-dd hh24:mi:ss' ), 12, 2 ) AS CREATETIME 
+										FROM
+											TP_PM_PRODUCTIONDATA TPP 
+										WHERE
+											TPP.PROCEDUREID IN ( 94 ) 
+											AND TPP.VALUEFLAG = 1 
+											AND TPP.CREATETIME >= trunc( SYSDATE ) 
+										) T2 
+									GROUP BY
+										T2.CREATETIME 
+									ORDER BY
+									T2.CREATETIME 
+									) TT ON T.CREATETIME = TT.CREATETIME
+									FULL JOIN (
+									SELECT
+										0 预期产量,
+										'06' AS CREATETIME 
+									FROM
+										DUAL UNION ALL
+									SELECT
+										140 预期产量,
+										'07' AS CREATETIME 
+									FROM
+										DUAL UNION ALL
+									SELECT
+										140 预期产量,
+										'08' AS CREATETIME 
+									FROM
+										DUAL UNION ALL
+									SELECT
+										140 预期产量,
+										'09' AS CREATETIME 
+									FROM
+										DUAL UNION ALL
+									SELECT
+										140 预期产量,
+										'10' AS CREATETIME 
+									FROM
+										DUAL UNION ALL
+									SELECT
+										140 预期产量,
+										'11' AS CREATETIME 
+									FROM
+										DUAL UNION ALL
+									SELECT
+										70 预期产量,
+										'12' AS CREATETIME 
+									FROM
+										DUAL UNION ALL
+									SELECT
+										140 预期产量,
+										'13' AS CREATETIME 
+									FROM
+										DUAL UNION ALL
+									SELECT
+										140 预期产量,
+										'14' AS CREATETIME 
+									FROM
+										DUAL UNION ALL
+									SELECT
+										140 预期产量,
+										'15' AS CREATETIME 
+									FROM
+										DUAL UNION ALL
+									SELECT
+										140 预期产量,
+										'16' AS CREATETIME 
+									FROM
+										DUAL UNION ALL
+									SELECT
+										70 预期产量,
+										'17' AS CREATETIME 
+									FROM
+										DUAL UNION ALL
+									SELECT
+										140 预期产量,
+										'18' AS CREATETIME 
+									FROM
+										DUAL UNION ALL
+									SELECT
+										140 预期产量,
+										'19' AS CREATETIME 
+									FROM
+										DUAL s
+									) TT2 ON T.CREATETIME = TT2.CREATETIME";
+                //直接获取不分页数据
+                DataTable dt = conn.ExecuteDatatable(sqlStr);
+                string jsonStr = new JsonResult(dt).ToJson();
+                context.Response.Write(jsonStr);
+            }
+				//工号产量柱状图
+				if (context.Request["m"].ToString() == "cl")
+            {
+                string sqlStr = @"SELECT
+										TMU.USERCODE 工号,
+										COUNT( * ) 产量 
+									FROM
+										TP_PM_PRODUCTIONDATA TPP
+										LEFT JOIN TP_MST_USER TMU ON TPP.CREATEUSERID = TMU.USERID 
+									WHERE
+										TPP.PROCEDUREID IN (94) 
+										AND TPP.CREATETIME >= trunc( SYSDATE ) 
+										AND TPP.VALUEFLAG = 1 
+									GROUP BY
+										TMU.USERCODE";
+                //直接获取不分页数据
+                DataTable dt = conn.ExecuteDatatable(sqlStr);
+                string jsonStr = new JsonResult(dt).ToJson();
+                context.Response.Write(jsonStr);
+            }
+                //成型缺陷扇形图
+                if (context.Request["m"].ToString() == "defect")
+            {
+                string sqlStr = @"SELECT
+										T.name AS 缺陷名称,
+										T.count  AS 数量
+									FROM
+									(SELECT
+										TMD.S_name name,
+										COUNT( * ) count
+									FROM
+										TP_PM_SEMICHECKDEFECT TPSD
+										LEFT JOIN TP_PM_SEMICHECK TPS ON TPSD.SEMICHECKID = TPS.SEMICHECKID
+										LEFT JOIN TP_MST_DEFECT TMD ON TPSD.DEFECTCODE = TMD.DEFECTCODE 
+										--LEFT JOIN TP_MST_DEFECT TMD ON TPSD.DEFECTID = TMD.DEFECTID
+										LEFT JOIN TP_PM_GROUTINGDAILYDETAIL PGD ON PGD.BARCODE = TPS.BARCODE
+										LEFT JOIN TP_PC_GROUTINGLINE TPGL ON TPGL.GROUTINGLINEID = PGD.GROUTINGLINEID 
+									WHERE
+										TPSD.CREATETIME >= TRUNC( SYSDATE ) 
+										AND ( SUBSTR( TPGL.GROUTINGLINENAME, 1, 3 ) = 'C05' OR SUBSTR( TPGL.GROUTINGLINECODE, 1, 3 ) = 'C06' ) 
+										AND TPS.PROCEDUREID IN (83,88,92,118,93)
+									GROUP BY
+										TMD.S_name 
+									ORDER BY
+										COUNT( * ) DESC)T
+										WHERE ROWNUM < 4";
+                //直接获取不分页数据
+                DataTable dt = conn.ExecuteDatatable(sqlStr);
+                string jsonStr = new JsonResult(dt).ToJson();
+                context.Response.Write(jsonStr);
+            }
+				//半检缺陷扇形图
+                if (context.Request["m"].ToString() == "defectb")
+            {
+                string sqlStr = @"SELECT
+	                                    T.S_NAME AS 缺陷名称,
+	                                    T.数量 
+                                    FROM
+	                                    (
+	                                    SELECT
+		                                    TMD.S_NAME,
+		                                    count( DISTINCT BARCODE ) AS 数量 
+	                                    FROM
+		                                    TP_PM_DEFECT TPD
+		                                    LEFT JOIN TP_MST_DEFECT TMD ON TPD.DEFECTID = TMD.DEFECTID 
+	                                    WHERE
+		                                    TPD.CREATETIME >= TRUNC( SYSDATE )
+		                                    AND TMD.DEFECTTYPEID IN ( 15,16,18,4 ) 
+											AND TPD.DEFECTPROCEDUREID IN (118, 92, 88,91,93)
+	                                    GROUP BY
+		                                    TMD.S_NAME 
+	                                    ORDER BY
+		                                    count( * ) DESC 
+	                                    ) T 
+                                    WHERE
+	                                    ROWNUM < 4";
+                //直接获取不分页数据
+                DataTable dt = conn.ExecuteDatatable(sqlStr);
+                string jsonStr = new JsonResult(dt).ToJson();
+                context.Response.Write(jsonStr);
+            }
+                //一检折线图
+                if (context.Request["m"].ToString() == "zx")
+            {
+                string sqlStr = @"SELECT
+									CASE
+										WHEN
+											T4.出窑数 = 0 THEN
+												'100%' ELSE TO_CHAR( TRUNC( T4.成检合格 / T4.出窑数, 4 ) * 100, '990.00' ) || '%' 
+												END AS 改洗合格率,
+											T4.出窑数,
+											SUBSTR( T4.CREATETIME, 5, 2 )||'.'||SUBSTR( T4.CREATETIME, 7, 2 ) AS 日期 
+										FROM
+											(
+											SELECT
+												T.出窑数,
+												T.出窑数 - ( CASE WHEN T2.成检不合格数 IS NULL THEN 0 ELSE T2.成检不合格数 END ) AS 成检合格,
+												T.CREATETIME 
+											FROM
+												(--出窑数
+												SELECT
+												CASE
+													WHEN
+														T2.出窑数 IS NULL THEN
+															0 ELSE T2.出窑数 
+														END 出窑数,
+										T1.CREATETIME CREATETIME 
+									FROM
+										(
+										SELECT
+											0 出窑数,
+											to_char( ( TRUNC( SYSDATE - 6 ) + ROWNUM - 1 ), 'yyyymmdd' ) AS CREATETIME 
+										FROM
+											DUAL CONNECT BY ROWNUM <= 7 
+										ORDER BY
+											to_char( ( TRUNC( SYSDATE - 6 ) + ROWNUM - 1 ), 'yyyymmdd' ) DESC 
+										) T1
+										LEFT JOIN (
+										SELECT
+											出窑数,
+											CREATETIME 
+										FROM
+											(
+											SELECT DISTINCT
+											CASE
+												WHEN
+													COUNT( TPPD.BARCODE ) IS NULL THEN
+														0 ELSE COUNT( TPPD.BARCODE ) 
+													END 出窑数,
+										to_char( TPPD.CREATETIME, 'yyyymmdd' ) AS CREATETIME 
+									FROM
+										TP_PM_PRODUCTIONDATA TPPD
+										LEFT JOIN (
+												SELECT
+													TPPD.BARCODE,TPPD.CREATETIME
+												FROM
+													TP_PM_PRODUCTIONDATA TPPD
+													LEFT JOIN TP_PM_GROUTINGDAILYDETAIL PGD ON PGD.BARCODE = TPPD.BARCODE
+													LEFT JOIN TP_PC_GROUTINGLINE TPGL ON TPGL.GROUTINGLINEID = PGD.GROUTINGLINEID 
+												WHERE
+													TPPD.PROCEDUREID IN (94) 
+													--AND TPPD.CREATETIME >= trunc( SYSDATE - 6 ) 
+													AND TPPD.VALUEFLAG = 1
+													AND ( SUBSTR( TPGL.GROUTINGLINENAME, 1, 3 ) = 'C05' OR SUBSTR( TPGL.GROUTINGLINECODE, 1, 3 ) = 'C06' ) 
+													AND TPGL.TESTFLAG = 0 
+													AND TPPD.ISREFIRE = 0
+												) TPPB
+												ON TPPB.BARCODE = TPPD.BARCODE
+										LEFT JOIN TP_PM_GROUTINGDAILYDETAIL PGD ON PGD.BARCODE = TPPD.BARCODE
+										LEFT JOIN TP_PC_GROUTINGLINE TPGL ON TPGL.GROUTINGLINEID = PGD.GROUTINGLINEID 
+									WHERE
+										TPPD.PROCEDUREID IN ( 104 ) 
+										AND PGD.TESTFLAG = 0 
+										AND TPPD.ISREFIRE = 0
+										AND ( SUBSTR( TPGL.GROUTINGLINENAME, 1, 3 ) = 'C05' OR SUBSTR( TPGL.GROUTINGLINECODE, 1, 3 ) = 'C06' ) 
+										AND TPPD.CREATETIME >= trunc( SYSDATE - 6 ) 
+										AND TPPD.VALUEFLAG = 1 
+									GROUP BY
+										to_char( TPPD.CREATETIME, 'yyyymmdd' ) 
+									ORDER BY
+										to_char( TPPD.CREATETIME, 'yyyymmdd' ) DESC 
+										) 
+										) T2 ON T1.CREATETIME = T2.CREATETIME 
+									ORDER BY
+										T1.CREATETIME DESC 
+										) T
+										LEFT JOIN (
+										SELECT
+										CASE
+											WHEN
+												T2.成检不合格数 IS NULL THEN
+													0 ELSE T2.成检不合格数 
+												END 成检不合格数,
+										T1.CREATETIME CREATETIME 
+									FROM
+										(
+										SELECT
+											0 成检不合格数,
+											to_char( ( TRUNC( SYSDATE - 6 ) + ROWNUM - 1 ), 'yyyymmdd' ) AS CREATETIME 
+										FROM
+											DUAL CONNECT BY ROWNUM <= 7 
+										ORDER BY	
+											to_char( ( TRUNC( SYSDATE - 6 ) + ROWNUM - 1 ), 'yyyymmdd' ) DESC 
+										) T1
+										LEFT JOIN (
+										SELECT
+											成检不合格数,
+											CREATETIME 
+										FROM
+											(
+											SELECT DISTINCT
+												NVL( COUNT( DISTINCT TPPD.BARCODE ), 0 ) 成检不合格数,--成检本烧最后一次检验判断为次品和重烧数
+												to_char( TPPD.CREATETIME, 'yyyymmdd' ) AS CREATETIME 
+											FROM
+												TP_PM_PRODUCTIONDATA TPPD
+												LEFT JOIN TP_PM_DEFECT TPD ON TPPD.BARCODE = TPD.BARCODE
+													LEFT JOIN TP_PM_GROUTINGDAILYDETAIL PGD ON PGD.BARCODE = TPPD.BARCODE
+													LEFT JOIN TP_PC_GROUTINGLINE TPGL ON TPGL.GROUTINGLINEID = PGD.GROUTINGLINEID 
+												WHERE
+													TPD.DEFECTPROCEDUREID = 94 
+													AND TPPD.CHECKBATCHNO = 1
+													AND TPPD.ISREFIRE IN (0)
+													AND TPPD.GOODSLEVELID IN (6,7)
+													AND TPD.DEFECTNAME IS NOT NULL
+													AND TPPD.CREATETIME >= trunc( SYSDATE - 6 )
+													AND TPPD.VALUEFLAG = 1
+													AND TPGL.TESTFLAG = 0 
+													AND ( SUBSTR( TPGL.GROUTINGLINENAME, 1, 3 ) = 'C05' OR SUBSTR( TPGL.GROUTINGLINECODE, 1, 3 ) = 'C06' ) 
+													GROUP BY
+												to_char( TPPD.CREATETIME, 'yyyymmdd' ) 
+											ORDER BY
+												to_char( TPPD.CREATETIME, 'yyyymmdd' ) DESC 
+											) 
+										) T2 ON T1.CREATETIME = T2.CREATETIME 
+									ORDER BY
+										T1.CREATETIME DESC 
+										) T2 ON T2.CREATETIME = T.CREATETIME
+									ORDER BY
+										T2.CREATETIME DESC
+										) T4
+									ORDER BY
+										CREATETIME";
+                //直接获取不分页数据
+                DataTable dt = conn.ExecuteDatatable(sqlStr);
+                string jsonStr = new JsonResult(dt).ToJson();
+                context.Response.Write(jsonStr);
+            }
+
+                //产线信息
+
+                if (context.Request["m"].ToString() == "MonthTable")
+            {
+                string sqlStr = @"				SELECT
+												B.产品型号 AS 产品型号,
+												B.成型产线 AS 成型产线,
+												B.检验数量 AS 检验数量,
+												B.合格品数 AS 合格品数,
+												B.返工品数 AS 返工品数,
+												B.返工合格数 AS 返工合格数,
+												B.综合合格数 AS 综合合格数,
+												TO_CHAR((B.合格品数/B.检验数量)* 100,'9,990.00') || '%' AS 一次合格率,
+												CASE WHEN B.返工合格数 = 0 AND B.返工品数 > 0 THEN '0%'
+														 WHEN B.返工合格数 > 0 AND B.返工品数 = 0 THEN '100%' 
+														 WHEN B.返工合格数 > 0 AND B.返工品数 > 0 THEN  TO_CHAR((B.返工合格数/B.返工品数)* 100,'9,990.00') || '%' ELSE '0%'  END AS 返工合格率,
+												TO_CHAR((B.综合合格数/B.检验数量)* 100,'9,990.00') || '%' AS 综合合格率
+												FROM(
+									SELECT
+										--decode( H.gid, 7, '总计', 3, '合计【' || H.产品型号 || '】', 0, H.产品型号, '--' ) 产品型号,
+										decode( H.gid, 1, '小计', 0, H.产品型号, '总计' ) 产品型号,
+										decode( H.gid, 1, '--', 0, H.成型产线, '--' ) 成型产线,
+										decode( H.gid, 1, H.检验数量, 0, H.检验数量, H.检验数量 ) 检验数量,
+										decode( H.gid, 1, H.合格品数, 0, H.合格品数, H.合格品数 ) 合格品数,
+										decode( H.gid, 1, H.返工品数, 0, H.返工品数, H.返工品数 ) 返工品数,
+										decode( H.gid, 1, H.返工合格数, 0, H.返工合格数, H.返工合格数 ) 返工合格数,
+										decode( H.gid, 1, H.综合合格数, 0, H.综合合格数, H.综合合格数 ) 综合合格数
+									FROM
+										(
+									SELECT
+										grouping_id(Z.产品型号, Z.成型产线) gid,
+										Z.产品型号,
+										Z.成型产线,
+										SUM(Z.检验数量) 检验数量,
+										SUM(Z.合格品数) 合格品数,
+										SUM(Z.返工品数) 返工品数,
+										SUM(Z.返工合格数) 返工合格数,
+										SUM(Z.综合合格数) 综合合格数
+									FROM
+										(
+										SELECT
+											B.GOODSCODE AS 产品型号,
+											B.GROUTINGLINECODE AS 成型产线,
+											B.检验 AS 检验数量,
+											B.检验 - B.返工 - B.一次不合格 AS 合格品数,
+											B.返工 AS 返工品数,
+											B.返工不合格 AS 返工不合格数,
+											B.返工 - B.返工不合格 AS 返工合格数,
+											B.检验 - B.一次不合格 - B.二次不合格 AS 综合合格数 
+										FROM
+											(
+											SELECT
+												TPPD.GOODSCODE,
+												TPGL.GROUTINGLINECODE,
+												COUNT( TPPD.BARCODE ) 检验,
+											CASE
+				
+													WHEN BJFG.count IS NULL THEN
+													0 ELSE BJFG.count 
+												END 返工,
+									CASE
+	
+										WHEN BJFP.count IS NULL THEN
+										0 ELSE BJFP.count 
+										END 一次不合格,
+									CASE
+	
+										WHEN BJFGBH.count IS NULL THEN
+										0 ELSE BJFGBH.count 
+										END 返工不合格,
+									CASE
+	
+										WHEN BJFFP.count IS NULL THEN
+										0 ELSE BJFFP.count 
+										END 二次不合格 
+									FROM
+										TP_PM_PRODUCTIONDATA TPPD
+										LEFT JOIN TP_PC_GROUTINGLINE TPGL ON TPPD.GROUTINGLINEID = TPGL.GROUTINGLINEID
+										LEFT JOIN (--半检一检返工数
+										SELECT
+											T.GOODSCODE,
+											T.GROUTINGLINECODE,
+											COUNT( T.BARCODE ) count 
+										FROM
+											(
+											SELECT DISTINCT
+												TPPD.GOODSCODE,
+												TPGL.GROUTINGLINECODE,
+												TPS.BARCODE 
+											FROM
+												TP_PM_SEMICHECK TPS
+												LEFT JOIN TP_PM_PRODUCTIONDATA TPPD ON TPS.BARCODE = TPPD.BARCODE
+												LEFT JOIN TP_PC_GROUTINGLINE TPGL ON TPPD.GROUTINGLINEID = TPGL.GROUTINGLINEID 
+											WHERE
+												TPS.SEMICHECKTYPE = 1 
+												AND TPPD.PROCEDUREID IN ( 118, 92, 88 ) 
+												AND TPS.CREATETIME >= TRUNC( SYSDATE ) 
+												AND TPGL.TESTFLAG = 0 
+												AND ( SUBSTR( TPGL.GROUTINGLINENAME, 1, 3 ) = 'C05' OR SUBSTR( TPGL.GROUTINGLINECODE, 1, 3 ) = 'C06' ) 
+												AND TPS.VALUEFLAG = 1 
+											) T 
+										GROUP BY
+											T.GOODSCODE,
+											T.GROUTINGLINECODE 
+										) BJFG ON BJFG.GOODSCODE = TPPD.GOODSCODE 
+										AND BJFG.GROUTINGLINECODE = TPGL.GROUTINGLINECODE
+										LEFT JOIN (--半检一检返工不合格数
+										SELECT
+											T.GOODSCODE,
+											T.GROUTINGLINECODE,
+											COUNT( T.BARCODE ) count 
+										FROM
+											(
+											SELECT DISTINCT
+												TPPD.GOODSCODE,
+												TPGL.GROUTINGLINECODE,
+												TPS.BARCODE 
+											FROM
+												TP_PM_SEMICHECK TPS
+												LEFT JOIN TP_PM_PRODUCTIONDATA TPPD ON TPS.BARCODE = TPPD.BARCODE
+												LEFT JOIN TP_PC_GROUTINGLINE TPGL ON TPPD.GROUTINGLINEID = TPGL.GROUTINGLINEID 
+											WHERE
+												TPS.RESEMICHECKTYPE IN (2) 
+												AND TPPD.PROCEDUREID IN ( 118, 92, 88 ) 
+												AND TPS.CREATETIME >= TRUNC( SYSDATE ) 
+												AND TPGL.TESTFLAG = 0 
+												AND ( SUBSTR( TPGL.GROUTINGLINENAME, 1, 3 ) = 'C05' OR SUBSTR( TPGL.GROUTINGLINECODE, 1, 3 ) = 'C06' ) 
+											) T 
+										GROUP BY
+											T.GOODSCODE,
+											T.GROUTINGLINECODE 
+										ORDER BY
+											T.GOODSCODE 
+										) BJFGBH ON BJFGBH.GOODSCODE = TPPD.GOODSCODE 
+										AND BJFGBH.GROUTINGLINECODE = TPGL.GROUTINGLINECODE
+										LEFT JOIN (--半检一次不合格
+										SELECT
+											T.GOODSCODE,
+											T.GROUTINGLINECODE,
+											COUNT( T.BARCODE ) count 
+										FROM
+											(
+											SELECT DISTINCT
+												TPPD.GOODSCODE,
+												TPGL.GROUTINGLINECODE,
+												TPS.BARCODE 
+											FROM
+												TP_PM_SEMICHECK TPS
+												FULL JOIN TP_PM_PRODUCTIONDATA TPPD ON TPS.BARCODE = TPPD.BARCODE
+												LEFT JOIN TP_PC_GROUTINGLINE TPGL ON TPPD.GROUTINGLINEID = TPGL.GROUTINGLINEID 
+											WHERE
+												TPS.SEMICHECKTYPE = 2 
+												AND TPPD.PROCEDUREID IN ( 118, 92, 88 ) 
+												AND TPS.CREATETIME >= TRUNC( SYSDATE ) 
+												AND TPGL.TESTFLAG = 0 
+												AND ( SUBSTR( TPGL.GROUTINGLINENAME, 1, 3 ) = 'C05' OR SUBSTR( TPGL.GROUTINGLINECODE, 1, 3 ) = 'C06' ) 
+												AND TPS.VALUEFLAG = 1 
+											) T 
+										GROUP BY
+											T.GOODSCODE,
+											T.GROUTINGLINECODE 
+										) BJFP ON BJFP.GOODSCODE = TPPD.GOODSCODE 
+										AND BJFP.GROUTINGLINECODE = TPGL.GROUTINGLINECODE
+										LEFT JOIN (--半检二次不合格
+										SELECT
+											T.GOODSCODE,
+											T.GROUTINGLINECODE,
+											COUNT( T.BARCODE ) count 
+										FROM
+											(
+											SELECT DISTINCT
+												TPPD.GOODSCODE,
+												TPGL.GROUTINGLINECODE,
+												TPS.BARCODE 
+											FROM
+												TP_PM_SEMICHECK TPS
+												FULL JOIN TP_PM_PRODUCTIONDATA TPPD ON TPS.BARCODE = TPPD.BARCODE
+												LEFT JOIN TP_PC_GROUTINGLINE TPGL ON TPPD.GROUTINGLINEID = TPGL.GROUTINGLINEID 
+												WHERE--TPS.GOODSLEVELID IN (13)
+												TPS.RESEMICHECKTYPE = 2 
+												AND TPPD.PROCEDUREID IN ( 118, 92, 88 ) 
+												AND TPS.CREATETIME >= TRUNC( SYSDATE ) 
+												AND TPGL.TESTFLAG = 0 
+												AND ( SUBSTR( TPGL.GROUTINGLINENAME, 1, 3 ) = 'C05' OR SUBSTR( TPGL.GROUTINGLINECODE, 1, 3 ) = 'C06' ) 
+												AND TPS.VALUEFLAG = 1 
+											) T 
+										GROUP BY
+											T.GOODSCODE,
+											T.GROUTINGLINECODE 
+										) BJFFP ON BJFP.GOODSCODE = TPPD.GOODSCODE 
+										AND BJFFP.GROUTINGLINECODE = TPGL.GROUTINGLINECODE 
+									WHERE
+										TPPD.CREATETIME >= TRUNC( SYSDATE ) 
+										AND TPPD.PROCEDUREID IN ( 118, 92, 88 ) 
+										AND TPGL.TESTFLAG = 0 
+										AND TPPD.VALUEFLAG = 1 
+										AND ( SUBSTR( TPGL.GROUTINGLINECODE, 1, 3 ) = 'C05' OR SUBSTR( TPGL.GROUTINGLINECODE, 1, 3 ) = 'C06' ) 
+									GROUP BY
+										TPPD.GOODSCODE,
+										TPGL.GROUTINGLINECODE,
+										BJFG.count,
+										BJFP.count,
+										BJFGBH.count,
+										BJFFP.count 
+									ORDER BY
+										TPPD.GOODSCODE 
+										) B 
+										) Z
+										GROUP BY GROUPING SETS((Z.产品型号),(Z.产品型号,Z.成型产线, Z.检验数量,Z.合格品数, Z.返工品数, Z.返工合格数,Z.综合合格数),())
+										)H) B WHERE B.合格品数 >0
+											 ";
+                //直接获取不分页数据
+                DataTable dt = conn.ExecuteDatatable(sqlStr);
+                   int a = 1;
+                string jsonStr = new JsonResult(dt).ToJson();
+                context.Response.Write(jsonStr);
+            }
+
+				//二检产线信息
+				 if (context.Request["m"].ToString() == "MonthTabletwo")
+            {
+                string sqlStr = @"				SELECT
+															B.产品型号 AS 产品型号,
+															B.成型产线 AS 成型产线,
+															B.检验数量 AS 检验数量,
+															B.合格品数 AS 合格品数,
+															B.返工品数 AS 返工品数,
+															B.返工合格数 AS 返工合格数,
+															B.综合合格数 AS 综合合格数,
+															TO_CHAR((B.合格品数/B.检验数量)* 100,'9,990.00') || '%' AS 一次合格率,
+															CASE WHEN B.返工合格数 = 0 AND B.返工品数 > 0 THEN '0%'
+																	 WHEN B.返工合格数 > 0 AND B.返工品数 = 0 THEN '100%' 
+																	 WHEN B.返工合格数 > 0 AND B.返工品数 > 0 THEN  TO_CHAR((B.返工合格数/B.返工品数)* 100,'9,990.00') || '%' ELSE '0%'  END AS 返工合格率,
+															TO_CHAR((B.综合合格数/B.检验数量)* 100,'9,990.00') || '%' AS 综合合格率
+															FROM(
+												SELECT
+													--decode( H.gid, 7, '总计', 3, '合计【' || H.产品型号 || '】', 0, H.产品型号, '--' ) 产品型号,
+													decode( H.gid, 1, '小计', 0, H.产品型号, '总计' ) 产品型号,
+													decode( H.gid, 1, '--', 0, H.成型产线, '--' ) 成型产线,
+													decode( H.gid, 1, H.检验数量, 0, H.检验数量, H.检验数量 ) 检验数量,
+													decode( H.gid, 1, H.合格品数, 0, H.合格品数, H.合格品数 ) 合格品数,
+													decode( H.gid, 1, H.返工品数, 0, H.返工品数, H.返工品数 ) 返工品数,
+													decode( H.gid, 1, H.返工合格数, 0, H.返工合格数, H.返工合格数 ) 返工合格数,
+													decode( H.gid, 1, H.综合合格数, 0, H.综合合格数, H.综合合格数 ) 综合合格数
+												FROM
+													(
+												SELECT
+													grouping_id(Z.产品型号, Z.成型产线) gid,
+													Z.产品型号,
+													Z.成型产线,
+													SUM(Z.检验数量) 检验数量,
+													SUM(Z.合格品数) 合格品数,
+													SUM(Z.返工品数) 返工品数,
+													SUM(Z.返工合格数) 返工合格数,
+													SUM(Z.综合合格数) 综合合格数
+												FROM
+													(
+													SELECT
+														B.GOODSCODE AS 产品型号,
+														B.GROUTINGLINECODE AS 成型产线,
+														B.检验 AS 检验数量,
+														B.检验 - B.返工 - B.一次不合格 AS 合格品数,
+														B.返工 AS 返工品数,
+														B.返工 - B.二次不合格 AS 返工合格数,
+														B.检验 - B.一次不合格 - B.二次不合格 AS 综合合格数 
+													FROM
+														(
+														SELECT
+															TPPD.GOODSCODE,
+															TPGL.GROUTINGLINECODE,
+															COUNT( TPPD.BARCODE ) 检验,
+														CASE
+				
+																WHEN BJFG.count IS NULL THEN
+																0 ELSE BJFG.count 
+															END 返工,
+												CASE
+	
+													WHEN BJFP.count IS NULL THEN
+													0 ELSE BJFP.count 
+													END 一次不合格,
+												CASE
+	
+													WHEN BJFGH.count IS NULL THEN
+													0 ELSE BJFGH.count 
+													END 返工合格,
+												CASE
+	
+													WHEN BJFFP.count IS NULL THEN
+													0 ELSE BJFFP.count 
+													END 二次不合格 
+												FROM
+													TP_PM_PRODUCTIONDATA TPPD
+													LEFT JOIN TP_PC_GROUTINGLINE TPGL ON TPPD.GROUTINGLINEID = TPGL.GROUTINGLINEID
+													LEFT JOIN (--半检一检返工数
+													SELECT
+														T.GOODSCODE,
+														T.GROUTINGLINECODE,
+														COUNT( T.BARCODE ) count 
+													FROM
+														(
+														SELECT DISTINCT
+															TPPD.GOODSCODE,
+															TPGL.GROUTINGLINECODE,
+															TPS.BARCODE 
+														FROM
+															TP_PM_SEMICHECK TPS
+															LEFT JOIN TP_PM_PRODUCTIONDATA TPPD ON TPS.BARCODE = TPPD.BARCODE
+															LEFT JOIN TP_PC_GROUTINGLINE TPGL ON TPPD.GROUTINGLINEID = TPGL.GROUTINGLINEID 
+														WHERE
+															TPS.SEMICHECKTYPE = 1 
+															AND TPS.PROCEDUREID IN ( 117 ) 
+															AND TPS.CREATETIME >= TRUNC( SYSDATE ) 
+															AND TPGL.TESTFLAG = 0 
+															AND ( SUBSTR( TPGL.GROUTINGLINENAME, 1, 3 ) = 'C05' OR SUBSTR( TPGL.GROUTINGLINECODE, 1, 3 ) = 'C06' ) 
+															AND TPS.VALUEFLAG = 1 
+														) T 
+													GROUP BY
+														T.GOODSCODE,
+														T.GROUTINGLINECODE 
+													) BJFG ON BJFG.GOODSCODE = TPPD.GOODSCODE 
+													AND BJFG.GROUTINGLINECODE = TPGL.GROUTINGLINECODE
+													LEFT JOIN (--半检二检返工合格数
+													SELECT
+														T.GOODSCODE,
+														T.GROUTINGLINECODE,
+														COUNT( T.BARCODE ) count 
+													FROM
+														(
+														SELECT DISTINCT
+															TPPD.GOODSCODE,
+															TPGL.GROUTINGLINECODE,
+															TPS.BARCODE 
+														FROM
+															TP_PM_SEMICHECK TPS
+															LEFT JOIN TP_PM_PRODUCTIONDATA TPPD ON TPS.BARCODE = TPPD.BARCODE
+															LEFT JOIN TP_PC_GROUTINGLINE TPGL ON TPPD.GROUTINGLINEID = TPGL.GROUTINGLINEID 
+														WHERE
+															TPS.RESEMICHECKTYPE = 1 
+															AND TPS.PROCEDUREID IN ( 117 ) 
+															AND TPS.CREATETIME >= TRUNC( SYSDATE ) 
+															AND TPGL.TESTFLAG = 0 
+															AND ( SUBSTR( TPGL.GROUTINGLINENAME, 1, 3 ) = 'C05' OR SUBSTR( TPGL.GROUTINGLINECODE, 1, 3 ) = 'C06' ) 
+														) T 
+													GROUP BY
+														T.GOODSCODE,
+														T.GROUTINGLINECODE 
+													ORDER BY
+														T.GOODSCODE 
+													) BJFGH ON BJFGH.GOODSCODE = TPPD.GOODSCODE 
+													AND BJFGH.GROUTINGLINECODE = TPGL.GROUTINGLINECODE
+													LEFT JOIN (--半检一次不合格
+													SELECT
+														T.GOODSCODE,
+														T.GROUTINGLINECODE,
+														COUNT( T.BARCODE ) count 
+													FROM
+														(
+														SELECT DISTINCT
+															TPPD.GOODSCODE,
+															TPGL.GROUTINGLINECODE,
+															TPS.BARCODE 
+														FROM
+															TP_PM_SEMICHECK TPS
+															FULL JOIN TP_PM_PRODUCTIONDATA TPPD ON TPS.BARCODE = TPPD.BARCODE
+															LEFT JOIN TP_PC_GROUTINGLINE TPGL ON TPPD.GROUTINGLINEID = TPGL.GROUTINGLINEID 
+														WHERE
+															TPS.SEMICHECKTYPE =2
+															AND TPS.PROCEDUREID IN ( 117 ) 
+															AND TPS.CREATETIME >= TRUNC( SYSDATE ) 
+															AND TPGL.TESTFLAG = 0 
+															AND ( SUBSTR( TPGL.GROUTINGLINENAME, 1, 3 ) = 'C05' OR SUBSTR( TPGL.GROUTINGLINECODE, 1, 3 ) = 'C06' ) 
+															AND TPS.VALUEFLAG = 1 
+														) T 
+													GROUP BY
+														T.GOODSCODE,
+														T.GROUTINGLINECODE 
+													) BJFP ON BJFP.GOODSCODE = TPPD.GOODSCODE 
+													AND BJFP.GROUTINGLINECODE = TPGL.GROUTINGLINECODE
+													LEFT JOIN (--半检二次不合格
+													SELECT
+														T.GOODSCODE,
+														T.GROUTINGLINECODE,
+														COUNT( T.BARCODE ) count 
+													FROM
+														(
+														SELECT DISTINCT
+															TPPD.GOODSCODE,
+															TPGL.GROUTINGLINECODE,
+															TPS.BARCODE 
+														FROM
+															TP_PM_SEMICHECK TPS
+															FULL JOIN TP_PM_PRODUCTIONDATA TPPD ON TPS.BARCODE = TPPD.BARCODE
+															LEFT JOIN TP_PC_GROUTINGLINE TPGL ON TPPD.GROUTINGLINEID = TPGL.GROUTINGLINEID 
+															WHERE--TPS.GOODSLEVELID IN (13)
+															TPS.RESEMICHECKTYPE = 2 
+															AND TPS.PROCEDUREID IN ( 117 ) 
+															AND TPS.CREATETIME >= TRUNC( SYSDATE ) 
+															AND TPGL.TESTFLAG = 0 
+															AND ( SUBSTR( TPGL.GROUTINGLINENAME, 1, 3 ) = 'C05' OR SUBSTR( TPGL.GROUTINGLINECODE, 1, 3 ) = 'C06' ) 
+															AND TPS.VALUEFLAG = 1 
+														) T 
+													GROUP BY
+														T.GOODSCODE,
+														T.GROUTINGLINECODE 
+													) BJFFP ON BJFP.GOODSCODE = TPPD.GOODSCODE 
+													AND BJFFP.GROUTINGLINECODE = TPGL.GROUTINGLINECODE 
+													WHERE
+													TPPD.CREATETIME >= TRUNC( SYSDATE ) 
+																									AND TPPD.PROCEDUREID IN ( 117 ) 
+																									AND TPGL.TESTFLAG = 0 
+																									AND TPPD.VALUEFLAG = 1 
+																									AND ( SUBSTR( TPGL.GROUTINGLINECODE, 1, 3 ) = 'C05' OR SUBSTR( TPGL.GROUTINGLINECODE, 1, 3 ) = 'C06' ) 
+												GROUP BY
+													TPPD.GOODSCODE,
+													TPGL.GROUTINGLINECODE,
+													BJFG.count,
+													BJFP.count,
+													BJFGH.count,
+													BJFFP.count 
+												ORDER BY
+													TPPD.GOODSCODE 
+													) B 
+													) Z
+													GROUP BY GROUPING SETS((Z.产品型号),(Z.产品型号,Z.成型产线, Z.检验数量,Z.合格品数, Z.返工品数, Z.返工合格数,Z.综合合格数),())
+													)H) B
+											 ";
+                //直接获取不分页数据
+                DataTable dt = conn.ExecuteDatatable(sqlStr);
+                string jsonStr = new JsonResult(dt).ToJson();
+                context.Response.Write(jsonStr);
+            }
+        }
+    }
+ 
+    public bool IsReusable {
+        get {
+            return false;
+        }
+    }
+
+}

+ 682 - 0
wwwroot/main/Procedure/test16/demo.html

@@ -0,0 +1,682 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+    <link rel="shortcut icon" href="/img/logo.png" />
+    <link rel="bookmark" href="/img/logo.png" />
+    <link href="/Plugins/animate/animate.min.css" rel="stylesheet" />
+    <link rel="stylesheet" href="../DashBoard.css?v3" />
+    <script src="/Plugins/jquery-3.4.1/jquery-3.4.1.min.js"></script>
+    <script src="/Plugins/animate/xanimate.js"></script>
+    <script src="/Plugins/xrequest/xrequest.min.js"></script>
+    <title>东科软件</title>
+</head>
+<body style="background-color:black;">
+
+    <div class="box_1920_1080">
+        <div class="box_title" style="display:flex;flex-direction:row;">
+            <div style="width:30%;text-align:left;"></div>
+            <div style="width: 40%; text-align: center; font-size: 38px; font-weight: 700">改洗车间看板</div>
+            <div style="width:30%;text-align:right;"><span class="box_title_loading" style="font-size:32px;" id="报表加载"></span></div>
+        </div>
+        <div class="box_body" style="display: flex; flex-direction: column;">
+            <div style="width:1840px;height:680px;flex-direction:row;">
+                <div style="width: 100%; height: 340px;">
+                    <div class="d-flex justify-content-center">
+                        <canvas id="canvasDayCL" style="-moz-user-select: none;-webkit-user-select: none;-ms-user-select: none; height:340px;width:100%"></canvas>
+                    </div>
+                </div>
+                <div style="width: 100%; height: 340px;">
+                    <div class="d-flex justify-content-center">
+                        <canvas id="canvasHourCL" style="-moz-user-select: none;-webkit-user-select: none;-ms-user-select: none; height:340px;width:100%"></canvas>
+                    </div>
+                </div>
+            </div>
+            <!--缺陷统计-->
+            <div style="width:1840px;height:230px;display:flex;flex-direction:row;">
+                <div style="width: 25%; height: 230px;">
+                    <div style="color:white;font-size:20px;font-weight:600; text-align:center">改洗七日趋势图</div>
+                    <canvas id="canvasDayZL" style="-moz-user-select: none; -webkit-user-select: none; -ms-user-select: none; height: 200px; width: 100%"></canvas>
+                </div>
+                <div style="width: 50%; height: 230px;">
+                    <div style="color:white;font-size:20px;font-weight:600; text-align:center">工号产量</div>
+                    <canvas id="canvasDayCLUser" style="-moz-user-select: none; -webkit-user-select: none; -ms-user-select: none; height: 280px; width: 100%; margin-top: -38px;"></canvas>
+                </div>
+                <div style="width: 25%; height: 230px; ">
+                    <div style="color:white;font-size:20px;font-weight:600; text-align:center;">毛坯库库存</div>
+                    <canvas id="canvasDefectKC" style="margin-top:15px; -moz-user-select: none; -webkit-user-select: none; -ms-user-select: none; height: 200px; width: 100%"></canvas>
+                </div>
+            </div>
+        </div>
+    </div>
+
+    <script>
+        var mainInterval;
+        var mainRowCount = 0;
+        var mainInterva2;
+        var mainRowCoun2 = 0;
+
+        function mainScroll() {
+            var scrollHeight = $("#dayTable").find("tr").outerHeight();
+            $("#dayTable").animate({ marginTop: -scrollHeight, }, 500,
+                function () {
+                    $(this).css({ marginTop: "0px", }).find("tr:first").appendTo(this);
+                    if (--mainRowCount == -1) loadMainTable();
+                }
+            );
+        }
+
+        function mainScrol2() {
+            var scrollHeight = $("#dayTabletwo").find("tr").outerHeight();
+            $("#dayTabletwo").animate({ marginTop: -scrollHeight, }, 500,
+                function () {
+                    $(this).css({ marginTop: "0px", }).find("tr:first").appendTo(this);
+                    if (--mainRowCoun2 == -1) loadMainTable1();
+                }
+            );
+        }
+
+        $(document).ready(function (){
+            initData();
+            doGetData = setInterval(function () { timeUpdate(); }, 5000);
+            ZxData();
+            setInterval(function () { ZxData(); }, 5000);
+            GxData();
+            setInterval(function () { GxData(); }, 5000);
+            ClData();
+            setInterval(function () { ClData(); }, 5000);
+            ZxDataH();
+            setInterval(function () { ZxDataH(); }, 5000);
+            DataKC();
+            setInterval(function () { DataKC(); }, 5000);
+            ZxData();
+            setInterval(function () { ZxData(); }, 5000);
+            
+        });
+
+        //近30日改洗数量
+        function GxData() {
+            $.get("demo.ashx?m=gx", function (data) {
+                var json = JSON.parse(data);
+                let a = [];
+                let b = [];
+                let c = [];
+                if (json["success"] == true) {
+                    var num = parseInt(json["rows"].length);
+                    for (var i = 0; i < num; i++) {
+                        a.push(parseFloat(json["rows"][i]["预期数量"]));
+                        b.push(json["rows"][i]["日期"]);
+                        c.push(parseFloat(json["rows"][i]["改洗数量"]));
+                    }
+                    window.DayCL.data.datasets[0].data = a;
+                    window.DayCL.data.datasets[1].data = c;
+                    window.DayCL.data.labels = b;
+                    window.DayCL.update();
+                }
+            });
+        }
+
+        //半检一件七日趋势图
+        function ZxData() {
+            $.get("demo.ashx?m=zx", function (data) {
+                var json = JSON.parse(data);
+                if (json["success"] == true) {
+                    var BJ1 = parseFloat(json["rows"][0]["改洗合格率"]);
+                    var BJ2 = parseFloat(json["rows"][1]["改洗合格率"]);
+                    var BJ3 = parseFloat(json["rows"][2]["改洗合格率"]);
+                    var BJ4 = parseFloat(json["rows"][3]["改洗合格率"]);
+                    var BJ5 = parseFloat(json["rows"][4]["改洗合格率"]);
+                    var BJ6 = parseFloat(json["rows"][5]["改洗合格率"]);
+                    var BJ7 = parseFloat(json["rows"][6]["改洗合格率"]);
+                    var day1 = json["rows"][0]["日期"];
+                    var day2 = json["rows"][1]["日期"];
+                    var day3 = json["rows"][2]["日期"];
+                    var day4 = json["rows"][3]["日期"];
+                    var day5 = json["rows"][4]["日期"];
+                    var day6 = json["rows"][5]["日期"];
+                    var day7 = json["rows"][6]["日期"];
+                    var count1 = parseFloat(json["rows"][0]["出窑数"]);
+                    var count2 = parseFloat(json["rows"][1]["出窑数"]);
+                    var count3 = parseFloat(json["rows"][2]["出窑数"]);
+                    var count4 = parseFloat(json["rows"][3]["出窑数"]);
+                    var count5 = parseFloat(json["rows"][4]["出窑数"]);
+                    var count6 = parseFloat(json["rows"][5]["出窑数"]);
+                    var count7 = parseFloat(json["rows"][6]["出窑数"]);
+                    window.DayZL.data.datasets[0].data = [BJ1, BJ2, BJ3, BJ4, BJ5, BJ6, BJ7];
+                    window.DayZL.data.datasets[1].data = [count1, count2, count3, count4, count5, count6, count7];
+                    window.DayZL.data.labels = [day1, day2, day3, day4, day5, day6, day7];
+                    window.DayZL.update();
+                }
+            });
+        }
+
+        //毛坯库库存
+        function DataKC() {
+            $.get("demo.ashx?m=kc", function (data) {
+                var json = JSON.parse(data);
+                if (json["success"] == true) {
+                    var count1 = parseFloat(json["rows"][0]["数量"]);
+                    var count2 = parseFloat(json["rows"][1]["数量"]);
+                    var goodtype1 = json["rows"][0]["产品类别"];
+                    var goodtype2 = json["rows"][1]["产品类别"];
+                    window.Defectkc.data.datasets[0].data = [count1, count2];
+                    window.Defectkc.data.labels = [goodtype1, goodtype2]
+                    window.Defectkc.update();
+                }
+            });
+        }
+
+        //每小时产量折线图
+        function ZxDataH() {
+            $.get("demo.ashx?m=h", function (data) {
+                var json = JSON.parse(data);
+                if (json["success"] == true) {
+                    var BJ1 = parseFloat(json["rows"][0]["改洗数量"]);
+                    var BJ2 = parseFloat(json["rows"][1]["改洗数量"]);
+                    var BJ3 = parseFloat(json["rows"][2]["改洗数量"]);
+                    var BJ4 = parseFloat(json["rows"][3]["改洗数量"]);
+                    var BJ5 = parseFloat(json["rows"][4]["改洗数量"]);
+                    var BJ6 = parseFloat(json["rows"][5]["改洗数量"]);
+                    var BJ7 = parseFloat(json["rows"][6]["改洗数量"]);
+                    var BJ8 = parseFloat(json["rows"][7]["改洗数量"]);
+                    var BJ9 = parseFloat(json["rows"][8]["改洗数量"]);
+                    var BJ10 = parseFloat(json["rows"][9]["改洗数量"]);
+                    var BJ11 = parseFloat(json["rows"][10]["改洗数量"]);
+                    var BJ12 = parseFloat(json["rows"][11]["改洗数量"]);
+                    var BJ13 = parseFloat(json["rows"][12]["改洗数量"]);
+                    var YQ1 = parseFloat(json["rows"][0]["预期产量"]);
+                    var YQ2 = parseFloat(json["rows"][1]["预期产量"]);
+                    var YQ3 = parseFloat(json["rows"][2]["预期产量"]);
+                    var YQ4 = parseFloat(json["rows"][3]["预期产量"]);
+                    var YQ5 = parseFloat(json["rows"][4]["预期产量"]);
+                    var YQ6 = parseFloat(json["rows"][5]["预期产量"]);
+                    var YQ7 = parseFloat(json["rows"][6]["预期产量"]);
+                    var YQ8 = parseFloat(json["rows"][7]["预期产量"]);
+                    var YQ9 = parseFloat(json["rows"][8]["预期产量"]);
+                    var YQ10 = parseFloat(json["rows"][9]["预期产量"]);
+                    var YQ11 = parseFloat(json["rows"][10]["预期产量"]);
+                    var YQ12 = parseFloat(json["rows"][11]["预期产量"]);
+                    var YQ13 = parseFloat(json["rows"][12]["预期产量"]);
+                    var YQ14 = parseFloat(json["rows"][13]["预期产量"]);
+                    var day1 = json["rows"][0]["日期"];
+                    var day2 = json["rows"][1]["日期"];
+                    var day3 = json["rows"][2]["日期"];
+                    var day4 = json["rows"][3]["日期"];
+                    var day5 = json["rows"][4]["日期"];
+                    var day6 = json["rows"][5]["日期"];
+                    var day7 = json["rows"][6]["日期"];
+                    var day8 = json["rows"][7]["日期"];
+                    var day9 = json["rows"][8]["日期"];
+                    var day10 = json["rows"][9]["日期"];
+                    var day11 = json["rows"][10]["日期"];
+                    var day12 = json["rows"][11]["日期"];
+                    var day13 = json["rows"][12]["日期"];
+
+                    window.DayCLH.data.datasets[0].data = [BJ1, BJ2, BJ3, BJ4, BJ5, BJ6, BJ7, BJ8, BJ9, BJ10, BJ11, BJ12, BJ13];
+                    window.DayCLH.data.datasets[1].data = [YQ1, YQ2, YQ3, YQ4, YQ5, YQ6, YQ7, YQ8, YQ9, YQ10, YQ11, YQ12, YQ13, YQ14];
+                    window.DayCLH.data.labels = [day1, day2, day3, day4, day5, day6, day7, day8, day9, day10, day11, day12, day13];
+                    window.DayCLH.update();
+                }
+            });
+        }
+
+        //一检工号产量
+        function ClData() {
+            $.get("demo.ashx?m=cl", function (data) {
+                var json = JSON.parse(data);
+                let a = [];
+                let b = [];
+                if (json["success"] == true) {
+                    //var num = parseInt(json["rows"][0]["ROWNUM"]);
+                    var num = parseInt(json["rows"].length);
+                    for (var i = 0; i < num; i++) {
+                        a.push(parseInt(json["rows"][i]["产量"]));
+                        b.push(json["rows"][i]["工号"]);
+                    }
+                    window.DayCLUser.data.datasets[0].data = a;
+                    window.DayCLUser.data.labels = b;
+                    window.DayCLUser.update();
+                }
+            });
+        }
+
+
+        function timeUpdate() {
+            loadData();
+
+        }
+
+        function loadData() {
+
+            //成型各项趋势图
+            //window.DayZL.data.datasets[0].data = [
+            //    randomScalingFactor(1) + 80,
+            //    randomScalingFactor(1) + 80,
+            //    randomScalingFactor(1) + 80,
+            //    randomScalingFactor(1) + 80,
+            //    randomScalingFactor(1) + 80,
+            //    randomScalingFactor(1) + 80,
+            //    randomScalingFactor(1) + 80
+            //];
+            //window.DayZL.data.datasets[1].data = [
+            //    randomScalingFactor(1) + 70,
+            //    randomScalingFactor(1) + 70,
+            //    randomScalingFactor(1) + 70,
+            //    randomScalingFactor(1) + 70,
+            //    randomScalingFactor(1) + 70,
+            //    randomScalingFactor(1) + 70,
+            //    randomScalingFactor(1) + 70
+            //];
+            //window.DayZL.update();
+
+            //成型缺陷top5
+            //window.DefectA.data.datasets[0].data = [
+            //    randomScalingFactor(8),
+            //    randomScalingFactor(8),
+            //    randomScalingFactor(8)
+            //];
+            //window.DefectA.update();
+            //成检缺陷top5
+            //window.DefectB.data.datasets[0].data = [
+            //    randomScalingFactor(8),
+            //    randomScalingFactor(8),
+            //    randomScalingFactor(8)
+            //];
+            //window.DefectB.update();
+
+            //产量计划达成
+            //window.MonthCL.data.datasets[0].data = [
+            //    randomScalingFactor(1000),
+            //    randomScalingFactor(1000)
+            //];
+            //window.MonthCL.update();
+        }
+
+        function initData() {
+            window.chartColors = {
+                red: 'rgb(255, 99, 132)',
+                orange: 'rgb(255, 159, 64)',
+                yellow: 'rgb(255, 250, 86)',
+                green: 'rgb(75, 192, 192)',
+                blue: 'rgb(54, 162, 250)',
+                purple: 'rgb(153, 102, 255)',
+                grey: 'rgb(231,233,237)'
+            };
+
+            var color = Chart.helpers.color;
+
+            window.randomScalingFactor = function (num) {
+                return Math.round(Math.random() * num);
+            }
+
+            Chart.defaults.global.defaultFontColor = 'white';
+            Chart.defaults.global.defaultFontSize = 18;
+            Chart.defaults.global.legend.display = false;
+
+            //半检一检各项趋势图=====================================
+            window.configDayZL = {
+                data: {
+                    labels: ["01", "02", "03", "04", "05", "06", "07"],
+                    datasets: [{
+                        type: 'line',
+                        label: "合格率",
+                        yAxesGroup: 'A',
+                        yAxisID: 'A',
+                        backgroundColor: color(window.chartColors.red).alpha(0.5).rgbString(),
+                        borderColor: window.chartColors.red,
+                        borderWidth: 2,
+                        pointRadius: 15,
+                        data: [0, 0, 0, 0, 0, 0, 0],
+                        fill: false
+                    }, {
+                        label: '产量',
+                        yAxesGroup: 'B',
+                        yAxisID: 'B',
+                        backgroundColor: color(window.chartColors.blue).alpha(0.5).rgbString(),
+                        borderColor: window.chartColors.blue,
+                        borderWidth: 1,
+                        data: [100, 100, 100, 100, 100, 100, 100],
+                        fill: false
+                    }]
+                },
+                type: 'bar',
+                options: {
+                    legend: {
+                        display: true
+                    },
+                    title: {
+                        display: false,
+                        text: '质量统计'
+                    },
+                    tooltips: {
+                        mode: 'index',
+                        intersect: false,
+                    },
+                    hover: {
+                        mode: 'nearest',
+                        intersect: true
+                    },
+                    scales: {
+                        xAxes: [{
+                            display: true,
+                            scaleLabel: {
+                                display: false,
+                                labelString: ''
+                            }
+                        }],
+                        yAxes: [{
+                            display: true,
+                            id: 'B',
+                            name: 'B',
+                            scalePositionLeft: true,
+                            position: 'left',
+                            scaleLabel: {
+                                display: false,
+                                labelString: 'Value'
+                            },
+                            ticks: {
+                                min: 0,
+                                stepSize: 500,
+                                max: 3000
+                            }
+                        }
+                            , {
+                            display: true,
+                            id: 'A',
+                            name: 'A',
+                            scalePositionLeft: false,
+                            position: 'right',
+                            scaleLabel: {
+                                display: false,
+                                labelString: 'Value2'
+                            },
+                            ticks: {
+                                min: 90,
+                                stepSize: 2,
+                                max: 100
+                            }
+                        }]
+                    }
+                }
+
+            };
+            var ctxDayZL = document.getElementById("canvasDayZL").getContext("2d");
+            window.DayZL = new Chart(ctxDayZL, configDayZL);
+            //===================================================
+
+            //甲班缺陷===========================================
+            //window.configMonthCL = {
+            //    data: {
+            //        labels: ['实际产量', '目标产量'],
+            //        datasets: [{
+            //            label: '工序',
+            //            backgroundColor: [
+            //                color(window.chartColors.red).alpha(0.35).rgbString(),
+            //                color(window.chartColors.blue).alpha(0.35).rgbString(),
+            //                color(window.chartColors.green).alpha(0.35).rgbString(),
+            //                color(window.chartColors.orange).alpha(0.35).rgbString(),
+            //                color(window.chartColors.purple).alpha(0.35).rgbString()
+            //            ],
+            //            fill: false,
+            //            borderColor: [
+            //                window.chartColors.red,
+            //                window.chartColors.blue,
+            //                window.chartColors.green,
+            //                window.chartColors.orange,
+            //                window.chartColors.purple
+            //            ],
+            //            borderWidth: 2,
+            //            pointRadius: 30,
+            //            data: [0, 0]
+            //        }]
+            //    },
+            //    type: 'doughnut',
+            //    options: {
+            //        legend: {
+            //            display: true
+            //        },
+            //        title: {
+            //            display: false,
+            //            text: ""
+            //        },
+            //        tooltips: {
+            //            mode: 'point',
+            //            intersect: false
+            //        },
+            //        responsive: true
+
+            //    }
+            //};
+            //var ctxMonthCL = document.getElementById("canvasMonthCL").getContext("2d");
+            //window.MonthCL = new Chart(ctxMonthCL, configMonthCL);
+            //===================================================
+
+            //工号产量柱状图=====================================
+            window.canvasDayCLUser = {
+                data: {
+                    labels: ["01", "02", "03", "04", "05", "06", "07"],
+                    datasets: [
+                        {
+                            label: "产量",
+                            fill: false,
+                            backgroundColor: color(window.chartColors.blue).alpha(0.6).rgbString(),
+                            borderColor: window.chartColors.blue,
+                            borderWidth: 2,
+                            pointRadius: 15,
+                            data: [0, 0, 0, 0, 0, 0, 0, 0]
+                        }
+                    ]
+                },
+                type: 'bar',
+                options: {
+                    legend: {
+                        display: true
+                    },
+                    title: {
+                        display: true,
+                        text: ""
+                    },
+                    tooltips: {
+                        mode: 'point',
+                        intersect: false
+                    },
+                    responsive: true,
+                    scales: {
+                        xAxes: [{
+                            stacked: false
+                        }],
+                        yAxes: [{
+                            display: true,
+                            stacked: false,
+                            ticks: {
+                                min: 0,
+                                stepSize: 50,
+                                max: 300
+                            }
+                        }]
+                    }
+
+                }
+            };
+            var ctxDayCL = document.getElementById("canvasDayCLUser").getContext("2d");
+            window.DayCLUser = new Chart(ctxDayCL, canvasDayCLUser);
+            //===================================================
+
+            //每小时产量=========================================
+            window.canvasHourCL = {
+                data: {
+                    labels: [],
+                    datasets: [{
+                        label: "实际产量",
+                        fill: false,
+                        backgroundColor: color(window.chartColors.blue).alpha(0.6).rgbString(),
+                        borderColor: window.chartColors.blue,
+                        borderWidth: 2,
+                        pointRadius: 12,
+                        data: []
+                    }, {
+                            label: "预期产量",
+                            fill: false,
+                            backgroundColor: color(window.chartColors.red).alpha(0.6).rgbString(),
+                            borderColor: window.chartColors.red,
+                            borderWidth: 2,
+                            pointRadius: 12,
+                            data: []
+                        }]
+                },
+                type: 'line',
+                options: {
+                    responsive: true,
+                    title: {
+                        display: true,
+                        text: '每小时产量'
+                    },
+                    tooltips: {
+                        mode: 'index',
+                        intersect: false,
+                    },
+                    hover: {
+                        mode: 'nearest',
+                        intersect: true
+                    },
+                    scales: {
+                        xAxes: [{
+                            display: true,
+                            scaleLabel: {
+                                display: false,
+                                labelString: ''
+                            }
+                        }],
+                        yAxes: [{
+                            display: true,
+                            scaleLabel: {
+                                display: false,
+                                labelString: 'Value'
+                            },
+                            ticks: {
+                                min: 0,
+                                stepSize: 50,
+                                max: 300
+                            }
+                        }]
+                    }
+                }
+            };
+            var ctxHourCL = document.getElementById("canvasHourCL").getContext("2d");
+            window.DayCLH = new Chart(ctxHourCL, canvasHourCL);
+            //===================================================
+
+            //毛坯库库存===========================================
+            window.canvasDefectKC = {
+                data: {
+                    labels: ['1', '2', '3'],
+                    datasets: [{
+                        label: '工序',
+                        backgroundColor: [
+                            color(window.chartColors.red).alpha(0.35).rgbString(),
+                            color(window.chartColors.blue).alpha(0.35).rgbString(),
+                            color(window.chartColors.green).alpha(0.35).rgbString(),
+                            color(window.chartColors.orange).alpha(0.35).rgbString(),
+                            color(window.chartColors.purple).alpha(0.35).rgbString()
+                        ],
+                        fill: false,
+                        borderColor: [
+                            window.chartColors.red,
+                            window.chartColors.blue,
+                            window.chartColors.green,
+                            window.chartColors.orange,
+                            window.chartColors.purple
+                        ],
+                        borderWidth: 2,
+                        pointRadius: 30,
+                        data: [0, 0, 0]
+                    }]
+                },
+                type: 'pie',
+                options: {
+                    legend: {
+                        display: true
+                    },
+                    title: {
+                        display: false,
+                        text: "甲班缺陷"
+                    },
+                    tooltips: {
+                        mode: 'point',
+                        intersect: false
+                    },
+                    responsive: true
+
+                }
+            };
+            var ctxDefectKc = document.getElementById("canvasDefectKC").getContext("2d");
+            window.Defectkc = new Chart(ctxDefectKc, canvasDefectKC);
+            //===================================================
+
+            //每日计划达成=======================================
+            window.configDayCL = {
+                data: {
+                    labels: [],
+                    datasets: [{
+                        type: 'line',
+                        label: '计划产量',
+                        backgroundColor: color(window.chartColors.red).alpha(0.5).rgbString(),
+                        fill: false,
+                        borderColor: window.chartColors.red,
+                        borderWidth: 2,
+                        pointRadius: 12,
+                        data: []
+                    }, {
+                        label: '实际产量',
+                        fill: false,
+                        backgroundColor: color(window.chartColors.blue).alpha(0.5).rgbString(),
+                        borderColor: window.chartColors.blue,
+                        borderWidth: 1,
+                        data: []
+                    }]
+                },
+                type: 'bar',
+                options: {
+                    responsive: true,
+                    title: {
+                        display: true,
+                        text: "每日产量达成"
+                    },
+                    tooltips: {
+                        mode: 'point',
+                        intersect: false
+                    },
+                    responsive: true,
+                    scales: {
+                        xAxes: [{
+                            stacked: false
+                        }],
+                        yAxes: [{
+                            display: true,
+                            stacked: false,
+                            ticks: {
+                                min: 0,
+                                stepSize: 600,
+                                max: 3000
+                            }
+                        }]
+                    }
+
+                }
+            };
+            var ctxDayCL = document.getElementById("canvasDayCL").getContext("2d");
+            window.DayCL = new Chart(ctxDayCL, configDayCL);
+            //===================================================
+        }
+
+
+
+    </script>
+
+    <script src="/Plugins/chartjs-2.8.0/chart-2.8.min.js"></script>
+    <script src="/Plugins/chartjs-2.8.0/chartjs-plugin-datalabels.js"></script>
+    <script src="/Plugins/chartjs-2.8.0/utils.js"></script>
+    <script src="/Plugins/circleChart/circleChart.min.js"></script>
+</body>
+</html>