|
|
@@ -0,0 +1,258 @@
|
|
|
+<%@ 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 procedure = context.Request["procedureMaster"];
|
|
|
+ string sqlStr = "";
|
|
|
+ conn.BeginTransaction();
|
|
|
+ string sqltmp = "";
|
|
|
+ sqltmp = @"
|
|
|
+-- 优化第2部分的PIVOT查询
|
|
|
+-- 1、当前条码行转列
|
|
|
+-- 2、排除 前面有缺陷
|
|
|
+-- -- 开始日期前 不能存在重烧功能检测
|
|
|
+
|
|
|
+ INSERT INTO tmp_rpt_grouting_deduction
|
|
|
+ (groutingdailydetailid
|
|
|
+ ,productiondataid
|
|
|
+ ,barcode
|
|
|
+ ,neiloubuhege
|
|
|
+ ,wailoubuhege
|
|
|
+ ,shishuibuhege
|
|
|
+ ,koujianshu)
|
|
|
+ SELECT pd.*
|
|
|
+ FROM (SELECT groutingdailydetailid
|
|
|
+ ,productiondataid
|
|
|
+ ,barcode
|
|
|
+ ,SUM(CASE
|
|
|
+ WHEN defectid = 44 THEN
|
|
|
+ 1
|
|
|
+ END) AS neiloubuhege
|
|
|
+ ,SUM(CASE
|
|
|
+ WHEN defectid = 45 THEN
|
|
|
+ 1
|
|
|
+ END) AS wailoubuhege
|
|
|
+ ,SUM(CASE
|
|
|
+ WHEN defectid = 46 THEN
|
|
|
+ 1
|
|
|
+ END) AS shishuibuhege
|
|
|
+ ,0 AS koujianshu -- 默认值
|
|
|
+ FROM (SELECT pd28.groutingdailydetailid
|
|
|
+ ,pd28.productiondataid
|
|
|
+ ,pd28.barcode
|
|
|
+ ,df.defectid
|
|
|
+ ,row_number() over(PARTITION BY pd28.groutingdailydetailid ORDER BY pd28.productiondataid) AS rn
|
|
|
+ FROM tp_pm_productiondata pd28
|
|
|
+ INNER JOIN tp_pm_defect df
|
|
|
+ ON df.productiondataid = pd28.productiondataid
|
|
|
+ WHERE pd28.procedureid = 61
|
|
|
+ AND df.valueflag = 1
|
|
|
+ AND pd28.valueflag = 1
|
|
|
+ AND df.defectid IN (44, 45, 46)
|
|
|
+
|
|
|
+ AND pd28.createtime BETWEEN
|
|
|
+ to_date('" + dateBegin.ToString("yyyy-MM-dd HH:mm:ss") + @"','yyyy-mm-dd hh24:mi:ss') AND
|
|
|
+ to_date('" + dateEnd.ToString("yyyy-MM-dd HH:mm:ss") + @"','yyyy-mm-dd hh24:mi:ss') )
|
|
|
+ WHERE rn = 1
|
|
|
+ GROUP BY groutingdailydetailid
|
|
|
+ ,productiondataid
|
|
|
+ ,barcode) pd
|
|
|
+ WHERE NOT EXISTS (
|
|
|
+ -- 排除前面有缺陷的逻辑保持不变
|
|
|
+ SELECT 1
|
|
|
+ FROM tp_pm_productiondata pdnot
|
|
|
+ INNER JOIN tp_pm_defect df
|
|
|
+ ON df.productiondataid = pdnot.productiondataid
|
|
|
+ WHERE pdnot.procedureid = 61
|
|
|
+ AND df.valueflag = 1
|
|
|
+ AND pdnot.valueflag = 1
|
|
|
+ AND df.defectid IN (44, 45, 46)
|
|
|
+ AND pdnot.groutingdailydetailid = pd.groutingdailydetailid
|
|
|
+ AND pdnot.productiondataid < pd.productiondataid) ";
|
|
|
+ int count = conn.ExecuteNonQuery(sqltmp);
|
|
|
+
|
|
|
+ sqltmp = @"
|
|
|
+-- 3、更新下本烧是否有成型缺陷
|
|
|
+-- 4、根据3的标识,计算【合格品扣减数】
|
|
|
+ UPDATE tmp_rpt_grouting_deduction d
|
|
|
+ SET d.koujianshu = 1
|
|
|
+ WHERE NOT EXISTS (SELECT 1
|
|
|
+ FROM tp_pm_productiondata pdnot
|
|
|
+ INNER JOIN tp_pm_defect df
|
|
|
+ ON df.productiondataid = pdnot.productiondataid
|
|
|
+ INNER JOIN tp_mst_defect f
|
|
|
+ ON df.defectid = f.defectid
|
|
|
+ WHERE pdnot.procedureid IN (16, 60) -- 本烧
|
|
|
+ AND f.defecttypeid = 1 -- 成型缺陷
|
|
|
+ AND df.valueflag = 1
|
|
|
+ AND f.valueflag = 1
|
|
|
+ AND pdnot.groutingdailydetailid = d.groutingdailydetailid
|
|
|
+ AND pdnot.productiondataid < d.productiondataid)
|
|
|
+ ";
|
|
|
+
|
|
|
+ count = conn.ExecuteNonQuery(sqltmp);
|
|
|
+
|
|
|
+ sqlStr = @"
|
|
|
+ -- 使用更清晰的别名和减少嵌套
|
|
|
+ WITH base_data AS
|
|
|
+ (SELECT CASE
|
|
|
+ WHEN t.procedureid = 24 THEN
|
|
|
+ '回烧'
|
|
|
+ ELSE
|
|
|
+ '冷补'
|
|
|
+ END AS 统计方式
|
|
|
+ ,gdd.goodsname AS 产品名称
|
|
|
+ ,gdd.goodscode AS 产品编码
|
|
|
+ ,gdd.usercode AS 工号
|
|
|
+ ,stf.staffname AS 姓名
|
|
|
+ ,good.goodsspecification AS 产品规格
|
|
|
+ ,gtp.goodstypename AS 产品类别名称
|
|
|
+ ,CASE
|
|
|
+ WHEN substr(gtp.goodstypecode, 1, 6) = '001001' THEN
|
|
|
+ '大件'
|
|
|
+ ELSE
|
|
|
+ '小件'
|
|
|
+ END AS 产品类别
|
|
|
+ ,tp_mst_datadictionary.dictionaryvalue AS 釉色
|
|
|
+ ,logo.logoname AS 商标
|
|
|
+ ,t.neiloubuhege
|
|
|
+ ,t.wailoubuhege
|
|
|
+ ,t.shishuibuhege
|
|
|
+ ,t.koujianshu
|
|
|
+ FROM (SELECT pd.*
|
|
|
+ ,pd24.procedureid
|
|
|
+ ,row_number() over(PARTITION BY pd.productiondataid ORDER BY pd24.productiondataid DESC) AS rownums
|
|
|
+ FROM tmp_rpt_grouting_deduction pd
|
|
|
+ INNER JOIN tp_pm_productiondata pd24
|
|
|
+ ON pd24.groutingdailydetailid = pd.groutingdailydetailid
|
|
|
+ WHERE pd24.valueflag = 1
|
|
|
+ AND pd24.procedureid IN (24, 42) -- 重烧里包含 重烧修补24 / 冷补42
|
|
|
+ AND pd24.productiondataid < pd.productiondataid) t
|
|
|
+ INNER JOIN tp_pm_groutingdailydetail gdd
|
|
|
+ ON t.groutingdailydetailid = gdd.groutingdailydetailid
|
|
|
+ LEFT JOIN tp_mst_goods good
|
|
|
+ ON good.goodsid = gdd.goodsid
|
|
|
+ LEFT JOIN tp_mst_goodstype gtp
|
|
|
+ ON good.goodstypeid = gtp.goodstypeid
|
|
|
+ LEFT JOIN tp_mst_logo logo
|
|
|
+ ON logo.logoid = gdd.logoid
|
|
|
+ LEFT JOIN tp_mst_datadictionary
|
|
|
+ ON tp_mst_datadictionary.dictionaryid = gdd.glazetypeid
|
|
|
+ LEFT JOIN tp_pc_classesdetail cls
|
|
|
+ ON cls.classessettingid = gdd.classessettingid
|
|
|
+ LEFT JOIN tp_hr_staff stf
|
|
|
+ ON stf.staffid = cls.staffid
|
|
|
+ WHERE rownums = 1),
|
|
|
+ aggregated_data AS
|
|
|
+ (SELECT 统计方式
|
|
|
+ ,产品编码
|
|
|
+ ,产品名称
|
|
|
+ ,产品规格
|
|
|
+ ,工号
|
|
|
+ ,姓名
|
|
|
+ ,产品类别名称
|
|
|
+ ,产品类别
|
|
|
+ ,釉色
|
|
|
+ ,商标
|
|
|
+ ,SUM(neiloubuhege) AS 内漏不合格
|
|
|
+ ,SUM(wailoubuhege) AS 外漏不合格
|
|
|
+ ,SUM(shishuibuhege) AS 试水不合格
|
|
|
+ ,SUM(koujianshu) AS 合格品扣减数
|
|
|
+ FROM base_data
|
|
|
+ WHERE 统计方式 = '" + procedure + @"'
|
|
|
+ GROUP BY 统计方式
|
|
|
+ ,产品编码
|
|
|
+ ,产品名称
|
|
|
+ ,产品规格
|
|
|
+ ,工号
|
|
|
+ ,姓名
|
|
|
+ ,产品类别名称
|
|
|
+ ,产品类别
|
|
|
+ ,釉色
|
|
|
+ ,商标)
|
|
|
+ -- 最终查询
|
|
|
+ SELECT CASE
|
|
|
+ WHEN grouping_id(工号, 姓名, 产品名称, 产品规格, 产品类别名称, 产品类别, 釉色, 商标) = 255 THEN
|
|
|
+ '总计'
|
|
|
+ WHEN grouping_id(工号, 姓名, 产品名称, 产品规格, 产品类别名称, 产品类别, 釉色, 商标) = 63 THEN
|
|
|
+ '合计'
|
|
|
+ WHEN grouping_id(工号, 姓名, 产品名称, 产品规格, 产品类别名称, 产品类别, 釉色, 商标) = 59 THEN
|
|
|
+ 产品类别 || '合计'
|
|
|
+ WHEN grouping_id(工号, 姓名, 产品名称, 产品规格, 产品类别名称, 产品类别, 釉色, 商标) = 55 THEN
|
|
|
+ '小计'
|
|
|
+ ELSE
|
|
|
+ 统计方式
|
|
|
+ END AS 统计方式
|
|
|
+ ,工号
|
|
|
+ ,姓名
|
|
|
+ ,产品编码
|
|
|
+ ,产品名称
|
|
|
+ ,产品规格
|
|
|
+ ,产品类别名称
|
|
|
+ ,产品类别
|
|
|
+ ,釉色
|
|
|
+ ,商标
|
|
|
+ ,SUM(合格品扣减数) as 合格品扣减数
|
|
|
+ ,SUM(nvl(内漏不合格,0)) as 内漏不合格
|
|
|
+ ,SUM(nvl(外漏不合格,0)) as 外漏不合格
|
|
|
+ ,SUM(nvl(试水不合格,0)) as 试水不合格
|
|
|
+
|
|
|
+ FROM aggregated_data
|
|
|
+ GROUP BY GROUPING SETS((统计方式, 工号, 姓名, 产品编码, 产品名称, 产品规格, 产品类别名称, 产品类别, 釉色, 商标),(工号, 姓名, 产品类别名称),(工号, 姓名, 产品类别),(工号, 姓名),())
|
|
|
+ ORDER BY 工号
|
|
|
+ ,产品类别名称
|
|
|
+ ,产品类别
|
|
|
+ ,产品编码 ";
|
|
|
+
|
|
|
+ //获取查询条件
|
|
|
+ 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());
|
|
|
+
|
|
|
+ string jsonStr = new JsonResult(d) { total = total }.ToJson();
|
|
|
+ conn.Commit();
|
|
|
+ context.Response.Write(jsonStr);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public bool IsReusable
|
|
|
+ {
|
|
|
+ get
|
|
|
+ {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|