Explorar o código

冷修回收后注浆工合格品扣减

姜永辉 hai 2 meses
pai
achega
da6544663b

+ 258 - 0
wwwroot/mes/rpt/rpt310/rpt.ashx

@@ -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;
+        }
+    }
+}

+ 123 - 0
wwwroot/mes/rpt/rpt310/rpt_index.html

@@ -0,0 +1,123 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta charset="utf-8" />
+    <meta name="keywords" content="dongke,mes,ibossmes">
+    <meta name="description" content="制造企业生产过程执行管理系统">
+    <meta name="author" content="xuwei">
+    <title>东科软件</title>
+    <script src="/plugins/xeasyui/xeasyui.min.js"></script>
+    <link href="/plugins/xeasyui/toolbar.min.css" rel="stylesheet" />
+</head>
+<body class="easyui-layout">
+
+    <!--中部主体-->
+    <div data-options="border:false,region:'center',title:'',iconCls:'icon-grid'">
+        <!--工具条-->
+        <div id="tb" class="i-toolbar">
+            <a href="javascript:void(0)" id="btnSearch" title="搜索" class="easyui-linkbutton" iconcls="icon-search" plain="true" toggle="true" onclick="tbSearch()">搜索</a>
+            <a href="javascript:void(0)" id="btnExport" title="导出" class="easyui-linkbutton" iconcls="icon-excel" plain="true" onclick="tbExport()">导出</a>
+            <a href="javascript:void(0)" id="btnReload" title="刷新" class="easyui-linkbutton" iconcls="icon-reload" plain="true" onclick="tbReload()">刷新</a>
+            <a href="javascript:void(0)" id="btnHelp" title="帮助" class="easyui-linkbutton" iconcls="icon-help" plain="true" onclick="tbHelp()">帮助</a>
+
+
+            <div id="tbSearchDiv" style="display:block;padding:10px;">
+                <form id="ffMaster">
+                    <div>
+                        开始日期:
+                        <input class="easyui-datetimebox" id="datebeginMaster" name="datebeginMaster" data-options="required:true,prompt:'',tipPosition:'top'" style="width:190px; height:32px;">
+                        截止日期:
+                        <input class="easyui-datetimebox" id="dateendMaster" name="dateendMaster" data-options="required:true,prompt:'',tipPosition:'top'" style="width: 190px; height: 32px;">
+                        数据源:<input class="easyui-combobox" id="procedureMaster" name="procedureMaster" data-options="required:true,prompt:'请选择...',tipPosition:'top',
+		   data:[
+		   {'text':'冷修','value':'冷修'},
+		   {'text':'回烧','value':'回烧'},
+		   ],valueField:'value',textField:'text',panelHeight:'200px',editable:'true'" style="width:160px;height:32px;">
+                        <a href="javascript:void(0)" id="btnSearchSubmit" title="清空" class="easyui-linkbutton" plain="false" onclick="toClear()">清空</a>
+                        <a href="javascript:void(0)" id="btnSearchSubmit" title="搜索" class="easyui-linkbutton" plain="false" onclick="tbSearchSubmit()">搜索</a>
+                    </div>
+                </form>
+            </div>
+        </div>
+ 
+        <!--表格-->
+        <table class="easyui-datagrid"
+               id="DataGridMaster"
+               data-options="toolbar: '#tb',method:'get',border:false,singleSelect:true,fit:true,fitColumns:true">
+            <thead>
+            </thead>
+        </table>
+
+    </div>
+
+    <script type="text/javascript">
+        function formatterUA(value, row, index) {
+            return Math.round(value*10000) / 100 + '%';
+        }
+
+        $(document).ready(function () { 
+            var ctime = new Date();
+            var beginDate = ctime.getFullYear() + "-" + (ctime.getMonth() + 1) + "-" + ctime.getDate() + " 00:00:00";
+            var endDate = ctime.getFullYear() + "-" + (ctime.getMonth() + 1) + "-" + ctime.getDate() + " 23:59:59";
+            $("#datebeginMaster").datetimebox("setValue", beginDate);
+            $("#dateendMaster").datetimebox("setValue", endDate);
+        });
+
+        // 清空恢复默认值 
+        function toClear() {
+            var ctime = new Date();
+            var beginDate = ctime.getFullYear() + "-" + (ctime.getMonth() + 1) + "-" + ctime.getDate() + " 00:00:00";
+            var endDate = ctime.getFullYear() + "-" + (ctime.getMonth() + 1) + "-" + ctime.getDate() + " 23:59:59";
+            $("#datebeginMaster").datetimebox("setValue", beginDate);
+            $("#dateendMaster").datetimebox("setValue", endDate);
+        }
+
+        //搜索提交
+        function tbSearchSubmit() {  
+            
+            if ($('#ffMaster').form("validate")) {  
+                $('#DataGridMaster').datagridLoadRpt({
+                    title: '',
+                    idField: 'SID',
+                    queryParams: $('#ffMaster').serializeJson(),
+                    url: 'rpt.ashx?m=master&id=' + request('id'),
+                    fixWidth: 160,
+                    mergeWidth: 100,
+                    splitChar: '_',
+                    columnMenu: '#btnColumnMenu',
+                    columnMoving: true,
+                    pagination: true,
+                    pagelist: [10000, 50, 100, 50, 1000, 5000],
+                    pageSize: 10000, 
+                });
+            }
+           
+        }
+
+        //导出
+
+        function tbExport() {
+            $('#DataGridMaster').datagrid('toExcel', '(冷修、回烧后注浆工合格品扣减数据' + $("#datebeginMaster").datetimebox("getValue") + '_' + $("#dateendMaster").datetimebox("getValue")+'.xls');
+        }
+
+        //搜索按钮
+        function tbSearch() {
+            $('#tbSearchDiv').toggle();
+            $('#DataGridMaster').datagrid('resize');
+        }
+        //帮助事件
+        function tbHelp() {
+            $('#DataGridMaster').datagridDialog({
+                title: '帮助',
+                width: 640,
+                height: 480,
+                url: '冷修、回烧后注浆工合格品扣减数据.html'
+            });
+        }
+        //刷新
+        function tbReload() {
+            tbSearchSubmit();
+        }
+    </script>
+</body>
+</html>

+ 66 - 0
wwwroot/mes/rpt/rpt310/冷修、回烧后注浆工合格品扣减数据.html

@@ -0,0 +1,66 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta charset="utf-8" />
+    <meta name="keywords" content="dongke,mes,ibossmes">
+    <meta name="description" content="制造企业生产过程执行管理系统">
+    <meta name="author" content="xuwei">
+    <title>东科软件</title>
+    <script src="/plugins/xeasyui/xeasyui.min.js"></script>
+</head>
+<body class="easyui-layout">
+    <div data-options="region:'center',plain:true,border:false">
+        <form id="ff" method="post" class="w-form">
+            <div class="w-div">
+                <div class="w-fieldbar" onclick="$('#more1').toggle()" style="cursor:pointer;"></div>
+            </div>
+            <div class="w-div">
+                <div class="w-fieldbar" onclick="$('#more2').toggle()" style="cursor:pointer;"></div>
+            </div>
+            <div id="more2" style="display:block;">
+                <div class="w-div">
+                    <div class="w-fieldname">使用说明:</div>
+                    <div class="w-field">
+                        <div id="ID" data-field="true" class="w-fieldvalue">
+                            冷修、回烧后注浆工合格品扣减数据。
+                        </div>
+                    </div>
+                </div>
+                <div class="w-div">
+                    <div class="w-fieldname">数据算法:</div>
+                    <div class="w-field">
+                        <div id="ID" data-field="true" class="w-fieldvalue">
+                            一烧数据中有注浆工缺陷,不进行扣减<br />
+                            一烧数据中无注浆工缺陷,对重烧功能检测过程中内漏不合格、外漏不合格/试水不合格缺陷时,对注浆工合格品数进行扣减;<br />
+                            因涉及可能存在多轮冷修和回烧,只对第一次出现内漏不合格/外漏不合格/试水不合格缺陷进行记录、扣减;<br />
+                            数据源为重烧功能检测首次判定为内漏不合格/外漏不合格/试水不合格缺陷时的数据来源<br />
+                        </div>
+                    </div>
+                </div>
+                <div class="w-div">
+                    <div class="w-fieldname">更新时间:</div>
+                    <div class="w-field">
+                        <div id="ID" data-field="true" class="w-fieldvalue">
+                            2026-1-21。
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </form>
+    </div>
+    <div id="tb" data-options="region:'south',border:false" class="w-bar">
+        <a href="javascript:void(0)" id="tbClose" class="easyui-linkbutton" data-options="iconCls:'icon-cancel'" onclick="cancelForm()">关闭</a>
+    </div>
+    <script type="text/javascript">
+
+        $(function () {
+            $('#more1').toggle();
+        });
+
+        function cancelForm() {
+            $.dialog.close();
+        }
+
+    </script>
+</body>
+</html>