From 8de87213db233b968683bf39d9593396ee842bfb Mon Sep 17 00:00:00 2001
From: yl <ykxkd@outlook.com>
Date: 星期四, 27 三月 2025 13:29:16 +0800
Subject: [PATCH] 1.增加产品编码批量查找关联的工艺信息接口 2.增加根据工艺信息(工艺路线编码)批量查找关联工序集合接口 3.增加工单批量绑定工艺接口

---
 VueWebCoreApi/Controllers/BasicSettingController.cs |   34 +++
 VueWebCoreApi/Models/WorkData/PartRouteList.cs      |   15 +
 VueWebCoreApi/DLL/BLL/WorkOrderBLL.cs               |   14 +
 VueWebCoreApi/DLL/DAL/ReportManagerDAL.cs           |   14 -
 VueWebCoreApi/DLL/DAL/WorkOrderDAL.cs               |  298 +++++++++++++++++++++++++++++
 VueWebCoreApi/Models/WorkData/WorkStepList.cs       |   27 ++
 VueWebCoreApi/Models/WorkData/PartRouteStepList.cs  |   19 +
 VueWebCoreApi/DLL/BLL/BasicSettingBLL.cs            |   15 +
 VueWebCoreApi/DLL/DAL/BasicSettingDAL.cs            |  124 ++++++++++++
 VueWebCoreApi/Controllers/WorkOrderController.cs    |   33 +++
 10 files changed, 583 insertions(+), 10 deletions(-)

diff --git a/VueWebCoreApi/Controllers/BasicSettingController.cs b/VueWebCoreApi/Controllers/BasicSettingController.cs
index 004da7c..649c9d5 100644
--- a/VueWebCoreApi/Controllers/BasicSettingController.cs
+++ b/VueWebCoreApi/Controllers/BasicSettingController.cs
@@ -10,6 +10,7 @@
 using VueWebCoreApi.DLL.BLL;
 using VueWebCoreApi.Models;
 using VueWebCoreApi.Models.RolePermission;
+using VueWebCoreApi.Models.WorkData;
 using VueWebCoreApi.Tools;
 using static VueWebCoreApi.Models.RolePermission.RolePermissionSava;
 
@@ -967,6 +968,39 @@
         }
         #endregion
 
+        #region[浜у搧缂栫爜鎵归噺鏌ユ壘鍏宠仈鐨勫伐鑹轰俊鎭痌
+        /// <summary>
+        /// 浜у搧缂栫爜鎵归噺鏌ユ壘鍏宠仈鐨勫伐鑹轰俊鎭�
+        /// </summary>
+        /// <param name="list">浜у搧缂栫爜闆嗗悎</param>
+        /// <returns></returns>
+        [Route(template: "PartSelectRputeList")]
+        [HttpPost]
+        public JsonResult PartSelectRputeList(List<PartRouteList> list)
+        {
+            var token = HttpContext.Request.Headers["Token"].ToString();
+            User us = JwtTools.Denocode(token.ToString());
+            mes = BasicSettingBLL.PartSelectRputeList(list, us);
+            return Json(mes);
+        }
+        #endregion
+
+        #region[鏍规嵁宸ヨ壓淇℃伅(宸ヨ壓璺嚎缂栫爜)鎵归噺鏌ユ壘鍏宠仈宸ュ簭闆嗗悎]
+        /// <summary>
+        /// 鏍规嵁宸ヨ壓淇℃伅(宸ヨ壓璺嚎缂栫爜)鎵归噺鏌ユ壘鍏宠仈宸ュ簭闆嗗悎
+        /// </summary>
+        /// <param name="list">浜у搧缂栫爜,宸ヨ壓璺嚎缂栫爜闆嗗悎</param>
+        /// <returns></returns>
+        [Route(template: "RouteSelectStepList")]
+        [HttpPost]
+        public JsonResult RouteSelectStepList(List<PartRouteStepList> list)
+        {
+
+            mes = BasicSettingBLL.RouteSelectStepList(list);
+            return Json(mes);
+        }
+        #endregion
+
         #region[鑺傛媿宸ヤ环鏌ヨ]
         /// <summary>
         /// 鑺傛媿宸ヤ环鏌ヨ
diff --git a/VueWebCoreApi/Controllers/WorkOrderController.cs b/VueWebCoreApi/Controllers/WorkOrderController.cs
index cb1ae13..86d9ebb 100644
--- a/VueWebCoreApi/Controllers/WorkOrderController.cs
+++ b/VueWebCoreApi/Controllers/WorkOrderController.cs
@@ -268,6 +268,39 @@
         }
         #endregion
 
+        #region[MES宸ュ崟鎵归噺缁戝畾鑾峰彇宸ュ簭鏁版嵁]
+        /// <summary>
+        /// MES宸ュ崟鎵归噺缁戝畾鑾峰彇宸ュ簭鏁版嵁
+        /// </summary>
+        /// <param name="worksteplist">鏌ヨ鍙傛暟缁�</param>
+        /// <returns></returns>
+        [Route(template: "UpdateMesOrderStepListSearch")]
+        [HttpPost]
+        public JsonResult UpdateMesOrderStepListSearch(List<WorkStepList> worksteplist)
+        {
+            mes = WorkOrderBLL.UpdateMesOrderStepListSearch(worksteplist);
+            return Json(mes);
+        }
+        #endregion
+
+        #region[MES宸ュ崟鏂板銆佺紪杈戞壒閲忕粦瀹氭彁浜
+        /// <summary>
+        /// MES宸ュ崟鏂板銆佺紪杈戞壒閲忕粦瀹氭彁浜�
+        /// </summary>
+        /// <param name="OperType">鎿嶄綔绫诲瀷</param>
+        /// <param name="json">鎻愪氦鏁版嵁</param>
+        /// <returns></returns>
+        [Route(template: "AddUpdateMesOrderList")]
+        [HttpPost]
+        public JsonResult AddUpdateMesOrderList(List<WorkList> json, string OperType)
+        {
+            var token = HttpContext.Request.Headers["Token"].ToString();
+            User us = JwtTools.Denocode(token.ToString());
+            mes = WorkOrderBLL.AddUpdateMesOrderList(OperType, json, us);
+            return Json(mes);
+        }
+        #endregion
+
         #region[MES宸ュ崟鍒犻櫎]
         /// <summary>
         /// MES宸ュ崟鍒犻櫎
diff --git a/VueWebCoreApi/DLL/BLL/BasicSettingBLL.cs b/VueWebCoreApi/DLL/BLL/BasicSettingBLL.cs
index 25d9447..d56fc95 100644
--- a/VueWebCoreApi/DLL/BLL/BasicSettingBLL.cs
+++ b/VueWebCoreApi/DLL/BLL/BasicSettingBLL.cs
@@ -6,6 +6,7 @@
 using VueWebCoreApi.DLL.DAL;
 using VueWebCoreApi.Models;
 using VueWebCoreApi.Models.RolePermission;
+using VueWebCoreApi.Models.WorkData;
 using VueWebCoreApi.Tools;
 using static VueWebCoreApi.Models.RolePermission.RolePermissionSava;
 
@@ -385,6 +386,20 @@
         }
         #endregion
 
+        #region[浜у搧缂栫爜鎵归噺鏌ユ壘鍏宠仈鐨勫伐鑹轰俊鎭痌
+        public static ToMessage PartSelectRputeList(List<PartRouteList> list, User us)
+        {
+            return BasicSettingDAL.PartSelectRputeList(list, us);
+        }
+        #endregion
+
+        #region[鏍规嵁宸ヨ壓淇℃伅(宸ヨ壓璺嚎缂栫爜)鎵归噺鏌ユ壘鍏宠仈宸ュ簭闆嗗悎]
+        public static ToMessage RouteSelectStepList(List<PartRouteStepList> list)
+        {
+            return BasicSettingDAL.RouteSelectStepList(list);
+        }
+        #endregion
+
         #region[鑺傛媿宸ヤ环鏌ヨ]
         public static ToMessage BeatRateSearch(string partcode, string routecode, string stepcode, User us, int startNum, int endNum, string prop, string order)
         {
diff --git a/VueWebCoreApi/DLL/BLL/WorkOrderBLL.cs b/VueWebCoreApi/DLL/BLL/WorkOrderBLL.cs
index 9d87ac9..5f1d455 100644
--- a/VueWebCoreApi/DLL/BLL/WorkOrderBLL.cs
+++ b/VueWebCoreApi/DLL/BLL/WorkOrderBLL.cs
@@ -89,6 +89,20 @@
         }
         #endregion
 
+        #region[MES宸ュ崟鎵归噺缁戝畾鑾峰彇宸ュ簭鏁版嵁]
+        public static ToMessage UpdateMesOrderStepListSearch(List<WorkStepList> worksteplist)
+        {
+            return WorkOrderDAL.UpdateMesOrderStepListSearch(worksteplist);
+        }
+        #endregion
+
+        #region[MES宸ュ崟鏂板銆佺紪杈戞壒閲忕粦瀹氭彁浜
+        public static ToMessage AddUpdateMesOrderList(string OperType, List<WorkList> json, User us)
+        {
+            return WorkOrderDAL.AddUpdateMesOrderList(OperType, json, us);
+        }
+        #endregion
+
         #region[MES宸ュ崟鍒犻櫎]
         public static ToMessage DeleteMesOrder(string souceid, string wocode, string m_po, string orderqty, User us)
         {
diff --git a/VueWebCoreApi/DLL/DAL/BasicSettingDAL.cs b/VueWebCoreApi/DLL/DAL/BasicSettingDAL.cs
index f39c590..cf5fab2 100644
--- a/VueWebCoreApi/DLL/DAL/BasicSettingDAL.cs
+++ b/VueWebCoreApi/DLL/DAL/BasicSettingDAL.cs
@@ -10,6 +10,7 @@
 using VueWebCoreApi.DLL.BLL;
 using VueWebCoreApi.Models;
 using VueWebCoreApi.Models.RolePermission;
+using VueWebCoreApi.Models.WorkData;
 using VueWebCoreApi.Tools;
 using static VueWebCoreApi.Models.RolePermission.RolePermission;
 using static VueWebCoreApi.Models.RolePermission.RolePermissionSava;
@@ -3518,6 +3519,129 @@
         }
         #endregion
 
+        #region[浜у搧缂栫爜鎵归噺鏌ユ壘鍏宠仈鐨勫伐鑹轰俊鎭痌
+        public static ToMessage PartSelectRputeList(List<PartRouteList> list, User us)
+        {
+            string sql = "";
+            var dynamicParams = new DynamicParameters();
+            List<Dictionary<object, object>> dir = new List<Dictionary<object, object>>();
+            try
+            {
+                dynamic dynObj = JObject.Parse(us.mesSetting);
+                bool route = dynObj.route;
+                if (route) //宸ヨ壓璺嚎鐗�
+                {
+                    for (int i = 0; i < list.Count; i++)
+                    {
+                        // 鍒涘缓涓�涓柊鐨勫瓧鍏�
+                        Dictionary<object, object> dict = new Dictionary<object, object>();
+                        //閫氳繃浜у搧缂栫爜鏌ユ壘鍏宠仈鐨勫伐鑹鸿矾绾夸俊鎭�
+                        sql = @"select A.route_code,B.name as route_name   
+                        from TMateriel_Route A
+                        inner join TFlw_Rout B on A.route_code=B.code 
+                        where A.materiel_code=@partcode and B.is_delete<>'1' and A.is_delete<>'1'";
+                        dynamicParams.Add("@partcode", list[i].partcode);
+                        var data = DapperHelper.selectdata(sql, dynamicParams);
+                        // 鍚戝瓧鍏镐腑娣诲姞鏁版嵁
+                        dict.Add("routedata", data);
+                        // 灏嗗瓧鍏告坊鍔犲埌鍒楄〃涓�
+                        dir.Add(dict);
+                    }
+                }
+                else //宸ュ簭鐗�
+                {
+                    for (int i = 0; i < list.Count; i++)
+                    {
+                        // 鍒涘缓涓�涓柊鐨勫瓧鍏�
+                        Dictionary<object, object> dict = new Dictionary<object, object>();
+                        //閫氳繃浜у搧缂栫爜鏌ユ壘鍏宠仈鐨勫伐搴忎俊鎭�
+                        sql = @"select A.step_seq,A.step_code as stepcode,S.stepname as stepname,A.unprice as stepprice,A.isbott,A.isend   
+                            from (
+                            select S.materiel_code,R.step_seq,S.step_code,S.unprice,R.isbott,R.isend   from TPrteEqp_Stad S
+                            inner join TMateriel_Step R on S.materiel_code=R.materiel_code and S.step_code=R.step_code
+                            where S.materiel_code=@partcode
+                            union all
+                            select  materiel_code,step_seq,step_code,'0' as unprice,isbott,isend from TMateriel_Step 
+                            where materiel_code=@partcode and materiel_code+step_code
+                            not in(select materiel_code+step_code  from TPrteEqp_Stad
+                            where materiel_code=@partcode)
+                            ) as A
+                            left join TStep S on A.step_code=S.stepcode";
+                        dynamicParams.Add("@partcode", list[i].partcode);
+                        var data = DapperHelper.selectdata(sql, dynamicParams);
+                        // 鍚戝瓧鍏镐腑娣诲姞鏁版嵁
+                        dict.Add("stepdata", data);
+                        // 灏嗗瓧鍏告坊鍔犲埌鍒楄〃涓�
+                        dir.Add(dict);
+                    }
+                }
+
+                mes.code = "200";
+                mes.message = "鏌ヨ鎴愬姛!";
+                mes.count = dir.Count;
+                mes.data = dir;
+            }
+            catch (Exception e)
+            {
+                mes.code = "300";
+                mes.count = 0;
+                mes.message = e.Message;
+                mes.data = null;
+            }
+            return mes;
+        }
+        #endregion
+
+        #region[鏍规嵁宸ヨ壓淇℃伅(宸ヨ壓璺嚎缂栫爜)鎵归噺鏌ユ壘鍏宠仈宸ュ簭闆嗗悎]
+        public static ToMessage RouteSelectStepList(List<PartRouteStepList> list)
+        {
+            string sql = "";
+            var dynamicParams = new DynamicParameters();
+            List<Dictionary<object, object>> dir = new List<Dictionary<object, object>>();
+            try
+            {
+                for (int i = 0; i < list.Count; i++)
+                {
+                    // 鍒涘缓涓�涓柊鐨勫瓧鍏�
+                    Dictionary<object, object> dict = new Dictionary<object, object>();
+                    //閫氳繃宸ヨ壓璺嚎缂栫爜鏌ユ壘鍏宠仈鐨勫伐搴忎俊鎭�
+                    sql = @"select A.step_seq,A.step_code as stepcode,S.stepname as stepname,A.unprice as stepprice,A.isbott,A.isend   
+                        from (
+                        select S.materiel_code,R.seq as step_seq,S.step_code,S.unprice,R.first_choke as isbott,R.last_choke as isend   from TPrteEqp_Stad S
+                        inner join TFlw_Rtdt R on  S.route_code=R.rout_code and S.step_code=R.step_code
+                        where S.materiel_code=@partcode and S.route_code=@route_code 
+                        union all
+                        select  @partcode as materiel_code,B.seq as step_seq,B.step_code,'0' as unprice,B.first_choke as isbott,B.last_choke as isend from TFlw_Rout A
+                        inner join TFlw_Rtdt B on A.code=B.rout_code
+                        where A.code=@route_code and  @partcode+A.code+B.step_code
+                        not in(select materiel_code+rout_code+step_code  from TPrteEqp_Stad
+                        where materiel_code=@partcode and route_code=@route_code)
+                        ) as A
+                        left join TStep S on A.step_code=S.stepcode";
+                    dynamicParams.Add("@partcode", list[i].partcode);
+                    dynamicParams.Add("@route_code", list[i].routecode);
+                    var data = DapperHelper.selectdata(sql, dynamicParams);
+                    // 鍚戝瓧鍏镐腑娣诲姞鏁版嵁
+                    dict.Add("stepdata", data);
+                    // 灏嗗瓧鍏告坊鍔犲埌鍒楄〃涓�
+                    dir.Add(dict);
+                }
+
+                mes.code = "200";
+                mes.message = "鏌ヨ鎴愬姛!";
+                mes.data = dir;
+            }
+            catch (Exception e)
+            {
+                mes.code = "300";
+                mes.count = 0;
+                mes.message = e.Message;
+                mes.data = null;
+            }
+            return mes;
+        }
+        #endregion
+
         #region[鑺傛媿宸ヤ环鏌ヨ]
         public static ToMessage BeatRateSearch(string partcode, string routecode, string stepcode, User us, int startNum, int endNum, string prop, string order)
         {
diff --git a/VueWebCoreApi/DLL/DAL/ReportManagerDAL.cs b/VueWebCoreApi/DLL/DAL/ReportManagerDAL.cs
index 26843c3..301bc51 100644
--- a/VueWebCoreApi/DLL/DAL/ReportManagerDAL.cs
+++ b/VueWebCoreApi/DLL/DAL/ReportManagerDAL.cs
@@ -85,7 +85,7 @@
                 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,
                             AA.partcode,AA.partname,AA.partspec,AA.plan_qty,left(AA.concat_name,len(concat_name)-1) as concat_name 
                             from (
-                                 select E.saleOrderCode,W.m_po,W.wo_code,W.wkshp_code,F.torg_name as wkshp_name,
+                                 select W.saleOrderCode,W.m_po,W.wo_code,W.wkshp_code,F.torg_name as wkshp_name,
                                  case when W.status='START' then '鎵ц涓�' when W.status='CLOSED' then '宸插畬鎴�' else '鏈紑濮�' end as status,
                                  W.lm_date,
                                  P.partcode,P.partname,P.partspec,W.plan_qty,
@@ -96,12 +96,9 @@
                                    where n.wo_code=W.wo_code for xml path('')
                                  ) as concat_name   
                                  from TK_Wrk_Man W
-                                 left join (
-                                   select wo,saleOrderCode   from TKimp_Ewo 
-                                 ) as E on W.m_po=E.wo
                                  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
+                            	 group by W.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 AA.concat_name is not null " + search;
                 var data = DapperHelper.GetPageList<object>(sql, dynamicParams, prop, order, startNum, endNum, out total);
                 mes.code = "200";
@@ -185,7 +182,7 @@
                              AA.status as 宸ュ崟鐘舵��,AA.lm_date as 鍗曟嵁鏃ユ湡
                              AA.partcode as 浜у搧缂栫爜,AA.partname as 浜у搧鍚嶇О,AA.partspec as 浜у搧瑙勬牸,AA.plan_qty as 浠诲姟鏁伴噺,left(AA.concat_name,len(concat_name)-1) as 鐢熶骇杩涘害 
                              from (
-                                 select E.saleOrderCode,W.m_po,W.wo_code,W.wkshp_code,F.torg_name as wkshp_name,
+                                 select W.saleOrderCode,W.m_po,W.wo_code,W.wkshp_code,F.torg_name as wkshp_name,
                                  case when W.status='START' then '鎵ц涓�' when W.status='CLOSED' then '宸插畬鎴�' else '鏈紑濮�' end as status,
                                  W.lm_date,
                                  P.partcode,P.partname,P.partspec,W.plan_qty,
@@ -196,12 +193,9 @@
                                    where n.wo_code=W.wo_code for xml path('')
                                  ) as concat_name   
                                  from TK_Wrk_Man W
-                                 left join (
-                                   select wo,saleOrderCode   from TKimp_Ewo 
-                                 ) as E on W.m_po=E.wo
                                  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
+                            	 group by W.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 where AA.concat_name is not null " + search;
                 DataTable data = DapperHelper.selectdata(sql, dynamicParams);
diff --git a/VueWebCoreApi/DLL/DAL/WorkOrderDAL.cs b/VueWebCoreApi/DLL/DAL/WorkOrderDAL.cs
index 6ffebf1..bba2abd 100644
--- a/VueWebCoreApi/DLL/DAL/WorkOrderDAL.cs
+++ b/VueWebCoreApi/DLL/DAL/WorkOrderDAL.cs
@@ -1058,6 +1058,304 @@
         }
         #endregion
 
+        #region[MES宸ュ崟鎵归噺缁戝畾鑾峰彇宸ュ簭鏁版嵁]
+        public static ToMessage UpdateMesOrderStepListSearch(List<WorkStepList> worksteplist)
+        {
+            string sql = ""; decimal canupdate_qty = 0;
+            var dynamicParams = new DynamicParameters();
+            List<Dictionary<object, object>> dir = new List<Dictionary<object, object>>();
+            try
+            {
+                for (int i = 0; i < worksteplist.Count; i++)
+                {
+                    // 鍒涘缓涓�涓柊鐨勫瓧鍏�
+                    Dictionary<object, object> dict = new Dictionary<object, object>();
+
+                    if (worksteplist[i].data_sources == "ERP")  //鏁版嵁鏉ユ簮ERP
+                    {
+
+                        //鏌ヨ褰撳墠宸ュ崟鍙慨鏀规暟閲�=璁㈠崟鎬绘暟-宸蹭笅杈惧伐鍗曟�绘暟
+                        sql = @"select isnull(plan_qty,0) as plan_qty   from TK_Wrk_Man 
+                            where sourceid=@sourceid and m_po=@sourcewo and wo_code=@wocode";
+                        dynamicParams.Add("@sourceid", worksteplist[i].sourceid);
+                        dynamicParams.Add("@sourcewo", worksteplist[i].sourcewo);
+                        dynamicParams.Add("@wocode", worksteplist[i].wocode);
+                        var data = DapperHelper.selectdata(sql, dynamicParams);
+                        //褰撳墠宸ュ崟鏁伴噺
+                        canupdate_qty = decimal.Parse(data.Rows[0]["plan_qty"].ToString());
+                    }
+                    if (worksteplist[i].data_sources == "MES")  //鏁版嵁鏉ユ簮MES
+                    {
+                        if (worksteplist[i].sourceid == "" || worksteplist[i].sourceid == null) //鏃犳簮鍗�
+                        {
+                            //鏌ヨ褰撳墠宸ュ崟鍙慨鏀规暟閲�=宸ュ崟鎬绘暟
+                            sql = @"select plan_qty   from TK_Wrk_Man where wo_code=@wo_code";
+                            dynamicParams.Add("@wo_code", worksteplist[i].wocode);
+                            var data = DapperHelper.selectdata(sql, dynamicParams);
+                            //褰撳墠宸ュ崟宸ュ崟鏁伴噺
+                            canupdate_qty = decimal.Parse(data.Rows[0]["plan_qty"].ToString());
+                        }
+                        else //鏈夋簮鍗�(鎶ュ簾琛ュ崟)
+                        {
+                            //涓嶆帶鍒� 鏍囪瘑涓�-1
+                            canupdate_qty = -1;
+                        }
+                    }
+                    //鑾峰彇宸ュ簭淇℃伅
+                    sql = @"select S.wo_code,S.seq,S.step_code as stepcode,T.stepname,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,
+                        S.good_qty,S.ng_qty,S.laborbad_qty,S.materielbad_qty,S.plan_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
+                        where S.wo_code=@wocode order by S.seq ";
+                    dynamicParams.Add("@wocode", worksteplist[i].wocode);
+                    var data1 = DapperHelper.selectdata(sql, dynamicParams);
+
+                    // 鍚戝瓧鍏镐腑娣诲姞鏁版嵁
+                    dict.Add("canupdate_qty", canupdate_qty);
+                    dict.Add("stepdata", data1);
+                    // 灏嗗瓧鍏告坊鍔犲埌鍒楄〃涓�
+                    dir.Add(dict);
+                    mes.code = "200";
+                    mes.count = dir.Count;
+                    mes.message = "鏌ヨ鎴愬姛";
+                    mes.data = dir;
+                }
+            }
+            catch (Exception e)
+            {
+                mes.code = "300";
+                mes.count = 0;
+                mes.message = e.Message;
+                mes.data = null;
+            }
+            return mes;
+        }
+        #endregion
+
+        #region[MES宸ュ崟鏂板銆佺紪杈戞壒閲忕粦瀹氭彁浜
+        public static ToMessage AddUpdateMesOrderList(string operType, List<WorkList> json, User us)
+        {
+            string sql = "", route_code = "";
+            var dynamicParams = new DynamicParameters();
+            List<object> list = new List<object>();
+            try
+            {
+                dynamic dynObj = JObject.Parse(us.mesSetting);
+                bool route = dynObj.route;
+                if (!route) //宸ュ簭鐗�
+                {
+                    route_code = null;
+                }
+                if (operType == "Add")
+                {
+                    for (int i = 0; i < json.Count; i++)
+                    {
+                        route_code = json[i].routecode;
+                        //鍐欏叆宸ュ崟琛�
+                        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[i].wocode,
+                                wotype = json[i].wotype,
+                                status = json[i].wostatus,
+                                wkshp_code = json[i].wkshopcode,
+                                plan_qty = json[i].woqty,
+                                lm_user = us.usercode,
+                                lm_date = DateTime.Now.ToString(),
+                                materiel_code = json[i].partcode,
+                                route_code = route_code,
+                                sourceid = json[i].sourceid == "" ? null : json[i].sourceid, //鏃犳簮鍗曟椂璧嬪�糔ULL
+                                m_po = json[i].sourcewo,
+                                saleOrderDeliveryDate = json[i].deliverydate,
+                                plan_startdate = json[i].paystartdate,
+                                plan_enddate = json[i].payenddate,
+                                orderlev = "3",//浼樺厛绾э細鐗圭骇锛�1锛� 绱ф�ワ紙2锛� 姝e父锛�3锛�
+                                isaps = "N", //鏄惁鎺掍骇,榛樿N  Y=鏄�   N=鍚�
+                                data_sources = json[i].data_sources,
+                                isstep = json[i].isstep  //鏄惁鍏宠仈宸ュ簭
+                            }
+                        });
+                        //鍐欏叆宸ュ簭浠诲姟琛�
+                        for (int j = 0; j < json[i].WorkListSub.Count; j++)
+                        {
+                            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[i].wocode,
+                                    seq = json[i].WorkListSub[j].stepseq,
+                                    step_code = json[i].WorkListSub[j].stepcode,
+                                    route_code = route_code,
+                                    stepprice = json[i].WorkListSub[j].stepprice,
+                                    plan_qty = json[i].woqty,
+                                    status = json[i].wostatus,
+                                    isbott = json[i].WorkListSub[j].isbott,
+                                    isend = json[i].WorkListSub[j].isend,
+                                    lm_user = us.usercode,
+                                    lm_date = DateTime.Now.ToString()
+                                }
+                            });
+                        }
+                    }
+                    bool aa = DapperHelper.DoTransaction(list);
+                    if (aa)
+                    {
+                        //鍐欏叆鎿嶄綔璁板綍琛�
+                        LogHelper.DbOperateLog(us.usercode, "鏂板", "鏂板浜嗗伐鍗�:" + json[0].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")
+                {
+                    for (int i = 0; i < json.Count; i++)
+                    {
+                        route_code = json[i].routecode;
+                        //淇敼宸ュ崟琛�
+                        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[i].wocode,
+                                wotype = json[i].wotype,
+                                wkshp_code = json[i].wkshopcode,
+                                plan_qty = json[i].woqty,
+                                materiel_code = json[i].partcode,
+                                route_code = route_code,
+                                sourceid = json[i].sourceid == "" ? null : json[i].sourceid, //鏃犳簮鍗曟椂璧嬪�糔ULL
+                                m_po = json[i].sourcewo,
+                                saleOrderDeliveryDate = json[i].deliverydate,
+                                plan_startdate = json[i].paystartdate,
+                                plan_enddate = json[i].payenddate,
+                                lm_user = us.usercode,
+                                lm_date = DateTime.Now.ToString(),
+                                isstep = json[i].isstep  //鏄惁鍏宠仈宸ュ簭
+                            }
+                        });
+                        //鍒犻櫎宸ュ崟宸ュ簭琛�
+                        sql = @"delete TK_Wrk_Step where wo_code=@wo_code";
+                        list.Add(new
+                        {
+                            str = sql,
+                            parm = new
+                            {
+                                wo_code = json[i].wocode
+                            }
+                        });
+                        //鍐欏叆宸ュ崟宸ュ簭琛�
+                        for (int j = 0; j < json[i].WorkListSub.Count; j++)
+                        {
+                            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[i].wocode,
+                                    seq = json[i].WorkListSub[j].stepseq,
+                                    step_code = json[i].WorkListSub[j].stepcode,
+                                    route_code = route_code,
+                                    stepprice = json[i].WorkListSub[j].stepprice,
+                                    plan_qty = json[i].woqty,
+                                    status = json[i].wostatus,
+                                    isbott = json[i].WorkListSub[j].isbott,
+                                    isend = json[i].WorkListSub[j].isend,
+                                    lm_user = us.usercode,
+                                    lm_date = DateTime.Now.ToString()
+                                }
+                            });
+                        }
+                        //鍒ゆ柇婧愬ご鍗曟嵁鏄惁鏉ユ簮ERP
+                        if (json[i].data_sources == "ERP")
+                        {
+                            //鍒ゆ柇宸ュ崟淇敼鏁伴噺宸�兼槸鍚︿负0
+                            if (json[i].difference != "0")
+                            {
+                                string staus = "";
+                                //鏌ヨ璁㈠崟鎬绘暟,宸蹭笅杈炬暟閲�
+                                sql = @"select qty,relse_qty  from TKimp_Ewo where id=@sourceid and wo=@sourcewo";
+                                dynamicParams.Add("@sourceid", json[i].sourceid);
+                                dynamicParams.Add("@sourcewo", json[i].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[i].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[i].sourceid,
+                                        sourcewo = json[i].sourcewo
+                                    }
+                                });
+                            }
+                        }
+                    }
+                    bool aa = DapperHelper.DoTransaction(list);
+                    if (aa)
+                    {
+                        //鍐欏叆鎿嶄綔璁板綍琛�
+                        LogHelper.DbOperateLog(us.usercode, "淇敼", "淇敼浜嗗伐鍗�:" + string.Join(",", json.Select(j => j.wocode.ToString())), us.usertype);
+                        mes.code = "200";
+                        mes.count = 0;
+                        mes.message = "淇敼鎿嶄綔鎴愬姛!";
+                        mes.data = null;
+                    }
+                    else
+                    {
+                        mes.code = "300";
+                        mes.count = 0;
+                        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[MES宸ュ崟鍒犻櫎]
         public static ToMessage DeleteMesOrder(string souceid, string wocode, string m_po, string orderqty, User us)
         {
diff --git a/VueWebCoreApi/Models/WorkData/PartRouteList.cs b/VueWebCoreApi/Models/WorkData/PartRouteList.cs
new file mode 100644
index 0000000..febb476
--- /dev/null
+++ b/VueWebCoreApi/Models/WorkData/PartRouteList.cs
@@ -0,0 +1,15 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+
+namespace VueWebCoreApi.Models.WorkData
+{
+    public class PartRouteList
+    {
+        /// <summary>
+        /// 浜у搧缂栫爜
+        /// </summary>
+        public string partcode { get; set; }
+    }
+}
diff --git a/VueWebCoreApi/Models/WorkData/PartRouteStepList.cs b/VueWebCoreApi/Models/WorkData/PartRouteStepList.cs
new file mode 100644
index 0000000..1832498
--- /dev/null
+++ b/VueWebCoreApi/Models/WorkData/PartRouteStepList.cs
@@ -0,0 +1,19 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+
+namespace VueWebCoreApi.Models.WorkData
+{
+    public class PartRouteStepList
+    {
+        /// <summary>
+        /// 浜у搧缂栫爜
+        /// </summary>
+        public string partcode { get; set; }
+        /// <summary>
+        /// 宸ヨ壓璺嚎缂栫爜
+        /// </summary>
+        public string routecode { get; set; }
+    }
+}
diff --git a/VueWebCoreApi/Models/WorkData/WorkStepList.cs b/VueWebCoreApi/Models/WorkData/WorkStepList.cs
new file mode 100644
index 0000000..04bbd83
--- /dev/null
+++ b/VueWebCoreApi/Models/WorkData/WorkStepList.cs
@@ -0,0 +1,27 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+
+namespace VueWebCoreApi.Models.WorkData
+{
+    public class WorkStepList
+    {
+        /// <summary>
+        /// 婧愬崟id
+        /// </summary>
+        public string sourceid { get; set; }
+        /// <summary>
+        /// 婧愬崟鍗曞彿
+        /// </summary>
+        public string sourcewo { get; set; }
+        /// <summary>
+        /// 宸ュ崟鍙�
+        /// </summary>
+        public string wocode { get; set; }
+        /// <summary>
+        /// 鏁版嵁鏉ユ簮锛欵RP/MES
+        /// </summary>
+        public string data_sources { get; set; }
+    }
+}

--
Gitblit v1.9.3