Forráskód Böngészése

工序 加入 大件合计 小件合计

姜永辉 5 hónapja
szülő
commit
e8b3f2a4f1

+ 92 - 0
wwwroot/mes/rpt/rpt201/rpt.ashx

@@ -254,6 +254,98 @@ public class rpt : IHttpHandler, IReadOnlySessionState
 
                 }
                 sqlStr += @"  AND PD.VALUEFLAG = 1
+
+  union ALL 	
+                              SELECT  2,
+									  case when  substr(gtp.goodstypecode, 0, 6) = '001002' then '小件合计'else '大件合计' end    产品编码,
+	                                  ''  产品名称,
+	                                  ''  产品规格,
+	                                  ''  釉色,
+	                                  ''  商标,
+	                                  '' 出窑量,
+                                      '' 缺陷量,
+	                                  '' 缺陷率,
+                                {DEFECTSUM}                              
+    
+                                FROM
+	                             TP_PM_PRODUCTIONDATA PD
+                                 LEFT JOIN tp_pm_productiondata pds
+                                                  ON pds.groutingdailydetailid = pd.groutingdailydetailid
+                                                 AND pds.procedureid = 60
+                                                 AND pds.valueflag = 1
+                                                 AND pds.kilncarbatchno = pd.kilncarbatchno
+                                                 AND pds.productiondataid > pd.productiondataid                        
+                                                    -- TODO 
+                                                 AND NOT EXISTS
+                                               (SELECT 1
+                                                        FROM tp_pm_productiondata pd28c -- 质量登记 重复的
+                                                       WHERE pd28c.procedureid = 16
+                                                         AND pd28c.valueflag = 1
+                                                         AND pd28c.groutingdailydetailid = pd.groutingdailydetailid
+                                                         AND pd28c.kilncarbatchno = pd.kilncarbatchno
+                                                         AND pd28c.productiondataid > pd.productiondataid
+                                                         AND pd28c.productiondataid < pds.productiondataid)
+                                  LEFT JOIN TP_PM_DEFECT DF ON df.productiondataid in (pds.productiondataid, pd.productiondataid) AND DF.VALUEFLAG=1  AND DF.PROCEDUREID NOT IN(61,28)
+                                  LEFT JOIN TP_MST_DEFECT MDF ON MDF.DEFECTID=DF.DEFECTID AND MDF.VALUEFLAG=1 AND ( MDF.DEFECTCODE in('01','02','03','04','05','06','07','08','09','10','12','13','14','15','16','17','18','19','21','22','23','24','25','26','27','28','29','30','31','32','33','34','35','001','002','099','99','1' ,'2' ,'3' ) )
+                                  LEFT JOIN TP_MST_GOODS good on good.GOODSID=PD.GOODSID
+ LEFT JOIN tp_mst_goodstype gtp ON good.goodstypeid = gtp.goodstypeid
+                                  LEFT JOIN TP_MST_LOGO logo ON logo.LOGOID=pd.LOGOID
+                                  LEFT JOIN TP_PM_GROUTINGDAILYDETAIL gd ON gd.barcode=pd.barcode
+                                  LEFT JOIN TP_PC_GROUTINGLINE GDL ON GDL.GROUTINGLINEID=gd.GROUTINGLINEID
+                                  LEFT JOIN TP_MST_DataDictionary ON TP_MST_DataDictionary.DICTIONARYID=good.GLAZETYPEID AND TP_MST_DataDictionary.DictionaryType = 'TPC002'
+                                WHERE
+	                                PD.PROCEDUREID IN ( 16) 
+	                                 AND PD.CREATETIME >= @DATEBEGIN@
+                                    AND PD.CREATETIME <=  @DATEEND@  ".Replace("{DEFECTSUM}", sumdefect);
+                if (context.Request["linecodeMaster"] != null && context.Request["linecodeMaster"] != "")
+                { //判断首个下拉框是否有值 
+
+                    //第二个下拉框判断值
+                    if (context.Request["linesection"] != null && context.Request["linesection"] != "")
+                    {
+                        if (context.Request["groutinglinecodeMaster"] != null && context.Request["groutinglinecodeMaster"] != "")
+                        {
+                            sqlStr += @"  AND GDL.GROUTINGLINECODE = '" + context.Request["groutinglinecodeMaster"].ToString() + "'";
+
+                        }
+                        else
+                        {
+                            //存在值 按第二下拉框值 进行条件筛选
+                            if (context.Request["linesection"].ToString() == "高压")
+                            {
+                                sqlStr += " AND GDL.HIGHPRESSUREFLAG =1 ";
+                            }
+                            else if (context.Request["linesection"].ToString() == "补码")
+                            {
+                                sqlStr += "  AND GDL.GROUTINGLINECODE = '01' ";
+                            }
+                            else
+                            {
+                                sqlStr += " AND GDL.GROUTINGLINECODE LIKE '%" + (context.Request["linesection"] == "干补" ? "00" : (context.Request["linesection"] == "补码" ? "01" : context.Request["linesection"])) + "%' ";
+                            }
+                        }
+
+                    }
+
+                    //不存在值 按第一下拉框选中值判断
+                    else
+                    {
+                        if (context.Request["linecodeMaster"].ToString() == "高压")
+                        {
+                            sqlStr += "  AND GDL.HIGHPRESSUREFLAG =1 ";
+                        }
+                        else if (context.Request["linecodeMaster"].ToString() == "补码")
+                        {
+                            sqlStr += "  AND GDL.GROUTINGLINECODE = '01' ";
+                        }
+                        else
+                        {
+                            sqlStr += "  AND GDL.GROUTINGLINECODE LIKE '%" + (context.Request["linecodeMaster"] == "干补" ? "00" : (context.Request["linecodeMaster"] == "补码" ? "01" : context.Request["linecodeMaster"])) + "%' ";
+                        }
+                    }
+
+                }
+                sqlStr += @"  AND PD.VALUEFLAG = 1   group by substr(gtp.goodstypecode, 0, 6)    
 																		) ORDER BY GID";
 
                 //获取查询条件

+ 265 - 0
wwwroot/mes/rpt/rpt202/rpt - 副本.ashx

@@ -0,0 +1,265 @@
+<%@ WebHandler Language="C#" Class="rpt" %>
+
+using System;
+using System.Web;
+using System.Web.SessionState;
+using System.Data;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+using Curtain.DataAccess;
+using DK.XuWei.WebMes;
+
+public class rpt : IHttpHandler, IReadOnlySessionState
+{
+	public void ProcessRequest(HttpContext context)
+	{
+		context.Response.ContentType = "text/plain";
+
+
+		using (IDataAccess conn = DataAccess.Create())
+		{
+			//主表
+			if (context.Request["m"].ToString() == "master")
+			{
+				 DateTime dateBegin = Convert.ToDateTime(context.Request["datebeginMaster"]);
+                DateTime dateEnd = Convert.ToDateTime(context.Request["dateendMaster"]);
+                string defect = "";
+
+                        DataTable dt = conn.ExecuteDatatable(@"SELECT DISTINCT
+	                            MDF.DEFECTID,
+	                            'CASE WHEN GD.GOODSNAME IS NULL 
+                                  THEN
+	                                TO_CHAR( ( SUM( CASE WHEN DF.DEFECTCODE = '''||MDF.DEFECTCODE||''' THEN 1 ELSE 0 END ) / COUNT( DISTINCT PD.productiondataid ) * 100 ), ''fm99990.00'' ) || ''%''
+	                              ELSE
+                                    TO_CHAR(SUM( CASE WHEN DF.DEFECTCODE = '''||MDF.DEFECTCODE||''' THEN 1 ELSE 0 END )) END' AS DEFECTCODE,
+	                            MDF.DEFECTNAME 
+                            FROM
+	                            TP_MST_DEFECT MDF 
+                            WHERE MDF.VALUEFLAG = 1 AND MDF.DEFECTCODE  IN  ('01','02','03','04','05','06','07','08','09','10','19','20','25','26','27','28','29','30','12','13','14','15','16','17','18','23','31','32','33','34','35') ORDER BY  MDF.DEFECTID");
+                for (int i = 0; i < dt.Rows.Count; i++) {
+                    if (i > 0) defect += ",";
+                    defect += dt.Rows[i]["DEFECTCODE"].ToString()+" "+dt.Rows[i]["DEFECTNAME"].ToString();
+                }
+                string sumdefect = "";
+                DataTable dts = conn.ExecuteDatatable(@"	SELECT DISTINCT
+	                            MDF.DEFECTID,
+	                            'TO_CHAR( COUNT( DISTINCT  CASE WHEN   DF.DEFECTCODE IS NOT NULL  AND  DF.DEFECTCODE = '''||MDF.DEFECTCODE||''' THEN to_char(PD.productiondataid||pd.BARCODE||DF.DEFECTCODE ) ELSE NULL END ) )' AS DEFECTCODE,
+	                            MDF.DEFECTNAME 
+                            FROM
+	                            TP_MST_DEFECT MDF 
+                            WHERE  MDF.VALUEFLAG = 1 AND MDF.DEFECTCODE IN  ('01','02','03','04','05','06','07','08','09','10','19','20','25','26','27','28','29','30','12','13','14','15','16','17','18','23','31','32','33','34','35') ORDER BY  MDF.DEFECTID");
+                for (int i = 0; i < dts.Rows.Count; i++) {
+                    if (i > 0) sumdefect += ",";
+                    sumdefect += dts.Rows[i]["DEFECTCODE"].ToString()+" "+dts.Rows[i]["DEFECTNAME"].ToString();
+                }
+
+
+				string sqlStr = @"SELECT* FROM(
+                   SELECT   GROUPING_ID(GD.GOODSNAME,GD.GOODSSPECIFICATION,MD.DICTIONARYVALUE,LG.LOGONAME) AS GID, 
+											CASE WHEN GROUPING_ID(GD.GOODSNAME,GD.GOODSSPECIFICATION,MD.DICTIONARYVALUE,LG.LOGONAME) =15 then '合计'  ELSE TO_CHAR(GD.GOODSCODE )END AS 产品编码,
+	                                TO_CHAR(GD.GOODSNAME) AS 产品名称,
+	                                TO_CHAR(GD.GOODSSPECIFICATION) AS 产品规格,
+	                                TO_CHAR(MD.DICTIONARYVALUE) AS 釉色,
+	                                TO_CHAR(LG.LOGONAME) AS 商标,
+	                                TO_CHAR(COUNT(DISTINCT PD.BARCODE)) 出窑量,
+                                TO_CHAR(COUNT( DISTINCT CASE WHEN MDF.DEFECTCODE IS NOT NULL AND DF.BARCODE IS NOT NULL  THEN pd.productiondataid||DF.BARCODE||DF.DEFECTCODE ELSE NULL END ))缺陷量,
+	                                TO_CHAR( (COUNT( DISTINCT CASE WHEN MDF.DEFECTCODE IS NOT NULL AND DF.BARCODE IS NOT NULL  THEN pd.productiondataid||DF.BARCODE||DF.DEFECTCODE ELSE NULL END )/COUNT(DISTINCT PD.productiondataid) * 100), 'fm99990.00') || '%' 缺陷率,
+                                    {DEFECT}
+                                FROM 
+	                            (SELECT DISTINCT pd.barcode
+                                       ,pd.reworkprocedureid
+                                       ,pd.groutinglinecode
+                                        ,pd.goodsid
+                                       ,pd.goodscode
+                                       ,pd.goodsname
+                                       ,pd.groutinguserid
+                                       ,pd.groutingusercode
+                                       ,pd.groutingdailydetailid
+                                       ,pd.procedureid AS procedureid
+                                       ,nvl(pd61.goodsleveltypeid, pd.goodsleveltypeid) goodsleveltypeid
+                                       ,nvl(pd61.productiondataid, pd.productiondataid) productiondataid
+                                        , pd.productiondataid  fproductiondataid
+                                       ,pd.createtime
+                                       ,pd.logoid
+                          FROM (SELECT *
+                                  FROM (SELECT pd28.groutinglinecode
+                                              ,pd28.reworkprocedureid
+                                              ,pd28.barcode
+                                              ,pd28.createtime
+                                              ,pd28.goodsid
+                                              ,pd28.goodsname
+                                              ,pd28.valueflag
+                                              ,pd28.goodsleveltypeid
+                                              ,pd28.goodscode
+                                              ,pd28.logoid
+                                              ,pd28.groutinguserid
+                                              ,pd28.groutingusercode
+                                              ,pd28.kilncarbatchno
+                                              ,pd28.productiondataid
+                                              ,pd28.groutingdailydetailid
+                                              ,pd24.procedureid
+                                              ,row_number() over(PARTITION BY pd28.productiondataid ORDER BY pd24.productiondataid DESC) AS rownums
+                                          FROM tp_pm_productiondata pd28 -- 重烧质量登记
+                                         INNER JOIN tp_pm_productiondata pd24 -- 重烧修补24 / 冷补42
+                                            ON pd24.groutingdailydetailid = pd28.groutingdailydetailid
+                                         WHERE pd28.procedureid = 16   -- 28
+                                           AND pd28.valueflag = 1
+                                           AND pd24.valueflag = 1
+                                           AND pd24.procedureid IN (  42,40, 6, 31) --  重烧质量登记里包含 重烧修补24 / 冷补42     
+ -- 20251027 web报表中以末次质量登记时间节点统计质量数据调整为首次质量登记时间做统计质量数据变更 createtime - > checktime
+                                            AND pd28.checktime >= @DATEBEGIN@
+                                            AND pd28.checktime < @DATEEND@    
+                                           --AND pd28.createtime >= to_date('2025-04-17', 'yyyy-MM-DD')
+                                          -- AND pd28.createtime < to_date('2025-04-20 23:59:59', 'yyyy-mm-dd hh24:mi:ss')
+                                           AND pd24.productiondataid < pd28.productiondataid) t
+                                 WHERE rownums = 1
+                                   AND t.procedureid  in ( 40, 6, 31)) pd
+                         LEFT JOIN tp_mst_goods gd
+                            ON gd.goodsid = pd.goodsid
+                          LEFT JOIN tp_pm_productiondata pd61 -- 重烧质量检测
+                            ON pd61.procedureid = 60
+                           AND pd61.valueflag = 1
+                           AND pd61.groutingdailydetailid = pd.groutingdailydetailid
+                           AND pd61.kilncarbatchno = pd.kilncarbatchno
+                           AND pd61.productiondataid > pd.productiondataid
+                              -- 取最近的数据
+                           AND NOT EXISTS
+                         (SELECT 1
+                                  FROM tp_pm_productiondata pd28c -- 重烧质量登记 重复的
+                                 WHERE pd28c.procedureid = 16   -- 28
+                                   AND pd28c.valueflag = 1
+                                   AND pd28c.groutingdailydetailid = pd.groutingdailydetailid
+                                   AND pd28c.kilncarbatchno = pd.kilncarbatchno
+                                   AND pd28c.productiondataid > pd.productiondataid
+                                   AND pd28c.productiondataid < pd61.productiondataid))  PD
+								LEFT JOIN TP_PM_GROUTINGDAILYDETAIL GDL ON GDL.groutingdailydetailid=PD.groutingdailydetailid
+                                LEFT JOIN TP_MST_GOODS GD ON PD.GOODSID = GD.GOODSID
+                                LEFT JOIN TP_MST_DataDictionary MD ON GD.GLAZETYPEID = MD.DICTIONARYID AND MD.DICTIONARYTYPE = 'TPC002'
+                                LEFT JOIN TP_MST_LOGO LG ON PD.LOGOID = LG.LOGOID" ;
+                sqlStr += @" LEFT JOIN TP_PM_DEFECT DF ON df.productiondataid in (pd.productiondataid ,pd.fproductiondataid)	AND DF.VALUEFLAG=1  AND DF.PROCEDUREID NOT IN (61, 28) ";
+                sqlStr += @" LEFT JOIN TP_MST_DEFECT MDF ON DF.DEFECTID = MDF.DEFECTID AND  MDF.DEFECTCODE IN( '01','02','03','04','05','06','07','08','09','10','19','20','25','26','27','28','29','30','12','13','14','15','16','17','18','23','31','32','33','34','35' ) ";
+                sqlStr += @"  GROUP BY Grouping sets ( (GD.GOODSCODE ,
+                                                        GD.GOODSNAME,
+                                                        GD.GOODSSPECIFICATION,
+                                                        MD.DICTIONARYVALUE,
+                                                        LG.LOGONAME ), ( ) ) 
+                union ALL
+                        SELECT
+                            1,
+                            ''  产品编码,
+                            ''  产品名称,
+                            ''  产品规格,
+                            ''  釉色,
+                            ''  商标,
+                            '' 出窑量,
+                            '' 缺陷量,
+                            '' 缺陷率,
+                            {DEFECTSUM}  
+                        FROM 
+	                            (SELECT DISTINCT pd.barcode
+                                       ,pd.reworkprocedureid
+                                       ,pd.groutinglinecode
+                                        ,pd.goodsid
+                                       ,pd.goodscode
+                                       ,pd.goodsname
+                                       ,pd.groutinguserid
+                                       ,pd.groutingusercode
+                                       ,pd.groutingdailydetailid
+                                       ,pd.procedureid AS procedureid
+                                       ,nvl(pd61.goodsleveltypeid, pd.goodsleveltypeid) goodsleveltypeid
+                                       ,nvl(pd61.productiondataid, pd.productiondataid) productiondataid
+                                        , pd.productiondataid  fproductiondataid
+                                       ,pd.createtime
+                                       ,pd.logoid
+                          FROM (SELECT *
+                                  FROM (SELECT pd28.groutinglinecode
+                                              ,pd28.reworkprocedureid
+                                              ,pd28.barcode
+                                              ,pd28.createtime
+                                              ,pd28.goodsid
+                                              ,pd28.goodsname
+                                              ,pd28.valueflag
+                                              ,pd28.goodsleveltypeid
+                                              ,pd28.goodscode
+                                              ,pd28.logoid
+                                              ,pd28.groutinguserid
+                                              ,pd28.groutingusercode
+                                              ,pd28.kilncarbatchno
+                                              ,pd28.productiondataid
+                                              ,pd28.groutingdailydetailid
+                                              ,pd24.procedureid
+                                              ,row_number() over(PARTITION BY pd28.productiondataid ORDER BY pd24.productiondataid DESC) AS rownums
+                                          FROM tp_pm_productiondata pd28 -- 重烧质量登记
+                                         INNER JOIN tp_pm_productiondata pd24 -- 重烧修补24 / 冷补42
+                                            ON pd24.groutingdailydetailid = pd28.groutingdailydetailid
+                                         WHERE pd28.procedureid = 16    
+                                           AND pd28.valueflag = 1
+                                           AND pd24.valueflag = 1
+                                           AND pd24.procedureid IN (  42,40, 6, 31) --  重烧质量登记里包含 重烧修补24 / 冷补42     
+ -- 20251027 web报表中以末次质量登记时间节点统计质量数据调整为首次质量登记时间做统计质量数据变更 createtime - > checktime
+                                            AND pd28.checktime >= @DATEBEGIN@
+                                            AND pd28.checktime < @DATEEND@    
+                                           --AND pd28.createtime >= to_date('2025-04-17', 'yyyy-MM-DD')
+                                          -- AND pd28.createtime < to_date('2025-04-20 23:59:59', 'yyyy-mm-dd hh24:mi:ss')
+                                           AND pd24.productiondataid < pd28.productiondataid) t
+                                 WHERE rownums = 1
+                                   AND t.procedureid  in ( 40, 6, 31)) pd
+                          LEFT JOIN tp_mst_goods gd
+                            ON gd.goodsid = pd.goodsid
+                          LEFT JOIN tp_pm_productiondata pd61 -- 重烧质量检测
+                            ON pd61.procedureid = 60
+                           AND pd61.valueflag = 1
+                           AND pd61.groutingdailydetailid = pd.groutingdailydetailid
+                           AND pd61.kilncarbatchno = pd.kilncarbatchno
+                           AND pd61.productiondataid > pd.productiondataid
+                              -- 取最近的数据
+                           AND NOT EXISTS
+                         (SELECT 1
+                                  FROM tp_pm_productiondata pd28c -- 重烧质量登记 重复的
+                                 WHERE pd28c.procedureid = 16   -- 28
+                                   AND pd28c.valueflag = 1
+                                   AND pd28c.groutingdailydetailid = pd.groutingdailydetailid
+                                   AND pd28c.kilncarbatchno = pd.kilncarbatchno
+                                   AND pd28c.productiondataid > pd.productiondataid
+                                   AND pd28c.productiondataid < pd61.productiondataid)) PD
+								LEFT JOIN TP_PM_GROUTINGDAILYDETAIL GDL ON GDL.groutingdailydetailid=PD.groutingdailydetailid
+                                LEFT JOIN TP_MST_GOODS GD ON PD.GOODSID = GD.GOODSID
+                                LEFT JOIN TP_MST_DataDictionary MD ON GD.GLAZETYPEID = MD.DICTIONARYID AND MD.DICTIONARYTYPE = 'TPC002'
+                                LEFT JOIN TP_MST_LOGO LG ON PD.LOGOID = LG.LOGOID " ;
+                sqlStr += @"LEFT JOIN TP_PM_DEFECT DF ON df.productiondataid in (pd.productiondataid ,pd.fproductiondataid)    AND DF.VALUEFLAG=1  AND DF.PROCEDUREID NOT IN (61, 28) ";
+                sqlStr += @"LEFT JOIN TP_MST_DEFECT MDF ON DF.DEFECTID = MDF.DEFECTID AND MDF.DEFECTCODE IN( '01','02','03','04','05','06','07','08','09','10','19','20','25','26','27','28','29','30','12','13','14','15','16','17','18','23','31','32','33','34','35' )     ) ORDER BY GID ";
+                                  
+                 sqlStr = sqlStr.Replace("{DEFECT}", defect).Replace("{DEFECTSUM}",sumdefect); 
+												
+
+				//获取查询条件
+				List<CDAParameter> sqlPara = new List<CDAParameter>();
+				sqlPara.Add(new CDAParameter("DATEBEGIN", dateBegin, DataType.DateTime));
+				sqlPara.Add(new CDAParameter("DATEEND", dateEnd, DataType.DateTime));
+				//获取分页参数
+				int page = HttpContext.Current.Request["page"] is object ? Convert.ToInt32(HttpContext.Current.Request["page"]) : 1;
+				int rows = HttpContext.Current.Request["rows"] is object ? Convert.ToInt32(HttpContext.Current.Request["rows"]) : 10000;
+				string sort = HttpContext.Current.Request["sort"] is object ? HttpContext.Current.Request["sort"] : "m.REPORTCODE";
+				string order = HttpContext.Current.Request["order"] is object ? HttpContext.Current.Request["order"] : "";
+
+				//获取分页数据    
+				int total = 0;
+				DataTable d = conn.SelectPages(page, rows, out total, sqlStr, sqlPara.ToArray());
+				d.Columns.Remove("GID");//移除GID列
+				string jsonStr = new JsonResult(d) { total = total }.ToJson();
+				context.Response.Write(jsonStr);
+			}
+		}
+	}
+
+	public bool IsReusable
+	{
+		get
+		{
+			return false;
+		}
+	}
+}

+ 88 - 1
wwwroot/mes/rpt/rpt202/rpt.ashx

@@ -228,7 +228,94 @@ public class rpt : IHttpHandler, IReadOnlySessionState
                                 LEFT JOIN TP_MST_DataDictionary MD ON GD.GLAZETYPEID = MD.DICTIONARYID AND MD.DICTIONARYTYPE = 'TPC002'
                                 LEFT JOIN TP_MST_LOGO LG ON PD.LOGOID = LG.LOGOID " ;
                 sqlStr += @"LEFT JOIN TP_PM_DEFECT DF ON df.productiondataid in (pd.productiondataid ,pd.fproductiondataid)    AND DF.VALUEFLAG=1  AND DF.PROCEDUREID NOT IN (61, 28) ";
-                sqlStr += @"LEFT JOIN TP_MST_DEFECT MDF ON DF.DEFECTID = MDF.DEFECTID AND MDF.DEFECTCODE IN( '01','02','03','04','05','06','07','08','09','10','19','20','25','26','27','28','29','30','12','13','14','15','16','17','18','23','31','32','33','34','35' )     ) ORDER BY GID ";
+                sqlStr += @"LEFT JOIN TP_MST_DEFECT MDF ON DF.DEFECTID = MDF.DEFECTID AND MDF.DEFECTCODE IN( '01','02','03','04','05','06','07','08','09','10','19','20','25','26','27','28','29','30','12','13','14','15','16','17','18','23','31','32','33','34','35' )    
+union ALL
+                        SELECT
+                            2,
+                            case when  substr(gtp.goodstypecode, 0, 6) = '001002' then '小件合计'else '大件合计' end  产品编码,
+                            ''  产品名称,
+                            ''  产品规格,
+                            ''  釉色,
+                            ''  商标,
+                            '' 出窑量,
+                            '' 缺陷量,
+                            '' 缺陷率,
+                            {DEFECTSUM}  
+                        FROM 
+	                            (SELECT DISTINCT pd.barcode
+                                       ,pd.reworkprocedureid
+                                       ,pd.groutinglinecode
+                                        ,pd.goodsid
+                                       ,pd.goodscode
+                                       ,pd.goodsname
+                                       ,pd.groutinguserid
+                                       ,pd.groutingusercode
+                                       ,pd.groutingdailydetailid
+                                       ,pd.procedureid AS procedureid
+                                       ,nvl(pd61.goodsleveltypeid, pd.goodsleveltypeid) goodsleveltypeid
+                                       ,nvl(pd61.productiondataid, pd.productiondataid) productiondataid
+                                        , pd.productiondataid  fproductiondataid
+                                       ,pd.createtime
+                                       ,pd.logoid
+                          FROM (SELECT *
+                                  FROM (SELECT pd28.groutinglinecode
+                                              ,pd28.reworkprocedureid
+                                              ,pd28.barcode
+                                              ,pd28.createtime
+                                              ,pd28.goodsid
+                                              ,pd28.goodsname
+                                              ,pd28.valueflag
+                                              ,pd28.goodsleveltypeid
+                                              ,pd28.goodscode
+                                              ,pd28.logoid
+                                              ,pd28.groutinguserid
+                                              ,pd28.groutingusercode
+                                              ,pd28.kilncarbatchno
+                                              ,pd28.productiondataid
+                                              ,pd28.groutingdailydetailid
+                                              ,pd24.procedureid
+                                              ,row_number() over(PARTITION BY pd28.productiondataid ORDER BY pd24.productiondataid DESC) AS rownums
+                                          FROM tp_pm_productiondata pd28 -- 重烧质量登记
+                                         INNER JOIN tp_pm_productiondata pd24 -- 重烧修补24 / 冷补42
+                                            ON pd24.groutingdailydetailid = pd28.groutingdailydetailid
+                                         WHERE pd28.procedureid = 16    
+                                           AND pd28.valueflag = 1
+                                           AND pd24.valueflag = 1
+                                           AND pd24.procedureid IN (  42,40, 6, 31) --  重烧质量登记里包含 重烧修补24 / 冷补42     
+                                            AND pd28.CREATETIME >= @DATEBEGIN@
+                                            AND pd28.CREATETIME < @DATEEND@    
+                                           --AND pd28.createtime >= to_date('2025-04-17', 'yyyy-MM-DD')
+                                          -- AND pd28.createtime < to_date('2025-04-20 23:59:59', 'yyyy-mm-dd hh24:mi:ss')
+                                           AND pd24.productiondataid < pd28.productiondataid) t
+                                 WHERE rownums = 1
+                                   AND t.procedureid  in ( 40, 6, 31)) pd
+                          LEFT JOIN tp_mst_goods gd
+                            ON gd.goodsid = pd.goodsid
+                          LEFT JOIN tp_pm_productiondata pd61 -- 重烧质量检测
+                            ON pd61.procedureid = 60
+                           AND pd61.valueflag = 1
+                           AND pd61.groutingdailydetailid = pd.groutingdailydetailid
+                           AND pd61.kilncarbatchno = pd.kilncarbatchno
+                           AND pd61.productiondataid > pd.productiondataid
+                              -- 取最近的数据
+                           AND NOT EXISTS
+                         (SELECT 1
+                                  FROM tp_pm_productiondata pd28c -- 重烧质量登记 重复的
+                                 WHERE pd28c.procedureid = 16   -- 28
+                                   AND pd28c.valueflag = 1
+                                   AND pd28c.groutingdailydetailid = pd.groutingdailydetailid
+                                   AND pd28c.kilncarbatchno = pd.kilncarbatchno
+                                   AND pd28c.productiondataid > pd.productiondataid
+                                   AND pd28c.productiondataid < pd61.productiondataid)) PD
+								LEFT JOIN TP_PM_GROUTINGDAILYDETAIL GDL ON GDL.groutingdailydetailid=PD.groutingdailydetailid
+                                LEFT JOIN TP_MST_GOODS GD ON PD.GOODSID = GD.GOODSID
+                                 LEFT JOIN tp_mst_goodstype gtp ON gd.goodstypeid = gtp.goodstypeid
+                                LEFT JOIN TP_MST_DataDictionary MD ON GD.GLAZETYPEID = MD.DICTIONARYID AND MD.DICTIONARYTYPE = 'TPC002'
+                                LEFT JOIN TP_MST_LOGO LG ON PD.LOGOID = LG.LOGOID " ;
+                sqlStr += @"LEFT JOIN TP_PM_DEFECT DF ON df.productiondataid in (pd.productiondataid ,pd.fproductiondataid)    AND DF.VALUEFLAG=1  AND DF.PROCEDUREID NOT IN (61, 28) ";
+                sqlStr += @"LEFT JOIN TP_MST_DEFECT MDF ON DF.DEFECTID = MDF.DEFECTID AND MDF.DEFECTCODE IN( '01','02','03','04','05','06','07','08','09','10','19','20','25','26','27','28','29','30','12','13','14','15','16','17','18','23','31','32','33','34','35' )   group by substr(gtp.goodstypecode, 0, 6)  
+                
+                ) ORDER BY GID ";
                                   
                  sqlStr = sqlStr.Replace("{DEFECT}", defect).Replace("{DEFECTSUM}",sumdefect); 
 												

+ 266 - 0
wwwroot/mes/rpt/rpt203/rpt - 副本.ashx

@@ -0,0 +1,266 @@
+<%@ WebHandler Language="C#" Class="rpt" %>
+
+using System;
+using System.Web;
+using System.Web.SessionState;
+using System.Data;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+using Curtain.DataAccess;
+using DK.XuWei.WebMes;
+
+public class rpt : IHttpHandler, IReadOnlySessionState
+{
+	public void ProcessRequest(HttpContext context)
+	{ 
+		context.Response.ContentType = "text/plain";
+
+		using (IDataAccess conn = DataAccess.Create())
+		{
+			//主表
+			if (context.Request["m"].ToString() == "master")
+			{
+				DateTime dateBegin = Convert.ToDateTime(context.Request["datebeginMaster"]);
+				DateTime dateEnd = Convert.ToDateTime(context.Request["dateendMaster"]);
+				string defect = "";
+				DataTable dt = conn.ExecuteDatatable(@"SELECT
+	                         DISTINCT MDF.DEFECTCODE AS DC,
+	                            'CASE WHEN gd.GOODSNAME IS NULL 
+                                  THEN
+	                                TO_CHAR( ( COUNT( DISTINCT  CASE WHEN   DF.DEFECTCODE = '''||MDF.DEFECTCODE||''' THEN to_char(PD.productiondataid||pd.BARCODE||DF.DEFECTCODE ) ELSE NULL END ) / COUNT( DISTINCT PD.productiondataid ) * 100 ), ''fm99990.00'' ) || ''%''
+	                              ELSE
+                                   TO_CHAR( COUNT( DISTINCT  CASE WHEN DF.DEFECTCODE IS NOT NULL  AND   DF.DEFECTCODE = '''||MDF.DEFECTCODE||''' THEN to_char(PD.productiondataid||pd.BARCODE||DF.DEFECTCODE ) ELSE NULL END ) ) END
+' AS DEFECTCODE,
+	                            MDF.DEFECTNAME 
+                            FROM
+	                            TP_MST_DEFECT MDF 
+                            WHERE
+	                            DEFECTCODE in( '10', '12', '13', '14', '15', '16', '17', '18', '19', '23','25','35' )  ORDER BY  MDF.DEFECTCODE
+	                            ");
+				for (int i = 0; i < dt.Rows.Count; i++)
+				{
+					if (i > 0) defect += ",";
+					defect += dt.Rows[i]["DEFECTCODE"].ToString() + " " + dt.Rows[i]["DEFECTNAME"].ToString();
+				}
+			string sumdefect = "";
+              DataTable dts = conn.ExecuteDatatable(@"	SELECT DISTINCT
+	                            MDF.DEFECTCODE AS DC,
+	                           'TO_CHAR( COUNT( DISTINCT  CASE WHEN   DF.DEFECTCODE IS NOT NULL  AND  DF.DEFECTCODE = '''||MDF.DEFECTCODE||''' THEN to_char(PD.productiondataid||pd.BARCODE||DF.DEFECTCODE ) ELSE NULL END ) )' AS DEFECTCODE,
+	                            MDF.DEFECTNAME 
+                            FROM
+	                            TP_MST_DEFECT MDF 
+                            WHERE
+	                            DEFECTCODE in( '10', '12', '13', '14', '15', '16', '17', '18', '19', '23','25','35' )  ORDER BY  MDF.DEFECTCODE");
+                for (int i = 0; i < dts.Rows.Count; i++) {
+                    if (i > 0) sumdefect += ",";
+                    sumdefect += dts.Rows[i]["DEFECTCODE"].ToString()+" "+dts.Rows[i]["DEFECTNAME"].ToString();
+                }
+
+				string sqlStr = @"SELECT* FROM(
+                   SELECT   GROUPING_ID(GD.GOODSNAME,GD.GOODSSPECIFICATION,MD.DICTIONARYVALUE,LG.LOGONAME) AS GID, 
+											CASE WHEN GROUPING_ID(GD.GOODSNAME,GD.GOODSSPECIFICATION,MD.DICTIONARYVALUE,LG.LOGONAME) =15 then '合计'  ELSE TO_CHAR(GD.GOODSCODE )END AS 产品编码,
+	                                TO_CHAR(GD.GOODSNAME) AS 产品名称,
+	                                TO_CHAR(GD.GOODSSPECIFICATION) AS 产品规格,
+	                                TO_CHAR(MD.DICTIONARYVALUE) AS 釉色,
+	                                TO_CHAR(LG.LOGONAME) AS 商标,
+	                                TO_CHAR(COUNT(DISTINCT PD.productiondataid)) 出窑量,
+                              		TO_CHAR(COUNT( DISTINCT  CASE WHEN df.DEFECTCODE IN ( '10', '12', '13', '14', '15', '16', '17', '18', '19', '23','25','35' ) THEN to_char(PD.productiondataid||DF.BARCODE||df.DEFECTCODE ) ELSE NULL END ))缺陷量,
+	                                TO_CHAR( (COUNT( DISTINCT  CASE WHEN df.DEFECTCODE IN ( '10', '12', '13', '14', '15', '16', '17', '18', '19', '23','25','35' ) THEN to_char(PD.productiondataid||DF.BARCODE||df.DEFECTCODE ) ELSE NULL END )/COUNT(DISTINCT PD.productiondataid) * 100), 'fm99990.00') || '%' 缺陷率,
+                                    {DEFECT}
+                                FROM 
+	                            (SELECT DISTINCT pd.barcode
+                                       ,pd.reworkprocedureid
+                                       ,pd.groutinglinecode
+                                        ,pd.goodsid
+                                       ,pd.goodscode
+                                       ,pd.goodsname
+                                       ,pd.groutinguserid
+                                       ,pd.groutingusercode
+                                       ,pd.groutingdailydetailid
+                                       ,pd.procedureid AS procedureid
+                                       ,nvl(pd61.goodsleveltypeid, pd.goodsleveltypeid) goodsleveltypeid
+                                       ,nvl(pd61.productiondataid, pd.productiondataid) productiondataid
+                                        ,pd.productiondataid  fproductiondataid
+                                       ,pd.createtime
+                                       ,pd.logoid
+                          FROM (SELECT *
+                                  FROM (SELECT pd28.groutinglinecode
+                                              ,pd28.reworkprocedureid
+                                              ,pd28.barcode
+                                              ,pd28.createtime
+                                              ,pd28.goodsid
+                                              ,pd28.goodsname
+                                              ,pd28.valueflag
+                                              ,pd28.goodsleveltypeid
+                                              ,pd28.goodscode
+                                              ,pd28.logoid
+                                              ,pd28.groutinguserid
+                                              ,pd28.groutingusercode
+                                              ,pd28.kilncarbatchno
+                                              ,pd28.productiondataid
+                                              ,pd28.groutingdailydetailid
+                                              ,pd24.procedureid
+                                              ,row_number() over(PARTITION BY pd28.productiondataid ORDER BY pd24.productiondataid DESC) AS rownums
+                                          FROM tp_pm_productiondata pd28 -- 重烧质量登记
+                                         INNER JOIN tp_pm_productiondata pd24 -- 重烧修补24 / 冷补42
+                                            ON pd24.groutingdailydetailid = pd28.groutingdailydetailid
+                                         WHERE pd28.procedureid = 16   -- 28
+                                           AND pd28.valueflag = 1
+                                           AND pd24.valueflag = 1
+                                           AND pd24.procedureid IN (  42,4,36,53) --  重烧质量登记里包含 重烧修补24 / 冷补42    
+ -- 20251027 web报表中以末次质量登记时间节点统计质量数据调整为首次质量登记时间做统计质量数据变更 createtime - > checktime
+                                            AND pd28.checktime >= @DATEBEGIN@
+                                            AND pd28.checktime < @DATEEND@    
+                                           --AND pd28.createtime >= to_date('2025-04-17', 'yyyy-MM-DD')
+                                          -- AND pd28.createtime < to_date('2025-04-20 23:59:59', 'yyyy-mm-dd hh24:mi:ss')
+                                           AND pd24.productiondataid < pd28.productiondataid) t
+                                 WHERE rownums = 1
+                                   AND t.procedureid  in ( 4,36,53)) pd
+                         LEFT JOIN tp_mst_goods gd
+                            ON gd.goodsid = pd.goodsid
+                          LEFT JOIN tp_pm_productiondata pd61 -- 重烧质量检测
+                            ON pd61.procedureid = 60
+                           AND pd61.valueflag = 1
+                           AND pd61.groutingdailydetailid = pd.groutingdailydetailid
+                           AND pd61.kilncarbatchno = pd.kilncarbatchno
+                           AND pd61.productiondataid > pd.productiondataid
+                              -- 取最近的数据
+                           AND NOT EXISTS
+                         (SELECT 1
+                                  FROM tp_pm_productiondata pd28c -- 重烧质量登记 重复的
+                                 WHERE pd28c.procedureid = 16   -- 28
+                                   AND pd28c.valueflag = 1
+                                   AND pd28c.groutingdailydetailid = pd.groutingdailydetailid
+                                   AND pd28c.kilncarbatchno = pd.kilncarbatchno
+                                   AND pd28c.productiondataid > pd.productiondataid
+                                   AND pd28c.productiondataid < pd61.productiondataid))  PD
+								LEFT JOIN TP_PM_GROUTINGDAILYDETAIL GDL ON GDL.groutingdailydetailid=PD.groutingdailydetailid
+                                LEFT JOIN TP_MST_GOODS GD ON PD.GOODSID = GD.GOODSID
+                                LEFT JOIN TP_MST_DataDictionary MD ON GD.GLAZETYPEID = MD.DICTIONARYID AND MD.DICTIONARYTYPE = 'TPC002'
+                                LEFT JOIN TP_MST_LOGO LG ON PD.LOGOID = LG.LOGOID" ;
+                sqlStr += @" LEFT JOIN TP_PM_DEFECT DF ON df.productiondataid in (pd.productiondataid ,pd.fproductiondataid)	AND DF.VALUEFLAG=1  AND DF.PROCEDUREID NOT IN (61, 28) ";
+                sqlStr += @" LEFT JOIN TP_MST_DEFECT MDF ON DF.DEFECTID = MDF.DEFECTID AND  MDF.DEFECTCODE IN( '10', '12', '13', '14', '15', '16', '17', '18', '19','23','25','35' ) ";
+                sqlStr += @"  GROUP BY Grouping sets ( (GD.GOODSCODE ,
+                                                        GD.GOODSNAME,
+                                                        GD.GOODSSPECIFICATION,
+                                                        MD.DICTIONARYVALUE,
+                                                        LG.LOGONAME ), ( ) ) 
+                union ALL
+                        SELECT
+                            1,
+                            ''  产品编码,
+                            ''  产品名称,
+                            ''  产品规格,
+                            ''  釉色,
+                            ''  商标,
+                            '' 出窑量,
+                            '' 缺陷量,
+                            '' 缺陷率,
+                            {DEFECTSUM}  
+                        FROM 
+	                            (SELECT DISTINCT pd.barcode
+                                       ,pd.reworkprocedureid
+                                       ,pd.groutinglinecode
+                                        ,pd.goodsid
+                                       ,pd.goodscode
+                                       ,pd.goodsname
+                                       ,pd.groutinguserid
+                                       ,pd.groutingusercode
+                                       ,pd.groutingdailydetailid
+                                       ,pd.procedureid AS procedureid
+                                       ,nvl(pd61.goodsleveltypeid, pd.goodsleveltypeid) goodsleveltypeid
+                                       ,nvl(pd61.productiondataid, pd.productiondataid) productiondataid
+                                       ,pd.productiondataid  fproductiondataid
+                                       ,pd.createtime
+                                       ,pd.logoid
+                          FROM (SELECT *
+                                  FROM (SELECT pd28.groutinglinecode
+                                              ,pd28.reworkprocedureid
+                                              ,pd28.barcode
+                                              ,pd28.createtime
+                                              ,pd28.goodsid
+                                              ,pd28.goodsname
+                                              ,pd28.valueflag
+                                              ,pd28.goodsleveltypeid
+                                              ,pd28.goodscode
+                                              ,pd28.logoid
+                                              ,pd28.groutinguserid
+                                              ,pd28.groutingusercode
+                                              ,pd28.kilncarbatchno
+                                              ,pd28.productiondataid
+                                              ,pd28.groutingdailydetailid
+                                              ,pd24.procedureid
+                                              ,row_number() over(PARTITION BY pd28.productiondataid ORDER BY pd24.productiondataid DESC) AS rownums
+                                          FROM tp_pm_productiondata pd28 -- 重烧质量登记
+                                         INNER JOIN tp_pm_productiondata pd24 -- 重烧修补24 / 冷补42
+                                            ON pd24.groutingdailydetailid = pd28.groutingdailydetailid
+                                         WHERE pd28.procedureid = 16    
+                                           AND pd28.valueflag = 1
+                                           AND pd24.valueflag = 1
+                                           AND pd24.procedureid IN (  42,4,36,53) --  重烧质量登记里包含 重烧修补24 / 冷补42  
+ -- 20251027 web报表中以末次质量登记时间节点统计质量数据调整为首次质量登记时间做统计质量数据变更 createtime - > checktime
+                                            AND pd28.checktime >= @DATEBEGIN@
+                                            AND pd28.checktime < @DATEEND@    
+                                           --AND pd28.createtime >= to_date('2025-04-17', 'yyyy-MM-DD')
+                                          -- AND pd28.createtime < to_date('2025-04-20 23:59:59', 'yyyy-mm-dd hh24:mi:ss')
+                                           AND pd24.productiondataid < pd28.productiondataid) t
+                                 WHERE rownums = 1
+                                   AND t.procedureid  in ( 4,36,53)) pd
+                          LEFT JOIN tp_mst_goods gd
+                            ON gd.goodsid = pd.goodsid
+                          LEFT JOIN tp_pm_productiondata pd61 -- 重烧质量检测
+                            ON pd61.procedureid = 60
+                           AND pd61.valueflag = 1
+                           AND pd61.groutingdailydetailid = pd.groutingdailydetailid
+                           AND pd61.kilncarbatchno = pd.kilncarbatchno
+                           AND pd61.productiondataid > pd.productiondataid
+                              -- 取最近的数据
+                           AND NOT EXISTS
+                         (SELECT 1
+                                  FROM tp_pm_productiondata pd28c -- 重烧质量登记 重复的
+                                 WHERE pd28c.procedureid = 16   -- 28
+                                   AND pd28c.valueflag = 1
+                                   AND pd28c.groutingdailydetailid = pd.groutingdailydetailid
+                                   AND pd28c.kilncarbatchno = pd.kilncarbatchno
+                                   AND pd28c.productiondataid > pd.productiondataid
+                                   AND pd28c.productiondataid < pd61.productiondataid)) PD
+								LEFT JOIN TP_PM_GROUTINGDAILYDETAIL GDL ON GDL.groutingdailydetailid=PD.groutingdailydetailid
+                                LEFT JOIN TP_MST_GOODS GD ON PD.GOODSID = GD.GOODSID
+                                LEFT JOIN TP_MST_DataDictionary MD ON GD.GLAZETYPEID = MD.DICTIONARYID AND MD.DICTIONARYTYPE = 'TPC002'
+                                LEFT JOIN TP_MST_LOGO LG ON PD.LOGOID = LG.LOGOID " ;
+                sqlStr += @"LEFT JOIN TP_PM_DEFECT DF ON df.productiondataid in (pd.productiondataid ,pd.fproductiondataid)  AND DF.VALUEFLAG=1  AND DF.PROCEDUREID NOT IN (61, 28) ";
+                sqlStr += @"LEFT JOIN TP_MST_DEFECT MDF ON DF.DEFECTID = MDF.DEFECTID AND MDF.DEFECTCODE IN( '10', '12', '13', '14', '15', '16', '17', '18', '19','23','25','35' )     ) ORDER BY GID ";
+                                  
+                 sqlStr = sqlStr.Replace("{DEFECT}", defect).Replace("{DEFECTSUM}",sumdefect); 
+
+				//获取查询条件
+				List<CDAParameter> sqlPara = new List<CDAParameter>();
+				sqlPara.Add(new CDAParameter("DATEBEGIN", dateBegin, DataType.DateTime));
+				sqlPara.Add(new CDAParameter("DATEEND", dateEnd, DataType.DateTime));
+				//获取分页参数
+				int page = HttpContext.Current.Request["page"] is object ? Convert.ToInt32(HttpContext.Current.Request["page"]) : 1;
+				int rows = HttpContext.Current.Request["rows"] is object ? Convert.ToInt32(HttpContext.Current.Request["rows"]) : 10000;
+				string sort = HttpContext.Current.Request["sort"] is object ? HttpContext.Current.Request["sort"] : "m.REPORTCODE";
+				string order = HttpContext.Current.Request["order"] is object ? HttpContext.Current.Request["order"] : "";
+
+				//获取分页数据    
+				int total = 0;
+				DataTable d = conn.SelectPages(page, rows, out total, sqlStr, sqlPara.ToArray());
+				d.Columns.Remove("GID");//移除GID列
+				string jsonStr = new JsonResult(d) { total = total }.ToJson();
+				context.Response.Write(jsonStr);
+			}
+		}
+	}
+
+	public bool IsReusable
+	{
+		get
+		{
+			return false;
+		}
+	}
+}

+ 89 - 1
wwwroot/mes/rpt/rpt203/rpt.ashx

@@ -230,7 +230,95 @@ public class rpt : IHttpHandler, IReadOnlySessionState
                                 LEFT JOIN TP_MST_DataDictionary MD ON GD.GLAZETYPEID = MD.DICTIONARYID AND MD.DICTIONARYTYPE = 'TPC002'
                                 LEFT JOIN TP_MST_LOGO LG ON PD.LOGOID = LG.LOGOID " ;
                 sqlStr += @"LEFT JOIN TP_PM_DEFECT DF ON df.productiondataid in (pd.productiondataid ,pd.fproductiondataid)  AND DF.VALUEFLAG=1  AND DF.PROCEDUREID NOT IN (61, 28) ";
-                sqlStr += @"LEFT JOIN TP_MST_DEFECT MDF ON DF.DEFECTID = MDF.DEFECTID AND MDF.DEFECTCODE IN( '10', '12', '13', '14', '15', '16', '17', '18', '19','23','25','35' )     ) ORDER BY GID ";
+                sqlStr += @"LEFT JOIN TP_MST_DEFECT MDF ON DF.DEFECTID = MDF.DEFECTID AND MDF.DEFECTCODE IN( '10', '12', '13', '14', '15', '16', '17', '18', '19','23','25','35' )   
+
+                 union ALL
+                        SELECT
+                            2,
+                            case when  substr(gtp.goodstypecode, 0, 6) = '001002' then '小件合计'else '大件合计' end   产品编码,
+                            ''  产品名称,
+                            ''  产品规格,
+                            ''  釉色,
+                            ''  商标,
+                            '' 出窑量,
+                            '' 缺陷量,
+                            '' 缺陷率,
+                            {DEFECTSUM}  
+                        FROM 
+	                            (SELECT DISTINCT pd.barcode
+                                       ,pd.reworkprocedureid
+                                       ,pd.groutinglinecode
+                                        ,pd.goodsid
+                                       ,pd.goodscode
+                                       ,pd.goodsname
+                                       ,pd.groutinguserid
+                                       ,pd.groutingusercode
+                                       ,pd.groutingdailydetailid
+                                       ,pd.procedureid AS procedureid
+                                       ,nvl(pd61.goodsleveltypeid, pd.goodsleveltypeid) goodsleveltypeid
+                                       ,nvl(pd61.productiondataid, pd.productiondataid) productiondataid
+                                       ,pd.productiondataid  fproductiondataid
+                                       ,pd.createtime
+                                       ,pd.logoid
+                          FROM (SELECT *
+                                  FROM (SELECT pd28.groutinglinecode
+                                              ,pd28.reworkprocedureid
+                                              ,pd28.barcode
+                                              ,pd28.createtime
+                                              ,pd28.goodsid
+                                              ,pd28.goodsname
+                                              ,pd28.valueflag
+                                              ,pd28.goodsleveltypeid
+                                              ,pd28.goodscode
+                                              ,pd28.logoid
+                                              ,pd28.groutinguserid
+                                              ,pd28.groutingusercode
+                                              ,pd28.kilncarbatchno
+                                              ,pd28.productiondataid
+                                              ,pd28.groutingdailydetailid
+                                              ,pd24.procedureid
+                                              ,row_number() over(PARTITION BY pd28.productiondataid ORDER BY pd24.productiondataid DESC) AS rownums
+                                          FROM tp_pm_productiondata pd28 -- 重烧质量登记
+                                         INNER JOIN tp_pm_productiondata pd24 -- 重烧修补24 / 冷补42
+                                            ON pd24.groutingdailydetailid = pd28.groutingdailydetailid
+                                         WHERE pd28.procedureid = 16    
+                                           AND pd28.valueflag = 1
+                                           AND pd24.valueflag = 1
+                                           AND pd24.procedureid IN (  42,4,36,53) --  重烧质量登记里包含 重烧修补24 / 冷补42     
+                                            AND pd28.CREATETIME >= @DATEBEGIN@
+                                            AND pd28.CREATETIME < @DATEEND@    
+                                           --AND pd28.createtime >= to_date('2025-04-17', 'yyyy-MM-DD')
+                                          -- AND pd28.createtime < to_date('2025-04-20 23:59:59', 'yyyy-mm-dd hh24:mi:ss')
+                                           AND pd24.productiondataid < pd28.productiondataid) t
+                                 WHERE rownums = 1
+                                   AND t.procedureid  in ( 4,36,53)) pd
+                          LEFT JOIN tp_mst_goods gd
+                            ON gd.goodsid = pd.goodsid
+                          LEFT JOIN tp_pm_productiondata pd61 -- 重烧质量检测
+                            ON pd61.procedureid = 60
+                           AND pd61.valueflag = 1
+                           AND pd61.groutingdailydetailid = pd.groutingdailydetailid
+                           AND pd61.kilncarbatchno = pd.kilncarbatchno
+                           AND pd61.productiondataid > pd.productiondataid
+                              -- 取最近的数据
+                           AND NOT EXISTS
+                         (SELECT 1
+                                  FROM tp_pm_productiondata pd28c -- 重烧质量登记 重复的
+                                 WHERE pd28c.procedureid = 16   -- 28
+                                   AND pd28c.valueflag = 1
+                                   AND pd28c.groutingdailydetailid = pd.groutingdailydetailid
+                                   AND pd28c.kilncarbatchno = pd.kilncarbatchno
+                                   AND pd28c.productiondataid > pd.productiondataid
+                                   AND pd28c.productiondataid < pd61.productiondataid)) PD
+								LEFT JOIN TP_PM_GROUTINGDAILYDETAIL GDL ON GDL.groutingdailydetailid=PD.groutingdailydetailid
+                                LEFT JOIN TP_MST_GOODS GD ON PD.GOODSID = GD.GOODSID
+ LEFT JOIN tp_mst_goodstype gtp ON gd.goodstypeid = gtp.goodstypeid
+                                LEFT JOIN TP_MST_DataDictionary MD ON GD.GLAZETYPEID = MD.DICTIONARYID AND MD.DICTIONARYTYPE = 'TPC002'
+                                LEFT JOIN TP_MST_LOGO LG ON PD.LOGOID = LG.LOGOID " ;
+                sqlStr += @"LEFT JOIN TP_PM_DEFECT DF ON df.productiondataid in (pd.productiondataid ,pd.fproductiondataid)  AND DF.VALUEFLAG=1  AND DF.PROCEDUREID NOT IN (61, 28) ";
+                sqlStr += @"LEFT JOIN TP_MST_DEFECT MDF ON DF.DEFECTID = MDF.DEFECTID AND MDF.DEFECTCODE IN( '10', '12', '13', '14', '15', '16', '17', '18', '19','23','25','35' )   group by substr(gtp.goodstypecode, 0, 6)
+
+                ) ORDER BY GID ";
                                   
                  sqlStr = sqlStr.Replace("{DEFECT}", defect).Replace("{DEFECTSUM}",sumdefect); 
 

+ 267 - 0
wwwroot/mes/rpt/rpt204/rpt - 副本.ashx

@@ -0,0 +1,267 @@
+<%@ WebHandler Language="C#" Class="rpt" %>
+
+using System;
+using System.Web;
+using System.Web.SessionState;
+using System.Data;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+using Curtain.DataAccess;
+using DK.XuWei.WebMes;
+
+public class rpt : IHttpHandler, IReadOnlySessionState
+{
+	public void ProcessRequest(HttpContext context)
+	{
+		context.Response.ContentType = "text/plain";
+
+
+		using (IDataAccess conn = DataAccess.Create())
+		{
+			//主表
+			if (context.Request["m"].ToString() == "master")
+			{
+				DateTime dateBegin = Convert.ToDateTime(context.Request["datebeginMaster"]);
+				DateTime dateEnd = Convert.ToDateTime(context.Request["dateendMaster"]);
+				string defect = "";
+				DataTable dt = conn.ExecuteDatatable(@"SELECT
+	                         DISTINCT MDF.DEFECTCODE AS DC,
+	                             'CASE WHEN gd.GOODSNAME IS NULL 
+                                  THEN
+	                                TO_CHAR( ( COUNT( DISTINCT  CASE WHEN   DF.DEFECTCODE = '''||MDF.DEFECTCODE||''' THEN to_char(PD.productiondataid||pd.BARCODE||DF.DEFECTCODE ) ELSE NULL END ) / COUNT( DISTINCT PD.productiondataid ) * 100 ), ''fm99990.00'' ) || ''%''
+	                              ELSE
+                                   TO_CHAR( COUNT( DISTINCT  CASE WHEN DF.DEFECTCODE IS NOT NULL  AND   DF.DEFECTCODE = '''||MDF.DEFECTCODE||''' THEN to_char(PD.productiondataid||pd.BARCODE||DF.DEFECTCODE ) ELSE NULL END ) ) END
+' AS DEFECTCODE,
+	                            MDF.DEFECTNAME 
+                            FROM
+	                            TP_MST_DEFECT MDF 
+                            WHERE
+	                            MDF.DEFECTCODE IN ( '01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '28', '34', '35' ) ORDER BY  MDF.DEFECTCODE
+	                            ");
+				for (int i = 0; i < dt.Rows.Count; i++)
+				{
+					if (i > 0) defect += ",";
+					defect += dt.Rows[i]["DEFECTCODE"].ToString() + " " + dt.Rows[i]["DEFECTNAME"].ToString();
+				}
+				string sumdefect = "";
+              DataTable dts = conn.ExecuteDatatable(@"	SELECT DISTINCT
+	                            MDF.DEFECTCODE AS DC,
+	                           'TO_CHAR( COUNT( DISTINCT  CASE WHEN   DF.DEFECTCODE IS NOT NULL  AND  DF.DEFECTCODE = '''||MDF.DEFECTCODE||''' THEN to_char(PD.productiondataid||pd.BARCODE||DF.DEFECTCODE ) ELSE NULL END ) )' AS DEFECTCODE,
+	                            MDF.DEFECTNAME 
+                            FROM
+	                            TP_MST_DEFECT MDF 
+                            WHERE
+	                           MDF.DEFECTCODE IN ( '01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '28', '34', '35' ) ORDER BY  MDF.DEFECTCODE " );
+                for (int i = 0; i < dts.Rows.Count; i++) {
+                    if (i > 0) sumdefect += ",";
+                    sumdefect += dts.Rows[i]["DEFECTCODE"].ToString()+" "+dts.Rows[i]["DEFECTNAME"].ToString();
+                }
+
+				string sqlStr = @"SELECT* FROM(
+                   SELECT   GROUPING_ID(GD.GOODSNAME,GD.GOODSSPECIFICATION,MD.DICTIONARYVALUE,LG.LOGONAME) AS GID, 
+											CASE WHEN GROUPING_ID(GD.GOODSNAME,GD.GOODSSPECIFICATION,MD.DICTIONARYVALUE,LG.LOGONAME) =15 then '合计'  ELSE TO_CHAR(GD.GOODSCODE )END AS 产品编码,
+	                                TO_CHAR(GD.GOODSNAME) AS 产品名称,
+	                                TO_CHAR(GD.GOODSSPECIFICATION) AS 产品规格,
+	                                TO_CHAR(MD.DICTIONARYVALUE) AS 釉色,
+	                                TO_CHAR(LG.LOGONAME) AS 商标,
+	                                TO_CHAR(COUNT(DISTINCT PD.productiondataid)) 出窑量,
+									TO_CHAR(COUNT( DISTINCT  CASE WHEN  df.DEFECTCODE IN (  '01', '02', '03', '04', '05', '06', '07', '08', '09', '10',  '28', '34', '35') THEN to_char(PD.productiondataid||DF.BARCODE||df.DEFECTCODE ) ELSE NULL END )) 缺陷量,
+	                                TO_CHAR( (COUNT( DISTINCT  CASE WHEN  df.DEFECTCODE IN ( '01', '02', '03', '04', '05', '06', '07', '08', '09', '10',  '28', '34', '35') THEN to_char(PD.productiondataid||DF.BARCODE||df.DEFECTCODE ) ELSE NULL END )/COUNT(DISTINCT PD.productiondataid) * 100), 'fm99990.00') || '%' 缺陷率,
+                                    {DEFECT}
+                                FROM 
+	                            (SELECT DISTINCT pd.barcode
+                                       ,pd.reworkprocedureid
+                                       ,pd.groutinglinecode
+                                        ,pd.goodsid
+                                       ,pd.goodscode
+                                       ,pd.goodsname
+                                       ,pd.groutinguserid
+                                       ,pd.groutingusercode
+                                       ,pd.groutingdailydetailid
+                                       ,pd.procedureid AS procedureid
+                                       ,nvl(pd61.goodsleveltypeid, pd.goodsleveltypeid) goodsleveltypeid
+                                       ,nvl(pd61.productiondataid, pd.productiondataid) productiondataid
+                                       ,pd.productiondataid  fproductiondataid
+                                       ,pd.createtime
+                                       ,pd.logoid
+                          FROM (SELECT *
+                                  FROM (SELECT pd28.groutinglinecode
+                                              ,pd28.reworkprocedureid
+                                              ,pd28.barcode
+                                              ,pd28.createtime
+                                              ,pd28.goodsid
+                                              ,pd28.goodsname
+                                              ,pd28.valueflag
+                                              ,pd28.goodsleveltypeid
+                                              ,pd28.goodscode
+                                              ,pd28.logoid
+                                              ,pd28.groutinguserid
+                                              ,pd28.groutingusercode
+                                              ,pd28.kilncarbatchno
+                                              ,pd28.productiondataid
+                                              ,pd28.groutingdailydetailid
+                                              ,pd24.procedureid
+                                              ,row_number() over(PARTITION BY pd28.productiondataid ORDER BY pd24.productiondataid DESC) AS rownums
+                                          FROM tp_pm_productiondata pd28 -- 重烧质量登记
+                                         INNER JOIN tp_pm_productiondata pd24 -- 重烧修补24 / 冷补42
+                                            ON pd24.groutingdailydetailid = pd28.groutingdailydetailid
+                                         WHERE pd28.procedureid = 16   -- 28
+                                           AND pd28.valueflag = 1
+                                           AND pd24.valueflag = 1
+                                           AND pd24.procedureid IN (  42,5,36,52) --  重烧质量登记里包含 重烧修补24 / 冷补42     
+ -- 20251027 web报表中以末次质量登记时间节点统计质量数据调整为首次质量登记时间做统计质量数据变更 createtime - > checktime
+                                            AND pd28.checktime >= @DATEBEGIN@
+                                            AND pd28.checktime < @DATEEND@    
+                                           --AND pd28.createtime >= to_date('2025-04-17', 'yyyy-MM-DD')
+                                          -- AND pd28.createtime < to_date('2025-04-20 23:59:59', 'yyyy-mm-dd hh24:mi:ss')
+                                           AND pd24.productiondataid < pd28.productiondataid) t
+                                 WHERE rownums = 1
+                                   AND t.procedureid  in ( 5,36,52)) pd
+                         LEFT JOIN tp_mst_goods gd
+                            ON gd.goodsid = pd.goodsid
+                          LEFT JOIN tp_pm_productiondata pd61 -- 重烧质量检测
+                            ON pd61.procedureid = 60
+                           AND pd61.valueflag = 1
+                           AND pd61.groutingdailydetailid = pd.groutingdailydetailid
+                           AND pd61.kilncarbatchno = pd.kilncarbatchno
+                           AND pd61.productiondataid > pd.productiondataid
+                              -- 取最近的数据
+                           AND NOT EXISTS
+                         (SELECT 1
+                                  FROM tp_pm_productiondata pd28c -- 重烧质量登记 重复的
+                                 WHERE pd28c.procedureid = 16   -- 28
+                                   AND pd28c.valueflag = 1
+                                   AND pd28c.groutingdailydetailid = pd.groutingdailydetailid
+                                   AND pd28c.kilncarbatchno = pd.kilncarbatchno
+                                   AND pd28c.productiondataid > pd.productiondataid
+                                   AND pd28c.productiondataid < pd61.productiondataid))  PD
+								LEFT JOIN TP_PM_GROUTINGDAILYDETAIL GDL ON GDL.groutingdailydetailid=PD.groutingdailydetailid
+                                LEFT JOIN TP_MST_GOODS GD ON PD.GOODSID = GD.GOODSID
+                                LEFT JOIN TP_MST_DataDictionary MD ON GD.GLAZETYPEID = MD.DICTIONARYID AND MD.DICTIONARYTYPE = 'TPC002'
+                                LEFT JOIN TP_MST_LOGO LG ON PD.LOGOID = LG.LOGOID" ;
+                sqlStr += @" LEFT JOIN TP_PM_DEFECT DF ON df.productiondataid in (pd.productiondataid ,pd.fproductiondataid)	AND DF.VALUEFLAG=1  AND DF.PROCEDUREID NOT IN (61, 28) ";
+                sqlStr += @" LEFT JOIN TP_MST_DEFECT MDF ON DF.DEFECTID = MDF.DEFECTID AND  MDF.DEFECTCODE IN( '01', '02', '03', '04', '05', '06', '07', '08', '09', '10',  '28', '34', '35' ) ";
+                sqlStr += @"  GROUP BY Grouping sets ( (GD.GOODSCODE ,
+                                                        GD.GOODSNAME,
+                                                        GD.GOODSSPECIFICATION,
+                                                        MD.DICTIONARYVALUE,
+                                                        LG.LOGONAME ), ( ) ) 
+                union ALL
+                        SELECT
+                            1,
+                            ''  产品编码,
+                            ''  产品名称,
+                            ''  产品规格,
+                            ''  釉色,
+                            ''  商标,
+                            '' 出窑量,
+                            '' 缺陷量,
+                            '' 缺陷率,
+                            {DEFECTSUM}  
+                        FROM 
+	                            (SELECT DISTINCT pd.barcode
+                                       ,pd.reworkprocedureid
+                                       ,pd.groutinglinecode
+                                        ,pd.goodsid
+                                       ,pd.goodscode
+                                       ,pd.goodsname
+                                       ,pd.groutinguserid
+                                       ,pd.groutingusercode
+                                       ,pd.groutingdailydetailid
+                                       ,pd.procedureid AS procedureid
+                                       ,nvl(pd61.goodsleveltypeid, pd.goodsleveltypeid) goodsleveltypeid
+                                       ,nvl(pd61.productiondataid, pd.productiondataid) productiondataid
+                                       ,pd.productiondataid  fproductiondataid
+                                       ,pd.createtime
+                                       ,pd.logoid
+                          FROM (SELECT *
+                                  FROM (SELECT pd28.groutinglinecode
+                                              ,pd28.reworkprocedureid
+                                              ,pd28.barcode
+                                              ,pd28.createtime
+                                              ,pd28.goodsid
+                                              ,pd28.goodsname
+                                              ,pd28.valueflag
+                                              ,pd28.goodsleveltypeid
+                                              ,pd28.goodscode
+                                              ,pd28.logoid
+                                              ,pd28.groutinguserid
+                                              ,pd28.groutingusercode
+                                              ,pd28.kilncarbatchno
+                                              ,pd28.productiondataid
+                                              ,pd28.groutingdailydetailid
+                                              ,pd24.procedureid
+                                              ,row_number() over(PARTITION BY pd28.productiondataid ORDER BY pd24.productiondataid DESC) AS rownums
+                                          FROM tp_pm_productiondata pd28 -- 重烧质量登记
+                                         INNER JOIN tp_pm_productiondata pd24 -- 重烧修补24 / 冷补42
+                                            ON pd24.groutingdailydetailid = pd28.groutingdailydetailid
+                                         WHERE pd28.procedureid = 16    
+                                           AND pd28.valueflag = 1
+                                           AND pd24.valueflag = 1
+                                           AND pd24.procedureid IN (  42,5,36,52) --  重烧质量登记里包含 重烧修补24 / 冷补42  
+ -- 20251027 web报表中以末次质量登记时间节点统计质量数据调整为首次质量登记时间做统计质量数据变更 createtime - > checktime
+                                            AND pd28.checktime >= @DATEBEGIN@
+                                            AND pd28.checktime < @DATEEND@    
+                                           --AND pd28.createtime >= to_date('2025-04-17', 'yyyy-MM-DD')
+                                          -- AND pd28.createtime < to_date('2025-04-20 23:59:59', 'yyyy-mm-dd hh24:mi:ss')
+                                           AND pd24.productiondataid < pd28.productiondataid) t
+                                 WHERE rownums = 1
+                                   AND t.procedureid  in ( 5,36,52)) pd
+                          LEFT JOIN tp_mst_goods gd
+                            ON gd.goodsid = pd.goodsid
+                          LEFT JOIN tp_pm_productiondata pd61 -- 重烧质量检测
+                            ON pd61.procedureid = 60
+                           AND pd61.valueflag = 1
+                           AND pd61.groutingdailydetailid = pd.groutingdailydetailid
+                           AND pd61.kilncarbatchno = pd.kilncarbatchno
+                           AND pd61.productiondataid > pd.productiondataid
+                              -- 取最近的数据
+                           AND NOT EXISTS
+                         (SELECT 1
+                                  FROM tp_pm_productiondata pd28c -- 重烧质量登记 重复的
+                                 WHERE pd28c.procedureid = 16   -- 28
+                                   AND pd28c.valueflag = 1
+                                   AND pd28c.groutingdailydetailid = pd.groutingdailydetailid
+                                   AND pd28c.kilncarbatchno = pd.kilncarbatchno
+                                   AND pd28c.productiondataid > pd.productiondataid
+                                   AND pd28c.productiondataid < pd61.productiondataid)) PD
+								LEFT JOIN TP_PM_GROUTINGDAILYDETAIL GDL ON GDL.groutingdailydetailid=PD.groutingdailydetailid
+                                LEFT JOIN TP_MST_GOODS GD ON PD.GOODSID = GD.GOODSID
+                                LEFT JOIN TP_MST_DataDictionary MD ON GD.GLAZETYPEID = MD.DICTIONARYID AND MD.DICTIONARYTYPE = 'TPC002'
+                                LEFT JOIN TP_MST_LOGO LG ON PD.LOGOID = LG.LOGOID " ;
+                sqlStr += @"LEFT JOIN TP_PM_DEFECT DF ON df.productiondataid in (pd.productiondataid ,pd.fproductiondataid)  AND DF.VALUEFLAG=1  AND DF.PROCEDUREID NOT IN (61, 28) ";
+                sqlStr += @"LEFT JOIN TP_MST_DEFECT MDF ON DF.DEFECTID = MDF.DEFECTID AND MDF.DEFECTCODE IN( '01', '02', '03', '04', '05', '06', '07', '08', '09', '10',  '28', '34', '35' )     ) ORDER BY GID ";
+                                  
+                 sqlStr = sqlStr.Replace("{DEFECT}", defect).Replace("{DEFECTSUM}",sumdefect); 
+
+				//获取查询条件
+				List<CDAParameter> sqlPara = new List<CDAParameter>();
+				sqlPara.Add(new CDAParameter("DATEBEGIN", dateBegin, DataType.DateTime));
+				sqlPara.Add(new CDAParameter("DATEEND", dateEnd, DataType.DateTime));
+				//获取分页参数
+				int page = HttpContext.Current.Request["page"] is object ? Convert.ToInt32(HttpContext.Current.Request["page"]) : 1;
+				int rows = HttpContext.Current.Request["rows"] is object ? Convert.ToInt32(HttpContext.Current.Request["rows"]) : 10000;
+				string sort = HttpContext.Current.Request["sort"] is object ? HttpContext.Current.Request["sort"] : "m.REPORTCODE";
+				string order = HttpContext.Current.Request["order"] is object ? HttpContext.Current.Request["order"] : "";
+
+				//获取分页数据    
+				int total = 0;
+				DataTable d = conn.SelectPages(page, rows, out total, sqlStr, sqlPara.ToArray());
+				d.Columns.Remove("GID");//移除GID列
+				string jsonStr = new JsonResult(d) { total = total }.ToJson();
+				context.Response.Write(jsonStr);
+			}
+		}
+	}
+
+	public bool IsReusable
+	{
+		get
+		{
+			return false;
+		}
+	}
+}

+ 86 - 1
wwwroot/mes/rpt/rpt204/rpt.ashx

@@ -231,7 +231,92 @@ public class rpt : IHttpHandler, IReadOnlySessionState
                                 LEFT JOIN TP_MST_DataDictionary MD ON GD.GLAZETYPEID = MD.DICTIONARYID AND MD.DICTIONARYTYPE = 'TPC002'
                                 LEFT JOIN TP_MST_LOGO LG ON PD.LOGOID = LG.LOGOID " ;
                 sqlStr += @"LEFT JOIN TP_PM_DEFECT DF ON df.productiondataid in (pd.productiondataid ,pd.fproductiondataid)  AND DF.VALUEFLAG=1  AND DF.PROCEDUREID NOT IN (61, 28) ";
-                sqlStr += @"LEFT JOIN TP_MST_DEFECT MDF ON DF.DEFECTID = MDF.DEFECTID AND MDF.DEFECTCODE IN( '01', '02', '03', '04', '05', '06', '07', '08', '09', '10',  '28', '34', '35' )     ) ORDER BY GID ";
+                sqlStr += @"LEFT JOIN TP_MST_DEFECT MDF ON DF.DEFECTID = MDF.DEFECTID AND MDF.DEFECTCODE IN( '01', '02', '03', '04', '05', '06', '07', '08', '09', '10',  '28', '34', '35' )  
+                union ALL
+                        SELECT
+                            2,
+                            case when  substr(gtp.goodstypecode, 0, 6) = '001002' then '小件合计'else '大件合计' end    产品编码,
+                            ''  产品名称,
+                            ''  产品规格,
+                            ''  釉色,
+                            ''  商标,
+                            '' 出窑量,
+                            '' 缺陷量,
+                            '' 缺陷率,
+                            {DEFECTSUM}  
+                        FROM 
+	                            (SELECT DISTINCT pd.barcode
+                                       ,pd.reworkprocedureid
+                                       ,pd.groutinglinecode
+                                        ,pd.goodsid
+                                       ,pd.goodscode
+                                       ,pd.goodsname
+                                       ,pd.groutinguserid
+                                       ,pd.groutingusercode
+                                       ,pd.groutingdailydetailid
+                                       ,pd.procedureid AS procedureid
+                                       ,nvl(pd61.goodsleveltypeid, pd.goodsleveltypeid) goodsleveltypeid
+                                       ,nvl(pd61.productiondataid, pd.productiondataid) productiondataid
+                                       ,pd.productiondataid  fproductiondataid
+                                       ,pd.createtime
+                                       ,pd.logoid
+                          FROM (SELECT *
+                                  FROM (SELECT pd28.groutinglinecode
+                                              ,pd28.reworkprocedureid
+                                              ,pd28.barcode
+                                              ,pd28.createtime
+                                              ,pd28.goodsid
+                                              ,pd28.goodsname
+                                              ,pd28.valueflag
+                                              ,pd28.goodsleveltypeid
+                                              ,pd28.goodscode
+                                              ,pd28.logoid
+                                              ,pd28.groutinguserid
+                                              ,pd28.groutingusercode
+                                              ,pd28.kilncarbatchno
+                                              ,pd28.productiondataid
+                                              ,pd28.groutingdailydetailid
+                                              ,pd24.procedureid
+                                              ,row_number() over(PARTITION BY pd28.productiondataid ORDER BY pd24.productiondataid DESC) AS rownums
+                                          FROM tp_pm_productiondata pd28 -- 重烧质量登记
+                                         INNER JOIN tp_pm_productiondata pd24 -- 重烧修补24 / 冷补42
+                                            ON pd24.groutingdailydetailid = pd28.groutingdailydetailid
+                                         WHERE pd28.procedureid = 16    
+                                           AND pd28.valueflag = 1
+                                           AND pd24.valueflag = 1
+                                           AND pd24.procedureid IN (  42,5,36,52) --  重烧质量登记里包含 重烧修补24 / 冷补42     
+                                            AND pd28.CREATETIME >= @DATEBEGIN@
+                                            AND pd28.CREATETIME < @DATEEND@    
+                                           --AND pd28.createtime >= to_date('2025-04-17', 'yyyy-MM-DD')
+                                          -- AND pd28.createtime < to_date('2025-04-20 23:59:59', 'yyyy-mm-dd hh24:mi:ss')
+                                           AND pd24.productiondataid < pd28.productiondataid) t
+                                 WHERE rownums = 1
+                                   AND t.procedureid  in ( 5,36,52)) pd
+                          LEFT JOIN tp_mst_goods gd
+                            ON gd.goodsid = pd.goodsid
+                          LEFT JOIN tp_pm_productiondata pd61 -- 重烧质量检测
+                            ON pd61.procedureid = 60
+                           AND pd61.valueflag = 1
+                           AND pd61.groutingdailydetailid = pd.groutingdailydetailid
+                           AND pd61.kilncarbatchno = pd.kilncarbatchno
+                           AND pd61.productiondataid > pd.productiondataid
+                              -- 取最近的数据
+                           AND NOT EXISTS
+                         (SELECT 1
+                                  FROM tp_pm_productiondata pd28c -- 重烧质量登记 重复的
+                                 WHERE pd28c.procedureid = 16   -- 28
+                                   AND pd28c.valueflag = 1
+                                   AND pd28c.groutingdailydetailid = pd.groutingdailydetailid
+                                   AND pd28c.kilncarbatchno = pd.kilncarbatchno
+                                   AND pd28c.productiondataid > pd.productiondataid
+                                   AND pd28c.productiondataid < pd61.productiondataid)) PD
+								LEFT JOIN TP_PM_GROUTINGDAILYDETAIL GDL ON GDL.groutingdailydetailid=PD.groutingdailydetailid
+                                LEFT JOIN TP_MST_GOODS GD ON PD.GOODSID = GD.GOODSID
+ LEFT JOIN tp_mst_goodstype gtp ON gd.goodstypeid = gtp.goodstypeid
+                                LEFT JOIN TP_MST_DataDictionary MD ON GD.GLAZETYPEID = MD.DICTIONARYID AND MD.DICTIONARYTYPE = 'TPC002'
+                                LEFT JOIN TP_MST_LOGO LG ON PD.LOGOID = LG.LOGOID " ;
+                sqlStr += @"LEFT JOIN TP_PM_DEFECT DF ON df.productiondataid in (pd.productiondataid ,pd.fproductiondataid)  AND DF.VALUEFLAG=1  AND DF.PROCEDUREID NOT IN (61, 28) ";
+                sqlStr += @"LEFT JOIN TP_MST_DEFECT MDF ON DF.DEFECTID = MDF.DEFECTID AND MDF.DEFECTCODE IN( '01', '02', '03', '04', '05', '06', '07', '08', '09', '10',  '28', '34', '35' )  group by substr(gtp.goodstypecode, 0, 6)    ) ORDER BY GID ";
                                   
                  sqlStr = sqlStr.Replace("{DEFECT}", defect).Replace("{DEFECTSUM}",sumdefect); 
 

+ 262 - 0
wwwroot/mes/rpt/rpt205/rpt - 副本.ashx

@@ -0,0 +1,262 @@
+<%@ WebHandler Language="C#" Class="rpt" %>
+
+using System;
+using System.Web;
+using System.Web.SessionState;
+using System.Data;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+using Curtain.DataAccess;
+using DK.XuWei.WebMes;
+
+public class rpt : IHttpHandler, IReadOnlySessionState
+{
+	public void ProcessRequest(HttpContext context)
+	{
+		context.Response.ContentType = "text/plain";
+
+
+		using (IDataAccess conn = DataAccess.Create())
+		{
+			//主表
+			if (context.Request["m"].ToString() == "master")
+			{
+				DateTime dateBegin = Convert.ToDateTime(context.Request["datebeginMaster"]);
+				DateTime dateEnd = Convert.ToDateTime(context.Request["dateendMaster"]);
+				string defect = "";
+				DataTable dt = conn.ExecuteDatatable(@"SELECT
+	                            DISTINCT MDF.DEFECTCODE AS DFCODE,
+	                            'CASE WHEN gd.GOODSNAME IS NULL 
+                                  THEN
+	                                TO_CHAR( ( COUNT( DISTINCT  CASE WHEN   DF.DEFECTCODE = '''||MDF.DEFECTCODE||''' THEN to_char(PD.productiondataid||pd.BARCODE||DF.DEFECTCODE ) ELSE NULL END ) / COUNT( DISTINCT PD.productiondataid ) * 100 ), ''fm99990.00'' ) || ''%''
+	                              ELSE
+                                   TO_CHAR( COUNT( DISTINCT  CASE WHEN DF.DEFECTCODE IS NOT NULL  AND   DF.DEFECTCODE = '''||MDF.DEFECTCODE||''' THEN to_char(PD.productiondataid||pd.BARCODE||DF.DEFECTCODE ) ELSE NULL END ) ) END
+' AS DEFECTCODE,
+	                            MDF.DEFECTNAME 
+                             	FROM TP_MST_DEFECT MDF
+															where DEFECTTYPEID=4  ORDER BY  MDF.DEFECTCODE
+	                            ");
+				for (int i = 0; i < dt.Rows.Count; i++)
+				{
+					if (i > 0) defect += ",";
+					defect += dt.Rows[i]["DEFECTCODE"].ToString() + " " + dt.Rows[i]["DEFECTNAME"].ToString();
+				}
+				string sumdefect = "";
+              DataTable dts = conn.ExecuteDatatable(@"	SELECT
+	                            DISTINCT MDF.DEFECTCODE AS DFCODE,
+	                            'TO_CHAR(COUNT( DISTINCT  CASE WHEN  DF.BARCODE IS NOT NULL AND  DF.DEFECTCODE = '''||DEFECTCODE||''' THEN to_char(PD.productiondataid||DF.BARCODE||MDF.DEFECTCODE ) ELSE NULL END ))' AS DEFECTCODE,
+	                            MDF.DEFECTNAME 
+                           FROM TP_MST_DEFECT MDF
+															where DEFECTTYPEID=4  ORDER BY  MDF.DEFECTCODE ");
+                for (int i = 0; i < dts.Rows.Count; i++) {
+                    if (i > 0) sumdefect += ",";
+                    sumdefect += dts.Rows[i]["DEFECTCODE"].ToString()+" "+dts.Rows[i]["DEFECTNAME"].ToString();
+                }
+				string sqlStr = @"SELECT* FROM(
+                   SELECT   GROUPING_ID(GD.GOODSNAME,GD.GOODSSPECIFICATION,MD.DICTIONARYVALUE,LG.LOGONAME) AS GID, 
+											CASE WHEN GROUPING_ID(GD.GOODSNAME,GD.GOODSSPECIFICATION,MD.DICTIONARYVALUE,LG.LOGONAME) =15 then '合计'  ELSE TO_CHAR(GD.GOODSCODE )END AS 产品编码,
+	                                TO_CHAR(GD.GOODSNAME) AS 产品名称,
+	                                TO_CHAR(GD.GOODSSPECIFICATION) AS 产品规格,
+	                                TO_CHAR(MD.DICTIONARYVALUE) AS 釉色,
+	                                TO_CHAR(LG.LOGONAME) AS 商标,
+	                                TO_CHAR(COUNT(DISTINCT PD.productiondataid)) 出窑量,
+									TO_CHAR(COUNT( DISTINCT  CASE WHEN  df.DEFECTCODE IN ( '36','37','38','39','40','41','42','43','44')  THEN to_char(PD.productiondataid||DF.BARCODE||MDF.DEFECTCODE ) ELSE NULL END )) 缺陷量,
+	                                TO_CHAR( (COUNT( DISTINCT  CASE WHEN  df.DEFECTCODE IN ( '36','37','38','39','40','41','42','43','44')  THEN to_char(PD.productiondataid||DF.BARCODE||MDF.DEFECTCODE ) ELSE NULL END )/COUNT(DISTINCT PD.productiondataid) * 100), 'fm99990.00') || '%' 缺陷率,
+                                    {DEFECT}
+                                FROM 
+	                            (SELECT DISTINCT pd.barcode
+                                       ,pd.reworkprocedureid
+                                       ,pd.groutinglinecode
+                                        ,pd.goodsid
+                                       ,pd.goodscode
+                                       ,pd.goodsname
+                                       ,pd.groutinguserid
+                                       ,pd.groutingusercode
+                                       ,pd.groutingdailydetailid
+                                       ,pd.procedureid AS procedureid
+                                       ,nvl(pd61.goodsleveltypeid, pd.goodsleveltypeid) goodsleveltypeid
+                                       ,nvl(pd61.productiondataid, pd.productiondataid) productiondataid
+                                        ,pd.productiondataid fproductiondataid
+                                       ,pd.createtime
+                                       ,pd.logoid
+                          FROM (SELECT *
+                                  FROM (SELECT pd28.groutinglinecode
+                                              ,pd28.reworkprocedureid
+                                              ,pd28.barcode
+                                              ,pd28.createtime
+                                              ,pd28.goodsid
+                                              ,pd28.goodsname
+                                              ,pd28.valueflag
+                                              ,pd28.goodsleveltypeid
+                                              ,pd28.goodscode
+                                              ,pd28.logoid
+                                              ,pd28.groutinguserid
+                                              ,pd28.groutingusercode
+                                              ,pd28.kilncarbatchno
+                                              ,pd28.productiondataid
+                                              ,pd28.groutingdailydetailid
+                                              ,pd24.procedureid
+                                              ,row_number() over(PARTITION BY pd28.productiondataid ORDER BY pd24.productiondataid DESC) AS rownums
+                                          FROM tp_pm_productiondata pd28 -- 重烧质量登记
+                                         INNER JOIN tp_pm_productiondata pd24 -- 重烧修补24 / 冷补42
+                                            ON pd24.groutingdailydetailid = pd28.groutingdailydetailid
+                                         WHERE pd28.procedureid = 16   -- 28
+                                           AND pd28.valueflag = 1
+                                           AND pd24.valueflag = 1
+                                           AND pd24.procedureid IN (  42,10, 37, 41) --  重烧质量登记里包含 重烧修补24 / 冷补42     
+ -- 20251027 web报表中以末次质量登记时间节点统计质量数据调整为首次质量登记时间做统计质量数据变更 createtime - > checktime
+                                            AND pd28.checktime >= @DATEBEGIN@
+                                            AND pd28.checktime < @DATEEND@    
+                                           --AND pd28.createtime >= to_date('2025-04-17', 'yyyy-MM-DD')
+                                          -- AND pd28.createtime < to_date('2025-04-20 23:59:59', 'yyyy-mm-dd hh24:mi:ss')
+                                           AND pd24.productiondataid < pd28.productiondataid) t
+                                 WHERE rownums = 1
+                                   AND t.procedureid  in ( 10, 37, 41)) pd
+                         LEFT JOIN tp_mst_goods gd
+                            ON gd.goodsid = pd.goodsid
+                          LEFT JOIN tp_pm_productiondata pd61 -- 重烧质量检测
+                            ON pd61.procedureid = 60
+                           AND pd61.valueflag = 1
+                           AND pd61.groutingdailydetailid = pd.groutingdailydetailid
+                           AND pd61.kilncarbatchno = pd.kilncarbatchno
+                           AND pd61.productiondataid > pd.productiondataid
+                              -- 取最近的数据
+                           AND NOT EXISTS
+                         (SELECT 1
+                                  FROM tp_pm_productiondata pd28c -- 重烧质量登记 重复的
+                                 WHERE pd28c.procedureid = 16   -- 28
+                                   AND pd28c.valueflag = 1
+                                   AND pd28c.groutingdailydetailid = pd.groutingdailydetailid
+                                   AND pd28c.kilncarbatchno = pd.kilncarbatchno
+                                   AND pd28c.productiondataid > pd.productiondataid
+                                   AND pd28c.productiondataid < pd61.productiondataid))  PD
+								LEFT JOIN TP_PM_GROUTINGDAILYDETAIL GDL ON GDL.groutingdailydetailid=PD.groutingdailydetailid
+                                LEFT JOIN TP_MST_GOODS GD ON PD.GOODSID = GD.GOODSID
+                                LEFT JOIN TP_MST_DataDictionary MD ON GD.GLAZETYPEID = MD.DICTIONARYID AND MD.DICTIONARYTYPE = 'TPC002'
+                                LEFT JOIN TP_MST_LOGO LG ON PD.LOGOID = LG.LOGOID" ;
+                sqlStr += @" LEFT JOIN TP_PM_DEFECT DF ON df.productiondataid in (pd.productiondataid,pd.fproductiondataid)  	AND DF.VALUEFLAG=1  AND DF.PROCEDUREID NOT IN (61, 28) ";
+                sqlStr += @" LEFT JOIN TP_MST_DEFECT MDF ON DF.DEFECTID = MDF.DEFECTID AND MDF.DEFECTTYPEID = 4 ";
+                sqlStr += @"  GROUP BY Grouping sets ( (GD.GOODSCODE ,
+                                                        GD.GOODSNAME,
+                                                        GD.GOODSSPECIFICATION,
+                                                        MD.DICTIONARYVALUE,
+                                                        LG.LOGONAME ), ( ) ) 
+                union ALL
+                        SELECT
+                            1,
+                            ''  产品编码,
+                            ''  产品名称,
+                            ''  产品规格,
+                            ''  釉色,
+                            ''  商标,
+                            '' 出窑量,
+                            '' 缺陷量,
+                            '' 缺陷率,
+                            {DEFECTSUM}  
+                        FROM 
+	                            (SELECT DISTINCT pd.barcode
+                                       ,pd.reworkprocedureid
+                                       ,pd.groutinglinecode
+                                        ,pd.goodsid
+                                       ,pd.goodscode
+                                       ,pd.goodsname
+                                       ,pd.groutinguserid
+                                       ,pd.groutingusercode
+                                       ,pd.groutingdailydetailid
+                                       ,pd.procedureid AS procedureid
+                                       ,nvl(pd61.goodsleveltypeid, pd.goodsleveltypeid) goodsleveltypeid
+                                       ,nvl(pd61.productiondataid, pd.productiondataid) productiondataid
+                                        ,pd.productiondataid fproductiondataid
+                                       ,pd.createtime
+                                       ,pd.logoid
+                          FROM (SELECT *
+                                  FROM (SELECT pd28.groutinglinecode
+                                              ,pd28.reworkprocedureid
+                                              ,pd28.barcode
+                                              ,pd28.createtime
+                                              ,pd28.goodsid
+                                              ,pd28.goodsname
+                                              ,pd28.valueflag
+                                              ,pd28.goodsleveltypeid
+                                              ,pd28.goodscode
+                                              ,pd28.logoid
+                                              ,pd28.groutinguserid
+                                              ,pd28.groutingusercode
+                                              ,pd28.kilncarbatchno
+                                              ,pd28.productiondataid
+                                              ,pd28.groutingdailydetailid
+                                              ,pd24.procedureid
+                                              ,row_number() over(PARTITION BY pd28.productiondataid ORDER BY pd24.productiondataid DESC) AS rownums
+                                          FROM tp_pm_productiondata pd28 -- 重烧质量登记
+                                         INNER JOIN tp_pm_productiondata pd24 -- 重烧修补24 / 冷补42
+                                            ON pd24.groutingdailydetailid = pd28.groutingdailydetailid
+                                         WHERE pd28.procedureid = 16    
+                                           AND pd28.valueflag = 1
+                                           AND pd24.valueflag = 1
+                                           AND pd24.procedureid IN (  42,10, 37, 41) --  重烧质量登记里包含 重烧修补24 / 冷补42     
+ -- 20251027 web报表中以末次质量登记时间节点统计质量数据调整为首次质量登记时间做统计质量数据变更 createtime - > checktime
+                                            AND pd28.checktime >= @DATEBEGIN@
+                                            AND pd28.checktime < @DATEEND@    
+                                           --AND pd28.createtime >= to_date('2025-04-17', 'yyyy-MM-DD')
+                                          -- AND pd28.createtime < to_date('2025-04-20 23:59:59', 'yyyy-mm-dd hh24:mi:ss')
+                                           AND pd24.productiondataid < pd28.productiondataid) t
+                                 WHERE rownums = 1
+                                   AND t.procedureid  in ( 10, 37, 41)) pd
+                          LEFT JOIN tp_mst_goods gd
+                            ON gd.goodsid = pd.goodsid
+                          LEFT JOIN tp_pm_productiondata pd61 -- 重烧质量检测
+                            ON pd61.procedureid = 60
+                           AND pd61.valueflag = 1
+                           AND pd61.groutingdailydetailid = pd.groutingdailydetailid
+                           AND pd61.kilncarbatchno = pd.kilncarbatchno
+                           AND pd61.productiondataid > pd.productiondataid
+                              -- 取最近的数据
+                           AND NOT EXISTS
+                         (SELECT 1
+                                  FROM tp_pm_productiondata pd28c -- 重烧质量登记 重复的
+                                 WHERE pd28c.procedureid = 16   -- 28
+                                   AND pd28c.valueflag = 1
+                                   AND pd28c.groutingdailydetailid = pd.groutingdailydetailid
+                                   AND pd28c.kilncarbatchno = pd.kilncarbatchno
+                                   AND pd28c.productiondataid > pd.productiondataid
+                                   AND pd28c.productiondataid < pd61.productiondataid)) PD
+								LEFT JOIN TP_PM_GROUTINGDAILYDETAIL GDL ON GDL.groutingdailydetailid=PD.groutingdailydetailid
+                                LEFT JOIN TP_MST_GOODS GD ON PD.GOODSID = GD.GOODSID
+                                LEFT JOIN TP_MST_DataDictionary MD ON GD.GLAZETYPEID = MD.DICTIONARYID AND MD.DICTIONARYTYPE = 'TPC002'
+                                LEFT JOIN TP_MST_LOGO LG ON PD.LOGOID = LG.LOGOID " ;
+                sqlStr += @"LEFT JOIN TP_PM_DEFECT DF ON df.productiondataid in (pd.productiondataid,pd.fproductiondataid)  AND DF.VALUEFLAG=1  AND DF.PROCEDUREID NOT IN (61, 28) ";
+                sqlStr += @"LEFT JOIN TP_MST_DEFECT MDF ON DF.DEFECTID = MDF.DEFECTID AND MDF.DEFECTTYPEID =4      ) ORDER BY GID ";
+                                  
+                 sqlStr = sqlStr.Replace("{DEFECT}", defect).Replace("{DEFECTSUM}",sumdefect); 
+
+				//获取查询条件
+				List<CDAParameter> sqlPara = new List<CDAParameter>();
+				sqlPara.Add(new CDAParameter("DATEBEGIN", dateBegin, DataType.DateTime));
+				sqlPara.Add(new CDAParameter("DATEEND", dateEnd, DataType.DateTime));
+				//获取分页参数
+				int page = HttpContext.Current.Request["page"] is object ? Convert.ToInt32(HttpContext.Current.Request["page"]) : 1;
+				int rows = HttpContext.Current.Request["rows"] is object ? Convert.ToInt32(HttpContext.Current.Request["rows"]) : 10000;
+				string sort = HttpContext.Current.Request["sort"] is object ? HttpContext.Current.Request["sort"] : "m.REPORTCODE";
+				string order = HttpContext.Current.Request["order"] is object ? HttpContext.Current.Request["order"] : "";
+
+				//获取分页数据    
+				int total = 0;
+				DataTable d = conn.SelectPages(page, rows, out total, sqlStr, sqlPara.ToArray());
+				d.Columns.Remove("GID");//移除GID列
+				string jsonStr = new JsonResult(d) { total = total }.ToJson();
+				context.Response.Write(jsonStr);
+			}
+		}
+	}
+
+	public bool IsReusable
+	{
+		get
+		{
+			return false;
+		}
+	}
+}

+ 89 - 1
wwwroot/mes/rpt/rpt205/rpt.ashx

@@ -226,7 +226,95 @@ public class rpt : IHttpHandler, IReadOnlySessionState
                                 LEFT JOIN TP_MST_DataDictionary MD ON GD.GLAZETYPEID = MD.DICTIONARYID AND MD.DICTIONARYTYPE = 'TPC002'
                                 LEFT JOIN TP_MST_LOGO LG ON PD.LOGOID = LG.LOGOID " ;
                 sqlStr += @"LEFT JOIN TP_PM_DEFECT DF ON df.productiondataid in (pd.productiondataid,pd.fproductiondataid)  AND DF.VALUEFLAG=1  AND DF.PROCEDUREID NOT IN (61, 28) ";
-                sqlStr += @"LEFT JOIN TP_MST_DEFECT MDF ON DF.DEFECTID = MDF.DEFECTID AND MDF.DEFECTTYPEID =4      ) ORDER BY GID ";
+                sqlStr += @"LEFT JOIN TP_MST_DEFECT MDF ON DF.DEFECTID = MDF.DEFECTID AND MDF.DEFECTTYPEID =4    
+union ALL
+                        SELECT
+                            2,
+                            case when  substr(gtp.goodstypecode, 0, 6) = '001002' then '小件合计'else '大件合计' end    产品编码,
+                            ''  产品名称,
+                            ''  产品规格,
+                            ''  釉色,
+                            ''  商标,
+                            '' 出窑量,
+                            '' 缺陷量,
+                            '' 缺陷率,
+                            {DEFECTSUM}  
+                        FROM 
+	                            (SELECT DISTINCT pd.barcode
+                                       ,pd.reworkprocedureid
+                                       ,pd.groutinglinecode
+                                        ,pd.goodsid
+                                       ,pd.goodscode
+                                       ,pd.goodsname
+                                       ,pd.groutinguserid
+                                       ,pd.groutingusercode
+                                       ,pd.groutingdailydetailid
+                                       ,pd.procedureid AS procedureid
+                                       ,nvl(pd61.goodsleveltypeid, pd.goodsleveltypeid) goodsleveltypeid
+                                       ,nvl(pd61.productiondataid, pd.productiondataid) productiondataid
+                                        ,pd.productiondataid fproductiondataid
+                                       ,pd.createtime
+                                       ,pd.logoid
+                          FROM (SELECT *
+                                  FROM (SELECT pd28.groutinglinecode
+                                              ,pd28.reworkprocedureid
+                                              ,pd28.barcode
+                                              ,pd28.createtime
+                                              ,pd28.goodsid
+                                              ,pd28.goodsname
+                                              ,pd28.valueflag
+                                              ,pd28.goodsleveltypeid
+                                              ,pd28.goodscode
+                                              ,pd28.logoid
+                                              ,pd28.groutinguserid
+                                              ,pd28.groutingusercode
+                                              ,pd28.kilncarbatchno
+                                              ,pd28.productiondataid
+                                              ,pd28.groutingdailydetailid
+                                              ,pd24.procedureid
+                                              ,row_number() over(PARTITION BY pd28.productiondataid ORDER BY pd24.productiondataid DESC) AS rownums
+                                          FROM tp_pm_productiondata pd28 -- 重烧质量登记
+                                         INNER JOIN tp_pm_productiondata pd24 -- 重烧修补24 / 冷补42
+                                            ON pd24.groutingdailydetailid = pd28.groutingdailydetailid
+                                         WHERE pd28.procedureid = 16    
+                                           AND pd28.valueflag = 1
+                                           AND pd24.valueflag = 1
+                                           AND pd24.procedureid IN (  42,10, 37, 41) --  重烧质量登记里包含 重烧修补24 / 冷补42     
+                                            AND pd28.CREATETIME >= @DATEBEGIN@
+                                            AND pd28.CREATETIME < @DATEEND@    
+                                           --AND pd28.createtime >= to_date('2025-04-17', 'yyyy-MM-DD')
+                                          -- AND pd28.createtime < to_date('2025-04-20 23:59:59', 'yyyy-mm-dd hh24:mi:ss')
+                                           AND pd24.productiondataid < pd28.productiondataid) t
+                                 WHERE rownums = 1
+                                   AND t.procedureid  in ( 10, 37, 41)) pd
+                          LEFT JOIN tp_mst_goods gd
+                            ON gd.goodsid = pd.goodsid
+
+                          LEFT JOIN tp_pm_productiondata pd61 -- 重烧质量检测
+                            ON pd61.procedureid = 60
+                           AND pd61.valueflag = 1
+                           AND pd61.groutingdailydetailid = pd.groutingdailydetailid
+                           AND pd61.kilncarbatchno = pd.kilncarbatchno
+                           AND pd61.productiondataid > pd.productiondataid
+                              -- 取最近的数据
+                           AND NOT EXISTS
+                         (SELECT 1
+                                  FROM tp_pm_productiondata pd28c -- 重烧质量登记 重复的
+                                 WHERE pd28c.procedureid = 16   -- 28
+                                   AND pd28c.valueflag = 1
+                                   AND pd28c.groutingdailydetailid = pd.groutingdailydetailid
+                                   AND pd28c.kilncarbatchno = pd.kilncarbatchno
+                                   AND pd28c.productiondataid > pd.productiondataid
+                                   AND pd28c.productiondataid < pd61.productiondataid)) PD
+								LEFT JOIN TP_PM_GROUTINGDAILYDETAIL GDL ON GDL.groutingdailydetailid=PD.groutingdailydetailid
+                                LEFT JOIN TP_MST_GOODS GD ON PD.GOODSID = GD.GOODSID
+   LEFT JOIN tp_mst_goodstype gtp ON gd.goodstypeid = gtp.goodstypeid
+                                LEFT JOIN TP_MST_DataDictionary MD ON GD.GLAZETYPEID = MD.DICTIONARYID AND MD.DICTIONARYTYPE = 'TPC002'
+                                LEFT JOIN TP_MST_LOGO LG ON PD.LOGOID = LG.LOGOID " ;
+                sqlStr += @"LEFT JOIN TP_PM_DEFECT DF ON df.productiondataid in (pd.productiondataid,pd.fproductiondataid)  AND DF.VALUEFLAG=1  AND DF.PROCEDUREID NOT IN (61, 28) ";
+                sqlStr += @"LEFT JOIN TP_MST_DEFECT MDF ON DF.DEFECTID = MDF.DEFECTID AND MDF.DEFECTTYPEID =4    
+group by substr(gtp.goodstypecode, 0, 6)  
+) ORDER BY GID ";
                                   
                  sqlStr = sqlStr.Replace("{DEFECT}", defect).Replace("{DEFECTSUM}",sumdefect); 
 

+ 267 - 0
wwwroot/mes/rpt/rpt206/rpt - 副本.ashx

@@ -0,0 +1,267 @@
+<%@ WebHandler Language="C#" Class="rpt" %>
+
+using System;
+using System.Web;
+using System.Web.SessionState;
+using System.Data;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+using Curtain.DataAccess;
+using DK.XuWei.WebMes;
+
+public class rpt : IHttpHandler, IReadOnlySessionState
+{
+	public void ProcessRequest(HttpContext context)
+	{
+		context.Response.ContentType = "text/plain";
+
+
+
+		using (IDataAccess conn = DataAccess.Create())
+		{
+			//主表
+			if (context.Request["m"].ToString() == "master")
+			{
+				DateTime dateBegin = Convert.ToDateTime(context.Request["datebeginMaster"]);
+				DateTime dateEnd = Convert.ToDateTime(context.Request["dateendMaster"]);
+				string defect = "";
+				DataTable dt = conn.ExecuteDatatable(@"SELECT 
+																	DISTINCT MDF.DEFECTCODE AS DC,
+                                                                 'CASE WHEN gd.GOODSNAME IS NULL 
+                                  THEN
+	                                TO_CHAR( ( COUNT( DISTINCT  CASE WHEN   DF.DEFECTCODE = '''||MDF.DEFECTCODE||''' THEN to_char(PD.productiondataid||pd.BARCODE||DF.DEFECTCODE ) ELSE NULL END ) / COUNT( DISTINCT PD.productiondataid) * 100 ), ''fm99990.00'' ) || ''%''
+	                              ELSE
+                                   TO_CHAR( COUNT( DISTINCT  CASE WHEN DF.DEFECTCODE IS NOT NULL  AND   DF.DEFECTCODE = '''||MDF.DEFECTCODE||''' THEN to_char(PD.productiondataid||pd.BARCODE||DF.DEFECTCODE ) ELSE NULL END ) ) END
+' AS DEFECTCODE,
+	                                                                                            MDF.DEFECTNAME  	
+															FROM TP_MST_DEFECT MDF
+															where DEFECTTYPEID=5 or  MDF.DEFECTCODE='20' ORDER BY  MDF.DEFECTCODE
+	                            ");
+				for (int i = 0; i < dt.Rows.Count; i++)
+				{
+					if (i > 0) defect += ",";
+					defect += dt.Rows[i]["DEFECTCODE"].ToString() + " " + dt.Rows[i]["DEFECTNAME"].ToString();
+				}
+					string sumdefect = "";
+              DataTable dts = conn.ExecuteDatatable(@"SELECT DISTINCT MDF.DEFECTCODE AS DC,
+                                                       'TO_CHAR( COUNT( DISTINCT  CASE WHEN   DF.DEFECTCODE IS NOT NULL  AND  DF.DEFECTCODE = '''||MDF.DEFECTCODE||''' THEN to_char(PD.productiondataid||pd.BARCODE||DF.DEFECTCODE ) ELSE NULL END ) )' AS DEFECTCODE,
+	                                                   MDF.DEFECTNAME 
+												FROM TP_MST_DEFECT MDF
+															where DEFECTTYPEID=5 or  MDF.DEFECTCODE='20' ORDER BY  MDF.DEFECTCODE");
+                for (int i = 0; i < dts.Rows.Count; i++) {
+                    if (i > 0) sumdefect += ",";
+                    sumdefect += dts.Rows[i]["DEFECTCODE"].ToString()+" "+dts.Rows[i]["DEFECTNAME"].ToString();
+                }
+
+
+				string sqlStr = @"SELECT* FROM(
+                   SELECT   GROUPING_ID(GD.GOODSNAME,GD.GOODSSPECIFICATION,MD.DICTIONARYVALUE,LG.LOGONAME) AS GID, 
+											CASE WHEN GROUPING_ID(GD.GOODSNAME,GD.GOODSSPECIFICATION,MD.DICTIONARYVALUE,LG.LOGONAME) =15 then '合计'  ELSE TO_CHAR(GD.GOODSCODE )END AS 产品编码,
+	                                TO_CHAR(GD.GOODSNAME) AS 产品名称,
+	                                TO_CHAR(GD.GOODSSPECIFICATION) AS 产品规格,
+	                                TO_CHAR(MD.DICTIONARYVALUE) AS 釉色,
+	                                TO_CHAR(LG.LOGONAME) AS 商标,
+	                                TO_CHAR(COUNT(DISTINCT PD.productiondataid)) 出窑量,
+                                TO_CHAR(COUNT( DISTINCT CASE WHEN   df.DEFECTCODE IN ( '47','48','49','50','51','52','53','54','55','56','20','57')  THEN  to_char(PD.productiondataid||DF.BARCODE||DF.DEFECTID )ELSE NULL END ))缺陷量,
+	                                TO_CHAR( (COUNT( DISTINCT CASE WHEN df.DEFECTCODE IN ( '47','48','49','50','51','52','53','54','55','56','20','57')   THEN to_char(PD.productiondataid||DF.BARCODE||DF.DEFECTID ) ELSE NULL END )/COUNT(DISTINCT PD.productiondataid) * 100), 'fm99990.00') || '%' 缺陷率,
+                                    {DEFECT}
+                               FROM 
+	                            (SELECT DISTINCT pd.barcode
+                                       ,pd.reworkprocedureid
+                                       ,pd.groutinglinecode
+                                        ,pd.goodsid
+                                       ,pd.goodscode
+                                       ,pd.goodsname
+                                       ,pd.groutinguserid
+                                       ,pd.groutingusercode
+                                       ,pd.groutingdailydetailid
+                                       ,pd.procedureid AS procedureid
+                                       ,nvl(pd61.goodsleveltypeid, pd.goodsleveltypeid) goodsleveltypeid
+                                       ,nvl(pd61.productiondataid, pd.productiondataid) productiondataid
+                                       ,pd.productiondataid  fproductiondataid
+                                       ,pd.createtime
+                                       ,pd.logoid
+                          FROM (SELECT *
+                                  FROM (SELECT pd28.groutinglinecode
+                                              ,pd28.reworkprocedureid
+                                              ,pd28.barcode
+                                              ,pd28.createtime
+                                              ,pd28.goodsid
+                                              ,pd28.goodsname
+                                              ,pd28.valueflag
+                                              ,pd28.goodsleveltypeid
+                                              ,pd28.goodscode
+                                              ,pd28.logoid
+                                              ,pd28.groutinguserid
+                                              ,pd28.groutingusercode
+                                              ,pd28.kilncarbatchno
+                                              ,pd28.productiondataid
+                                              ,pd28.groutingdailydetailid
+                                              ,pd24.procedureid
+                                              ,row_number() over(PARTITION BY pd28.productiondataid ORDER BY pd24.productiondataid DESC) AS rownums
+                                          FROM tp_pm_productiondata pd28 -- 重烧质量登记
+                                         INNER JOIN tp_pm_productiondata pd24 -- 重烧修补24 / 冷补42
+                                            ON pd24.groutingdailydetailid = pd28.groutingdailydetailid
+                                         WHERE pd28.procedureid = 16   -- 28
+                                           AND pd28.valueflag = 1
+                                           AND pd24.valueflag = 1
+                                           AND pd24.procedureid IN (  42,10, 37, 41) --  重烧质量登记里包含 重烧修补24 / 冷补42     
+ -- 20251027 web报表中以末次质量登记时间节点统计质量数据调整为首次质量登记时间做统计质量数据变更 createtime - > checktime
+                                            AND pd28.checktime >= @DATEBEGIN@
+                                            AND pd28.checktime < @DATEEND@    
+                                           --AND pd28.createtime >= to_date('2025-04-17', 'yyyy-MM-DD')
+                                          -- AND pd28.createtime < to_date('2025-04-20 23:59:59', 'yyyy-mm-dd hh24:mi:ss')
+                                           AND pd24.productiondataid < pd28.productiondataid) t
+                                 WHERE rownums = 1
+                                   AND t.procedureid  in ( 10, 37, 41)) pd
+                         LEFT JOIN tp_mst_goods gd
+                            ON gd.goodsid = pd.goodsid
+                          LEFT JOIN tp_pm_productiondata pd61 -- 重烧质量检测
+                            ON pd61.procedureid = 60
+                           AND pd61.valueflag = 1
+                           AND pd61.groutingdailydetailid = pd.groutingdailydetailid
+                           AND pd61.kilncarbatchno = pd.kilncarbatchno
+                           AND pd61.productiondataid > pd.productiondataid
+                              -- 取最近的数据
+                           AND NOT EXISTS
+                         (SELECT 1
+                                  FROM tp_pm_productiondata pd28c -- 重烧质量登记 重复的
+                                 WHERE pd28c.procedureid = 16   -- 28
+                                   AND pd28c.valueflag = 1
+                                   AND pd28c.groutingdailydetailid = pd.groutingdailydetailid
+                                   AND pd28c.kilncarbatchno = pd.kilncarbatchno
+                                   AND pd28c.productiondataid > pd.productiondataid
+                                   AND pd28c.productiondataid < pd61.productiondataid))  PD
+								LEFT JOIN TP_PM_GROUTINGDAILYDETAIL GDL ON GDL.groutingdailydetailid=PD.groutingdailydetailid
+                                LEFT JOIN TP_MST_GOODS GD ON PD.GOODSID = GD.GOODSID
+                                LEFT JOIN TP_MST_DataDictionary MD ON GD.GLAZETYPEID = MD.DICTIONARYID AND MD.DICTIONARYTYPE = 'TPC002'
+                                LEFT JOIN TP_MST_LOGO LG ON PD.LOGOID = LG.LOGOID" ;
+                sqlStr += @" LEFT JOIN TP_PM_DEFECT DF ON df.productiondataid in (pd.productiondataid ,pd.fproductiondataid)	AND DF.VALUEFLAG=1  AND DF.PROCEDUREID NOT IN (61, 28) ";
+                sqlStr += @" LEFT JOIN TP_MST_DEFECT MDF ON DF.DEFECTID = MDF.DEFECTID AND MDF.DEFECTID IN (
+                          SELECT  DISTINCT     MDF.DEFECTID
+                              FROM TP_MST_DEFECT MDF
+                              where DEFECTTYPEID=5 or  MDF.DEFECTCODE='20' ) ";
+                sqlStr += @"  GROUP BY Grouping sets ( (GD.GOODSCODE ,
+                                                        GD.GOODSNAME,
+                                                        GD.GOODSSPECIFICATION,
+                                                        MD.DICTIONARYVALUE,
+                                                        LG.LOGONAME ), ( ) ) 
+                union ALL
+                        SELECT
+                            1,
+                            ''  产品编码,
+                            ''  产品名称,
+                            ''  产品规格,
+                            ''  釉色,
+                            ''  商标,
+                            '' 出窑量,
+                            '' 缺陷量,
+                            '' 缺陷率,
+                            {DEFECTSUM}  
+                        FROM 
+	                            (SELECT DISTINCT pd.barcode
+                                       ,pd.reworkprocedureid
+                                       ,pd.groutinglinecode
+                                        ,pd.goodsid
+                                       ,pd.goodscode
+                                       ,pd.goodsname
+                                       ,pd.groutinguserid
+                                       ,pd.groutingusercode
+                                       ,pd.groutingdailydetailid
+                                       ,pd.procedureid AS procedureid
+                                       ,nvl(pd61.goodsleveltypeid, pd.goodsleveltypeid) goodsleveltypeid
+                                       ,nvl(pd61.productiondataid, pd.productiondataid) productiondataid
+                                       ,pd.productiondataid  fproductiondataid
+                                       ,pd.createtime
+                                       ,pd.logoid
+                          FROM (SELECT *
+                                  FROM (SELECT pd28.groutinglinecode
+                                              ,pd28.reworkprocedureid
+                                              ,pd28.barcode
+                                              ,pd28.createtime
+                                              ,pd28.goodsid
+                                              ,pd28.goodsname
+                                              ,pd28.valueflag
+                                              ,pd28.goodsleveltypeid
+                                              ,pd28.goodscode
+                                              ,pd28.logoid
+                                              ,pd28.groutinguserid
+                                              ,pd28.groutingusercode
+                                              ,pd28.kilncarbatchno
+                                              ,pd28.productiondataid
+                                              ,pd28.groutingdailydetailid
+                                              ,pd24.procedureid
+                                              ,row_number() over(PARTITION BY pd28.productiondataid ORDER BY pd24.productiondataid DESC) AS rownums
+                                          FROM tp_pm_productiondata pd28 -- 重烧质量登记
+                                         INNER JOIN tp_pm_productiondata pd24 -- 重烧修补24 / 冷补42
+                                            ON pd24.groutingdailydetailid = pd28.groutingdailydetailid
+                                         WHERE pd28.procedureid = 16    
+                                           AND pd28.valueflag = 1
+                                           AND pd24.valueflag = 1
+                                           AND pd24.procedureid IN (  42,10, 37, 41) --  重烧质量登记里包含 重烧修补24 / 冷补42 
+ -- 20251027 web报表中以末次质量登记时间节点统计质量数据调整为首次质量登记时间做统计质量数据变更 createtime - > checktime
+                                            AND pd28.checktime >= @DATEBEGIN@
+                                            AND pd28.checktime < @DATEEND@    
+                                           --AND pd28.createtime >= to_date('2025-04-17', 'yyyy-MM-DD')
+                                          -- AND pd28.createtime < to_date('2025-04-20 23:59:59', 'yyyy-mm-dd hh24:mi:ss')
+                                           AND pd24.productiondataid < pd28.productiondataid) t
+                                 WHERE rownums = 1
+                                   AND t.procedureid  in ( 10, 37, 41)) pd
+                          LEFT JOIN tp_mst_goods gd
+                            ON gd.goodsid = pd.goodsid
+                          LEFT JOIN tp_pm_productiondata pd61 -- 重烧质量检测
+                            ON pd61.procedureid = 60
+                           AND pd61.valueflag = 1
+                           AND pd61.groutingdailydetailid = pd.groutingdailydetailid
+                           AND pd61.kilncarbatchno = pd.kilncarbatchno
+                           AND pd61.productiondataid > pd.productiondataid
+                              -- 取最近的数据
+                           AND NOT EXISTS
+                         (SELECT 1
+                                  FROM tp_pm_productiondata pd28c -- 重烧质量登记 重复的
+                                 WHERE pd28c.procedureid = 16   -- 28
+                                   AND pd28c.valueflag = 1
+                                   AND pd28c.groutingdailydetailid = pd.groutingdailydetailid
+                                   AND pd28c.kilncarbatchno = pd.kilncarbatchno
+                                   AND pd28c.productiondataid > pd.productiondataid
+                                   AND pd28c.productiondataid < pd61.productiondataid)) PD
+								LEFT JOIN TP_PM_GROUTINGDAILYDETAIL GDL ON GDL.groutingdailydetailid=PD.groutingdailydetailid
+                                LEFT JOIN TP_MST_GOODS GD ON PD.GOODSID = GD.GOODSID
+                                LEFT JOIN TP_MST_DataDictionary MD ON GD.GLAZETYPEID = MD.DICTIONARYID AND MD.DICTIONARYTYPE = 'TPC002'
+                                LEFT JOIN TP_MST_LOGO LG ON PD.LOGOID = LG.LOGOID " ;
+                sqlStr += @"LEFT JOIN TP_PM_DEFECT DF ON df.productiondataid in (pd.productiondataid ,pd.fproductiondataid)  AND DF.VALUEFLAG=1  AND DF.PROCEDUREID NOT IN (61, 28) ";
+                sqlStr += @"LEFT JOIN TP_MST_DEFECT MDF ON DF.DEFECTID = MDF.DEFECTID AND MDF.DEFECTCODE IN ( '47','48','49','50','51','52','53','54','55','56','20','57')      ) ORDER BY GID ";
+                                  
+                 sqlStr = sqlStr.Replace("{DEFECT}", defect).Replace("{DEFECTSUM}",sumdefect); 
+
+				//获取查询条件
+				List<CDAParameter> sqlPara = new List<CDAParameter>();
+				sqlPara.Add(new CDAParameter("DATEBEGIN", dateBegin, DataType.DateTime));
+				sqlPara.Add(new CDAParameter("DATEEND", dateEnd, DataType.DateTime));
+				//获取分页参数
+				int page = HttpContext.Current.Request["page"] is object ? Convert.ToInt32(HttpContext.Current.Request["page"]) : 1;
+				int rows = HttpContext.Current.Request["rows"] is object ? Convert.ToInt32(HttpContext.Current.Request["rows"]) : 10000;
+				string sort = HttpContext.Current.Request["sort"] is object ? HttpContext.Current.Request["sort"] : "m.REPORTCODE";
+				string order = HttpContext.Current.Request["order"] is object ? HttpContext.Current.Request["order"] : "";
+
+				//获取分页数据    
+				int total = 0;
+				DataTable d = conn.SelectPages(page, rows, out total, sqlStr, sqlPara.ToArray());
+				d.Columns.Remove("GID");//移除GID列
+				string jsonStr = new JsonResult(d) { total = total }.ToJson();
+				context.Response.Write(jsonStr);
+			}
+		}
+	}
+
+	public bool IsReusable
+	{
+		get
+		{
+			return false;
+		}
+	}
+}

+ 87 - 1
wwwroot/mes/rpt/rpt206/rpt.ashx

@@ -231,7 +231,93 @@ public class rpt : IHttpHandler, IReadOnlySessionState
                                 LEFT JOIN TP_MST_DataDictionary MD ON GD.GLAZETYPEID = MD.DICTIONARYID AND MD.DICTIONARYTYPE = 'TPC002'
                                 LEFT JOIN TP_MST_LOGO LG ON PD.LOGOID = LG.LOGOID " ;
                 sqlStr += @"LEFT JOIN TP_PM_DEFECT DF ON df.productiondataid in (pd.productiondataid ,pd.fproductiondataid)  AND DF.VALUEFLAG=1  AND DF.PROCEDUREID NOT IN (61, 28) ";
-                sqlStr += @"LEFT JOIN TP_MST_DEFECT MDF ON DF.DEFECTID = MDF.DEFECTID AND MDF.DEFECTCODE IN ( '47','48','49','50','51','52','53','54','55','56','20','57')      ) ORDER BY GID ";
+                sqlStr += @"LEFT JOIN TP_MST_DEFECT MDF ON DF.DEFECTID = MDF.DEFECTID AND MDF.DEFECTCODE IN ( '47','48','49','50','51','52','53','54','55','56','20','57')   
+ union ALL
+                        SELECT
+                            2,
+                            case when  substr(gtp.goodstypecode, 0, 6) = '001002' then '小件合计'else '大件合计' end    产品编码,
+                            ''  产品名称,
+                            ''  产品规格,
+                            ''  釉色,
+                            ''  商标,
+                            '' 出窑量,
+                            '' 缺陷量,
+                            '' 缺陷率,
+                            {DEFECTSUM}  
+                        FROM 
+	                            (SELECT DISTINCT pd.barcode
+                                       ,pd.reworkprocedureid
+                                       ,pd.groutinglinecode
+                                        ,pd.goodsid
+                                       ,pd.goodscode
+                                       ,pd.goodsname
+                                       ,pd.groutinguserid
+                                       ,pd.groutingusercode
+                                       ,pd.groutingdailydetailid
+                                       ,pd.procedureid AS procedureid
+                                       ,nvl(pd61.goodsleveltypeid, pd.goodsleveltypeid) goodsleveltypeid
+                                       ,nvl(pd61.productiondataid, pd.productiondataid) productiondataid
+                                       ,pd.productiondataid  fproductiondataid
+                                       ,pd.createtime
+                                       ,pd.logoid
+                          FROM (SELECT *
+                                  FROM (SELECT pd28.groutinglinecode
+                                              ,pd28.reworkprocedureid
+                                              ,pd28.barcode
+                                              ,pd28.createtime
+                                              ,pd28.goodsid
+                                              ,pd28.goodsname
+                                              ,pd28.valueflag
+                                              ,pd28.goodsleveltypeid
+                                              ,pd28.goodscode
+                                              ,pd28.logoid
+                                              ,pd28.groutinguserid
+                                              ,pd28.groutingusercode
+                                              ,pd28.kilncarbatchno
+                                              ,pd28.productiondataid
+                                              ,pd28.groutingdailydetailid
+                                              ,pd24.procedureid
+                                              ,row_number() over(PARTITION BY pd28.productiondataid ORDER BY pd24.productiondataid DESC) AS rownums
+                                          FROM tp_pm_productiondata pd28 -- 重烧质量登记
+                                         INNER JOIN tp_pm_productiondata pd24 -- 重烧修补24 / 冷补42
+                                            ON pd24.groutingdailydetailid = pd28.groutingdailydetailid
+                                         WHERE pd28.procedureid = 16    
+                                           AND pd28.valueflag = 1
+                                           AND pd24.valueflag = 1
+                                           AND pd24.procedureid IN (  42,10, 37, 41) --  重烧质量登记里包含 重烧修补24 / 冷补42     
+                                            AND pd28.CREATETIME >= @DATEBEGIN@
+                                            AND pd28.CREATETIME < @DATEEND@    
+                                           --AND pd28.createtime >= to_date('2025-04-17', 'yyyy-MM-DD')
+                                          -- AND pd28.createtime < to_date('2025-04-20 23:59:59', 'yyyy-mm-dd hh24:mi:ss')
+                                           AND pd24.productiondataid < pd28.productiondataid) t
+                                 WHERE rownums = 1
+                                   AND t.procedureid  in ( 10, 37, 41)) pd
+                          LEFT JOIN tp_mst_goods gd
+                            ON gd.goodsid = pd.goodsid
+                          LEFT JOIN tp_pm_productiondata pd61 -- 重烧质量检测
+                            ON pd61.procedureid = 60
+                           AND pd61.valueflag = 1
+                           AND pd61.groutingdailydetailid = pd.groutingdailydetailid
+                           AND pd61.kilncarbatchno = pd.kilncarbatchno
+                           AND pd61.productiondataid > pd.productiondataid
+                              -- 取最近的数据
+                           AND NOT EXISTS
+                         (SELECT 1
+                                  FROM tp_pm_productiondata pd28c -- 重烧质量登记 重复的
+                                 WHERE pd28c.procedureid = 16   -- 28
+                                   AND pd28c.valueflag = 1
+                                   AND pd28c.groutingdailydetailid = pd.groutingdailydetailid
+                                   AND pd28c.kilncarbatchno = pd.kilncarbatchno
+                                   AND pd28c.productiondataid > pd.productiondataid
+                                   AND pd28c.productiondataid < pd61.productiondataid)) PD
+								LEFT JOIN TP_PM_GROUTINGDAILYDETAIL GDL ON GDL.groutingdailydetailid=PD.groutingdailydetailid
+                                LEFT JOIN TP_MST_GOODS GD ON PD.GOODSID = GD.GOODSID
+  LEFT JOIN tp_mst_goodstype gtp ON gd.goodstypeid = gtp.goodstypeid
+                                LEFT JOIN TP_MST_DataDictionary MD ON GD.GLAZETYPEID = MD.DICTIONARYID AND MD.DICTIONARYTYPE = 'TPC002'
+                                LEFT JOIN TP_MST_LOGO LG ON PD.LOGOID = LG.LOGOID " ;
+                sqlStr += @"LEFT JOIN TP_PM_DEFECT DF ON df.productiondataid in (pd.productiondataid ,pd.fproductiondataid)  AND DF.VALUEFLAG=1  AND DF.PROCEDUREID NOT IN (61, 28) ";
+                sqlStr += @"LEFT JOIN TP_MST_DEFECT MDF ON DF.DEFECTID = MDF.DEFECTID AND MDF.DEFECTCODE IN ( '47','48','49','50','51','52','53','54','55','56','20','57')  group by substr(gtp.goodstypecode, 0, 6)  
+) ORDER BY GID ";
                                   
                  sqlStr = sqlStr.Replace("{DEFECT}", defect).Replace("{DEFECTSUM}",sumdefect); 
 

+ 277 - 0
wwwroot/mes/rpt/rpt207/rpt - 副本.ashx

@@ -0,0 +1,277 @@
+<%@ WebHandler Language="C#" Class="rpt" %>
+
+using System;
+using System.Web;
+using System.Web.SessionState;
+using System.Data;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+using Curtain.DataAccess;
+using DK.XuWei.WebMes;
+
+public class rpt : IHttpHandler, IReadOnlySessionState
+{
+    public void ProcessRequest(HttpContext context)
+    {
+        context.Response.ContentType = "text/plain";
+        string kilproc = "16"; //出窑工序
+        string notInproc = " (61,28)";//排除工序
+        string FunctionalTesting = "60"; //功能检测
+        string defectcode = "'61','62','63','64','65','66','67','11'";
+        string ProceduraID = " 55,13";
+        if (context.Request["procedureMaster"] == "回烧") {
+            kilproc = "28";//出窑工序
+            FunctionalTesting = "61";//功能检测
+            notInproc = "(16,60)";//排除工序
+            defectcode = "'061','062','063','064','065','066','067','011'";
+            ProceduraID = " 25";
+        }
+
+        using (IDataAccess conn = DataAccess.Create())
+        {
+            //主表
+            if (context.Request["m"].ToString() == "master")
+            {
+                DateTime dateBegin = Convert.ToDateTime(context.Request["datebeginMaster"]);
+                DateTime dateEnd = Convert.ToDateTime(context.Request["dateendMaster"]);
+                string defect = "";
+                DataTable dt = conn.ExecuteDatatable(@"SELECT
+	                         DISTINCT MDF.DEFECTCODE AS DC,
+	                            'CASE WHEN gd.GOODSNAME IS NULL 
+                                  THEN
+	                                TO_CHAR( ( COUNT( DISTINCT  CASE WHEN   DF.DEFECTCODE = '''||MDF.DEFECTCODE||''' THEN to_char(pd.productiondataid||pd.BARCODE||DF.DEFECTCODE ) ELSE NULL END ) / COUNT( DISTINCT PD.productiondataid ) * 100 ), ''fm99990.00'' ) || ''%''
+	                              ELSE
+                                   TO_CHAR( COUNT( DISTINCT  CASE WHEN DF.DEFECTCODE IS NOT NULL  AND   DF.DEFECTCODE = '''||MDF.DEFECTCODE||''' THEN to_char(pd.productiondataid||pd.BARCODE||DF.DEFECTCODE ) ELSE NULL END ) ) END
+' AS DEFECTCODE,
+	                            MDF.DEFECTNAME 
+                          FROM TP_MST_DEFECT MDF
+						where DEFECTCODE IN("+defectcode+") ORDER BY  MDF.DEFECTCODE");
+                for (int i = 0; i < dt.Rows.Count; i++)
+                {
+                    if (i > 0) defect += ",";
+                    defect += dt.Rows[i]["DEFECTCODE"].ToString() + " " + dt.Rows[i]["DEFECTNAME"].ToString();
+                }
+                string sumdefect = "";
+                DataTable dts = conn.ExecuteDatatable(@"SELECT DISTINCT MDF.DEFECTCODE AS DC,
+                                                          'TO_CHAR( COUNT( DISTINCT  CASE WHEN   DF.DEFECTCODE IS NOT NULL  AND  DF.DEFECTCODE = '''||MDF.DEFECTCODE||''' THEN to_char(pd.productiondataid||pd.BARCODE||DF.DEFECTCODE ) ELSE NULL END ) )' AS DEFECTCODE,
+	                                                   MDF.DEFECTNAME 
+													 
+	                          FROM TP_MST_DEFECT MDF
+							where DEFECTCODE IN("+defectcode+") ORDER BY  MDF.DEFECTCODE");
+                for (int i = 0; i < dts.Rows.Count; i++) {
+                    if (i > 0) sumdefect += ",";
+                    sumdefect += dts.Rows[i]["DEFECTCODE"].ToString()+" "+dts.Rows[i]["DEFECTNAME"].ToString();
+                }
+                string sqlStr = @"SELECT* FROM(
+                   SELECT   GROUPING_ID(GD.GOODSNAME,GD.GOODSSPECIFICATION,MD.DICTIONARYVALUE,LG.LOGONAME) AS GID, 
+											CASE WHEN GROUPING_ID(GD.GOODSNAME,GD.GOODSSPECIFICATION,MD.DICTIONARYVALUE,LG.LOGONAME) =15 then '合计'  ELSE TO_CHAR(GD.GOODSCODE )END AS 产品编码,
+	                                TO_CHAR(GD.GOODSNAME) AS 产品名称,
+	                                TO_CHAR(GD.GOODSSPECIFICATION) AS 产品规格,
+	                                TO_CHAR(MD.DICTIONARYVALUE) AS 釉色,
+	                                TO_CHAR(LG.LOGONAME) AS 商标,
+	                                TO_CHAR(COUNT(DISTINCT PD.productiondataid)) 出窑量,
+									TO_CHAR(COUNT( DISTINCT CASE WHEN MDF.DEFECTCODE IS NOT NULL AND DF.BARCODE IS NOT NULL  THEN TO_CHAR(pd.productiondataid||DF.BARCODE||MDF.DEFECTCODE) ELSE NULL END ))缺陷量,
+	                                TO_CHAR( (COUNT( DISTINCT CASE WHEN MDF.DEFECTCODE IS NOT NULL AND DF.BARCODE IS NOT NULL  THEN TO_CHAR(pd.productiondataid||DF.BARCODE||MDF.DEFECTCODE) ELSE NULL END )/COUNT(DISTINCT PD.BARCODE) * 100), 'fm99990.00') || '%' 缺陷率,
+                                    {DEFECT}
+                                FROM
+	                            (SELECT DISTINCT pd.barcode
+                                       ,pd.reworkprocedureid
+                                       ,pd.groutinglinecode
+                                        ,pd.goodsid
+                                       ,pd.goodscode
+                                       ,pd.goodsname
+                                       ,pd.groutinguserid
+                                       ,pd.groutingusercode
+                                       ,pd.groutingdailydetailid
+                                       ,pd.procedureid AS procedureid
+                                       ,nvl(pd61.goodsleveltypeid, pd.goodsleveltypeid) goodsleveltypeid
+                                       ,nvl(pd61.productiondataid, pd.productiondataid) productiondataid
+                                       ,pd.productiondataid  fproductiondataid
+                                       ,pd.createtime
+                                       ,pd.logoid
+                          FROM (SELECT *
+                                  FROM (SELECT pd28.groutinglinecode
+                                              ,pd28.reworkprocedureid
+                                              ,pd28.barcode
+                                              ,pd28.createtime
+                                              ,pd28.goodsid
+                                              ,pd28.goodsname
+                                              ,pd28.valueflag
+                                              ,pd28.goodsleveltypeid
+                                              ,pd28.goodscode
+                                              ,pd28.logoid
+                                              ,pd28.groutinguserid
+                                              ,pd28.groutingusercode
+                                              ,pd28.kilncarbatchno
+                                              ,pd28.productiondataid
+                                              ,pd28.groutingdailydetailid
+                                              ,pd24.procedureid
+                                              ,row_number() over(PARTITION BY pd28.productiondataid ORDER BY pd24.productiondataid DESC) AS rownums
+                                          FROM tp_pm_productiondata pd28 -- 重烧质量登记
+                                         INNER JOIN tp_pm_productiondata pd24 -- 重烧修补24 / 冷补42
+                                            ON pd24.groutingdailydetailid = pd28.groutingdailydetailid
+                                         WHERE pd28.procedureid = @kilproc@   -- 28
+                                           AND pd28.valueflag = 1
+                                           AND pd24.valueflag = 1
+                                           AND pd24.procedureid IN (  42,"+ProceduraID+@") --  重烧质量登记里包含 重烧修补24 / 冷补42     
+                                           -- 20251027 web报表中以末次质量登记时间节点统计质量数据调整为首次质量登记时间做统计质量数据变更 createtime - > checktime
+                                            AND pd28.checktime >= @DATEBEGIN@
+                                            AND pd28.checktime < @DATEEND@     
+                                           --AND pd28.createtime >= to_date('2025-04-17', 'yyyy-MM-DD')
+                                          -- AND pd28.createtime < to_date('2025-04-20 23:59:59', 'yyyy-mm-dd hh24:mi:ss')
+                                           AND pd24.productiondataid < pd28.productiondataid) t
+                                 WHERE rownums = 1
+                                   AND t.procedureid  in ( "+ProceduraID+@")) pd
+                          LEFT JOIN tp_mst_goods gd
+                            ON gd.goodsid = pd.goodsid
+                          LEFT JOIN tp_pm_productiondata pd61 -- 重烧质量检测
+                            ON pd61.procedureid = "+FunctionalTesting+@"
+                           AND pd61.valueflag = 1
+                           AND pd61.groutingdailydetailid = pd.groutingdailydetailid
+                           AND pd61.kilncarbatchno = pd.kilncarbatchno
+                           AND pd61.productiondataid > pd.productiondataid
+                              -- 取最近的数据
+                           AND NOT EXISTS
+                         (SELECT 1
+                                  FROM tp_pm_productiondata pd28c -- 重烧质量登记 重复的
+                                 WHERE pd28c.procedureid = @kilproc@   -- 28
+                                   AND pd28c.valueflag = 1
+                                   AND pd28c.groutingdailydetailid = pd.groutingdailydetailid
+                                   AND pd28c.kilncarbatchno = pd.kilncarbatchno
+                                   AND pd28c.productiondataid > pd.productiondataid
+                                   AND pd28c.productiondataid < pd61.productiondataid))
+
+                                PD
+								LEFT JOIN TP_PM_GROUTINGDAILYDETAIL GDL ON GDL.groutingdailydetailid=PD.groutingdailydetailid
+                                LEFT JOIN TP_MST_GOODS GD ON PD.GOODSID = GD.GOODSID
+                                LEFT JOIN TP_MST_DataDictionary MD ON GD.GLAZETYPEID = MD.DICTIONARYID AND MD.DICTIONARYTYPE = 'TPC002'
+                                LEFT JOIN TP_MST_LOGO LG ON PD.LOGOID = LG.LOGOID " ;
+                sqlStr += @"LEFT JOIN TP_PM_DEFECT DF ON df.productiondataid in (pd.productiondataid ,pd.fproductiondataid)  AND DF.VALUEFLAG=1  AND DF.PROCEDUREID NOT IN"+notInproc;
+                sqlStr += @"LEFT JOIN TP_MST_DEFECT MDF ON DF.DEFECTID = MDF.DEFECTID AND MDF.DEFECTCODE IN(" + defectcode + ") AND DF.VALUEFLAG=1";
+                sqlStr += @"    GROUP BY  Grouping sets ( (GD.GOODSCODE ,
+                                                        GD.GOODSNAME,
+                                                        GD.GOODSSPECIFICATION,
+                                                        MD.DICTIONARYVALUE,
+                                                        LG.LOGONAME ), ( ) )
+                    union ALL
+                        SELECT
+                            1,
+                            ''  产品编码,
+                            ''  产品名称,
+                            ''  产品规格,
+                            ''  釉色,
+                            ''  商标,
+                            '' 出窑量,
+                            '' 缺陷量,
+                            '' 缺陷率,
+                            {DEFECTSUM}  
+                        FROM 
+	                            (SELECT DISTINCT pd.barcode
+                                       ,pd.reworkprocedureid
+                                       ,pd.groutinglinecode
+                                        ,pd.goodsid
+                                       ,pd.goodscode
+                                       ,pd.goodsname
+                                       ,pd.groutinguserid
+                                       ,pd.groutingusercode
+                                       ,pd.groutingdailydetailid
+                                       ,pd.procedureid AS procedureid
+                                       ,nvl(pd61.goodsleveltypeid, pd.goodsleveltypeid) goodsleveltypeid
+                                       ,nvl(pd61.productiondataid, pd.productiondataid) productiondataid
+                                      ,pd.productiondataid  fproductiondataid
+                                       ,pd.createtime
+                                       ,pd.logoid
+                          FROM (SELECT *
+                                  FROM (SELECT pd28.groutinglinecode
+                                              ,pd28.reworkprocedureid
+                                              ,pd28.barcode
+                                              ,pd28.createtime
+                                              ,pd28.goodsid
+                                              ,pd28.goodsname
+                                              ,pd28.valueflag
+                                              ,pd28.goodsleveltypeid
+                                              ,pd28.goodscode
+                                              ,pd28.logoid
+                                              ,pd28.groutinguserid
+                                              ,pd28.groutingusercode
+                                              ,pd28.kilncarbatchno
+                                              ,pd28.productiondataid
+                                              ,pd28.groutingdailydetailid
+                                              ,pd24.procedureid
+                                              ,row_number() over(PARTITION BY pd28.productiondataid ORDER BY pd24.productiondataid DESC) AS rownums
+                                          FROM tp_pm_productiondata pd28 -- 重烧质量登记
+                                         INNER JOIN tp_pm_productiondata pd24 -- 重烧修补24 / 冷补42
+                                            ON pd24.groutingdailydetailid = pd28.groutingdailydetailid
+                                         WHERE pd28.procedureid = @kilproc@   -- 28
+                                           AND pd28.valueflag = 1
+                                           AND pd24.valueflag = 1
+                                           AND pd24.procedureid IN (  42,"+ProceduraID+@") --  重烧质量登记里包含 重烧修补24 / 冷补42     
+ -- 20251027 web报表中以末次质量登记时间节点统计质量数据调整为首次质量登记时间做统计质量数据变更 createtime - > checktime
+                                            AND pd28.checktime >= @DATEBEGIN@
+                                            AND pd28.checktime < @DATEEND@    
+                                           --AND pd28.createtime >= to_date('2025-04-17', 'yyyy-MM-DD')
+                                          -- AND pd28.createtime < to_date('2025-04-20 23:59:59', 'yyyy-mm-dd hh24:mi:ss')
+                                           AND pd24.productiondataid < pd28.productiondataid) t
+                                 WHERE rownums = 1
+                                   AND t.procedureid  in ( "+ProceduraID+@")) pd
+                          LEFT JOIN tp_mst_goods gd
+                            ON gd.goodsid = pd.goodsid
+                          LEFT JOIN tp_pm_productiondata pd61 -- 重烧质量检测
+                            ON pd61.procedureid = "+FunctionalTesting+@"
+                           AND pd61.valueflag = 1
+                           AND pd61.groutingdailydetailid = pd.groutingdailydetailid
+                           AND pd61.kilncarbatchno = pd.kilncarbatchno
+                           AND pd61.productiondataid > pd.productiondataid
+                              -- 取最近的数据
+                           AND NOT EXISTS
+                         (SELECT 1
+                                  FROM tp_pm_productiondata pd28c -- 重烧质量登记 重复的
+                                 WHERE pd28c.procedureid = @kilproc@   -- 28
+                                   AND pd28c.valueflag = 1
+                                   AND pd28c.groutingdailydetailid = pd.groutingdailydetailid
+                                   AND pd28c.kilncarbatchno = pd.kilncarbatchno
+                                   AND pd28c.productiondataid > pd.productiondataid
+                                   AND pd28c.productiondataid < pd61.productiondataid)) PD
+								LEFT JOIN TP_PM_GROUTINGDAILYDETAIL GDL ON GDL.groutingdailydetailid=PD.groutingdailydetailid
+                                LEFT JOIN TP_MST_GOODS GD ON PD.GOODSID = GD.GOODSID
+                                LEFT JOIN TP_MST_DataDictionary MD ON GD.GLAZETYPEID = MD.DICTIONARYID AND MD.DICTIONARYTYPE = 'TPC002'
+                                LEFT JOIN TP_MST_LOGO LG ON PD.LOGOID = LG.LOGOID " ;
+                sqlStr += @"LEFT JOIN TP_PM_DEFECT DF ON df.productiondataid in (pd.productiondataid ,pd.fproductiondataid) AND DF.VALUEFLAG=1  AND DF.PROCEDUREID NOT IN"+notInproc;
+                sqlStr += @"LEFT JOIN TP_MST_DEFECT MDF ON DF.DEFECTID = MDF.DEFECTID AND MDF.DEFECTCODE IN(" + defectcode + ") AND DF.VALUEFLAG=1   ) ORDER BY GID ";
+                                  
+                 sqlStr = sqlStr.Replace("{DEFECT}", defect).Replace("{DEFECTSUM}",sumdefect);
+
+                //获取查询条件
+                List<CDAParameter> sqlPara = new List<CDAParameter>();
+                sqlPara.Add(new CDAParameter("DATEBEGIN", dateBegin, DataType.DateTime));
+                sqlPara.Add(new CDAParameter("DATEEND", dateEnd, DataType.DateTime));
+                sqlPara.Add(new CDAParameter("kilproc", Convert.ToInt32(kilproc), DataType.Int32));
+                //获取分页参数
+                int page = HttpContext.Current.Request["page"] is object ? Convert.ToInt32(HttpContext.Current.Request["page"]) : 1;
+                int rows = HttpContext.Current.Request["rows"] is object ? Convert.ToInt32(HttpContext.Current.Request["rows"]) : 10000;
+                string sort = HttpContext.Current.Request["sort"] is object ? HttpContext.Current.Request["sort"] : "m.REPORTCODE";
+                string order = HttpContext.Current.Request["order"] is object ? HttpContext.Current.Request["order"] : "";
+
+                //获取分页数据    
+                int total = 0;
+                DataTable d = conn.SelectPages(page, rows, out total, sqlStr, sqlPara.ToArray());
+                if (d!=null && d.Rows.Count > 0) {
+                    d.Columns.Remove("GID");//移除GID列
+                }
+                string jsonStr = new JsonResult(d) { total = total }.ToJson();
+                context.Response.Write(jsonStr);
+            }
+        }
+    }
+
+    public bool IsReusable
+    {
+        get
+        {
+            return false;
+        }
+    }
+}

+ 85 - 1
wwwroot/mes/rpt/rpt207/rpt.ashx

@@ -238,7 +238,91 @@ public class rpt : IHttpHandler, IReadOnlySessionState
                                 LEFT JOIN TP_MST_DataDictionary MD ON GD.GLAZETYPEID = MD.DICTIONARYID AND MD.DICTIONARYTYPE = 'TPC002'
                                 LEFT JOIN TP_MST_LOGO LG ON PD.LOGOID = LG.LOGOID " ;
                 sqlStr += @"LEFT JOIN TP_PM_DEFECT DF ON df.productiondataid in (pd.productiondataid ,pd.fproductiondataid) AND DF.VALUEFLAG=1  AND DF.PROCEDUREID NOT IN"+notInproc;
-                sqlStr += @"LEFT JOIN TP_MST_DEFECT MDF ON DF.DEFECTID = MDF.DEFECTID AND MDF.DEFECTCODE IN(" + defectcode + ") AND DF.VALUEFLAG=1   ) ORDER BY GID ";
+                sqlStr += @"LEFT JOIN TP_MST_DEFECT MDF ON DF.DEFECTID = MDF.DEFECTID AND MDF.DEFECTCODE IN(" + defectcode + @") AND DF.VALUEFLAG=1     union ALL
+                        SELECT
+                            2,
+                            case when  substr(gtp.goodstypecode, 0, 6) = '001002' then '小件合计'else '大件合计' end    产品编码,
+                            ''  产品名称,
+                            ''  产品规格,
+                            ''  釉色,
+                            ''  商标,
+                            '' 出窑量,
+                            '' 缺陷量,
+                            '' 缺陷率,
+                            {DEFECTSUM}  
+                        FROM 
+	                            (SELECT DISTINCT pd.barcode
+                                       ,pd.reworkprocedureid
+                                       ,pd.groutinglinecode
+                                        ,pd.goodsid
+                                       ,pd.goodscode
+                                       ,pd.goodsname
+                                       ,pd.groutinguserid
+                                       ,pd.groutingusercode
+                                       ,pd.groutingdailydetailid
+                                       ,pd.procedureid AS procedureid
+                                       ,nvl(pd61.goodsleveltypeid, pd.goodsleveltypeid) goodsleveltypeid
+                                       ,nvl(pd61.productiondataid, pd.productiondataid) productiondataid
+                                      ,pd.productiondataid  fproductiondataid
+                                       ,pd.createtime
+                                       ,pd.logoid
+                          FROM (SELECT *
+                                  FROM (SELECT pd28.groutinglinecode
+                                              ,pd28.reworkprocedureid
+                                              ,pd28.barcode
+                                              ,pd28.createtime
+                                              ,pd28.goodsid
+                                              ,pd28.goodsname
+                                              ,pd28.valueflag
+                                              ,pd28.goodsleveltypeid
+                                              ,pd28.goodscode
+                                              ,pd28.logoid
+                                              ,pd28.groutinguserid
+                                              ,pd28.groutingusercode
+                                              ,pd28.kilncarbatchno
+                                              ,pd28.productiondataid
+                                              ,pd28.groutingdailydetailid
+                                              ,pd24.procedureid
+                                              ,row_number() over(PARTITION BY pd28.productiondataid ORDER BY pd24.productiondataid DESC) AS rownums
+                                          FROM tp_pm_productiondata pd28 -- 重烧质量登记
+                                         INNER JOIN tp_pm_productiondata pd24 -- 重烧修补24 / 冷补42
+                                            ON pd24.groutingdailydetailid = pd28.groutingdailydetailid
+                                         WHERE pd28.procedureid = @kilproc@   -- 28
+                                           AND pd28.valueflag = 1
+                                           AND pd24.valueflag = 1
+                                           AND pd24.procedureid IN (  42,"+ProceduraID+@") --  重烧质量登记里包含 重烧修补24 / 冷补42     
+                                            AND pd28.CREATETIME >= @DATEBEGIN@
+                                            AND pd28.CREATETIME < @DATEEND@    
+                                           --AND pd28.createtime >= to_date('2025-04-17', 'yyyy-MM-DD')
+                                          -- AND pd28.createtime < to_date('2025-04-20 23:59:59', 'yyyy-mm-dd hh24:mi:ss')
+                                           AND pd24.productiondataid < pd28.productiondataid) t
+                                 WHERE rownums = 1
+                                   AND t.procedureid  in ( "+ProceduraID+@")) pd
+                          LEFT JOIN tp_mst_goods gd
+                            ON gd.goodsid = pd.goodsid
+                          LEFT JOIN tp_pm_productiondata pd61 -- 重烧质量检测
+                            ON pd61.procedureid = "+FunctionalTesting+@"
+                           AND pd61.valueflag = 1
+                           AND pd61.groutingdailydetailid = pd.groutingdailydetailid
+                           AND pd61.kilncarbatchno = pd.kilncarbatchno
+                           AND pd61.productiondataid > pd.productiondataid
+                              -- 取最近的数据
+                           AND NOT EXISTS
+                         (SELECT 1
+                                  FROM tp_pm_productiondata pd28c -- 重烧质量登记 重复的
+                                 WHERE pd28c.procedureid = @kilproc@   -- 28
+                                   AND pd28c.valueflag = 1
+                                   AND pd28c.groutingdailydetailid = pd.groutingdailydetailid
+                                   AND pd28c.kilncarbatchno = pd.kilncarbatchno
+                                   AND pd28c.productiondataid > pd.productiondataid
+                                   AND pd28c.productiondataid < pd61.productiondataid)) PD
+								LEFT JOIN TP_PM_GROUTINGDAILYDETAIL GDL ON GDL.groutingdailydetailid=PD.groutingdailydetailid
+                                LEFT JOIN TP_MST_GOODS GD ON PD.GOODSID = GD.GOODSID
+ LEFT JOIN tp_mst_goodstype gtp ON gd.goodstypeid = gtp.goodstypeid
+                                LEFT JOIN TP_MST_DataDictionary MD ON GD.GLAZETYPEID = MD.DICTIONARYID AND MD.DICTIONARYTYPE = 'TPC002'
+                                LEFT JOIN TP_MST_LOGO LG ON PD.LOGOID = LG.LOGOID " ;
+                sqlStr += @"LEFT JOIN TP_PM_DEFECT DF ON df.productiondataid in (pd.productiondataid ,pd.fproductiondataid) AND DF.VALUEFLAG=1  AND DF.PROCEDUREID NOT IN"+notInproc;
+                sqlStr += @"LEFT JOIN TP_MST_DEFECT MDF ON DF.DEFECTID = MDF.DEFECTID AND MDF.DEFECTCODE IN(" + defectcode + ") AND DF.VALUEFLAG=1    group by substr(gtp.goodstypecode, 0, 6)     ) ORDER BY GID ";
                                   
                  sqlStr = sqlStr.Replace("{DEFECT}", defect).Replace("{DEFECTSUM}",sumdefect);
 

+ 277 - 0
wwwroot/mes/rpt/rpt208/rpt - 副本.ashx

@@ -0,0 +1,277 @@
+<%@ WebHandler Language="C#" Class="rpt" %>
+
+using System;
+using System.Web;
+using System.Web.SessionState;
+using System.Data;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+using Curtain.DataAccess;
+using DK.XuWei.WebMes;
+
+public class rpt : IHttpHandler, IReadOnlySessionState
+{
+    public void ProcessRequest(HttpContext context)
+    {
+        context.Response.ContentType = "text/plain";
+        string kilproc = "16"; //出窑工序
+        string notInproc = " (61,28)";//排除工序
+        string FunctionalTesting = "60"; //功能检测
+        string defectcode = "'69','70','71','43','73','74','75','76','77','78','79','80','43'";
+            string ProceduraID = "39,57";
+        if (context.Request["procedureMaster"] == "回烧") {
+            kilproc = "28";//出窑工序
+            FunctionalTesting = "61";//功能检测
+            notInproc = "(16,60)";//排除工序
+            defectcode = "'069','070','071','43','073','074','075','076','077','078','079','080'";
+                ProceduraID = "58";
+        }
+
+
+        using (IDataAccess conn = DataAccess.Create())
+        {
+            //主表
+            if (context.Request["m"].ToString() == "master")
+            {
+                DateTime dateBegin = Convert.ToDateTime(context.Request["datebeginMaster"]);
+                DateTime dateEnd = Convert.ToDateTime(context.Request["dateendMaster"]);
+                string defect = "";
+                DataTable dt = conn.ExecuteDatatable(@"SELECT
+	                            DISTINCT MDF.DEFECTCODE AS DC,
+	                            'CASE WHEN gd.GOODSNAME IS NULL 
+                                  THEN
+	                                TO_CHAR( ( COUNT( DISTINCT  CASE WHEN   DF.DEFECTCODE = '''||MDF.DEFECTCODE||''' THEN to_char(pd.productiondataid||pd.BARCODE||DF.DEFECTCODE ) ELSE NULL END ) / COUNT( DISTINCT PD.productiondataid ) * 100 ), ''fm99990.00'' ) || ''%''
+	                              ELSE
+                                   TO_CHAR( COUNT( DISTINCT  CASE WHEN DF.DEFECTCODE IS NOT NULL  AND   DF.DEFECTCODE = '''||MDF.DEFECTCODE||''' THEN to_char(pd.productiondataid||pd.BARCODE||DF.DEFECTCODE ) ELSE NULL END ) ) END
+' AS DEFECTCODE,
+	                            MDF.DEFECTNAME 
+                            FROM TP_MST_DEFECT MDF
+							where MDF.DEFECTCODE IN("+defectcode+") ORDER BY  MDF.DEFECTCODE DESC");
+
+                for (int i = 0; i < dt.Rows.Count; i++)
+                {
+                    if (i > 0) defect += ",";
+                    defect += dt.Rows[i]["DEFECTCODE"].ToString() + " " + dt.Rows[i]["DEFECTNAME"].ToString();
+                }
+                string sumdefect = "";
+                DataTable dts = conn.ExecuteDatatable(@"SELECT DISTINCT MDF.DEFECTCODE AS DC,
+                                                        'TO_CHAR( COUNT( DISTINCT  CASE WHEN   DF.DEFECTCODE IS NOT NULL  AND  DF.DEFECTCODE = '''||MDF.DEFECTCODE||''' THEN to_char(pd.productiondataid||pd.BARCODE||DF.DEFECTCODE ) ELSE NULL END ) )' AS DEFECTCODE,
+	                                                   MDF.DEFECTNAME 
+	                         FROM TP_MST_DEFECT MDF
+						where MDF.DEFECTCODE IN("+defectcode+") ORDER BY  MDF.DEFECTCODE DESC");
+                for (int i = 0; i < dts.Rows.Count; i++) {
+                    if (i > 0) sumdefect += ",";
+                    sumdefect += dts.Rows[i]["DEFECTCODE"].ToString()+" "+dts.Rows[i]["DEFECTNAME"].ToString();
+                }
+
+
+                string sqlStr = @"SELECT* FROM(
+                   SELECT   GROUPING_ID(GD.GOODSNAME,GD.GOODSSPECIFICATION,MD.DICTIONARYVALUE,LG.LOGONAME) AS GID, 
+											CASE WHEN GROUPING_ID(GD.GOODSNAME,GD.GOODSSPECIFICATION,MD.DICTIONARYVALUE,LG.LOGONAME) =15 then '合计'  ELSE TO_CHAR(GD.GOODSCODE )END AS 产品编码,
+	                                TO_CHAR(GD.GOODSNAME) AS 产品名称,
+	                                TO_CHAR(GD.GOODSSPECIFICATION) AS 产品规格,
+	                                TO_CHAR(MD.DICTIONARYVALUE) AS 釉色,
+	                                TO_CHAR(LG.LOGONAME) AS 商标,
+	                                TO_CHAR(COUNT(DISTINCT PD.productiondataid)) 出窑量,
+                               TO_CHAR(COUNT( DISTINCT CASE WHEN MDF.DEFECTCODE IS NOT NULL AND DF.BARCODE IS NOT NULL  THEN TO_CHAR(pd.productiondataid||DF.BARCODE||MDF.DEFECTCODE) ELSE NULL END ))缺陷量,
+	                                TO_CHAR( (COUNT( DISTINCT CASE WHEN MDF.DEFECTCODE IS NOT NULL AND DF.BARCODE IS NOT NULL  THEN TO_CHAR(pd.productiondataid||DF.BARCODE||MDF.DEFECTCODE) ELSE NULL END )/COUNT(DISTINCT PD.productiondataid) * 100), 'fm99990.00') || '%' 缺陷率,
+                                    {DEFECT}
+                                FROM 
+	                            (SELECT DISTINCT pd.barcode
+                                       ,pd.reworkprocedureid
+                                       ,pd.groutinglinecode
+                                        ,pd.goodsid
+                                       ,pd.goodscode
+                                       ,pd.goodsname
+                                       ,pd.groutinguserid
+                                       ,pd.groutingusercode
+                                       ,pd.groutingdailydetailid
+                                       ,pd.procedureid AS procedureid
+                                       ,nvl(pd61.goodsleveltypeid, pd.goodsleveltypeid) goodsleveltypeid
+                                       ,nvl(pd61.productiondataid, pd.productiondataid) productiondataid
+                                       ,pd.productiondataid  fproductiondataid
+                                       ,pd.createtime
+                                       ,pd.logoid
+                          FROM (SELECT *
+                                  FROM (SELECT pd28.groutinglinecode
+                                              ,pd28.reworkprocedureid
+                                              ,pd28.barcode
+                                              ,pd28.createtime
+                                              ,pd28.goodsid
+                                              ,pd28.goodsname
+                                              ,pd28.valueflag
+                                              ,pd28.goodsleveltypeid
+                                              ,pd28.goodscode
+                                              ,pd28.logoid
+                                              ,pd28.groutinguserid
+                                              ,pd28.groutingusercode
+                                              ,pd28.kilncarbatchno
+                                              ,pd28.productiondataid
+                                              ,pd28.groutingdailydetailid
+                                              ,pd24.procedureid
+                                              ,row_number() over(PARTITION BY pd28.productiondataid ORDER BY pd24.productiondataid DESC) AS rownums
+                                          FROM tp_pm_productiondata pd28 -- 重烧质量登记
+                                         INNER JOIN tp_pm_productiondata pd24 -- 重烧修补24 / 冷补42
+                                            ON pd24.groutingdailydetailid = pd28.groutingdailydetailid
+                                         WHERE pd28.procedureid = @kilproc@   -- 28
+                                           AND pd28.valueflag = 1
+                                           AND pd24.valueflag = 1
+                                           AND pd24.procedureid IN (  42,"+ProceduraID+@") --  重烧质量登记里包含 重烧修补24 / 冷补42     
+ -- 20251027 web报表中以末次质量登记时间节点统计质量数据调整为首次质量登记时间做统计质量数据变更 createtime - > checktime
+                                            AND pd28.checktime >= @DATEBEGIN@
+                                            AND pd28.checktime < @DATEEND@      
+                                           --AND pd28.createtime >= to_date('2025-04-17', 'yyyy-MM-DD')
+                                          -- AND pd28.createtime < to_date('2025-04-20 23:59:59', 'yyyy-mm-dd hh24:mi:ss')
+                                           AND pd24.productiondataid < pd28.productiondataid) t
+                                 WHERE rownums = 1
+                                   AND t.procedureid  in ( "+ProceduraID+@")) pd
+                         LEFT JOIN tp_mst_goods gd
+                            ON gd.goodsid = pd.goodsid
+                          LEFT JOIN tp_pm_productiondata pd61 -- 重烧质量检测
+                            ON pd61.procedureid = "+FunctionalTesting+@"
+                           AND pd61.valueflag = 1
+                           AND pd61.groutingdailydetailid = pd.groutingdailydetailid
+                           AND pd61.kilncarbatchno = pd.kilncarbatchno
+                           AND pd61.productiondataid > pd.productiondataid
+                              -- 取最近的数据
+                           AND NOT EXISTS
+                         (SELECT 1
+                                  FROM tp_pm_productiondata pd28c -- 重烧质量登记 重复的
+                                 WHERE pd28c.procedureid = @kilproc@   -- 28
+                                   AND pd28c.valueflag = 1
+                                   AND pd28c.groutingdailydetailid = pd.groutingdailydetailid
+                                   AND pd28c.kilncarbatchno = pd.kilncarbatchno
+                                   AND pd28c.productiondataid > pd.productiondataid
+                                   AND pd28c.productiondataid < pd61.productiondataid))  PD
+								LEFT JOIN TP_PM_GROUTINGDAILYDETAIL GDL ON GDL.groutingdailydetailid=PD.groutingdailydetailid
+                                LEFT JOIN TP_MST_GOODS GD ON PD.GOODSID = GD.GOODSID
+                                LEFT JOIN TP_MST_DataDictionary MD ON GD.GLAZETYPEID = MD.DICTIONARYID AND MD.DICTIONARYTYPE = 'TPC002'
+                                LEFT JOIN TP_MST_LOGO LG ON PD.LOGOID = LG.LOGOID" ;
+                sqlStr += @" LEFT JOIN TP_PM_DEFECT DF ON df.productiondataid in (pd.productiondataid ,pd.fproductiondataid)	AND DF.VALUEFLAG=1  AND DF.PROCEDUREID NOT IN"+notInproc;
+                sqlStr += @" LEFT JOIN TP_MST_DEFECT MDF ON DF.DEFECTID = MDF.DEFECTID AND  MDF.DEFECTCODE IN(" + defectcode + ") ";
+                sqlStr += @"  GROUP BY Grouping sets ( (GD.GOODSCODE ,
+                                                        GD.GOODSNAME,
+                                                        GD.GOODSSPECIFICATION,
+                                                        MD.DICTIONARYVALUE,
+                                                        LG.LOGONAME ), ( ) ) 
+                union ALL
+                        SELECT
+                            1,
+                            ''  产品编码,
+                            ''  产品名称,
+                            ''  产品规格,
+                            ''  釉色,
+                            ''  商标,
+                            '' 出窑量,
+                            '' 缺陷量,
+                            '' 缺陷率,
+                            {DEFECTSUM}  
+                        FROM 
+	                            (SELECT DISTINCT pd.barcode
+                                       ,pd.reworkprocedureid
+                                       ,pd.groutinglinecode
+                                        ,pd.goodsid
+                                       ,pd.goodscode
+                                       ,pd.goodsname
+                                       ,pd.groutinguserid
+                                       ,pd.groutingusercode
+                                       ,pd.groutingdailydetailid
+                                       ,pd.procedureid AS procedureid
+                                       ,nvl(pd61.goodsleveltypeid, pd.goodsleveltypeid) goodsleveltypeid
+                                       ,nvl(pd61.productiondataid, pd.productiondataid) productiondataid
+                                       ,pd.productiondataid  fproductiondataid
+                                       ,pd.createtime
+                                       ,pd.logoid
+                          FROM (SELECT *
+                                  FROM (SELECT pd28.groutinglinecode
+                                              ,pd28.reworkprocedureid
+                                              ,pd28.barcode
+                                              ,pd28.createtime
+                                              ,pd28.goodsid
+                                              ,pd28.goodsname
+                                              ,pd28.valueflag
+                                              ,pd28.goodsleveltypeid
+                                              ,pd28.goodscode
+                                              ,pd28.logoid
+                                              ,pd28.groutinguserid
+                                              ,pd28.groutingusercode
+                                              ,pd28.kilncarbatchno
+                                              ,pd28.productiondataid
+                                              ,pd28.groutingdailydetailid
+                                              ,pd24.procedureid
+                                              ,row_number() over(PARTITION BY pd28.productiondataid ORDER BY pd24.productiondataid DESC) AS rownums
+                                          FROM tp_pm_productiondata pd28 -- 重烧质量登记
+                                         INNER JOIN tp_pm_productiondata pd24 -- 重烧修补24 / 冷补42
+                                            ON pd24.groutingdailydetailid = pd28.groutingdailydetailid
+                                         WHERE pd28.procedureid = @kilproc@   -- 28
+                                           AND pd28.valueflag = 1
+                                           AND pd24.valueflag = 1
+                                           AND pd24.procedureid IN (  42,"+ProceduraID+@") --  重烧质量登记里包含 重烧修补24 / 冷补42     
+ -- 20251027 web报表中以末次质量登记时间节点统计质量数据调整为首次质量登记时间做统计质量数据变更 createtime - > checktime
+                                            AND pd28.checktime >= @DATEBEGIN@
+                                            AND pd28.checktime < @DATEEND@     
+                                           --AND pd28.createtime >= to_date('2025-04-17', 'yyyy-MM-DD')
+                                          -- AND pd28.createtime < to_date('2025-04-20 23:59:59', 'yyyy-mm-dd hh24:mi:ss')
+                                           AND pd24.productiondataid < pd28.productiondataid) t
+                                 WHERE rownums = 1
+                                   AND t.procedureid  in ( "+ProceduraID+@")) pd
+                          LEFT JOIN tp_mst_goods gd
+                            ON gd.goodsid = pd.goodsid
+                          LEFT JOIN tp_pm_productiondata pd61 -- 重烧质量检测
+                            ON pd61.procedureid = "+FunctionalTesting+@"
+                           AND pd61.valueflag = 1
+                           AND pd61.groutingdailydetailid = pd.groutingdailydetailid
+                           AND pd61.kilncarbatchno = pd.kilncarbatchno
+                           AND pd61.productiondataid > pd.productiondataid
+                              -- 取最近的数据
+                           AND NOT EXISTS
+                         (SELECT 1
+                                  FROM tp_pm_productiondata pd28c -- 重烧质量登记 重复的
+                                 WHERE pd28c.procedureid = @kilproc@   -- 28
+                                   AND pd28c.valueflag = 1
+                                   AND pd28c.groutingdailydetailid = pd.groutingdailydetailid
+                                   AND pd28c.kilncarbatchno = pd.kilncarbatchno
+                                   AND pd28c.productiondataid > pd.productiondataid
+                                   AND pd28c.productiondataid < pd61.productiondataid)) PD
+								LEFT JOIN TP_PM_GROUTINGDAILYDETAIL GDL ON GDL.groutingdailydetailid=PD.groutingdailydetailid
+                                LEFT JOIN TP_MST_GOODS GD ON PD.GOODSID = GD.GOODSID
+                                LEFT JOIN TP_MST_DataDictionary MD ON GD.GLAZETYPEID = MD.DICTIONARYID AND MD.DICTIONARYTYPE = 'TPC002'
+                                LEFT JOIN TP_MST_LOGO LG ON PD.LOGOID = LG.LOGOID " ;
+                sqlStr += @"LEFT JOIN TP_PM_DEFECT DF ON df.productiondataid in (pd.productiondataid ,pd.fproductiondataid)  AND DF.VALUEFLAG=1  AND DF.PROCEDUREID NOT IN"+notInproc;
+                sqlStr += @"LEFT JOIN TP_MST_DEFECT MDF ON DF.DEFECTID = MDF.DEFECTID AND MDF.DEFECTCODE IN(" + defectcode + ")     ) ORDER BY GID ";
+                                  
+                 sqlStr = sqlStr.Replace("{DEFECT}", defect).Replace("{DEFECTSUM}",sumdefect); 
+                //获取查询条件
+                List<CDAParameter> sqlPara = new List<CDAParameter>();
+                sqlPara.Add(new CDAParameter("DATEBEGIN", dateBegin, DataType.DateTime));
+                sqlPara.Add(new CDAParameter("DATEEND", dateEnd, DataType.DateTime));
+                sqlPara.Add(new CDAParameter("kilproc", Convert.ToInt32(kilproc), DataType.Int32));
+                //获取分页参数
+                int page = HttpContext.Current.Request["page"] is object ? Convert.ToInt32(HttpContext.Current.Request["page"]) : 1;
+                int rows = HttpContext.Current.Request["rows"] is object ? Convert.ToInt32(HttpContext.Current.Request["rows"]) : 10000;
+                string sort = HttpContext.Current.Request["sort"] is object ? HttpContext.Current.Request["sort"] : "m.REPORTCODE";
+                string order = HttpContext.Current.Request["order"] is object ? HttpContext.Current.Request["order"] : "";
+
+                //获取分页数据    
+                int total = 0;
+                DataTable d = conn.SelectPages(page, rows, out total, sqlStr, sqlPara.ToArray());
+                 if (d!=null && d.Rows.Count > 0) {
+                d.Columns.Remove("GID");//移除GID列
+                         }
+                string jsonStr = new JsonResult(d) { total = total }.ToJson();
+                context.Response.Write(jsonStr);
+            }
+        }
+    }
+
+    public bool IsReusable
+    {
+        get
+        {
+            return false;
+        }
+    }
+}

+ 90 - 1
wwwroot/mes/rpt/rpt208/rpt.ashx

@@ -239,7 +239,96 @@ public class rpt : IHttpHandler, IReadOnlySessionState
                                 LEFT JOIN TP_MST_DataDictionary MD ON GD.GLAZETYPEID = MD.DICTIONARYID AND MD.DICTIONARYTYPE = 'TPC002'
                                 LEFT JOIN TP_MST_LOGO LG ON PD.LOGOID = LG.LOGOID " ;
                 sqlStr += @"LEFT JOIN TP_PM_DEFECT DF ON df.productiondataid in (pd.productiondataid ,pd.fproductiondataid)  AND DF.VALUEFLAG=1  AND DF.PROCEDUREID NOT IN"+notInproc;
-                sqlStr += @"LEFT JOIN TP_MST_DEFECT MDF ON DF.DEFECTID = MDF.DEFECTID AND MDF.DEFECTCODE IN(" + defectcode + ")     ) ORDER BY GID ";
+                sqlStr += @"LEFT JOIN TP_MST_DEFECT MDF ON DF.DEFECTID = MDF.DEFECTID AND MDF.DEFECTCODE IN(" + defectcode + @")  
+
+union ALL
+                        SELECT
+                            2,
+                            case when  substr(gtp.goodstypecode, 0, 6) = '001002' then '小件合计'else '大件合计' end   产品编码,
+                            ''  产品名称,
+                            ''  产品规格,
+                            ''  釉色,
+                            ''  商标,
+                            '' 出窑量,
+                            '' 缺陷量,
+                            '' 缺陷率,
+                            {DEFECTSUM}  
+                        FROM 
+	                            (SELECT DISTINCT pd.barcode
+                                       ,pd.reworkprocedureid
+                                       ,pd.groutinglinecode
+                                        ,pd.goodsid
+                                       ,pd.goodscode
+                                       ,pd.goodsname
+                                       ,pd.groutinguserid
+                                       ,pd.groutingusercode
+                                       ,pd.groutingdailydetailid
+                                       ,pd.procedureid AS procedureid
+                                       ,nvl(pd61.goodsleveltypeid, pd.goodsleveltypeid) goodsleveltypeid
+                                       ,nvl(pd61.productiondataid, pd.productiondataid) productiondataid
+                                       ,pd.productiondataid  fproductiondataid
+                                       ,pd.createtime
+                                       ,pd.logoid
+                          FROM (SELECT *
+                                  FROM (SELECT pd28.groutinglinecode
+                                              ,pd28.reworkprocedureid
+                                              ,pd28.barcode
+                                              ,pd28.createtime
+                                              ,pd28.goodsid
+                                              ,pd28.goodsname
+                                              ,pd28.valueflag
+                                              ,pd28.goodsleveltypeid
+                                              ,pd28.goodscode
+                                              ,pd28.logoid
+                                              ,pd28.groutinguserid
+                                              ,pd28.groutingusercode
+                                              ,pd28.kilncarbatchno
+                                              ,pd28.productiondataid
+                                              ,pd28.groutingdailydetailid
+                                              ,pd24.procedureid
+                                              ,row_number() over(PARTITION BY pd28.productiondataid ORDER BY pd24.productiondataid DESC) AS rownums
+                                          FROM tp_pm_productiondata pd28 -- 重烧质量登记
+                                         INNER JOIN tp_pm_productiondata pd24 -- 重烧修补24 / 冷补42
+                                            ON pd24.groutingdailydetailid = pd28.groutingdailydetailid
+                                         WHERE pd28.procedureid = @kilproc@   -- 28
+                                           AND pd28.valueflag = 1
+                                           AND pd24.valueflag = 1
+                                           AND pd24.procedureid IN (  42,"+ProceduraID+@") --  重烧质量登记里包含 重烧修补24 / 冷补42     
+                                            AND pd28.CREATETIME >= @DATEBEGIN@
+                                            AND pd28.CREATETIME < @DATEEND@    
+                                           --AND pd28.createtime >= to_date('2025-04-17', 'yyyy-MM-DD')
+                                          -- AND pd28.createtime < to_date('2025-04-20 23:59:59', 'yyyy-mm-dd hh24:mi:ss')
+                                           AND pd24.productiondataid < pd28.productiondataid) t
+                                 WHERE rownums = 1
+                                   AND t.procedureid  in ( "+ProceduraID+@")) pd
+                          LEFT JOIN tp_mst_goods gd
+                            ON gd.goodsid = pd.goodsid
+                          LEFT JOIN tp_pm_productiondata pd61 -- 重烧质量检测
+                            ON pd61.procedureid = "+FunctionalTesting+@"
+                           AND pd61.valueflag = 1
+                           AND pd61.groutingdailydetailid = pd.groutingdailydetailid
+                           AND pd61.kilncarbatchno = pd.kilncarbatchno
+                           AND pd61.productiondataid > pd.productiondataid
+                              -- 取最近的数据
+                           AND NOT EXISTS
+                         (SELECT 1
+                                  FROM tp_pm_productiondata pd28c -- 重烧质量登记 重复的
+                                 WHERE pd28c.procedureid = @kilproc@   -- 28
+                                   AND pd28c.valueflag = 1
+                                   AND pd28c.groutingdailydetailid = pd.groutingdailydetailid
+                                   AND pd28c.kilncarbatchno = pd.kilncarbatchno
+                                   AND pd28c.productiondataid > pd.productiondataid
+                                   AND pd28c.productiondataid < pd61.productiondataid)) PD
+								LEFT JOIN TP_PM_GROUTINGDAILYDETAIL GDL ON GDL.groutingdailydetailid=PD.groutingdailydetailid
+                                LEFT JOIN TP_MST_GOODS GD ON PD.GOODSID = GD.GOODSID
+ LEFT JOIN tp_mst_goodstype gtp ON gd.goodstypeid = gtp.goodstypeid
+                                LEFT JOIN TP_MST_DataDictionary MD ON GD.GLAZETYPEID = MD.DICTIONARYID AND MD.DICTIONARYTYPE = 'TPC002'
+                                LEFT JOIN TP_MST_LOGO LG ON PD.LOGOID = LG.LOGOID " ;
+                sqlStr += @"LEFT JOIN TP_PM_DEFECT DF ON df.productiondataid in (pd.productiondataid ,pd.fproductiondataid)  AND DF.VALUEFLAG=1  AND DF.PROCEDUREID NOT IN"+notInproc;
+                sqlStr += @"LEFT JOIN TP_MST_DEFECT MDF ON DF.DEFECTID = MDF.DEFECTID AND MDF.DEFECTCODE IN(" + defectcode + @") group by substr(gtp.goodstypecode, 0, 6)  
+
+
+) ORDER BY GID ";
                                   
                  sqlStr = sqlStr.Replace("{DEFECT}", defect).Replace("{DEFECTSUM}",sumdefect); 
                 //获取查询条件

+ 279 - 0
wwwroot/mes/rpt/rpt209/rpt - 副本.ashx

@@ -0,0 +1,279 @@
+<%@ WebHandler Language="C#" Class="rpt" %>
+
+using System;
+using System.Web;
+using System.Web.SessionState;
+using System.Data;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+using Curtain.DataAccess;
+using DK.XuWei.WebMes;
+
+public class rpt : IHttpHandler, IReadOnlySessionState
+{
+    public void ProcessRequest(HttpContext context)
+    {
+        context.Response.ContentType = "text/plain";
+        string kilproc = "16"; //出窑工序
+        string notInproc = " (61,28)";//排除工序
+        string FunctionalTesting = "60"; //功能检测
+        string defectcode = "'83','84'";
+                string ProceduraID = "14,56";
+        if (context.Request["procedureMaster"] == "回烧") {
+            kilproc = "28";//出窑工序
+            FunctionalTesting = "61";//功能检测
+            notInproc = "(16,60)";//排除工序
+            defectcode = "'0083','0084'";
+                   ProceduraID = "26";
+        }
+
+
+        using (IDataAccess conn = DataAccess.Create())
+        {
+            //主表
+            if (context.Request["m"].ToString() == "master")
+            {
+                DateTime dateBegin = Convert.ToDateTime(context.Request["datebeginMaster"]);
+                DateTime dateEnd = Convert.ToDateTime(context.Request["dateendMaster"]);
+                string defect = "";
+                DataTable dt = conn.ExecuteDatatable(@"SELECT
+	                            DISTINCT MDF.DEFECTCODE AS DC,
+	                             'CASE WHEN gd.GOODSNAME IS NULL 
+                                  THEN
+	                                TO_CHAR( ( COUNT( DISTINCT  CASE WHEN   DF.DEFECTCODE = '''||MDF.DEFECTCODE||''' THEN to_char(pd.productiondataid||pd.BARCODE||DF.DEFECTCODE ) ELSE NULL END ) / COUNT( DISTINCT PD.productiondataid ) * 100 ), ''fm99990.00'' ) || ''%''
+	                              ELSE
+                                   TO_CHAR( COUNT( DISTINCT  CASE WHEN DF.DEFECTCODE IS NOT NULL  AND   DF.DEFECTCODE = '''||MDF.DEFECTCODE||''' THEN to_char(pd.productiondataid||pd.BARCODE||DF.DEFECTCODE ) ELSE NULL END ) ) END
+' AS DEFECTCODE,
+	                            MDF.DEFECTNAME 
+                            FROM
+	                            TP_MST_DEFECT MDF 
+                            where MDF.DEFECTCODE IN("+defectcode+") ORDER BY  MDF.DEFECTCODE DESC");
+                for (int i = 0; i < dt.Rows.Count; i++)
+                {
+                    if (i > 0) defect += ",";
+                    defect += dt.Rows[i]["DEFECTCODE"].ToString() + " " + dt.Rows[i]["DEFECTNAME"].ToString();
+                }
+                string sumdefect = "";
+                DataTable dts = conn.ExecuteDatatable(@"SELECT DISTINCT MDF.DEFECTCODE AS DC,
+                                                        'TO_CHAR( COUNT( DISTINCT  CASE WHEN   DF.DEFECTCODE IS NOT NULL  AND  DF.DEFECTCODE = '''||MDF.DEFECTCODE||''' THEN to_char(pd.productiondataid||pd.productiondataid||pd.BARCODE||DF.DEFECTCODE ) ELSE NULL END ) )' AS DEFECTCODE,
+	                                                   MDF.DEFECTNAME 
+                            FROM
+	                            TP_MST_DEFECT MDF 
+                           where MDF.DEFECTCODE IN("+defectcode+") ORDER BY  MDF.DEFECTCODE DESC");
+                for (int i = 0; i < dts.Rows.Count; i++) {
+                    if (i > 0) sumdefect += ",";
+                    sumdefect += dts.Rows[i]["DEFECTCODE"].ToString()+" "+dts.Rows[i]["DEFECTNAME"].ToString();
+                }
+
+
+                string sqlStr = @"SELECT* FROM(
+                   SELECT   GROUPING_ID(GD.GOODSNAME,GD.GOODSSPECIFICATION,MD.DICTIONARYVALUE,LG.LOGONAME) AS GID, 
+											CASE WHEN GROUPING_ID(GD.GOODSNAME,GD.GOODSSPECIFICATION,MD.DICTIONARYVALUE,LG.LOGONAME) =15 then '合计'  ELSE TO_CHAR(GD.GOODSCODE )END AS 产品编码,
+	                                TO_CHAR(GD.GOODSNAME) AS 产品名称,
+	                                TO_CHAR(GD.GOODSSPECIFICATION) AS 产品规格,
+	                                TO_CHAR(MD.DICTIONARYVALUE) AS 釉色,
+	                                TO_CHAR(LG.LOGONAME) AS 商标,
+	                                TO_CHAR(COUNT(DISTINCT PD.productiondataid)) 出窑量,
+                               TO_CHAR(COUNT( DISTINCT CASE WHEN MDF.DEFECTCODE IS NOT NULL AND DF.BARCODE IS NOT NULL  THEN TO_CHAR(pd.productiondataid||DF.BARCODE||MDF.DEFECTCODE) ELSE NULL END ))缺陷量,
+	                                TO_CHAR( (COUNT( DISTINCT CASE WHEN MDF.DEFECTCODE IS NOT NULL AND DF.BARCODE IS NOT NULL  THEN TO_CHAR(pd.productiondataid||DF.BARCODE||MDF.DEFECTCODE) ELSE NULL END )/COUNT(DISTINCT PD.productiondataid) * 100), 'fm99990.00') || '%' 缺陷率,
+                                    {DEFECT}
+                                FROM
+	                            (SELECT DISTINCT pd.barcode
+                                       ,pd.reworkprocedureid
+                                       ,pd.groutinglinecode
+                                        ,pd.goodsid
+                                       ,pd.goodscode
+                                       ,pd.goodsname
+                                       ,pd.groutinguserid
+                                       ,pd.groutingusercode
+                                       ,pd.groutingdailydetailid
+                                       ,pd.procedureid AS procedureid
+                                       ,nvl(pd61.goodsleveltypeid, pd.goodsleveltypeid) goodsleveltypeid
+                                       ,nvl(pd61.productiondataid, pd.productiondataid) productiondataid
+                                       ,pd.productiondataid  fproductiondataid
+                                       ,pd.createtime
+                                       ,pd.logoid
+                          FROM (SELECT *
+                                  FROM (SELECT pd28.groutinglinecode
+                                              ,pd28.reworkprocedureid
+                                              ,pd28.barcode
+                                              ,pd28.createtime
+                                              ,pd28.goodsid
+                                              ,pd28.goodsname
+                                              ,pd28.valueflag
+                                              ,pd28.goodsleveltypeid
+                                              ,pd28.goodscode
+                                              ,pd28.logoid
+                                              ,pd28.groutinguserid
+                                              ,pd28.groutingusercode
+                                              ,pd28.kilncarbatchno
+                                              ,pd28.productiondataid
+                                              ,pd28.groutingdailydetailid
+                                              ,pd24.procedureid
+                                              ,row_number() over(PARTITION BY pd28.productiondataid ORDER BY pd24.productiondataid DESC) AS rownums
+                                          FROM tp_pm_productiondata pd28 -- 重烧质量登记
+                                         INNER JOIN tp_pm_productiondata pd24 -- 重烧修补24 / 冷补42
+                                            ON pd24.groutingdailydetailid = pd28.groutingdailydetailid
+                                         WHERE pd28.procedureid = @kilproc@   -- 28
+                                           AND pd28.valueflag = 1
+                                           AND pd24.valueflag = 1
+                                           AND pd24.procedureid IN (  42,"+ProceduraID+@") --  重烧质量登记里包含 重烧修补24 / 冷补42     
+ -- 20251027 web报表中以末次质量登记时间节点统计质量数据调整为首次质量登记时间做统计质量数据变更 createtime - > checktime
+                                            AND pd28.checktime >= @DATEBEGIN@
+                                            AND pd28.checktime < @DATEEND@  
+                                           --AND pd28.createtime >= to_date('2025-04-17', 'yyyy-MM-DD')
+                                          -- AND pd28.createtime < to_date('2025-04-20 23:59:59', 'yyyy-mm-dd hh24:mi:ss')
+                                           AND pd24.productiondataid < pd28.productiondataid) t
+                                 WHERE rownums = 1
+                                   AND t.procedureid  in ( "+ProceduraID+@")) pd
+                         LEFT JOIN tp_mst_goods gd
+                            ON gd.goodsid = pd.goodsid
+                          LEFT JOIN tp_pm_productiondata pd61 -- 重烧质量检测
+                            ON pd61.procedureid = "+FunctionalTesting+@"
+                           AND pd61.valueflag = 1
+                           AND pd61.groutingdailydetailid = pd.groutingdailydetailid
+                           AND pd61.kilncarbatchno = pd.kilncarbatchno
+                           AND pd61.productiondataid > pd.productiondataid
+                              -- 取最近的数据
+                           AND NOT EXISTS
+                         (SELECT 1
+                                  FROM tp_pm_productiondata pd28c -- 重烧质量登记 重复的
+                                 WHERE pd28c.procedureid = @kilproc@   -- 28
+                                   AND pd28c.valueflag = 1
+                                   AND pd28c.groutingdailydetailid = pd.groutingdailydetailid
+                                   AND pd28c.kilncarbatchno = pd.kilncarbatchno
+                                   AND pd28c.productiondataid > pd.productiondataid
+                                   AND pd28c.productiondataid < pd61.productiondataid))  PD
+								LEFT JOIN TP_PM_GROUTINGDAILYDETAIL GDL ON GDL.groutingdailydetailid=PD.groutingdailydetailid
+                                LEFT JOIN TP_MST_GOODS GD ON PD.GOODSID = GD.GOODSID
+                                LEFT JOIN TP_MST_DataDictionary MD ON GD.GLAZETYPEID = MD.DICTIONARYID AND MD.DICTIONARYTYPE = 'TPC002'
+                                LEFT JOIN TP_MST_LOGO LG ON PD.LOGOID = LG.LOGOID " ;
+                sqlStr +=@"      LEFT JOIN TP_PM_DEFECT DF ON df.productiondataid in (pd.productiondataid ,pd.fproductiondataid) AND DF.VALUEFLAG=1  AND DF.PROCEDUREID NOT IN"+notInproc;
+                sqlStr += @"		LEFT JOIN TP_MST_DEFECT MDF ON DF.DEFECTID = MDF.DEFECTID AND  MDF.DEFECTCODE IN(" + defectcode + ")";
+                sqlStr += @"     GROUP BY
+												Grouping sets ( (GD.GOODSCODE ,
+	                                                    GD.GOODSNAME,
+	                                                    GD.GOODSSPECIFICATION,
+	                                                    MD.DICTIONARYVALUE,
+	                                                    LG.LOGONAME ), ( ) )  
+                      union ALL
+                        SELECT
+                            1,
+                            ''  产品编码,
+                            ''  产品名称,
+                            ''  产品规格,
+                            ''  釉色,
+                            ''  商标,
+                            '' 出窑量,
+                            '' 缺陷量,
+                            '' 缺陷率,
+                            {DEFECTSUM}  
+                        FROM 
+	                            (SELECT DISTINCT pd.barcode
+                                       ,pd.reworkprocedureid
+                                       ,pd.groutinglinecode
+                                        ,pd.goodsid
+                                       ,pd.goodscode
+                                       ,pd.goodsname
+                                       ,pd.groutinguserid
+                                       ,pd.groutingusercode
+                                       ,pd.groutingdailydetailid
+                                       ,pd.procedureid AS procedureid
+                                       ,nvl(pd61.goodsleveltypeid, pd.goodsleveltypeid) goodsleveltypeid
+                                       ,nvl(pd61.productiondataid, pd.productiondataid) productiondataid
+                                       ,pd.productiondataid  fproductiondataid
+                                       ,pd.createtime
+                                       ,pd.logoid
+                          FROM (SELECT *
+                                  FROM (SELECT pd28.groutinglinecode
+                                              ,pd28.reworkprocedureid
+                                              ,pd28.barcode
+                                              ,pd28.createtime
+                                              ,pd28.goodsid
+                                              ,pd28.goodsname
+                                              ,pd28.valueflag
+                                              ,pd28.goodsleveltypeid
+                                              ,pd28.goodscode
+                                              ,pd28.logoid
+                                              ,pd28.groutinguserid
+                                              ,pd28.groutingusercode
+                                              ,pd28.kilncarbatchno
+                                              ,pd28.productiondataid
+                                              ,pd28.groutingdailydetailid
+                                              ,pd24.procedureid
+                                              ,row_number() over(PARTITION BY pd28.productiondataid ORDER BY pd24.productiondataid DESC) AS rownums
+                                          FROM tp_pm_productiondata pd28 -- 重烧质量登记
+                                         INNER JOIN tp_pm_productiondata pd24 -- 重烧修补24 / 冷补42
+                                            ON pd24.groutingdailydetailid = pd28.groutingdailydetailid
+                                         WHERE pd28.procedureid = @kilproc@   -- 28
+                                           AND pd28.valueflag = 1
+                                           AND pd24.valueflag = 1
+                                           AND pd24.procedureid IN (  42,"+ProceduraID+@") --  重烧质量登记里包含 重烧修补24 / 冷补42     
+ -- 20251027 web报表中以末次质量登记时间节点统计质量数据调整为首次质量登记时间做统计质量数据变更 createtime - > checktime
+                                            AND pd28.checktime >= @DATEBEGIN@
+                                            AND pd28.checktime < @DATEEND@     
+                                           --AND pd28.createtime >= to_date('2025-04-17', 'yyyy-MM-DD')
+                                          -- AND pd28.createtime < to_date('2025-04-20 23:59:59', 'yyyy-mm-dd hh24:mi:ss')
+                                           AND pd24.productiondataid < pd28.productiondataid) t
+                                 WHERE rownums = 1
+                                   AND t.procedureid  in ( "+ProceduraID+@")) pd
+                          LEFT JOIN tp_mst_goods gd
+                            ON gd.goodsid = pd.goodsid
+                          LEFT JOIN tp_pm_productiondata pd61 -- 重烧质量检测
+                            ON pd61.procedureid = "+FunctionalTesting+@"
+                           AND pd61.valueflag = 1
+                           AND pd61.groutingdailydetailid = pd.groutingdailydetailid
+                           AND pd61.kilncarbatchno = pd.kilncarbatchno
+                           AND pd61.productiondataid > pd.productiondataid
+                              -- 取最近的数据
+                           AND NOT EXISTS
+                         (SELECT 1
+                                  FROM tp_pm_productiondata pd28c -- 重烧质量登记 重复的
+                                 WHERE pd28c.procedureid = @kilproc@   -- 28
+                                   AND pd28c.valueflag = 1
+                                   AND pd28c.groutingdailydetailid = pd.groutingdailydetailid
+                                   AND pd28c.kilncarbatchno = pd.kilncarbatchno
+                                   AND pd28c.productiondataid > pd.productiondataid
+                                   AND pd28c.productiondataid < pd61.productiondataid)) PD
+								LEFT JOIN TP_PM_GROUTINGDAILYDETAIL GDL ON GDL.groutingdailydetailid=PD.groutingdailydetailid
+                                LEFT JOIN TP_MST_GOODS GD ON PD.GOODSID = GD.GOODSID
+                                LEFT JOIN TP_MST_DataDictionary MD ON GD.GLAZETYPEID = MD.DICTIONARYID AND MD.DICTIONARYTYPE = 'TPC002'
+                                LEFT JOIN TP_MST_LOGO LG ON PD.LOGOID = LG.LOGOID " ;
+                sqlStr += @"LEFT JOIN TP_PM_DEFECT DF ON df.productiondataid in (pd.productiondataid ,pd.fproductiondataid)  AND DF.VALUEFLAG=1  AND DF.PROCEDUREID NOT IN"+notInproc;
+                sqlStr += @"LEFT JOIN TP_MST_DEFECT MDF ON DF.DEFECTID = MDF.DEFECTID AND MDF.DEFECTCODE IN(" + defectcode + ") AND DF.VALUEFLAG=1   ) ORDER BY GID ";
+                                  
+                 sqlStr = sqlStr.Replace("{DEFECT}", defect).Replace("{DEFECTSUM}",sumdefect); 
+                //获取查询条件
+                List<CDAParameter> sqlPara = new List<CDAParameter>();
+                sqlPara.Add(new CDAParameter("DATEBEGIN", dateBegin, DataType.DateTime));
+                sqlPara.Add(new CDAParameter("DATEEND", dateEnd, DataType.DateTime));
+                sqlPara.Add(new CDAParameter("kilproc", Convert.ToInt32(kilproc), DataType.Int32));
+                //获取分页参数
+                int page = HttpContext.Current.Request["page"] is object ? Convert.ToInt32(HttpContext.Current.Request["page"]) : 1;
+                int rows = HttpContext.Current.Request["rows"] is object ? Convert.ToInt32(HttpContext.Current.Request["rows"]) : 10000;
+                string sort = HttpContext.Current.Request["sort"] is object ? HttpContext.Current.Request["sort"] : "m.REPORTCODE";
+                string order = HttpContext.Current.Request["order"] is object ? HttpContext.Current.Request["order"] : "";
+
+                //获取分页数据    
+                int total = 0;
+                DataTable d = conn.SelectPages(page, rows, out total, sqlStr, sqlPara.ToArray());
+               if (d!=null && d.Rows.Count > 0) {
+                d.Columns.Remove("GID");//移除GID列
+                         }
+                string jsonStr = new JsonResult(d) { total = total }.ToJson();
+                context.Response.Write(jsonStr);
+            }
+        }
+    }
+
+    public bool IsReusable
+    {
+        get
+        {
+            return false;
+        }
+    }
+}

+ 85 - 1
wwwroot/mes/rpt/rpt209/rpt.ashx

@@ -241,7 +241,91 @@ public class rpt : IHttpHandler, IReadOnlySessionState
                                 LEFT JOIN TP_MST_DataDictionary MD ON GD.GLAZETYPEID = MD.DICTIONARYID AND MD.DICTIONARYTYPE = 'TPC002'
                                 LEFT JOIN TP_MST_LOGO LG ON PD.LOGOID = LG.LOGOID " ;
                 sqlStr += @"LEFT JOIN TP_PM_DEFECT DF ON df.productiondataid in (pd.productiondataid ,pd.fproductiondataid)  AND DF.VALUEFLAG=1  AND DF.PROCEDUREID NOT IN"+notInproc;
-                sqlStr += @"LEFT JOIN TP_MST_DEFECT MDF ON DF.DEFECTID = MDF.DEFECTID AND MDF.DEFECTCODE IN(" + defectcode + ") AND DF.VALUEFLAG=1   ) ORDER BY GID ";
+                sqlStr += @"LEFT JOIN TP_MST_DEFECT MDF ON DF.DEFECTID = MDF.DEFECTID AND MDF.DEFECTCODE IN(" + defectcode + @") AND DF.VALUEFLAG=1   union ALL
+                        SELECT
+                            2,
+                            case when  substr(gtp.goodstypecode, 0, 6) = '001002' then '小件合计'else '大件合计' end    产品编码,
+                            ''  产品名称,
+                            ''  产品规格,
+                            ''  釉色,
+                            ''  商标,
+                            '' 出窑量,
+                            '' 缺陷量,
+                            '' 缺陷率,
+                            {DEFECTSUM}  
+                        FROM 
+	                            (SELECT DISTINCT pd.barcode
+                                       ,pd.reworkprocedureid
+                                       ,pd.groutinglinecode
+                                        ,pd.goodsid
+                                       ,pd.goodscode
+                                       ,pd.goodsname
+                                       ,pd.groutinguserid
+                                       ,pd.groutingusercode
+                                       ,pd.groutingdailydetailid
+                                       ,pd.procedureid AS procedureid
+                                       ,nvl(pd61.goodsleveltypeid, pd.goodsleveltypeid) goodsleveltypeid
+                                       ,nvl(pd61.productiondataid, pd.productiondataid) productiondataid
+                                       ,pd.productiondataid  fproductiondataid
+                                       ,pd.createtime
+                                       ,pd.logoid
+                          FROM (SELECT *
+                                  FROM (SELECT pd28.groutinglinecode
+                                              ,pd28.reworkprocedureid
+                                              ,pd28.barcode
+                                              ,pd28.createtime
+                                              ,pd28.goodsid
+                                              ,pd28.goodsname
+                                              ,pd28.valueflag
+                                              ,pd28.goodsleveltypeid
+                                              ,pd28.goodscode
+                                              ,pd28.logoid
+                                              ,pd28.groutinguserid
+                                              ,pd28.groutingusercode
+                                              ,pd28.kilncarbatchno
+                                              ,pd28.productiondataid
+                                              ,pd28.groutingdailydetailid
+                                              ,pd24.procedureid
+                                              ,row_number() over(PARTITION BY pd28.productiondataid ORDER BY pd24.productiondataid DESC) AS rownums
+                                          FROM tp_pm_productiondata pd28 -- 重烧质量登记
+                                         INNER JOIN tp_pm_productiondata pd24 -- 重烧修补24 / 冷补42
+                                            ON pd24.groutingdailydetailid = pd28.groutingdailydetailid
+                                         WHERE pd28.procedureid = @kilproc@   -- 28
+                                           AND pd28.valueflag = 1
+                                           AND pd24.valueflag = 1
+                                           AND pd24.procedureid IN (  42,"+ProceduraID+@") --  重烧质量登记里包含 重烧修补24 / 冷补42     
+                                            AND pd28.CREATETIME >= @DATEBEGIN@
+                                            AND pd28.CREATETIME < @DATEEND@    
+                                           --AND pd28.createtime >= to_date('2025-04-17', 'yyyy-MM-DD')
+                                          -- AND pd28.createtime < to_date('2025-04-20 23:59:59', 'yyyy-mm-dd hh24:mi:ss')
+                                           AND pd24.productiondataid < pd28.productiondataid) t
+                                 WHERE rownums = 1
+                                   AND t.procedureid  in ( "+ProceduraID+@")) pd
+                          LEFT JOIN tp_mst_goods gd
+                            ON gd.goodsid = pd.goodsid
+                          LEFT JOIN tp_pm_productiondata pd61 -- 重烧质量检测
+                            ON pd61.procedureid = "+FunctionalTesting+@"
+                           AND pd61.valueflag = 1
+                           AND pd61.groutingdailydetailid = pd.groutingdailydetailid
+                           AND pd61.kilncarbatchno = pd.kilncarbatchno
+                           AND pd61.productiondataid > pd.productiondataid
+                              -- 取最近的数据
+                           AND NOT EXISTS
+                         (SELECT 1
+                                  FROM tp_pm_productiondata pd28c -- 重烧质量登记 重复的
+                                 WHERE pd28c.procedureid = @kilproc@   -- 28
+                                   AND pd28c.valueflag = 1
+                                   AND pd28c.groutingdailydetailid = pd.groutingdailydetailid
+                                   AND pd28c.kilncarbatchno = pd.kilncarbatchno
+                                   AND pd28c.productiondataid > pd.productiondataid
+                                   AND pd28c.productiondataid < pd61.productiondataid)) PD
+								LEFT JOIN TP_PM_GROUTINGDAILYDETAIL GDL ON GDL.groutingdailydetailid=PD.groutingdailydetailid
+                                LEFT JOIN TP_MST_GOODS GD ON PD.GOODSID = GD.GOODSID
+                                 LEFT JOIN tp_mst_goodstype gtp ON gd.goodstypeid = gtp.goodstypeid
+                                LEFT JOIN TP_MST_DataDictionary MD ON GD.GLAZETYPEID = MD.DICTIONARYID AND MD.DICTIONARYTYPE = 'TPC002'
+                                LEFT JOIN TP_MST_LOGO LG ON PD.LOGOID = LG.LOGOID " ;
+                sqlStr += @"LEFT JOIN TP_PM_DEFECT DF ON df.productiondataid in (pd.productiondataid ,pd.fproductiondataid)  AND DF.VALUEFLAG=1  AND DF.PROCEDUREID NOT IN"+notInproc;
+                sqlStr += @"LEFT JOIN TP_MST_DEFECT MDF ON DF.DEFECTID = MDF.DEFECTID AND MDF.DEFECTCODE IN(" + defectcode + ") AND DF.VALUEFLAG=1   group by substr(gtp.goodstypecode, 0, 6)   ) ORDER BY GID ";
                                   
                  sqlStr = sqlStr.Replace("{DEFECT}", defect).Replace("{DEFECTSUM}",sumdefect); 
                 //获取查询条件

+ 162 - 0
wwwroot/mes/rpt/rpt210/rpt - 副本.ashx

@@ -0,0 +1,162 @@
+<%@ WebHandler Language="C#" Class="rpt" %>
+
+using System;
+using System.Web;
+using System.Web.SessionState;
+using System.Data;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+using Curtain.DataAccess;
+using DK.XuWei.WebMes;
+
+public class rpt : IHttpHandler, IReadOnlySessionState
+{
+    public void ProcessRequest(HttpContext context)
+    {
+        context.Response.ContentType = "text/plain";
+
+
+
+        using (IDataAccess conn = DataAccess.Create())
+        {
+            //主表
+            if (context.Request["m"].ToString() == "master")
+            {
+                DateTime dateBegin = Convert.ToDateTime(context.Request["datebeginMaster"]);
+                DateTime dateEnd = Convert.ToDateTime(context.Request["dateendMaster"]);
+
+                string sqlStr = @"SELECT
+                    * FROM(
+                   SELECT   GROUPING_ID(GD.GOODSNAME,GD.GOODSSPECIFICATION,MD.DICTIONARYVALUE,LG.LOGONAME) AS GID,
+									TO_CHAR(GD.GOODSCODE) AS 产品编码,
+	                                TO_CHAR(GD.GOODSNAME) AS 产品名称,
+	                                TO_CHAR(GD.GOODSSPECIFICATION) AS 产品规格,
+	                                TO_CHAR(MD.DICTIONARYVALUE) AS 釉色,
+	                                TO_CHAR(LG.LOGONAME) AS 商标,
+                                    TO_CHAR(COUNT( DISTINCT PD.BARCODE)) 出窑量,
+	                                TO_CHAR(COUNT( DISTINCT CASE WHEN MDF.DEFECTCODE IS NOT NULL AND DF.BARCODE IS NOT NULL  THEN TO_CHAR(DF.BARCODE||MDF.DEFECTCODE) ELSE NULL END ))缺陷量,
+	                                TO_CHAR( (COUNT( DISTINCT CASE WHEN MDF.DEFECTCODE IS NOT NULL AND DF.BARCODE IS NOT NULL  THEN TO_CHAR(DF.BARCODE||MDF.DEFECTCODE) ELSE NULL END )/COUNT(DISTINCT PD.BARCODE) * 100), 'fm99990.00') || '%' 缺陷率,
+                            CASE WHEN GD.GOODSNAME IS NULL THEN
+									TO_CHAR( ( SUM( CASE WHEN DF.DEFECTCODE = '87' THEN 1 ELSE 0 END ) / COUNT( DISTINCT PD.BARCODE ) * 100 ),'fm99990.00' ) || '%' 
+										ELSE TO_CHAR( SUM( CASE WHEN DF.DEFECTCODE = '87' THEN 1 ELSE 0 END ) ) END 原料泥料料脏,
+							CASE WHEN GD.GOODSNAME IS NULL THEN
+								TO_CHAR( ( SUM( CASE WHEN DF.DEFECTCODE = '88' THEN 1 ELSE 0 END ) / COUNT( DISTINCT PD.BARCODE ) * 100 ),'fm99990.00' ) || '%'
+									ELSE  TO_CHAR( SUM( CASE WHEN DF.DEFECTCODE = '88' THEN 1 ELSE 0 END ) ) END 原料釉料铁脏,
+							CASE WHEN GD.GOODSNAME IS NULL THEN
+								TO_CHAR( ( SUM( CASE WHEN DF.DEFECTCODE = '086' THEN 1 ELSE 0 END ) / COUNT( DISTINCT PD.BARCODE ) * 100 ),'fm99990.00' ) || '%'
+                                     ELSE TO_CHAR( SUM( CASE WHEN DF.DEFECTCODE = '086' THEN 1 ELSE 0 END ) ) END 原料釉料铜脏,
+							CASE WHEN GD.GOODSNAME IS NULL THEN
+								TO_CHAR( ( SUM( CASE WHEN DF.DEFECTCODE = '86' THEN 1 ELSE 0 END ) / COUNT( DISTINCT PD.BARCODE ) * 100 ),'fm99990.00' ) || '%' 
+                                    ELSE TO_CHAR( SUM( CASE WHEN DF.DEFECTCODE = '86' THEN 1 ELSE 0 END ) ) END 原料泥料铜脏 
+                                FROM
+	                            TP_PM_PRODUCTIONDATA PD
+                                LEFT JOIN TP_PM_PRODUCTIONDATA PD61 -- 重烧质量检测
+                                          ON PD61.PROCEDUREID = 60
+                                         AND PD61.VALUEFLAG = 1
+                                         AND PD61.GROUTINGDAILYDETAILID = PD.GROUTINGDAILYDETAILID
+                                         AND PD61.KILNCARBATCHNO = PD.KILNCARBATCHNO
+                                         AND PD61.PRODUCTIONDATAID > PD.PRODUCTIONDATAID
+                                            -- 取最近的数据
+                                         AND NOT EXISTS
+                                       (SELECT 1
+                                                FROM TP_PM_PRODUCTIONDATA PD28C -- 重烧质量登记 重复的
+                                               WHERE PD28C.PROCEDUREID = 16
+                                                 AND PD28C.VALUEFLAG = 1
+                                                 AND PD28C.GROUTINGDAILYDETAILID = PD.GROUTINGDAILYDETAILID
+                                                 AND PD28C.KILNCARBATCHNO = PD.KILNCARBATCHNO
+                                                 AND PD28C.PRODUCTIONDATAID > PD.PRODUCTIONDATAID
+                                                 AND PD28C.PRODUCTIONDATAID < PD61.PRODUCTIONDATAID)
+                                LEFT JOIN TP_PM_GROUTINGDAILYDETAIL GDL ON GDL.BARCODE=PD.BARCODE
+                                LEFT JOIN TP_MST_GOODS GD ON PD.GOODSID = GD.GOODSID
+                                LEFT JOIN TP_MST_DataDictionary MD ON GD.GLAZETYPEID = MD.DICTIONARYID AND MD.DICTIONARYTYPE = 'TPC002'
+                                LEFT JOIN TP_MST_LOGO LG ON PD.LOGOID = LG.LOGOID 
+                                LEFT JOIN TP_PM_DEFECT DF ON  DF.PRODUCTIONDATAID in (PD61.PRODUCTIONDATAID, PD.PRODUCTIONDATAID) AND DF.VALUEFLAG=1  AND DF.PROCEDUREID NOT IN(61,28)
+                                LEFT JOIN TP_MST_DEFECT MDF ON DF.DEFECTID = MDF.DEFECTID AND MDF.DEFECTCODE in('87','88','086','86')
+                                WHERE
+	                                PD.PROCEDUREID IN ( 16) 
+	                                AND PD.CREATETIME >= @DATEBEGIN@
+                                    AND PD.CREATETIME < @DATEEND@ 
+	                                
+	                                AND PD.VALUEFLAG = 1
+                                GROUP BY
+												Grouping sets ( ( GD.GOODSCODE,
+	                                                    GD.GOODSNAME,
+	                                                    GD.GOODSSPECIFICATION,
+	                                                    MD.DICTIONARYVALUE,
+	                                                    LG.LOGONAME ), ( ) )
+							UNION ALL
+								SELECT  1,
+										''  产品编码,
+										''  产品名称,
+										''  产品规格,
+										''  釉色,
+										''  商标,
+										''  出窑量,
+										''  缺陷量,
+										''  缺陷率,
+										TO_CHAR(SUM( CASE WHEN DF.DEFECTCODE = '87' THEN 1 ELSE 0 END ) )  原料泥料料脏,
+										TO_CHAR(SUM( CASE WHEN DF.DEFECTCODE = '88' THEN 1 ELSE 0 END ) ) 原料釉料铁脏,
+										TO_CHAR(SUM( CASE WHEN DF.DEFECTCODE = '086' THEN 1 ELSE 0 END ) ) 原料釉料铜脏,
+										TO_CHAR(SUM( CASE WHEN DF.DEFECTCODE = '86' THEN 1 ELSE 0 END ))  原料泥料铜脏
+									FROM
+	                                TP_PM_PRODUCTIONDATA PD
+                                     LEFT JOIN TP_PM_PRODUCTIONDATA PD61 -- 重烧质量检测
+                                          ON PD61.PROCEDUREID = 60
+                                         AND PD61.VALUEFLAG = 1
+                                         AND PD61.GROUTINGDAILYDETAILID = PD.GROUTINGDAILYDETAILID
+                                         AND PD61.KILNCARBATCHNO = PD.KILNCARBATCHNO
+                                         AND PD61.PRODUCTIONDATAID > PD.PRODUCTIONDATAID
+                                            -- 取最近的数据
+                                         AND NOT EXISTS
+                                       (SELECT 1
+                                                FROM TP_PM_PRODUCTIONDATA PD28C -- 重烧质量登记 重复的
+                                               WHERE PD28C.PROCEDUREID = 16
+                                                 AND PD28C.VALUEFLAG = 1
+                                                 AND PD28C.GROUTINGDAILYDETAILID = PD.GROUTINGDAILYDETAILID
+                                                 AND PD28C.KILNCARBATCHNO = PD.KILNCARBATCHNO
+                                                 AND PD28C.PRODUCTIONDATAID > PD.PRODUCTIONDATAID
+                                                 AND PD28C.PRODUCTIONDATAID < PD61.PRODUCTIONDATAID)
+                                LEFT JOIN TP_PM_GROUTINGDAILYDETAIL GDL ON GDL.BARCODE=PD.BARCODE
+                                LEFT JOIN TP_MST_GOODS GD ON PD.GOODSID = GD.GOODSID
+                                LEFT JOIN TP_MST_DataDictionary MD ON GD.GLAZETYPEID = MD.DICTIONARYID AND MD.DICTIONARYTYPE = 'TPC002'
+                                LEFT JOIN TP_MST_LOGO LG ON PD.LOGOID = LG.LOGOID 
+                                LEFT JOIN TP_PM_DEFECT DF ON   DF.PRODUCTIONDATAID in  (PD61.PRODUCTIONDATAID, PD.PRODUCTIONDATAID)  AND DF.VALUEFLAG=1
+                                LEFT JOIN TP_MST_DEFECT MDF ON DF.DEFECTID = MDF.DEFECTID AND MDF.DEFECTCODE in('87','88','086','86')
+									WHERE
+	                                PD.PROCEDUREID =16
+	                                AND PD.CREATETIME >= @DATEBEGIN@
+                                    AND PD.CREATETIME < @DATEEND@ 
+	                                AND DF.PROCEDUREID NOT IN(61,28)
+	                                AND PD.VALUEFLAG = 1) ORDER BY GID ";
+
+                //获取查询条件
+                List<CDAParameter> sqlPara = new List<CDAParameter>();
+                sqlPara.Add(new CDAParameter("DATEBEGIN", dateBegin, DataType.DateTime));
+                sqlPara.Add(new CDAParameter("DATEEND", dateEnd, DataType.DateTime));
+                //获取分页参数
+                int page = HttpContext.Current.Request["page"] is object ? Convert.ToInt32(HttpContext.Current.Request["page"]) : 1;
+                int rows =  10000;
+                string sort = HttpContext.Current.Request["sort"] is object ? HttpContext.Current.Request["sort"] : "m.REPORTCODE";
+                string order = HttpContext.Current.Request["order"] is object ? HttpContext.Current.Request["order"] : "";
+
+                //获取分页数据    
+                int total = 0;
+                DataTable d = conn.SelectPages(page, rows, out total, sqlStr, sqlPara.ToArray());
+                d.Columns.Remove("GID");//移除GID列
+                string jsonStr = new JsonResult(d) { total = total }.ToJson();
+                context.Response.Write(jsonStr);
+            }
+        }
+    }
+
+    public bool IsReusable
+    {
+        get
+        {
+            return false;
+        }
+    }
+}

+ 48 - 1
wwwroot/mes/rpt/rpt210/rpt.ashx

@@ -130,7 +130,54 @@ public class rpt : IHttpHandler, IReadOnlySessionState
 	                                AND PD.CREATETIME >= @DATEBEGIN@
                                     AND PD.CREATETIME < @DATEEND@ 
 	                                AND DF.PROCEDUREID NOT IN(61,28)
-	                                AND PD.VALUEFLAG = 1) ORDER BY GID ";
+	                                AND PD.VALUEFLAG = 1 
+UNION ALL
+								SELECT  2,
+										case when  substr(gtp.goodstypecode, 0, 6) = '001002' then '小件合计'else '大件合计' end    产品编码,
+										''  产品名称,
+										''  产品规格,
+										''  釉色,
+										''  商标,
+										''  出窑量,
+										''  缺陷量,
+										''  缺陷率,
+										TO_CHAR(SUM( CASE WHEN DF.DEFECTCODE = '87' THEN 1 ELSE 0 END ) )  原料泥料料脏,
+										TO_CHAR(SUM( CASE WHEN DF.DEFECTCODE = '88' THEN 1 ELSE 0 END ) ) 原料釉料铁脏,
+										TO_CHAR(SUM( CASE WHEN DF.DEFECTCODE = '086' THEN 1 ELSE 0 END ) ) 原料釉料铜脏,
+										TO_CHAR(SUM( CASE WHEN DF.DEFECTCODE = '86' THEN 1 ELSE 0 END ))  原料泥料铜脏
+									FROM
+	                                TP_PM_PRODUCTIONDATA PD
+                                     LEFT JOIN TP_PM_PRODUCTIONDATA PD61 -- 重烧质量检测
+                                          ON PD61.PROCEDUREID = 60
+                                         AND PD61.VALUEFLAG = 1
+                                         AND PD61.GROUTINGDAILYDETAILID = PD.GROUTINGDAILYDETAILID
+                                         AND PD61.KILNCARBATCHNO = PD.KILNCARBATCHNO
+                                         AND PD61.PRODUCTIONDATAID > PD.PRODUCTIONDATAID
+                                            -- 取最近的数据
+                                         AND NOT EXISTS
+                                       (SELECT 1
+                                                FROM TP_PM_PRODUCTIONDATA PD28C -- 重烧质量登记 重复的
+                                               WHERE PD28C.PROCEDUREID = 16
+                                                 AND PD28C.VALUEFLAG = 1
+                                                 AND PD28C.GROUTINGDAILYDETAILID = PD.GROUTINGDAILYDETAILID
+                                                 AND PD28C.KILNCARBATCHNO = PD.KILNCARBATCHNO
+                                                 AND PD28C.PRODUCTIONDATAID > PD.PRODUCTIONDATAID
+                                                 AND PD28C.PRODUCTIONDATAID < PD61.PRODUCTIONDATAID)
+                                LEFT JOIN TP_PM_GROUTINGDAILYDETAIL GDL ON GDL.BARCODE=PD.BARCODE
+                                LEFT JOIN TP_MST_GOODS GD ON PD.GOODSID = GD.GOODSID
+                                 LEFT JOIN tp_mst_goodstype gtp ON gd.goodstypeid = gtp.goodstypeid
+                                LEFT JOIN TP_MST_DataDictionary MD ON GD.GLAZETYPEID = MD.DICTIONARYID AND MD.DICTIONARYTYPE = 'TPC002'
+                                LEFT JOIN TP_MST_LOGO LG ON PD.LOGOID = LG.LOGOID 
+                                LEFT JOIN TP_PM_DEFECT DF ON   DF.PRODUCTIONDATAID in  (PD61.PRODUCTIONDATAID, PD.PRODUCTIONDATAID)  AND DF.VALUEFLAG=1
+                                LEFT JOIN TP_MST_DEFECT MDF ON DF.DEFECTID = MDF.DEFECTID AND MDF.DEFECTCODE in('87','88','086','86')
+									WHERE
+	                                PD.PROCEDUREID =16
+	                                AND PD.CREATETIME >= @DATEBEGIN@
+                                    AND PD.CREATETIME < @DATEEND@ 
+	                                AND DF.PROCEDUREID NOT IN(61,28)
+	                                AND PD.VALUEFLAG = 1
+                                 group by substr(gtp.goodstypecode, 0, 6) 
+) ORDER BY GID ";
 
                 //获取查询条件
                 List<CDAParameter> sqlPara = new List<CDAParameter>();