From 376bb6cf439eaa3b2867825fe22a14e381dd9213 Mon Sep 17 00:00:00 2001
From: yl <ykxkd@outlook.com>
Date: 星期三, 14 八月 2024 17:55:48 +0800
Subject: [PATCH] 1.新增工序找设备(工位)接口 2.新增物料清单查询、新增、修改接口

---
 VueWebCoreApi/DLL/DAL/WorkOrderDAL.cs                   |  462 ++++++++-------
 VueWebCoreApi/Models/WorkData/WorkRouteStepEqp.cs       |    8 
 VueWebCoreApi/DLL/DAL/GeneralBasicDataDAL.cs            |   69 ++
 VueWebCoreApi/DLL/BLL/ProductModelBLL.cs                |   57 +
 VueWebCoreApi/DLL/BLL/GeneralBasicDataBLL.cs            |    7 
 VueWebCoreApi/DLL/DAL/ProductModelDAL.cs                |  699 ++++++++++++++++++++++-
 VueWebCoreApi/DLL/DAL/ReportManagerDAL.cs               |   14 
 VueWebCoreApi/Tools/DapperHelper.cs                     |   36 +
 VueWebCoreApi/Controllers/GeneralBasicDataController.cs |   14 
 VueWebCoreApi/Controllers/ProductModelController.cs     |  152 +++++
 VueWebCoreApi/DLL/DAL/BasicSettingDAL.cs                |   28 
 VueWebCoreApi/Controllers/WorkOrderController.cs        |    2 
 VueWebCoreApi/Models/MaterialCraftsSave.cs              |    4 
 VueWebCoreApi/Models/WorkData/WorkList.cs               |   22 
 VueWebCoreApi/Models/Bom/BomDate.cs                     |  127 ++++
 15 files changed, 1,410 insertions(+), 291 deletions(-)

diff --git a/VueWebCoreApi/Controllers/GeneralBasicDataController.cs b/VueWebCoreApi/Controllers/GeneralBasicDataController.cs
index 21132a2..0eb8fe7 100644
--- a/VueWebCoreApi/Controllers/GeneralBasicDataController.cs
+++ b/VueWebCoreApi/Controllers/GeneralBasicDataController.cs
@@ -298,6 +298,20 @@
         }
         #endregion
 
+        #region[宸ュ簭璁惧鍩虹璧勬枡]
+        /// <summary>
+        /// 宸ュ簭璁惧鍩虹璧勬枡
+        /// </summary>
+        /// <returns></returns>
+        [Route(template: "StepEqpData")]
+        [HttpGet]
+        public JsonResult StepEqpData()
+        {
+            mes = GeneralBasicDataBLL.StepEqpData();
+            return Json(mes);
+        }
+        #endregion
+
         #region[缂洪櫡鍩虹璧勬枡]
         [Route(template: "DefectPermissions")]
         [HttpGet]
diff --git a/VueWebCoreApi/Controllers/ProductModelController.cs b/VueWebCoreApi/Controllers/ProductModelController.cs
index 2354d08..5e88e26 100644
--- a/VueWebCoreApi/Controllers/ProductModelController.cs
+++ b/VueWebCoreApi/Controllers/ProductModelController.cs
@@ -6,6 +6,7 @@
 using System.Threading.Tasks;
 using VueWebCoreApi.DLL.BLL;
 using VueWebCoreApi.Models;
+using VueWebCoreApi.Models.Bom;
 using VueWebCoreApi.Models.UnitMaterial;
 using VueWebCoreApi.Tools;
 
@@ -295,6 +296,157 @@
         #endregion
 
 
+        #region[鐗╂枡娓呭崟淇℃伅鍒楄〃]
+        /// <summary>
+        /// 鐗╂枡娓呭崟淇℃伅鍒楄〃
+        /// </summary>
+        /// <param name="parentpartcode">姣嶄欢缂栫爜</param>
+        /// <param name="parentpartname">姣嶄欢鍚嶇О</param>
+        /// <param name="parentpartspec">姣嶄欢瑙勬牸</param>
+        /// <param name="status">鍚敤鐘舵��</param>
+        /// <param name="version">鐗堟湰鍙�</param>
+        /// <param name="createuser">鍒涘缓浜哄憳</param>
+        /// <param name="createdate">鍒涘缓鏃ユ湡</param>
+        /// <param name="page">椤电爜</param>
+        /// <param name="rows">鍒嗛〉鏉℃暟</param>
+        /// <param name="prop">鎺掑簭瀛楁</param>
+        /// <param name="order">鎺掑簭瑙勬牸</param>
+        /// <returns></returns>
+        [Route(template: "BomMainData")]
+        [HttpGet]
+        public JsonResult BomMainData(string parentpartcode, string parentpartname, string parentpartspec, string status,string version,string createuser,string createdate, int page = 0, int rows = 0, string prop = null, string order = null)
+        {
+            var token = HttpContext.Request.Headers["Token"].ToString();
+            User us = JwtTools.Denocode(token.ToString());
+            string operopendate = "";  //寮�濮嬫椂闂�
+            string operclosedate = "";    //缁撴潫鏃堕棿
+            if (createdate != "" && createdate != null)
+            {
+                operopendate = createdate.Split('~')[0].ToString();
+                operclosedate = createdate.Split('~')[1].ToString();
+            }
+            int startNum = rows * (page - 1) + 1;  //璧峰璁板綍rowNum
+            int endNum = rows * page;   //缁撴潫璁板綍 rowNum
+            mes = ProductModelBLL.BomMainData(parentpartcode, parentpartname, parentpartspec, status, version, createuser, operopendate, operclosedate, startNum, endNum, prop, order);
+            return Json(mes);
+        }
+        #endregion
+
+        #region[鐗╂枡娓呭崟鏂板淇敼鑾峰彇鐖朵欢淇℃伅-T+鐣呮嵎閫氭ā寮廬
+        /// <summary>
+        /// 鐗╂枡娓呭崟鏂板淇敼鑾峰彇鐖朵欢淇℃伅-T+鐣呮嵎閫氭ā寮�
+        /// </summary>
+        [Route(template: "AddUpdateTBomParentData")]
+        [HttpGet]
+        public JsonResult AddUpdateTBomParentData()
+        {
+            var token = HttpContext.Request.Headers["Token"].ToString();
+            User us = JwtTools.Denocode(token.ToString());
+            mes = ProductModelBLL.AddUpdateTBomParentData(us);
+            return Json(mes);
+        }
+        #endregion
+
+        #region[鐗╂枡娓呭崟鏂板淇敼鏍规嵁鐖朵欢淇℃伅鐨勮閲忓崟浣嶇粍缂栫爜鏌ユ壘璁¢噺鍗曚綅缁勪俊鎭�-T+鐣呮嵎閫氭ā寮廬
+        /// <summary>
+        /// 鐗╂枡娓呭崟鏂板淇敼鏍规嵁鐖朵欢淇℃伅鐨勮閲忓崟浣嶇粍缂栫爜鏌ユ壘璁¢噺鍗曚綅缁勪俊鎭�-T+鐣呮嵎閫氭ā寮�
+        /// </summary>
+        /// <param name="idunitgroup">璁¢噺鍗曚綅缁勭紪鐮�(褰撻�夊彇鐨勭埗浠剁墿鏂欎腑涓鸿閲忓崟浣嶇粍鏃惰皟鐢�,idunitgroup涓嶄负绌�)</param>
+        /// <returns></returns>
+        [Route(template: "AddUpdateTBomUnitGroup")]
+        [HttpGet]
+        public JsonResult AddUpdateTBomUnitGroup(string idunitgroup)
+        {
+            var token = HttpContext.Request.Headers["Token"].ToString();
+            User us = JwtTools.Denocode(token.ToString());
+            mes = ProductModelBLL.AddUpdateTBomUnitGroup(idunitgroup);
+            return Json(mes);
+        }
+        #endregion
+
+        #region[鐗╂枡娓呭崟鏂板鏃惰幏鍙栨渶澶х増鏈彿]
+        /// <summary>
+        /// 鐗╂枡娓呭崟鏂板鏃惰幏鍙栨渶澶х増鏈彿
+        /// </summary>
+        /// <param name="parentpartcode">鐖朵欢缂栫爜</param>
+        /// <returns></returns>
+        [Route(template: "AddUpdateTBomMaxVsion")]
+        [HttpGet]
+        public JsonResult AddUpdateTBomMaxVsion(string parentpartcode)
+        {
+            mes = ProductModelBLL.AddUpdateTBomMaxVsion(parentpartcode);
+            return Json(mes);
+        }
+        #endregion
+
+        #region[鐗╂枡娓呭崟鏂板淇敼鑾峰彇瀛愪欢淇℃伅-T+鐣呮嵎閫氭ā寮廬
+        /// <summary>
+        /// 鐗╂枡娓呭崟鏂板淇敼鑾峰彇瀛愪欢淇℃伅-T+鐣呮嵎閫氭ā寮�
+        /// </summary>
+        [Route(template: "AddUpdateTBomDetailsData")]
+        [HttpGet]
+        public JsonResult AddUpdateTBomDetailsData()
+        {
+            var token = HttpContext.Request.Headers["Token"].ToString();
+            User us = JwtTools.Denocode(token.ToString());
+            mes = ProductModelBLL.AddUpdateTBomDetailsData(us);
+            return Json(mes);
+        }
+        #endregion
+
+        #region[鐗╂枡娓呭崟鏂板淇敼鑾峰彇瀛愪欢Bom-T+鐣呮嵎閫氭ā寮廬
+        /// <summary>
+        /// 鐗╂枡娓呭崟鏂板淇敼鑾峰彇瀛愪欢Bom-T+鐣呮嵎閫氭ā寮�
+        /// </summary>
+        /// <param name="materiel_code">瀛愪欢缂栫爜</param>
+        /// <returns></returns>
+        [Route(template: "AddUpdateTBomDetailsBomData")]
+        [HttpGet]
+        public JsonResult AddUpdateTBomDetailsBomData(string materiel_code)
+        {
+            var token = HttpContext.Request.Headers["Token"].ToString();
+            User us = JwtTools.Denocode(token.ToString());
+            mes = ProductModelBLL.AddUpdateTBomDetailsBomData(materiel_code,us);
+            return Json(mes);
+        }
+        #endregion
+
+        #region[鐗╂枡娓呭崟鏂板淇敼鎻愪氦-T+鐣呮嵎閫氭ā寮廬
+        /// <summary>
+        /// 鐗╂枡娓呭崟鏂板淇敼鎻愪氦-T+鐣呮嵎閫氭ā寮�
+        /// </summary>
+        /// <param name="OperType">鎿嶄綔绫诲瀷:Add/Update</param>
+        /// <param name="bom">鎻愪氦鏁版嵁</param>
+        /// <returns></returns>
+        [Route(template: "TBomAddUpdate")]
+        [HttpPost]
+        public JsonResult TBomAddUpdate(string OperType, [FromBody] BomDate bom)
+        {
+            var token = HttpContext.Request.Headers["Token"].ToString();
+            //var token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyY29kZSI6Ijk5OTkiLCJ1c2VybmFtZSI6Iuezu-e7n-euoeeQhuWRmCIsInN0b3JnX2NvZGUiOiIiLCJzdG9yZ19uYW1lIjoiIiwiaXNfc3lzdGVtX2FkbWluIjoiWSIsInJvbGVfY29kZSI6IiIsInJvbGVfZGF0YXBlcm1pc3Npb25zIjoiIiwidXNlcnR5cGUiOiJQQyIsInJlZGlza2V5IjoiTmV3TUVTTG9naW5Vc2VySURQQzk5OTkiLCJtZXNTZXR0aW5nIjoie1wicm91dGVcIjp0cnVlLFwiaXNPcmRlclwiOnRydWUsXCJkZXZpY2VcIjp0cnVlLFwidGVjaFwiOnRydWUsXCJ3b3JrT3JkZXJcIjp0cnVlLFwiZXZlcnlcIjpmYWxzZSxcImxhc3RcIjpmYWxzZX0iLCJ0aW1lb3V0IjoiMjAyNC0wOC0xNFQxMDo0NjozNi42MTQyNjQ0KzA4OjAwIn0.9IdnyNRCWbMEXvxjuiFS6NhRqOtvp_lx5zKrZ8OPj0Y";
+            User us = JwtTools.Denocode(token.ToString());
+            mes = ProductModelBLL.TBomAddUpdate(OperType, bom, us);
+            return Json(mes);
+        }
+        #endregion
+
+        #region[鐗╂枡娓呭崟鍒犻櫎鎻愪氦-T+鐣呮嵎閫氭ā寮廬
+        /// <summary>
+        /// 鐗╂枡娓呭崟鍒犻櫎鎻愪氦-T+鐣呮嵎閫氭ā寮�
+        /// </summary>
+        /// <param name="bom">鎻愪氦鏁版嵁</param>
+        /// <returns></returns>
+        [Route(template: "TBomDelete")]
+        [HttpPost]
+        public JsonResult TBomDelete([FromBody] BomDate bom)
+        {
+            var token = HttpContext.Request.Headers["Token"].ToString();
+            User us = JwtTools.Denocode(token.ToString());
+            mes = ProductModelBLL.TBomDelete(bom, us);
+            return Json(mes);
+        }
+        #endregion
+
 
         #region[宸ュ崟浜у搧淇℃伅涓嬫媺妗嗘煡璇
         /// <summary>
diff --git a/VueWebCoreApi/Controllers/WorkOrderController.cs b/VueWebCoreApi/Controllers/WorkOrderController.cs
index add5868..56173f8 100644
--- a/VueWebCoreApi/Controllers/WorkOrderController.cs
+++ b/VueWebCoreApi/Controllers/WorkOrderController.cs
@@ -19,7 +19,7 @@
     [ApiExplorerSettings(GroupName = "宸ュ崟绠$悊")]
     [ApiController]
     [Route("api/[controller]")]
-    //[ChannelActionFilter]
+    [ChannelActionFilter]
     public class WorkOrderController : Controller
     {
         //瀹氫箟鍏ㄥ眬淇℃伅杩斿洖鍙橀噺
diff --git a/VueWebCoreApi/DLL/BLL/GeneralBasicDataBLL.cs b/VueWebCoreApi/DLL/BLL/GeneralBasicDataBLL.cs
index b93506e..3213454 100644
--- a/VueWebCoreApi/DLL/BLL/GeneralBasicDataBLL.cs
+++ b/VueWebCoreApi/DLL/BLL/GeneralBasicDataBLL.cs
@@ -150,6 +150,13 @@
         }
         #endregion
 
+        #region[宸ュ簭璁惧鍩虹璧勬枡]
+        public static ToMessage StepEqpData()
+        {
+            return GeneralBasicDataDAL.StepEqpData();
+        }
+        #endregion
+
         #region[缂洪櫡鍩虹璧勬枡]
         public static ToMessage DefectPermissions()
         {
diff --git a/VueWebCoreApi/DLL/BLL/ProductModelBLL.cs b/VueWebCoreApi/DLL/BLL/ProductModelBLL.cs
index d90377b..0f0e3ef 100644
--- a/VueWebCoreApi/DLL/BLL/ProductModelBLL.cs
+++ b/VueWebCoreApi/DLL/BLL/ProductModelBLL.cs
@@ -4,6 +4,7 @@
 using System.Threading.Tasks;
 using VueWebCoreApi.DLL.DAL;
 using VueWebCoreApi.Models;
+using VueWebCoreApi.Models.Bom;
 using VueWebCoreApi.Models.UnitMaterial;
 using VueWebCoreApi.Tools;
 
@@ -107,6 +108,62 @@
         #endregion
 
 
+        #region[鐗╂枡娓呭崟淇℃伅鍒楄〃]
+        public static ToMessage BomMainData(string parentpartcode, string parentpartname, string parentpartspec, string status, string version, string createuser, string operopendate,string operclosedate, int startNum, int endNum, string prop, string order)
+        {
+            return ProductModelDAL.BomMainData(parentpartcode, parentpartname, parentpartspec, version, createuser, operopendate, operclosedate, status, startNum, endNum, prop, order);
+        }
+        #endregion
+
+        #region[鐗╂枡娓呭崟鏂板淇敼鑾峰彇鐖朵欢淇℃伅-T+鐣呮嵎閫氭ā寮廬
+        public static ToMessage AddUpdateTBomParentData(User us)
+        {
+            return ProductModelDAL.AddUpdateTBomParentData(us);
+        }
+        #endregion
+
+        #region[鐗╂枡娓呭崟鏂板淇敼鏍规嵁鐖朵欢淇℃伅鐨勮閲忓崟浣嶇粍缂栫爜鏌ユ壘璁¢噺鍗曚綅缁勪俊鎭�-T+鐣呮嵎閫氭ā寮廬
+        public static ToMessage AddUpdateTBomUnitGroup(string idunitgroup)
+        {
+            return ProductModelDAL.AddUpdateTBomUnitGroup(idunitgroup);
+        }
+        #endregion
+
+        #region[鐗╂枡娓呭崟鏂板鏃惰幏鍙栨渶澶х増鏈彿]
+        public static ToMessage AddUpdateTBomMaxVsion(string parentpartcode)
+        {
+            return ProductModelDAL.AddUpdateTBomMaxVsion(parentpartcode);
+        }
+        #endregion
+
+        #region[鐗╂枡娓呭崟鏂板淇敼鑾峰彇瀛愪欢淇℃伅-T+鐣呮嵎閫氭ā寮廬
+        public static ToMessage AddUpdateTBomDetailsData(User us)
+        {
+            return ProductModelDAL.AddUpdateTBomDetailsData(us);
+        }
+        #endregion
+
+        #region[鐗╂枡娓呭崟鏂板淇敼鑾峰彇瀛愪欢Bom-T+鐣呮嵎閫氭ā寮廬
+        public static ToMessage AddUpdateTBomDetailsBomData(string materiel_code, User us)
+        {
+            return ProductModelDAL.AddUpdateTBomDetailsBomData(materiel_code,us);
+        }
+        #endregion
+
+        #region[鐗╂枡娓呭崟鏂板淇敼鎻愪氦-T+鐣呮嵎閫氭ā寮廬
+        public static ToMessage TBomAddUpdate(string operType, BomDate bom, User us)
+        {
+            return ProductModelDAL.TBomAddUpdate(operType,bom,us);
+        }
+        #endregion
+
+        #region[鐗╂枡娓呭崟鍒犻櫎鎻愪氦-T+鐣呮嵎閫氭ā寮廬
+        public static ToMessage TBomDelete(BomDate bom, User us)
+        {
+            return ProductModelDAL.TBomDelete(bom, us);
+        }
+        #endregion
+
 
         #region[宸ュ崟浜у搧淇℃伅涓嬫媺妗嗘煡璇
         public static ToMessage PartSelect()
diff --git a/VueWebCoreApi/DLL/DAL/BasicSettingDAL.cs b/VueWebCoreApi/DLL/DAL/BasicSettingDAL.cs
index f92dc56..4a4638e 100644
--- a/VueWebCoreApi/DLL/DAL/BasicSettingDAL.cs
+++ b/VueWebCoreApi/DLL/DAL/BasicSettingDAL.cs
@@ -3837,12 +3837,12 @@
                     if (parents[i].flwtype == "Z")
                     {
                         //閫氳繃浜у搧缂栫爜+宸ヨ壓璺嚎+宸ュ簭缂栫爜鏌ユ壘瀵瑰簲璁惧淇℃伅
-                        sql = @"select A.eqp_code,E.name as eqp_name,A.eqp_value,A.stand_value,A.cavity_qty,A.unprice   
+                        sql = @"select A.eqp_code,E.name as eqp_name,A.enable,A.eqp_value,A.stand_value,A.cavity_qty,A.unprice   
                                 from (
-                                select S.eqp_code,S.eqp_value,S.stand_value,S.cavity_qty,S.unprice  from TPrteEqp_Stad S
+                                select S.eqp_code,S.eqp_value,S.enable,S.stand_value,S.cavity_qty,S.unprice  from TPrteEqp_Stad S
                                 where S.materiel_code=@partcode and S.route_code=@routecode and S.step_code=@stepcode
                                 union all
-                                select  R.eqp_code,'0' as eqp_value,'0' as stand_value,'0' as cavity_qty,'0' as unprice from TMateriel_Route S
+                                select  R.eqp_code,'0' as eqp_value,'N' as enable,'0' as stand_value,'0' as cavity_qty,'0' as unprice from TMateriel_Route S
                                 inner join TFlw_Rtdt T on S.route_code=T.rout_code
                                 inner join TFlw_Rteqp R on T.step_code=R.step_code
                                 where S.materiel_code=@partcode and S.route_code=@routecode and T.step_code=@stepcode and S.materiel_code+S.route_code+T.step_code+R.eqp_code
@@ -3859,12 +3859,12 @@
                     else
                     {
                         //閫氳繃浜у搧缂栫爜+宸ヨ壓璺嚎+宸ュ簭缂栫爜鏌ユ壘瀵瑰簲澶栧崗渚涘簲鍟嗕俊鎭�
-                        sql = @"select A.eqp_code,C.name as eqp_name,A.eqp_value,A.stand_value,A.cavity_qty,A.unprice   
+                        sql = @"select A.eqp_code,C.name as eqp_name,A.enable,A.eqp_value,A.stand_value,A.cavity_qty,A.unprice   
                                 from (
-                                select S.eqp_code,S.eqp_value,S.stand_value,S.cavity_qty,S.unprice  from TPrteEqp_Stad S
+                                select S.eqp_code,S.eqp_value,S.enable,S.stand_value,S.cavity_qty,S.unprice  from TPrteEqp_Stad S
                                 where S.materiel_code=@partcode and S.route_code=@routecode and S.step_code=@stepcode
                                 union all
-                                select  R.eqp_code,'0' as eqp_value,'0' as stand_value,'0' as cavity_qty,'0' as unprice from TMateriel_Route S
+                                select  R.eqp_code,'0' as eqp_value,'N' as enable,'0' as stand_value,'0' as cavity_qty,'0' as unprice from TMateriel_Route S
                                 inner join TFlw_Rtdt T on S.route_code=T.rout_code
                                 inner join TFlw_Rteqp R on T.step_code=R.step_code
                                 where S.materiel_code=@partcode and S.route_code=@routecode and T.step_code=@stepcode and S.materiel_code+S.route_code+T.step_code+R.eqp_code
@@ -4037,7 +4037,7 @@
                             var data0 = DapperHelper.selectdata(sql, dynamicParams);
                             if (data0.Rows.Count > 0)
                             {
-                                sql = @"update TPrteEqp_Stad set eqp_value=@eqp_value,stand_value=@stand_value,cavity_qty=@cavity_qty,unprice=@unprice,lm_user=@username,lm_date=@userdate
+                                sql = @"update TPrteEqp_Stad set enable=@enable, eqp_value=@eqp_value,stand_value=@stand_value,cavity_qty=@cavity_qty,unprice=@unprice,lm_user=@username,lm_date=@userdate
                                     where materiel_code=@partcode and route_code=@routecode and step_code=@stepcode and eqp_code=@eqpcode";
                                 list.Add(new
                                 {
@@ -4048,6 +4048,7 @@
                                         routecode = json[0].defaultroute_code,
                                         stepcode = json[0].children[i].code,
                                         eqpcode = json[0].children[i].children[j].eqp_code,
+                                        enable= json[0].children[i].children[j].enable,
                                         eqp_value = json[0].children[i].children[j].eqp_value,
                                         stand_value = json[0].children[i].children[j].stand_value,
                                         cavity_qty = json[0].children[i].children[j].cavity_qty,
@@ -4059,8 +4060,8 @@
                             }
                             else
                             {
-                                sql = @"insert into TPrteEqp_Stad(materiel_code,route_code,step_code,eqp_code,stand_value,eqp_value,cavity_qty,unprice,lm_user,lm_date) 
-                                    values(@materiel_code,@route_code,@step_code,@eqp_code,@stand_value,@eqp_value,@cavity_qty,@unprice,@lm_user,@lm_date)";
+                                sql = @"insert into TPrteEqp_Stad(materiel_code,route_code,step_code,eqp_code,enable,stand_value,eqp_value,cavity_qty,unprice,lm_user,lm_date) 
+                                    values(@materiel_code,@route_code,@step_code,@eqp_code,@enable,@stand_value,@eqp_value,@cavity_qty,@unprice,@lm_user,@lm_date)";
                                 list.Add(new
                                 {
                                     str = sql,
@@ -4070,6 +4071,7 @@
                                         route_code = json[0].defaultroute_code,
                                         step_code = json[0].children[i].code,
                                         eqp_code = json[0].children[i].children[j].eqp_code,
+                                        enable = json[0].children[i].children[j].enable,
                                         stand_value = json[0].children[i].children[j].eqp_value,
                                         eqp_value = json[0].children[i].children[j].stand_value,
                                         cavity_qty = json[0].children[i].children[j].cavity_qty,
@@ -4137,7 +4139,7 @@
                             var data0 = DapperHelper.selectdata(sql, dynamicParams);
                             if (data0.Rows.Count > 0)
                             {
-                                sql = @"update TPrteEqp_Stad set eqp_value=@eqp_value,stand_value=@stand_value,cavity_qty=@cavity_qty,unprice=@unprice,lm_user=@username,lm_date=@userdate
+                                sql = @"update TPrteEqp_Stad set enable=@enable,eqp_value=@eqp_value,stand_value=@stand_value,cavity_qty=@cavity_qty,unprice=@unprice,lm_user=@username,lm_date=@userdate
                                     where materiel_code=@partcode and route_code=@routecode and step_code=@stepcode and eqp_code=@eqpcode";
                                 list.Add(new
                                 {
@@ -4148,6 +4150,7 @@
                                         routecode = json[0].defaultroute_code,
                                         stepcode = json[0].children[i].code,
                                         eqpcode = json[0].children[i].children[j].eqp_code,
+                                        enable= json[0].children[i].children[j].enable,
                                         eqp_value = json[0].children[i].children[j].eqp_value,
                                         stand_value = json[0].children[i].children[j].stand_value,
                                         cavity_qty = json[0].children[i].children[j].cavity_qty,
@@ -4159,8 +4162,8 @@
                             }
                             else
                             {
-                                sql = @"insert into TPrteEqp_Stad(materiel_code,route_code,step_code,eqp_code,stand_value,eqp_value,cavity_qty,unprice,lm_user,lm_date) 
-                                    values(@materiel_code,@route_code,@step_code,@eqp_code,@stand_value,@eqp_value,@cavity_qty,@unprice,@lm_user,@lm_date)";
+                                sql = @"insert into TPrteEqp_Stad(materiel_code,route_code,step_code,eqp_code,enable,stand_value,eqp_value,cavity_qty,unprice,lm_user,lm_date) 
+                                    values(@materiel_code,@route_code,@step_code,@eqp_code,@enable,@stand_value,@eqp_value,@cavity_qty,@unprice,@lm_user,@lm_date)";
                                 list.Add(new
                                 {
                                     str = sql,
@@ -4170,6 +4173,7 @@
                                         route_code = json[0].defaultroute_code,
                                         step_code = json[0].children[i].code,
                                         eqp_code = json[0].children[i].children[j].eqp_code,
+                                        enable= json[0].children[i].children[j].enable,
                                         stand_value = json[0].children[i].children[j].eqp_value,
                                         eqp_value = json[0].children[i].children[j].stand_value,
                                         cavity_qty = json[0].children[i].children[j].cavity_qty,
diff --git a/VueWebCoreApi/DLL/DAL/GeneralBasicDataDAL.cs b/VueWebCoreApi/DLL/DAL/GeneralBasicDataDAL.cs
index 07182b6..726b5fc 100644
--- a/VueWebCoreApi/DLL/DAL/GeneralBasicDataDAL.cs
+++ b/VueWebCoreApi/DLL/DAL/GeneralBasicDataDAL.cs
@@ -7,6 +7,7 @@
 using System.Threading.Tasks;
 using VueWebCoreApi.Models;
 using VueWebCoreApi.Models.UnitMaterial;
+using VueWebCoreApi.Models.WorkData;
 using VueWebCoreApi.Tools;
 
 namespace VueWebCoreApi.DLL.DAL
@@ -21,7 +22,7 @@
         public static SqlParameter[] parameters; //瀹氫箟鍏ㄥ眬SqlParameter鍙傛暟鏁扮粍
         public static dynamic CompanyCode = AppSetting.GetAppSetting("CompanyCode");
         public static dynamic CompanyName = AppSetting.GetAppSetting("CompanyName");
-       
+
 
         #region[缁勭粐鏋舵瀯绫诲瀷璧勬枡]
         public static ToMessage TOrganTypeDate()
@@ -511,7 +512,7 @@
                     var data0 = DapperHelper.selectdata(sql, dynamicParams);
                     for (int j = 0; j < data0.Rows.Count; j++)
                     {
-                        LocationData  locat = new LocationData();
+                        LocationData locat = new LocationData();
                         locat.value = data0.Rows[j]["code"].ToString();
                         locat.text = data0.Rows[j]["name"].ToString();
                         warhouse.children.Add(locat);
@@ -571,6 +572,68 @@
                 mes.code = "200";
                 mes.message = "鏌ヨ鎴愬姛!";
                 mes.data = data;
+            }
+            catch (Exception e)
+            {
+                mes.code = "300";
+                mes.count = 0;
+                mes.message = e.Message;
+                mes.data = null;
+            }
+            return mes;
+        }
+        #endregion
+
+        #region[宸ュ簭璁惧鍩虹璧勬枡]
+        public static ToMessage StepEqpData()
+        {
+            var sql = "";
+            List<object> list = new List<object>();
+            var dynamicParams = new DynamicParameters();
+            try
+            {
+                //鏌ユ壘宸ュ簭淇℃伅
+                sql = @"select  '' as id,'' as wo_code,'' as seq,S.stepcode as step_code,T.stepname,T.flwtype,'0' as unprice,'0' as produceq_qty,
+                        '0' as good_qty,'0' as ng_qty,'0' as laborbad_qty,'0' as materielbad_qty,'0' as delive_qty,'' as isbott,'' as isend   
+                        from TStep S
+                        left join TStep  T on S.stepcode=T.stepcode";
+                var parents = DapperHelper.selectdatalist<WorkRouteStepEqp>(sql);
+                //鑾峰彇宸ュ簭瀵瑰簲璁惧淇℃伅
+                for (int i = 0; i < parents.Count; i++)
+                {
+                    if (parents[i].flwtype == "Z")
+                    {
+                        //閫氳繃宸ヨ壓璺嚎宸ュ簭琛↖D鏌ユ壘瀵瑰簲璁惧淇℃伅
+                        sql = @"select  R.eqp_code,E.name as eqp_name,'N' as enable,'0' as unprice,
+                              '0' as produceq_qty, '0' as good_qty,'0' as ng_qty,'0' as laborbad_qty,'0' as materielbad_qty   
+                              from TFlw_Rteqp R
+                              left join  TEqpInfo E on R.eqp_code=E.code
+                              where R.step_code=@step_code and R.style=@style";
+                        dynamicParams.Add("@step_code", parents[i].step_code);
+                        dynamicParams.Add("@style", "E"); //璁惧
+                        var children = DapperHelper.select<WorkRouteStepEqpSub>(sql, dynamicParams);
+                        parents[i].children = children.ToList();
+                    }
+                    else
+                    {
+                        //閫氳繃宸ヨ壓璺嚎宸ュ簭琛↖D鏌ユ壘瀵瑰簲澶栧崗渚涘簲鍟嗕俊鎭�
+                        sql = @"select  R.eqp_code,E.name as eqp_name,'N' as enable,'0' as unprice,
+                              '0' as produceq_qty, '0' as good_qty,'0' as ng_qty,'0' as laborbad_qty,'0' as materielbad_qty   
+                              from TFlw_Rteqp R
+                              inner join TCustomer E on R.eqp_code=E.code
+                              where R.step_code=@step_code and R.style=@style";
+                        dynamicParams.Add("@step_code", parents[i].step_code);
+                        dynamicParams.Add("@style", parents[i].flwtype);
+                        var children = DapperHelper.select<WorkRouteStepEqpSub>(sql, dynamicParams);
+                        parents[i].children = children.ToList();
+                    }
+                }
+
+                var data = DapperHelper.selectdata(sql, dynamicParams);
+                mes.code = "200";
+                mes.count = parents.Count;
+                mes.data = parents;
+                mes.message = "鏌ヨ鎴愬姛!";
             }
             catch (Exception e)
             {
@@ -689,7 +752,7 @@
             var dynamicParams = new DynamicParameters();
             try
             {
-              sql = @"WITH RecursiveCTE AS (
+                sql = @"WITH RecursiveCTE AS (
                      SELECT code, name, idparent
                      FROM TMateriel_Class
                      WHERE code in(select distinct idinventoryclass from TMateriel_Info where status='0')
diff --git a/VueWebCoreApi/DLL/DAL/ProductModelDAL.cs b/VueWebCoreApi/DLL/DAL/ProductModelDAL.cs
index 368e313..aff4bdf 100644
--- a/VueWebCoreApi/DLL/DAL/ProductModelDAL.cs
+++ b/VueWebCoreApi/DLL/DAL/ProductModelDAL.cs
@@ -8,6 +8,7 @@
 using System.Linq;
 using System.Threading.Tasks;
 using VueWebCoreApi.Models;
+using VueWebCoreApi.Models.Bom;
 using VueWebCoreApi.Models.UnitMaterial;
 using VueWebCoreApi.Tools;
 
@@ -21,6 +22,7 @@
         public static string strProcName = ""; //瀹氫箟鍏ㄥ眬sql鍙橀噺
         public static List<SqlParameter> listStr = new List<SqlParameter>(); //瀹氫箟鍏ㄥ眬鍙傛暟闆嗗悎
         public static SqlParameter[] parameters; //瀹氫箟鍏ㄥ眬SqlParameter鍙傛暟鏁扮粍
+        public static string sqlServerConnectString = AppSetting.GetAppSetting("DBServer");
 
 
         #region[璁¢噺鍗曚綅缁勪俊鎭痌
@@ -228,7 +230,7 @@
                     if (aa)
                     {
                         //鍐欏叆鎿嶄綔璁板綍琛�
-                        LogHelper.DbOperateLog(us.usercode, "鏂板", "鏂板浜嗚閲忓崟浣嶏細"+ tunittype == "S" ? ((List<string>)mes.data)[0].ToString() : string.Join(",", listjson[0].children.Select(m => m.unitcode)), us.usertype);
+                        LogHelper.DbOperateLog(us.usercode, "鏂板", "鏂板浜嗚閲忓崟浣嶏細" + tunittype == "S" ? ((List<string>)mes.data)[0].ToString() : string.Join(",", listjson[0].children.Select(m => m.unitcode)), us.usertype);
                         mes.code = "200";
                         mes.count = 0;
                         mes.message = "鏂板鎿嶄綔鎴愬姛!";
@@ -475,7 +477,7 @@
                 if (aa)
                 {
                     //鍐欏叆鎿嶄綔璁板綍琛�
-                    LogHelper.DbOperateLog(us.usercode, "鏂板", "鏂板浜嗚閲忓崟浣嶏細" + tunittype == "S" ? tunitcode : tunittype == "M"&& (tunitgroupcode != "" || tunitgroupcode != null) && (tunitcode == "" || tunitcode == null)? tunitgroupcode: tunitgroupcode+"-->"+tunitcode, us.usertype);
+                    LogHelper.DbOperateLog(us.usercode, "鏂板", "鏂板浜嗚閲忓崟浣嶏細" + tunittype == "S" ? tunitcode : tunittype == "M" && (tunitgroupcode != "" || tunitgroupcode != null) && (tunitcode == "" || tunitcode == null) ? tunitgroupcode : tunitgroupcode + "-->" + tunitcode, us.usertype);
                     mes.code = "200";
                     mes.count = 0;
                     mes.message = "鍒犻櫎鎿嶄綔鎴愬姛!";
@@ -594,7 +596,7 @@
                     if (aa)
                     {
                         //鍐欏叆鎿嶄綔璁板綍琛�
-                        LogHelper.DbOperateLog(us.usercode, "鏂板", "鏂板浜嗗瓨璐у垎绫�:"+ inventoryclasscode, us.usertype);
+                        LogHelper.DbOperateLog(us.usercode, "鏂板", "鏂板浜嗗瓨璐у垎绫�:" + inventoryclasscode, us.usertype);
                         mes.code = "200";
                         mes.count = 0;
                         mes.message = "鏂板鎿嶄綔鎴愬姛!";
@@ -642,7 +644,7 @@
                     if (aa)
                     {
                         //鍐欏叆鎿嶄綔璁板綍琛�
-                        LogHelper.DbOperateLog(us.usercode, "淇敼", "淇敼浜嗗瓨璐у垎绫�:"+ inventoryclasscode, us.usertype);
+                        LogHelper.DbOperateLog(us.usercode, "淇敼", "淇敼浜嗗瓨璐у垎绫�:" + inventoryclasscode, us.usertype);
                         mes.code = "200";
                         mes.count = 0;
                         mes.message = "淇敼鎿嶄綔鎴愬姛!";
@@ -703,7 +705,7 @@
                 if (aa)
                 {
                     //鍐欏叆鎿嶄綔璁板綍琛�
-                    LogHelper.DbOperateLog(us.usercode, "鍒犻櫎", "鍒犻櫎浜嗗瓨璐у垎绫�"+classcode, us.usertype);
+                    LogHelper.DbOperateLog(us.usercode, "鍒犻櫎", "鍒犻櫎浜嗗瓨璐у垎绫�" + classcode, us.usertype);
                     mes.code = "200";
                     mes.count = 0;
                     mes.message = "鍒犻櫎鎿嶄綔鎴愬姛!";
@@ -740,42 +742,58 @@
                 if (inventoryclasscode != "" && inventoryclasscode != null)
                 {
                     string[] classcode = Array.ConvertAll<string, string>(inventoryclasscode.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries), s => s.ToString()); //string鍒嗗壊杞瑂tring[]
-                    search += "and M.idinventoryclass in @classcode ";
+                    search += "and AA.idinventoryclass in @classcode ";
                     dynamicParams.Add("@classcode", classcode);
                 }
                 if (partcode != "" && partcode != null)
                 {
-                    search += "and M.partcode like '%'+@partcode+'%' ";
+                    search += "and AA.partcode like '%'+@partcode+'%' ";
                     dynamicParams.Add("@partcode", partcode);
                 }
                 if (partname != "" && partname != null)
                 {
-                    search += "and M.partname like '%'+@partname+'%' ";
+                    search += "and AA.partname like '%'+@partname+'%' ";
                     dynamicParams.Add("@partname", partname);
                 }
                 if (partspec != "" && partspec != null)
                 {
-                    search += "and M.partspec like '%'+@partspec+'%' ";
+                    search += "and AA.partspec like '%'+@partspec+'%' ";
                     dynamicParams.Add("@partspec", partspec);
                 }
-                sql = @"select M.partcode,M.partname,M.partspec,M.idunit as idunitcode,T.name as idunitname,M.idunitgroup as idunitgroupcode,G.name as idunitgroupname,
-                            M.isSingleUnit,M.idSubUnitByReport as idSubUnitByReportcode,R.name as idSubUnitByReportname,M.idUnitByStock as idUnitByStockcode,K.name as idUnitByStockname,
-                            M.idUnitByPurchase as idUnitByPurchasecode,P.name as idUnitByPurchasename,M.idUnitBySale as idUnitBySalecode,S.name as idUnitBySalename,
-                            M.idunitbymanufacture as idunitbymanufacturecode,F.name as idunitbymanufacturename,M.idinventoryclass as idinventoryclasscode,C.name as idinventoryclassname,
-                            M.isPurchase,M.isSale,M.isMadeSelf,M.isMaterial,M.isMadeRequest,M.idwarehouse as idwarehousecode,H.name as idwarehousename,M.lowQuantity,M.topQuantity,M.safeQuantity,
-                            M.status,U.username as lm_user,M.lm_date,M.data_sources,M.is_retdproc,M.default_route
-                            from TMateriel_Info M
-                            left join TUnit T on M.idunit=T.code
-                            left join TUnit R on M.idSubUnitByReport=R.code
-                            left join TUnit K on M.idUnitByStock=K.code
-                            left join TUnit P on M.idUnitByPurchase=P.code
-                            left join TUnit S on M.idUnitBySale=S.code
-                            left join TUnit F on M.idunitbymanufacture=F.code
-                            left join TMateriel_Class C on M.idinventoryclass=C.code
-                            left join TUnitGroup G on M.idunitgroup=G.code
-                            left join TSecStck H on M.idwarehouse=H.code
-                            left join TUser U on M.lm_user=U.usercode
-                            where 1=1 " + search;
+                sql = @"select *  from (
+                        select   
+                        M.partcode,M.partname,M.partspec,M.idinventoryclass,M.idunit as idunitcode,T.name as idunitname,M.idunitgroup as idunitgroupcode,G.name as idunitgroupname,
+                        M.isSingleUnit,M.idSubUnitByReport as idSubUnitByReportcode,R.name as idSubUnitByReportname,M.idUnitByStock as idUnitByStockcode,K.name as idUnitByStockname,
+                        M.idUnitByPurchase as idUnitByPurchasecode,P.name as idUnitByPurchasename,M.idUnitBySale as idUnitBySalecode,S.name as idUnitBySalename,
+                        M.idunitbymanufacture as idunitbymanufacturecode,F.name as idunitbymanufacturename,M.idinventoryclass as idinventoryclasscode,C.name as idinventoryclassname,
+                        M.isPurchase,M.isSale,M.isMadeSelf,M.isMaterial,M.isMadeRequest,M.idwarehouse as idwarehousecode,H.name as idwarehousename,M.lowQuantity,M.topQuantity,M.safeQuantity,
+                        M.status,U.username as lm_user,M.lm_date,M.data_sources,M.is_retdproc,M.default_route
+                        from TMateriel_Info M
+                        left join TUnit T on M.idunit=T.code
+                        left join TUnit R on M.idSubUnitByReport=R.code
+                        left join TUnit K on M.idUnitByStock=K.code
+                        left join TUnit P on M.idUnitByPurchase=P.code
+                        left join TUnit S on M.idUnitBySale=S.code
+                        left join TUnit F on M.idunitbymanufacture=F.code
+                        left join TMateriel_Class C on M.idinventoryclass=C.code
+                        left join TUnitGroup G on M.idunitgroup=G.code
+                        left join TSecStck H on M.idwarehouse=H.code
+                        left join TUser U on M.lm_user=U.usercode
+                        where (M.isSingleUnit = '1' and (T.isSingleUnit = '1' OR T.isSingleUnit IS NULL))  
+                        or   (M.isSingleUnit = '0' AND(  
+                            (T.isSingleUnit = '0' AND M.idunitgroup = T.idunitgroup)  
+                            OR   
+                            (R.isSingleUnit = '0' AND M.idunitgroup = R.idunitgroup)  
+                            OR   
+                            (K.isSingleUnit = '0' AND M.idunitgroup = K.idunitgroup)  
+                            OR   
+                            (P.isSingleUnit = '0' AND M.idunitgroup = P.idunitgroup)  
+                            OR   
+                            (S.isSingleUnit = '0' AND M.idunitgroup = S.idunitgroup)  
+                            OR   
+                            (F.isSingleUnit = '0' AND M.idunitgroup = F.idunitgroup)  
+                        ))  
+                        ) as AA where 1=1" + search;
                 // --------------鏌ヨ鎸囧畾鏁版嵁--------------
                 var total = 0; //鎬绘潯鏁�
                 data = DapperHelper.GetPageList<object>(sql, dynamicParams, prop, order, startNum, endNum, out total);
@@ -851,25 +869,25 @@
                         str = sql,
                         parm = new
                         {
-                            partcode=partcode,
-                            partname=partname,
-                            partspec=partspec,
-                            idunit=unittypcode=="1"?unitcode:unitsubcode,
-                            idunitgroup = unittypcode == "0"?"1":"0",
-                            isSingleUnit= unittypcode,
-                            idSubUnitByReport=idSubUnitByReport,
-                            idUnitByStock= idUnitByStock,
-                            idUnitByPurchase= idUnitByPurchase,
-                            idUnitBySale= idUnitBySale,
-                            idunitbymanufacture= idunitbymanufacture,
-                            idinventoryclass= inventoryclasscode,
-                            isPurchase= isPurchase,
-                            isSale= isSale,
-                            isMadeSelf= isMadeSelf,
-                            isMaterial= isMaterial,
-                            isMadeRequest= isMadeRequest,
-                            idwarehouse= idwarehouse,
-                            status= status,
+                            partcode = partcode,
+                            partname = partname,
+                            partspec = partspec,
+                            idunit = unittypcode == "1" ? unitcode : unitsubcode,
+                            idunitgroup = unittypcode == "0" ? "1" : "0",
+                            isSingleUnit = unittypcode,
+                            idSubUnitByReport = idSubUnitByReport,
+                            idUnitByStock = idUnitByStock,
+                            idUnitByPurchase = idUnitByPurchase,
+                            idUnitBySale = idUnitBySale,
+                            idunitbymanufacture = idunitbymanufacture,
+                            idinventoryclass = inventoryclasscode,
+                            isPurchase = isPurchase,
+                            isSale = isSale,
+                            isMadeSelf = isMadeSelf,
+                            isMaterial = isMaterial,
+                            isMadeRequest = isMadeRequest,
+                            idwarehouse = idwarehouse,
+                            status = status,
                             lm_user = us.usercode,
                             lm_date = DateTime.Now.ToString(),
                             data_sources = data_sources
@@ -879,7 +897,7 @@
                     if (aa)
                     {
                         //鍐欏叆鎿嶄綔璁板綍琛�
-                        LogHelper.DbOperateLog(us.usercode, "鏂板", "鏂板浜嗗瓨璐ф。妗�:"+ partcode, us.usertype);
+                        LogHelper.DbOperateLog(us.usercode, "鏂板", "鏂板浜嗗瓨璐ф。妗�:" + partcode, us.usertype);
                         mes.code = "200";
                         mes.count = 0;
                         mes.message = "鏂板鎿嶄綔鎴愬姛!";
@@ -957,7 +975,7 @@
                     if (aa)
                     {
                         //鍐欏叆鎿嶄綔璁板綍琛�
-                        LogHelper.DbOperateLog(us.usercode, "淇敼", "淇敼浜嗗瓨璐ф。妗�:"+ partcode, us.usertype);
+                        LogHelper.DbOperateLog(us.usercode, "淇敼", "淇敼浜嗗瓨璐ф。妗�:" + partcode, us.usertype);
                         mes.code = "200";
                         mes.count = 0;
                         mes.message = "淇敼鎿嶄綔鎴愬姛!";
@@ -1023,14 +1041,14 @@
                     parm = new
                     {
                         partcode = partcode,
-                        data_sources= data_sources
+                        data_sources = data_sources
                     }
                 });
                 bool aa = DapperHelper.DoTransaction(list);
                 if (aa)
                 {
                     //鍐欏叆鎿嶄綔璁板綍琛�
-                    LogHelper.DbOperateLog(us.usercode, "鍒犻櫎", "鍒犻櫎浜嗗瓨璐ф。妗�:"+partcode, us.usertype);
+                    LogHelper.DbOperateLog(us.usercode, "鍒犻櫎", "鍒犻櫎浜嗗瓨璐ф。妗�:" + partcode, us.usertype);
                     mes.code = "200";
                     mes.count = 0;
                     mes.message = "鍒犻櫎鎿嶄綔鎴愬姛!";
@@ -1056,7 +1074,7 @@
         #endregion
 
         #region[瀛樿揣妗f鍏宠仈宸ヨ壓(宸ヨ壓璺嚎鎴栧伐搴�)鏌ヨ]
-        public static ToMessage TMaterielFileAssociationRoute(string partcode,User us)
+        public static ToMessage TMaterielFileAssociationRoute(string partcode, User us)
         {
             string sql = "";
             var dynamicParams = new DynamicParameters();
@@ -1176,7 +1194,7 @@
                         //string鍒嗗壊杞瑂tring[]
                         string[] routcode = Array.ConvertAll<string, string>(string.Join(",", json[0].children.Select(s => s.code)).Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries), s => s.ToString());
                         sql = @"delete TPrteStep_Price where materiel_code=@partcode and route_code not in @routecode";
-                        list.Add(new { str = sql, parm = new { partcode = json[0].partcode, routecode= routcode } });
+                        list.Add(new { str = sql, parm = new { partcode = json[0].partcode, routecode = routcode } });
                     }
                 }
                 else //宸ュ簭鐗�
@@ -1233,7 +1251,7 @@
                 if (aa)
                 {
                     //鍐欏叆鎿嶄綔璁板綍琛�
-                    LogHelper.DbOperateLog(us.usercode, "瀛樿揣鍏宠仈宸ヨ壓", "浜у搧锛�"+json[0].partcode+"鍏宠仈浜嗗伐鑹�:" + string.Join(",", json[0].children.Select(s => s.code)), us.usertype);
+                    LogHelper.DbOperateLog(us.usercode, "瀛樿揣鍏宠仈宸ヨ壓", "浜у搧锛�" + json[0].partcode + "鍏宠仈浜嗗伐鑹�:" + string.Join(",", json[0].children.Select(s => s.code)), us.usertype);
                     mes.code = "200";
                     mes.count = 0;
                     mes.message = "鎿嶄綔鎴愬姛!";
@@ -1259,6 +1277,581 @@
         #endregion
 
 
+        #region[鐗╂枡娓呭崟淇℃伅鍒楄〃]
+        public static ToMessage BomMainData(string parentpartcode, string parentpartname, string parentpartspec, string version, string createuser, string operopendate, string operclosedate, string status, int startNum, int endNum, string prop, string order)
+        {
+            var dynamicParams = new DynamicParameters();
+            List<BomDate> parents = new List<BomDate>();
+            string search = "", sql = "";
+            try
+            {
+                if (parentpartcode != "" && parentpartcode != null)
+                {
+                    search += "and AA.materiel_code like '%'+@parentpartcode+'%' ";
+                    dynamicParams.Add("@parentpartcode", parentpartcode);
+                }
+                if (parentpartname != "" && parentpartname != null)
+                {
+                    search += "and AA.materiel_name like '%'+@parentpartname+'%' ";
+                    dynamicParams.Add("@parentpartname", parentpartname);
+                }
+                if (parentpartspec != "" && parentpartspec != null)
+                {
+                    search += "and AA.materiel_spec like '%'+@parentpartspec+'%' ";
+                    dynamicParams.Add("@parentpartspec", parentpartspec);
+                }
+                if (version != "" && version != null)
+                {
+                    search += "and AA.version like '%'+@version+'%' ";
+                    dynamicParams.Add("@version", version);
+                }
+                if (createuser != "" && createuser != null)
+                {
+                    search += "and AA.lm_user like '%'+@createuser+'%' ";
+                    dynamicParams.Add("@createuser", createuser);
+                }
+                if (operopendate != "" && operopendate != null)
+                {
+                    search += "and AA.lm_date between @operopendate and @operclosedate ";
+                    dynamicParams.Add("@operopendate", operopendate + " 00:00:00");
+                    dynamicParams.Add("@operclosedate", operclosedate + " 23:59:59");
+                }
+                var total = 0; //鎬绘潯鏁�
+                //鏌ヨBom涓昏〃淇℃伅
+                sql = @"select *  from(
+                        select B.id,B.materiel_code,M.partname as materiel_name,M.partspec as materiel_spec,
+                        M.idinventoryclass as materiel_typecode,C.name as materiel_typename,M.idunit as unitcode,T.name as unitname,
+                        B.quantity,B.status,B.startdate,B.version,B.isdefaultbom,B.bomdepth,U.username as lm_user,B.lm_date  
+                        from TBom_Main B
+                        left join TMateriel_Info M on B.materiel_code=M.partcode
+                        left join TUnit T on M.idunit=T.code
+                        left join TMateriel_Class C on M.idinventoryclass=C.code
+                        left join TUser U on B.lm_user=U.usercode
+                        where (M.isSingleUnit = '1' and (T.isSingleUnit = '1' OR T.isSingleUnit IS NULL))  
+                        or   (M.isSingleUnit = '0' AND(  
+                        (T.isSingleUnit = '0' AND M.idunitgroup = T.idunitgroup)  
+                        ))  
+                        ) as AA " + search;
+                parents = DapperHelper.GetPageListData<BomDate>(sql, dynamicParams, prop, order, startNum, endNum, out total);
+                for (int i = 0; i < parents.Count; i++)
+                {
+                    //閫氳繃Bom涓昏〃id鏌ユ壘瀛愪欢淇℃伅
+                    sql = @"select *  from(
+                            select S.id,S.m_id,S.seq,S.materiel_code,M.partname as materiel_name,M.partspec as materiel_spec,
+                            M.idunit as unitcode,T.name as unitname,S.base_quantity,S.loss_quantity,S.total_quantity,S.idchildbom
+                            from TBom_Deta S
+                            left join TMateriel_Info M on S.materiel_code=M.partcode
+                            left join TUnit T on M.idunit=T.code
+                            where (M.isSingleUnit = '1' and (T.isSingleUnit = '1' OR T.isSingleUnit IS NULL))  
+                            or   (M.isSingleUnit = '0' AND(  
+                            (T.isSingleUnit = '0' AND M.idunitgroup = T.idunitgroup)  
+                            ))  
+                            ) as AA where AA.m_id=@m_id";
+                    dynamicParams.Add("@m_id", parents[i].id);
+                    var children = DapperHelper.select<BomDateSub>(sql, dynamicParams);
+                    parents[i].children = children.ToList();
+                }
+                mes.code = "200";
+                mes.message = "鏌ヨ鎴愬姛!";
+                mes.data = parents;
+            }
+            catch (Exception e)
+            {
+                mes.code = "300";
+                mes.count = 0;
+                mes.message = e.Message;
+                mes.data = null;
+            }
+            return mes;
+        }
+        #endregion
+
+        #region[鐗╂枡娓呭崟鏂板淇敼鑾峰彇鐖朵欢淇℃伅-T+鐣呮嵎閫氭ā寮廬
+        public static ToMessage AddUpdateTBomParentData(User us)
+        {
+            string sql = "";
+            var dynamicParams = new DynamicParameters();
+            try
+            {
+                //鏍规嵁瀛樿揣淇℃伅,鏌ユ壘鑷埗灞炴�ф垨濮斿灞炴�х墿鏂�
+                sql = @"select *   from (
+                        select M.partcode,M.partname,M.partspec,M.idunit as unitcode,U.name as unitname,M.isMadeSelf,M.isMadeRequest,
+                        (case when M.idunitgroup='0' then NUll else M.idunitgroup end) as idunitgroup  
+                        from TMateriel_Info M
+                        left join  TUnit U on  M.idunitgroup=U.idunitgroup and M.idunit=U.code and M.IsSingleUnit=U.IsSingleUnit  
+                        where M.isSingleUnit='0'  and U.IsMainUnit='1' and M.Status='0' 
+                        ) as AA where  AA.isMadeSelf='1' or AA.isMadeRequest='1'
+                        union all
+                        select *   from (
+                        select M.partcode,M.partname,M.partspec,M.idunit as unitcode,U.name as unitname,M.isMadeSelf,M.isMadeRequest,
+                        (case when M.idunitgroup='0' then NUll else M.idunitgroup end) as idunitgroup     
+                        from  TMateriel_Info  M
+                        inner join  TUnit U on  M.idunit=U.code and M.IsSingleUnit=U.IsSingleUnit 
+                        where M.IsSingleUnit='1' and U.IsMainUnit='0' and M.Status='0'
+                        ) as AA where AA.isMadeSelf='1' or AA.isMadeRequest='1'";
+                var data = DapperHelper.selecttable(sql);
+                mes.code = "200";
+                mes.message = "鏌ヨ鎴愬姛!";
+                mes.data = data;
+            }
+            catch (Exception e)
+            {
+                mes.code = "300";
+                mes.count = 0;
+                mes.message = e.Message;
+                mes.data = null;
+            }
+            return mes;
+        }
+        #endregion
+
+        #region[鐗╂枡娓呭崟鏂板淇敼鏍规嵁鐖朵欢淇℃伅鐨勮閲忓崟浣嶇粍缂栫爜鏌ユ壘璁¢噺鍗曚綅缁勪俊鎭�-T+鐣呮嵎閫氭ā寮廬
+        public static ToMessage AddUpdateTBomUnitGroup(string idunitgroup)
+        {
+            var dynamicParams = new DynamicParameters();
+            string sql = "";
+            try
+            {
+                //鑾峰彇璁¢噺鍗曚綅缁勪俊鎭�
+                sql = @"select code as unitcode,name as unitname   
+                        from TUnit where idunitgroup=@idunitgroup";
+                dynamicParams.Add("@idunitgroup", idunitgroup);
+                var data = DapperHelper.selectdata(sql, dynamicParams);
+                mes.code = "200";
+                mes.message = "鏌ヨ鎴愬姛!";
+                mes.data = data;
+            }
+            catch (Exception e)
+            {
+                mes.code = "300";
+                mes.count = 0;
+                mes.message = e.Message;
+                mes.data = null;
+            }
+            return mes;
+        }
+        #endregion
+
+        #region[鐗╂枡娓呭崟鏂板鏃惰幏鍙栨渶澶х増鏈彿]
+        public static ToMessage AddUpdateTBomMaxVsion(string parentpartcode)
+        {
+            string sql = "";
+            var dynamicParams = new DynamicParameters();
+            try
+            {
+                sql = @"select isnull(max(substring(version,charindex('V',version)+1,len(version)-charindex('V',version))),0)+1 as version    
+                        from TBom_Main where materiel_code=@parentpartcode";
+                dynamicParams.Add("@parentpartcode", parentpartcode);
+                var data = DapperHelper.selectdata(sql, dynamicParams);
+                if (data.Rows.Count > 0)
+                {
+                    mes.code = "200";
+                    mes.message = "鑾峰彇鐗堟湰鍙锋垚鍔�!";
+                    mes.data = "V" + data.Rows[0]["version"].ToString();
+                }
+                else
+                {
+                    mes.code = "300";
+                    mes.message = "鑾峰彇鐗堟湰鍙峰け璐�!";
+                    mes.data = null;
+                }
+
+            }
+            catch (Exception e)
+            {
+                mes.code = "300";
+                mes.count = 0;
+                mes.message = e.Message;
+                mes.data = null;
+            }
+            return mes;
+        }
+        #endregion
+
+        #region[鐗╂枡娓呭崟鏂板淇敼鑾峰彇瀛愪欢淇℃伅-T+鐣呮嵎閫氭ā寮廬
+        public static ToMessage AddUpdateTBomDetailsData(User us)
+        {
+            string sql = "";
+            var dynamicParams = new DynamicParameters();
+            try
+            {
+                //鏍规嵁瀛樿揣淇℃伅,鏌ユ壘鐢熶骇鑰楃敤鐨勭墿鏂�
+                sql = @"select *   from (
+                        select M.partcode,M.partname,M.partspec,M.idunit as unitcode,U.name as unitname,M.IsMaterial,
+                        (case when M.idunitgroup='0' then NUll else M.idunitgroup end) as idunitgroup  
+                        from TMateriel_Info M
+                        left join  TUnit U on  M.idunitgroup=U.idunitgroup and M.idunit=U.code and M.IsSingleUnit=U.IsSingleUnit  
+                        where M.isSingleUnit='0'  and U.IsMainUnit='1' and M.Status='0' 
+                        ) as AA where  AA.IsMaterial='1' 
+                        union all
+                        select *   from (
+                        select M.partcode,M.partname,M.partspec,M.idunit as unitcode,U.name as unitname,M.IsMaterial,
+                        (case when M.idunitgroup='0' then NUll else M.idunitgroup end) as idunitgroup     
+                        from  TMateriel_Info  M
+                        inner join  TUnit U on  M.idunit=U.code and M.IsSingleUnit=U.IsSingleUnit 
+                        where M.IsSingleUnit='1' and U.IsMainUnit='0' and M.Status='0'
+                        ) as AA where AA.IsMaterial='1' ";
+                var data = DapperHelper.selecttable(sql);
+                mes.code = "200";
+                mes.message = "鏌ヨ鎴愬姛!";
+                mes.data = data;
+            }
+            catch (Exception e)
+            {
+                mes.code = "300";
+                mes.count = 0;
+                mes.message = e.Message;
+                mes.data = null;
+            }
+            return mes;
+        }
+        #endregion
+
+        #region[鐗╂枡娓呭崟鏂板淇敼鑾峰彇瀛愪欢Bom-T+鐣呮嵎閫氭ā寮廬
+        public static ToMessage AddUpdateTBomDetailsBomData(string materiel_code, User us)
+        {
+            string sql = "";
+            var dynamicParams = new DynamicParameters();
+            try
+            {
+                //鏍规嵁瀛愪欢鐗╂枡缂栫爜鏌ヨ瀛愪欢瀵瑰簲鐨凚om淇℃伅
+                sql = @"select B.id,B.materiel_code,M.partname as materiel_name,M.partspec as materiel_spec,B.version  
+                        from TBom_Main B
+                        left join TMateriel_Info M on B.materiel_code=M.partcode
+                        where B.materiel_code=@materiel_code";
+                dynamicParams.Add("@materiel_code", materiel_code);
+                var data = DapperHelper.selectdata(sql, dynamicParams);
+                mes.code = "200";
+                mes.message = "鏌ヨ鎴愬姛!";
+                mes.data = data;
+            }
+            catch (Exception e)
+            {
+                mes.code = "300";
+                mes.count = 0;
+                mes.message = e.Message;
+                mes.data = null;
+            }
+            return mes;
+        }
+        #endregion
+
+        #region[鐗╂枡娓呭崟鏂板淇敼鎻愪氦-T+鐣呮嵎閫氭ā寮廬
+        public static ToMessage TBomAddUpdate(string operType, BomDate bom, User us)
+        {
+            string sql = "";
+            List<object> list = new List<object>();
+            var dynamicParams = new DynamicParameters();
+            using (var conn = new SqlConnection(sqlServerConnectString))
+            {
+                conn.Open();
+                using (var transaction = conn.BeginTransaction())
+                {
+                    try
+                    {
+                        if (operType == "Add")
+                        {
+                            // 鍋囪浣犲凡缁忔湁浜嗘彃鍏ヤ富琛ㄥ拰瀛愯〃鐨凷QL璇彞  
+                            string masterUpdateversionSql = @"update TBom_Main set isdefaultbom='0' where materiel_code=@materiel_code";
+                            string masterInsertSql = @"insert into TBom_Main(materiel_code,unitcode,bomdepth,isdefaultbom,quantity,status,startdate,version,lm_user,lm_date) 
+                            values(@materiel_code,@unitcode,@bomdepth,@isdefaultbom,@quantity,@status,@startdate,@version,@lm_user,@lm_date); SELECT CAST(SCOPE_IDENTITY() AS INT)";
+                            string detailInsertSql = @"insert into TBom_Deta(m_id,seq,materiel_code,unitcode,base_quantity,loss_quantity,total_quantity,idchildbom) 
+                            values(@m_id,@seq,@materiel_code,@unitcode,@base_quantity,@loss_quantity,@total_quantity,@idchildbom)";
+                            string detailUpdateSql = @"update TBom_Deta set idchildbom=@idchildbom where materiel_code=@materiel_code";
+
+
+                            //鏌ヨ褰撳墠鐖朵欢鐗╂枡+鐗堟湰鍙锋槸鍚﹀瓨鍦�
+                            sql = @"select *  from TBom_Main where  materiel_code=@materiel_code and version=@version";
+                            dynamicParams.Add("@materiel_code", bom.materiel_code);
+                            dynamicParams.Add("@Version", bom.version);
+                            var data0 = DapperHelper.selectdata(sql, dynamicParams);
+                            if (data0.Rows.Count > 0)
+                            {
+                                mes.code = "300";
+                                mes.count = 0;
+                                mes.message = "鍚屼竴鐗╂枡鐗堟湰鍙锋湁閲嶅!";
+                                mes.data = null;
+                                return mes;
+                            }
+                            //鏌ヨ褰撳墠鐖朵欢鐗╂枡鏄惁瀛樺湪
+                            sql = @"select *  from TBom_Main where materiel_code=@materiel_code";
+                            dynamicParams.Add("@materiel_code", bom.materiel_code);
+                            var data1 = DapperHelper.selectdata(sql, dynamicParams);
+                            if (data1.Rows.Count > 0)  //瀛樺湪褰撳墠鐗╂枡鐨勫叾浠栫増鏈珺OM
+                            {
+                                if (bom.isdefaultbom == "1") //榛樿Bom涓�:鏄�
+                                {
+                                    //鏇存柊鐗╂枡娓呭崟瀵瑰簲鍏朵粬闈炴鐗堟湰鐨勬槸鍚﹂粯璁OM
+                                    var updateversionParam = new DynamicParameters();
+                                    updateversionParam.Add("@materiel_code", bom.materiel_code);
+                                    conn.Execute(masterUpdateversionSql, updateversionParam, transaction);
+                                }
+                            }
+                            else
+                            {
+                                if (bom.isdefaultbom == "0") //榛樿Bom涓�:鍚�
+                                {
+                                    mes.code = "300";
+                                    mes.count = 0;
+                                    mes.message = "涓�涓骇鍝佸彧鑳芥湁涓�涓笖蹇呴』鏈変竴涓粯璁OM!";
+                                    mes.data = null;
+                                    return mes;
+                                }
+                            }
+
+                            // 鎻掑叆涓昏〃骞惰幏鍙栨柊鎻掑叆鐨処D  
+                            var masterParam = new DynamicParameters();
+                            masterParam.Add("@materiel_code", bom.materiel_code);
+                            masterParam.Add("@unitcode", bom.unitcode);
+                            masterParam.Add("@bomdepth", bom.bomdepth);
+                            masterParam.Add("@isdefaultbom", bom.isdefaultbom);
+                            masterParam.Add("@quantity", bom.quantity);
+                            masterParam.Add("@status", bom.status);
+                            masterParam.Add("@startdate", bom.startdate);
+                            masterParam.Add("@version", bom.version);
+                            masterParam.Add("@lm_user", us.usercode);
+                            masterParam.Add("@lm_date", DateTime.Now);
+
+                            int masterId = Convert.ToInt32(conn.ExecuteScalar(masterInsertSql, masterParam, transaction));
+
+                            // 鎻掑叆瀛愯〃  
+                            foreach (var detail in bom.children)
+                            {
+                                var detailParam = new DynamicParameters();
+                                detailParam.Add("@m_id", masterId);
+                                detailParam.Add("@seq", detail.seq);
+                                detailParam.Add("@materiel_code", detail.materiel_code);
+                                detailParam.Add("@unitcode", detail.unitcode);
+                                detailParam.Add("@base_quantity", detail.base_quantity);
+                                detailParam.Add("@loss_quantity", detail.loss_quantity);
+                                detailParam.Add("@total_quantity", detail.total_quantity);
+                                detailParam.Add("@idchildbom", string.IsNullOrEmpty(detail.idchildbom) ? null : detail.idchildbom);
+                                conn.Execute(detailInsertSql, detailParam, transaction);
+                            }
+                            //鏇存柊瀛愯〃idchildbom
+                            var detailUpdateParam = new DynamicParameters();
+                            detailUpdateParam.Add("@idchildbom", masterId);
+                            detailUpdateParam.Add("@materiel_code", bom.materiel_code);
+                            conn.Execute(detailUpdateSql, detailUpdateParam, transaction);
+
+                            // 鎵�鏈夋彃鍏ユ垚鍔燂紝鎻愪氦浜嬪姟  
+                            transaction.Commit();
+                            //鏇存柊Bom灞傜骇
+                            var bomdepthParam = new DynamicParameters();
+                            bomdepthParam.Add("@bomId", masterId);
+                            bomdepthParam.Add("@isAllFlag", 1);
+                            var dt = DapperHelper.selectProcedure("AA_SP_UpdateBomDepth", bomdepthParam);
+                            mes.code = "200";
+                            mes.count = 0;
+                            mes.message = "鏂板鎿嶄綔鎴愬姛!";
+                            mes.data = null;
+                            //鍐欏叆鎿嶄綔璁板綍琛�
+                            LogHelper.DbOperateLog(us.usercode, "鏂板", "鏂板浜嗙墿鏂欐竻鍗曪細" + bom.materiel_code + "锛岀増鏈彿涓�:" + bom.version, us.usertype);
+                        }
+                        if (operType == "Update")
+                        {
+                            // 鍋囪浣犲凡缁忔湁浜嗘彃鍏ョ殑SQL璇彞  
+                            string masterUpdateversionSql = @"update TBom_Main set isdefaultbom='0' where materiel_code=@materiel_code and id<>@id";
+                            string detailInsertSql = @"insert into TBom_Deta(m_id,seq,materiel_code,unitcode,base_quantity,loss_quantity,total_quantity,idchildbom) 
+                            values(@m_id,@seq,@materiel_code,@unitcode,@base_quantity,@loss_quantity,@total_quantity,@idchildbom)";
+                            string detailUpdateSql = @"update TBom_Deta set seq=@seq,materiel_code=@materiel_code,base_quantity=@base_quantity,loss_quantity=@loss_quantity,
+                            total_quantity=@total_quantity,unitcode=@unitcode,idchildbom=@idchildbom where materiel_code=@materiel_code and m_id=@m_id";
+                            string detailDeleteSql = @"delete TBom_Deta  where materiel_code=@materiel_code and m_id=@m_id";
+                            string masterUpdateSql = @"update TBom_Main set materiel_code=@materiel_code,unitcode=@unitcode,quantity=@quantity,status=@status,startdate=@startdate,
+                                version=@version,isdefaultbom=@isdefaultbom,lm_user=@lm_user,lm_date=@lm_date where materiel_code=@materiel_code  and id=@ID";
+
+                            //鏌ヨ褰撳墠鐖朵欢鐗╂枡+鐗堟湰鍙锋槸鍚﹀瓨鍦�
+                            sql = @"select *  from TBom_Main where  materiel_code=@materiel_code and version=@version and id=@ID";
+                            dynamicParams.Add("@ID", bom.id);
+                            dynamicParams.Add("@materiel_code", bom.materiel_code);
+                            dynamicParams.Add("@version", bom.version);
+                            var data0 = DapperHelper.selectdata(sql, dynamicParams);
+                            if (data0.Rows.Count > 0 && data0.Rows.Count > 1)
+                            {
+                                mes.code = "300";
+                                mes.count = 0;
+                                mes.message = "鍚屼竴鐗╂枡鐗堟湰鍙锋湁閲嶅!";
+                                mes.data = null;
+                                return mes;
+                            }
+                            //鏍规嵁Bomid鏌ヨ鏄惁琚伐鍗曞紩鐢�
+                            sql = @"select *  from TK_Wrk_Man where  bom_id=@bom_id";
+                            dynamicParams.Add("@bom_id", bom.id);
+                            var data_1 = DapperHelper.selectdata(sql, dynamicParams);
+                            if (data_1.Rows.Count > 0)
+                            {
+                                mes.code = "300";
+                                mes.count = 0;
+                                mes.message = "淇敼鍓岯OM宸茬粡琚伐鍗曞紩鐢�,涓嶅彲淇敼!";
+                                mes.data = null;
+                                return mes;
+                            }
+                            //鏌ヨ褰撳墠鐖朵欢鐗╂枡闈炴鐗堟湰鏄惁瀛樺湪
+                            sql = @"select *  from TBom_Main where materiel_code=@materiel_code";
+                            dynamicParams.Add("@materiel_code", bom.materiel_code);
+                            var data1 = DapperHelper.selectdata(sql, dynamicParams);
+                            if (data1.Rows.Count > 0)  //瀛樺湪褰撳墠鐗╂枡鐨勫叾浠栫増鏈珺OM
+                            {
+                                // 浣跨敤LINQ鏌ヨDataTable  
+                                var BomDefault = from row in data1.AsEnumerable()
+                                                 where row.Field<int>("isdefaultbom") == 1
+                                                 select row;
+
+                                // 妫�鏌ユ槸鍚︽湁缁撴灉  
+                                if (BomDefault.Any())
+                                {
+                                    if (bom.isdefaultbom == "1") //榛樿Bom涓�:鏄�
+                                    {
+                                        //鏇存柊鐗╂枡娓呭崟瀵瑰簲鍏朵粬闈炴鐗堟湰鐨勬槸鍚﹂粯璁OM
+                                        var updateversionParam = new DynamicParameters();
+                                        updateversionParam.Add("@materiel_code", bom.materiel_code);
+                                        updateversionParam.Add("@id", bom.id);
+                                        conn.Execute(masterUpdateversionSql, updateversionParam, transaction);
+                                    }
+                                    else 
+                                    {
+                                        if (bom.isdefaultbom == "0") //榛樿Bom涓�:鏄�
+                                        {
+                                            mes.code = "300";
+                                            mes.count = 0;
+                                            mes.message = "涓�涓骇鍝佸彧鑳芥湁涓�涓笖蹇呴』鏈変竴涓粯璁OM!";
+                                            mes.data = null;
+                                            return mes;
+                                        }
+                                    }
+                                }
+                                else
+                                {
+                                    if (bom.isdefaultbom == "0") //榛樿Bom涓�:鏄�
+                                    {
+                                        mes.code = "300";
+                                        mes.count = 0;
+                                        mes.message = "涓�涓骇鍝佸彧鑳芥湁涓�涓笖蹇呴』鏈変竴涓粯璁OM!";
+                                        mes.data = null;
+                                        return mes;
+                                    }
+                                }
+
+                            }
+                            else
+                            {
+                                if (bom.isdefaultbom == "0") //榛樿Bom涓�:鍚�
+                                {
+                                    mes.code = "300";
+                                    mes.count = 0;
+                                    mes.message = "涓�涓骇鍝佸彧鑳芥湁涓�涓笖蹇呴』鏈変竴涓粯璁OM!";
+                                    mes.data = null;
+                                    return mes;
+                                }
+                            }
+                            //閫氳繃鐖朵欢id鏌ユ壘瀛愪欢淇℃伅
+                            sql = @"select *   from TBom_Deta where  m_id=@m_id";
+                            dynamicParams.Add("@m_id", bom.id);
+                            var list2 = DapperHelper.select<BomDateSub>(sql, dynamicParams);
+                            // 浣跨敤LINQ鐨凣roupJoin鏉ユ壘鍑哄樊寮�  
+                            var query = from item1 in bom.children
+                                        join item2 in list2 on new { item1.m_id, item1.materiel_code }
+                                        equals new { item2.m_id, item2.materiel_code } into gj
+                                        from subitem in gj.DefaultIfEmpty()
+                                        select new { Item1 = item1, Item2 = subitem };
+                            var toAdd = query.Where(q => q.Item2 == null).Select(q => q.Item1).ToList();
+                            var toUpdate = query.Where(q => q.Item2 != null && q.Item1.m_id == q.Item2.m_id && q.Item1.materiel_code == q.Item2.materiel_code).Select(q => q.Item1).ToList();
+                            var toDelete = list2
+                                .Where(item2 => !bom.children.Any(item1 =>
+                                    item1.m_id == item2.m_id &&
+                                    item1.materiel_code == item2.materiel_code
+                                    ))
+                                .ToList();
+                            //鏂板
+                            for (int i = 0; i < toAdd.Count; i++)
+                            {
+                                //鍐欏叆鐗╂枡娓呭崟瀛愯〃
+                                var detailParam = new DynamicParameters();
+                                detailParam.Add("@m_id", toAdd[i].m_id);
+                                detailParam.Add("@seq", toAdd[i].seq);
+                                detailParam.Add("@materiel_code", toAdd[i].materiel_code);
+                                detailParam.Add("@unitcode", toAdd[i].unitcode);
+                                detailParam.Add("@base_quantity", toAdd[i].base_quantity);
+                                detailParam.Add("@loss_quantity", toAdd[i].loss_quantity);
+                                detailParam.Add("@total_quantity", toAdd[i].total_quantity);
+                                detailParam.Add("@idchildbom", string.IsNullOrEmpty(toAdd[i].idchildbom) ? null : toAdd[i].idchildbom);
+                                conn.Execute(detailInsertSql, detailParam, transaction);
+                            }
+                            //鏇存柊
+                            for (int i = 0; i < toUpdate.Count; i++)
+                            {
+                                //鏇存柊鐗╂枡娓呭崟瀛愯〃
+                                var detailUpdateParam = new DynamicParameters();
+                                detailUpdateParam.Add("@m_id", toUpdate[i].m_id);
+                                detailUpdateParam.Add("@seq", toUpdate[i].seq);
+                                detailUpdateParam.Add("@materiel_code", toUpdate[i].materiel_code);
+                                detailUpdateParam.Add("@unitcode", toUpdate[i].unitcode);
+                                detailUpdateParam.Add("@base_quantity", toUpdate[i].base_quantity);
+                                detailUpdateParam.Add("@loss_quantity", toUpdate[i].loss_quantity);
+                                detailUpdateParam.Add("@total_quantity", toUpdate[i].total_quantity);
+                                detailUpdateParam.Add("@idchildbom", string.IsNullOrEmpty(toUpdate[i].idchildbom) ? null : toUpdate[i].idchildbom);
+                                conn.Execute(detailUpdateSql, detailUpdateParam, transaction);
+                            }
+                            //鍒犻櫎
+                            for (int i = 0; i < toDelete.Count; i++)
+                            {
+                                //鍒犻櫎鐗╂枡娓呭崟瀛愯〃
+                                var detailDeleteParam = new DynamicParameters();
+                                detailDeleteParam.Add("@materiel_code", toDelete[i].materiel_code);
+                                detailDeleteParam.Add("@m_id", toDelete[i].m_id);
+                                conn.Execute(detailDeleteSql, detailDeleteParam, transaction);
+                            }
+                            //鏇存柊鐗╂枡娓呭崟涓昏〃
+                            var masterUpdateParam = new DynamicParameters();
+                            masterUpdateParam.Add("@ID", bom.id);
+                            masterUpdateParam.Add("@materiel_code", bom.materiel_code);
+                            masterUpdateParam.Add("@unitcode", bom.unitcode);
+                            masterUpdateParam.Add("@quantity", bom.quantity);
+                            masterUpdateParam.Add("@status", bom.status);
+                            masterUpdateParam.Add("@startdate", bom.startdate);
+                            masterUpdateParam.Add("@version", bom.version);
+                            masterUpdateParam.Add("@isdefaultbom", bom.isdefaultbom);
+                            masterUpdateParam.Add("@lm_user", us.usercode);
+                            masterUpdateParam.Add("@lm_date", DateTime.Now);
+                            conn.Execute(masterUpdateSql, masterUpdateParam, transaction);
+                            // 鎵�鏈夋彃鍏ユ垚鍔燂紝鎻愪氦浜嬪姟  
+                            transaction.Commit();
+                            //鏇存柊Bom灞傜骇
+                            var bomdepthParam = new DynamicParameters();
+                            bomdepthParam.Add("@bomId", bom.id);
+                            bomdepthParam.Add("@isAllFlag", 1);
+                            var dt = DapperHelper.selectProcedure("AA_SP_UpdateBomDepth", bomdepthParam);
+                            mes.code = "200";
+                            mes.count = 0;
+                            mes.message = "淇敼鎿嶄綔鎴愬姛!";
+                            mes.data = null;
+                            //鍐欏叆鎿嶄綔璁板綍琛�
+                            LogHelper.DbOperateLog(us.usercode, "淇敼", "淇敼浜嗙墿鏂欐竻鍗曪細" + bom.materiel_code + "锛岀増鏈彿涓�:" + bom.version, us.usertype);
+                        }
+                    }
+                    catch (Exception e)
+                    {
+                        // 鎹曡幏寮傚父锛屽洖婊氫簨鍔�  
+                        transaction.Rollback();
+                        mes.code = "300";
+                        mes.count = 0;
+                        mes.message = e.Message;
+                        mes.data = null;
+                    }
+                }
+            }
+            return mes;
+        }
+        #endregion
+
+        #region[鐗╂枡娓呭崟鍒犻櫎鎻愪氦-T+鐣呮嵎閫氭ā寮廬
+        public static ToMessage TBomDelete(BomDate bom, User us)
+        {
+            throw new NotImplementedException();
+        }
+        #endregion
+
+
         #region[宸ュ崟浜у搧淇℃伅涓嬫媺妗嗘煡璇
         public static ToMessage PartSelect()
         {
diff --git a/VueWebCoreApi/DLL/DAL/ReportManagerDAL.cs b/VueWebCoreApi/DLL/DAL/ReportManagerDAL.cs
index 7a93986..f0c32de 100644
--- a/VueWebCoreApi/DLL/DAL/ReportManagerDAL.cs
+++ b/VueWebCoreApi/DLL/DAL/ReportManagerDAL.cs
@@ -72,11 +72,6 @@
                     dynamicParams.Add("@opendate", opendate + " 00:00:00");
                     dynamicParams.Add("@closedate", closedate + " 23:59:59");
                 }
-                if (search == "")
-                {
-                    search = "and 1=1 ";
-                }
-                search = search.Substring(3);//鎴彇绱㈠紩2鍚庨潰鐨勫瓧绗�
                 // --------------鏌ヨ鎸囧畾鏁版嵁--------------
                 var total = 0; //鎬绘潯鏁�
                 var sql = @"select top 100 percent AA.saleOrderCode,AA.m_po,AA.wkshp_code,AA.wkshp_name,AA.wo_code,AA.status,AA.lm_date,
@@ -99,7 +94,7 @@
                                  left join TMateriel_Info P on W.materiel_code=p.partcode
                                  left join  TOrganization F on W.wkshp_code=F.torg_code
                             	 group by E.saleOrderCode,W.m_po,W.wo_code,W.wkshp_code,F.torg_name,W.status,W.lm_date,P.partcode,P.partname,P.partspec,W.plan_qty
-                            ) as AA where " + search;
+                            ) as AA where AA.concat_name is not null " + search;
                 var data = DapperHelper.GetPageList<object>(sql, dynamicParams, prop, order, startNum, endNum, out total);
                 mes.code = "200";
                 mes.message = "鏌ヨ鎴愬姛!";
@@ -170,11 +165,6 @@
                     dynamicParams.Add("@opendate", opendate + " 00:00:00");
                     dynamicParams.Add("@closedate", closedate + " 23:59:59");
                 }
-                if (search == "")
-                {
-                    search = "and 1=1 ";
-                }
-                search = search.Substring(3);//鎴彇绱㈠紩2鍚庨潰鐨勫瓧绗�
                 // --------------鏌ヨ鎸囧畾鏁版嵁--------------
                 var total = 0; //鎬绘潯鏁�
 
@@ -200,7 +190,7 @@
                                  left join  TOrganization F on W.wkshp_code=F.torg_code
                             	 group by E.saleOrderCode,W.m_po,W.wo_code,W.wkshp_code,F.torg_name,W.status,W.lm_date,P.partcode,P.partname,P.partspec,W.plan_qty
                             ) as AA
-                            where " + search;
+                            where AA.concat_name is not null " + search;
                 DataTable data = DapperHelper.selectdata(sql, dynamicParams);
                 data.TableName = "Table"; //璁剧疆DataTable鐨勫悕绉�
                 string msg = DownLoad.DataTableToExcel(data, "鐢熶骇杩涘害鎶ヨ〃");
diff --git a/VueWebCoreApi/DLL/DAL/WorkOrderDAL.cs b/VueWebCoreApi/DLL/DAL/WorkOrderDAL.cs
index 48ae0ab..5478ff5 100644
--- a/VueWebCoreApi/DLL/DAL/WorkOrderDAL.cs
+++ b/VueWebCoreApi/DLL/DAL/WorkOrderDAL.cs
@@ -24,6 +24,7 @@
         public static string strProcName = ""; //瀹氫箟鍏ㄥ眬sql鍙橀噺
         public static List<SqlParameter> listStr = new List<SqlParameter>(); //瀹氫箟鍏ㄥ眬鍙傛暟闆嗗悎
         public static SqlParameter[] parameters; //瀹氫箟鍏ㄥ眬SqlParameter鍙傛暟鏁扮粍
+        public static string sqlServerConnectString = AppSetting.GetAppSetting("DBServer");
 
 
         #region[ERP璁㈠崟鏌ヨ]
@@ -808,7 +809,7 @@
                     }
                 }
                 //鑾峰彇宸ュ簭淇℃伅
-                sql = @"select S.id,S.wo_code,S.seq,S.step_code,T.stepname,T.flwtype,S.stepprice,(isnull(S.good_qty,0)+isnull(S.ng_qty,0)+isnull(S.laborbad_qty,0)+isnull(S.materielbad_qty,0)) as produceq_qty,
+                sql = @"select S.id,S.wo_code,S.seq,S.step_code,T.stepname,T.flwtype,S.stepprice as unprice,(isnull(S.good_qty,0)+isnull(S.ng_qty,0)+isnull(S.laborbad_qty,0)+isnull(S.materielbad_qty,0)) as produceq_qty,
                         S.good_qty,S.ng_qty,S.laborbad_qty,S.materielbad_qty,(isnull(S.plan_qty,0)-(isnull(S.good_qty,0)+isnull(S.ng_qty,0)+isnull(S.laborbad_qty,0)+isnull(S.materielbad_qty,0))) as delive_qty,S.isbott,S.isend 
                         from TK_Wrk_Step S
                         left join TStep  T on S.step_code=T.stepcode
@@ -821,7 +822,7 @@
                     if (parents[i].flwtype == "Z")
                     {
                         //閫氳繃宸ヨ壓璺嚎宸ュ簭琛↖D鏌ユ壘瀵瑰簲璁惧淇℃伅
-                        sql = @"select S.eqp_code,E.name as eqp_name,S.eqpprice as eqp_price,
+                        sql = @"select S.eqp_code,E.name as eqp_name,S.eqpprice as unprice,'Y' as enable,
                                 (isnull(S.good_qty,0)+isnull(S.ng_qty,0)+isnull(S.laborbad_qty,0)+isnull(S.materielbad_qty,0)) as produceq_qty, 
                                 S.good_qty,S.ng_qty,S.laborbad_qty,S.materielbad_qty 
                                 from TK_Wrk_StepEqp S
@@ -834,7 +835,7 @@
                     else
                     {
                         //閫氳繃宸ヨ壓璺嚎宸ュ簭琛↖D鏌ユ壘瀵瑰簲澶栧崗渚涘簲鍟嗕俊鎭�
-                        sql = @"select S.eqp_code,E.name as eqp_name,S.eqpprice as eqp_price,
+                        sql = @"select S.eqp_code,E.name as eqp_name,S.eqpprice as unprice,'Y' as enable,
                                 (isnull(S.good_qty,0)+isnull(S.ng_qty,0)+isnull(S.laborbad_qty,0)+isnull(S.materielbad_qty,0)) as produceq_qty, 
                                 S.good_qty,S.ng_qty,S.laborbad_qty,S.materielbad_qty 
                                 from TK_Wrk_StepEqp S
@@ -872,216 +873,255 @@
             string sql = "", route_code = "";
             var dynamicParams = new DynamicParameters();
             List<object> list = new List<object>();
-            try
+            using (var conn = new SqlConnection(sqlServerConnectString))
             {
-                dynamic dynObj = JObject.Parse(us.mesSetting);
-                bool route = dynObj.route;
-                if (route) //宸ヨ壓璺嚎鐗�
+                conn.Open();
+                using (var transaction = conn.BeginTransaction())
                 {
-                    route_code = json.routecode;
-                }
-                else //宸ュ簭鐗�
-                {
-                    route_code = null;
-                }
-                if (operType == "Add")
-                {
-                    //鍐欏叆宸ュ崟琛�
-                    sql = @"insert into TK_Wrk_Man(wo_code,wotype,status,wkshp_code,plan_qty,lm_user,lm_date,materiel_code,route_code,sourceid,m_po,saleOrderDeliveryDate,plan_startdate,plan_enddate,piroque,isaps,data_sources,isstep)
+                    try
+                    {
+                        dynamic dynObj = JObject.Parse(us.mesSetting);
+                        bool route = dynObj.route;
+                        if (route) //宸ヨ壓璺嚎鐗�
+                        {
+                            route_code = json.routecode;
+                        }
+                        else //宸ュ簭鐗�
+                        {
+                            route_code = null;
+                        }
+                        if (operType == "Add")
+                        {
+                            //鍐欏叆宸ュ崟琛�
+                            sql = @"insert into TK_Wrk_Man(wo_code,wotype,status,wkshp_code,plan_qty,lm_user,lm_date,materiel_code,route_code,sourceid,m_po,saleOrderDeliveryDate,plan_startdate,plan_enddate,piroque,isaps,data_sources,isstep)
                                 values(@wo_code,@wotype,@status,@wkshp_code,@plan_qty,@lm_user,@lm_date,@materiel_code,@route_code,@sourceid,@m_po,@saleOrderDeliveryDate,@plan_startdate,@plan_enddate,@orderlev,@isaps,@data_sources,@isstep)";
-                    list.Add(new
-                    {
-                        str = sql,
-                        parm = new
-                        {
-                            wo_code = json.wocode,
-                            wotype = json.wotype,
-                            status = json.wostatus,
-                            wkshp_code = json.wkshopcode,
-                            plan_qty = json.woqty,
-                            lm_user = us.usercode,
-                            lm_date = DateTime.Now.ToString(),
-                            materiel_code = json.partcode,
-                            route_code = route_code,
-                            sourceid = json.sourceid == "" ? null : json.sourceid, //鏃犳簮鍗曟椂璧嬪�糔ULL
-                            m_po = json.sourcewo,
-                            saleOrderDeliveryDate = json.deliverydate,
-                            plan_startdate = json.paystartdate,
-                            plan_enddate = json.payenddate,
-                            orderlev = "3",//浼樺厛绾э細鐗圭骇锛�1锛� 绱ф�ワ紙2锛� 姝e父锛�3锛�
-                            isaps = "N", //鏄惁鎺掍骇,榛樿N  Y=鏄�   N=鍚�
-                            data_sources = json.data_sources,
-                            isstep = json.isstep  //鏄惁鍏宠仈宸ュ簭
-                        }
-                    });
-                    //鍐欏叆宸ュ簭浠诲姟琛�
-                    for (int i = 0; i < json.WorkListSub.Count; i++)
-                    {
-                        sql = @"insert into TK_Wrk_Step(wo_code,seq,step_code,route_code,stepprice,plan_qty,status,isbott,isend,lm_user,lm_date)
-                                values(@wo_code,@seq,@step_code,@route_code,@stepprice,@plan_qty,@status,@isbott,@isend,@lm_user,@lm_date)";
-                        list.Add(new
-                        {
-                            str = sql,
-                            parm = new
-                            {
-                                wo_code = json.wocode,
-                                seq = json.WorkListSub[i].stepseq,
-                                step_code = json.WorkListSub[i].stepcode,
-                                route_code = route_code,
-                                stepprice = json.WorkListSub[i].stepprice,
-                                plan_qty = json.woqty,
-                                status = json.wostatus,
-                                isbott = json.WorkListSub[i].isbott,
-                                isend = json.WorkListSub[i].isend,
-                                lm_user = us.usercode,
-                                lm_date = DateTime.Now.ToString()
-                            }
-                        });
-                    }
-                    bool aa = DapperHelper.DoTransaction(list);
-                    if (aa)
-                    {
-                        //鍐欏叆鎿嶄綔璁板綍琛�
-                        LogHelper.DbOperateLog(us.usercode, "鏂板", "鏂板浜嗗伐鍗�:" + json.wocode, us.usertype);
-                        mes.code = "200";
-                        mes.count = 0;
-                        mes.message = "MES宸ュ崟鏂板缓鎴愬姛!";
-                        mes.data = null;
-                    }
-                    else
-                    {
-                        mes.code = "300";
-                        mes.count = 0;
-                        mes.message = "MES宸ュ崟鏂板缓澶辫触!";
-                        mes.data = null;
-                    }
-                }
-                if (operType == "Update")
-                {
-                    //淇敼宸ュ崟琛�
-                    sql = @"update TK_Wrk_Man set wotype=@wotype,wkshp_code=@wkshp_code,plan_qty=@plan_qty,lm_user=@lm_user,lm_date=@lm_date,
-                            materiel_code=@materiel_code,route_code=@route_code,sourceid=@sourceid,m_po=@m_po,saleOrderDeliveryDate=@saleOrderDeliveryDate,plan_startdate=@plan_startdate,plan_enddate=@plan_enddate,isstep=@isstep
-                            where wo_code=@wo_code";
-                    list.Add(new
-                    {
-                        str = sql,
-                        parm = new
-                        {
-                            wo_code = json.wocode,
-                            wotype = json.wotype,
-                            wkshp_code = json.wkshopcode,
-                            plan_qty = json.woqty,
-                            materiel_code = json.partcode,
-                            route_code = route_code,
-                            sourceid = json.sourceid == "" ? null : json.sourceid, //鏃犳簮鍗曟椂璧嬪�糔ULL
-                            m_po = json.sourcewo,
-                            saleOrderDeliveryDate = json.deliverydate,
-                            plan_startdate = json.paystartdate,
-                            plan_enddate = json.payenddate,
-                            lm_user = us.usercode,
-                            lm_date = DateTime.Now.ToString(),
-                            isstep = json.isstep  //鏄惁鍏宠仈宸ュ簭
-                        }
-                    });
-                    //鍒犻櫎宸ュ崟宸ュ簭琛�
-                    sql = @"delete TK_Wrk_Step where wo_code=@wo_code";
-                    list.Add(new
-                    {
-                        str = sql,
-                        parm = new
-                        {
-                            wo_code = json.wocode
-                        }
-                    });
-                    //鍐欏叆宸ュ崟宸ュ簭琛�
-                    for (int i = 0; i < json.WorkListSub.Count; i++)
-                    {
-                        sql = @"insert into TK_Wrk_Step(wo_code,seq,step_code,route_code,stepprice,plan_qty,status,isbott,isend,lm_user,lm_date)
-                                values(@wo_code,@seq,@step_code,@route_code,@stepprice,@plan_qty,@status,@isbott,@isend,@lm_user,@lm_date)";
-                        list.Add(new
-                        {
-                            str = sql,
-                            parm = new
-                            {
-                                wo_code = json.wocode,
-                                seq = json.WorkListSub[i].stepseq,
-                                step_code = json.WorkListSub[i].stepcode,
-                                route_code = route_code,
-                                stepprice = json.WorkListSub[i].stepprice,
-                                plan_qty = json.woqty,
-                                status = json.wostatus,
-                                isbott = json.WorkListSub[i].isbott,
-                                isend = json.WorkListSub[i].isend,
-                                lm_user = us.usercode,
-                                lm_date = DateTime.Now.ToString()
-                            }
-                        });
-                    }
-                    //鍒ゆ柇婧愬ご鍗曟嵁鏄惁鏉ユ簮ERP
-                    if (json.data_sources == "ERP")
-                    {
-                        //鍒ゆ柇宸ュ崟淇敼鏁伴噺宸�兼槸鍚︿负0
-                        if (json.difference != "0")
-                        {
-                            string staus = "";
-                            //鏌ヨ璁㈠崟鎬绘暟,宸蹭笅杈炬暟閲�
-                            sql = @"select qty,relse_qty  from TKimp_Ewo where id=@sourceid and wo=@sourcewo";
-                            dynamicParams.Add("@sourceid", json.sourceid);
-                            dynamicParams.Add("@sourcewo", json.sourcewo);
-                            var data0 = DapperHelper.selectdata(sql, dynamicParams);
-                            //褰撳墠宸ュ崟鍙慨鏀规暟閲�=璁㈠崟鏁伴噺-闈炲綋鍓嶅伐鍗曟�讳笅杈惧伐鍗曟暟閲�
-                            decimal qty = decimal.Parse(data0.Rows[0]["qty"].ToString());//璁㈠崟鎬绘暟
-                            decimal relse_qty = decimal.Parse(data0.Rows[0]["relse_qty"].ToString());//璁㈠崟宸蹭笅杈炬�绘暟
-                            relse_qty = relse_qty + decimal.Parse(json.difference);//鏂扮殑涓嬭揪鏁伴噺=鍘熷涓嬭揪鏁伴噺+宸��(姝h礋)
-                            if (qty == relse_qty)
-                            {
-                                staus = "CREATED"; //鍏ㄩ儴涓嬭揪
-                            }
-                            else
-                            {
-                                staus = "CREATING";//閮ㄥ垎涓嬭揪
-                            }
-                            //鏇存柊璁㈠崟琛ㄧ姸鎬併�佸凡涓嬭揪鏁伴噺
-                            sql = @"update TKimp_Ewo set status=@status,relse_qty=@relse_qty where id=@sourceid and wo=@sourcewo";
                             list.Add(new
                             {
                                 str = sql,
                                 parm = new
                                 {
-                                    status = staus,
-                                    relse_qty = relse_qty,
-                                    sourceid = json.sourceid,
-                                    sourcewo = json.sourcewo
+                                    wo_code = json.wocode,
+                                    wotype = json.wotype,
+                                    status = json.wostatus,
+                                    wkshp_code = json.wkshopcode,
+                                    plan_qty = json.woqty,
+                                    lm_user = us.usercode,
+                                    lm_date = DateTime.Now.ToString(),
+                                    materiel_code = json.partcode,
+                                    route_code = route_code,
+                                    sourceid = json.sourceid == "" ? null : json.sourceid, //鏃犳簮鍗曟椂璧嬪�糔ULL
+                                    m_po = json.sourcewo,
+                                    saleOrderDeliveryDate = json.deliverydate,
+                                    plan_startdate = json.paystartdate,
+                                    plan_enddate = json.payenddate,
+                                    orderlev = "3",//浼樺厛绾э細鐗圭骇锛�1锛� 绱ф�ワ紙2锛� 姝e父锛�3锛�
+                                    isaps = "N", //鏄惁鎺掍骇,榛樿N  Y=鏄�   N=鍚�
+                                    data_sources = json.data_sources,
+                                    isstep = json.isstep  //鏄惁鍏宠仈宸ュ簭
                                 }
                             });
+                            // 鍋囪浣犲凡缁忔湁浜嗘彃鍏ヤ富琛ㄥ拰瀛愯〃鐨凷QL璇彞  
+                            string workSql = @"insert into TK_Wrk_Man(wo_code,wotype,status,wkshp_code,plan_qty,lm_user,lm_date,materiel_code,route_code,sourceid,m_po,saleOrderDeliveryDate,plan_startdate,plan_enddate,piroque,isaps,data_sources,isstep)
+                                values(@wo_code,@wotype,@status,@wkshp_code,@plan_qty,@lm_user,@lm_date,@materiel_code,@route_code,@sourceid,@m_po,@saleOrderDeliveryDate,@plan_startdate,@plan_enddate,@orderlev,@isaps,@data_sources,@isstep)";
+                            string masterInsertSql = @"insert into TK_Wrk_Step(wo_code,seq,step_code,route_code,stepprice,plan_qty,status,isbott,isend,lm_user,lm_date)
+                                values(@wo_code,@seq,@step_code,@route_code,@stepprice,@plan_qty,@status,@isbott,@isend,@lm_user,@lm_date); SELECT CAST(SCOPE_IDENTITY() AS INT)";
+                            string detailInsertSql = @"insert into TK_Wrk_StepEqp(m_id,eqp_code,eqpprice) 
+                            values(@m_id,@eqp_code,@eqpprice)";
+
+                            // 鎻掑叆宸ュ崟琛�
+                            var workParam = new DynamicParameters();
+                            workParam.Add("@wo_code", json.wocode);
+                            workParam.Add("@wotype", json.wotype);
+                            workParam.Add("@status", json.wostatus);
+                            workParam.Add("@wkshp_code", json.wkshopcode);
+                            workParam.Add("@plan_qty", json.woqty);
+                            workParam.Add("@lm_user", us.usercode);
+                            workParam.Add("@lm_date", DateTime.Now.ToString());
+                            workParam.Add("@materiel_code", json.partcode);
+                            workParam.Add("@route_code", route_code);
+                            workParam.Add("@sourceid", json.sourceid == "" ? null : json.sourceid);
+                            workParam.Add("@m_po", json.sourcewo);
+                            workParam.Add("@saleOrderDeliveryDate", json.deliverydate);
+                            workParam.Add("@plan_startdate", json.paystartdate);
+                            workParam.Add("@plan_enddate", json.payenddate);
+                            workParam.Add("@orderlev", "3");//浼樺厛绾э細鐗圭骇锛�1锛� 绱ф�ワ紙2锛� 姝e父锛�3锛�
+                            workParam.Add("@isaps", "N");//鏄惁鎺掍骇,榛樿N  Y=鏄�   N=鍚�
+                            workParam.Add("@data_sources", json.data_sources);
+                            workParam.Add("@isstep", json.isstep);//鏄惁鍏宠仈宸ュ簭
+                            conn.Execute(workSql, workParam, transaction);
+
+                            //鍐欏叆宸ュ崟宸ュ簭琛�
+                            for (int i = 0; i < json.WorkListSub.Count; i++)
+                            {
+                                // 鎻掑叆涓昏〃骞惰幏鍙栨柊鎻掑叆鐨処D  
+                                var masterParam = new DynamicParameters();
+                                masterParam.Add("@wo_code", json.wocode);
+                                masterParam.Add("@seq", json.WorkListSub[i].stepseq);
+                                masterParam.Add("@step_code", json.WorkListSub[i].stepcode);
+                                masterParam.Add("@route_code", route_code);
+                                masterParam.Add("@stepprice", json.WorkListSub[i].unprice);
+                                masterParam.Add("@plan_qty", json.woqty);
+                                masterParam.Add("@status", json.wostatus);
+                                masterParam.Add("@isbott", json.WorkListSub[i].isbott);
+                                masterParam.Add("@isend", json.WorkListSub[i].isend);
+                                masterParam.Add("@lm_user", us.usercode);
+                                masterParam.Add("@lm_date", DateTime.Now.ToString());
+
+                                int masterId = Convert.ToInt32(conn.ExecuteScalar(masterInsertSql, masterParam, transaction));
+
+                                // 鍐欏叆宸ュ簭浠诲姟琛�  
+                                foreach (var detail in json.WorkListSub[i].WorkEqpListSub)
+                                {
+                                    var detailParam = new DynamicParameters();
+                                    detailParam.Add("@m_id", masterId);
+                                    detailParam.Add("@eqp_code", detail.eqpcode);
+                                    detailParam.Add("@eqpprice", detail.unprice);
+                                    conn.Execute(detailInsertSql, detailParam, transaction);
+                                }
+                            }
+
+                            // 鎵�鏈夋彃鍏ユ垚鍔燂紝鎻愪氦浜嬪姟  
+                            transaction.Commit();
+                            mes.code = "200";
+                            mes.count = 0;
+                            mes.message = "MES宸ュ崟鏂板缓鎴愬姛!";
+                            mes.data = null;
+                            //鍐欏叆鎿嶄綔璁板綍琛�
+                            LogHelper.DbOperateLog(us.usercode, "鏂板", "鏂板浜嗗伐鍗�:" + json.wocode, us.usertype);
+                        }
+                        if (operType == "Update")
+                        {
+                            //閫氳繃宸ュ崟鏌ユ壘宸ュ簭浠诲姟
+                            sql = @"select *  from TK_Wrk_Step where wo_code=@wo_code";
+                            dynamicParams.Add("@wo_code", json.wocode);
+                            var data = DapperHelper.selectdata(sql, dynamicParams);
+                           
+                            // 鍋囪浣犲凡缁忔湁浜嗘彃鍏ヤ富琛ㄥ拰瀛愯〃鐨凷QL璇彞  
+                            string workSql = @"update TK_Wrk_Man set wotype=@wotype,wkshp_code=@wkshp_code,plan_qty=@plan_qty,lm_user=@lm_user,lm_date=@lm_date,
+                            materiel_code=@materiel_code,route_code=@route_code,sourceid=@sourceid,m_po=@m_po,saleOrderDeliveryDate=@saleOrderDeliveryDate,plan_startdate=@plan_startdate,plan_enddate=@plan_enddate,isstep=@isstep
+                            where wo_code=@wo_code";
+                            string deleteWrkStepEqp = @"delete TK_Wrk_StepEqp where m_id=@m_id";
+                            string deleteWrkStep = @"delete TK_Wrk_Step where wo_code=@wo_code";
+                            string masterInsertSql = @"insert into TK_Wrk_Step(wo_code,seq,step_code,route_code,stepprice,plan_qty,status,isbott,isend,lm_user,lm_date)
+                                values(@wo_code,@seq,@step_code,@route_code,@stepprice,@plan_qty,@status,@isbott,@isend,@lm_user,@lm_date); SELECT CAST(SCOPE_IDENTITY() AS INT)";
+                            string detailInsertSql = @"insert into TK_Wrk_StepEqp(m_id,eqp_code,eqpprice) 
+                            values(@m_id,@eqp_code,@eqpprice)";
+                            string EwoStatusSql = @"update TKimp_Ewo set status=@status,relse_qty=@relse_qty where id=@sourceid and wo=@sourcewo";
+
+                            // 淇敼宸ュ崟琛�
+                            var workParam = new DynamicParameters();
+                            workParam.Add("@wo_code", json.wocode);
+                            workParam.Add("@wotype", json.wotype);
+                            workParam.Add("@wkshp_code", json.wkshopcode);
+                            workParam.Add("@plan_qty", json.woqty);
+                            workParam.Add("@lm_user", us.usercode);
+                            workParam.Add("@lm_date", DateTime.Now.ToString());
+                            workParam.Add("@materiel_code", json.partcode);
+                            workParam.Add("@route_code", route_code);
+                            workParam.Add("@sourceid", json.sourceid == "" ? null : json.sourceid);
+                            workParam.Add("@m_po", json.sourcewo);
+                            workParam.Add("@saleOrderDeliveryDate", json.deliverydate);
+                            workParam.Add("@plan_startdate", json.paystartdate);
+                            workParam.Add("@plan_enddate", json.payenddate);
+                            workParam.Add("@isstep", json.isstep);//鏄惁鍏宠仈宸ュ簭
+                            conn.Execute(workSql, workParam, transaction);
+
+                            //鍒犻櫎宸ュ崟宸ュ簭璁惧琛�
+                            for (int i = 0; i < data.Rows.Count; i++)
+                            {
+                                var wrkStepEqpParam = new DynamicParameters();
+                                wrkStepEqpParam.Add("@m_id", data.Rows[i]["ID"].ToString());
+                                conn.Execute(deleteWrkStepEqp, wrkStepEqpParam, transaction);
+                            }
+
+
+                            //鍒犻櫎宸ュ崟宸ュ簭琛�
+                            var workStepParam = new DynamicParameters();
+                            workStepParam.Add("@wo_code", json.wocode);
+                            conn.Execute(deleteWrkStep, workStepParam, transaction);
+
+                            //鍐欏叆宸ュ崟宸ュ簭琛�
+                            for (int i = 0; i < json.WorkListSub.Count; i++)
+                            {
+                                // 鎻掑叆涓昏〃骞惰幏鍙栨柊鎻掑叆鐨処D  
+                                var masterParam = new DynamicParameters();
+                                masterParam.Add("@wo_code", json.wocode);
+                                masterParam.Add("@seq", json.WorkListSub[i].stepseq);
+                                masterParam.Add("@step_code", json.WorkListSub[i].stepcode);
+                                masterParam.Add("@route_code", route_code);
+                                masterParam.Add("@stepprice", json.WorkListSub[i].unprice);
+                                masterParam.Add("@plan_qty", json.woqty);
+                                masterParam.Add("@status", json.wostatus);
+                                masterParam.Add("@isbott", json.WorkListSub[i].isbott);
+                                masterParam.Add("@isend", json.WorkListSub[i].isend);
+                                masterParam.Add("@lm_user", us.usercode);
+                                masterParam.Add("@lm_date", DateTime.Now.ToString());
+
+                                int masterId = Convert.ToInt32(conn.ExecuteScalar(masterInsertSql, masterParam, transaction));
+
+                                // 鍐欏叆宸ュ簭浠诲姟琛�  
+                                foreach (var detail in json.WorkListSub[i].WorkEqpListSub)
+                                {
+                                    var detailParam = new DynamicParameters();
+                                    detailParam.Add("@m_id", masterId);
+                                    detailParam.Add("@eqp_code", detail.eqpcode);
+                                    detailParam.Add("@eqpprice", detail.unprice);
+                                    conn.Execute(detailInsertSql, detailParam, transaction);
+                                }
+                            }
+                            //鍒ゆ柇婧愬ご鍗曟嵁鏄惁鏉ユ簮ERP
+                            if (json.data_sources == "ERP")
+                            {
+                                //鍒ゆ柇宸ュ崟淇敼鏁伴噺宸�兼槸鍚︿负0
+                                if (json.difference != "0")
+                                {
+                                    string staus = "";
+                                    //鏌ヨ璁㈠崟鎬绘暟,宸蹭笅杈炬暟閲�
+                                    sql = @"select qty,relse_qty  from TKimp_Ewo where id=@sourceid and wo=@sourcewo";
+                                    dynamicParams.Add("@sourceid", json.sourceid);
+                                    dynamicParams.Add("@sourcewo", json.sourcewo);
+                                    var data0 = DapperHelper.selectdata(sql, dynamicParams);
+                                    //褰撳墠宸ュ崟鍙慨鏀规暟閲�=璁㈠崟鏁伴噺-闈炲綋鍓嶅伐鍗曟�讳笅杈惧伐鍗曟暟閲�
+                                    decimal qty = decimal.Parse(data0.Rows[0]["qty"].ToString());//璁㈠崟鎬绘暟
+                                    decimal relse_qty = decimal.Parse(data0.Rows[0]["relse_qty"].ToString());//璁㈠崟宸蹭笅杈炬�绘暟
+                                    relse_qty = relse_qty + decimal.Parse(json.difference);//鏂扮殑涓嬭揪鏁伴噺=鍘熷涓嬭揪鏁伴噺+宸��(姝h礋)
+                                    if (qty == relse_qty)
+                                    {
+                                        staus = "CREATED"; //鍏ㄩ儴涓嬭揪
+                                    }
+                                    else
+                                    {
+                                        staus = "CREATING";//閮ㄥ垎涓嬭揪
+                                    }
+                                    //鏇存柊璁㈠崟琛ㄧ姸鎬併�佸凡涓嬭揪鏁伴噺
+                                    var EwoStatusParam = new DynamicParameters();
+                                    EwoStatusParam.Add("@status", staus);
+                                    EwoStatusParam.Add("@relse_qty", relse_qty);
+                                    EwoStatusParam.Add("@sourceid", json.sourceid);
+                                    EwoStatusParam.Add("@sourcewo", json.sourcewo);
+                                    conn.Execute(EwoStatusSql, EwoStatusParam, transaction);
+                                }
+                            }
+                            // 鎵�鏈夋彃鍏ユ垚鍔燂紝鎻愪氦浜嬪姟  
+                            transaction.Commit();
+                            mes.code = "200";
+                            mes.count = 0;
+                            mes.message = "淇敼鎿嶄綔鎴愬姛!";
+                            mes.data = null;
+                            //鍐欏叆鎿嶄綔璁板綍琛�
+                            LogHelper.DbOperateLog(us.usercode, "淇敼", "淇敼浜嗗伐鍗�:" + json.wocode, us.usertype);
                         }
                     }
-
-                    bool aa = DapperHelper.DoTransaction(list);
-                    if (aa)
+                    catch (Exception e)
                     {
-                        //鍐欏叆鎿嶄綔璁板綍琛�
-                        LogHelper.DbOperateLog(us.usercode, "淇敼", "淇敼浜嗗伐鍗�:" + json.wocode, us.usertype);
-                        mes.code = "200";
-                        mes.count = 0;
-                        mes.message = "淇敼鎿嶄綔鎴愬姛!";
-                        mes.data = null;
-                    }
-                    else
-                    {
+                        // 鎹曡幏寮傚父锛屽洖婊氫簨鍔�  
+                        transaction.Rollback();
                         mes.code = "300";
                         mes.count = 0;
-                        mes.message = "淇敼鎿嶄綔澶辫触!";
+                        mes.message = e.Message;
                         mes.data = null;
                     }
                 }
-            }
-            catch (Exception e)
-            {
-                mes.code = "300";
-                mes.count = 0;
-                mes.message = e.Message;
-                mes.data = null;
             }
             return mes;
         }
@@ -1121,6 +1161,15 @@
                             sql = @"update TKimp_Ewo set status='CREATING',relse_qty=relse_qty-@orderqty  where wo=@m_po and id=@souceid";
                             list.Add(new { str = sql, parm = new { m_po = m_po, souceid = souceid, orderqty = decimal.Parse(orderqty) } });
                         }
+                    }
+                    //鍒犻櫎宸ュ崟宸ュ簭璁惧琛�
+                    sql = @"select *  from TK_Wrk_Step where wo_code=@wo_code";
+                    dynamicParams.Add("@wo_code", wocode);
+                    var data1 = DapperHelper.selectdata(sql, dynamicParams);
+                    for (int i = 0; i < data1.Rows.Count; i++)
+                    {
+                        sql = @"delete TK_Wrk_StepEqp  where m_id=@m_id";
+                        list.Add(new { str = sql, parm = new { m_id = data1.Rows[i]["ID"].ToString() } });
                     }
                     //鍒犻櫎宸ュ崟宸ュ簭琛�
                     sql = @"delete TK_Wrk_Step  where wo_code=@wocode";
@@ -1176,6 +1225,7 @@
             var sql = "";
             List<object> list = new List<object>();
             var dynamicParams = new DynamicParameters();
+            List<WorkRouteStepEqp> parents = new List<WorkRouteStepEqp>();
             try
             {
                 dynamic dynObj = JObject.Parse(us.mesSetting);
@@ -1183,7 +1233,7 @@
                 if (route) //宸ヨ壓璺嚎鐗�
                 {
                     //MES宸ュ崟鏌ユ壘鍘嗗彶寮曠敤鏈�鏂板伐搴忎俊鎭�
-                    sql = @"select S.id,S.wo_code,S.seq,S.step_code,T.stepname,T.flwtype,S.stepprice,'0' as produceq_qty,
+                    sql = @"select S.id,S.wo_code,S.seq,S.step_code,T.stepname,T.flwtype,S.stepprice as unprice,'0' as produceq_qty,
                            '0' as good_qty,'0' as ng_qty,'0' as laborbad_qty,'0' as materielbad_qty,'0' as delive_qty,isbott,isend
                            from TK_Wrk_Step S
                            inner join (
@@ -1197,14 +1247,14 @@
                     dynamicParams.Add("@wkshopcode", wkshopcode);
                     dynamicParams.Add("@partcode", partcode);
                     dynamicParams.Add("@routecode", routecode);
-                    var parents = DapperHelper.select<WorkRouteStepEqp>(sql, dynamicParams);
+                    parents = DapperHelper.select<WorkRouteStepEqp>(sql, dynamicParams);
                     //鑾峰彇宸ュ簭瀵瑰簲璁惧淇℃伅
                     for (int i = 0; i < parents.Count; i++)
                     {
                         if (parents[i].flwtype == "Z")
                         {
                             //閫氳繃宸ヨ壓璺嚎宸ュ簭琛↖D鏌ユ壘瀵瑰簲璁惧淇℃伅
-                            sql = @"select S.eqp_code,E.name as eqp_name,S.eqpprice as eqp_price,
+                            sql = @"select S.eqp_code,E.name as eqp_name,S.eqpprice as unprice,'Y' as enable,
                                 (isnull(S.good_qty,0)+isnull(S.ng_qty,0)+isnull(S.laborbad_qty,0)+isnull(S.materielbad_qty,0)) as produceq_qty, 
                                 S.good_qty,S.ng_qty,S.laborbad_qty,S.materielbad_qty 
                                 from TK_Wrk_StepEqp S
@@ -1217,7 +1267,7 @@
                         else
                         {
                             //閫氳繃宸ヨ壓璺嚎宸ュ簭琛↖D鏌ユ壘瀵瑰簲澶栧崗渚涘簲鍟嗕俊鎭�
-                            sql = @"select S.eqp_code,E.name as eqp_name,S.eqpprice as eqp_price,
+                            sql = @"select S.eqp_code,E.name as eqp_name,S.eqpprice as unprice,'Y' as enable,
                                 (isnull(S.good_qty,0)+isnull(S.ng_qty,0)+isnull(S.laborbad_qty,0)+isnull(S.materielbad_qty,0)) as produceq_qty, 
                                 S.good_qty,S.ng_qty,S.laborbad_qty,S.materielbad_qty 
                                 from TK_Wrk_StepEqp S
@@ -1232,7 +1282,7 @@
                 else
                 {
                     //MES宸ュ崟鏌ユ壘鍘嗗彶寮曠敤鏈�鏂板伐搴忎俊鎭�
-                    sql = @"select S.id,S.wo_code,S.seq,S.step_code,T.stepname,T.flwtype,S.stepprice,'0' as produceq_qty,
+                    sql = @"select S.id,S.wo_code,S.seq,S.step_code,T.stepname,T.flwtype,S.stepprice as unprice,'0' as produceq_qty,
                             '0' as good_qty,'0' as ng_qty,'0' as laborbad_qty,'0' as materielbad_qty,'0' as delive_qty,isbott,isend
                             from TK_Wrk_Step S
                             inner join (
@@ -1245,14 +1295,14 @@
                             order by S.seq";
                     dynamicParams.Add("@wkshopcode", wkshopcode);
                     dynamicParams.Add("@partcode", partcode);
-                    var parents = DapperHelper.select<WorkRouteStepEqp>(sql, dynamicParams);
+                    parents = DapperHelper.select<WorkRouteStepEqp>(sql, dynamicParams);
                     //鑾峰彇宸ュ簭瀵瑰簲璁惧淇℃伅
                     for (int i = 0; i < parents.Count; i++)
                     {
                         if (parents[i].flwtype == "Z")
                         {
                             //閫氳繃宸ヨ壓璺嚎宸ュ簭琛↖D鏌ユ壘瀵瑰簲璁惧淇℃伅
-                            sql = @"select S.eqp_code,E.name as eqp_name,S.eqpprice as eqp_price,
+                            sql = @"select S.eqp_code,E.name as eqp_name,S.eqpprice as unprice,'Y' as enable,
                                 (isnull(S.good_qty,0)+isnull(S.ng_qty,0)+isnull(S.laborbad_qty,0)+isnull(S.materielbad_qty,0)) as produceq_qty, 
                                 S.good_qty,S.ng_qty,S.laborbad_qty,S.materielbad_qty 
                                 from TK_Wrk_StepEqp S
@@ -1265,7 +1315,7 @@
                         else
                         {
                             //閫氳繃宸ヨ壓璺嚎宸ュ簭琛↖D鏌ユ壘瀵瑰簲澶栧崗渚涘簲鍟嗕俊鎭�
-                            sql = @"select S.eqp_code,E.name as eqp_name,S.eqpprice as eqp_price,
+                            sql = @"select S.eqp_code,E.name as eqp_name,S.eqpprice as unprice,'Y' as enable,
                                 (isnull(S.good_qty,0)+isnull(S.ng_qty,0)+isnull(S.laborbad_qty,0)+isnull(S.materielbad_qty,0)) as produceq_qty, 
                                 S.good_qty,S.ng_qty,S.laborbad_qty,S.materielbad_qty 
                                 from TK_Wrk_StepEqp S
@@ -1277,11 +1327,9 @@
                         }
                     }
                 }
-
-                var data = DapperHelper.selectdata(sql, dynamicParams);
                 mes.code = "200";
-                mes.count = data.Rows.Count;
-                mes.data = data;
+                mes.count = parents.Count;
+                mes.data = parents;
                 mes.message = "鏌ヨ鎴愬姛!";
             }
             catch (Exception e)
diff --git a/VueWebCoreApi/Models/Bom/BomDate.cs b/VueWebCoreApi/Models/Bom/BomDate.cs
new file mode 100644
index 0000000..b2a8558
--- /dev/null
+++ b/VueWebCoreApi/Models/Bom/BomDate.cs
@@ -0,0 +1,127 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+
+namespace VueWebCoreApi.Models.Bom
+{
+    public class BomDate
+    {
+        /// <summary>
+        /// 鎺掑簭搴忓彿
+        /// </summary>
+        public string rowNum { get; set; }
+        /// <summary>
+        /// 涓婚敭ID
+        /// </summary>
+        public string id { get; set; }
+        /// <summary>
+        /// 鐖朵欢缂栫爜
+        /// </summary>
+        public string materiel_code { get; set; }
+        /// <summary>
+        /// 鐖朵欢鍚嶇О
+        /// </summary>
+        public string materiel_name { get; set; }
+        /// <summary>
+        /// 鐖朵欢瑙勬牸
+        /// </summary>
+        public string materiel_spec { get; set; }
+        /// <summary>
+        /// 瀛樿揣绫诲瀷缂栫爜
+        /// </summary>
+        public string materiel_typecode { get; set; }
+        /// <summary>
+        /// 瀛樿揣绫诲瀷鍚嶇О
+        /// </summary>
+        public string materiel_typename { get; set; }
+        /// <summary>
+        /// 璁¢噺鍗曚綅缂栫爜
+        /// </summary>
+        public string unitcode { get; set; }
+        /// <summary>
+        /// 璁¢噺鍗曚綅鍚嶇О
+        /// </summary>
+        public string unitname { get; set; }
+        /// <summary>
+        /// 鍩虹鐢ㄩ噺
+        /// </summary>
+        public string quantity { get; set; }
+        /// <summary>
+        /// 鍚敤鐘舵��:Y/N
+        /// </summary>
+        public string status { get; set; }
+        /// <summary>
+        /// 鍚敤鏃ユ湡
+        /// </summary>
+        public string startdate { get; set; }
+        /// <summary>
+        /// 鐗堟湰鍙�
+        /// </summary>
+        public string version { get; set; }
+        /// <summary>
+        /// 鏄惁榛樿BOM锛�0(鍚�)1(鏄�)
+        /// </summary>
+        public string isdefaultbom { get; set; }
+        /// <summary>
+        /// Bom灞傜骇
+        /// </summary>
+        public string bomdepth { get; set; }
+        /// <summary>
+        /// 鍒涘缓浜�
+        /// </summary>
+        public string lm_user { get; set; }
+        /// <summary>
+        /// 鍒涘缓鏃堕棿
+        /// </summary>
+        public string lm_date { get; set; }
+        public List<BomDateSub> children { get; set; }
+    }
+    public class BomDateSub
+    {
+        /// <summary>
+        /// 涓婚敭ID
+        /// </summary>
+        public string id { get; set; }
+        /// <summary>
+        /// 鐖朵欢ID
+        /// </summary>
+        public string m_id { get; set; }
+        /// <summary>
+        /// 瀛愪欢搴忓彿
+        /// </summary>
+        public string seq { get; set; }
+        /// <summary>
+        /// 瀛愪欢缂栫爜
+        /// </summary>
+        public string materiel_code { get; set; }
+        /// <summary>
+        /// 瀛愪欢鍚嶇О
+        /// </summary>
+        public string materiel_name { get; set; }
+        /// <summary>
+        /// 瀛愪欢瑙勬牸
+        /// </summary>
+        public string materiel_spec { get; set; }
+        /// <summary>
+        /// 璁¢噺鍗曚綅缂栫爜
+        /// </summary>
+        public string unitcode { get; set; }
+        /// <summary>
+        /// 鍩烘湰鐢ㄩ噺
+        /// </summary>
+        public string base_quantity { get; set; }
+        /// <summary>
+        /// 鎹熻�楃巼
+        /// </summary>
+        public string loss_quantity { get; set; }
+        /// <summary>
+        /// 瀹為檯鐢ㄩ噺
+        /// </summary>
+        public string total_quantity { get; set; }
+        /// <summary>
+        /// 瀛愪欢bomid(瀵瑰簲鑷繁鐨凚om涓昏〃id)
+        /// </summary>
+        public string idchildbom { get; set; }
+    }
+}
diff --git a/VueWebCoreApi/Models/MaterialCraftsSave.cs b/VueWebCoreApi/Models/MaterialCraftsSave.cs
index bb14314..a6d4eb5 100644
--- a/VueWebCoreApi/Models/MaterialCraftsSave.cs
+++ b/VueWebCoreApi/Models/MaterialCraftsSave.cs
@@ -64,6 +64,10 @@
         /// </summary>
         public string eqp_name { get; set; }
         /// <summary>
+        /// 鍚敤鐘舵��:Y/N
+        /// </summary>
+        public string enable { get; set; }
+        /// <summary>
         /// 璁惧鑺傛媿
         /// </summary>
         public string eqp_value { get; set; }
diff --git a/VueWebCoreApi/Models/WorkData/WorkList.cs b/VueWebCoreApi/Models/WorkData/WorkList.cs
index 8e0aefe..45d9f8a 100644
--- a/VueWebCoreApi/Models/WorkData/WorkList.cs
+++ b/VueWebCoreApi/Models/WorkData/WorkList.cs
@@ -32,6 +32,10 @@
         /// </summary>
         public string partcode { get; set; }
         /// <summary>
+        /// Bomid
+        /// </summary>
+        public string bomid { get; set; }
+        /// <summary>
         /// 宸ヨ壓璺嚎缂栫爜
         /// </summary>
         public string routecode { get; set; }
@@ -72,6 +76,10 @@
     public class WorkListSub
     {
         /// <summary>
+        /// 宸ュ簭浠诲姟ID
+        /// </summary>
+        public string id { get; set; }
+        /// <summary>
         /// 宸ュ簭搴忓彿
         /// </summary>
         public string stepseq { get; set; }
@@ -82,7 +90,7 @@
         /// <summary>
         /// 鐢熶骇鍗曚环
         /// </summary>
-        public string stepprice { get; set; }
+        public string unprice { get; set; }
         /// <summary>
         /// 鏄惁棣栭亾宸ュ簭
         /// </summary>
@@ -91,5 +99,17 @@
         /// 鏄惁鏈亾宸ュ簭
         /// </summary>
         public string isend { get; set; }
+        public List<WorkEqpListSub> WorkEqpListSub { get; set; }
+    }
+    public class WorkEqpListSub 
+    {
+        /// <summary>
+        /// 璁惧缂栫爜
+        /// </summary>
+        public string eqpcode { get; set; }
+        /// <summary>
+        /// 鐢熶骇鍗曚环
+        /// </summary>
+        public string unprice { get; set; }
     }
 }
diff --git a/VueWebCoreApi/Models/WorkData/WorkRouteStepEqp.cs b/VueWebCoreApi/Models/WorkData/WorkRouteStepEqp.cs
index a921028..f1acfbc 100644
--- a/VueWebCoreApi/Models/WorkData/WorkRouteStepEqp.cs
+++ b/VueWebCoreApi/Models/WorkData/WorkRouteStepEqp.cs
@@ -34,7 +34,7 @@
         /// <summary>
         /// 宸ュ簭宸ヤ环
         /// </summary>
-        public string stepprice { get; set; }
+        public string unprice { get; set; }
         /// <summary>
         /// 宸茬敓浜ф暟閲�
         /// </summary>
@@ -80,9 +80,13 @@
         /// </summary>
         public string eqp_name { get; set; }
         /// <summary>
+        /// 鏄惁鍚敤:Y/N
+        /// </summary>
+        public string enable { get; set; }
+        /// <summary>
         /// 璁惧宸ヤ环
         /// </summary>
-        public string eqp_price { get; set; }
+        public string unprice { get; set; }
         /// <summary>
         /// 鍚堟牸鏁伴噺
         /// </summary>
diff --git a/VueWebCoreApi/Tools/DapperHelper.cs b/VueWebCoreApi/Tools/DapperHelper.cs
index ea6d910..5c9c07f 100644
--- a/VueWebCoreApi/Tools/DapperHelper.cs
+++ b/VueWebCoreApi/Tools/DapperHelper.cs
@@ -214,6 +214,42 @@
 
             }
         }
+        public static List<T> GetPageListData<T>(string sql, Object parm, string orderBy, string sort, int pageIndex, int pageSize, out int total)
+        {
+            List<T> list = null;
+            StringBuilder sb = new StringBuilder();
+            sb.AppendFormat("SELECT COUNT(1) FROM ({0}) AS Result;", sql);
+            sb.AppendFormat(@"SELECT *
+                        FROM(SELECT *,ROW_NUMBER() OVER(ORDER BY {1} {2}) AS rowNum
+                             FROM  ({0}) AS Temp) AS Result
+                        WHERE  rowNum >= {3} AND rowNum <= {4}
+                        ORDER BY {1} {2}", sql, orderBy, sort, pageIndex, pageSize);  //skip, pageIndex * pageSize
+
+            using (IDbConnection conn = sqlConnection())
+            {
+                try
+                {
+                    using (var reader = conn.QueryMultiple(sb.ToString(), parm))
+                    {
+                        total = reader.ReadFirst<int>();
+                        list = reader.Read<T>().ToList();
+                    }
+                }
+                catch (Exception ex)
+                {
+                    //鍒涘缓鏃ュ織璁板綍缁勪欢瀹炰緥
+                    LogHelper.WriteLog(ex);
+                    throw ex;
+                }
+                finally
+                {
+                    conn.Dispose();
+                    conn.Close();
+                }
+
+            }
+            return list;
+        }
 
         /// <summary>
         /// dapper閫氱敤鍒嗛〉鍑芥暟

--
Gitblit v1.9.3