qinqi 4 месяцев назад
Родитель
Сommit
cb5266340a
25 измененных файлов с 4868 добавлено и 0 удалено
  1. 106 0
      wwwroot/mes/pm/testform/rpt_help.html
  2. 773 0
      wwwroot/mes/pm/testform/testform.ashx
  3. 105 0
      wwwroot/mes/pm/testform/testform_add.html
  4. 132 0
      wwwroot/mes/pm/testform/testform_addgoods.ashx
  5. 123 0
      wwwroot/mes/pm/testform/testform_addgoods.html
  6. 136 0
      wwwroot/mes/pm/testform/testform_defect.html
  7. 137 0
      wwwroot/mes/pm/testform/testform_detail.html
  8. 104 0
      wwwroot/mes/pm/testform/testform_edit.html
  9. 119 0
      wwwroot/mes/pm/testform/testform_importBarCode.ashx
  10. 60 0
      wwwroot/mes/pm/testform/testform_importBarCode.html
  11. BIN
      wwwroot/mes/pm/testform/testform_importBarCode.xlsx
  12. 257 0
      wwwroot/mes/pm/testform/testform_index.html
  13. 147 0
      wwwroot/mes/pm/testform/testform_user.html
  14. 534 0
      wwwroot/mes/pm/testform_rpt001/rpt - 0910.ashx
  15. 450 0
      wwwroot/mes/pm/testform_rpt001/rpt - 质量.ashx
  16. 127 0
      wwwroot/mes/pm/testform_rpt001/rpt.ashx
  17. 118 0
      wwwroot/mes/pm/testform_rpt001/rpt_help.html
  18. 226 0
      wwwroot/mes/pm/testform_rpt001/rpt_index.html
  19. 43 0
      wwwroot/mes/pm/testform_rpt001/test.ashx
  20. 97 0
      wwwroot/mes/pm/testformgoods/rpt_help.html
  21. 562 0
      wwwroot/mes/pm/testformgoods/testformgoods.ashx
  22. 80 0
      wwwroot/mes/pm/testformgoods/testformgoods_add.html
  23. 117 0
      wwwroot/mes/pm/testformgoods/testformgoods_detail.html
  24. 101 0
      wwwroot/mes/pm/testformgoods/testformgoods_edit.html
  25. 214 0
      wwwroot/mes/pm/testformgoods/testformgoods_index.html

+ 106 - 0
wwwroot/mes/pm/testform/rpt_help.html

@@ -0,0 +1,106 @@
+<!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 id="more1" style="display:block;">
+                <div class="w-div">
+                    <div class="w-fieldname">1.0 更新:</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">1.1 更新:</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">1.2 更新:</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">1.3 更新:</div>
+                    <div class="w-field">
+                        <div id="ID" data-field="true" class="w-fieldvalue">
+                            
+                        </div>
+                    </div>
+                </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">
+                            1.批量添加产品</br>
+                            (1)选中实验单,点击【批量添加产品】按钮;</br>
+                            (2)设置工序、开始日期、截止日期;</br>
+                            (3)点击保存,将搜索出的产品条码,剔除实验单中已存在的产品条码批量累加插入。</br>
+                            2.删除</br>
+                            (1)状态是完成的实验单,不可删除;</br>
+                            (2)产品数量等于0的实验单,可直接删除;</br>
+                            (3)产品数量大于0的实验单,不可直接删除,需要删除实验单下的所有产品后再进行删除操作。</br>
+                            3.导入</br>
+                            (1)导入前删除所选实验单下的所有产品条码;</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">
+                            系统没有提供数据算法。
+                        </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">
+                            2021-11-10 xuwei。
+                        </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>

+ 773 - 0
wwwroot/mes/pm/testform/testform.ashx

@@ -0,0 +1,773 @@
+<%@ WebHandler Language="C#" Class="testform" %>
+
+using System;
+using System.Web;
+using System.Web.SessionState;
+using System.Collections.Generic;
+using System.Collections.Specialized;
+using System.Data;
+using Curtain.DataAccess;
+using DK.XuWei.WebMes;
+
+/// <summary>
+/// TP_PM_TESTFORM2
+/// xuwei create 2021-08-31
+/// </summary>
+public class testform : IHttpHandler, IReadOnlySessionState
+{
+    public void ProcessRequest(HttpContext context)
+    {
+        context.Response.ContentType = "text/plain";
+
+        if (mes.LoginCheck() && context.Request["m"] is object)
+        {
+            Button b = new Button();
+            if(mes.RightCheck(""))
+            {
+                b.testformButtonIndex = true;
+                b.testformButtonInsert = true;
+                b.testformButtonInsertBatch = true;
+                b.testformButtonCopy = true;
+                b.testformButtonUpdate = true;
+                b.testformButtonDelete = true;
+                b.testformButtonCancel = true;
+                b.testformButtonSearch = true;
+                b.testformButtonDetail = true;
+                b.testformButtonCheckbox = true;
+                b.testformButtonExport = true;
+                b.testformButtonReload = true;
+                b.testformButtonUser = true;
+                b.testformButtonDefect = true;
+                b.testformButtonDefectList = true;
+                b.testformButtonList = true;
+                b.testformButtonAddGoods = true;
+                b.testformButtonImport = true;
+            };
+            switch (context.Request["m"].ToString().ToLower())
+            {
+                case "b":
+                    {
+                        //按钮
+                        context.Response.Write(new JsonResult(b).ToJson());
+                        break;
+                    }
+                case "a":
+                    {
+                        //添加
+                        //if (b.testformButtonDetail && context.Request["id"] is object)
+                        if (b.testformButtonDetail)
+                            //context.Response.Write(detail());
+                            context.Response.Write(generateId());
+                        else
+                        {
+                            List<xRecord> list = new List<xRecord>();
+                            xRecord r = new xRecord();
+                            list.Add(r);
+                            context.Response.Write(new JsonResult(list).ToJson());
+                            //context.Response.Write(generateId());
+                        }
+                        break;
+                    }
+                case "s":
+                    {
+                        //搜索
+                        if (b.testformButtonIndex)
+                            context.Response.Write(search(context.Request.Form));
+                        else
+                            context.Response.Write(new JsonResult(JsonStatus.rightError).ToJson());
+                        break;
+                    }
+                case "t":
+                    {
+                        //详细
+                        if (b.testformButtonDetail)
+                            context.Response.Write(detail());
+                        else
+                            context.Response.Write(new JsonResult(JsonStatus.rightError).ToJson());
+                        break;
+                    }
+                case "i":
+                    {
+                        //插入
+                        if (b.testformButtonInsert)
+                            context.Response.Write(insert(context.Request.Form));
+                        else
+                            context.Response.Write(new JsonResult(JsonStatus.rightError).ToJson());
+                        break;
+                    }
+                case "u":
+                    {
+                        //修改
+                        if (b.testformButtonUpdate)
+                            context.Response.Write(update(context.Request.Form));
+                        else
+                            context.Response.Write(new JsonResult(JsonStatus.rightError).ToJson());
+                        break;
+                    }
+                case "d":
+                    {
+                        //删除
+                        if (b.testformButtonDelete)
+                            context.Response.Write(delete());
+                        else
+                            context.Response.Write(new JsonResult(JsonStatus.rightError).ToJson());
+                        break;
+                    }
+                case "e":
+                    {
+                        //导出
+                        if (b.testformButtonExport)
+                        {
+                            context.Response.Write(export());
+                        }
+                        else
+                        {
+                            context.Response.Write(new JsonResult(JsonStatus.rightError).ToJson());
+                        }
+                        break;
+                    }
+                case "us":
+                    {
+                        //设置操作员
+                        if (b.testformButtonUser)
+                            context.Response.Write(updateUser(context.Request.Form,context.Request["id"]));
+                        else
+                            context.Response.Write(new JsonResult(JsonStatus.rightError).ToJson());
+                        break;
+                    }
+                case "ud":
+                    {
+                        //设置统计缺陷
+                        if (b.testformButtonDefect)
+                            context.Response.Write(updateDefect(context.Request.Form,context.Request["id"]));
+                        else
+                            context.Response.Write(new JsonResult(JsonStatus.rightError).ToJson());
+                        break;
+                    }
+                case "getdefect":
+                    {
+                        //获取缺陷列表
+                        if (b.testformButtonDefectList)
+                            context.Response.Write(getDefectList());
+                        else
+                            context.Response.Write(new JsonResult(JsonStatus.rightError).ToJson());
+                        break;
+                    }
+                case "getlist":
+                    {
+                        //获取实验单列表
+                        if (b.testformButtonList)
+                            context.Response.Write(getList());
+                        else
+                            context.Response.Write(new JsonResult(JsonStatus.rightError).ToJson());
+                        break;
+                    }
+                case "getolduser":
+                    {
+                        //获取实验单列表
+                        if (b.testformButtonList)
+                            context.Response.Write(getUser());
+                        else
+                            context.Response.Write(new JsonResult(JsonStatus.rightError).ToJson());
+                        break;
+                    }
+                case "getolddefect":
+                    {
+                        //获取实验单列表
+                        if (b.testformButtonList)
+                            context.Response.Write(getDefect());
+                        else
+                            context.Response.Write(new JsonResult(JsonStatus.rightError).ToJson());
+                        break;
+                    }
+                default:
+                    {
+                        break;
+                    }
+            }
+        }
+        else
+        {
+            context.Response.Write(new JsonResult(JsonStatus.loginError).ToJson());
+        }
+    }
+
+    /// <summary>
+    /// TP_PM_TESTFORM2 查询
+    /// </summary>
+    /// <returns>json</returns>
+    private string search(NameValueCollection form)
+    {
+        using(IDataAccess conn=DataAccess.Create())
+        {
+            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"]) : 10;
+            string sort = HttpContext.Current.Request["sort"] is object ? HttpContext.Current.Request["sort"] : "m.CREATETIME";
+            string order = HttpContext.Current.Request["order"] is object ? HttpContext.Current.Request["order"] : "desc";
+
+            string sqlStr = @"
+            SELECT DISTINCT
+	            m.GUID AS SID,
+	            m.GUID,
+	            m.ID,
+	            m.NAME,
+	            m.PERSON,
+	            m.METHOD,
+	            m.OBJECTIVES,
+	            m.BACKGROUND,
+	            m.RESULT,
+	            decode( m.STATE, 0, '进行中', 1, '完成' ) AS STATE,
+	            SUM( CASE WHEN TG.VALUEFLAG = '1' AND m.VALUEFLAG = '1' THEN 1 ELSE 0 END ) AS GOODSCOUNT,
+	            TU.USERCODELIST AS USERS,
+	            TP.DEFECTCODELIST AS PROCEDUREDEFECTS,
+	            m.CREATEUSERID,
+	            m.CREATETIME,
+	            m.UPDATEUSERID,
+	            m.UPDATETIME 
+            FROM
+	            TP_PM_TESTFORM2 m
+	            LEFT JOIN TP_PM_TESTFORM2_USER TU ON M.ID = TU.TESTFORMGUID 
+	            AND TU.VALUEFLAG = '1'
+	            LEFT JOIN TP_PM_TESTFORM2_DEFECT TP ON M.ID = TP.TESTFORMGUID 
+	            AND TP.VALUEFLAG = '1'
+	            LEFT JOIN TP_PM_TESTFORM2_GOODS TG ON M.ID = TG.TESTFORMGUID 
+            WHERE
+	            m.VALUEFLAG = '1' 
+	            AND m.ACCOUNTID = 1 
+	            AND m.TESTFLAG = 1
+            ";
+            List<CDAParameter> sqlPara = new List<CDAParameter>();
+            sqlPara.Add(new CDAParameter("ACCOUNTID", HttpContext.Current.Session["accountId"]));
+
+            if(!string.IsNullOrEmpty(form["GUID"]))
+            {
+                sqlStr += " AND m.GUID = @GUID@ ";
+                sqlPara.Add(new CDAParameter("GUID", form["GUID"]));
+            }
+            if(!string.IsNullOrEmpty(form["ID"]))
+            {
+                sqlStr += " AND INSTR( m.ID, @ID@ ) > 0 ";
+                sqlPara.Add(new CDAParameter("ID", form["ID"]));
+            }
+            if(!string.IsNullOrEmpty(form["NAME"]))
+            {
+                sqlStr += " AND INSTR( m.NAME, @NAME@ ) > 0 ";
+                sqlPara.Add(new CDAParameter("NAME", form["NAME"]));
+            }
+            if(!string.IsNullOrEmpty(form["PERSON"]))
+            {
+                sqlStr += " AND INSTR( m.PERSON, @PERSON@ ) > 0 ";
+                sqlPara.Add(new CDAParameter("PERSON", form["PERSON"]));
+            }
+            if(!string.IsNullOrEmpty(form["BACKGROUND"]))
+            {
+                sqlStr += " AND INSTR( m.BACKGROUND, @BACKGROUND@ ) > 0 ";
+                sqlPara.Add(new CDAParameter("BACKGROUND", form["BACKGROUND"]));
+            }
+            if(!string.IsNullOrEmpty(form["OBJECTIVES"]))
+            {
+                sqlStr += " AND INSTR( m.OBJECTIVES, @OBJECTIVES@ ) > 0 ";
+                sqlPara.Add(new CDAParameter("OBJECTIVES", form["OBJECTIVES"]));
+            }
+            if(!string.IsNullOrEmpty(form["METHOD"]))
+            {
+                sqlStr += " AND INSTR( m.METHOD, @METHOD@ ) > 0 ";
+                sqlPara.Add(new CDAParameter("METHOD", form["METHOD"]));
+            }
+            if(!string.IsNullOrEmpty(form["RESULT"]))
+            {
+                sqlStr += " AND INSTR( m.RESULT, @RESULT@ ) > 0 ";
+                sqlPara.Add(new CDAParameter("RESULT", form["RESULT"]));
+            }
+            if(!string.IsNullOrEmpty(form["STATE"]))
+            {
+                sqlStr += " AND INSTR( m.STATE, @STATE@ ) > 0 ";
+                sqlPara.Add(new CDAParameter("STATE", form["STATE"]));
+            }
+            sqlStr += "  GROUP BY " +
+               " m.GUID, " +
+               " m.GUID," +
+               " m.ID," +
+               " m.NAME," +
+               " m.PERSON," +
+               " m.METHOD," +
+               " m.OBJECTIVES," +
+               " m.BACKGROUND," +
+               " m.RESULT," +
+               " decode( m.STATE, 0, '进行中', 1, '完成' )," +
+               " TU.USERCODELIST," +
+               " TP.DEFECTCODELIST," +
+               " m.CREATEUSERID," +
+               " m.CREATETIME," +
+               " m.UPDATEUSERID," +
+               " m.UPDATETIME";
+            if(sort != "")
+            {
+                sqlStr += " ORDER BY " + sort + " " + order;
+            }
+            int total = 0;
+            DataTable dt = conn.SelectPages(page, rows,out total, sqlStr, sqlPara.ToArray());
+            return new JsonResult(dt) { total = total}.ToJson();
+        }
+    }
+
+    /// <summary>
+    /// 详细 TP_PM_TESTFORM2
+    /// </summary>
+    /// <returns>json</returns>
+    private string detail()
+    {
+        using(IDataAccess conn= DataAccess.Create())
+        {
+            DataTable dt = conn.ExecuteDatatable(@"
+                SELECT 
+                    m.GUID,
+                    m.ID,
+                    m.ID AS ID2,
+                    m.NAME,
+                    m.PERSON,
+                    m.OBJECTIVES,
+                    m.BACKGROUND,
+                    m.METHOD,
+                    m.RESULT,
+                    m.STATE,
+                    m.VALUEFLAG,
+                    m.ACCOUNTID,
+                    m.CREATEUSERID,
+                    m.CREATETIME,
+                    m.UPDATEUSERID,
+                    m.UPDATETIME
+                FROM
+                    TP_PM_TESTFORM2 m
+                    LEFT JOIN
+                    TP_PM_TESTFORM2_USER TU
+                    ON m.ID=TU.TESTFORMGUID
+                    LEFT JOIN
+                    TP_PM_TESTFORM2_DEFECT TP
+                    ON m.ID=TP.TESTFORMGUID
+                WHERE 
+                    m.VALUEFLAG = '1'
+                    AND m.ACCOUNTID = @ACCOUNTID@
+                    AND m.GUID = @GUID@
+                ",
+                new CDAParameter("ACCOUNTID",HttpContext.Current.Session["accountId"]),
+                new CDAParameter("GUID",HttpContext.Current.Request["id"])
+            );
+            return new JsonResult(dt).ToJson();
+        }
+    }
+
+    /// <summary>
+    /// 获取原本的USERCODELIST TP_PM_TESTFORM2_USER
+    /// </summary>
+    /// <returns>json</returns>
+    private string getUser()
+    {
+        using(IDataAccess conn= DataAccess.Create())
+        {
+            DataTable dt = conn.ExecuteDatatable(@"
+                SELECT 
+                    m.GUID,
+                    m.ID,
+                    m.ID AS ID2,
+                    m.NAME,
+                    m.PERSON,
+                    m.OBJECTIVES,
+                    m.BACKGROUND,
+                    m.METHOD,
+                    m.RESULT,
+                    m.STATE,
+                    m.VALUEFLAG,
+                    m.ACCOUNTID,
+                    m.CREATEUSERID,
+                    m.CREATETIME,
+                    m.UPDATEUSERID,
+                    m.UPDATETIME,
+                    TU.USERCODELIST AS USERCODE
+                FROM
+                    TP_PM_TESTFORM2 m
+                    LEFT JOIN
+                    TP_PM_TESTFORM2_USER TU
+                    ON m.ID=TU.TESTFORMGUID
+                WHERE 
+                    m.VALUEFLAG = '1'
+                    AND TU.VALUEFLAG = '1'
+                    AND m.ACCOUNTID = @ACCOUNTID@
+                    AND m.GUID = @GUID@
+                ",
+                new CDAParameter("ACCOUNTID",HttpContext.Current.Session["accountId"]),
+                new CDAParameter("GUID",HttpContext.Current.Request["id"])
+            );
+            return new JsonResult(dt).ToJson();
+        }
+    }
+
+    /// <summary>
+    /// 获取原来的DEFECTCODELIST TP_PM_TESTFORM2_DEFECT
+    /// </summary>
+    /// <returns>json</returns>
+    private string getDefect()
+    {
+        using(IDataAccess conn= DataAccess.Create())
+        {
+            DataTable dt = conn.ExecuteDatatable(@"
+                SELECT 
+                    m.GUID,
+                    m.ID,
+                    m.ID AS ID2,
+                    m.NAME,
+                    m.PERSON,
+                    m.OBJECTIVES,
+                    m.BACKGROUND,
+                    m.METHOD,
+                    m.RESULT,
+                    m.STATE,
+                    m.VALUEFLAG,
+                    m.ACCOUNTID,
+                    m.CREATEUSERID,
+                    m.CREATETIME,
+                    m.UPDATEUSERID,
+                    m.UPDATETIME,
+                    TP.DEFECTCODELIST AS DEFECT
+                FROM
+                    TP_PM_TESTFORM2 m
+                    LEFT JOIN
+                    TP_PM_TESTFORM2_DEFECT TP
+                    ON m.ID=TP.TESTFORMGUID
+                WHERE 
+                    m.VALUEFLAG = '1'
+                    AND TP.VALUEFLAG = '1'
+                    AND m.ACCOUNTID = @ACCOUNTID@
+                    AND m.GUID = @GUID@
+                ",
+                new CDAParameter("ACCOUNTID",HttpContext.Current.Session["accountId"]),
+                new CDAParameter("GUID",HttpContext.Current.Request["id"])
+            );
+            return new JsonResult(dt).ToJson();
+        }
+    }
+
+    /// <summary>
+    /// 插入 TP_PM_TESTFORM2
+    /// </summary>
+    /// <returns>json</returns>
+    private string insert(NameValueCollection form)
+    {
+        using(IDataAccess conn= DataAccess.Create())
+        {
+            //string primaryKey = conn.GetSequenceNextval("SEQ_TP_PM_TESTFORM2_ID").ToString();
+            //string primaryKey = Guid.NewGuid().ToString().Replace("_", "");
+            int result = conn.ExecuteNonQuery(@"
+                INSERT INTO TP_PM_TESTFORM2 (
+                    --GUID,
+                    ID,
+                    NAME,
+                    PERSON,
+                    OBJECTIVES,
+                    BACKGROUND,
+                    METHOD,
+                    RESULT,
+                    STATE,
+                    ACCOUNTID,CREATEUSERID,UPDATEUSERID,
+                    TESTFLAG
+                ) VALUES (
+                    --@GUID@,
+                    @ID@,
+                    @NAME@,
+                    @PERSON@,
+                    @OBJECTIVES@,
+                    @BACKGROUND@,
+                    @METHOD@,
+                    @RESULT@,
+                    0,
+                    @ACCOUNTID@,@CREATEUSERID@,@UPDATEUSERID@,
+                    1
+                )
+                ",
+                //new CDAParameter("GUID",primaryKey),
+                new CDAParameter("ID",form["ID"]),
+                new CDAParameter("NAME",form["NAME"]),
+                new CDAParameter("PERSON",form["PERSON"]),
+                new CDAParameter("METHOD",form["METHOD"]),
+                new CDAParameter("OBJECTIVES",form["OBJECTIVES"]),
+                new CDAParameter("BACKGROUND",form["BACKGROUND"]),
+                new CDAParameter("RESULT",form["RESULT"]),
+                //new CDAParameter("STATE",form["STATE"]),
+                new CDAParameter("ACCOUNTID",HttpContext.Current.Session["accountId"]),
+                new CDAParameter("CREATEUSERID",HttpContext.Current.Session["userId"]),
+                new CDAParameter("UPDATEUSERID",HttpContext.Current.Session["userId"])
+            );
+            return new JsonResult(JsonStatus.success).ToJson();
+        }
+    }
+
+    /// <summary>
+    /// 更新 TP_PM_TESTFORM2
+    /// </summary>
+    /// <returns>json</returns>
+    private string update(NameValueCollection form)
+    {
+        using(IDataAccess conn=DataAccess.Create())
+        {
+            int result = conn.ExecuteNonQuery(@"
+                UPDATE TP_PM_TESTFORM2 
+                SET
+                    ID = @ID@,
+                    NAME = @NAME@,
+                    PERSON = @PERSON@,
+                    OBJECTIVES = @OBJECTIVES@,
+                    BACKGROUND = @BACKGROUND@,
+                    METHOD = @METHOD@,
+                    RESULT = @RESULT@,
+                    STATE = @STATE@,
+                    UPDATEUSERID = @UPDATEUSERID@,
+                    UPDATETIME = sysdate
+                WHERE 
+                    ID = @ID@
+                ",
+                new CDAParameter("ID",form["ID"]),
+                new CDAParameter("NAME",form["NAME"]),
+                new CDAParameter("PERSON",form["PERSON"]),
+                new CDAParameter("OBJECTIVES",form["OBJECTIVES"]),
+                new CDAParameter("BACKGROUND",form["BACKGROUND"]),
+                new CDAParameter("METHOD",form["METHOD"]),
+                new CDAParameter("RESULT",form["RESULT"]),
+                new CDAParameter("STATE",Convert.ToInt32(form["STATE"])),
+                new CDAParameter("UPDATEUSERID",HttpContext.Current.Session["userId"]),
+                new CDAParameter("GUID",HttpContext.Current.Request["id"])
+            );
+            return new JsonResult(JsonStatus.success).ToJson();
+        }
+    }
+
+    //设置操作员
+    private string updateUser(NameValueCollection form,object id)
+    {
+        using(IDataAccess conn=DataAccess.Create())
+        {
+            //写入操作员
+            string usercode = form["USERCODE[]"] is object ? form["USERCODE[]"].ToString() : "0";
+            if (usercode == "0" && form["USERCODE"] is object) usercode = form["USERCODE"].ToString();
+            if (usercode == "") usercode = "0";
+            int result = conn.ExecuteNonQuery(@"
+                UPDATE TP_PM_TESTFORM2_USER 
+                SET
+                    VALUEFLAG = 0
+                WHERE 
+                    TESTFORMGUID = @TESTFORMGUID@
+                    AND VALUEFLAG = 1
+                ",
+                new CDAParameter("TESTFORMGUID",id)
+            );
+            int result1 = conn.ExecuteNonQuery(@"
+                INSERT INTO TP_PM_TESTFORM2_USER(TESTFORMGUID,VALUEFLAG,CREATEUSERID,UPDATEUSERID,USERCODELIST) 
+                VALUES(@TESTFORMGUID@,1,@CREATEUSERID@,@UPDATEUSERID@,@USERCODELIST@)
+                ",
+                new CDAParameter("TESTFORMGUID",id),
+                new CDAParameter("CREATEUSERID",HttpContext.Current.Session["userId"]),
+                new CDAParameter("UPDATEUSERID",HttpContext.Current.Session["userId"]),
+                new CDAParameter("USERCODELIST",usercode)
+            );
+            return new JsonResult(JsonStatus.success).ToJson();
+        }
+    }
+
+    /// <summary>
+    /// 设置统计缺陷
+    /// </summary>
+    /// <param name="form"></param>
+    /// <returns></returns>
+    private string updateDefect(NameValueCollection form,object id)
+    {
+        using(IDataAccess conn=DataAccess.Create())
+        {
+            //写入统计工序缺陷
+            string defect = form["DEFECTID[]"] is object ? form["DEFECTID[]"].ToString() : "0";
+            if (defect == "0" && form["DEFECTID"] is object) defect = form["DEFECTID"].ToString();
+            if (defect == "") defect = "0";
+            int result = conn.ExecuteNonQuery(@"
+                UPDATE TP_PM_TESTFORM2_DEFECT 
+                SET
+                    VALUEFLAG = 0
+                WHERE 
+                    TESTFORMGUID = @TESTFORMGUID@
+                    AND VALUEFLAG = 1
+                ",
+                new CDAParameter("TESTFORMGUID",id)
+            );
+            int result1 = conn.ExecuteNonQuery(@"
+                INSERT INTO TP_PM_TESTFORM2_DEFECT(TESTFORMGUID,VALUEFLAG,CREATEUSERID,UPDATEUSERID,DEFECTCODELIST) 
+                VALUES(@TESTFORMGUID@,1,@CREATEUSERID@,@UPDATEUSERID@,@DEFECTCODELIST@)
+                ",
+                new CDAParameter("TESTFORMGUID",id),
+                new CDAParameter("CREATEUSERID",HttpContext.Current.Session["userId"]),
+                new CDAParameter("UPDATEUSERID",HttpContext.Current.Session["userId"]),
+                new CDAParameter("DEFECTCODELIST",defect)
+            );
+            return new JsonResult(JsonStatus.success).ToJson();
+        }
+    }
+
+    /// <summary>
+    /// 删除 TP_PM_TESTFORM2
+    /// </summary>
+    /// <returns>json</returns>
+    private string delete()
+    {
+        using(IDataAccess conn= DataAccess.Create())
+        {
+            if (HttpContext.Current.Request["id"] is object)
+            {
+                int result = conn.ExecuteNonQuery(@"
+                    DELETE 
+                        TP_PM_TESTFORM2 
+                    WHERE 
+                        INSTR(',' || @GUID@ || ',' , ',' || GUID || ',') > 0 
+                    ",
+                    new CDAParameter("GUID", HttpContext.Current.Request["id"])
+                );
+                return new JsonResult(JsonStatus.success).ToJson();
+            }
+            else
+            {
+                return new JsonResult(JsonStatus.otherError).ToJson();
+            }
+        }
+    }
+
+    /// <summary>
+    /// 新建 生成ID TP_PM_TESTFORM2
+    /// </summary>
+    /// <returns>json</returns>
+    private string generateId()
+    {
+        using(IDataAccess conn= DataAccess.Create())
+        {
+            DataTable dt0 = conn.ExecuteDatatable(@"
+            SELECT 
+                CONCAT(TO_CHAR(SYSDATE, 'yyyyMMdd'), LPAD(TO_CHAR(NVL(MAX(TO_NUMBER(SUBSTR(ID, 9))),0) + 1), 2, '0')) AS ID
+            FROM
+                TP_PM_TESTFORM2
+            WHERE 
+                SUBSTR(ID,1,8) = TO_CHAR(SYSDATE, 'yyyyMMdd')
+
+				"
+            );
+            if (dt0.Rows.Count == 0)
+            {
+                DataRow dr = dt0.NewRow();
+                dr["ID"] = DateTime.Now.ToString("yyyyMMdd") + "01";
+                dt0.Rows.Add(dr);
+                //dt0.Rows.Add("ID", DateTime.Now.ToString("yyyyMMdd") + "01");
+            }
+            return new JsonResult(dt0).ToJson();
+        }
+    }
+
+    /// <summary>
+    /// 获取缺陷(工序)列表 TP_PC_PROCEDUREDEFECT
+    /// </summary>
+    /// <returns>json</returns>
+    private string getDefectList()
+    {
+        using(IDataAccess conn= DataAccess.Create())
+        {
+            DataTable dt0 = conn.ExecuteDatatable(@"
+            SELECT
+	            D.DEFECTID,
+	            D.DEFECTTYPEID,
+	            D.DEFECTNAME || '【' || dt.DEFECTTYPENAME || '】' AS DEFECT 
+            FROM
+	            TP_MST_DEFECT D
+	            INNER JOIN TP_MST_DEFECTTYPE dt ON D.DEFECTTYPEID = dt.DEFECTTYPEID 
+            WHERE
+	            D.VALUEFLAG = 1 
+	            AND dt.VALUEFLAG = 1 
+            ORDER BY
+	            Dt.DISPLAYNO
+				"
+            );
+            return dt0.ToJson();
+        }
+    }
+
+    /// <summary>
+    /// 获取实验单列表 TP_PM_TESTFORM2
+    /// </summary>
+    /// <returns>json</returns>
+    private string getList()
+    {
+        string right = "ALL";
+        using(IDataAccess conn= DataAccess.Create())
+        {
+            DataTable dt = conn.ExecuteDatatable(@"
+            SELECT
+                T.ID,   
+	            CONCAT( T.ID, T.NAME ) AS NAME 
+            FROM
+	            TP_PM_TESTFORM2 T
+            WHERE
+	            T.VALUEFLAG = 1 
+	            AND T.STATE = 0 
+	            AND T.TESTFLAG = 1 
+	            AND (T.CREATEUSERID = @USERID@ AND @RIGHT@ <> 'ALL' OR @RIGHT@ = 'ALL') 
+				",
+                new CDAParameter("USERID",Convert.ToInt32(HttpContext.Current.Session["userId"])),
+                new CDAParameter("RIGHT",right)
+            );
+            //return new JsonResult(dt).ToJson();
+            return dt.ToJson();
+        }
+    }
+
+    /// <summary>
+    /// 导出 TP_PM_TESTFORM2
+    /// </summary>
+    /// <returns>json</returns>
+    private string export()
+    {
+        return search(new NameValueCollection());
+    }
+
+    private class Button
+    {
+        public bool testformButtonIndex = false;
+        public bool testformButtonInsert = false;
+        public bool testformButtonInsertBatch = false;
+        public bool testformButtonCopy = false;
+        public bool testformButtonUpdate = false;
+        public bool testformButtonDelete = false;
+        public bool testformButtonCancel = false;
+        public bool testformButtonSearch = false;
+        public bool testformButtonDetail = false;
+        public bool testformButtonCheckbox = false;
+        public bool testformButtonExport = false;
+        public bool testformButtonReload = false;
+        public bool testformButtonUser = false;
+        public bool testformButtonDefect = false;
+        public bool testformButtonDefectList = false;
+        public bool testformButtonList = false;
+        public bool testformButtonAddGoods = false;
+        public bool testformButtonImport = false;
+    }
+
+    private class xRecord
+    {
+        public string sid { get; set; }
+        public string ID { get; set; }
+        public string NAME { get; set; }
+        public string PERSON { get; set; }
+        public string METHOD { get; set; }
+        public string RESULT { get; set; }
+        public string STATE { get; set; }
+    }
+
+    public bool IsReusable
+    {
+        get
+        {
+            return false;
+        }
+    }
+
+}

+ 105 - 0
wwwroot/mes/pm/testform/testform_add.html

@@ -0,0 +1,105 @@
+<!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>
+    <link rel="shortcut icon" href="/img/logo.png" />
+    <link rel="bookmark" href="/img/logo.png" />
+    <link rel="stylesheet" type="text/css" href="/plugins/easyui/themes/dongke/easyui.css">
+    <link rel="stylesheet" type="text/css" href="/plugins/easyui/themes/icon.css">
+    <link rel="stylesheet" type="text/css" href="/plugins/xeasyui/xuwell.css">
+    <script type="text/javascript" src="/plugins/easyui/jquery.min.js"></script>
+    <script type="text/javascript" src="/plugins/easyui/jquery.easyui.min.js"></script>
+    <script type="text/javascript" src="/plugins/easyui/locale/easyui-lang-zh_CN.js"></script>
+    <script type="text/javascript" src="/plugins/xeasyui/xuwell.js"></script>
+</head>
+<body class="easyui-layout">
+    <!--
+        <input class="easyui-combobox w-input" id="叶子" name="叶子" data-options="prompt:'请填写叶子...',tipPosition:'top',url:'/mes/list.ashx?m=truefalse',method:'get',valueField:'text',textField:'text',panelHeight:'200px',editable:'true'" style="width:100%;height:32px;">
+        <input class="easyui-filebox" id="图片" name="图片" data-options="prompt:'请选择图片...',tipPosition:'top',buttonText:'选择图片',buttonAlign:'right',accept:'image/*',onChange:$.imagePreview" style="width:100%;height:32px;" >
+    -->
+    <div data-options="region:'center',plain:true,border:false">
+        <form id="testformForm" method="post" class="w-form">
+            <div class="w-div">
+                <div class="w-fieldbar" onclick="$('#more1').toggle()" style="cursor:pointer;"></div>
+            </div>
+            <div id="more1" style="display:block;">
+                <div class="w-div">
+                    <div class="w-fieldname">GUID:</div>
+                    <div class="w-field"><input disabled class="easyui-textbox" id="GUID" name="GUID" data-options="required:false,prompt:'请填写GUID...',tipPosition:'top'" style="width:100%;height:32px;"></div>
+                </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">实验单号(YYYYMMDD+2):</div>
+                    <div class="w-field"><input class="easyui-textbox" readonly id="ID" name="ID" data-options="required:true,prompt:'请填写ID...',tipPosition:'top'" style="width:100%;height:32px;"></div>
+                </div>
+                <div class="w-div">
+                    <div class="w-fieldname">实验单名称:</div>
+                    <div class="w-field"><input class="easyui-textbox" id="NAME" name="NAME" data-options="required:true,prompt:'请填写NAME...',tipPosition:'top'" style="width:100%;height:32px;"></div>
+                </div>
+                <div class="w-div">
+                    <div class="w-fieldname">负责人:</div>
+                    <div class="w-field"><input class="easyui-textbox" id="PERSON" name="PERSON" data-options="required:true,prompt:'请填写PERSON...',tipPosition:'top'" style="width:100%;height:32px;"></div>
+                </div>
+                <div class="w-div">
+                    <div class="w-fieldname">实验目的:</div>
+                    <div class="w-field"><input class="easyui-textbox" id="OBJECTIVES" name="OBJECTIVES" data-options="required:true,prompt:'请填写OBJECTIVES...',tipPosition:'top',multiline:true" style="width:100%;height:128px;"></div>
+                </div>
+                <div class="w-div">
+                    <div class="w-fieldname">实验背景:</div>
+                    <div class="w-field"><input class="easyui-textbox" id="BACKGROUND" name="BACKGROUND" data-options="required:true,prompt:'请填写BACKGROUND...',tipPosition:'top',multiline:true" style="width:100%;height:128px;"></div>
+                </div>
+                <div class="w-div">
+                    <div class="w-fieldname">实验方法:</div>
+                    <div class="w-field"><input class="easyui-textbox" id="METHOD" name="METHOD" data-options="required:true,prompt:'请填写METHOD...',tipPosition:'top',multiline:true" style="width:100%;height:128px;"></div>
+                </div>
+                <div class="w-div">
+                    <div class="w-fieldname">实验结果:</div>
+                    <div class="w-field"><input class="easyui-textbox" id="RESULT" name="RESULT" data-options="required:false,prompt:'请填写RESULT...',tipPosition:'top',multiline:true" style="width:100%;height:128px;"></div>
+                </div>
+                <!--新建只能建进行中试验单-->
+                <!--<div class="w-div">
+                    <div class="w-fieldname">状态(0:进行中,1:完成):</div>
+                    <div class="w-field"><input class="easyui-textbox" id="STATE" name="STATE" data-options="required:true,prompt:'请填写STATE...',tipPosition:'top'" style="width:100%;height:32px;"></div>
+                    <input class="easyui-combobox" id="STATE" name="STATE" data-options="required:true,value:'0',valueField:'value',textField:'text',
+                               data:[{'text': '进行中', 'value': '0'}, {'text': '完成', 'value': '1'}]" style=" width: 120px; height: 32px;">
+                </div>-->
+            </div>
+        </form>
+    </div>
+    <div data-options="region:'south',border:false" class="w-bar">
+        <a href="javascript:void(0)" id="testformButtonSave" class="easyui-linkbutton" data-options="iconCls:'icon-save'" onclick="testformButtonSubmit_Click()">保存</a>
+        <a href="javascript:void(0)" id="testformButtonClose" class="easyui-linkbutton" data-options="iconCls:'icon-cancel'" onclick="testformButtonCancel_Click()">关闭</a>
+    </div>
+
+    <script type="text/javascript">
+
+        $(function () {
+            $('#testformForm').formLoad({
+                url: 'testform.ashx?m=a'
+            });
+            $('#more1').toggle();
+        });
+
+        function testformButtonSubmit_Click() {
+            $.dialog.save({
+                formid: 'testformForm',
+                datagridid: 'testformDatagrid',
+                url: 'testform.ashx?m=i'
+            });
+        }
+
+        function testformButtonCancel_Click() {
+            $.dialog.close();
+        }
+
+    </script>
+</body>
+</html>

+ 132 - 0
wwwroot/mes/pm/testform/testform_addgoods.ashx

@@ -0,0 +1,132 @@
+<%@ WebHandler Language="C#" Class="testform_addgoods" %>
+
+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 testform_addgoods : IHttpHandler, IReadOnlySessionState
+{
+    public void ProcessRequest(HttpContext context)
+    {
+        context.Response.ContentType = "text/plain";
+        using(IDataAccess conn = DataAccess.Create())
+        {
+            //主表
+            if(context.Request["m"].ToString()=="master")
+            {
+                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"]) : 10;
+                string sort = HttpContext.Current.Request["sort"] is object ? HttpContext.Current.Request["sort"] : "PD.BARCODE";
+                string order = HttpContext.Current.Request["order"] is object ? HttpContext.Current.Request["order"] : "asc";
+                DateTime dateBegin = Convert.ToDateTime(context.Request["datebeginMaster"]);
+                DateTime dateEnd = Convert.ToDateTime(context.Request["dateendMaster"]).AddDays(1);
+                
+                //获取查询条件
+                List<CDAParameter> sqlPara = new List<CDAParameter>();
+                sqlPara.Add(new CDAParameter("ACCOUNTID",HttpContext.Current.Session["accountId"]));
+                sqlPara.Add(new CDAParameter("DATEBEGIN", dateBegin, DataType.DateTime));
+                sqlPara.Add(new CDAParameter("DATEEND", dateEnd, DataType.DateTime));
+                sqlPara.Add(new CDAParameter("PROCEDUREID", context.Request["procedureidMaster"]));
+
+                //读取数据
+                string sqlStr = @"
+                SELECT 
+                    PD.GOODSCODE,
+                    PD.BARCODE
+                  FROM TP_PM_PRODUCTIONDATA PD 
+                    WHERE PD.VALUEFLAG = 1
+                    AND PD.ACCOUNTID = @ACCOUNTID@
+                    AND PD.PROCEDUREID = @PROCEDUREID@
+                    AND PD.CREATETIME >= @DATEBEGIN@
+                    AND PD.CREATETIME < @DATEEND@
+                  GROUP BY PD.BARCODE,PD.GOODSCODE
+                ";
+
+                if(sort != "")
+                {
+                    sqlStr += " ORDER BY " + sort + " " + order;
+                }
+                int total = 0;
+                DataTable dt = conn.SelectPages(page, rows,out total, sqlStr, sqlPara.ToArray());
+                string jsonStr =  new JsonResult(dt) { total = total}.ToJson();
+                context.Response.Write(jsonStr);
+            }
+
+            //保存方法
+            if(context.Request["m"].ToString()=="save")
+            {
+                DateTime dateBegin = Convert.ToDateTime(context.Request["datebeginMaster"].ToString());
+                DateTime dateEnd = Convert.ToDateTime(context.Request["dateendMaster"]).AddDays(1);
+                //添加产品处理
+                int result = conn.ExecuteNonQuery(@"
+                    INSERT INTO TP_PM_TESTFORM2_GOODS (
+                        TESTFORMGUID,
+                        BARCODE,
+                        ACCOUNTID,CREATEUSERID,UPDATEUSERID,PROCEDUREID
+                    ) SELECT 
+                        @TESTFORMGUID@,
+                        PD.BARCODE,
+                        @ACCOUNTID@,
+                        @CREATEUSERID@,
+                        @UPDATEUSERID@,
+                        @PROCEDUREID@
+                      FROM TP_PM_PRODUCTIONDATA PD 
+                        WHERE PD.VALUEFLAG = 1
+                        AND PD.ACCOUNTID = @ACCOUNTID@
+                        AND PD.PROCEDUREID = @PROCEDUREID@
+                        AND PD.CREATETIME >= @DATEBEGIN@
+                        AND PD.CREATETIME < @DATEEND@
+                        AND NOT EXISTS (SELECT TG.GUID FROM TP_PM_TESTFORM2_GOODS TG WHERE TG.TESTFORMGUID = @TESTFORMGUID@ AND TG.VALUEFLAG = 1 AND TG.BARCODE = PD.BARCODE)
+                      GROUP BY PD.BARCODE 
+                      ORDER BY PD.BARCODE
+                    ",
+                    new CDAParameter("TESTFORMGUID",context.Request["testformguidMaster"]),
+                    new CDAParameter("PROCEDUREID",context.Request["procedureidMaster"]),
+                    new CDAParameter("DATEBEGIN", dateBegin, DataType.DateTime),
+                    new CDAParameter("DATEEND", dateEnd, DataType.DateTime),
+                    new CDAParameter("ACCOUNTID",HttpContext.Current.Session["accountId"]),
+                    new CDAParameter("CREATEUSERID",HttpContext.Current.Session["userId"]),
+                    new CDAParameter("UPDATEUSERID",HttpContext.Current.Session["userId"])
+                );
+
+                string jsonStr = new JsonResult(JsonStatus.success).ToJson();
+
+                context.Response.Write(jsonStr);
+            }
+
+            //查询工序
+            if (context.Request["m"].ToString() == "getprocedure")
+            {
+                DataTable dt = conn.ExecuteDatatable(@"
+                        SELECT 
+                            PROCEDUREID AS ID,
+                            PROCEDURENAME AS NAME
+                        FROM 
+                            TP_PC_PROCEDURE
+                        WHERE 
+                            VALUEFLAG = '1'
+                        ORDER BY 
+                            PROCEDURECODE
+                    ");
+                context.Response.Write( dt.ToJson());
+            }
+        }
+    }
+
+    public bool IsReusable
+    {
+        get
+        {
+            return false;
+        }
+    }
+
+}

+ 123 - 0
wwwroot/mes/pm/testform/testform_addgoods.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>
+    <link rel="shortcut icon" href="/img/logo.png" />
+    <link rel="bookmark" href="/img/logo.png" />
+    <link rel="stylesheet" type="text/css" href="/plugins/easyui/themes/dongke/easyui.css">
+    <link rel="stylesheet" type="text/css" href="/plugins/easyui/themes/icon.css">
+    <link rel="stylesheet" type="text/css" href="/plugins/xeasyui/xuwell.css">
+    <script type="text/javascript" src="/plugins/easyui/jquery.min.js"></script>
+    <script type="text/javascript" src="/plugins/easyui/jquery.easyui.min.js"></script>
+    <script type="text/javascript" src="/plugins/easyui/locale/easyui-lang-zh_CN.js"></script>
+    <script type="text/javascript" src="/plugins/xeasyui/xuwell.js"></script>
+</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="btnReload" title="刷新" class="easyui-linkbutton" iconcls="icon-reload" plain="true" onclick="tbReload()">刷新</a>
+            <div id="tbSearchDiv" style="display:block;padding:10px;">
+                <form id="ffMaster">
+                    <div>
+                        工序:
+                        <input class="easyui-combobox" id="procedureidMaster" name="procedureidMaster" data-options="required:true,prompt:'',tipPosition:'top',url:'testform_addgoods.ashx?m=getprocedure' ,method:'get',valueField:'ID',textField:'NAME',panelHeight:'300px',editable:'false'" style="width:200px; height:32px;">
+                        开始日期:
+                        <input class="easyui-datebox" id="datebeginMaster" name="datebeginMaster" data-options="required:true,prompt:'',tipPosition:'top'" style="width:120px; height:32px;">
+                        截止日期:
+                        <input class="easyui-datebox" id="dateendMaster" name="dateendMaster" data-options="required:true,prompt:'',tipPosition:'top'" style="width:120px; height:32px;">
+
+                        <input name="m" value="save" type="hidden" />
+                        <input name="testformguidMaster" id="testformguidMaster" type="hidden" />
+
+                        <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>
+
+                        <a href="javascript:void(0)" id="btnSearchSave" title="保存" class="easyui-linkbutton" plain="false" onclick="tbSearchSave()">保存</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>
+                <tr>
+                    <th data-options="field:'BARCODE',title:'产品条码',align:'left',sortable:false,width:160"></th>
+                    <th data-options="field:'GOODSCODE',title:'产品编码',align:'left',sortable:false,width:160"></th>
+                </tr>
+            </thead>
+        </table>
+    </div>
+
+    <script type="text/javascript">
+
+        $(document).ready(function () {
+            var ctime = new Date();
+            var beginDate = ctime.getFullYear() + "-" + (ctime.getMonth() + 1) + "-" + ctime.getDate();
+            var endDate = ctime.getFullYear() + "-" + (ctime.getMonth() + 1) + "-" + ctime.getDate();
+            $("#datebeginMaster").datebox("setValue", beginDate);
+            $("#dateendMaster").datebox("setValue", endDate);
+
+
+            //alert(request('tfid'));
+        });
+
+        //清空恢复默认值
+        function toClear() {
+            var ctime = new Date();
+            var beginDate = ctime.getFullYear() + "-" + (ctime.getMonth() + 1) + "-" + ctime.getDate();
+            var endDate = ctime.getFullYear() + "-" + (ctime.getMonth() + 1) + "-" + ctime.getDate();
+            $("#datebeginMaster").datebox("setValue", beginDate);
+            $("#dateendMaster").datebox("setValue", endDate);
+        }
+
+        //搜索提交
+        function tbSearchSubmit() {
+            if ($('#ffMaster').form("validate")) {
+                $('#DataGridMaster').datagridLoad({
+                    title: '',
+                    queryParams: $('#ffMaster').serializeJson(),
+                    url: 'testform_addgoods.ashx?m=master',
+                    fixWidth: 160,
+                    mergeWidth: 100,
+                    splitChar: '_',
+                    columnMenu: '#btnColumnMenu',
+                    columnMoving: true
+                });
+            }
+        }
+
+        //搜索按钮
+        function tbSearch() {
+            $('#tbSearchDiv').toggle();
+            $('#DataGridMaster').datagrid('resize');
+        }
+
+        //刷新
+        function tbReload() {
+            tbSearchSubmit();
+        }
+
+        //保存产品
+        function tbSearchSave() {
+            $('#testformguidMaster').val(request('tfid'));
+            $.dialog.save({
+                formid: 'ffMaster',
+                datagridid: 'DataGridMaster',
+                url: 'testform_addgoods.ashx'
+            });
+        }
+
+    </script>
+</body>
+</html>

+ 136 - 0
wwwroot/mes/pm/testform/testform_defect.html

@@ -0,0 +1,136 @@
+<!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>
+    <link rel="shortcut icon" href="/img/logo.png" />
+    <link rel="bookmark" href="/img/logo.png" />
+    <link rel="stylesheet" type="text/css" href="/plugins/easyui/themes/dongke/easyui.css">
+    <link rel="stylesheet" type="text/css" href="/plugins/easyui/themes/icon.css">
+    <link rel="stylesheet" type="text/css" href="/plugins/xeasyui/xuwell.css">
+    <script type="text/javascript" src="/plugins/easyui/jquery.min.js"></script>
+    <script type="text/javascript" src="/plugins/easyui/jquery.easyui.min.js"></script>
+    <script type="text/javascript" src="/plugins/easyui/locale/easyui-lang-zh_CN.js"></script>
+    <script type="text/javascript" src="/plugins/xeasyui/xuwell.js"></script>
+</head>
+<body class="easyui-layout">
+    <!--
+        <input class="easyui-combobox w-input" id="叶子" name="叶子" data-options="prompt:'请填写叶子...',tipPosition:'top',url:'/mes/list.ashx?m=truefalse',method:'get',valueField:'text',textField:'text',panelHeight:'200px',editable:'true'" style="width:100%;height:32px;">
+        <input class="easyui-filebox" id="图片" name="图片" data-options="prompt:'请选择图片...',tipPosition:'top',buttonText:'选择图片',buttonAlign:'right',accept:'image/*',onChange:$.imagePreview" style="width:100%;height:32px;" >
+    -->
+    <div data-options="region:'center',plain:true,border:false">
+        <form id="testformForm" method="post" class="w-form">
+            <div class="w-field"><div id="ID2" style="display:none;" data-field="true" class="w-fieldvalue"></div></div>
+            <div class="w-div">
+                <div class="w-fieldbar" onclick="$('#more1').toggle()" style="cursor:pointer;"></div>
+            </div>
+            <div id="more1" style="display:block;">
+                <div class="w-div">
+                    <div class="w-fieldname">GUID:</div>
+                    <div class="w-field"><div id="GUID" data-field="true" class="w-fieldvalue"></div></div>
+                </div>
+                <div class="w-div">
+                    <div class="w-fieldname">有效标识:</div>
+                    <div class="w-field"><div id="VALUEFLAG" data-field="true" class="w-fieldvalue"></div></div>
+                </div>
+                <div class="w-div">
+                    <div class="w-fieldname">账套ID:</div>
+                    <div class="w-field"><div id="ACCOUNTID" data-field="true" class="w-fieldvalue"></div></div>
+                </div>
+                <div class="w-div">
+                    <div class="w-fieldname">创建工号ID:</div>
+                    <div class="w-field"><div id="CREATEUSERID" data-field="true" class="w-fieldvalue"></div></div>
+                </div>
+                <div class="w-div">
+                    <div class="w-fieldname">创建时间:</div>
+                    <div class="w-field"><div id="CREATETIME" data-field="true" class="w-fieldvalue"></div></div>
+                </div>
+                <div class="w-div">
+                    <div class="w-fieldname">更新工号ID:</div>
+                    <div class="w-field"><div id="UPDATEUSERID" data-field="true" class="w-fieldvalue"></div></div>
+                </div>
+                <div class="w-div">
+                    <div class="w-fieldname">更新时间:</div>
+                    <div class="w-field"><div id="UPDATETIME" data-field="true" class="w-fieldvalue"></div></div>
+                </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">实验单号(YYYYMMDD+2):</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="NAME" data-field="true" class="w-fieldvalue"></div></div>
+                </div>
+                <div class="w-div">
+                    <div class="w-fieldname">负责人:</div>
+                    <div class="w-field"><div id="PERSON" data-field="true" class="w-fieldvalue"></div></div>
+                </div>
+                <div class="w-div">
+                    <div class="w-fieldname">实验方法:</div>
+                    <div class="w-field"><div id="METHOD" data-field="true" class="w-fieldvalue"></div></div>
+                </div>
+                <div class="w-div">
+                    <div class="w-fieldname">实验结果:</div>
+                    <div class="w-field"><div id="RESULT" data-field="true" class="w-fieldvalue"></div></div>
+                </div>
+                <div class="w-div">
+                    <div class="w-fieldname">状态(0:进行中,1:完成):</div>
+                    <div class="w-field"><div id="STATE" data-field="true" class="w-fieldvalue"></div></div>
+                </div>
+            </div>
+            <div class="w-div">
+                <div class="w-fieldbar" onclick="$('#more3').toggle()" style="cursor:pointer;"></div>
+            </div>
+            <div id="more3" style="display:block;">
+                <div class="w-div">
+                    <div class="w-fieldname">工序缺陷:</div>
+                    <!--<div class="w-field"><input class="easyui-textbox" id="DEFECTID" name="DEFECTID" data-options="required:false,prompt:'请填写ID...',tipPosition:'top'" style="width:100%;height:32px;"></div>-->
+                    <div class="w-field">
+                        <input class="easyui-combobox" id="DEFECTID" name="DEFECTID" data-options="required:false,prompt:'',tipPosition:'top',url:'testform.ashx?m=getDefect',method:'get',valueField:'DEFECTID',textField:'DEFECT',panelHeight:'300px',multiple:true,editable:'true'," style="width: 100%; height: 32px;">
+                    </div>
+                </div>
+            </div>
+        </form>
+    </div>
+    <div data-options="region:'south',border:false" class="w-bar">
+        <a href="javascript:void(0)" id="testformButtonSave" class="easyui-linkbutton" data-options="iconCls:'icon-save'" onclick="testformButtonSubmit_Click()">保存</a>
+        <a href="javascript:void(0)" id="testformButtonClose" class="easyui-linkbutton" data-options="iconCls:'icon-cancel'" onclick="testformButtonCancel_Click()">关闭</a>
+    </div>
+
+    <script type="text/javascript">
+
+        $(function () {
+            $('#testformForm').formLoad({
+                url: 'testform.ashx?m=t'
+            });
+            $('#testformForm').formLoad({
+                url: 'testform.ashx?m=getolddefect'
+            });
+            $('#more1').toggle();
+            $('#more2').toggle();
+        });
+
+        function testformButtonSubmit_Click() {
+            var id = $("#ID2").html()
+            $.dialog.save({
+                formid: 'testformForm',
+                datagridid: 'testformDatagrid',
+                url: 'testform.ashx?m=ud&id='+id
+            });
+        }
+
+        function testformButtonCancel_Click() {
+            $.dialog.close();
+        }
+
+    </script>
+</body>
+</html>

+ 137 - 0
wwwroot/mes/pm/testform/testform_detail.html

@@ -0,0 +1,137 @@
+<!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>
+    <link rel="shortcut icon" href="/img/logo.png" />
+    <link rel="bookmark" href="/img/logo.png" />
+    <link rel="stylesheet" type="text/css" href="/plugins/easyui/themes/dongke/easyui.css">
+    <link rel="stylesheet" type="text/css" href="/plugins/easyui/themes/icon.css">
+    <link rel="stylesheet" type="text/css" href="/plugins/xeasyui/xuwell.css">
+    <script type="text/javascript" src="/plugins/easyui/jquery.min.js"></script>
+    <script type="text/javascript" src="/plugins/easyui/jquery.easyui.min.js"></script>
+    <script type="text/javascript" src="/plugins/easyui/locale/easyui-lang-zh_CN.js"></script>
+    <script type="text/javascript" src="/plugins/xeasyui/xuwell.js"></script>
+</head>
+<body class="easyui-layout">
+    <div data-options="region:'center',plain:true,border:false">
+        <form id="testformForm" method="post" class="w-form">
+            <div class="w-div">
+                <div class="w-fieldbar" onclick="$('#more1').toggle()" style="cursor:pointer;"></div>
+            </div>
+            <div id="more1" style="display:block;">
+                <div class="w-div">
+                    <div class="w-fieldname">GUID:</div>
+                    <div class="w-field"><div id="GUID" data-field="true" class="w-fieldvalue"></div></div>
+                </div>
+                <div class="w-div">
+                    <div class="w-fieldname">有效标识:</div>
+                    <div class="w-field"><div id="VALUEFLAG" data-field="true" class="w-fieldvalue"></div></div>
+                </div>
+                <div class="w-div">
+                    <div class="w-fieldname">账套ID:</div>
+                    <div class="w-field"><div id="ACCOUNTID" data-field="true" class="w-fieldvalue"></div></div>
+                </div>
+                <div class="w-div">
+                    <div class="w-fieldname">创建工号ID:</div>
+                    <div class="w-field"><div id="CREATEUSERID" data-field="true" class="w-fieldvalue"></div></div>
+                </div>
+                <div class="w-div">
+                    <div class="w-fieldname">创建时间:</div>
+                    <div class="w-field"><div id="CREATETIME" data-field="true" class="w-fieldvalue"></div></div>
+                </div>
+                <div class="w-div">
+                    <div class="w-fieldname">更新工号ID:</div>
+                    <div class="w-field"><div id="UPDATEUSERID" data-field="true" class="w-fieldvalue"></div></div>
+                </div>
+                <div class="w-div">
+                    <div class="w-fieldname">更新时间:</div>
+                    <div class="w-field"><div id="UPDATETIME" data-field="true" class="w-fieldvalue"></div></div>
+                </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">实验单号(YYYYMMDD+2):</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="NAME" data-field="true" class="w-fieldvalue"></div></div>
+                </div>
+                <div class="w-div">
+                    <div class="w-fieldname">负责人:</div>
+                    <div class="w-field"><div id="PERSON" data-field="true" class="w-fieldvalue"></div></div>
+                </div>
+                <div class="w-div">
+                    <div class="w-fieldname">实验目的:</div>
+                    <div class="w-field"><div id="OBJECTIVES" data-field="true" class="w-fieldvalue"></div></div>
+                </div>
+                <div class="w-div">
+                    <div class="w-fieldname">实验背景:</div>
+                    <div class="w-field"><div id="BACKGROUND" data-field="true" class="w-fieldvalue"></div></div>
+                </div>
+                <div class="w-div">
+                    <div class="w-fieldname">实验方法:</div>
+                    <div class="w-field"><div id="METHOD" data-field="true" class="w-fieldvalue"></div></div>
+                </div>
+                <div class="w-div">
+                    <div class="w-fieldname">实验结果:</div>
+                    <div class="w-field"><div id="RESULT" data-field="true" class="w-fieldvalue"></div></div>
+                </div>
+                <div class="w-div">
+                    <div class="w-fieldname">状态(0:进行中,1:完成):</div>
+                    <div class="w-field"><div id="STATE" data-field="true" class="w-fieldvalue"></div></div>
+                </div>
+            </div>
+        </form>
+    </div>
+    <div id="testformToolbar" data-options="region:'south',border:false" class="w-bar">
+        <a href="javascript:void(0)" style="display:none" id="testformButtonCopy" class="easyui-linkbutton" data-options="iconCls:'icon-add'" onclick="testformButtonCopy_Click()">复制</a>
+        <a href="javascript:void(0)" style="display:none" id="testformButtonUpdate" class="easyui-linkbutton" data-options="iconCls:'icon-edit'" onclick="testformButtonEdit_Click()">修改</a>
+        <a href="javascript:void(0)" style="display:none" id="testformButtonDelete" class="easyui-linkbutton" data-options="iconCls:'icon-remove'" onclick="testformButtonDelete_Click()">删除</a>
+        <a href="javascript:void(0)" id="testformButtonClose" class="easyui-linkbutton" data-options="iconCls:'icon-cancel'" onclick="testformButtonCancel_Click()">关闭</a>
+    </div>
+    <script type="text/javascript">
+
+        $(function () {
+            $('#testformToolbar').buttonLoad({
+                url:'testform.ashx?m=b'
+            });
+            $('#testformForm').formLoad({
+                url: 'testform.ashx?m=t'
+            });
+            $('#more1').toggle();
+        });
+
+        function testformButtonCopy_Click() {
+            $.dialog.go({
+                url: 'testform_add.html?id=' + request('id')
+            });
+        }
+
+        function testformButtonEdit_Click() {
+            $.dialog.go({
+                datagridid: 'testformDatagrid',
+                url: 'testform_edit.html?id=' + request('id')
+            });
+        }
+
+        function testformButtonDelete_Click() {
+            $.dialog.delete({
+                url: 'testform.ashx?m=d&id=' + request('id')
+            });
+        }
+
+        function testformButtonCancel_Click() {
+            $.dialog.close();
+        }
+
+    </script>
+</body>
+</html>

+ 104 - 0
wwwroot/mes/pm/testform/testform_edit.html

@@ -0,0 +1,104 @@
+<!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>
+    <link rel="shortcut icon" href="/img/logo.png" />
+    <link rel="bookmark" href="/img/logo.png" />
+    <link rel="stylesheet" type="text/css" href="/plugins/easyui/themes/dongke/easyui.css">
+    <link rel="stylesheet" type="text/css" href="/plugins/easyui/themes/icon.css">
+    <link rel="stylesheet" type="text/css" href="/plugins/xeasyui/xuwell.css">
+    <script type="text/javascript" src="/plugins/easyui/jquery.min.js"></script>
+    <script type="text/javascript" src="/plugins/easyui/jquery.easyui.min.js"></script>
+    <script type="text/javascript" src="/plugins/easyui/locale/easyui-lang-zh_CN.js"></script>
+    <script type="text/javascript" src="/plugins/xeasyui/xuwell.js"></script>
+</head>
+<body class="easyui-layout">
+    <!--
+        <input class="easyui-combobox w-input" id="叶子" name="叶子" data-options="prompt:'请填写叶子...',tipPosition:'top',url:'/mes/list.ashx?m=truefalse',method:'get',valueField:'text',textField:'text',panelHeight:'200px',editable:'true'" style="width:100%;height:32px;">
+        <input class="easyui-filebox" id="图片" name="图片" data-options="prompt:'请选择图片...',tipPosition:'top',buttonText:'选择图片',buttonAlign:'right',accept:'image/*',onChange:$.imagePreview" style="width:100%;height:32px;" >
+    -->
+    <div data-options="region:'center',plain:true,border:false">
+        <form id="testformForm" method="post" class="w-form">
+            <div class="w-div">
+                <div class="w-fieldbar" onclick="$('#more1').toggle()" style="cursor:pointer;"></div>
+            </div>
+            <div id="more1" style="display:block;">
+                <div class="w-div">
+                    <div class="w-fieldname">GUID:</div>
+                    <div class="w-field"><input disabled class="easyui-textbox" id="GUID" name="GUID" data-options="required:false,prompt:'请填写GUID...',tipPosition:'top'" style="width:100%;height:32px;"></div>
+                </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"><input class="easyui-textbox" readonly id="ID" name="ID" data-options="required:true,prompt:'请填写ID...',tipPosition:'top'" style="width:100%;height:32px;"></div>
+                </div>
+                <div class="w-div">
+                    <div class="w-fieldname">实验单名称:</div>
+                    <div class="w-field"><input class="easyui-textbox" id="NAME" name="NAME" data-options="required:true,prompt:'请填写NAME...',tipPosition:'top'" style="width:100%;height:32px;"></div>
+                </div>
+                <div class="w-div">
+                    <div class="w-fieldname">负责人:</div>
+                    <div class="w-field"><input class="easyui-textbox" id="PERSON" name="PERSON" data-options="required:true,prompt:'请填写PERSON...',tipPosition:'top'" style="width:100%;height:32px;"></div>
+                </div>
+                <div class="w-div">
+                    <div class="w-fieldname">实验目的:</div>
+                    <div class="w-field"><input class="easyui-textbox" id="OBJECTIVES" name="OBJECTIVES" data-options="required:true,prompt:'请填写OBJECTIVES...',tipPosition:'top',multiline:true" style="width:100%;height:128px;"></div>
+                </div>
+                <div class="w-div">
+                    <div class="w-fieldname">实验背景:</div>
+                    <div class="w-field"><input class="easyui-textbox" id="BACKGROUND" name="BACKGROUND" data-options="required:true,prompt:'请填写BACKGROUND...',tipPosition:'top',multiline:true" style="width:100%;height:128px;"></div>
+                </div>
+                <div class="w-div">
+                    <div class="w-fieldname">实验方法:</div>
+                    <div class="w-field"><input class="easyui-textbox" id="METHOD" name="METHOD" data-options="required:true,prompt:'请填写METHOD...',tipPosition:'top',multiline:true" style="width:100%;height:128px;"></div>
+                </div>
+                <div class="w-div">
+                    <div class="w-fieldname">实验结果:</div>
+                    <div class="w-field"><input class="easyui-textbox" id="RESULT" name="RESULT" data-options="required:false,prompt:'请填写RESULT...',tipPosition:'top',multiline:true" style="width:100%;height:128px;"></div>
+                </div>
+                <div class="w-div">
+                    <div class="w-fieldname">状态:</div>
+                    <div class="w-field">
+                        <input class="easyui-combobox" id="STATE" name="STATE" data-options="required:true,value:'',valueField:'value',textField:'text',
+                          data:[{'text': '进行中', 'value': '0'}, {'text': '完成', 'value': '1'}]" style=" width: 100%; height: 32px;">
+                    </div>
+                </div>
+            </div>
+        </form>
+    </div>
+    <div data-options="region:'south',border:false" class="w-bar">
+        <a href="javascript:void(0)" id="testformButtonSave" class="easyui-linkbutton" data-options="iconCls:'icon-save'" onclick="testformButtonSubmit_Click()">保存</a>
+        <a href="javascript:void(0)" id="testformButtonClose" class="easyui-linkbutton" data-options="iconCls:'icon-cancel'" onclick="testformButtonCancel_Click()">关闭</a>
+    </div>
+    <script type="text/javascript">
+
+        $(function () {
+            $('#testformForm').formLoad({
+                url: 'testform.ashx?m=t'
+            });
+            $('#more1').toggle();
+        });
+
+        function testformButtonSubmit_Click() {
+            $.dialog.save({
+                formid: 'testformForm',
+                datagridid: 'testformDatagrid',
+                url: 'testform.ashx?m=u&id=' + request('id')
+            });
+        }
+
+        function testformButtonCancel_Click() {
+            $.dialog.close();
+        }
+
+    </script>
+</body>
+</html>

+ 119 - 0
wwwroot/mes/pm/testform/testform_importBarCode.ashx

@@ -0,0 +1,119 @@
+<%@ WebHandler Language="C#" Class="testform_importBarCode" %>
+
+using System;
+using System.Web;
+using System.Web.SessionState;
+using System.Data;
+using DK.XuWei.WebMes;
+using Curtain.DataAccess;
+using Curtain.Log;
+
+//EXCEL模板,要求
+
+//...
+public class testform_importBarCode : IHttpHandler, IReadOnlySessionState
+{
+
+    public void ProcessRequest(HttpContext context)
+    {
+        context.Response.ContentType = "text/plain";
+
+        //上传文件
+        string filePath = "/mes/upload/"+DateTime.Now.ToString("yyyy-MM-dd");
+        System.IO.Directory.CreateDirectory(context.Server.MapPath(filePath));
+        string fileName = filePath + "/实验单" + DateTime.Now.ToString("yyyy-MM-dd");
+        fileName += System.IO.Path.GetExtension(context.Request.Files[0].FileName);
+        string diskFileName = context.Server.MapPath(fileName);
+        if (System.IO.File.Exists(diskFileName)) System.IO.File.Delete(diskFileName);
+        context.Request.Files[0].SaveAs(diskFileName);
+
+        //读excel
+        DataTable dt = Import.ExcelToDataTable(diskFileName);
+
+        //Logger.Debug(dt.Rows.Count.ToString());
+
+        //写入数据
+        using (IDataAccess conn = DataAccess.Create())
+        {
+            int errorLineNo = 0;
+            conn.BeginTransaction();
+            try
+            {
+                #region 删除实验单所有产品
+                object a = context.Request["testformguidMaster"];
+                int result0 = conn.ExecuteNonQuery(@"
+                    DELETE 
+                        TP_PM_TESTFORM2_GOODS 
+                    WHERE 
+                        TESTFORMGUID = @TESTFORMGUID@ 
+                    ",
+                    new CDAParameter("TESTFORMGUID", context.Request["testformguidMaster"])
+                );
+                #endregion
+                //判断字段包含
+                string barCodeStr = "";
+                for (int i=0;i<dt.Rows.Count;i++)
+                {
+                    if (dt.Rows[i]["产品条码"] + "" == "") {
+                        continue;
+                    }
+                    if (barCodeStr.IndexOf(dt.Rows[i]["产品条码"] + ",") > -1) { 
+                        continue;
+                    }
+                    barCodeStr += dt.Rows[i]["产品条码"] + ",";
+                    /*#region 校验重复
+                    object isExists = conn.ExecuteScalar(
+                        @"SELECT DISTINCT 1 FROM TP_PM_TESTFORM2_GOODS WHERE TESTFORMGUID = @TESTFORMGUID@ AND BARCODE = REPLACE(@BARCODE@,' ','') AND VALUEFLAG = 1",
+                        new CDAParameter("BARCODE", dt.Rows[i]["产品条码"]),
+                        new CDAParameter("TESTFORMGUID",context.Request["testformguidMaster"])
+                    );
+                    if (isExists != null)
+                    {
+                        continue;
+                    }
+                    #endregion*/
+
+                    //记录行号
+                    errorLineNo = i;
+
+                    int result = conn.ExecuteNonQuery(@"
+                        INSERT INTO TP_PM_TESTFORM2_GOODS (
+                            TESTFORMGUID,
+                            BARCODE,
+                            ACCOUNTID,CREATEUSERID,UPDATEUSERID
+                        ) VALUES (
+                            @TESTFORMGUID@,
+                            REPLACE(@BARCODE@,' ',''),
+                            @ACCOUNTID@,@CREATEUSERID@,@UPDATEUSERID@
+                        )
+                        ",
+                        new CDAParameter("TESTFORMGUID",context.Request["testformguidMaster"]),
+                        new CDAParameter("BARCODE",dt.Rows[i]["产品条码"].ToString()),
+                        new CDAParameter("ACCOUNTID",HttpContext.Current.Session["accountId"]),
+                        new CDAParameter("CREATEUSERID",HttpContext.Current.Session["userId"]),
+                        new CDAParameter("UPDATEUSERID",HttpContext.Current.Session["userId"])
+                    );
+                }
+                conn.Commit();
+                context.Response.Write(new JsonResult(JsonStatus.success).ToJson());
+            }
+            catch(Exception e)
+            {
+                Logger.Error(e);
+                conn.Rollback();
+                context.Response.Write(new JsonResult(JsonStatus.otherError) { message = "行号:" + errorLineNo + " 数据错误,请检查!" }.ToJson());
+            }
+
+        }
+
+
+    }
+    public bool IsReusable
+    {
+        get
+        {
+            return false;
+        }
+    }
+
+}

+ 60 - 0
wwwroot/mes/pm/testform/testform_importBarCode.html

@@ -0,0 +1,60 @@
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+    <meta charset="utf-8" />
+    <meta name="keywords" content="dongke,mes,ibossmes">
+    <meta name="description" content="制造企业生产过程执行管理系统">
+    <meta name="author" content="xuwei">
+    <title>东科软件</title>
+    <link rel="shortcut icon" href="/img/logo.png" />
+    <link rel="bookmark" href="/img/logo.png" />
+    <link rel="stylesheet" type="text/css" href="/plugins/easyui/themes/dongke/easyui.css">
+    <link rel="stylesheet" type="text/css" href="/plugins/easyui/themes/icon.css">
+    <link rel="stylesheet" type="text/css" href="/plugins/xeasyui/xuwell.css">
+    <script type="text/javascript" src="/plugins/easyui/jquery.min.js"></script>
+    <script type="text/javascript" src="/plugins/easyui/jquery.easyui.min.js"></script>
+    <script type="text/javascript" src="/plugins/easyui/locale/easyui-lang-zh_CN.js"></script>
+    <script type="text/javascript" src="/plugins/xeasyui/xuwell.js"></script>
+</head>
+<body class="easyui-layout">
+    <script type="text/javascript">
+        $(document).ready(function () {
+
+        });
+        function submitForm() {
+            $('#testformguidMaster').val(request('tfid'));
+            $.dialog.save({
+                formid: 'ff',
+                url: 'testform_importBarCode.ashx'
+            });
+        }
+
+        function cancelForm() {
+            $.dialog.close();
+        }
+    </script>
+
+    <div data-options="region:'center',plain:true,border:false">
+        <form id="ff" method="post" class="w-form" enctype="multipart/form-data">
+            <div class="w-div">
+                <div class="w-fieldbar" onclick="$('#more1').toggle()" style="cursor:pointer;"></div>
+            </div>
+            <div id="more1" style="display:block;">
+                <input name="testformguidMaster" id="testformguidMaster" type="hidden" />
+                <div class="w-div">
+                    <div class="w-fieldname">Excel数据文件:</div>
+                    <div class="w-field"><input class="easyui-filebox w-input" id="文件" name="文件" data-options="required:true,prompt:'请选择Excel文件...',tipPosition:'bottom',buttonText:'选择文件',buttonAlign:'right',accept:'application/vnd.ms-excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'" style="width:100%;height:32px;"></div>
+                </div>
+                <div class="w-div">
+                    <div class="w-fieldname">说明:</div>
+                    <div class="w-field"><div class="w-fieldvalue">导入数据,将覆盖看板数据,请准确核对!<a href="testform_importBarCode.xlsx" target="_blank">下载模板</a> </div></div>
+                </div>
+            </div>
+        </form>
+    </div>
+    <div data-options="region:'south',border:false" class="w-bar">
+        <a href="javascript:void(0)" id="toolbarSave" class="easyui-linkbutton" data-options="iconCls:'icon-save'" onclick="submitForm()">产品导入</a>
+        <a href="javascript:void(0)" id="toolbarClose" class="easyui-linkbutton" data-options="iconCls:'icon-cancel'" onclick="cancelForm()">取消</a>
+    </div>
+</body>
+</html>

BIN
wwwroot/mes/pm/testform/testform_importBarCode.xlsx


+ 257 - 0
wwwroot/mes/pm/testform/testform_index.html

@@ -0,0 +1,257 @@
+<!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>
+    <link rel="shortcut icon" href="/img/logo.png" />
+    <link rel="bookmark" href="/img/logo.png" />
+    <link rel="stylesheet" type="text/css" href="/plugins/easyui/themes/dongke/easyui.css">
+    <link rel="stylesheet" type="text/css" href="/plugins/easyui/themes/icon.css">
+    <link rel="stylesheet" type="text/css" href="/plugins/xeasyui/xuwell.css">
+    <script type="text/javascript" src="/plugins/easyui/jquery.min.js"></script>
+    <script type="text/javascript" src="/plugins/easyui/jquery.easyui.min.js"></script>
+    <script type="text/javascript" src="/plugins/easyui/locale/easyui-lang-zh_CN.js"></script>
+    <script type="text/javascript" src="/plugins/xeasyui/xuwell.js"></script>
+    <link href="/plugins/xeasyui/toolbar.min.css" rel="stylesheet" />
+</head>
+<body class="easyui-layout">
+    <div data-options="region:'center',plain:true,border:false">
+        <!--工具条-->
+        <div id="testformToolbar" class="i-toolbar">
+            <a href="javascript:void(0)" style="display:none" id="testformButtonInsert" title="添加" class="easyui-linkbutton" iconcls="icon-add" plain="true" onclick="testformButtonInsert_Click()">添加</a>
+            <a href="javascript:void(0)" style="display:none" id="testformButtonUpdate" title="编辑" class="easyui-linkbutton" iconcls="icon-edit" plain="true" onclick="testformButtonUpdate_Click()">修改</a>
+            <a href="javascript:void(0)" style="display:none" id="testformButtonDelete" title="删除" class="easyui-linkbutton" iconcls="icon-remove" plain="true" onclick="testformButtonDelete_Click()">删除</a>
+            <a href="javascript:void(0)" style="display:none" id="testformButtonDetail" title="详细" class="easyui-linkbutton" iconcls="icon-detail" plain="true" onclick="testformButtonDetail_Click()">详细</a>
+            <a href="javascript:void(0)" style="display:none" id="testformButtonCheckbox" title="显示复选框" class="easyui-linkbutton" iconcls="icon-ok" plain="true" toggle="true" onclick="testformButtonCheck_Click()">复选</a>
+            <a href="javascript:void(0)" style="display:none" id="testformButtonSearch" title="搜索" class="easyui-linkbutton" iconcls="icon-search" plain="true" toggle="true" onclick="testformButtonSearch_Click()">搜索</a>
+
+            <a href="javascript:void(0)" style="display:none" id="testformButtonUser" title="操作员" class="easyui-linkbutton" iconcls="icon-add" plain="true" onclick="testformButtonUser_Click()">设置操作员</a>
+            <!--<a href="javascript:void(0)" style="display:none" id="testformButtonDefect" title="统计缺陷" class="easyui-linkbutton" iconcls="icon-add" plain="true" onclick="testformButtonDefect_Click()">设置统计缺陷</a>-->
+            <a href="javascript:void(0)" style="display:none" id="testformButtonAddGoods" title="批量添加产品" class="easyui-linkbutton" iconcls="icon-add" plain="true" onclick="testformButtonAddGoods_Click()">批量添加产品</a>
+            <a href="javascript:void(0)" style="display:none" id="testformButtonImport" title="导入" class="easyui-linkbutton" iconcls="icon-excel" plain="true" onclick="testformButtonImport_Click()">导入</a>
+            <a href="javascript:void(0)" style="display:none" id="testformButtonExport" title="导出" class="easyui-linkbutton" iconcls="icon-excel" plain="true" onclick="testformButtonExport_Click()">导出</a>
+            <a href="javascript:void(0)" id="testformButtonReload" title="刷新" class="easyui-linkbutton" iconcls="icon-reload" plain="true" onclick="testformButtonReload_Click()">刷新</a>
+
+            <a href="javascript:void(0)" id="btnHelp" title="帮助" class="easyui-linkbutton" iconcls="icon-help" plain="true" onclick="tbHelp()">帮助</a>
+            <div id="testformSearchDiv" style="display:none;padding:10px;">
+                <form id="testformForm">
+                    <div>
+                        实验单号:
+                        <input class="easyui-textbox" id="ID" name="ID" data-options="required:false,prompt:'',tipPosition:'top'" style="width:80px;height:32px;">
+                        实验单名称:
+                        <input class="easyui-textbox" id="NAME" name="NAME" data-options="required:false,prompt:'',tipPosition:'top'" style="width:80px;height:32px;">
+                        负责人:
+                        <input class="easyui-textbox" id="PERSON" name="PERSON" data-options="required:false,prompt:'',tipPosition:'top'" style="width:80px;height:32px;">
+                         
+                        <a href="javascript:void(0)" id="testformButtonSearchReset" title="清空" class="easyui-linkbutton" plain="false" onclick="$('#testformForm').form('clear')">清空</a>
+                        <a href="javascript:void(0)" id="testformButtonSearchSubmit" title="搜索" class="easyui-linkbutton" plain="false" onclick="testformButtonSearchSubmit_Click()">搜索</a>
+                    </div>
+                </form>
+            </div>
+        </div>
+        <!--表格-->
+        <table id="testformDatagrid" data-options="toolbar: '#testformToolbar',onDblClickRow: testformDatagridDblClickRow,showFooter:false">
+
+            <thead>
+                <tr>
+                    <th data-options="field:'SID',title:'SID',width:220,align:'left',checkbox:true,hidden:true">SID</th>
+                    <th data-options="field:'ID',title:'实验单号',align:'left',sortable:true"></th>
+                    <th data-options="field:'NAME',title:'实验单名称',align:'left',sortable:true"></th>
+                    <th data-options="field:'PERSON',title:'负责人',align:'left',sortable:true"></th>
+                    <th data-options="field:'STATE',title:'状态',align:'left',sortable:true"></th>
+                    <th data-options="field:'GOODSCOUNT',title:'产品数量',align:'left',sortable:true"></th>
+                    <th data-options="field:'USERS',title:'操作员',align:'left',sortable:true"></th>
+                    <!--<th data-options="field:'PROCEDUREDEFECTS',title:'统计工序和缺陷',align:'left',sortable:true"></th>-->
+                    <th data-options="field:'VALUEFLAG',title:'有效标识',align:'left',sortable:true"></th>
+                    <th data-options="field:'ACCOUNTID',title:'账套ID',align:'left',sortable:true"></th>
+                    <th data-options="field:'CREATEUSERID',title:'创建工号ID',align:'left',sortable:true"></th>
+                    <th data-options="field:'CREATETIME',title:'创建时间',align:'left',sortable:true"></th>
+                    <th data-options="field:'UPDATEUSERID',title:'更新工号ID',align:'left',sortable:true"></th>
+                    <th data-options="field:'UPDATETIME',title:'更新时间',align:'left',sortable:true"></th>
+                </tr>
+            </thead>
+        </table>
+    </div>
+    <script type="text/javascript">
+
+        //加载完成
+        $(function () {
+            //加载按钮
+            $('#testformToolbar').buttonLoad({
+                url:'testform.ashx?m=b'
+            });
+            //加载表格数据
+            testformButtonSearchSubmit_Click();
+        });
+
+        //添加按钮
+        function testformButtonInsert_Click() {
+            $('#testformDatagrid').datagridDialog({
+                title: '添加数据',
+                width: 640,
+                height: 480,
+                url: 'testform_add.html'
+            });
+        }
+
+        //批量添加产品
+        function testformButtonAddGoods_Click() {
+
+            var titleName = $('#testformDatagrid').datagrid('getSelected') != null ? $('#testformDatagrid').datagrid('getSelected')['NAME'] : '';
+            var testFormId = $('#testformDatagrid').datagrid('getSelected') != null ? $('#testformDatagrid').datagrid('getSelected')['ID'] : '';
+
+            $('#testformDatagrid').datagridDialog({
+                title: titleName,
+                width: 1024,
+                height: 600,
+                url: 'testform_addgoods.html?tfid=' + testFormId,
+                requireSelect: true
+            });
+        }
+
+        //修改按钮
+        function testformButtonUpdate_Click() {
+            $('#testformDatagrid').datagridDialog({
+                title: '修改数据',
+                width: 640,
+                height: 480,
+                url: 'testform_edit.html',
+                requireSelect: true
+            });
+        }
+
+        //删除按钮
+        function testformButtonDelete_Click() {
+            $('#testformDatagrid').datagridPost({
+                title:'删除操作',
+                url: 'testform.ashx?m=d',
+                onValidate: function (r) {
+                    var goodsCount = $('#testformDatagrid').datagrid('getSelected') != null ? parseInt($('#testformDatagrid').datagrid('getSelected')['GOODSCOUNT']) : 0;
+                    var state = $('#testformDatagrid').datagrid('getSelected') != null ? $('#testformDatagrid').datagrid('getSelected')['STATE'] : '';
+                    if (goodsCount > 0 || state == "完成") {
+                        return false;
+                    } else {
+                        return true;
+                    }
+                    
+                }
+            });
+        }
+
+        //详细按钮
+        function testformButtonDetail_Click() {
+            $('#testformDatagrid').datagridDialog({
+                title: '详细数据',
+                width: 640,
+                height: 480,
+                url: 'testform_detail.html',
+                requireSelect: true
+            });
+        }
+        
+        //复选按钮
+        function testformButtonCheck_Click() {
+            $('#testformDatagrid').datagridCheckbox({
+                buttonid: 'testformButtonCheckbox',
+                valuefield: 'SID'
+            });
+        }
+
+        //搜索按钮
+        function testformButtonSearch_Click() {
+            $('#testformSearchDiv').toggle();
+            $('#testformDatagrid').datagrid('resize');
+        }
+
+        //搜索提交
+        function testformButtonSearchSubmit_Click() {
+            $('#testformDatagrid').datagridLoad({
+                title: '实验单管理',
+                idField: 'SID',
+                queryParams: $('#testformForm').serializeJson(),
+                url: 'testform.ashx?m=s',
+                columnMoving: false
+            });
+        }
+
+        //设置操作员
+        function testformButtonUser_Click() {
+            $('#testformDatagrid').datagridDialog({
+                title: '设置操作员',
+                width: 640,
+                height: 480,
+                url: 'testform_user.html',
+                requireSelect: true
+            });
+        }
+
+        ////设置统计缺陷
+        //function testformButtonDefect_Click() {
+        //    $('#testformDatagrid').datagridDialog({
+        //        title: '设置统计缺陷',
+        //        width: 640,
+        //        height: 480,
+        //        url: 'testform_defect.html',
+        //        requireSelect: true
+        //    });
+        //}
+
+        //导入产品
+        function testformButtonImport_Click() {
+            var titleName = $('#testformDatagrid').datagrid('getSelected') != null ? $('#testformDatagrid').datagrid('getSelected')['NAME'] : '';
+            var testFormId = $('#testformDatagrid').datagrid('getSelected') != null ? $('#testformDatagrid').datagrid('getSelected')['ID'] : '';
+
+            $('#testformDatagrid').datagridDialog({
+                title: titleName+'  导入数据',
+                width: 640,
+                height: 380,
+                url: 'testform_importBarCode.html?tfid=' + testFormId,
+                requireSelect: true
+            });
+        }
+
+        //导出
+        function testformButtonExport_Click() {
+            //加载表头
+            var fields = $('#testformDatagrid').datagrid('getColumnFields');
+            var headers = [];
+            for (var i = 0; i < fields.length; i++) {
+                headers.push($('#testformDatagrid').datagrid('getColumnOption', fields[i])['title']);
+                //headers.push(fields[i]);
+            }
+            $('#testformDatagrid').datagridExport({
+                headers: headers,
+                fileName: '导出数据(TP_PM_TESTFORM).xls',
+                workSheet: '导出数据(TP_PM_TESTFORM)'
+            });
+        }
+
+        //刷新
+        function testformButtonReload_Click() {
+            testformButtonSearchSubmit_Click();
+        }
+
+        //帮助事件
+        function tbHelp() {
+            $('#testformDatagrid').datagridDialog({
+                title: '帮助',
+                width: 640,
+                height: 480,
+                url: 'rpt_help.html'
+            });
+        }
+
+        //表格双击
+        function testformDatagridDblClickRow(rowIndex, rowData) {
+            testformButtonDetail_Click();
+        }
+
+        function formatterTrueFalse(value, row, index) { return value == 'True' ? '是' : '否'; }
+        function stylerTrueFalse(value, row, index) { return value == 'True' ? 'color:black' : 'color:red'; }
+
+    </script>
+</body>
+</html>

+ 147 - 0
wwwroot/mes/pm/testform/testform_user.html

@@ -0,0 +1,147 @@
+<!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>
+    <link rel="shortcut icon" href="/img/logo.png" />
+    <link rel="bookmark" href="/img/logo.png" />
+    <link rel="stylesheet" type="text/css" href="/plugins/easyui/themes/dongke/easyui.css">
+    <link rel="stylesheet" type="text/css" href="/plugins/easyui/themes/icon.css">
+    <link rel="stylesheet" type="text/css" href="/plugins/xeasyui/xuwell.css">
+    <script type="text/javascript" src="/plugins/easyui/jquery.min.js"></script>
+    <script type="text/javascript" src="/plugins/easyui/jquery.easyui.min.js"></script>
+    <script type="text/javascript" src="/plugins/easyui/locale/easyui-lang-zh_CN.js"></script>
+    <script type="text/javascript" src="/plugins/xeasyui/xuwell.js"></script>
+</head>
+<body class="easyui-layout">
+    <!--
+        <input class="easyui-combobox w-input" id="叶子" name="叶子" data-options="prompt:'请填写叶子...',tipPosition:'top',url:'/mes/list.ashx?m=truefalse',method:'get',valueField:'text',textField:'text',panelHeight:'200px',editable:'true'" style="width:100%;height:32px;">
+        <input class="easyui-filebox" id="图片" name="图片" data-options="prompt:'请选择图片...',tipPosition:'top',buttonText:'选择图片',buttonAlign:'right',accept:'image/*',onChange:$.imagePreview" style="width:100%;height:32px;" >
+    -->
+    <div data-options="region:'center',plain:true,border:false">
+        <form id="testformForm" method="post" class="w-form">
+            <div id="ID2" style="display:none;" data-field="true" class="w-fieldvalue"></div>
+            <div class="w-div">
+                <div class="w-fieldbar" onclick="$('#more1').toggle()" style="cursor:pointer;"></div>
+            </div>
+            <div id="more1" style="display:block;">
+                <div class="w-div">
+                    <div class="w-fieldname">GUID:</div>
+                    <div class="w-field"><div id="GUID" data-field="true" class="w-fieldvalue"></div></div>
+                </div>
+                <div class="w-div">
+                    <div class="w-fieldname">有效标识:</div>
+                    <div class="w-field"><div id="VALUEFLAG" data-field="true" class="w-fieldvalue"></div></div>
+                </div>
+                <div class="w-div">
+                    <div class="w-fieldname">账套ID:</div>
+                    <div class="w-field"><div id="ACCOUNTID" data-field="true" class="w-fieldvalue"></div></div>
+                </div>
+                <div class="w-div">
+                    <div class="w-fieldname">创建工号ID:</div>
+                    <div class="w-field"><div id="CREATEUSERID" data-field="true" class="w-fieldvalue"></div></div>
+                </div>
+                <div class="w-div">
+                    <div class="w-fieldname">创建时间:</div>
+                    <div class="w-field"><div id="CREATETIME" data-field="true" class="w-fieldvalue"></div></div>
+                </div>
+                <div class="w-div">
+                    <div class="w-fieldname">更新工号ID:</div>
+                    <div class="w-field"><div id="UPDATEUSERID" data-field="true" class="w-fieldvalue"></div></div>
+                </div>
+                <div class="w-div">
+                    <div class="w-fieldname">更新时间:</div>
+                    <div class="w-field"><div id="UPDATETIME" data-field="true" class="w-fieldvalue"></div></div>
+                </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">实验单号(YYYYMMDD+2):</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="NAME" data-field="true" class="w-fieldvalue"></div></div>
+                </div>
+                <div class="w-div">
+                    <div class="w-fieldname">负责人:</div>
+                    <div class="w-field"><div id="PERSON" data-field="true" class="w-fieldvalue"></div></div>
+                </div>
+                <div class="w-div">
+                    <div class="w-fieldname">实验目的:</div>
+                    <div class="w-field"><div id="METHOD" data-field="true" class="w-fieldvalue"></div></div>
+                </div>
+                <div class="w-div">
+                    <div class="w-fieldname">实验背景:</div>
+                    <div class="w-field"><div id="METHOD" data-field="true" class="w-fieldvalue"></div></div>
+                </div>
+                <div class="w-div">
+                    <div class="w-fieldname">实验方法:</div>
+                    <div class="w-field"><div id="METHOD" data-field="true" class="w-fieldvalue"></div></div>
+                </div>
+                <div class="w-div">
+                    <div class="w-fieldname">实验结果:</div>
+                    <div class="w-field"><div id="RESULT" data-field="true" class="w-fieldvalue"></div></div>
+                </div>
+                <div class="w-div">
+                    <div class="w-fieldname">状态(0:进行中,1:完成):</div>
+                    <div class="w-field"><div id="STATE" data-field="true" class="w-fieldvalue"></div></div>
+                </div>
+            </div>
+            <div class="w-div">
+                <div class="w-fieldbar" onclick="$('#more3').toggle()" style="cursor:pointer;"></div>
+            </div>
+            <div id="more3" style="display:block;">
+                <div class="w-div">
+                    <div class="w-field"><div id="ID2" hidden="hidden" data-field="true" class="w-fieldvalue"></div></div>
+                </div>
+                <div class="w-div">
+                    <div class="w-fieldname">操作员:</div>
+                    <div class="w-field">
+                        <input class="easyui-combobox" id="USERCODE" name="USERCODE" data-options="required:false,prompt:'',url:'../../rpt/rpt.ashx?m=getUser&select=1',method:'get',valueField:'USERCODE',textField:'USERCODE',tipPosition:'top',panelHeight:'300px',editable:'true',multiple:true" style="width:100%;height:32px;">
+                        <!--<input class="easyui-textbox" id="USERID" name="USERID" data-options="required:false,prompt:'请填写ID...',tipPosition:'top'" style="width:100%;height:32px;">-->
+                    </div>
+                </div>
+            </div>
+        </form>
+    </div>
+    <div data-options="region:'south',border:false" class="w-bar">
+        <a href="javascript:void(0)" id="testformButtonSave" class="easyui-linkbutton" data-options="iconCls:'icon-save'" onclick="testformButtonSubmit_Click()">保存</a>
+        <a href="javascript:void(0)" id="testformButtonClose" class="easyui-linkbutton" data-options="iconCls:'icon-cancel'" onclick="testformButtonCancel_Click()">关闭</a>
+    </div>
+
+    <script type="text/javascript">
+
+        $(function () {
+            $('#testformForm').formLoad({
+                url: 'testform.ashx?m=t'
+            });
+            $('#testformForm').formLoad({
+                url: 'testform.ashx?m=getolduser'
+            });
+            $('#more1').toggle();
+            $('#more2').toggle();
+        });
+
+        function testformButtonSubmit_Click() {
+            var id = $("#ID2").html()
+            $.dialog.save({
+                formid: 'testformForm',
+                datagridid: 'testformDatagrid',
+                url: 'testform.ashx?m=us&id=' + id
+            });
+        }
+
+        function testformButtonCancel_Click() {
+            $.dialog.close();
+        }
+
+    </script>
+</body>
+</html>

+ 534 - 0
wwwroot/mes/pm/testform_rpt001/rpt - 0910.ashx

@@ -0,0 +1,534 @@
+<%@ 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()=="0")
+            {
+                string goodsId = context.Request["goodsMaster[]"] is object ? context.Request["goodsMaster[]"].ToString() : "0";
+                if (goodsId == "0" && context.Request["goodsMaster"] is object) goodsId = context.Request["goodsMaster"].ToString();
+                if (goodsId == "") goodsId = "0";
+                string testformguid = context.Request["TESTFORMGUID[]"] is object ? context.Request["TESTFORMGUID[]"].ToString() : "0";
+                if (testformguid == "0" && context.Request["TESTFORMGUID"] is object) goodsId = context.Request["TESTFORMGUID"].ToString();
+                if (testformguid == "") testformguid = "0";
+
+                //读取报表数据
+                string sqlStr = @"
+                WITH BC AS (
+	                SELECT
+		                TG.BARCODE 
+	                FROM
+		                TP_PM_TESTFORM2 T
+		                LEFT JOIN TP_PM_TESTFORM2_GOODS TG ON T.ID = TG.TESTFORMGUID
+		                LEFT JOIN TP_PM_GROUTINGDAILYDETAIL GDD ON TG.BARCODE = GDD.BARCODE 
+	                WHERE
+		                T.VALUEFLAG = 1 
+		                AND TG.VALUEFLAG = 1 
+                        AND (GDD.GOODSID IN ({GOODSID}) OR '{GOODSID}' = '0') 
+                        AND (T.ID IN ({TESTFORMGUID}) OR '{TESTFORMGUID}' = '0') 
+	                ),
+                MES AS(
+                SELECT
+	                1 AS id,
+	                '3#一检' AS 工序,
+	                tt1.产量,
+	                tt1.合格数,
+	                tt1.合格率,
+	                tt2.干补数 
+                FROM
+	                (
+	                SELECT
+		                1 AS wj,
+		                T1.NUM1 AS 产量,
+		                T1.NUM1 - T2.NUM2 - T3.NUM3 AS 合格数,
+		                ROUND(
+			                ( T1.NUM1 - T2.NUM2 - T3.NUM3 ) / decode( T1.NUM1, 0, 1, T1.NUM1 ),
+			                2 
+		                ) * 100 || '%' AS 合格率 
+	                FROM
+		                (
+		                SELECT
+			                1 AS 外键,
+			                count( PRODUCTIONDATAID ) AS num1 
+		                FROM
+			                TP_PM_PRODUCTIONDATA 
+		                WHERE
+			                VALUEFLAG = 1 
+			                AND PROCEDUREID = 89 
+			                AND barcode IN ( SELECT * FROM BC ) 
+		                ) t1
+		                INNER JOIN (
+		                SELECT
+			                1 AS 外键,
+			                count( DISTINCT BARCODE ) AS num2 
+		                FROM
+			                TP_PM_SEMICHECK 
+		                WHERE
+			                VALUEFLAG = 1 
+			                AND PROCEDUREID = 89 
+			                AND BACKOUTFLAG = 0 
+			                AND barcode IN ( SELECT * FROM BC ) 
+		                ) T2 ON T1.外键 = T2.外键
+		                INNER JOIN (
+		                SELECT
+			                1 AS 外键,
+			                count( DISTINCT BARCODE ) AS num3 
+		                FROM
+			                TP_PM_DEFECT 
+		                WHERE
+			                VALUEFLAG = 1 
+			                AND DEFECTPROCEDUREID = 89 
+			                AND barcode IN ( SELECT * FROM BC ) 
+		                ) T3 ON T1.外键 = T3.外键 
+	                ) tt1
+	                INNER JOIN (
+	                SELECT
+		                1 AS wj,
+		                count( DISTINCT s.BARCODE ) AS 干补数 
+	                FROM
+		                TP_PM_SCRAPPRODUCT s
+		                LEFT JOIN TP_PM_PRODUCTIONDATA pd ON s.PRODUCTIONDATAID = pd.PRODUCTIONDATAID 
+	                WHERE
+		                s.goodsleveltypeid = 9 
+		                AND pd.VALUEFLAG = 1 
+		                AND pd.PROCEDUREID = 89 
+	                AND s.barcode IN ( SELECT * FROM BC ) 
+	                ) tt2 ON tt1.wj = tt2.wj
+
+                UNION
+
+                SELECT
+	                2 AS id,
+	                '3#改洗' AS 工序,
+	                tt1.产量,
+	                tt1.合格数,
+	                tt1.合格率,
+	                tt2.干补数 
+                FROM
+	                (
+	                SELECT
+		                1 AS wj,
+		                T1.NUM1 AS 产量,
+		                T1.NUM1 - T2.NUM2 - T3.NUM3 AS 合格数,
+		                ROUND(
+			                ( T1.NUM1 - T2.NUM2 - T3.NUM3 ) / decode( T1.NUM1, 0, 1, T1.NUM1 ),
+			                2 
+		                ) * 100 || '%' AS 合格率 
+	                FROM
+		                (
+		                SELECT
+			                1 AS 外键,
+			                count( PRODUCTIONDATAID ) AS num1 
+		                FROM
+			                TP_PM_PRODUCTIONDATA 
+		                WHERE
+			                VALUEFLAG = 1 
+			                AND PROCEDUREID = 94 
+			                AND barcode IN ( SELECT * FROM BC ) 
+		                ) t1
+		                INNER JOIN (
+		                SELECT
+			                1 AS 外键,
+			                count( DISTINCT BARCODE ) AS num2 
+		                FROM
+			                TP_PM_SEMICHECK 
+		                WHERE
+			                VALUEFLAG = 1 
+			                AND PROCEDUREID = 94 
+			                AND BACKOUTFLAG = 0 
+			                AND barcode IN ( SELECT * FROM BC ) 
+		                ) T2 ON T1.外键 = T2.外键
+		                INNER JOIN (
+		                SELECT
+			                1 AS 外键,
+			                count( DISTINCT BARCODE ) AS num3 
+		                FROM
+			                TP_PM_DEFECT 
+		                WHERE
+			                VALUEFLAG = 1 
+			                AND DEFECTPROCEDUREID = 94 
+			                AND barcode IN ( SELECT * FROM BC ) 
+		                ) T3 ON T1.外键 = T3.外键 
+	                ) tt1
+	                INNER JOIN (
+	                SELECT
+		                1 AS wj,
+		                count( DISTINCT s.BARCODE ) AS 干补数 
+	                FROM
+		                TP_PM_SCRAPPRODUCT s
+		                LEFT JOIN TP_PM_PRODUCTIONDATA pd ON s.PRODUCTIONDATAID = pd.PRODUCTIONDATAID 
+	                WHERE
+		                s.goodsleveltypeid = 9 
+		                AND pd.VALUEFLAG = 1 
+		                AND pd.PROCEDUREID = 94 
+	                AND s.barcode IN ( SELECT * FROM BC ) 
+	                ) tt2 ON tt1.wj = tt2.wj
+
+                UNION
+
+                SELECT
+	                3 AS id,
+	                '3#施釉' AS 工序,
+	                tt1.产量,
+	                tt1.合格数,
+	                tt1.合格率,
+	                tt2.干补数 
+                FROM
+	                (
+	                SELECT
+		                1 AS wj,
+		                T1.NUM1 AS 产量,
+		                T1.NUM1 - T2.NUM2 - T3.NUM3 AS 合格数,
+		                ROUND(
+			                ( T1.NUM1 - T2.NUM2 - T3.NUM3 ) / decode( T1.NUM1, 0, 1, T1.NUM1 ),
+			                2 
+		                ) * 100 || '%' AS 合格率 
+	                FROM
+		                (
+		                SELECT
+			                1 AS 外键,
+			                count( PRODUCTIONDATAID ) AS num1 
+		                FROM
+			                TP_PM_PRODUCTIONDATA 
+		                WHERE
+			                VALUEFLAG = 1 
+			                AND PROCEDUREID = 98 
+			                AND barcode IN ( SELECT * FROM BC ) 
+		                ) t1
+		                INNER JOIN (
+		                SELECT
+			                1 AS 外键,
+			                count( DISTINCT BARCODE ) AS num2 
+		                FROM
+			                TP_PM_SEMICHECK 
+		                WHERE
+			                VALUEFLAG = 1 
+			                AND PROCEDUREID = 98 
+			                AND BACKOUTFLAG = 0 
+			                AND barcode IN ( SELECT * FROM BC ) 
+		                ) T2 ON T1.外键 = T2.外键
+		                INNER JOIN (
+		                SELECT
+			                1 AS 外键,
+			                count( DISTINCT BARCODE ) AS num3 
+		                FROM
+			                TP_PM_DEFECT 
+		                WHERE
+			                VALUEFLAG = 1 
+			                AND DEFECTPROCEDUREID = 98 
+			                AND barcode IN ( SELECT * FROM BC ) 
+		                ) T3 ON T1.外键 = T3.外键 
+	                ) tt1
+	                INNER JOIN (
+	                SELECT
+		                1 AS wj,
+		                count( DISTINCT s.BARCODE ) AS 干补数 
+	                FROM
+		                TP_PM_SCRAPPRODUCT s
+		                LEFT JOIN TP_PM_PRODUCTIONDATA pd ON s.PRODUCTIONDATAID = pd.PRODUCTIONDATAID 
+	                WHERE
+		                s.goodsleveltypeid = 9 
+		                AND pd.VALUEFLAG = 1 
+		                AND pd.PROCEDUREID = 98 
+	                AND s.barcode IN ( SELECT * FROM BC ) 
+	                ) tt2 ON tt1.wj = tt2.wj
+
+                UNION
+
+                SELECT
+	                4 AS id,
+	                '3#刮登' AS 工序,
+	                tt1.产量,
+	                tt1.合格数,
+	                tt1.合格率,
+	                tt2.干补数 
+                FROM
+	                (
+	                SELECT
+		                1 AS wj,
+		                T1.NUM1 AS 产量,
+		                T1.NUM1 - T2.NUM2 - T3.NUM3 AS 合格数,
+		                ROUND(
+			                ( T1.NUM1 - T2.NUM2 - T3.NUM3 ) / decode( T1.NUM1, 0, 1, T1.NUM1 ),
+			                2 
+		                ) * 100 || '%' AS 合格率 
+	                FROM
+		                (
+		                SELECT
+			                1 AS 外键,
+			                count( PRODUCTIONDATAID ) AS num1 
+		                FROM
+			                TP_PM_PRODUCTIONDATA 
+		                WHERE
+			                VALUEFLAG = 1 
+			                AND PROCEDUREID = 99 
+			                AND barcode IN ( SELECT * FROM BC ) 
+		                ) t1
+		                INNER JOIN (
+		                SELECT
+			                1 AS 外键,
+			                count( DISTINCT BARCODE ) AS num2 
+		                FROM
+			                TP_PM_SEMICHECK 
+		                WHERE
+			                VALUEFLAG = 1 
+			                AND PROCEDUREID = 99 
+			                AND BACKOUTFLAG = 0 
+			                AND barcode IN ( SELECT * FROM BC ) 
+		                ) T2 ON T1.外键 = T2.外键
+		                INNER JOIN (
+		                SELECT
+			                1 AS 外键,
+			                count( DISTINCT BARCODE ) AS num3 
+		                FROM
+			                TP_PM_DEFECT 
+		                WHERE
+			                VALUEFLAG = 1 
+			                AND DEFECTPROCEDUREID = 99 
+			                AND barcode IN ( SELECT * FROM BC ) 
+		                ) T3 ON T1.外键 = T3.外键 
+	                ) tt1
+	                INNER JOIN (
+	                SELECT
+		                1 AS wj,
+		                count( DISTINCT s.BARCODE ) AS 干补数 
+	                FROM
+		                TP_PM_SCRAPPRODUCT s
+		                LEFT JOIN TP_PM_PRODUCTIONDATA pd ON s.PRODUCTIONDATAID = pd.PRODUCTIONDATAID 
+	                WHERE
+		                s.goodsleveltypeid = 9 
+		                AND pd.VALUEFLAG = 1 
+		                AND pd.PROCEDUREID = 99 
+	                AND s.barcode IN ( SELECT * FROM BC ) 
+	                ) tt2 ON tt1.wj = tt2.wj
+
+                UNION
+
+                SELECT
+	                5 AS id,
+	                '3#烧成' AS 工序,
+	                tt1.产量,
+	                tt1.合格数,
+	                tt1.合格率,
+	                tt2.干补数 
+                FROM
+	                (
+	                SELECT
+		                1 AS wj,
+						T1.NUM1 AS 产量,
+						T1.NUM1 - T2.NUM2 AS 合格数,
+						ROUND((T1.NUM1 - T2.NUM2)/DECODE(T1.NUM1,0,1,T1.NUM1),2)*100||'%' AS 合格率
+	                FROM
+		                (
+		                SELECT
+			                1 AS 外键,
+			                count( PRODUCTIONDATAID ) AS num1 
+		                FROM
+			                TP_PM_PRODUCTIONDATA 
+		                WHERE
+			                VALUEFLAG = 1 
+			                AND PROCEDUREID = 103 
+			                AND barcode IN ( SELECT * FROM BC ) 
+		                ) t1
+		                INNER JOIN (
+		                SELECT
+			                1 AS 外键,
+			                count( DISTINCT BARCODE ) AS num2
+		                FROM
+			                TP_PM_DEFECT 
+		                WHERE
+			                VALUEFLAG = 1 
+			                AND DEFECTPROCEDUREID = 103 
+			                AND barcode IN ( SELECT * FROM BC ) 
+		                ) T2 ON T1.外键 = T2.外键 
+	                ) tt1
+	                INNER JOIN (
+	                SELECT
+		                1 AS wj,
+		                count( DISTINCT s.BARCODE ) AS 干补数 
+	                FROM
+		                TP_PM_SCRAPPRODUCT s
+		                LEFT JOIN TP_PM_PRODUCTIONDATA pd ON s.PRODUCTIONDATAID = pd.PRODUCTIONDATAID 
+	                WHERE
+		                s.goodsleveltypeid = 9 
+		                AND pd.VALUEFLAG = 1 
+		                AND pd.PROCEDUREID = 103 
+	                AND s.barcode IN ( SELECT * FROM BC ) 
+	                ) tt2 ON tt1.wj = tt2.wj
+
+                UNION
+
+                SELECT
+                6 AS ID,
+                '3#本烧质量' AS 工序,
+                T1.NUM1 AS 产量,
+                T1.NUM1 - T2.NUM2 AS 合格数,
+                ROUND((T1.NUM1 - T2.NUM2)/DECODE(T1.NUM1,0,1,T1.NUM1),2)*100||'%' AS 合格率,
+				0 AS 干补数
+                FROM
+                (
+                SELECT
+                1 AS 外键,
+                COUNT(PRODUCTIONDATAID) AS NUM1
+                FROM
+                TP_PM_PRODUCTIONDATA
+                WHERE
+                PROCEDUREID = 104 
+                AND ISREFIRE = '0' 
+                AND CHECKFLAG = '1' 
+                AND BARCODE IN
+                (SELECT * FROM BC)
+                )T1
+                INNER JOIN
+                (
+                SELECT
+                1 AS 外键,
+                COUNT(DISTINCT BARCODE) AS NUM2
+                FROM
+                TP_PM_DEFECT 
+                WHERE
+                VALUEFLAG = 1
+                AND DEFECTPROCEDUREID = 103
+                AND BARCODE IN
+                (SELECT * FROM BC)
+                )T2
+                ON T1.外键 = T2.外键
+
+                UNION
+
+                SELECT
+                7 AS ID,
+                '3#重烧质量' AS 工序,
+                T1.NUM1 AS 产量,
+                T1.NUM1 - T2.NUM2 AS 合格数,
+                ROUND((T1.NUM1 - T2.NUM2)/DECODE(T1.NUM1,0,1,T1.NUM1),2)*100||'%' AS 合格率,
+				0 AS 干补数
+                FROM
+                (
+                SELECT
+                1 AS 外键,
+                COUNT(PRODUCTIONDATAID) AS NUM1
+                FROM
+                TP_PM_PRODUCTIONDATA
+                WHERE
+                PROCEDUREID = 104 
+                AND ISREFIRE = '6' 
+                AND CHECKFLAG = '1'
+                AND BARCODE IN
+                (SELECT * FROM BC)
+                )T1
+                INNER JOIN
+                (
+                SELECT
+                1 AS 外键,
+                COUNT(DISTINCT BARCODE) AS NUM2
+                FROM
+                TP_PM_DEFECT 
+                WHERE
+                VALUEFLAG = 1
+                AND DEFECTPROCEDUREID = 103
+                AND BARCODE IN
+                (SELECT * FROM BC)
+                )T2
+                ON T1.外键 = T2.外键
+                )
+
+
+                SELECT
+                8 AS ID,
+                '综合' AS 工序,
+                SUM(产量) AS 产量,
+                SUM(合格数) AS 合格数,
+                '--' AS 合格率,
+                0 AS 干补数
+                FROM( SELECT * FROM MES )
+                UNION
+                (SELECT * FROM MES)
+
+                ".Replace("{GOODSID}",goodsId)
+                 .Replace("{TESTFORMGUID}",testformguid);
+
+                //获取查询条件
+                //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("PROCEDUREID", context.Request["procedureidMaster"]));
+                DataTable dt = conn.ExecuteDatatable(sqlStr);
+                context.Response.Write(new JsonResult(dt).ToJson());
+            }
+
+            //子表1
+            if(context.Request["m"].ToString()=="1")
+            {
+                //读取报表数据
+                string sqlStr = @"
+                    SELECT 
+                        '测试子表1' AS 测试列1,
+                        '测试子表1' AS 测试列2,
+                        '测试子表1' AS 测试列3,
+                        '测试子表1' AS 测试列4,
+                        '测试子表1' AS 测试列5
+                    FROM 
+                        DUAL
+                ";
+
+                List<CDAParameter> sqlPara = new List<CDAParameter>();
+                //sqlPara.Add(new CDAParameter("PROCEDUREID", context.Request["procedureidMaster"]));
+
+                JsonResult data = Easyui.ExecuteJsonResult(conn, sqlStr, sqlPara);
+                context.Response.Write(data.ToJson());
+            }
+
+            //子表2
+            if(context.Request["m"].ToString()=="2")
+            {
+                //读取报表数据
+                string sqlStr = @"
+                    SELECT 
+                        '测试子表2' AS 测试列1,
+                        '测试子表2' AS 测试列2,
+                        '测试子表2' AS 测试列3,
+                        '测试子表2' AS 测试列4,
+                        '测试子表2' AS 测试列5
+                    FROM 
+                        DUAL
+                ";
+
+                List<CDAParameter> sqlPara = new List<CDAParameter>();
+                //sqlPara.Add(new CDAParameter("PROCEDUREID", context.Request["procedureidMaster"]));
+
+                JsonResult data = Easyui.ExecuteJsonResult(conn, sqlStr, sqlPara);
+                context.Response.Write(data.ToJson());
+            }
+
+
+        }
+
+    }
+
+    public bool IsReusable
+    {
+        get
+        {
+            return false;
+        }
+    }
+
+}

+ 450 - 0
wwwroot/mes/pm/testform_rpt001/rpt - 质量.ashx

@@ -0,0 +1,450 @@
+<%@ 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()=="0")
+            {
+                string goodsId = context.Request["goodsMaster[]"] is object ? context.Request["goodsMaster[]"].ToString() : "0";
+                if (goodsId == "0" && context.Request["goodsMaster"] is object) goodsId = context.Request["goodsMaster"].ToString();
+                if (goodsId == "") goodsId = "0";
+                string testformguid = context.Request["TESTFORMGUID[]"] is object ? context.Request["TESTFORMGUID[]"].ToString() : "0";
+                if (testformguid == "0" && context.Request["TESTFORMGUID"] is object) goodsId = context.Request["TESTFORMGUID"].ToString();
+                if (testformguid == "") testformguid = "0";
+
+                //读取报表数据
+                string sqlStr = @"
+                WITH
+                BC
+                AS(
+                SELECT
+                TG.BARCODE
+                FROM
+                TP_PM_TESTFORM2 T
+                LEFT JOIN
+                TP_PM_TESTFORM2_GOODS TG
+                ON
+                T.ID = TG.TESTFORMGUID
+                LEFT JOIN
+                TP_PM_GROUTINGDAILYDETAIL GDD
+                ON
+                TG.BARCODE = GDD.BARCODE
+                WHERE
+                T.VALUEFLAG = 1
+                AND TG.VALUEFLAG = 1
+                AND (GDD.GOODSID IN ({GOODSID}) OR '{GOODSID}' = '0') 
+                AND (T.ID IN ({TESTFORMGUID}) OR '{TESTFORMGUID}' = '0') 
+                ),
+                MES
+                AS(
+                SELECT
+                1 AS ID,
+                '3#一检' AS 工序,
+                T1.NUM1 AS 产量,
+                T1.NUM1 - T2.NUM2 - T3.NUM3 AS 合格数,
+                ROUND((T1.NUM1 - T2.NUM2 - T3.NUM3)/DECODE(T1.NUM1,0,1,T1.NUM1),2)*100||'%' AS 合格率
+                FROM
+                (
+                SELECT
+                1 AS 外键,
+                COUNT(PRODUCTIONDATAID) AS NUM1
+                FROM
+                TP_PM_PRODUCTIONDATA
+                WHERE
+                VALUEFLAG = 1
+                AND PROCEDUREID = 89
+                AND BARCODE IN
+                (SELECT * FROM BC)
+                )T1
+                INNER JOIN
+                (
+                SELECT
+                1 AS 外键,
+                COUNT(DISTINCT BARCODE) AS NUM2
+                FROM
+                TP_PM_SEMICHECK
+                WHERE
+                VALUEFLAG = 1
+                AND PROCEDUREID = 89
+                AND BACKOUTFLAG = 0
+                AND BARCODE IN
+                (SELECT * FROM BC)
+                )T2
+                ON T1.外键 = T2.外键
+                INNER JOIN
+                (
+                SELECT
+                1 AS 外键,
+                COUNT(DISTINCT BARCODE) AS NUM3
+                FROM
+                TP_PM_DEFECT 
+                WHERE
+                VALUEFLAG = 1
+                AND DEFECTPROCEDUREID = 89
+                AND BARCODE IN
+                (SELECT * FROM BC)
+                )T3
+                ON T1.外键 = T3.外键
+
+                UNION
+
+                SELECT
+                2 AS ID,
+                '3#改洗' AS 工序,
+                T1.NUM1 AS 产量,
+                T1.NUM1 - T2.NUM2 - T3.NUM3 AS 合格数,
+                ROUND((T1.NUM1 - T2.NUM2 - T3.NUM3)/DECODE(T1.NUM1,0,1,T1.NUM1),2)*100||'%' AS 合格率
+                FROM
+                (
+                SELECT
+                1 AS 外键,
+                COUNT(PRODUCTIONDATAID) AS NUM1
+                FROM
+                TP_PM_PRODUCTIONDATA
+                WHERE
+                VALUEFLAG = 1
+                AND PROCEDUREID = 94
+                AND BARCODE IN
+                (SELECT * FROM BC)
+                )T1
+                INNER JOIN
+                (
+                SELECT
+                1 AS 外键,
+                COUNT(DISTINCT BARCODE) AS NUM2
+                FROM
+                TP_PM_SEMICHECK
+                WHERE
+                VALUEFLAG = 1
+                AND PROCEDUREID = 94
+                AND BACKOUTFLAG = 0
+                AND BARCODE IN
+                (SELECT * FROM BC)
+                )T2
+                ON T1.外键 = T2.外键
+                INNER JOIN
+                (
+                SELECT
+                1 AS 外键,
+                COUNT(DISTINCT BARCODE) AS NUM3
+                FROM
+                TP_PM_DEFECT 
+                WHERE
+                VALUEFLAG = 1
+                AND DEFECTPROCEDUREID = 94
+                AND BARCODE IN
+                (SELECT * FROM BC)
+                )T3
+                ON T1.外键 = T3.外键
+
+                UNION
+
+                SELECT
+                3 AS ID,
+                '3#施釉' AS 工序,
+                T1.NUM1 AS 产量,
+                T1.NUM1 - T2.NUM2 - T3.NUM3 AS 合格数,
+                ROUND((T1.NUM1 - T2.NUM2 - T3.NUM3)/DECODE(T1.NUM1,0,1,T1.NUM1),2)*100||'%' AS 合格率
+                FROM
+                (
+                SELECT
+                1 AS 外键,
+                COUNT(PRODUCTIONDATAID) AS NUM1
+                FROM
+                TP_PM_PRODUCTIONDATA
+                WHERE
+                VALUEFLAG = 1
+                AND PROCEDUREID = 98
+                AND BARCODE IN
+                (SELECT * FROM BC)
+                )T1
+                INNER JOIN
+                (
+                SELECT
+                1 AS 外键,
+                COUNT(DISTINCT BARCODE) AS NUM2
+                FROM
+                TP_PM_SEMICHECK
+                WHERE
+                VALUEFLAG = 1
+                AND PROCEDUREID = 98
+                AND BACKOUTFLAG = 0
+                AND BARCODE IN
+                (SELECT * FROM BC)
+                )T2
+                ON T1.外键 = T2.外键
+                INNER JOIN
+                (
+                SELECT
+                1 AS 外键,
+                COUNT(DISTINCT BARCODE) AS NUM3
+                FROM
+                TP_PM_DEFECT 
+                WHERE
+                VALUEFLAG = 1
+                AND DEFECTPROCEDUREID = 98
+                AND BARCODE IN
+                (SELECT * FROM BC)
+                )T3
+                ON T1.外键 = T3.外键
+
+                UNION
+
+                SELECT
+                4 AS ID,
+                '3#刮登' AS 工序,
+                T1.NUM1 AS 产量,
+                T1.NUM1 - T2.NUM2 - T3.NUM3 AS 合格数,
+                ROUND((T1.NUM1 - T2.NUM2 - T3.NUM3)/DECODE(T1.NUM1,0,1,T1.NUM1),2)*100||'%' AS 合格率
+                FROM
+                (
+                SELECT
+                1 AS 外键,
+                COUNT(PRODUCTIONDATAID) AS NUM1
+                FROM
+                TP_PM_PRODUCTIONDATA
+                WHERE
+                VALUEFLAG = 1
+                AND PROCEDUREID = 99
+                AND BARCODE IN
+                (SELECT * FROM BC)
+                )T1
+                INNER JOIN
+                (
+                SELECT
+                1 AS 外键,
+                COUNT(DISTINCT BARCODE) AS NUM2
+                FROM
+                TP_PM_SEMICHECK
+                WHERE
+                VALUEFLAG = 1
+                AND PROCEDUREID = 99
+                AND BACKOUTFLAG = 0
+                AND BARCODE IN
+                (SELECT * FROM BC)
+                )T2
+                ON T1.外键 = T2.外键
+                INNER JOIN
+                (
+                SELECT
+                1 AS 外键,
+                COUNT(DISTINCT BARCODE) AS NUM3
+                FROM
+                TP_PM_DEFECT 
+                WHERE
+                VALUEFLAG = 1
+                AND DEFECTPROCEDUREID = 99
+                AND BARCODE IN
+                (SELECT * FROM BC)
+                )T3
+                ON T1.外键 = T3.外键
+
+                UNION
+
+                SELECT
+                5 AS ID,
+                '3#烧成' AS 工序,
+                T1.NUM1 AS 产量,
+                T1.NUM1 - T2.NUM2 AS 合格数,
+                ROUND((T1.NUM1 - T2.NUM2)/DECODE(T1.NUM1,0,1,T1.NUM1),2)*100||'%' AS 合格率
+                FROM
+                (
+                SELECT
+                1 AS 外键,
+                COUNT(PRODUCTIONDATAID) AS NUM1
+                FROM
+                TP_PM_PRODUCTIONDATA
+                WHERE
+                VALUEFLAG = 1
+                AND PROCEDUREID = 103
+                AND BARCODE IN
+                (SELECT * FROM BC)
+                )T1
+                INNER JOIN
+                (
+                SELECT
+                1 AS 外键,
+                COUNT(DISTINCT BARCODE) AS NUM2
+                FROM
+                TP_PM_DEFECT 
+                WHERE
+                VALUEFLAG = 1
+                AND DEFECTPROCEDUREID = 103
+                AND BARCODE IN
+                (SELECT * FROM BC)
+                )T2
+                ON T1.外键 = T2.外键
+
+                UNION
+
+                SELECT
+                6 AS ID,
+                '3#本烧质量' AS 工序,
+                T1.NUM1 AS 产量,
+                T1.NUM1 - T2.NUM2 AS 合格数,
+                ROUND((T1.NUM1 - T2.NUM2)/DECODE(T1.NUM1,0,1,T1.NUM1),2)*100||'%' AS 合格率
+                FROM
+                (
+                SELECT
+                1 AS 外键,
+                COUNT(PRODUCTIONDATAID) AS NUM1
+                FROM
+                TP_PM_PRODUCTIONDATA
+                WHERE
+                PROCEDUREID = 104 
+                AND ISREFIRE = '0' 
+                AND CHECKFLAG = '1' 
+                AND BARCODE IN
+                (SELECT * FROM BC)
+                )T1
+                INNER JOIN
+                (
+                SELECT
+                1 AS 外键,
+                COUNT(DISTINCT BARCODE) AS NUM2
+                FROM
+                TP_PM_DEFECT 
+                WHERE
+                VALUEFLAG = 1
+                AND DEFECTPROCEDUREID = 103
+                AND BARCODE IN
+                (SELECT * FROM BC)
+                )T2
+                ON T1.外键 = T2.外键
+
+                UNION
+
+                SELECT
+                7 AS ID,
+                '3#重烧质量' AS 工序,
+                T1.NUM1 AS 产量,
+                T1.NUM1 - T2.NUM2 AS 合格数,
+                ROUND((T1.NUM1 - T2.NUM2)/DECODE(T1.NUM1,0,1,T1.NUM1),2)*100||'%' AS 合格率
+                FROM
+                (
+                SELECT
+                1 AS 外键,
+                COUNT(PRODUCTIONDATAID) AS NUM1
+                FROM
+                TP_PM_PRODUCTIONDATA
+                WHERE
+                PROCEDUREID = 104 
+                AND ISREFIRE = '6' 
+                AND CHECKFLAG = '1'
+                AND BARCODE IN
+                (SELECT * FROM BC)
+                )T1
+                INNER JOIN
+                (
+                SELECT
+                1 AS 外键,
+                COUNT(DISTINCT BARCODE) AS NUM2
+                FROM
+                TP_PM_DEFECT 
+                WHERE
+                VALUEFLAG = 1
+                AND DEFECTPROCEDUREID = 103
+                AND BARCODE IN
+                (SELECT * FROM BC)
+                )T2
+                ON T1.外键 = T2.外键
+                )
+
+
+                SELECT
+                8 AS ID,
+                '综合' AS 工序,
+                SUM(产量) AS 产量,
+                SUM(合格数) AS 合格数,
+                '--' AS 合格率
+                FROM( SELECT * FROM MES )
+                UNION
+                (SELECT * FROM MES)
+
+                ".Replace("{GOODSID}",goodsId)
+                 .Replace("{TESTFORMGUID}",testformguid);
+
+                //获取查询条件
+                //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("PROCEDUREID", context.Request["procedureidMaster"]));
+                DataTable dt = conn.ExecuteDatatable(sqlStr);
+                context.Response.Write(new JsonResult(dt).ToJson());
+            }
+
+            //子表1
+            if(context.Request["m"].ToString()=="1")
+            {
+                //读取报表数据
+                string sqlStr = @"
+                    SELECT 
+                        '测试子表1' AS 测试列1,
+                        '测试子表1' AS 测试列2,
+                        '测试子表1' AS 测试列3,
+                        '测试子表1' AS 测试列4,
+                        '测试子表1' AS 测试列5
+                    FROM 
+                        DUAL
+                ";
+
+                List<CDAParameter> sqlPara = new List<CDAParameter>();
+                //sqlPara.Add(new CDAParameter("PROCEDUREID", context.Request["procedureidMaster"]));
+
+                JsonResult data = Easyui.ExecuteJsonResult(conn, sqlStr, sqlPara);
+                context.Response.Write(data.ToJson());
+            }
+
+            //子表2
+            if(context.Request["m"].ToString()=="2")
+            {
+                //读取报表数据
+                string sqlStr = @"
+                    SELECT 
+                        '测试子表2' AS 测试列1,
+                        '测试子表2' AS 测试列2,
+                        '测试子表2' AS 测试列3,
+                        '测试子表2' AS 测试列4,
+                        '测试子表2' AS 测试列5
+                    FROM 
+                        DUAL
+                ";
+
+                List<CDAParameter> sqlPara = new List<CDAParameter>();
+                //sqlPara.Add(new CDAParameter("PROCEDUREID", context.Request["procedureidMaster"]));
+
+                JsonResult data = Easyui.ExecuteJsonResult(conn, sqlStr, sqlPara);
+                context.Response.Write(data.ToJson());
+            }
+
+
+        }
+
+    }
+
+    public bool IsReusable
+    {
+        get
+        {
+            return false;
+        }
+    }
+
+}

+ 127 - 0
wwwroot/mes/pm/testform_rpt001/rpt.ashx

@@ -0,0 +1,127 @@
+<%@ 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()=="0")
+            {
+                string goodsId = context.Request["goodsMaster[]"] is object ? context.Request["goodsMaster[]"].ToString() : "0";
+                if (goodsId == "0" && context.Request["goodsMaster"] is object) goodsId = context.Request["goodsMaster"].ToString();
+                if (goodsId == "") goodsId = "0";
+                string testformguid = context.Request["TESTFORMGUID[]"] is object ? context.Request["TESTFORMGUID[]"].ToString() : "0";
+                if (testformguid == "0" && context.Request["TESTFORMGUID"] is object) testformguid = context.Request["TESTFORMGUID"].ToString();
+                if (testformguid == "") testformguid = "0";
+
+                //获取查询条件
+                List<CDAParameter> sqlPara = new List<CDAParameter>();
+                sqlPara.Add(new CDAParameter("in_goodsid", Convert.ToInt32(goodsId), DataType.Int32));
+                sqlPara.Add(new CDAParameter("in_testformguid", testformguid));
+                sqlPara.Add(new CDAParameter("out_result", DataType.Cursor, ParameterDirection.Output));
+
+                conn.BeginTransaction();
+                DataTable data = conn.ExecuteSPDatatable("PRO_RPT_TESTFORMREPORT", sqlPara.ToArray());
+
+
+                if (data.Rows.Count > 0)
+                {
+                    data.Columns.Remove("ID");
+                    data.Columns["产量"].ColumnName = "一次质量_产量";
+                    data.Columns["一次合格数"].ColumnName = "一次质量_一次合格数";
+                    data.Columns["一次合格率"].ColumnName = "一次质量_一次合格率";
+                    data.Columns["干补数"].ColumnName = "干补重烧_数量";
+                    data.Columns["干补合格数"].ColumnName = "干补重烧_合格数";
+                    data.Columns["干补合格率"].ColumnName = "干补重烧_合格率";
+                    data.Columns["综合质量产量"].ColumnName = "综合质量_产量";
+                    data.Columns["综合质量合格数"].ColumnName = "综合质量_合格数";
+                    data.Columns["综合质量合格率"].ColumnName = "综合质量_合格率";
+                    data.Columns["top1位置"].ColumnName = "TOP1缺陷_位置";
+                    data.Columns["top1名称"].ColumnName = "TOP1缺陷_名称";
+                    data.Columns["top1数量"].ColumnName = "TOP1缺陷_数量";
+                    data.Columns["top1占比"].ColumnName = "TOP1缺陷_占比";
+                    data.Columns["top2位置"].ColumnName = "TOP2缺陷_位置";
+                    data.Columns["top2名称"].ColumnName = "TOP2缺陷_名称";
+                    data.Columns["top2数量"].ColumnName = "TOP2缺陷_数量";
+                    data.Columns["top2占比"].ColumnName = "TOP2缺陷_占比";
+                    data.Columns["top3位置"].ColumnName = "TOP3缺陷_位置";
+                    data.Columns["top3名称"].ColumnName = "TOP3缺陷_名称";
+                    data.Columns["top3数量"].ColumnName = "TOP3缺陷_数量";
+                    data.Columns["top3占比"].ColumnName = "TOP3缺陷_占比";
+                }
+                context.Response.Write(new JsonResult(data).ToJson());
+            }
+
+            //子表1
+            if(context.Request["m"].ToString()=="1")
+            {
+                //读取报表数据
+                string sqlStr = @"
+                    SELECT 
+                        '测试子表1' AS 测试列1,
+                        '测试子表1' AS 测试列2,
+                        '测试子表1' AS 测试列3,
+                        '测试子表1' AS 测试列4,
+                        '测试子表1' AS 测试列5
+                    FROM 
+                        DUAL
+                ";
+
+                List<CDAParameter> sqlPara = new List<CDAParameter>();
+                //sqlPara.Add(new CDAParameter("PROCEDUREID", context.Request["procedureidMaster"]));
+
+                JsonResult data = Easyui.ExecuteJsonResult(conn, sqlStr, sqlPara);
+                context.Response.Write(data.ToJson());
+            }
+
+            //子表2
+            if(context.Request["m"].ToString()=="2")
+            {
+                //读取报表数据
+                string sqlStr = @"
+                    SELECT 
+                        '测试子表2' AS 测试列1,
+                        '测试子表2' AS 测试列2,
+                        '测试子表2' AS 测试列3,
+                        '测试子表2' AS 测试列4,
+                        '测试子表2' AS 测试列5
+                    FROM 
+                        DUAL
+                ";
+
+                List<CDAParameter> sqlPara = new List<CDAParameter>();
+                //sqlPara.Add(new CDAParameter("PROCEDUREID", context.Request["procedureidMaster"]));
+
+                JsonResult data = Easyui.ExecuteJsonResult(conn, sqlStr, sqlPara);
+                context.Response.Write(data.ToJson());
+            }
+
+
+        }
+
+    }
+
+    public bool IsReusable
+    {
+        get
+        {
+            return false;
+        }
+    }
+
+}

+ 118 - 0
wwwroot/mes/pm/testform_rpt001/rpt_help.html

@@ -0,0 +1,118 @@
+<!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 id="more1" style="display:block;">
+                <div class="w-div">
+                    <div class="w-fieldname">1.0 更新:</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">1.1 更新:</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">1.2 更新:</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">1.3 更新:</div>
+                    <div class="w-field">
+                        <div id="ID" data-field="true" class="w-fieldvalue">
+                            
+                        </div>
+                    </div>
+                </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">
+                            IE部需求,统计实验产品的各工序一次良率、干补合格率、重烧合格率、综合合格率、缺陷排行。
+                        </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">
+                            <ul>
+                                一次良率
+                                <li>一次良率生产工序不合格为工序报损 </li>
+                                <li>一次良率半检工序不合格为工序报损和有半检缺陷或复检缺陷</li>
+                                <li>一次良率成检工序不合格为质量登记为次品或重烧 </li>
+                                <li>一次良率干补重烧区分为质量登记前统计干补, 质量登记后显示重烧。 </li>
+                                <li>一次良率TOP缺陷为检验缺陷TOP排行。 </li>
+                                <li>一检:产量取3#交坯,不合格数取3#交坯+3#毛坯库入,干补合格经过3#打磨</li>
+                                <li>改洗:产量取3#打磨,不合格数取3#打磨+3#上水+3#吹风,干补合格经过3#二检半检</li>
+                                <li>二检:产量取3#二检半检,不合格数取3#二检半检,干补合格经过3#精坯入库</li>
+                                <li>施釉:产量取3#精坯出库,不合格数取3#精坯出库+3#施釉+3#精坯入库,干补合格经过3#刮登</li>
+                                <li>刮登:产量取3#刮登,不合格数取3#刮登+3#釉坯库入+3#登窑+3#入窑+3#卸窑,干补合格经过3#成检交接</li>
+                                <li>
+                                    质量登记:产量取(11,104),不合格数取(12,105)的次品重烧,重烧数取(59,104,105),重烧合格取(59,105)重烧后转正副品<br>
+                                    注:11-- 7-1成检出窑交接,12-- 8-1质量登记,59-- 8-2重烧质量登记,104-- 3#成检交接,105-- 3#质量登记
+                                </li>
+                            </ul>
+                            <ul>
+                                综合质量
+                                <li>综合质量为单独算法,与一次良率、干补重烧、缺陷TOP无直接联系 </li>
+                                <li>综合质量工序合格数为下道工序扫描数, 质量登记的合格数为产成品交接数 </li>
+                            </ul>
+                        </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">
+                            2021-11-16 dk。
+                        </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>

+ 226 - 0
wwwroot/mes/pm/testform_rpt001/rpt_index.html

@@ -0,0 +1,226 @@
+<!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 id="toolbarLayout" data-options="border:false,region:'north',title:'',iconCls:'icon-grid'">
+        <div 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="btnColumn" class="easyui-menubutton" data-options="menu:'#btnColumnMenu',iconCls:'icon-undo'">列显示</a>-->
+            <!--<div id="btnColumnMenu" style="width:150px;" ></div>-->
+            <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-combobox" id="TESTFORMGUID" name="TESTFORMGUID" data-options="required:true,prompt:'',tipPosition:'top',url:'../testform/testform.ashx?m=getList' ,method:'get',valueField:'ID',textField:'NAME',panelHeight:'300px',editable:'false'" style="width: 360px; height: 32px;">
+                        产品编码:
+                        <input class="easyui-combobox" id="goodsMaster" name="goodsMaster" data-options="required:false,prompt:'',tipPosition:'top',url:'../../rpt/rpt.ashx?m=getGoods&select=1',method:'get',valueField:'GOODSID',textField:'GOODSCODE',panelHeight:'300px',editable:true,multiple:true" style="width:120px;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>
+    </div>
+
+    <!--中部-->
+    <div id="tableLayout" data-options="border:false,region:'center',split:true,title:'',iconCls:'icon-grid'" title="East" style="width:700px;">
+        <div id="tableTabs" class="easyui-tabs" data-options="border:false" style="width: 100%; height: 100%">
+            <!--表格-->
+            <div title="实验产品质量汇总表">
+                <table class="easyui-datagrid"
+                       id="DataGrid0"
+                       data-options="method:'get',border:false,singleSelect:true,fit:true,fitColumns:true,onDblClickRow: dgDblclickrow">
+                    <thead>
+                        <!--<tr>
+                            <th data-options="field:'ID',title:'ID',width:220,align:'left',checkbox:true,hidden:true">ID</th>
+                            <th data-options="field:'工序',title:'工序',align:'left',sortable:true"></th>
+                            <th data-options="field:'产量',title:'产量',align:'left',sortable:true"></th>
+                            <th data-options="field:'合格数',title:'合格数',align:'left',sortable:true"></th>
+                            <th data-options="field:'合格率',title:'合格率',align:'left',sortable:true"></th>
+                            <th data-options="field:'干补数',title:'干补数',align:'left',sortable:true"></th>
+                            <th data-options="field:'干补合格数',title:'干补合格数',align:'left',sortable:true"></th>
+                            <th data-options="field:'干补合格率',title:'干补合格率',align:'left',sortable:true"></th>
+                            <th data-options="field:'TOP1名称',title:'TOP1名称',align:'left',sortable:true"></th>
+                            <th data-options="field:'TOP1数量',title:'TOP1数量',align:'left',sortable:true"></th>
+                            <th data-options="field:'TOP1占比',title:'TOP1占比',align:'left',sortable:true"></th>
+                            <th data-options="field:'TOP2名称',title:'TOP2名称',align:'left',sortable:true"></th>
+                            <th data-options="field:'TOP2数量',title:'TOP2数量',align:'left',sortable:true"></th>
+                            <th data-options="field:'TOP2占比',title:'TOP2占比',align:'left',sortable:true"></th>
+                            <th data-options="field:'TOP3名称',title:'TOP3名称',align:'left',sortable:true"></th>
+                            <th data-options="field:'TOP3数量',title:'TOP3数量',align:'left',sortable:true"></th>
+                            <th data-options="field:'TOP3占比',title:'TOP3占比',align:'left',sortable:true"></th>
+                        </tr>-->
+                    </thead>
+                </table>
+            </div>
+            <!--<div title="实验产品质量明细表">
+                <table class="easyui-datagrid"
+                       id="DataGrid1"
+                       data-options="method:'get',border:false,singleSelect:true,fit:true,fitColumns:true">
+                    <thead>
+                    </thead>
+                </table>
+            </div>-->
+            <!--<div title="表名明细表2">
+                <table class="easyui-datagrid"
+                       id="DataGrid2"
+                       data-options="method:'get',border:false,singleSelect:true,fit:true,fitColumns:true">
+                    <thead>
+                    </thead>
+                </table>
+            </div>-->
+        </div>
+    </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();
+            var endDate = ctime.getFullYear() + "-" + (ctime.getMonth() + 1) + "-" + ctime.getDate();
+            $("#datebeginMaster").datebox("setValue", beginDate);
+            $("#dateendMaster").datebox("setValue", endDate);
+
+            //tbSearchSubmit();
+
+        });
+
+        //主表双击事件
+        function dgDblclickrow(index, row) {
+            //$("#tableTabs").tabs("select", 1);
+            //LoadDataGridDetail(index, row);
+        }
+
+        //加载子表数据
+        function LoadDataGridDetail(index, row) {
+            //加载子表1
+            //var id = $('#DataGridMaster').datagrid('getSelections')[0]['SID'];
+            var id = row['测试列1'];
+            $('#DataGrid1').datagridLoadRpt({
+                idField: '测试列1',
+                url: 'rpt.ashx?m=1&id=' + id,
+                pageSize: 10,
+                fixWidth: 120,
+                mergeWidth: 100,
+                splitChar: '_',
+                columnMoving: true
+            });
+        }
+
+        // 清除恢复默认值
+        function toClear() {
+            $("#TESTFORMGUID").combobox('clear');
+            $("#goodsMaster").combobox('clear');
+        }
+
+        //搜索提交
+        function tbSearchSubmit() {
+            var index = $('#tableTabs').tabs('getTabIndex', $('#tableTabs').tabs('getSelected'));
+
+            if (index == 0) {
+                if ($('#ffMaster').form("validate")) {
+                    $('#DataGrid' + index).datagridLoad({
+                        title: '',
+                        idField: 'SID',
+                        queryParams: $('#ffMaster').serializeJson(),
+                        url: 'rpt.ashx?m=' + index + '&id=' + request('id'),
+                        pageSize: 10,
+                        fixWidth: 100,
+                        mergeWidth: 80,
+                        splitChar: '_'
+                    });
+                }
+            }
+
+            if (index == 1) {
+                if ($('#ffMaster').form("validate")) {
+                    $('#DataGrid' + index).datagridLoad({
+                        idField: '测试列1',
+                        url: 'rpt.ashx?m=' + index ,
+                        pageSize: 10,
+                        fixWidth: 100,
+                        mergeWidth: 80,
+                        splitChar: '_'
+                    });
+                }
+            }
+        }
+
+        //导出
+        function tbExport() {
+            var index = $('#tableTabs').tabs('getTabIndex', $('#tableTabs').tabs('getSelected'));
+
+            //加载表头
+            var fields1 = $('#DataGrid' + index).datagrid('getColumnFields');
+            var fields2 = $('#DataGrid' + index).datagrid('getColumnFields', true);
+            var fields = fields2.concat(fields1);
+            var headers = [];
+            for (var i = 0; i < fields.length; i++) {
+                //headers.push($('#DataGridMaster').datagrid('getColumnOption', fields[i])['title']);
+                headers.push(fields[i]);
+            }
+            $('#DataGrid' + index).datagridExport({
+                headers: headers,
+                fileName: '导出数据(表名1).xls',
+                workSheet: '导出数据(表名1)'
+            });
+
+            //$('#DataGridMaster').datagridExport({
+            //    headers: headers,
+            //    fileName: '导出数据(表名).xls',
+            //    workSheet: '导出数据(表名)'
+            //});
+
+            //导出多sheet
+            //$.dataGridToExcel(
+            //    ['DataGridMaster', 'DataGridDetail1', 'DataGridDetail2'],
+            //    ['表名','表名明细表1', '表名明细表2'],
+            //    "导出数据(表名).xls"
+            //);
+        }
+
+        //搜索按钮
+        function tbSearch() {
+            $('#tbSearchDiv').toggle();
+            //$('#DataGridMaster').datagrid('resize');
+            $('#toolbarLayout').panel('resize', { height: 'auto' });
+            $('body').layout('resize');
+            $('#tableTabs').tabs('resize');
+        }
+
+        //刷新
+        function tbReload() {
+            tbSearchSubmit();
+        }
+
+        //帮助事件
+        function tbHelp() {
+            $('#DataGrid0').datagridDialog({
+                title: '帮助',
+                width: 640,
+                height: 480,
+                url: 'rpt_help.html'
+            });
+        }
+
+    </script>
+</body>
+</html>

+ 43 - 0
wwwroot/mes/pm/testform_rpt001/test.ashx

@@ -0,0 +1,43 @@
+<%@ WebHandler Language="C#" Class="test" %>
+
+using System;
+using System.Web;
+using Oracle.ManagedDataAccess.Client;
+
+public class test : IHttpHandler
+{
+
+    public void ProcessRequest(HttpContext context)
+    {
+        context.Response.ContentType = "text/plain";
+
+        OracleConnection conn = new OracleConnection("Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=172.18.32.51)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=hgmes)));User Id=hgiboss;Password=dongke");
+        conn.Open();
+        OracleCommand cmd = new OracleCommand();
+        cmd.Connection = conn;
+
+        conn.BeginTransaction();
+
+        cmd.CommandText = "PRO_RPT_TESTFORMREPORT";
+        cmd.CommandType = System.Data.CommandType.StoredProcedure;
+        cmd.Parameters.Add("in_goodsid", OracleDbType.Int32,0,System.Data.ParameterDirection.Input);
+        cmd.Parameters.Add("in_testformguid", OracleDbType.NVarchar2,"2021091501",System.Data.ParameterDirection.Input);
+        cmd.Parameters.Add("out_result", OracleDbType.RefCursor,System.Data.ParameterDirection.Output);
+
+        OracleDataReader reader = cmd.ExecuteReader();
+
+        if(reader.HasRows) reader.Read();
+
+        conn.Close();
+
+    }
+
+    public bool IsReusable
+    {
+        get
+        {
+            return false;
+        }
+    }
+
+}

+ 97 - 0
wwwroot/mes/pm/testformgoods/rpt_help.html

@@ -0,0 +1,97 @@
+<!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 id="more1" style="display:block;">
+                <div class="w-div">
+                    <div class="w-fieldname">1.0 更新:</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">1.1 更新:</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">1.2 更新:</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">1.3 更新:</div>
+                    <div class="w-field">
+                        <div id="ID" data-field="true" class="w-fieldvalue">
+                            
+                        </div>
+                    </div>
+                </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">
+                            系统没有提供数据算法。
+                        </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">
+                            2021-11-10 xuwei。
+                        </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>

+ 562 - 0
wwwroot/mes/pm/testformgoods/testformgoods.ashx

@@ -0,0 +1,562 @@
+<%@ WebHandler Language="C#" Class="testformgoods" %>
+
+using System;
+using System.Web;
+using System.Web.SessionState;
+using System.Collections.Generic;
+using System.Collections.Specialized;
+using System.Data;
+using Curtain.DataAccess;
+using DK.XuWei.WebMes;
+
+/// <summary>
+/// TP_PM_TESTFORM2_GOODS
+/// xuwei create 2021-08-31
+/// </summary>
+public class testformgoods : IHttpHandler, IReadOnlySessionState
+{
+    public void ProcessRequest(HttpContext context)
+    {
+        context.Response.ContentType = "text/plain";
+        if (mes.LoginCheck() && context.Request["m"] is object)
+        {
+            Button b = new Button();
+            if(mes.RightCheck(""))
+            {
+                b.testformgoodsButtonIndex = true;
+                b.testformgoodsButtonInsert = true;
+                b.testformgoodsButtonInsertBatch = true;
+                b.testformgoodsButtonCopy = true;
+                b.testformgoodsButtonUpdate = true;
+                b.testformgoodsButtonDelete = true;
+                b.testformgoodsButtonCancel = true;
+                b.testformgoodsButtonSearch = true;
+                b.testformgoodsButtonDetail = true;
+                b.testformgoodsButtonCheckbox = true;
+                b.testformgoodsButtonExport = true;
+                b.testformgoodsButtonReload = true;
+            };
+            switch (context.Request["m"].ToString().ToLower())
+            {
+                case "b":
+                    {
+                        //按钮
+                        context.Response.Write(new JsonResult(b).ToJson());
+                        break;
+                    }
+                case "a":
+                    {
+                        //添加
+                        //if (b.testformgoodsButtonDetail && context.Request["id"] is object)
+                        if (b.testformgoodsButtonDetail)
+                            context.Response.Write(detail());
+                        else
+                        {
+                            List<xRecord> list = new List<xRecord>();
+                            xRecord r = new xRecord();
+                            list.Add(r);
+                            context.Response.Write(new JsonResult(list).ToJson());
+                        }
+                        break;
+                    }
+                case "s":
+                    {
+                        //搜索
+                        if (b.testformgoodsButtonIndex)
+                            context.Response.Write(search(context.Request.Form));
+                        else
+                            context.Response.Write(new JsonResult(JsonStatus.rightError).ToJson());
+                        break;
+                    }
+                case "t":
+                    {
+                        //详细
+                        if (b.testformgoodsButtonDetail)
+                            context.Response.Write(detail());
+                        else
+                            context.Response.Write(new JsonResult(JsonStatus.rightError).ToJson());
+                        break;
+                    }
+                case "i":
+                    {
+                        //插入
+                        if (b.testformgoodsButtonInsert)
+                            context.Response.Write(insert(context.Request.Form));
+                        else
+                            context.Response.Write(new JsonResult(JsonStatus.rightError).ToJson());
+                        break;
+                    }
+                case "u":
+                    {
+                        //修改
+                        if (b.testformgoodsButtonUpdate)
+                            context.Response.Write(update(context.Request.Form));
+                        else
+                            context.Response.Write(new JsonResult(JsonStatus.rightError).ToJson());
+                        break;
+                    }
+                case "d":
+                    {
+                        //删除
+                        if (b.testformgoodsButtonDelete)
+                            context.Response.Write(delete());
+                        else
+                            context.Response.Write(new JsonResult(JsonStatus.rightError).ToJson());
+                        break;
+                    }
+                case "e":
+                    {
+                        //导出
+                        if (b.testformgoodsButtonExport)
+                        {
+                            context.Response.Write(export());
+                        }
+                        else
+                        {
+                            context.Response.Write(new JsonResult(JsonStatus.rightError).ToJson());
+                        }
+                        break;
+                    }
+                default:
+                    {
+                        break;
+                    }
+            }
+        }
+        else
+        {
+            context.Response.Write(new JsonResult(JsonStatus.loginError).ToJson());
+        }
+    }
+
+    /// <summary>
+    /// TP_PM_TESTFORM2_GOODS 查询
+    /// </summary>
+    /// <returns>json</returns>
+    private string search(NameValueCollection form)
+    {
+        using(IDataAccess conn=DataAccess.Create())
+        {
+            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"]) : 10;
+            string sort = HttpContext.Current.Request["sort"] is object ? HttpContext.Current.Request["sort"] : "";
+            string order = HttpContext.Current.Request["order"] is object ? HttpContext.Current.Request["order"] : "";
+            //暂时开放所有权限
+            string right = "ALL";
+            string sqlStr = @"
+            WITH 
+            --取测试产品
+            GOODS AS
+            (
+	            SELECT
+		            TF.NAME,
+		            TFG.GUID,
+		            TFG.TESTFORMGUID,
+		            TFG.BARCODE,
+		            TFG.CREATEUSERID,
+		            TFG.CREATETIME
+	            FROM
+		            TP_PM_TESTFORM2_GOODS TFG
+		            INNER JOIN TP_PM_TESTFORM2 TF ON TFG.TESTFORMGUID = TF.ID
+	            WHERE
+		            TFG.VALUEFLAG = 1
+		            AND TF.VALUEFLAG = 1
+		            AND TFG.TESTFORMGUID = @TESTFORMGUID@
+            ),
+            --取注浆信息
+            GROUTING AS 
+            (
+	            SELECT
+		            GDD.BARCODE,
+		            GDD.GOODSCODE,
+		            GLT.GOODSLEVELTYPENAME,
+		            GDD.GROUTINGDATE,
+		            GDD.GROUTINGLINECODE,
+		            GDD.MOULDCODE,
+		            GDD.USERCODE,
+		            GDD.DELIVERTIME,
+		            GDD.SCRAPFLAG,
+		            GDD.SPECIALREPAIRFLAG 
+	            FROM
+		            GOODS
+		            LEFT JOIN TP_PM_GROUTINGDAILYDETAIL GDD ON GOODS.BARCODE = GDD.BARCODE
+		            LEFT JOIN TP_SYS_GOODSLEVELTYPE GLT ON GDD.GOODSLEVELTYPEID = GLT.GOODSLEVELTYPEID 
+	            ),
+            --取生产数据
+            PRODUCTIONDATA AS 
+            (
+	            SELECT 
+		            P.*
+	            FROM
+		            GOODS G
+		            LEFT JOIN TP_PM_PRODUCTIONDATA P ON P.BARCODE = G.BARCODE
+	            WHERE
+		            P.VALUEFLAG = 1
+            ),
+            --取工序信息
+            PROCEDUREDATA AS 
+            (
+	            SELECT 
+		            P.PRODUCTIONDATAID,
+		            P.BARCODE,
+		            P.PROCEDURENAME,
+		            P.USERCODE,
+		            P.ISREFIRE,
+		            P.ISREWORKED
+	            FROM
+		            PRODUCTIONDATA P
+	            WHERE
+		            P.PRODUCTIONDATAID IN (SELECT MAX( MID.PRODUCTIONDATAID ) FROM PRODUCTIONDATA MID GROUP BY MID.BARCODE)
+	            GROUP BY
+		            P.PRODUCTIONDATAID,
+		            P.BARCODE,
+		            P.PROCEDURENAME,
+		            P.USERCODE,
+		            P.ISREFIRE,
+		            P.ISREWORKED
+            ),
+            --取半检信息(一检 88:3#交坯 91:3#毛坯库入)
+            SEMICHECK1 AS
+            (
+	            SELECT 
+		            S.BARCODE,
+		            LISTAGG(TO_CHAR(D.DEFECTNAME) || '_' ||TO_CHAR(D.DEFECTPOSITIONNAME), ',') WITHIN GROUP (ORDER BY S.BARCODE) AS DEFECTNAME
+	            FROM 
+		            GOODS G
+		            LEFT JOIN TP_PM_SEMICHECK S ON S.BARCODE = G.BARCODE
+		            LEFT JOIN TP_PM_SEMICHECKDEFECT D ON D.SEMICHECKID = S.SEMICHECKID
+	            WHERE
+		            S.VALUEFLAG = 1
+		            AND D.VALUEFLAG = 1
+                    AND S.PROCEDUREID IN (88,91)
+	            GROUP BY
+		            S.BARCODE
+            ),
+            --取半检信息(二检 117:3#二检[半检])
+            SEMICHECK2 AS
+            (
+	            SELECT 
+		            S.BARCODE,
+		            LISTAGG(TO_CHAR(D.DEFECTNAME) || '_' ||TO_CHAR(D.DEFECTPOSITIONNAME), ',') WITHIN GROUP (ORDER BY S.BARCODE) AS DEFECTNAME
+	            FROM 
+		            GOODS G
+		            LEFT JOIN TP_PM_SEMICHECK S ON S.BARCODE = G.BARCODE
+		            LEFT JOIN TP_PM_SEMICHECKDEFECT D ON D.SEMICHECKID = S.SEMICHECKID
+	            WHERE
+		            S.VALUEFLAG = 1
+		            AND D.VALUEFLAG = 1
+                    AND S.PROCEDUREID IN (117)
+	            GROUP BY
+		            S.BARCODE
+            ),
+            --取成检信息
+            PRODUCTIONCHECK AS 
+            (
+	            SELECT 
+		            P.BARCODE,
+		            LISTAGG(TO_CHAR(D.DEFECTNAME) || '_' ||TO_CHAR(D.DEFECTPOSITIONNAME), ',') WITHIN GROUP (ORDER BY P.BARCODE) AS DEFECTNAME
+	            FROM
+		            GOODS G
+		            --3#质量登记 105
+		            INNER JOIN PRODUCTIONDATA P ON G.BARCODE = P.BARCODE AND P.PROCEDUREID = 105
+		            LEFT JOIN TP_SYS_GOODSLEVELTYPE GLT ON P.GOODSLEVELTYPEID = GLT.GOODSLEVELTYPEID 
+		            LEFT JOIN TP_PM_DEFECT D ON P.PRODUCTIONDATAID = D.PRODUCTIONDATAID
+	            WHERE
+		            D.VALUEFLAG = 1
+	            GROUP BY
+		            P.BARCODE
+            ),
+            --取入窑信息
+            KILN AS 
+            (
+	            SELECT 
+		            P.BARCODE,
+		            P.KILNCODE,
+		            P.KILNCARCODE,
+		            P.CREATETIME
+	            FROM
+		            GOODS G 
+		            --3#入窑 102
+		            INNER JOIN PRODUCTIONDATA P ON G.BARCODE = P.BARCODE AND P.PROCEDUREID = 102
+            )
+
+            SELECT
+                DISTINCT
+	            G.GUID,
+	            G.GUID AS SID,
+	            G.TESTFORMGUID,
+	            G.NAME,
+	            GR.GOODSCODE,
+	            GR.GOODSLEVELTYPENAME AS LASTLEVEL,
+	            GR.GROUTINGDATE,
+	            GR.GROUTINGLINECODE,
+	            GR.MOULDCODE,
+	            GR.DELIVERTIME,
+	            GR.SCRAPFLAG,
+	            GR.SPECIALREPAIRFLAG,
+	            P.PRODUCTIONDATAID,
+	            P.BARCODE,
+	            P.PROCEDURENAME,
+	            P.USERCODE,
+	            P.ISREFIRE,
+	            P.ISREWORKED,
+	            K.KILNCODE,
+	            K.KILNCARCODE,
+	            K.CREATETIME AS KILNCREATETIME,
+	            SC1.DEFECTNAME AS SEMICHECK1DEFECT,
+	            SC2.DEFECTNAME AS SEMICHECK2DEFECT,
+	            PC.DEFECTNAME AS CHECKDEFECT
+            FROM
+	            GOODS G
+	            LEFT JOIN GROUTING GR ON GR.BARCODE = G.BARCODE
+	            LEFT JOIN SEMICHECK1 SC1 ON SC1.BARCODE = G.BARCODE
+	            LEFT JOIN SEMICHECK2 SC2 ON SC2.BARCODE = G.BARCODE
+	            LEFT JOIN PROCEDUREDATA P ON P.BARCODE = G.BARCODE
+	            LEFT JOIN PRODUCTIONCHECK PC ON PC.BARCODE = G.BARCODE
+	            LEFT JOIN KILN K ON K.BARCODE = G.BARCODE
+            ";
+
+            List<CDAParameter> sqlPara = new List<CDAParameter>();
+            sqlPara.Add(new CDAParameter("TESTFORMGUID", HttpContext.Current.Request["TESTFORMGUID"]));
+            //sqlPara.Add(new CDAParameter("ACCOUNTID", HttpContext.Current.Session["accountId"]));
+            //sqlPara.Add(new CDAParameter("CREATEUSERID", HttpContext.Current.Session["userId"]));
+            //暂时开放所有权限
+            //sqlPara.Add(new CDAParameter("RIGHT", right));
+
+            //if(!string.IsNullOrEmpty(form["GUID"]))
+            //{
+            //    sqlStr += " AND m.GUID = @GUID@ ";
+            //    sqlPara.Add(new CDAParameter("GUID", form["GUID"]));
+            //}
+            //if(sort != "")
+            //{
+            //    sqlStr += " ORDER BY " + sort + " " + order;
+            //}
+            int total = 0;
+            DataTable dt = conn.SelectPages(page, rows,out total, sqlStr, sqlPara.ToArray());
+            return new JsonResult(dt) { total = total}.ToJson();
+        }
+    }
+
+    /// <summary>
+    /// 详细 TP_PM_TESTFORM2_GOODS
+    /// </summary>
+    /// <returns>json</returns>
+    private string detail()
+    {
+        using(IDataAccess conn= DataAccess.Create())
+        {
+            DataTable dt = conn.ExecuteDatatable(@"
+               SELECT 
+                    m.GUID,
+                    m.TESTFORMGUID,
+                    m.BARCODE,
+                    m.VALUEFLAG,
+                    m.ACCOUNTID,
+                    m.CREATEUSERID,
+                    m.CREATETIME,
+                    m.UPDATEUSERID,
+                    m.UPDATETIME
+                FROM
+                    TP_PM_TESTFORM2_GOODS m
+                    LEFT JOIN 
+                    TP_PM_GROUTINGDAILYDETAIL GDD
+                    ON m.BARCODE = GDD.BARCODE
+                WHERE 
+                    m.VALUEFLAG = '1'
+                    AND m.ACCOUNTID = @ACCOUNTID@
+                    AND m.GUID = @GUID@
+                ",
+                new CDAParameter("ACCOUNTID",HttpContext.Current.Session["accountId"]),
+                new CDAParameter("GUID",HttpContext.Current.Request["id"])
+            );
+            return new JsonResult(dt).ToJson();
+        }
+    }
+
+    /// <summary>
+    /// 插入 TP_PM_TESTFORM2_GOODS
+    /// </summary>
+    /// <returns>json</returns>
+    private string insert(NameValueCollection form)
+    {
+        using(IDataAccess conn= DataAccess.Create())
+        {
+            //添加产品处理
+            object result0 = conn.ExecuteScalar(@"
+                SELECT DISTINCT 1 FROM TP_PM_TESTFORM2_GOODS WHERE TESTFORMGUID = @TESTFORMID@ AND BARCODE =@BARCODE@ AND VALUEFLAG = 1
+                ",
+                new CDAParameter("BARCODE", form["BARCODE"]),
+                new CDAParameter("TESTFORMID", form["TESTFORMGUID"])
+            );
+            string str = result0 + "";
+            if (str == "1")
+            {
+                return new JsonResult(JsonStatus.otherError){ success = false, message = "条码重复", total = 0, rows = "" }.ToJson();
+            }
+            object result1 = conn.ExecuteScalar(@"
+                SELECT DISTINCT 1 FROM TP_PM_GROUTINGDAILYDETAIL WHERE BARCODE =@BARCODE@ AND VALUEFLAG = 1
+                ",
+              new CDAParameter("BARCODE", form["BARCODE"])
+          ) ;
+            string str1 = result1+ "";
+            if (str1 == "")
+            {
+                return new JsonResult(JsonStatus.otherError){ success = false, message = "条码不存在", total = 0, rows = "" }.ToJson();
+            }
+
+            //string primaryKey = conn.GetSequenceNextval("SEQ_TP_PM_TESTFORM2_GOODS_ID").ToString();
+            //string primaryKey = Guid.NewGuid().ToString().Replace("_", "");
+            int result = conn.ExecuteNonQuery(@"
+                INSERT INTO TP_PM_TESTFORM2_GOODS (
+                    TESTFORMGUID,
+                    BARCODE,
+                    ACCOUNTID,CREATEUSERID,UPDATEUSERID
+                ) VALUES (
+                    @TESTFORMGUID@,
+                    @BARCODE@,
+                    @ACCOUNTID@,@CREATEUSERID@,@UPDATEUSERID@
+                )
+                ",
+                //new CDAParameter("GUID",primaryKey),
+                new CDAParameter("TESTFORMGUID",form["TESTFORMGUID"]),
+                new CDAParameter("BARCODE",form["BARCODE"]),
+                new CDAParameter("ACCOUNTID",HttpContext.Current.Session["accountId"]),
+                new CDAParameter("CREATEUSERID",HttpContext.Current.Session["userId"]),
+                new CDAParameter("UPDATEUSERID",HttpContext.Current.Session["userId"])
+            );
+            int resultup = conn.ExecuteNonQuery(@"
+                UPDATE TP_PM_GROUTINGDAILYDETAIL 
+                SET
+                    TESTFORMFLAG =1
+                WHERE 
+                     BARCODE = @BARCODE@
+                ",
+            new CDAParameter("BARCODE",form["BARCODE"])
+        );
+            return new JsonResult(JsonStatus.success).ToJson();
+        }
+    }
+
+    /// <summary>
+    /// 更新 TP_PM_TESTFORM2_GOODS
+    /// </summary>
+    /// <returns>json</returns>
+    private string update(NameValueCollection form)
+    {
+        using(IDataAccess conn=DataAccess.Create())
+        {
+            int result = conn.ExecuteNonQuery(@"
+                UPDATE TP_PM_TESTFORM2_GOODS 
+                SET
+                    TESTFORMGUID = @TESTFORMGUID@,
+                    BARCODE = @BARCODE@,
+                    UPDATEUSERID = @UPDATEUSERID@,
+                    UPDATETIME = sysdate
+                WHERE 
+                    GUID = @GUID@
+                ",
+                new CDAParameter("TESTFORMGUID",form["TESTFORMGUID"]),
+                new CDAParameter("BARCODE",form["BARCODE"]),
+                new CDAParameter("UPDATEUSERID",HttpContext.Current.Session["userId"]),
+                new CDAParameter("GUID",HttpContext.Current.Request["id"])
+            );
+            return new JsonResult(JsonStatus.success).ToJson();
+        }
+    }
+
+    /// <summary>
+    /// 删除 TP_PM_TESTFORM2_GOODS
+    /// </summary>
+    /// <returns>json</returns>
+    private string delete()
+    {
+        using(IDataAccess conn= DataAccess.Create())
+        {
+            if (HttpContext.Current.Request["id"] is object)
+            {
+                DataTable dt = conn.ExecuteDatatable(@"
+               SELECT 
+                BARCODE
+                FROM
+                     TP_PM_TESTFORM2_GOODS
+                WHERE 
+                    GUID = @GUID@
+                ",
+   new CDAParameter("GUID", HttpContext.Current.Request["id"])
+   );
+                int resultup = conn.ExecuteNonQuery(@"
+                UPDATE TP_PM_GROUTINGDAILYDETAIL 
+                SET
+                    TESTFORMFLAG =0
+                WHERE 
+                     BARCODE = @BARCODE@
+                ",
+              new CDAParameter("BARCODE",dt.Rows[0]["BARCODE"])
+          );
+                //int result = conn.ExecuteNonQuery(@"
+                //    DELETE 
+                //        TP_PM_TESTFORM2_GOODS 
+                //    WHERE 
+                //        INSTR(',' || @GUID@ || ',' , ',' || GUID || ',') > 0 
+                //    ",
+                //    new CDAParameter("GUID", HttpContext.Current.Request["id"])
+                //);
+                string guidStr = "'" + HttpContext.Current.Request["id"].Replace(",", "','") + "'";
+                int result = conn.ExecuteNonQuery(@"
+                    DELETE 
+                        TP_PM_TESTFORM2_GOODS 
+                    WHERE 
+                        GUID IN ( {GUID} )
+                    ".Replace("{GUID}", guidStr)
+                );
+                return new JsonResult(JsonStatus.success).ToJson();
+            }
+            else
+            {
+                return new JsonResult(JsonStatus.otherError).ToJson();
+            }
+        }
+    }
+
+    /// <summary>
+    /// 导出 TP_PM_TESTFORM2_GOODS
+    /// </summary>
+    /// <returns>json</returns>
+    private string export()
+    {
+        return search(new NameValueCollection());
+    }
+
+    private class Button
+    {
+        public bool testformgoodsButtonIndex = false;
+        public bool testformgoodsButtonInsert = false;
+        public bool testformgoodsButtonInsertBatch = false;
+        public bool testformgoodsButtonCopy = false;
+        public bool testformgoodsButtonUpdate = false;
+        public bool testformgoodsButtonDelete = false;
+        public bool testformgoodsButtonCancel = false;
+        public bool testformgoodsButtonSearch = false;
+        public bool testformgoodsButtonDetail = false;
+        public bool testformgoodsButtonCheckbox = false;
+        public bool testformgoodsButtonExport = false;
+        public bool testformgoodsButtonReload = false;
+    }
+
+    private class xRecord
+    {
+        public string sid { get; set; }
+        public string TESTFORMGUID { get; set; }
+        public string BARCODE { get; set; }
+    }
+
+    public bool IsReusable
+    {
+        get
+        {
+            return false;
+        }
+    }
+
+}

+ 80 - 0
wwwroot/mes/pm/testformgoods/testformgoods_add.html

@@ -0,0 +1,80 @@
+<!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>
+    <link rel="shortcut icon" href="/img/logo.png" />
+    <link rel="bookmark" href="/img/logo.png" />
+    <link rel="stylesheet" type="text/css" href="/plugins/easyui/themes/dongke/easyui.css">
+    <link rel="stylesheet" type="text/css" href="/plugins/easyui/themes/icon.css">
+    <link rel="stylesheet" type="text/css" href="/plugins/xeasyui/xuwell.css">
+    <script type="text/javascript" src="/plugins/easyui/jquery.min.js"></script>
+    <script type="text/javascript" src="/plugins/easyui/jquery.easyui.min.js"></script>
+    <script type="text/javascript" src="/plugins/easyui/locale/easyui-lang-zh_CN.js"></script>
+    <script type="text/javascript" src="/plugins/xeasyui/xuwell.js"></script>
+</head>
+<body class="easyui-layout">
+    <!--
+        <input class="easyui-combobox w-input" id="叶子" name="叶子" data-options="prompt:'请填写叶子...',tipPosition:'top',url:'/mes/list.ashx?m=truefalse',method:'get',valueField:'text',textField:'text',panelHeight:'200px',editable:'true'" style="width:100%;height:32px;">
+        <input class="easyui-filebox" id="图片" name="图片" data-options="prompt:'请选择图片...',tipPosition:'top',buttonText:'选择图片',buttonAlign:'right',accept:'image/*',onChange:$.imagePreview" style="width:100%;height:32px;" >
+    -->
+    <div data-options="region:'center',plain:true,border:false">
+        <form id="testformgoodsForm" method="post" class="w-form">
+            <div class="w-div">
+                <div class="w-fieldbar" onclick="$('#more1').toggle()" style="cursor:pointer;"></div>
+            </div>
+            <div id="more1" style="display:block;">
+                <div class="w-div">
+                    <div class="w-fieldname">GUID:</div>
+                    <div class="w-field"><input disabled class="easyui-textbox" id="GUID" name="GUID" data-options="required:false,prompt:'请填写GUID...',tipPosition:'top'" style="width:100%;height:32px;"></div>
+                </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">实验单GUID:</div>
+                    <div class="w-field">
+                        <input class="easyui-combobox" id="TESTFORMGUID" name="TESTFORMGUID"  data-options="required:true,prompt:'',tipPosition:'top',url:'../testform/testform.ashx?m=getList' ,method:'get',valueField:'ID',textField:'NAME',panelHeight:'300px',editable:'false'" style="width: 100%; height: 32px;">
+                    </div>
+                </div>
+                <div class="w-div">
+                    <div class="w-fieldname">产品条码:</div>
+                    <div class="w-field"><input class="easyui-textbox" id="BARCODE" name="BARCODE" data-options="required:false,prompt:'请填写BARCODE...',tipPosition:'top'" style="width:100%;height:32px;"></div>
+                </div>
+            </div>
+        </form>
+    </div>
+    <div data-options="region:'south',border:false" class="w-bar">
+        <a href="javascript:void(0)" id="testformgoodsButtonSave" class="easyui-linkbutton" data-options="iconCls:'icon-save'" onclick="testformgoodsButtonSubmit_Click()">保存</a>
+        <a href="javascript:void(0)" id="testformgoodsButtonClose" class="easyui-linkbutton" data-options="iconCls:'icon-cancel'" onclick="testformgoodsButtonCancel_Click()">关闭</a>
+    </div>
+
+    <script type="text/javascript">
+
+        $(function () {
+            $('#testformgoodsForm').formLoad({
+                url: 'testformgoods.ashx?m=a'
+            });
+            $('#more1').toggle();
+        });
+
+        function testformgoodsButtonSubmit_Click() {
+            $.dialog.save({
+                formid: 'testformgoodsForm',
+                datagridid: 'testformgoodsDatagrid',
+                url: 'testformgoods.ashx?m=i'
+            });
+        }
+
+        function testformgoodsButtonCancel_Click() {
+            $.dialog.close();
+        }
+
+    </script>
+</body>
+</html>

+ 117 - 0
wwwroot/mes/pm/testformgoods/testformgoods_detail.html

@@ -0,0 +1,117 @@
+<!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>
+    <link rel="shortcut icon" href="/img/logo.png" />
+    <link rel="bookmark" href="/img/logo.png" />
+    <link rel="stylesheet" type="text/css" href="/plugins/easyui/themes/dongke/easyui.css">
+    <link rel="stylesheet" type="text/css" href="/plugins/easyui/themes/icon.css">
+    <link rel="stylesheet" type="text/css" href="/plugins/xeasyui/xuwell.css">
+    <script type="text/javascript" src="/plugins/easyui/jquery.min.js"></script>
+    <script type="text/javascript" src="/plugins/easyui/jquery.easyui.min.js"></script>
+    <script type="text/javascript" src="/plugins/easyui/locale/easyui-lang-zh_CN.js"></script>
+    <script type="text/javascript" src="/plugins/xeasyui/xuwell.js"></script>
+</head>
+<body class="easyui-layout">
+    <div data-options="region:'center',plain:true,border:false">
+        <form id="testformgoodsForm" method="post" class="w-form">
+            <div class="w-div">
+                <div class="w-fieldbar" onclick="$('#more1').toggle()" style="cursor:pointer;"></div>
+            </div>
+            <div id="more1" style="display:block;">
+                <div class="w-div">
+                    <div class="w-fieldname">GUID:</div>
+                    <div class="w-field"><div id="GUID" data-field="true" class="w-fieldvalue"></div></div>
+                </div>
+                <div class="w-div">
+                    <div class="w-fieldname">有效标识:</div>
+                    <div class="w-field"><div id="VALUEFLAG" data-field="true" class="w-fieldvalue"></div></div>
+                </div>
+                <div class="w-div">
+                    <div class="w-fieldname">账套ID:</div>
+                    <div class="w-field"><div id="ACCOUNTID" data-field="true" class="w-fieldvalue"></div></div>
+                </div>
+                <div class="w-div">
+                    <div class="w-fieldname">创建工号ID:</div>
+                    <div class="w-field"><div id="CREATEUSERID" data-field="true" class="w-fieldvalue"></div></div>
+                </div>
+                <div class="w-div">
+                    <div class="w-fieldname">创建时间:</div>
+                    <div class="w-field"><div id="CREATETIME" data-field="true" class="w-fieldvalue"></div></div>
+                </div>
+                <div class="w-div">
+                    <div class="w-fieldname">更新工号ID:</div>
+                    <div class="w-field"><div id="UPDATEUSERID" data-field="true" class="w-fieldvalue"></div></div>
+                </div>
+                <div class="w-div">
+                    <div class="w-fieldname">更新时间:</div>
+                    <div class="w-field"><div id="UPDATETIME" data-field="true" class="w-fieldvalue"></div></div>
+                </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">测试单GUID:</div>
+                    <div class="w-field"><div id="TESTFORMGUID" data-field="true" class="w-fieldvalue"></div></div>
+                </div>
+                <div class="w-div">
+                    <div class="w-fieldname">产品条码:</div>
+                    <div class="w-field"><div id="BARCODE" data-field="true" class="w-fieldvalue"></div></div>
+                </div>
+                <div class="w-div">
+                    <div class="w-fieldname">产品编码:</div>
+                    <div class="w-field"><div id="GOODSCODE" data-field="true" class="w-fieldvalue"></div></div>
+                </div>
+            </div>
+        </form>
+    </div>
+    <div id="testformgoodsToolbar" data-options="region:'south',border:false" class="w-bar">
+        <a href="javascript:void(0)" style="display:none" id="testformgoodsButtonCopy" class="easyui-linkbutton" data-options="iconCls:'icon-add'" onclick="testformgoodsButtonCopy_Click()">复制</a>
+        <a href="javascript:void(0)" style="display:none" id="testformgoodsButtonUpdate" class="easyui-linkbutton" data-options="iconCls:'icon-edit'" onclick="testformgoodsButtonEdit_Click()">修改</a>
+        <a href="javascript:void(0)" style="display:none" id="testformgoodsButtonDelete" class="easyui-linkbutton" data-options="iconCls:'icon-remove'" onclick="testformgoodsButtonDelete_Click()">删除</a>
+        <a href="javascript:void(0)" id="testformgoodsButtonClose" class="easyui-linkbutton" data-options="iconCls:'icon-cancel'" onclick="testformgoodsButtonCancel_Click()">关闭</a>
+    </div>
+    <script type="text/javascript">
+
+        $(function () {
+            $('#testformgoodsToolbar').buttonLoad({
+                url:'testformgoods.ashx?m=b'
+            });
+            $('#testformgoodsForm').formLoad({
+                url: 'testformgoods.ashx?m=t'
+            });
+            $('#more1').toggle();
+        });
+
+        function testformgoodsButtonCopy_Click() {
+            $.dialog.go({
+                url: 'testformgoods_add.html?id=' + request('id')
+            });
+        }
+
+        function testformgoodsButtonEdit_Click() {
+            $.dialog.go({
+                datagridid: 'testformgoodsDatagrid',
+                url: 'testformgoods_edit.html?id=' + request('id')
+            });
+        }
+
+        function testformgoodsButtonDelete_Click() {
+            $.dialog.delete({
+                url: 'testformgoods.ashx?m=d&id=' + request('id')
+            });
+        }
+
+        function testformgoodsButtonCancel_Click() {
+            $.dialog.close();
+        }
+
+    </script>
+</body>
+</html>

+ 101 - 0
wwwroot/mes/pm/testformgoods/testformgoods_edit.html

@@ -0,0 +1,101 @@
+<!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>
+    <link rel="shortcut icon" href="/img/logo.png" />
+    <link rel="bookmark" href="/img/logo.png" />
+    <link rel="stylesheet" type="text/css" href="/plugins/easyui/themes/dongke/easyui.css">
+    <link rel="stylesheet" type="text/css" href="/plugins/easyui/themes/icon.css">
+    <link rel="stylesheet" type="text/css" href="/plugins/xeasyui/xuwell.css">
+    <script type="text/javascript" src="/plugins/easyui/jquery.min.js"></script>
+    <script type="text/javascript" src="/plugins/easyui/jquery.easyui.min.js"></script>
+    <script type="text/javascript" src="/plugins/easyui/locale/easyui-lang-zh_CN.js"></script>
+    <script type="text/javascript" src="/plugins/xeasyui/xuwell.js"></script>
+</head>
+<body class="easyui-layout">
+    <!--
+        <input class="easyui-combobox w-input" id="叶子" name="叶子" data-options="prompt:'请填写叶子...',tipPosition:'top',url:'/mes/list.ashx?m=truefalse',method:'get',valueField:'text',textField:'text',panelHeight:'200px',editable:'true'" style="width:100%;height:32px;">
+        <input class="easyui-filebox" id="图片" name="图片" data-options="prompt:'请选择图片...',tipPosition:'top',buttonText:'选择图片',buttonAlign:'right',accept:'image/*',onChange:$.imagePreview" style="width:100%;height:32px;" >
+    -->
+    <div data-options="region:'center',plain:true,border:false">
+        <form id="testformgoodsForm" method="post" class="w-form">
+            <div class="w-div">
+                <div class="w-fieldbar" onclick="$('#more1').toggle()" style="cursor:pointer;"></div>
+            </div>
+            <div id="more1" style="display:block;">
+                <div class="w-div">
+                    <div class="w-fieldname">GUID:</div>
+                    <div class="w-field"><div id="GUID" data-field="true" class="w-fieldvalue"></div></div>
+                </div>
+                <div class="w-div">
+                    <div class="w-fieldname">有效标识:</div>
+                    <div class="w-field"><div id="VALUEFLAG" data-field="true" class="w-fieldvalue"></div></div>
+                </div>
+                <div class="w-div">
+                    <div class="w-fieldname">账套ID:</div>
+                    <div class="w-field"><div id="ACCOUNTID" data-field="true" class="w-fieldvalue"></div></div>
+                </div>
+                <div class="w-div">
+                    <div class="w-fieldname">创建工号ID:</div>
+                    <div class="w-field"><div id="CREATEUSERID" data-field="true" class="w-fieldvalue"></div></div>
+                </div>
+                <div class="w-div">
+                    <div class="w-fieldname">创建时间:</div>
+                    <div class="w-field"><div id="CREATETIME" data-field="true" class="w-fieldvalue"></div></div>
+                </div>
+                <div class="w-div">
+                    <div class="w-fieldname">更新工号ID:</div>
+                    <div class="w-field"><div id="UPDATEUSERID" data-field="true" class="w-fieldvalue"></div></div>
+                </div>
+                <div class="w-div">
+                    <div class="w-fieldname">更新时间:</div>
+                    <div class="w-field"><div id="UPDATETIME" data-field="true" class="w-fieldvalue"></div></div>
+                </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">测试单GUID:</div>
+                    <div class="w-field"><input class="easyui-textbox" readonly id="TESTFORMGUID" name="TESTFORMGUID" data-options="required:false,prompt:'请填写TESTFORMGUID...',tipPosition:'top'" style="width:100%;height:32px;"></div>
+                </div>
+                <div class="w-div">
+                    <div class="w-fieldname">产品条码:</div>
+                    <div class="w-field"><input class="easyui-textbox" id="BARCODE" name="BARCODE" data-options="required:false,prompt:'请填写BARCODE...',tipPosition:'top'" style="width:100%;height:32px;"></div>
+                </div>
+            </div>
+        </form>
+    </div>
+    <div data-options="region:'south',border:false" class="w-bar">
+        <a href="javascript:void(0)" id="testformgoodsButtonSave" class="easyui-linkbutton" data-options="iconCls:'icon-save'" onclick="testformgoodsButtonSubmit_Click()">保存</a>
+        <a href="javascript:void(0)" id="testformgoodsButtonClose" class="easyui-linkbutton" data-options="iconCls:'icon-cancel'" onclick="testformgoodsButtonCancel_Click()">关闭</a>
+    </div>
+    <script type="text/javascript">
+
+        $(function () {
+            $('#testformgoodsForm').formLoad({
+                url: 'testformgoods.ashx?m=t'
+            });
+            $('#more1').toggle();
+        });
+
+        function testformgoodsButtonSubmit_Click() {
+            $.dialog.save({
+                formid: 'testformgoodsForm',
+                datagridid: 'testformgoodsDatagrid',
+                url: 'testformgoods.ashx?m=u&id=' + request('id')
+            });
+        }
+
+        function testformgoodsButtonCancel_Click() {
+            $.dialog.close();
+        }
+
+    </script>
+</body>
+</html>

+ 214 - 0
wwwroot/mes/pm/testformgoods/testformgoods_index.html

@@ -0,0 +1,214 @@
+<!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>
+    <link rel="shortcut icon" href="/img/logo.png" />
+    <link rel="bookmark" href="/img/logo.png" />
+    <link rel="stylesheet" type="text/css" href="/plugins/easyui/themes/dongke/easyui.css">
+    <link rel="stylesheet" type="text/css" href="/plugins/easyui/themes/icon.css">
+    <link rel="stylesheet" type="text/css" href="/plugins/xeasyui/xuwell.css">
+    <script type="text/javascript" src="/plugins/easyui/jquery.min.js"></script>
+    <script type="text/javascript" src="/plugins/easyui/jquery.easyui.min.js"></script>
+    <script type="text/javascript" src="/plugins/easyui/locale/easyui-lang-zh_CN.js"></script>
+    <script type="text/javascript" src="/plugins/xeasyui/xuwell.js"></script>
+    <link href="/plugins/xeasyui/toolbar.min.css" rel="stylesheet" />
+</head>
+<body class="easyui-layout">
+    <div data-options="region:'center',plain:true,border:false">
+        <!--工具条-->
+        <div id="testformgoodsToolbar" class="i-toolbar">
+            <a href="javascript:void(0)" style="display:none" id="testformgoodsButtonInsert" title="添加" class="easyui-linkbutton" iconcls="icon-add" plain="true" onclick="testformgoodsButtonInsert_Click()">添加</a>
+            <a href="javascript:void(0)" style="display:none" id="testformgoodsButtonUpdate" title="编辑" class="easyui-linkbutton" iconcls="icon-edit" plain="true" onclick="testformgoodsButtonUpdate_Click()">修改</a>
+            <a href="javascript:void(0)" style="display:none" id="testformgoodsButtonDelete" title="删除" class="easyui-linkbutton" iconcls="icon-remove" plain="true" onclick="testformgoodsButtonDelete_Click()">删除</a>
+            <a href="javascript:void(0)" style="display:none" id="testformgoodsButtonDetail" title="详细" class="easyui-linkbutton" iconcls="icon-detail" plain="true" onclick="testformgoodsButtonDetail_Click()">详细</a>
+            <a href="javascript:void(0)" style="display:none" id="testformgoodsButtonCheckbox" title="显示复选框" class="easyui-linkbutton" iconcls="icon-ok" plain="true" toggle="true" onclick="testformgoodsButtonCheck_Click()">复选</a>
+            <a href="javascript:void(0)" style="display:none" id="testformgoodsButtonSearch" title="搜索" class="easyui-linkbutton" iconcls="icon-search" plain="true" toggle="true" onclick="testformgoodsButtonSearch_Click()">搜索</a>
+            <a href="javascript:void(0)" style="display:none" id="testformgoodsButtonExport" title="导出" class="easyui-linkbutton" iconcls="icon-excel" plain="true" onclick="testformgoodsButtonExport_Click()">导出</a>
+            <a href="javascript:void(0)" id="testformgoodsButtonReload" title="刷新" class="easyui-linkbutton" iconcls="icon-reload" plain="true" onclick="testformgoodsButtonReload_Click()">刷新</a>
+            <a href="javascript:void(0)" id="btnHelp" title="帮助" class="easyui-linkbutton" iconcls="icon-help" plain="true" onclick="tbHelp()">帮助</a>
+            <div id="testformgoodsSearchDiv" style="display:none;padding:10px;">
+                <form id="testformgoodsForm">
+                    <div>
+                        <!--GUID:
+    <input class="easyui-textbox" id="GUID" name="GUID" data-options="required:false,prompt:'',tipPosition:'top'" style="width:80px;height:32px;">-->
+                        实验单:
+                        <input class="easyui-combobox" id="TESTFORMGUID" name="TESTFORMGUID" data-options="required:false,prompt:'',tipPosition:'top',url:'../testform/testform.ashx?m=getList' ,method:'get',valueField:'ID',textField:'NAME',panelHeight:'300px',editable:'false'," style="width: 400px; height: 32px;">
+                        产品条码:
+                        <input class="easyui-textbox" id="BARCODE" name="BARCODE" data-options="required:false,prompt:'',tipPosition:'top'" style="width:80px;height:32px;">
+                        <a href="javascript:void(0)" id="testformgoodsButtonSearchReset" title="清空" class="easyui-linkbutton" plain="false" onclick="$('#testformgoodsForm').form('clear')">清空</a>
+                        <a href="javascript:void(0)" id="testformgoodsButtonSearchSubmit" title="搜索" class="easyui-linkbutton" plain="false" onclick="testformgoodsButtonSearchSubmit_Click()">搜索</a>
+                    </div>
+                </form>
+            </div>
+        </div>
+        <!--表格-->
+        <table id="testformgoodsDatagrid" data-options="toolbar: '#testformgoodsToolbar',onDblClickRow: testformgoodsDatagridDblClickRow,showFooter:false">
+<!--
+            <thead data-options="frozen:true">
+                <tr>
+                    <th data-options="field:'标识',align:'left',sortable:true">标识</th>
+                </tr>
+            </thead>
+-->
+            <thead>
+                <tr>
+                    <th data-options="field:'SID',title:'SID',width:220,align:'left',checkbox:true,hidden:true">SID</th>
+                    <!--<th data-options="field:'GUID',title:'GUID',align:'left',sortable:true"></th>-->
+                    <th data-options="field:'TESTFORMGUID',title:'实验单',align:'left',sortable:false"></th>
+                    <th data-options="field:'NAME',title:'实验单名称',align:'left',sortable:false"></th>
+                    <th data-options="field:'BARCODE',title:'产品条码',align:'left',sortable:false"></th>
+                    <th data-options="field:'GOODSCODE',title:'产品编码',align:'left',sortable:false"></th>
+
+                    <th data-options="field:'LASTLEVEL',title:'产品等级',align:'left',sortable:false"></th>
+
+                    <th data-options="field:'GROUTINGDATE',title:'注浆时间',align:'left',sortable:false"></th>
+                    <th data-options="field:'GROUTINGLINECODE',title:'成型线号',align:'left',sortable:false"></th>
+                    <th data-options="field:'MOULDCODE',title:'模具编号',align:'left',sortable:false"></th>
+                    <th data-options="field:'USERCODE',title:'成型工号',align:'left',sortable:false"></th>
+                    <th data-options="field:'DELIVERTIME',title:'交坯时间',align:'left',sortable:false"></th>
+                    <th data-options="field:'PROCEDURENAME',title:'当前工序',align:'left',sortable:false"></th>
+
+                    <th data-options="field:'SEMICHECK1DEFECT',title:'一检缺陷',align:'left',sortable:false"></th>
+                    <th data-options="field:'SEMICHECK2DEFECT',title:'二检缺陷',align:'left',sortable:false"></th>
+                    <th data-options="field:'CHECKDEFECT',title:'成检缺陷',align:'left',sortable:false"></th>
+
+                    <th data-options="field:'USERCODE',title:'生产工号',align:'left',sortable:false"></th>
+                    <th data-options="field:'KILNCREATETIME',title:'登窑时间',align:'left',sortable:false"></th>
+                    <th data-options="field:'KILNCODE',title:'窑炉编码',align:'left',sortable:false"></th>
+                    <th data-options="field:'KILNCARCODE',title:'窑车编码',align:'left',sortable:false"></th>
+                    <th data-options="field:'SCRAPFLAG',title:'损坯状态',align:'left',sortable:false"></th>
+                    <th data-options="field:'ISREFIRE',title:'重烧标识',align:'left',sortable:false"></th>
+                    <th data-options="field:'SPECIALREPAIRFLAG',title:'干补标识',align:'left',sortable:false"></th>
+                    <th data-options="field:'ISREWORKED',title:'返工标识',align:'left',sortable:false"></th>
+                </tr>
+            </thead>
+        </table>
+    </div>
+    <script type="text/javascript">
+
+        //加载完成
+        $(function () {
+            //加载按钮
+            $('#testformgoodsToolbar').buttonLoad({
+                url:'testformgoods.ashx?m=b'
+            });
+            //testformgoodsButtonSearch_Click();
+            //加载表格数据
+            testformgoodsButtonSearchSubmit_Click();
+        });
+
+        //添加按钮
+        function testformgoodsButtonInsert_Click() {
+            $('#testformgoodsDatagrid').datagridDialog({
+                title: '添加数据',
+                width: 640,
+                height: 480,
+                url: 'testformgoods_add.html'
+            });
+        }
+
+        //修改按钮
+        function testformgoodsButtonUpdate_Click() {
+            $('#testformgoodsDatagrid').datagridDialog({
+                title: '修改数据',
+                width: 640,
+                height: 480,
+                url: 'testformgoods_edit.html',
+                requireSelect: true
+            });
+        }
+
+        //删除按钮
+        function testformgoodsButtonDelete_Click() {
+            $('#testformgoodsDatagrid').datagridPost({
+                title:'删除操作',
+                url: 'testformgoods.ashx?m=d',
+                onValidate: function (r) { return true; }
+            });
+        }
+
+        //详细按钮
+        function testformgoodsButtonDetail_Click() {
+            $('#testformgoodsDatagrid').datagridDialog({
+                title: '详细数据',
+                width: 640,
+                height: 480,
+                url: 'testformgoods_detail.html',
+                requireSelect: true
+            });
+        }
+
+        //复选按钮
+        function testformgoodsButtonCheck_Click() {
+            $('#testformgoodsDatagrid').datagridCheckbox({
+                buttonid: 'testformgoodsButtonCheckbox',
+                valuefield: 'SID'
+            });
+        }
+
+        //搜索按钮
+        function testformgoodsButtonSearch_Click() {
+            $('#testformgoodsSearchDiv').toggle();
+            $('#testformgoodsDatagrid').datagrid('resize');
+        }
+
+        //搜索提交
+        function testformgoodsButtonSearchSubmit_Click() {
+            if ($('#testformgoodsForm').form("validate")) {
+                $('#testformgoodsDatagrid').datagridLoad({
+                    title: '实验单产品管理',
+                    idField: 'SID',
+                    queryParams: $('#testformgoodsForm').serializeJson(),
+                    url: 'testformgoods.ashx?m=s',
+                    columnMoving: false
+                });
+            }
+
+        }
+
+        //导出
+        function testformgoodsButtonExport_Click() {
+            //加载表头
+            var fields = $('#testformgoodsDatagrid').datagrid('getColumnFields');
+            var headers = [];
+            for (var i = 0; i < fields.length; i++) {
+                headers.push($('#testformgoodsDatagrid').datagrid('getColumnOption', fields[i])['title']);
+                //headers.push(fields[i]);
+            }
+            $('#testformgoodsDatagrid').datagridExport({
+                headers: headers,
+                fileName: '导出数据(TP_PM_TESTFORM_GOODS).xls',
+                workSheet: '导出数据(TP_PM_TESTFORM_GOODS)'
+            });
+        }
+
+        //刷新
+        function testformgoodsButtonReload_Click() {
+            testformgoodsButtonSearchSubmit_Click();
+        }
+
+        //帮助事件
+        function tbHelp() {
+            $('#testformgoodsDatagrid').datagridDialog({
+                title: '帮助',
+                width: 640,
+                height: 480,
+                url: 'rpt_help.html'
+            });
+        }
+
+        //表格双击
+        function testformgoodsDatagridDblClickRow(rowIndex, rowData) {
+            testformgoodsButtonDetail_Click();
+        }
+
+        function formatterTrueFalse(value, row, index) { return value == 'True' ? '是' : '否'; }
+        function stylerTrueFalse(value, row, index) { return value == 'True' ? 'color:black' : 'color:red'; }
+
+    </script>
+</body>
+</html>