Преглед изворни кода

注浆个人,打磨个人,刷洗个人,半检个人,施釉个人、成品质量分析日报表(半检工序)、成品质量分析日报表(成型工序)、成品质量分析日报表(打磨工序)、成品质量分析日报表(擦洗工序)、成品质量分析日报表(施釉工序)

姜永辉 пре 10 месеци
родитељ
комит
92fca5a61f

+ 39 - 9
wwwroot/mes/rpt/rpt201/rpt.ashx

@@ -37,7 +37,7 @@ public class rpt : IHttpHandler, IReadOnlySessionState
 	                            MDF.DEFECTID,
 	                            'CASE WHEN good.GOODSNAME IS NULL 
                                   THEN
-	                                TO_CHAR( ( SUM( CASE WHEN DF.DEFECTCODE = '''||MDF.DEFECTCODE||''' THEN 1 ELSE 0 END ) / COUNT( DISTINCT PD.BARCODE ) * 100 ), ''fm99990.00'' ) || ''%''
+	                                TO_CHAR( ( SUM( CASE WHEN DF.DEFECTCODE = '''||MDF.DEFECTCODE||''' THEN 1 ELSE 0 END ) / COUNT( DISTINCT nvl(pds.productiondataid, pd.productiondataid) ) * 100 ), ''fm99990.00'' ) || ''%''
 	                              ELSE
                                     TO_CHAR(SUM( CASE WHEN DF.DEFECTCODE = '''||MDF.DEFECTCODE||''' THEN 1 ELSE 0 END )) END' AS DEFECTCODE,
 	                           DECODE(DEFECTCODE,'099' ,'回烧蹦脏','99','本烧蹦脏',MDF.DEFECTNAME) DEFECTNAME  
@@ -52,7 +52,7 @@ public class rpt : IHttpHandler, IReadOnlySessionState
                 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.BARCODE||DF.DEFECTCODE ) ELSE NULL END ) )' AS DEFECTCODE,
+	                             'TO_CHAR( COUNT( DISTINCT  CASE WHEN   DF.DEFECTCODE IS NOT NULL  AND  DF.DEFECTCODE = '''||MDF.DEFECTCODE||''' THEN to_char(nvl(pds.productiondataid, pd.productiondataid) ||pd.BARCODE||DF.DEFECTCODE ) ELSE NULL END ) )' AS DEFECTCODE,
 	                           DECODE(DEFECTCODE,'099' ,'回烧蹦脏','99','本烧蹦脏',MDF.DEFECTNAME) DEFECTNAME
                             FROM
 	                            TP_MST_DEFECT MDF 
@@ -63,8 +63,6 @@ public class rpt : IHttpHandler, IReadOnlySessionState
                     sumdefect += dts.Rows[i]["DEFECTCODE"].ToString()+" "+dts.Rows[i]["DEFECTNAME"].ToString();
                 }
 
-
-
                 string sqlStr = @"SELECT * FROM(
                    SELECT  GROUPING_ID(good.GOODSNAME,good.GOODSSPECIFICATION,TP_MST_DataDictionary.DICTIONARYVALUE,logo.LOGONAME) AS GID, 
 											CASE WHEN GROUPING_ID(good.GOODSNAME,good.GOODSSPECIFICATION,TP_MST_DataDictionary.DICTIONARYVALUE,logo.LOGONAME) =15 then '合计'  ELSE TO_CHAR(GD.GOODSCODE )END AS 产品编码,
@@ -72,13 +70,29 @@ public class rpt : IHttpHandler, IReadOnlySessionState
 	                                TO_CHAR(good.GOODSSPECIFICATION) AS 产品规格,
 	                                TO_CHAR(TP_MST_DataDictionary.DICTIONARYVALUE) AS 釉色,
 	                                TO_CHAR(logo.LOGONAME) AS 商标,
-	                                TO_CHAR(COUNT(DISTINCT PD.BARCODE)) 出窑量,
-                                    TO_CHAR(COUNT( DISTINCT CASE WHEN  (  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' ) ) AND MDF.DEFECTCODE IS NOT NULL AND DF.BARCODE IS NOT NULL THEN TO_CHAR(DF.BARCODE||MDF.DEFECTCODE) ELSE NULL END )) AS 缺陷量,
-	                                  TO_CHAR((COUNT( DISTINCT CASE WHEN  (  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' ) ) AND 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') || '%' 缺陷率,
+	                                TO_CHAR(COUNT(DISTINCT nvl(pds.productiondataid, pd.productiondataid))) 出窑量,
+                                    TO_CHAR(COUNT( DISTINCT CASE WHEN  (  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' ) ) AND MDF.DEFECTCODE IS NOT NULL AND DF.BARCODE IS NOT NULL THEN TO_CHAR(nvl(pds.productiondataid, pd.productiondataid)||DF.BARCODE||MDF.DEFECTCODE) ELSE NULL END )) AS 缺陷量,
+	                                  TO_CHAR((COUNT( DISTINCT CASE WHEN  (  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' ) ) AND MDF.DEFECTCODE IS NOT NULL AND DF.BARCODE IS NOT NULL THEN TO_CHAR(nvl(pds.productiondataid, pd.productiondataid)||DF.BARCODE||MDF.DEFECTCODE) ELSE NULL END  )/COUNT(DISTINCT nvl(pds.productiondataid, pd.productiondataid)) * 100), 'fm99990.00') || '%' 缺陷率,
                                     {DEFECT}
                                 FROM
 	                              TP_PM_PRODUCTIONDATA PD
-                                  LEFT JOIN TP_PM_DEFECT DF ON DF.BARCODE = PD.BARCODE AND DF.VALUEFLAG=1  AND DF.PROCEDUREID NOT IN(61,28)
+                                    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 = nvl(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_LOGO logo ON logo.LOGOID=pd.LOGOID
@@ -150,7 +164,23 @@ public class rpt : IHttpHandler, IReadOnlySessionState
     
                                 FROM
 	                             TP_PM_PRODUCTIONDATA PD
-                                  LEFT JOIN TP_PM_DEFECT df ON DF.BARCODE=PD.BARCODE AND DF.VALUEFLAG=1 AND DF.PROCEDUREID NOT IN(61,28)
+                                 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 = nvl(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_LOGO logo ON logo.LOGOID=pd.LOGOID

+ 165 - 54
wwwroot/mes/rpt/rpt202/rpt.ashx

@@ -32,7 +32,7 @@ public class rpt : IHttpHandler, IReadOnlySessionState
 	                            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.BARCODE ) * 100 ), ''fm99990.00'' ) || ''%''
+	                                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 
@@ -46,7 +46,7 @@ public class rpt : IHttpHandler, IReadOnlySessionState
                 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.BARCODE||DF.DEFECTCODE ) ELSE NULL END ) )' AS DEFECTCODE,
+	                            '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 
@@ -65,59 +65,170 @@ public class rpt : IHttpHandler, IReadOnlySessionState
 	                                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 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 DF.BARCODE ELSE NULL END )/COUNT(DISTINCT PD.BARCODE) * 100), 'fm99990.00') || '%' 缺陷率,
+                                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
-	                            TP_PM_PRODUCTIONDATA PD
-								  INNER JOIN TP_PM_PRODUCTIONDATA PDC ON PDC.BARCODE=PD.BARCODE AND PDC.PROCEDUREID IN (40,6,31) AND PDC.VALUEFLAG=1		
-                                  LEFT JOIN TP_PM_DEFECT df ON DF.BARCODE=PD.BARCODE 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','19','20','25','26','27','28','29','30','12','13','14','15','16','17','18','23','31','32','33','34','35')
-                                  LEFT JOIN TP_MST_GOODS GD on GD.GOODSID=PD.GOODSID
-                                  LEFT JOIN TP_MST_LOGO LG ON LG.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  MD ON MD.DICTIONARYID=gd.GLAZETYPEID AND MD.DictionaryType = 'TPC002'
-                                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,
-														''  产品编码,
-														''  产品名称,
-														''  产品规格,
-														''  釉色,
-														''  商标,
-														'' 出窑量,
-														'' 缺陷量,
-														'' 缺陷率,
-														{DEFECTSUM}                              
-    
-												 FROM
-												     TP_PM_PRODUCTIONDATA PD
-												INNER JOIN TP_PM_PRODUCTIONDATA PDC ON PDC.BARCODE=PD.BARCODE AND PDC.PROCEDUREID IN (40,6,31) AND PDC.VALUEFLAG=1
-												LEFT JOIN TP_PM_DEFECT df ON DF.BARCODE=PD.BARCODE 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.DEFECTTYPEID=1
-                                                LEFT JOIN TP_MST_GOODS GD on GD.GOODSID=PD.GOODSID
-                                                LEFT JOIN TP_MST_LOGO LG ON LG.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 MD ON MD.DICTIONARYID=gd.GLAZETYPEID AND MD.DictionaryType = 'TPC002'
-												 WHERE
-												     PD.PROCEDUREID IN ( 16) 
-												      AND PD.CREATETIME >= @DATEBEGIN@
-												     AND PD.CREATETIME < @DATEEND@  
-												     AND PD.VALUEFLAG = 1
-																		) ORDER BY GID".Replace("{DEFECTSUM}",sumdefect).Replace("{DEFECT}", 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.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     
+                                            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_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 PD.productiondataid = DF.productiondataid  	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.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_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 PD.productiondataid = DF.productiondataid    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); 
 												
 
 				//获取查询条件

+ 167 - 58
wwwroot/mes/rpt/rpt203/rpt.ashx

@@ -30,9 +30,9 @@ public class rpt : IHttpHandler, IReadOnlySessionState
 	                         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.BARCODE||DF.DEFECTCODE ) ELSE NULL END ) / COUNT( DISTINCT PD.BARCODE ) * 100 ), ''fm99990.00'' ) || ''%''
+	                                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.BARCODE||DF.DEFECTCODE ) ELSE NULL END ) ) END
+                                   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
@@ -48,7 +48,7 @@ public class rpt : IHttpHandler, IReadOnlySessionState
 			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.BARCODE||DF.DEFECTCODE ) ELSE NULL END ) )' AS DEFECTCODE,
+	                           '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 
@@ -66,62 +66,171 @@ public class rpt : IHttpHandler, IReadOnlySessionState
 	                                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 df.DEFECTCODE IN ( '10', '12', '13', '14', '15', '16', '17', '18', '19', '23','25','35' ) THEN to_char(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(DF.BARCODE||df.DEFECTCODE ) ELSE NULL END )/COUNT(DISTINCT PD.BARCODE) * 100), 'fm99990.00') || '%' 缺陷率,
+	                                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
-	                          TP_PM_PRODUCTIONDATA PD
-                                        	LEFT JOIN TP_PM_GROUTINGDAILYDETAIL GDL ON GDL.BARCODE = PD.BARCODE
-												LEFT JOIN TP_PC_GROUTINGLINE gl ON gl.GROUTINGLINEID=gdl.GROUTINGLINEID
-												INNER JOIN TP_PM_PRODUCTIONDATA PDC ON PDC.BARCODE=GDL.BARCODE AND PDC.PROCEDUREID IN (4,36,53)  AND PDC.VALUEFLAG=1
-												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 PD.BARCODE = DF.BARCODE  AND DF.VALUEFLAG=1 AND  DF.PROCEDUREID NOT IN (61,28) AND DF.PROCEDUREID NOT IN(61,28)
-												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' )
-												LEFT JOIN TP_PC_CLASSESDETAIL CLS ON CLS.CLASSESSETTINGID=PDC.CLASSESSETTINGID
-												LEFT JOIN TP_HR_STAFF STF ON STF.STAFFID=CLS.STAFFID  AND CLS.UJOBSID IN(3,5)
-                                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,
-														''  产品编码,
-														''  产品名称,
-														''  产品规格,
-														''  釉色,
-														''  商标,
-														'' 出窑量,
-														'' 缺陷量,
-														'' 缺陷率,
-														{DEFECTSUM}                              
-    
-												 FROM
-											TP_PM_PRODUCTIONDATA PD
-                                        	LEFT JOIN TP_PM_GROUTINGDAILYDETAIL GDL ON GDL.BARCODE = PD.BARCODE
-												LEFT JOIN TP_PC_GROUTINGLINE gl ON gl.GROUTINGLINEID=gdl.GROUTINGLINEID
-												INNER JOIN TP_PM_PRODUCTIONDATA PDC ON PDC.BARCODE=GDL.BARCODE AND PDC.PROCEDUREID IN (4,36,53)
-												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 PD.BARCODE = DF.BARCODE  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 ('10', '12', '13', '14', '15', '16', '17', '18', '19', '23','25','35'  )
-												LEFT JOIN TP_PC_CLASSESDETAIL CLS ON CLS.CLASSESSETTINGID=PDC.CLASSESSETTINGID
-												LEFT JOIN TP_HR_STAFF STF ON STF.STAFFID=CLS.STAFFID AND CLS.UJOBSID IN(3,5)
-												 WHERE
-												     PD.PROCEDUREID = 16 
-												      AND PD.CREATETIME >= @DATEBEGIN@
-												     AND PD.CREATETIME < @DATEEND@  
-												     AND PD.VALUEFLAG = 1
-																		) ORDER BY GID".Replace("{DEFECTSUM}",sumdefect).Replace("{DEFECT}", 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.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     
+                                            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_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 PD.productiondataid = DF.productiondataid  	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.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_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 PD.productiondataid = DF.productiondataid    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>();

+ 167 - 60
wwwroot/mes/rpt/rpt204/rpt.ashx

@@ -31,9 +31,9 @@ public class rpt : IHttpHandler, IReadOnlySessionState
 	                         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.BARCODE||DF.DEFECTCODE ) ELSE NULL END ) / COUNT( DISTINCT PD.BARCODE ) * 100 ), ''fm99990.00'' ) || ''%''
+	                                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.BARCODE||DF.DEFECTCODE ) ELSE NULL END ) ) END
+                                   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
@@ -49,7 +49,7 @@ public class rpt : IHttpHandler, IReadOnlySessionState
 				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.BARCODE||DF.DEFECTCODE ) ELSE NULL END ) )' AS DEFECTCODE,
+	                           '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 
@@ -67,64 +67,171 @@ public class rpt : IHttpHandler, IReadOnlySessionState
 	                                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  df.DEFECTCODE IN (  '01', '02', '03', '04', '05', '06', '07', '08', '09', '10',  '28', '34', '35') THEN to_char(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(DF.BARCODE||df.DEFECTCODE ) ELSE NULL END )/COUNT(DISTINCT PD.BARCODE) * 100), 'fm99990.00') || '%' 缺陷率,
+	                                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
-	                         	TP_PM_PRODUCTIONDATA PD
-                                        		LEFT JOIN TP_PM_GROUTINGDAILYDETAIL GDL ON GDL.BARCODE = PD.BARCODE
-                                        		LEFT JOIN TP_PC_GROUTINGLINE gl ON gl.GROUTINGLINEID=gdl.GROUTINGLINEID
-                                        		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
-												INNER JOIN TP_PM_PRODUCTIONDATA PDC ON PDC.BARCODE=GDL.BARCODE AND PDC.PROCEDUREID IN (5,36,52)   AND PDC.VALUEFLAG=1
-												LEFT JOIN TP_MST_USER USERS ON USERS.USERID=PDC.USERID 
-												LEFT JOIN TP_PM_DEFECT DF ON PD.BARCODE = DF.BARCODE   AND DF.PROCEDUREID NOT IN(61,28) AND DF.DEFECTCODE IN ( '01', '02', '03', '04', '05', '06', '07', '08', '09', '10',  '28', '34', '35' )  AND DF.VALUEFLAG=1
-												LEFT JOIN TP_PC_CLASSESDETAIL CLS ON CLS.CLASSESSETTINGID=PDC.CLASSESSETTINGID
-												LEFT JOIN TP_HR_STAFF STF ON STF.STAFFID=CLS.STAFFID and CLS.UJOBSID=4
-                                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,
-														''  产品编码,
-														''  产品名称,
-														''  产品规格,
-														''  釉色,
-														''  商标,
-														'' 出窑量,
-														'' 缺陷量,
-														'' 缺陷率,
-														{DEFECTSUM}                              
-    
-												 FROM
-												TP_PM_PRODUCTIONDATA PD
-                                        		LEFT JOIN TP_PM_GROUTINGDAILYDETAIL GDL ON GDL.BARCODE = PD.BARCODE
-                                        		LEFT JOIN TP_PC_GROUTINGLINE gl ON gl.GROUTINGLINEID=gdl.GROUTINGLINEID
-                                        		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
-												INNER JOIN TP_PM_PRODUCTIONDATA PDC ON PDC.BARCODE=GDL.BARCODE AND PDC.PROCEDUREID IN (5,36,52) 
-												LEFT JOIN TP_MST_USER USERS ON USERS.USERID=PDC.USERID 
-												LEFT JOIN TP_PM_DEFECT DF ON PD.BARCODE = DF.BARCODE   AND DF.PROCEDUREID NOT IN(61,28) AND DF.DEFECTCODE IN ( '01', '02', '03', '04', '05', '06', '07', '08', '09', '10',  '28', '34', '35' )  AND DF.VALUEFLAG=1
-												LEFT JOIN TP_PC_CLASSESDETAIL CLS ON CLS.CLASSESSETTINGID=PDC.CLASSESSETTINGID
-												LEFT JOIN TP_HR_STAFF STF ON STF.STAFFID=CLS.STAFFID and CLS.UJOBSID=4
-												 WHERE
-												     PD.PROCEDUREID IN ( 16) 
-												      AND PD.CREATETIME >= @DATEBEGIN@
-												     AND PD.CREATETIME < @DATEEND@ 
-												     AND PD.VALUEFLAG = 1
-																		) ORDER BY GID".Replace("{DEFECTSUM}",sumdefect).Replace("{DEFECT}", 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.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     
+                                            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_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 PD.productiondataid = DF.productiondataid  	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.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_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 PD.productiondataid = DF.productiondataid    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>();

+ 165 - 51
wwwroot/mes/rpt/rpt205/rpt.ashx

@@ -31,9 +31,9 @@ public class rpt : IHttpHandler, IReadOnlySessionState
 	                            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.BARCODE||DF.DEFECTCODE ) ELSE NULL END ) / COUNT( DISTINCT PD.BARCODE ) * 100 ), ''fm99990.00'' ) || ''%''
+	                                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.BARCODE||DF.DEFECTCODE ) ELSE NULL END ) ) END
+                                   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
@@ -47,7 +47,7 @@ public class rpt : IHttpHandler, IReadOnlySessionState
 				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(DF.BARCODE||MDF.DEFECTCODE ) ELSE NULL END ))' AS DEFECTCODE,
+	                            '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 ");
@@ -62,57 +62,171 @@ public class rpt : IHttpHandler, IReadOnlySessionState
 	                                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  df.DEFECTCODE IN ( '36','37','38','39','40','41','42','43','44')  THEN to_char(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(DF.BARCODE||MDF.DEFECTCODE ) ELSE NULL END )/COUNT(DISTINCT PD.BARCODE) * 100), 'fm99990.00') || '%' 缺陷率,
+	                                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
-	                            TP_PM_PRODUCTIONDATA PD
-								LEFT JOIN TP_PM_GROUTINGDAILYDETAIL GDL ON GDL.BARCODE=PD.BARCODE
+                                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.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     
+                                            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_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 PD.BARCODE = DF.BARCODE  AND DF.PROCEDUREID NOT IN(61,28) AND DF.VALUEFLAG=1
-                                LEFT JOIN TP_MST_DEFECT MDF ON DF.DEFECTID = MDF.DEFECTID AND (MDF.DEFECTTYPEID =4 )
-                                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,
-														''  产品编码,
-														''  产品名称,
-														''  产品规格,
-														''  釉色,
-														''  商标,
-														'' 出窑量,
-														'' 缺陷量,
-														'' 缺陷率,
-														{DEFECTSUM}                              
-    
-												 FROM
-												     TP_PM_PRODUCTIONDATA PD
-												 LEFT JOIN TP_PM_GROUTINGDAILYDETAIL GDL ON GDL.BARCODE=PD.BARCODE
-												 LEFT JOIN TP_PC_GROUTINGLINE gl ON gl.GROUTINGLINEID=gdl.GROUTINGLINEID
-												 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 PD.BARCODE = DF.BARCODE   AND DF.VALUEFLAG=1 AND DF.PROCEDUREID NOT IN(61,28)
-												 LEFT JOIN TP_MST_DEFECT MDF ON DF.DEFECTCODE = MDF.DEFECTCODE AND ( MDF.DEFECTTYPEID =4 or  MDF.DEFECTCODE='20')
-												 WHERE
-												     PD.PROCEDUREID IN ( 16) 
-												      AND PD.CREATETIME >= @DATEBEGIN@
-												     AND PD.CREATETIME < @DATEEND@ 
-												     AND PD.VALUEFLAG = 1
-																		) ORDER BY GID".Replace("{DEFECTSUM}",sumdefect).Replace("{DEFECT}", defect);
+                                LEFT JOIN TP_MST_LOGO LG ON PD.LOGOID = LG.LOGOID" ;
+                sqlStr += @" LEFT JOIN TP_PM_DEFECT DF ON PD.productiondataid = DF.productiondataid  	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.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_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 PD.productiondataid = DF.productiondataid    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>();

+ 39 - 32
wwwroot/mes/rpt/rpt211/rpt.ashx

@@ -29,9 +29,9 @@ public class rpt : IHttpHandler, IReadOnlySessionState
                 DataTable dt = conn.ExecuteDatatable(@"			SELECT
 														DISTINCT MDF.DEFECTCODE AS DC,	 MDF.DEFECTID,
 	                            'CASE WHEN GROUPING_ID(基础数据.工号,基础数据.姓名,部门.部门,基础数据.产品名称,基础数据.产品规格,基础数据.釉色,基础数据.商标)=111 
-															THEN  TO_CHAR(  ( count(distinct CASE WHEN 基础数据.缺陷ID IN( '''||MDF.DEFECTID||''') THEN to_char(基础数据.缺陷条码||基础数据.缺陷ID) ELSE null END ) / COUNT(DISTINCT 出窑条码) * 100 ), ''fm99990.00'' ) || ''%''
+															THEN  TO_CHAR(  ( count(distinct CASE WHEN 基础数据.缺陷ID IN( '''||MDF.DEFECTID||''') THEN to_char(productiondataid||基础数据.缺陷条码||基础数据.缺陷ID) ELSE null END ) / COUNT(DISTINCT productiondataid) * 100 ), ''fm99990.00'' ) || ''%''
 	                              ELSE
-                                    TO_CHAR(count(distinct CASE WHEN 基础数据.缺陷ID IN( '''||MDF.DEFECTID||''') THEN to_char(基础数据.缺陷条码||基础数据.缺陷ID) ELSE null END )) END' AS DEFECTCODE,
+                                    TO_CHAR(count(distinct CASE WHEN 基础数据.缺陷ID IN( '''||MDF.DEFECTID||''') THEN to_char(productiondataid||基础数据.缺陷条码||基础数据.缺陷ID) ELSE null END )) END' AS DEFECTCODE,
 	                            DECODE(DEFECTCODE,'099' ,'回烧蹦脏','99','本烧蹦脏',MDF.DEFECTNAME) DEFECTNAME  
 														 FROM
 	                            TP_MST_DEFECT MDF 
@@ -48,9 +48,9 @@ public class rpt : IHttpHandler, IReadOnlySessionState
                 DataTable dts = conn.ExecuteDatatable(@"		SELECT
 														DISTINCT MDF.DEFECTCODE AS DC,	 MDF.DEFECTID,
 	                            'CASE WHEN GROUPING_ID(基础数据.工号,基础数据.姓名,部门.部门,基础数据.产品名称,基础数据.产品规格,基础数据.釉色,基础数据.商标)=127 
-															THEN  TO_CHAR(  ( count( DISTINCT CASE WHEN 基础数据.缺陷ID IN( '''||MDF.DEFECTID||''') THEN to_char(基础数据.缺陷条码||基础数据.缺陷ID) ELSE null END ) / COUNT(DISTINCT 出窑条码) * 100 ), ''fm99990.00'' ) || ''%''
+															THEN  TO_CHAR(  ( count( DISTINCT CASE WHEN 基础数据.缺陷ID IN( '''||MDF.DEFECTID||''') THEN to_char(productiondataid||基础数据.缺陷条码||基础数据.缺陷ID) ELSE null END ) / COUNT(DISTINCT productiondataid) * 100 ), ''fm99990.00'' ) || ''%''
 	                              ELSE
-                                    TO_CHAR(count( DISTINCT CASE WHEN 基础数据.缺陷ID IN( '''||MDF.DEFECTID||''') THEN to_char(基础数据.缺陷条码||基础数据.缺陷ID) ELSE null END )) END' AS DEFECTCODE,
+                                    TO_CHAR(count( DISTINCT CASE WHEN 基础数据.缺陷ID IN( '''||MDF.DEFECTID||''') THEN to_char(productiondataid||基础数据.缺陷条码||基础数据.缺陷ID) ELSE null END )) END' AS DEFECTCODE,
 	                            DECODE(DEFECTCODE,'099' ,'回烧蹦脏','99','本烧蹦脏',MDF.DEFECTNAME) DEFECTNAME   
 															 FROM
 	                            TP_MST_DEFECT MDF 
@@ -69,15 +69,11 @@ public class rpt : IHttpHandler, IReadOnlySessionState
                                         FROM  TP_PC_GROUTINGLINE
                                         ),基础数据 AS 
                                         (
-                                        SELECT
-pd.GROUTINGLINEID,pd.工号,pd.产品名称,pd.姓名,pd.产品编码,pd.产品规格,pd.釉色,pd.商标,pd.出窑条码,pd.缺陷条码,pd.缺陷ID,pd.缺陷类别,
-GOODSLEVELTYPEID
-FROM(
-SELECT
-	GROUTINGLINEID,工号,产品名称,姓名,产品编码,产品规格,釉色,商标,出窑条码,缺陷条码,缺陷ID,缺陷类别,GOODSLEVELTYPEID,
-row_number() over (partition by 出窑条码 order by GOODSLEVELTYPEID DESC ) as rownums 
-	FROM(
- SELECT
+                                         
+                                            SELECT
+	                                            GROUTINGLINEID,工号,产品名称,姓名,产品编码,产品规格,釉色,商标,出窑条码,缺陷条码,缺陷ID,缺陷类别,GOODSLEVELTYPEID,productiondataid
+	                                            FROM(
+                                             SELECT DISTINCT
                                         	GDL.GROUTINGLINEID,
                                         	gdl.USERCODE AS 工号,
                                         	staff.STAFFNAME AS 姓名,
@@ -89,26 +85,37 @@ row_number() over (partition by 出窑条码 order by GOODSLEVELTYPEID DESC ) as
                                         	PD.BARCODE 出窑条码,
                                         	DF.BARCODE 缺陷条码,
                                         	DF.DEFECTID 缺陷ID,
-                                        	MDF.DEFECTCODE 缺陷类别,
-											CASE WHEN PDS.GOODSLEVELTYPEID < PD.GOODSLEVELTYPEID  THEN PD.GOODSLEVELTYPEID 
-											WHEN PD.GOODSLEVELTYPEID  < PDS.GOODSLEVELTYPEID THEN PDS.GOODSLEVELTYPEID
-											WHEN PDS.GOODSLEVELTYPEID IS NULL  THEN PD.GOODSLEVELTYPEID
-											WHEN PD.GOODSLEVELTYPEID  = PDS.GOODSLEVELTYPEID THEN PD.GOODSLEVELTYPEID
-											ELSE NULL END GOODSLEVELTYPEID
+                                        	MDF.DEFECTCODE 缺陷类别 
+											 ,nvl(pds.goodsleveltypeid, pd.goodsleveltypeid) goodsleveltypeid
+                                            ,nvl(pds.productiondataid, pd.productiondataid) productiondataid
                                        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_GROUTINGDAILYDETAIL GDL ON GDL.BARCODE = PD.BARCODE
                                         	LEFT JOIN TP_PC_GROUTINGLINE gl ON gl.GROUTINGLINEID=gdl.GROUTINGLINEID
                                         	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_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.BARCODE = PD.BARCODE AND DF.VALUEFLAG=1  AND DF.PROCEDUREID NOT IN(61,28)
+                                        	LEFT JOIN TP_PM_DEFECT DF ON df.productiondataid = nvl(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_USER us ON us.USERID=gdl.USERID
 											LEFT JOIN TP_MST_USERSTAFF us ON us.USERID=gdl.USERID
-											LEFT JOIN TP_HR_STAFF  staff ON staff.STAFFID=us.STAFFID 
-											LEFT  JOIN TP_PM_PRODUCTIONDATA pds ON PDS.BARCODE=PD.BARCODE AND PDS.PROCEDUREID=60 AND PDS.VALUEFLAG=1
+											LEFT JOIN TP_HR_STAFF  staff ON staff.STAFFID=us.STAFFID  
                                             WHERE
                                         	PD.PROCEDUREID IN ( 16)  AND PD.VALUEFLAG=1
                                            AND PD.CREATETIME >= @DATEBEGIN@
@@ -143,7 +150,7 @@ row_number() over (partition by 出窑条码 order by GOODSLEVELTYPEID DESC ) as
                         }
                     }
                 }
-                sqlStr += @"  ) ) pd   )
+                sqlStr += @"  )   pd   )
               SELECT * FROM(             
                     SELECT					
                        GROUPING_ID(基础数据.工号,基础数据.姓名,部门.部门,基础数据.产品名称,基础数据.产品规格,基础数据.釉色,基础数据.商标) AS GID,
@@ -158,13 +165,13 @@ row_number() over (partition by 出窑条码 order by GOODSLEVELTYPEID DESC ) as
                     基础数据.产品规格,
                     基础数据.釉色,
                     基础数据.商标,
-                     TO_CHAR(COUNT(DISTINCT 基础数据.出窑条码)) 出窑量,
-                    TO_CHAR(COUNT(DISTINCT 基础数据.出窑条码) - COUNT(DISTINCT CASE WHEN GOODSLEVELTYPEID NOT IN (4)  AND  (基础数据.缺陷类别 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' )) THEN 基础数据.出窑条码 ELSE NULL END )) 优级品量,
-                      DECODE(NVL((COUNT( DISTINCT 基础数据.出窑条码 ) - COUNT(DISTINCT CASE WHEN GOODSLEVELTYPEID NOT IN (4) AND (基础数据.缺陷类别 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' )) THEN 基础数据.出窑条码 ELSE NULL END)),0),0,'0%',
-	TO_CHAR((NVL((COUNT(DISTINCT 基础数据.出窑条码) - COUNT(DISTINCT CASE WHEN GOODSLEVELTYPEID NOT IN (4) AND (基础数据.缺陷类别 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' )) THEN 基础数据.出窑条码 ELSE NULL END ) ) ,0 ) / 
-	DECODE(NVL( COUNT( DISTINCT 基础数据.出窑条码 ), 1 ),0,1,NVL( COUNT( DISTINCT 基础数据.出窑条码 ), 1 ) ) ) * 100,'fm99990.00' ) || '%' ) AS 优级品率,
-					TO_CHAR(COUNT(distinct CASE WHEN   (基础数据.缺陷类别 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' )) THEN TO_CHAR(基础数据.缺陷条码|| 基础数据.缺陷ID) ELSE NULL END )) 缺陷量,
-					TO_CHAR( (COUNT(DISTINCT CASE WHEN   (基础数据.缺陷类别 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' )) THEN TO_CHAR(基础数据.缺陷条码|| 基础数据.缺陷ID) ELSE NULL END ) /COUNT(DISTINCT 基础数据.出窑条码) * 100), 'fm99990.00') || '%' 缺陷率,
+                     TO_CHAR(COUNT(DISTINCT 基础数据.productiondataid)) 出窑量,
+                    TO_CHAR(COUNT(DISTINCT 基础数据.productiondataid) - COUNT(DISTINCT CASE WHEN GOODSLEVELTYPEID NOT IN (4)  AND  (基础数据.缺陷类别 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' )) THEN 基础数据.productiondataid ELSE NULL END )) 优级品量,
+                      DECODE(NVL((COUNT( DISTINCT 基础数据.productiondataid ) - COUNT(DISTINCT CASE WHEN GOODSLEVELTYPEID NOT IN (4) AND (基础数据.缺陷类别 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' )) THEN 基础数据.productiondataid ELSE NULL END)),0),0,'0%',
+	TO_CHAR((NVL((COUNT(DISTINCT 基础数据.productiondataid) - COUNT(DISTINCT CASE WHEN GOODSLEVELTYPEID NOT IN (4) AND (基础数据.缺陷类别 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' )) THEN 基础数据.productiondataid ELSE NULL END ) ) ,0 ) / 
+	DECODE(NVL( COUNT( DISTINCT 基础数据.productiondataid ), 1 ),0,1,NVL( COUNT( DISTINCT 基础数据.productiondataid ), 1 ) ) ) * 100,'fm99990.00' ) || '%' ) AS 优级品率,
+					TO_CHAR(COUNT(distinct CASE WHEN   (基础数据.缺陷类别 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' )) THEN TO_CHAR(productiondataid||基础数据.缺陷条码|| 基础数据.缺陷ID) ELSE NULL END )) 缺陷量,
+					TO_CHAR( (COUNT(DISTINCT CASE WHEN   (基础数据.缺陷类别 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' )) THEN TO_CHAR(productiondataid||基础数据.缺陷条码|| 基础数据.缺陷ID) ELSE NULL END ) /COUNT(DISTINCT 基础数据.productiondataid) * 100), 'fm99990.00') || '%' 缺陷率,
 					{DEFECT}
                     FROM 基础数据
                     LEFT JOIN 部门 ON 部门.GROUTINGLINEID=基础数据.GROUTINGLINEID

+ 99 - 49
wwwroot/mes/rpt/rpt212/rpt.ashx

@@ -29,7 +29,7 @@ public class rpt : IHttpHandler, IReadOnlySessionState
 				DataTable dt = conn.ExecuteDatatable(@"		SELECT
 												 DISTINCT MDF.DEFECTCODE AS DC,			 MDF.DEFECTID,
 	                            'CASE WHEN GROUPING_ID(基础数据.工号,基础数据.姓名,基础数据.产品名称,基础数据.产品规格,基础数据.釉色,基础数据.商标)=63 
-															THEN  TO_CHAR(  ( SUM( CASE WHEN 基础数据.缺陷ID = '''||MDF.DEFECTID||''' THEN 1 ELSE 0 END ) / COUNT(DISTINCT 出窑条码) * 100 ), ''fm99990.00'' ) || ''%''
+															THEN  TO_CHAR(  ( SUM( CASE WHEN 基础数据.缺陷ID = '''||MDF.DEFECTID||''' THEN 1 ELSE 0 END ) / COUNT(DISTINCT productiondataid) * 100 ), ''fm99990.00'' ) || ''%''
 	                              ELSE
                                     TO_CHAR(SUM( CASE WHEN 基础数据.缺陷ID = '''||MDF.DEFECTID||''' THEN 1 ELSE 0 END )) END' AS DEFECTCODE,
 	                            MDF.DEFECTNAME 
@@ -44,7 +44,7 @@ public class rpt : IHttpHandler, IReadOnlySessionState
 
 					string sumdefect = "";
               DataTable dts = conn.ExecuteDatatable(@"	SELECT  DISTINCT MDF.DEFECTCODE AS DC,			 MDF.DEFECTID,
-	                             ' TO_CHAR( COUNT( DISTINCT  CASE WHEN  缺陷ID IS NOT NULL AND 基础数据.DEFECTCODE = '''||MDF.DEFECTCODE||''' THEN to_char(缺陷条码||基础数据.缺陷ID ) ELSE NULL END ) ) ' AS DEFECTCODE,
+	                             ' TO_CHAR( COUNT( DISTINCT  CASE WHEN  缺陷ID IS NOT NULL AND 基础数据.DEFECTCODE = '''||MDF.DEFECTCODE||''' THEN to_char(productiondataid||缺陷条码||基础数据.缺陷ID ) ELSE NULL END ) ) ' AS DEFECTCODE,
 	                            MDF.DEFECTNAME 
                            FROM TP_PC_DEFECTPROCEDUREJOBS JOBS
 															LEFT JOIN  TP_MST_DEFECT MDF  ON mdf.DEFECTID=JOBS.DEFECTID 
@@ -70,53 +70,103 @@ public class rpt : IHttpHandler, IReadOnlySessionState
                                         CASE WHEN HIGHPRESSUREFLAG=1 THEN'高压' else TO_CHAR(SUBSTR(GROUTINGLINECODE, 1, 2)) END AS 部门
                                         FROM  TP_PC_GROUTINGLINE
                                         ),基础数据 AS 
-                                        (
-                                       SELECT
-									pd.工号,pd.产品名称,pd.姓名,pd.产品编码,pd.产品规格,pd.釉色,pd.商标,pd.出窑条码,pd.缺陷条码,pd.缺陷ID,DEFECTCODE,缺陷类别,PROCEDUREID,GOODSLEVELTYPEID
-									FROM(
-									SELECT
-										工号,产品名称,姓名,产品编码,产品规格,釉色,商标,出窑条码,缺陷条码,缺陷ID,DEFECTCODE,GOODSLEVELTYPEID,缺陷类别,PROCEDUREID,
-									row_number() over (partition by 出窑条码 order by GOODSLEVELTYPEID DESC ) as rownums 
-										FROM(
-									 SELECT
-											
-                                        	PDC.USERCODE AS 工号,
-                                        	STF.STAFFNAME AS 姓名,
-											GD.GOODSCODE AS 产品编码,
-                                        	GD.GOODSNAME AS 产品名称,
-                                        	GD.GOODSSPECIFICATION AS 产品规格,
-                                        	MD.DICTIONARYVALUE AS 釉色,
-                                        	LG.LOGONAME AS 商标,
-                                        	PD.BARCODE 出窑条码,
-                                        	DF.BARCODE 缺陷条码,
-                                        	DF.DEFECTID 缺陷ID,
-											DF.DEFECTCODE ,
-											MDF.DEFECTTYPEID 缺陷类别,
-											PDC.PROCEDUREID,
-											CASE WHEN PDS.GOODSLEVELTYPEID < PD.GOODSLEVELTYPEID  THEN PD.GOODSLEVELTYPEID 
-											WHEN PD.GOODSLEVELTYPEID  < PDS.GOODSLEVELTYPEID THEN PDS.GOODSLEVELTYPEID
-											WHEN PDS.GOODSLEVELTYPEID IS NULL  THEN PD.GOODSLEVELTYPEID
-											WHEN PD.GOODSLEVELTYPEID  = PDS.GOODSLEVELTYPEID THEN PD.GOODSLEVELTYPEID
-											ELSE NULL END GOODSLEVELTYPEID
-                                        	                                        FROM
-                                        	TP_PM_PRODUCTIONDATA PD
-                                        	LEFT JOIN TP_PM_GROUTINGDAILYDETAIL GDL ON GDL.BARCODE = PD.BARCODE
-											LEFT JOIN TP_PC_GROUTINGLINE gl ON gl.GROUTINGLINEID=gdl.GROUTINGLINEID
-											INNER JOIN TP_PM_PRODUCTIONDATA PDC ON PDC.BARCODE=GDL.BARCODE AND PDC.PROCEDUREID IN (4,36,53) AND PDC.VALUEFLAG=1
-											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 PD.BARCODE = DF.BARCODE  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 ('10', '12', '13', '14', '15', '16', '17', '18', '19', '23', '25', '35'  )
-											LEFT JOIN TP_PC_CLASSESDETAIL CLS ON CLS.CLASSESSETTINGID=PDC.CLASSESSETTINGID
-											LEFT JOIN TP_HR_STAFF STF ON STF.STAFFID=CLS.STAFFID  
-											LEFT  JOIN TP_PM_PRODUCTIONDATA pds ON PDS.BARCODE=PD.BARCODE AND PDS.PROCEDUREID=60 AND PDS.VALUEFLAG=1
-                                            WHERE
-                                        	PD.PROCEDUREID IN ( 16)  AND PD.VALUEFLAG = 1
-                                           AND PD.CREATETIME >= @DATEBEGIN@
-                                           AND PD.CREATETIME <= @DATEEND@ 
-										)) pd
-                                        )
+                                        (SELECT groutinglineid
+                                                    ,工号
+                                                    ,产品名称
+                                                    ,姓名
+                                                    ,产品编码
+                                                    ,产品规格
+                                                    ,釉色
+                                                    ,商标
+                                                    ,出窑条码
+                                                    ,缺陷条码
+                                                    ,缺陷id
+                                                    ,defectcode 
+                                                    ,goodsleveltypeid
+                                                    ,缺陷类别
+                                                    ,procedureid
+                                                    ,productiondataid
+                                                FROM (SELECT DISTINCT gdl.groutinglineid
+                                                                     ,pd.usercode AS 工号
+                                                                     ,stf.staffname AS 姓名
+                                                                     ,gd.goodscode AS 产品编码
+                                                                     ,gd.goodsname AS 产品名称
+                                                                     ,gd.goodsspecification AS 产品规格
+                                                                     ,md.dictionaryvalue AS 釉色
+                                                                     ,lg.logoname AS 商标
+                                                                     ,pd.barcode 出窑条码
+                                                                     ,df.barcode 缺陷条码
+                                                                     ,df.defectid 缺陷id
+                                                                     ,df.defectcode
+                                                                     ,mdf.defecttypeid 缺陷类别
+                                                                     ,pd.procedureid
+                                                                     ,nvl(pd61.goodsleveltypeid, pd.goodsleveltypeid) goodsleveltypeid
+                                                                     ,nvl(pd61.productiondataid, pd.productiondataid) productiondataid
+                                                        FROM (SELECT *
+                                                                FROM (SELECT pd28.groutingdailydetailid
+                                                                            ,pd28.goodsid
+                                                                            ,pd28.logoid
+                                                                            ,pd28.goodsleveltypeid
+                                                                            ,pd24.procedureid
+                                                                            ,pd28.barcode
+                                                                            ,pd28.kilncarbatchno
+                                                                            ,pd28.productiondataid
+                                                                            ,pd24.classessettingid
+                                                                            ,pd24.usercode
+                                                                            ,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 -- 5-8重烧烧窑
+                                                                          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) --  重烧质量登记里包含  5-8重烧烧窑     
+                          
+                                                                             AND pd28.createtime >= @DATEBEGIN@ -- to_date('2025-03-26', 'yyyy-MM-DD')
+                                                                           AND pd28.createtime <= @DATEEND@  -- to_date('2025-04-25 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_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
+                                                            -- 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 < pd61.productiondataid)
+                                                        LEFT JOIN tp_pm_groutingdailydetail gdl
+                                                          ON gdl.groutingdailydetailid = pd.groutingdailydetailid
+                                                        LEFT JOIN tp_pc_groutingline gl
+                                                          ON gl.groutinglineid = gdl.groutinglineid
+                                                        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 = nvl(pd61.productiondataid, pd.productiondataid)
+                                                         AND df.defectcode IN ('10', '12', '13', '14', '15', '16', '17', '18', '19', '23', '25', '35')                  
+                                                         AND df.valueflag = 1
+                                                         AND df.procedureid NOT IN (61, 28)
+                                                        LEFT JOIN tp_mst_defect mdf
+                                                          ON df.defectid = mdf.defectid
+                                                        LEFT JOIN tp_pc_classesdetail cls
+                                                          ON cls.classessettingid = pd.classessettingid
+                                                        LEFT JOIN tp_hr_staff stf
+                                                          ON stf.staffid = cls.staffid
+                                                        LEFT JOIN tp_mst_jobs jobs
+                                                          ON jobs.jobsid = stf.jobs) pd  
+                                              )
                           SELECT * FROM(
                                         SELECT
                                         GROUPING_ID(基础数据.工号,基础数据.姓名,基础数据.产品名称,基础数据.产品规格,基础数据.釉色,基础数据.商标) AS GID,

+ 106 - 59
wwwroot/mes/rpt/rpt213/rpt.ashx

@@ -29,9 +29,9 @@ public class rpt : IHttpHandler, IReadOnlySessionState
 				DataTable dt = conn.ExecuteDatatable(@"		SELECT
 												 DISTINCT MDF.DEFECTCODE AS DC,			 MDF.DEFECTID,
 	                            'CASE WHEN GROUPING_ID(基础数据.工号,基础数据.姓名,基础数据.产品名称,基础数据.产品规格,基础数据.釉色,基础数据.商标)=63 
-															THEN  	TO_CHAR(( COUNT( DISTINCT  CASE WHEN  缺陷ID IS NOT NULL AND 基础数据.缺陷编码 = '''||MDF.DEFECTCODE||''' THEN to_char(缺陷条码||基础数据.缺陷ID ) ELSE NULL END ) / COUNT(DISTINCT 出窑条码) * 100 ), ''fm99990.00'' ) || ''%''
+															THEN  	TO_CHAR(( COUNT( DISTINCT  CASE WHEN  缺陷ID IS NOT NULL AND 基础数据.缺陷编码 = '''||MDF.DEFECTCODE||''' THEN to_char(productiondataid||缺陷条码||基础数据.缺陷ID ) ELSE NULL END ) / COUNT(DISTINCT productiondataid) * 100 ), ''fm99990.00'' ) || ''%''
 	                              ELSE
-                                    TO_CHAR( COUNT( DISTINCT  CASE WHEN  缺陷ID IS NOT NULL AND 基础数据.缺陷编码 = '''||MDF.DEFECTCODE||''' THEN to_char(缺陷条码||基础数据.缺陷ID ) ELSE NULL END ) ) END' AS DEFECTCODE,
+                                    TO_CHAR( COUNT( DISTINCT  CASE WHEN  缺陷ID IS NOT NULL AND 基础数据.缺陷编码 = '''||MDF.DEFECTCODE||''' THEN to_char(productiondataid||缺陷条码||基础数据.缺陷ID ) ELSE NULL END ) ) END' AS DEFECTCODE,
 	                            MDF.DEFECTNAME 
 															FROM TP_PC_DEFECTPROCEDUREJOBS JOBS
 															LEFT JOIN  TP_MST_DEFECT MDF  ON mdf.DEFECTID=JOBS.DEFECTID 
@@ -43,7 +43,7 @@ public class rpt : IHttpHandler, IReadOnlySessionState
 				}
 				string sumdefect = "";
               DataTable dts = conn.ExecuteDatatable(@"	SELECT DISTINCT MDF.DEFECTCODE AS DC,		 MDF.DEFECTID,
-	                            ' TO_CHAR( COUNT( DISTINCT  CASE WHEN  缺陷ID IS NOT NULL AND 基础数据.缺陷编码 = '''||MDF.DEFECTCODE||''' THEN to_char(缺陷条码||基础数据.缺陷ID ) ELSE NULL END ) ) ' AS DEFECTCODE,
+	                            ' TO_CHAR( COUNT( DISTINCT  CASE WHEN  缺陷ID IS NOT NULL AND 基础数据.缺陷编码 = '''||MDF.DEFECTCODE||''' THEN to_char(productiondataid||缺陷条码||基础数据.缺陷ID ) ELSE NULL END ) ) ' AS DEFECTCODE,
 	                            MDF.DEFECTNAME 
                            FROM TP_PC_DEFECTPROCEDUREJOBS JOBS
 															LEFT JOIN  TP_MST_DEFECT MDF  ON mdf.DEFECTID=JOBS.DEFECTID 
@@ -69,55 +69,102 @@ public class rpt : IHttpHandler, IReadOnlySessionState
 											CASE WHEN HIGHPRESSUREFLAG=1 THEN'高压' else TO_CHAR(SUBSTR(GROUTINGLINECODE, 1, 2)) END AS 部门
 											FROM  TP_PC_GROUTINGLINE
 											),基础数据 AS 
-											(  SELECT
-									pd.工号,pd.产品名称,pd.姓名,pd.产品编码,pd.产品规格,pd.釉色,pd.商标,pd.出窑条码,pd.缺陷条码,pd.缺陷ID,缺陷编码,缺陷类别,PROCEDUREID,GOODSLEVELTYPEID
-									FROM(
-									SELECT
-										工号,产品名称,姓名,产品编码,产品规格,釉色,商标,出窑条码,缺陷条码,缺陷ID,缺陷编码,GOODSLEVELTYPEID,缺陷类别,PROCEDUREID,
-									row_number() over (partition by 出窑条码 order by GOODSLEVELTYPEID DESC ) as rownums 
-										FROM(
-									 SELECT
-											GDL.GROUTINGLINEID,
-                                        	PDC.USERCODE AS 工号,
-                                        	STF.STAFFNAME AS 姓名,
-											GD.GOODSCODE AS 产品编码,
-                                        	GD.GOODSNAME AS 产品名称,
-                                        	GD.GOODSSPECIFICATION AS 产品规格,
-                                        	MD.DICTIONARYVALUE AS 釉色,
-                                        	LG.LOGONAME AS 商标,
-                                        	PD.BARCODE 出窑条码,
-                                        	DF.BARCODE 缺陷条码,
-                                        	DF.DEFECTID 缺陷ID,
-											DF.DEFECTCODE 缺陷编码,
-											MDF.DEFECTTYPEID 缺陷类别,
-											PDC.PROCEDUREID,
-											CASE WHEN PDS.GOODSLEVELTYPEID < PD.GOODSLEVELTYPEID  THEN PD.GOODSLEVELTYPEID 
-											WHEN PD.GOODSLEVELTYPEID  < PDS.GOODSLEVELTYPEID THEN PDS.GOODSLEVELTYPEID
-											WHEN PDS.GOODSLEVELTYPEID IS NULL  THEN PD.GOODSLEVELTYPEID
-											WHEN PD.GOODSLEVELTYPEID  = PDS.GOODSLEVELTYPEID THEN PD.GOODSLEVELTYPEID
-											ELSE NULL END GOODSLEVELTYPEID
-                                        	                                        FROM
-                                        	TP_PM_PRODUCTIONDATA PD
-                                        		LEFT JOIN TP_PM_GROUTINGDAILYDETAIL GDL ON GDL.BARCODE = PD.BARCODE
-                                        		LEFT JOIN TP_PC_GROUTINGLINE gl ON gl.GROUTINGLINEID=gdl.GROUTINGLINEID
-                                        		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
-												INNER JOIN TP_PM_PRODUCTIONDATA PDC ON PDC.BARCODE=GDL.BARCODE AND PDC.PROCEDUREID IN (5,36,52) AND PDC.VALUEFLAG=1
-												LEFT JOIN TP_MST_USER USERS ON USERS.USERID=PDC.USERID 
-												LEFT JOIN TP_PM_DEFECT DF ON PD.BARCODE = DF.BARCODE   AND DF.PROCEDUREID NOT IN(61,28) 
-												AND DF.DEFECTCODE IN ( '01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '28', '34', '35' )  AND DF.VALUEFLAG=1
-												LEFT JOIN TP_MST_DEFECT MDF ON DF.DEFECTID = MDF.DEFECTID												
-												LEFT JOIN TP_PC_CLASSESDETAIL CLS ON CLS.CLASSESSETTINGID=PDC.CLASSESSETTINGID
-												LEFT JOIN TP_HR_STAFF STF ON STF.STAFFID=CLS.STAFFID 
-												LEFT  JOIN TP_PM_PRODUCTIONDATA pds ON PDS.BARCODE=PD.BARCODE AND PDS.PROCEDUREID=60 AND PDS.VALUEFLAG=1
-                                            WHERE
-                                        	PD.PROCEDUREID IN ( 16)  AND PD.VALUEFLAG = 1
-                                           AND PD.CREATETIME >= @DATEBEGIN@
-                                           AND PD.CREATETIME <= @DATEEND@ 
-																					 )
-																					 ) pd
-										)
+										 (SELECT groutinglineid
+													,工号
+													,产品名称
+													,姓名
+													,产品编码
+													,产品规格
+													,釉色
+													,商标
+													,出窑条码
+													,缺陷条码
+													,缺陷id
+													,defectcode  缺陷编码
+													,goodsleveltypeid
+													,缺陷类别
+													,procedureid
+													,productiondataid
+												FROM (SELECT DISTINCT gdl.groutinglineid
+																	 ,pd.usercode AS 工号
+																	 ,stf.staffname AS 姓名
+																	 ,gd.goodscode AS 产品编码
+																	 ,gd.goodsname AS 产品名称
+																	 ,gd.goodsspecification AS 产品规格
+																	 ,md.dictionaryvalue AS 釉色
+																	 ,lg.logoname AS 商标
+																	 ,pd.barcode 出窑条码
+																	 ,df.barcode 缺陷条码
+																	 ,df.defectid 缺陷id
+																	 ,df.defectcode
+																	 ,mdf.defecttypeid 缺陷类别
+																	 ,pd.procedureid
+																	 ,nvl(pd61.goodsleveltypeid, pd.goodsleveltypeid) goodsleveltypeid
+																	 ,nvl(pd61.productiondataid, pd.productiondataid) productiondataid
+														FROM (SELECT *
+																FROM (SELECT pd28.groutingdailydetailid
+																			,pd28.goodsid
+																			,pd28.logoid
+																			,pd28.goodsleveltypeid
+																			,pd24.procedureid
+																			,pd28.barcode
+																			,pd28.kilncarbatchno
+																			,pd28.productiondataid
+																			,pd24.classessettingid
+																			,pd24.usercode
+																			,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 -- 5-8重烧烧窑
+																		  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) --  重烧质量登记里包含  
+																		 AND pd28.createtime >=  @DATEBEGIN@ -- to_date('2025-06-02', 'yyyy-MM-DD')
+																		 AND pd28.createtime <=  @DATEEND@ -- to_date('2025-06-02 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_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
+															-- 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 < pd61.productiondataid)
+														LEFT JOIN tp_pm_groutingdailydetail gdl
+														  ON gdl.groutingdailydetailid = pd.groutingdailydetailid
+														LEFT JOIN tp_pc_groutingline gl
+														  ON gl.groutinglineid = gdl.groutinglineid
+														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 = nvl(pd61.productiondataid, pd.productiondataid)
+														 AND df.defectcode IN ( '01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '28', '34', '35')                  
+														 AND df.valueflag = 1
+														 AND df.procedureid NOT IN (61, 28)
+														LEFT JOIN tp_mst_defect mdf
+														  ON df.defectid = mdf.defectid
+														LEFT JOIN tp_pc_classesdetail cls
+														  ON cls.classessettingid = pd.classessettingid
+														LEFT JOIN tp_hr_staff stf
+														  ON stf.staffid = cls.staffid
+														LEFT JOIN tp_mst_jobs jobs
+														  ON jobs.jobsid = stf.jobs) pd 
+											  )
 											SELECT * FROM(
 												 SELECT
 											GROUPING_ID(基础数据.工号,基础数据.姓名,基础数据.产品名称,基础数据.产品规格,基础数据.釉色,基础数据.商标) AS GID,
@@ -129,14 +176,14 @@ public class rpt : IHttpHandler, IReadOnlySessionState
 											TO_CHAR(基础数据.产品规格)产品规格,
 											TO_CHAR(基础数据.釉色)釉色,
 											TO_CHAR(基础数据.商标)商标,
-											TO_CHAR(COUNT(DISTINCT 出窑条码)) 出窑量,
-											TO_CHAR(COUNT(DISTINCT 基础数据.出窑条码) - COUNT(DISTINCT CASE WHEN GOODSLEVELTYPEID NOT IN (4)  AND 基础数据.PROCEDUREID IN (5,36,52) AND 基础数据.缺陷编码 IN ( '01', '02', '03', '04', '05', '06', '07', '08', '09', '10','28', '34', '35') THEN 基础数据.出窑条码 ELSE NULL END )) 优级品量,
-                      DECODE(NVL((COUNT( DISTINCT 基础数据.出窑条码 ) - COUNT(DISTINCT CASE WHEN GOODSLEVELTYPEID NOT IN (4)  AND 基础数据.PROCEDUREID IN (5,36,52) AND 基础数据.缺陷编码 IN ( '01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '28', '34', '35') THEN 基础数据.出窑条码 ELSE NULL END)),0),0,'0%',
-	TO_CHAR((NVL((COUNT(DISTINCT 基础数据.出窑条码) - COUNT(DISTINCT CASE WHEN GOODSLEVELTYPEID NOT IN (4)  AND 基础数据.PROCEDUREID IN (5,36,52) AND 基础数据.缺陷编码 IN ( '01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '28', '34', '35') THEN 基础数据.出窑条码 ELSE NULL END ) ) ,0 ) / 
-	DECODE(NVL( COUNT( DISTINCT 基础数据.出窑条码 ), 1 ),0,1,NVL( COUNT( DISTINCT 基础数据.出窑条码 ), 1 ) ) ) * 100,'fm99990.00' ) || '%' ) AS 优级品率,
+											TO_CHAR(COUNT(DISTINCT productiondataid)) 出窑量,
+											TO_CHAR(COUNT(DISTINCT 基础数据.productiondataid) - COUNT(DISTINCT CASE WHEN GOODSLEVELTYPEID NOT IN (4)  AND 基础数据.PROCEDUREID IN (5,36,52) AND 基础数据.缺陷编码 IN ( '01', '02', '03', '04', '05', '06', '07', '08', '09', '10','28', '34', '35') THEN 基础数据.productiondataid ELSE NULL END )) 优级品量,
+                      DECODE(NVL((COUNT( DISTINCT 基础数据.productiondataid ) - COUNT(DISTINCT CASE WHEN GOODSLEVELTYPEID NOT IN (4)  AND 基础数据.PROCEDUREID IN (5,36,52) AND 基础数据.缺陷编码 IN ( '01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '28', '34', '35') THEN 基础数据.productiondataid ELSE NULL END)),0),0,'0%',
+	TO_CHAR((NVL((COUNT(DISTINCT 基础数据.productiondataid) - COUNT(DISTINCT CASE WHEN GOODSLEVELTYPEID NOT IN (4)  AND 基础数据.PROCEDUREID IN (5,36,52) AND 基础数据.缺陷编码 IN ( '01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '28', '34', '35') THEN 基础数据.productiondataid ELSE NULL END ) ) ,0 ) / 
+	DECODE(NVL( COUNT( DISTINCT 基础数据.productiondataid ), 1 ),0,1,NVL( COUNT( DISTINCT 基础数据.productiondataid ), 1 ) ) ) * 100,'fm99990.00' ) || '%' ) AS 优级品率,
                                         
-											TO_CHAR(COUNT( DISTINCT  CASE WHEN 基础数据.PROCEDUREID IN (5,36,52) AND 基础数据.缺陷编码 IN ( '01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '28', '34', '35') THEN to_char(基础数据.缺陷条码||基础数据.缺陷编码 ) ELSE NULL END )) 缺陷量,
-											TO_CHAR( (COUNT( DISTINCT  CASE WHEN 基础数据.PROCEDUREID IN (5,36,52) AND 基础数据.缺陷编码 IN ( '01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '28', '34', '35') THEN to_char(基础数据.缺陷条码||基础数据.缺陷编码 ) ELSE NULL END )/COUNT(DISTINCT 出窑条码) * 100), 'fm99990.00') || '%' 缺陷率,
+											TO_CHAR(COUNT( DISTINCT  CASE WHEN 基础数据.PROCEDUREID IN (5,36,52) AND 基础数据.缺陷编码 IN ( '01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '28', '34', '35') THEN to_char(productiondataid||基础数据.缺陷条码||基础数据.缺陷编码 ) ELSE NULL END )) 缺陷量,
+											TO_CHAR( (COUNT( DISTINCT  CASE WHEN 基础数据.PROCEDUREID IN (5,36,52) AND 基础数据.缺陷编码 IN ( '01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '28', '34', '35') THEN to_char(productiondataid||基础数据.缺陷条码||基础数据.缺陷编码 ) ELSE NULL END )/COUNT(DISTINCT productiondataid) * 100), 'fm99990.00') || '%' 缺陷率,
 											{DEFECT}
 											FROM 基础数据
 										

+ 131 - 90
wwwroot/mes/rpt/rpt214/rpt.ashx

@@ -14,39 +14,39 @@ using DK.XuWei.WebMes;
 
 public class rpt : IHttpHandler, IReadOnlySessionState
 {
-	public void ProcessRequest(HttpContext context)
-	{
-		context.Response.ContentType = "text/plain";
+    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(@"	
+        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,			 MDF.DEFECTID,
 	                            'CASE WHEN GROUPING_ID(基础数据.工号,基础数据.姓名,基础数据.产品名称,基础数据.产品规格,基础数据.釉色,基础数据.商标)=63 
-															THEN  	TO_CHAR(( COUNT( DISTINCT  CASE WHEN  缺陷ID IS NOT NULL AND 基础数据.缺陷编码 = '''||MDF.DEFECTCODE||''' THEN to_char(缺陷条码||基础数据.缺陷ID ) ELSE NULL END ) / COUNT(DISTINCT 出窑条码) * 100 ), ''fm99990.00'' ) || ''%''
+															THEN  	TO_CHAR(( COUNT( DISTINCT  CASE WHEN  缺陷ID IS NOT NULL AND 基础数据.缺陷编码 = '''||MDF.DEFECTCODE||''' THEN to_char(productiondataid || 缺陷条码||基础数据.缺陷ID ) ELSE NULL END ) / COUNT(DISTINCT productiondataid) * 100 ), ''fm99990.00'' ) || ''%''
 	                              ELSE
-                                    TO_CHAR( COUNT( DISTINCT  CASE WHEN  缺陷ID IS NOT NULL AND 基础数据.缺陷编码 = '''||MDF.DEFECTCODE||''' THEN to_char(缺陷条码||基础数据.缺陷ID ) ELSE NULL END ) ) END' AS DEFECTCODE,
+                                    TO_CHAR( COUNT( DISTINCT  CASE WHEN  缺陷ID IS NOT NULL AND 基础数据.缺陷编码 = '''||MDF.DEFECTCODE||''' THEN to_char(productiondataid ||缺陷条码||基础数据.缺陷ID ) 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','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();
-				}
+                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
+                string sumdefect = "";
+                DataTable dts = conn.ExecuteDatatable(@"SELECT
 	                           DISTINCT MDF.DEFECTCODE AS DC,			 MDF.DEFECTID,
-	                            'TO_CHAR( COUNT( DISTINCT  CASE WHEN  缺陷ID IS NOT NULL AND 基础数据.缺陷编码 = '''||MDF.DEFECTCODE||''' THEN to_char(缺陷条码||基础数据.缺陷ID ) ELSE NULL END ) )' AS DEFECTCODE,
+	                            'TO_CHAR( COUNT( DISTINCT  CASE WHEN  缺陷ID IS NOT NULL AND 基础数据.缺陷编码 = '''||MDF.DEFECTCODE||''' THEN to_char(productiondataid ||缺陷条码||基础数据.缺陷ID ) 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','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");
@@ -55,7 +55,7 @@ public class rpt : IHttpHandler, IReadOnlySessionState
                     sumdefect += dts.Rows[i]["DEFECTCODE"].ToString()+" "+dts.Rows[i]["DEFECTNAME"].ToString();
                 }
 
-				string sumdefectnames = "";
+                string sumdefectnames = "";
                 DataTable dtnames = conn.ExecuteDatatable(@"SELECT
 														DISTINCT MDF.DEFECTCODE AS DC,	MDF.DEFECTNAME  AS DEFECTCODE,
 	                            MDF.DEFECTNAME ,MDF.DEFECTID
@@ -66,21 +66,17 @@ public class rpt : IHttpHandler, IReadOnlySessionState
                     if (i > 0) sumdefectnames += ",";
                     sumdefectnames += dtnames.Rows[i]["DEFECTCODE"].ToString()+" AS "+dtnames.Rows[i]["DEFECTNAME"].ToString();
                 }
-				string sqlStr = @"WITH 部门 AS (
+                string sqlStr = @"WITH 部门 AS (
                                         SELECT  GROUTINGLINEID,
                                         CASE WHEN HIGHPRESSUREFLAG=1 THEN'高压' else TO_CHAR(SUBSTR(GROUTINGLINECODE, 1, 2)) END AS 部门
                                         FROM  TP_PC_GROUTINGLINE
                                         ),基础数据 AS 
-                                        ( SELECT
-									pd.工号,pd.产品名称,pd.姓名,pd.产品编码,pd.产品规格,pd.釉色,pd.商标,pd.出窑条码,pd.缺陷条码,pd.缺陷ID,DEFECTCODE 缺陷编码,缺陷类别,PROCEDUREID,GOODSLEVELTYPEID
-									FROM(
-									SELECT
-										工号,产品名称,姓名,产品编码,产品规格,釉色,商标,出窑条码,缺陷条码,缺陷ID,DEFECTCODE,GOODSLEVELTYPEID,缺陷类别,PROCEDUREID,
-									row_number() over (partition by 出窑条码 order by GOODSLEVELTYPEID DESC ) as rownums 
+                                        (
+                                        SELECT GROUTINGLINEID,工号,产品名称,姓名,产品编码,产品规格,釉色,商标,出窑条码,缺陷条码,缺陷ID,DEFECTCODE 缺陷编码,GOODSLEVELTYPEID,缺陷类别,PROCEDUREID ,productiondataid  
 										FROM(
-									 SELECT
-											
-                                        	PDC.USERCODE AS 工号,
+									 SELECT distinct
+											GDL.GROUTINGLINEID,
+                                        	PD.USERCODE AS 工号,
                                         	STF.STAFFNAME AS 姓名,
 											GD.GOODSCODE AS 产品编码,
                                         	GD.GOODSNAME AS 产品名称,
@@ -92,36 +88,63 @@ public class rpt : IHttpHandler, IReadOnlySessionState
                                         	DF.DEFECTID 缺陷ID,
 											DF.DEFECTCODE ,
 											MDF.DEFECTTYPEID 缺陷类别,
-											PDC.PROCEDUREID,
-											CASE WHEN PDS.GOODSLEVELTYPEID < PD.GOODSLEVELTYPEID  THEN PD.GOODSLEVELTYPEID 
-											WHEN PD.GOODSLEVELTYPEID  < PDS.GOODSLEVELTYPEID THEN PDS.GOODSLEVELTYPEID
-											WHEN PDS.GOODSLEVELTYPEID IS NULL  THEN PD.GOODSLEVELTYPEID
-											WHEN PD.GOODSLEVELTYPEID  = PDS.GOODSLEVELTYPEID THEN PD.GOODSLEVELTYPEID
-											ELSE NULL END GOODSLEVELTYPEID
-                                        	                                        FROM
-                                          	TP_PM_PRODUCTIONDATA PD
-                                        	LEFT JOIN TP_PM_GROUTINGDAILYDETAIL GDL ON GDL.BARCODE = PD.BARCODE
+											PD.PROCEDUREID,
+											nvl(pd61.goodsleveltypeid, pd.goodsleveltypeid) GOODSLEVELTYPEID
+                                             ,nvl(pd61.productiondataid, pd.productiondataid) productiondataid
+                                       FROM
+                                        	(SELECT * FROM (SELECT pd28.groutingdailydetailid
+                                                                ,pd28.goodsid
+                                                                ,pd28.logoid
+                                                                ,pd28.goodsleveltypeid
+                                                                ,pd24.procedureid
+                                                                ,pd28.barcode
+                                                                ,pd28.kilncarbatchno
+                                                                ,pd28.productiondataid
+                                                                ,pd24.classessettingid
+                                                                ,pd24.usercode
+                                                                ,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 -- 5-8重烧烧窑
+                                                              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) --  重烧质量登记里包含   
+                                                             AND pd28.CREATETIME >= @DATEBEGIN@
+                                                             AND pd28.CREATETIME < @DATEEND@                                         
+                                                             -- AND pd28.createtime >= to_date('2025-04-03', 'yyyy-MM-DD')
+                                                             -- AND pd28.createtime < to_date('2025-04-03 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_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
+                                                    -- 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 < pd61.productiondataid)
+                                        	LEFT JOIN TP_PM_GROUTINGDAILYDETAIL GDL ON GDL.groutingdailydetailid = PD.groutingdailydetailid
                                         	LEFT JOIN TP_PC_GROUTINGLINE gl ON gl.GROUTINGLINEID=gdl.GROUTINGLINEID
                                         	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 PD.BARCODE = DF.BARCODE AND DF.PROCEDUREID NOT IN(61,28)   
-											AND DF.DEFECTID IN ( SELECT   DISTINCT  	 MDF.DEFECTID  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') )  AND DF.VALUEFLAG=1
-											LEFT JOIN TP_MST_DEFECT MDF ON DF.DEFECTID = MDF.DEFECTID
-											INNER JOIN TP_PM_PRODUCTIONDATA PDC ON PDC.BARCODE=GDL.BARCODE AND PDC.PROCEDUREID IN (	40,6,31)AND PDC.VALUEFLAG=1
-											LEFT JOIN TP_PC_CLASSESDETAIL CLS ON CLS.CLASSESSETTINGID=PDC.CLASSESSETTINGID
+                                        	LEFT JOIN TP_PM_DEFECT DF ON  df.productiondataid = nvl(pd61.productiondataid, pd.productiondataid) 
+											AND DF.DEFECTCODE IN (SELECT DISTINCT  MDF.DEFECTCODE
+											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') ) AND DF.VALUEFLAG=1  AND DF.PROCEDUREID NOT IN  (61, 28) ";
+                sqlStr += @"					LEFT JOIN TP_MST_DEFECT MDF ON DF.DEFECTID = MDF.DEFECTID 
+											LEFT JOIN TP_PC_CLASSESDETAIL CLS ON CLS.CLASSESSETTINGID=PD.CLASSESSETTINGID
 											LEFT JOIN TP_HR_STAFF STF ON STF.STAFFID=CLS.STAFFID
-											LEFT  JOIN TP_PM_PRODUCTIONDATA pds ON PDS.BARCODE=PD.BARCODE AND PDS.PROCEDUREID=60 AND PDS.VALUEFLAG=1
-                                            WHERE
-                                        	PD.PROCEDUREID IN ( 16)  AND PD.VALUEFLAG = 1
-                                           AND PD.CREATETIME >= @DATEBEGIN@
-                                           AND PD.CREATETIME <= @DATEEND@ 
-										 )) pd
-																 
-							
-									
+											LEFT JOIN TP_MST_JOBS jobs ON jobs.JOBSID=stf.JOBS 
+                                            ) pd 
                                         )
                                         SELECT * FROM(
                                         SELECT
@@ -135,14 +158,27 @@ public class rpt : IHttpHandler, IReadOnlySessionState
                                         TO_CHAR(基础数据.产品规格)产品规格,
                                         TO_CHAR(基础数据.釉色)釉色,
                                         TO_CHAR(基础数据.商标)商标,
-                                        TO_CHAR(COUNT(DISTINCT 出窑条码)) 出窑量,
-										TO_CHAR(COUNT(DISTINCT 基础数据.出窑条码) - COUNT(DISTINCT CASE WHEN GOODSLEVELTYPEID NOT IN (4)  AND  (基础数据.缺陷类别 =1) THEN 基础数据.出窑条码 ELSE NULL END )) 优级品量,
-										DECODE(NVL((COUNT( DISTINCT 基础数据.出窑条码 ) - COUNT(DISTINCT CASE WHEN GOODSLEVELTYPEID NOT IN (4) AND (基础数据.缺陷类别 = 1) THEN 基础数据.出窑条码 ELSE NULL END)),0),0,'0%',
-											TO_CHAR((NVL((COUNT(DISTINCT 基础数据.出窑条码) - COUNT(DISTINCT CASE WHEN GOODSLEVELTYPEID NOT IN (4) AND (基础数据.缺陷类别 = 1 OR 基础数据.缺陷ID = 126) THEN 基础数据.出窑条码 ELSE NULL END ) ) ,0 ) / 
-											DECODE(NVL( COUNT( DISTINCT 基础数据.出窑条码 ), 1 ),0,1,NVL( COUNT( DISTINCT 基础数据.出窑条码 ), 1 ) ) ) * 100,'fm99990.00' ) || '%' ) AS 优级品率,
+                                        TO_CHAR(COUNT(DISTINCT 基础数据.productiondataid)) 出窑量,
+										TO_CHAR(COUNT(DISTINCT 基础数据.productiondataid) - COUNT(DISTINCT CASE WHEN GOODSLEVELTYPEID NOT IN (4)  AND  (基础数据.缺陷类别 =1) THEN 基础数据.productiondataid ELSE NULL END )) 优级品量,
+										DECODE(NVL((COUNT( DISTINCT 基础数据.productiondataid ) - COUNT(DISTINCT CASE WHEN GOODSLEVELTYPEID NOT IN (4) AND (基础数据.缺陷类别 = 1) THEN 基础数据.productiondataid ELSE NULL END)),0),0,'0%',
+											TO_CHAR((NVL((COUNT(DISTINCT 基础数据.productiondataid) - COUNT(DISTINCT CASE WHEN GOODSLEVELTYPEID NOT IN (4) AND (基础数据.缺陷类别 = 1 OR 基础数据.缺陷ID = 126) THEN 基础数据.productiondataid ELSE NULL END ) ) ,0 ) / 
+											DECODE(NVL( COUNT( DISTINCT 基础数据.productiondataid ), 1 ),0,1,NVL( COUNT( DISTINCT 基础数据.productiondataid ), 1 ) ) ) * 100,'fm99990.00' ) || '%' ) AS 优级品率,
 					
-                                        TO_CHAR(COUNT(DISTINCT 缺陷条码||缺陷编码)) 缺陷量,
-                                        TO_CHAR( (COUNT(DISTINCT 缺陷条码)/COUNT(DISTINCT 出窑条码) * 100), 'fm99990.00') || '%' 缺陷率,
+                                        to_char(COUNT(DISTINCT CASE
+                                                     WHEN 缺陷id IS NOT NULL
+                                                          AND 缺陷条码 IS NOT NULL THEN
+                                                      to_char(productiondataid || 缺陷条码 || 缺陷id)
+                                                     ELSE
+                                                      NULL
+                                                 END)) 缺陷量
+                                        ,to_char((COUNT(DISTINCT CASE
+                                              WHEN 缺陷id IS NOT NULL
+                                                   AND 缺陷条码 IS NOT NULL THEN
+                                               to_char(productiondataid || 缺陷条码 || 缺陷id)
+                                              ELSE
+                                               NULL
+                                          END) / COUNT(DISTINCT productiondataid) * 100)
+                                                ,'fm99990.00') || '%' 缺陷率,
                                         {DEFECT}
                                         FROM 基础数据
                                         LEFT JOIN TP_MST_DEFECT MDF ON 基础数据.缺陷ID = MDF.DEFECTID 
@@ -178,32 +214,37 @@ public class rpt : IHttpHandler, IReadOnlySessionState
 
 ".Replace("{DEFECTSUM}",sumdefect).Replace("{DEFECT}", defect);
 
-				//获取查询条件
-				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("GROUTINGLINECODE", context.Request["GROUTINGLINECODE"], DataType.NVarChar));
-				//获取分页参数
-				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"] : "";
+                //获取查询条件
+                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("GROUTINGLINECODE", context.Request["GROUTINGLINECODE"], DataType.NVarChar));
+                //获取分页参数
+                //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);
-			}
-		}
-	}
+                //获取分页数据    
+                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();
+                DataTable d = conn.ExecuteDatatable(sqlStr, sqlPara.ToArray()); 
+                if (d != null && d.Rows.Count > 1) {
+                    d.Columns.Remove("GID");//移除GID列
+                }
+                string jsonStr = new JsonResult(d) { total =  d.Rows.Count }.ToJson();
+                context.Response.Write(jsonStr);
+            }
+        }
+    }
 
-	public bool IsReusable
-	{
-		get
-		{
-			return false;
-		}
-	}
+    public bool IsReusable
+    {
+        get
+        {
+            return false;
+        }
+    }
 }

+ 128 - 64
wwwroot/mes/rpt/rpt215/rpt.ashx

@@ -30,9 +30,9 @@ public class rpt : IHttpHandler, IReadOnlySessionState
 				DataTable dt = conn.ExecuteDatatable(@"	SELECT
 												 DISTINCT MDF.DEFECTCODE AS DC,			 MDF.DEFECTID,
 	                            'CASE WHEN GROUPING_ID(基础数据.工号,基础数据.姓名,基础数据.产品名称,基础数据.产品规格,基础数据.釉色,基础数据.商标)=126 
-															THEN  	TO_CHAR(( COUNT( DISTINCT  CASE WHEN  缺陷ID IS NOT NULL AND 基础数据.缺陷编码 = '''||MDF.DEFECTCODE||''' THEN to_char(缺陷条码||基础数据.缺陷ID ) ELSE NULL END ) / COUNT(DISTINCT 出窑条码) * 100 ), ''fm99990.00'' ) || ''%''
+															THEN  	TO_CHAR(( COUNT( DISTINCT  CASE WHEN  缺陷ID IS NOT NULL AND 基础数据.缺陷编码 = '''||MDF.DEFECTCODE||''' THEN to_char(productiondataid||缺陷条码||基础数据.缺陷ID ) ELSE NULL END ) / COUNT(DISTINCT productiondataid) * 100 ), ''fm99990.00'' ) || ''%''
 	                              ELSE
-                                    TO_CHAR( COUNT( DISTINCT  CASE WHEN  缺陷ID IS NOT NULL AND 基础数据.缺陷编码 = '''||MDF.DEFECTCODE||''' THEN to_char(缺陷条码||基础数据.缺陷ID ) ELSE NULL END ) ) END' AS DEFECTCODE,
+                                    TO_CHAR( COUNT( DISTINCT  CASE WHEN  缺陷ID IS NOT NULL AND 基础数据.缺陷编码 = '''||MDF.DEFECTCODE||''' THEN to_char(productiondataid||缺陷条码||基础数据.缺陷ID ) ELSE NULL END ) ) END' AS DEFECTCODE,
 	                            MDF.DEFECTNAME 
 															FROM TP_MST_DEFECT MDF
 															where DEFECTTYPEID=4  ORDER BY  MDF.DEFECTID" );
@@ -44,7 +44,7 @@ public class rpt : IHttpHandler, IReadOnlySessionState
 					string sumdefect = "";
               DataTable dts = conn.ExecuteDatatable(@"	SELECT
 	                           DISTINCT MDF.DEFECTCODE AS DC,			 MDF.DEFECTID,
-	                            'TO_CHAR(( COUNT( DISTINCT  CASE WHEN  缺陷ID IS NOT NULL AND 基础数据.缺陷编码 = '''||MDF.DEFECTCODE||''' THEN to_char(缺陷条码||基础数据.缺陷ID ) ELSE NULL END ) / COUNT(DISTINCT 出窑条码) * 100 ), ''fm99990.00'' ) || ''%''' AS DEFECTCODE,
+	                            'TO_CHAR(( COUNT( DISTINCT  CASE WHEN  缺陷ID IS NOT NULL AND 基础数据.缺陷编码 = '''||MDF.DEFECTCODE||''' THEN to_char(productiondataid||缺陷条码||基础数据.缺陷ID ) ELSE NULL END ) / COUNT(DISTINCT productiondataid) * 100 ), ''fm99990.00'' ) || ''%''' AS DEFECTCODE,
 	                            MDF.DEFECTNAME 
                            	FROM TP_MST_DEFECT MDF
 															where DEFECTTYPEID=4  ORDER BY  MDF.DEFECTID");
@@ -65,60 +65,124 @@ public class rpt : IHttpHandler, IReadOnlySessionState
                 }
 
 				string sqlStr = @"WITH 基础数据 AS 
-                                        (
-                                      
-                                          SELECT
-									pd.GROUTINGLINEID,pd.工号,pd.产品名称,pd.姓名,pd.产品编码,pd.产品规格,pd.釉色,pd.商标,pd.出窑条码,pd.缺陷条码,pd.缺陷ID,DEFECTCODE 缺陷编码,缺陷类别,工序 AS 工序,GOODSLEVELTYPEID
-									FROM(
-									SELECT
-										GROUTINGLINEID,工号,产品名称,姓名,产品编码,产品规格,釉色,商标,出窑条码,缺陷条码,缺陷ID,DEFECTCODE,GOODSLEVELTYPEID,缺陷类别,工序,
-									row_number() over (partition by 出窑条码 order by GOODSLEVELTYPEID DESC ) as rownums 
-										FROM(
-									 SELECT
-											GDL.GROUTINGLINEID,
-                                        	case when PDC.PROCEDUREID=41  THEN  'Y26 ' else TO_CHAR(STF.STAFFCODE) end  AS 工号,
-                                        	case when PDC.PROCEDUREID=41  THEN  'Y26施釉 ' else TO_CHAR(STF.STAFFNAME) end   AS 姓名,
-											GD.GOODSCODE AS 产品编码,
-                                        	GD.GOODSNAME AS 产品名称,
-                                        	GD.GOODSSPECIFICATION AS 产品规格,
-                                        	MD.DICTIONARYVALUE AS 釉色,
-                                        	LG.LOGONAME AS 商标,
-                                        	PD.BARCODE 出窑条码,
-                                        	DF.BARCODE 缺陷条码,
-                                        	DF.DEFECTID 缺陷ID,
-											DF.DEFECTCODE ,
-											MDF.DEFECTTYPEID 缺陷类别,
-											CASE WHEN  PDC.PROCEDUREID=10 THEN  '人工' 
-												WHEN  PDC.PROCEDUREID=37 THEN  '机械手单柜' 
-												WHEN  PDC.PROCEDUREID=41 THEN  '1拖4机械手'  ELSE NULL END    工序,
-											CASE WHEN PDS.GOODSLEVELTYPEID < PD.GOODSLEVELTYPEID  THEN PD.GOODSLEVELTYPEID 
-											WHEN PD.GOODSLEVELTYPEID  < PDS.GOODSLEVELTYPEID THEN PDS.GOODSLEVELTYPEID
-											WHEN PDS.GOODSLEVELTYPEID IS NULL  THEN PD.GOODSLEVELTYPEID
-											WHEN PD.GOODSLEVELTYPEID  = PDS.GOODSLEVELTYPEID THEN PD.GOODSLEVELTYPEID
-											ELSE NULL END GOODSLEVELTYPEID
-                                        	                                        FROM
-                                        	TP_PM_PRODUCTIONDATA PD
-                                        	LEFT JOIN TP_PM_GROUTINGDAILYDETAIL GDL ON GDL.BARCODE = PD.BARCODE
-                                        	LEFT JOIN TP_PC_GROUTINGLINE gl ON gl.GROUTINGLINEID=gdl.GROUTINGLINEID
-                                        	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 PD.BARCODE = DF.BARCODE AND DF.PROCEDUREID NOT IN(61,28)   AND DF.DEFECTID IN (
-																										SELECT  DISTINCT 		 MDF.DEFECTID  FROM TP_MST_DEFECT MDF where DEFECTTYPEID=4 )  AND DF.VALUEFLAG=1
-											LEFT JOIN TP_MST_DEFECT MDF ON DF.DEFECTID = MDF.DEFECTID											
-											INNER JOIN TP_PM_PRODUCTIONDATA PDC ON PDC.BARCODE=GDL.BARCODE AND PDC.PROCEDUREID IN (	10,37,41) AND PDC.VALUEFLAG=1
-											LEFT JOIN TP_PC_CLASSESDETAIL CLS ON CLS.CLASSESSETTINGID=PDC.CLASSESSETTINGID
-											LEFT JOIN TP_HR_STAFF STF ON STF.STAFFID=CLS.STAFFID
-											LEFT JOIN TP_MST_JOBS jobs ON jobs.JOBSID=stf.JOBS 
-											LEFT  JOIN TP_PM_PRODUCTIONDATA pds ON PDS.BARCODE=PD.BARCODE AND PDS.PROCEDUREID=60 AND PDS.VALUEFLAG=1
-                                            WHERE
-                                        	PD.PROCEDUREID IN ( 16)  AND PD.VALUEFLAG = 1 and CLS.UJOBSID in(8,20)
-                                           AND PD.CREATETIME >= @DATEBEGIN@
-                                           AND PD.CREATETIME < @DATEEND@  
-										 )) pd
-																 
-                                        )
+                                  (SELECT groutinglineid
+                                        ,工号
+                                        ,产品名称
+                                        ,姓名
+                                        ,产品编码
+                                        ,产品规格
+                                        ,釉色
+                                        ,商标
+                                        ,出窑条码
+                                        ,缺陷条码
+                                        ,缺陷id
+                                        ,defectcode 缺陷编码
+                                        ,goodsleveltypeid
+                                        ,缺陷类别
+                                        ,工序
+                                        ,productiondataid
+                                    FROM (SELECT DISTINCT gdl.groutinglineid
+                                                           ,CASE
+                                                              WHEN pd.procedureid = 41 THEN
+                                                               'Y26 '
+                                                              ELSE
+                                                               to_char(stf.staffcode)
+                                                          END AS 工号
+                                                         ,CASE
+                                                              WHEN pd.procedureid = 41 THEN
+                                                               'Y26施釉 '
+                                                              ELSE
+                                                               to_char(stf.staffname)
+                                                          END AS 姓名                         
+                                                         ,gd.goodscode AS 产品编码
+                                                         ,gd.goodsname AS 产品名称
+                                                         ,gd.goodsspecification AS 产品规格
+                                                         ,md.dictionaryvalue AS 釉色
+                                                         ,lg.logoname AS 商标
+                                                         ,pd.barcode 出窑条码
+                                                         ,df.barcode 缺陷条码
+                                                         ,df.defectid 缺陷id
+                                                         ,df.defectcode
+                                                         ,mdf.defecttypeid 缺陷类别
+                                                          ,CASE
+                                                              WHEN pd.procedureid = 10 THEN
+                                                               '人工'
+                                                              WHEN pd.procedureid = 37 THEN
+                                                               '机械手单柜'
+                                                              WHEN pd.procedureid = 41 THEN
+                                                               '1拖4机械手'
+                                                              ELSE
+                                                               NULL
+                                                          END 工序
+                                                         ,nvl(pd61.goodsleveltypeid, pd.goodsleveltypeid) goodsleveltypeid
+                                                         ,nvl(pd61.productiondataid, pd.productiondataid) productiondataid
+                                            FROM (SELECT *
+                                                    FROM (SELECT pd28.groutingdailydetailid
+                                                                ,pd28.goodsid
+                                                                ,pd28.logoid
+                                                                ,pd28.goodsleveltypeid
+                                                                ,pd24.procedureid
+                                                                ,pd28.barcode
+                                                                ,pd28.kilncarbatchno
+                                                                ,pd28.productiondataid
+                                                                ,pd24.classessettingid
+                                                                ,pd24.usercode
+                                                                ,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 -- 5-8重烧烧窑
+                                                              ON pd24.groutingdailydetailid = pd28.groutingdailydetailid
+                                                           WHERE pd28.procedureid = 16
+                                                             AND pd28.valueflag = 1
+                                                             AND pd24.valueflag = 1
+                                                             AND pd24.procedureid IN (24, 10, 37, 41) --  质量登记里包含                                 
+                                                             AND pd28.createtime >= @DATEBEGIN@ --to_date('2025-06-02', 'yyyy-MM-DD')
+                                                             AND pd28.createtime <  @DATEEND@
+                                                                 -- to_date('2025-06-02 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_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
+                                                -- 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 < pd61.productiondataid)
+                                            LEFT JOIN tp_pm_groutingdailydetail gdl
+                                              ON gdl.groutingdailydetailid = pd.groutingdailydetailid
+                                            LEFT JOIN tp_pc_groutingline gl
+                                              ON gl.groutinglineid = gdl.groutinglineid
+                                            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 = nvl(pd61.productiondataid, pd.productiondataid)
+                                             AND df.defectcode IN (SELECT DISTINCT mdf.defectcode
+                                                                     FROM tp_mst_defect mdf
+                                                                    WHERE defecttypeid = 4)
+                                             AND df.valueflag = 1
+                                             AND df.procedureid NOT IN (61, 28)
+                                            LEFT JOIN tp_mst_defect mdf
+                                              ON df.defectid = mdf.defectid
+                                            LEFT JOIN tp_pc_classesdetail cls
+                                              ON cls.classessettingid = pd.classessettingid
+                                            LEFT JOIN tp_hr_staff stf
+                                              ON stf.staffid = cls.staffid
+                                            LEFT JOIN tp_mst_jobs jobs
+                                              ON jobs.jobsid = stf.jobs) pd  
+                                          )
                                         SELECT * FROM(
                                         SELECT
                                         GROUPING_ID(基础数据.工号,基础数据.姓名,基础数据.产品名称,基础数据.产品规格,基础数据.釉色,基础数据.商标,基础数据.工序) AS GID,
@@ -133,14 +197,14 @@ public class rpt : IHttpHandler, IReadOnlySessionState
                                         TO_CHAR(基础数据.产品规格)产品规格,
                                         TO_CHAR(基础数据.釉色)釉色,
                                         TO_CHAR(基础数据.商标)商标,
-                                        TO_CHAR(COUNT(DISTINCT 出窑条码)) 出窑量,
-										TO_CHAR(COUNT(DISTINCT 基础数据.出窑条码) - COUNT(DISTINCT CASE WHEN GOODSLEVELTYPEID NOT IN (4)  AND  基础数据.缺陷类别 =4 THEN 基础数据.出窑条码 ELSE NULL END )) 优级品量,
-                      DECODE(NVL((COUNT( DISTINCT 基础数据.出窑条码 ) - COUNT(DISTINCT CASE WHEN GOODSLEVELTYPEID NOT IN (4) AND 基础数据.缺陷类别 =4  THEN 基础数据.出窑条码 ELSE NULL END)),0),0,'0%',
-	TO_CHAR((NVL((COUNT(DISTINCT 基础数据.出窑条码) - COUNT(DISTINCT CASE WHEN GOODSLEVELTYPEID NOT IN (4) AND 基础数据.缺陷类别 =4  THEN 基础数据.出窑条码 ELSE NULL END ) ) ,0 ) / 
-	DECODE(NVL( COUNT( DISTINCT 基础数据.出窑条码 ), 1 ),0,1,NVL( COUNT( DISTINCT 基础数据.出窑条码 ), 1 ) ) ) * 100,'fm99990.00' ) || '%' ) AS 优级品率,
+                                        TO_CHAR(COUNT(DISTINCT productiondataid)) 出窑量,
+										TO_CHAR(COUNT(DISTINCT 基础数据.productiondataid) - COUNT(DISTINCT CASE WHEN GOODSLEVELTYPEID NOT IN (4)  AND  基础数据.缺陷类别 =4 THEN 基础数据.productiondataid ELSE NULL END )) 优级品量,
+                      DECODE(NVL((COUNT( DISTINCT 基础数据.productiondataid ) - COUNT(DISTINCT CASE WHEN GOODSLEVELTYPEID NOT IN (4) AND 基础数据.缺陷类别 =4  THEN 基础数据.productiondataid ELSE NULL END)),0),0,'0%',
+	TO_CHAR((NVL((COUNT(DISTINCT 基础数据.productiondataid) - COUNT(DISTINCT CASE WHEN GOODSLEVELTYPEID NOT IN (4) AND 基础数据.缺陷类别 =4  THEN 基础数据.productiondataid ELSE NULL END ) ) ,0 ) / 
+	DECODE(NVL( COUNT( DISTINCT 基础数据.productiondataid ), 1 ),0,1,NVL( COUNT( DISTINCT 基础数据.productiondataid ), 1 ) ) ) * 100,'fm99990.00' ) || '%' ) AS 优级品率,
 					
-										TO_CHAR(COUNT( DISTINCT  CASE WHEN  缺陷ID IS NOT NULL AND 缺陷条码 IS NOT NULL  THEN to_char(缺陷条码||缺陷ID ) ELSE NULL END )) 缺陷量,
-                                        TO_CHAR( (COUNT( DISTINCT  CASE WHEN  缺陷ID IS NOT NULL AND 缺陷条码 IS NOT NULL  THEN to_char(缺陷条码||缺陷ID ) ELSE NULL END ) /COUNT(DISTINCT 出窑条码) * 100), 'fm99990.00') || '%' 缺陷率,
+										TO_CHAR(COUNT( DISTINCT  CASE WHEN  缺陷ID IS NOT NULL AND 缺陷条码 IS NOT NULL  THEN to_char(productiondataid||缺陷条码||缺陷ID ) ELSE NULL END )) 缺陷量,
+                                        TO_CHAR( (COUNT( DISTINCT  CASE WHEN  缺陷ID IS NOT NULL AND 缺陷条码 IS NOT NULL  THEN to_char(productiondataid||缺陷条码||缺陷ID ) ELSE NULL END ) /COUNT(DISTINCT productiondataid) * 100), 'fm99990.00') || '%' 缺陷率,
                                         {DEFECT}
                                         FROM 基础数据