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