From 8f7412f91f82efad3c0e9f1243aa40e1680c7240 Mon Sep 17 00:00:00 2001
From: yl <ykxkd@outlook.com>
Date: 星期二, 23 十二月 2025 16:19:09 +0800
Subject: [PATCH] 1.增加SOP任务管理接口

---
 VueWebCoreApi/ApiGroup/OpenApiGroup.cs           |    4 
 VueWebCoreApi/DLL/BLL/SopSearchBLL.cs            |   33 ++++
 VueWebCoreApi/Controllers/SopSearchController.cs |   94 +++++++++++++
 VueWebCoreApi/DLL/DAL/SopSearchDAL.cs            |  262 +++++++++++++++++++++++++++++++++++++
 4 files changed, 392 insertions(+), 1 deletions(-)

diff --git a/VueWebCoreApi/ApiGroup/OpenApiGroup.cs b/VueWebCoreApi/ApiGroup/OpenApiGroup.cs
index 512d12e..dcadbfa 100644
--- a/VueWebCoreApi/ApiGroup/OpenApiGroup.cs
+++ b/VueWebCoreApi/ApiGroup/OpenApiGroup.cs
@@ -54,8 +54,10 @@
         App瀹夌伅绠$悊 = 22,
         [Description("SOP绠$悊")]
         SOP绠$悊 = 23,
+        [Description("SOP浠诲姟绠$悊")]
+        SOP浠诲姟绠$悊 = 24,
         [Description("App鐢熶骇绠$悊")]
-        App鐢熶骇绠$悊 = 24
+        App鐢熶骇绠$悊 = 25
 
     }
 }
diff --git a/VueWebCoreApi/Controllers/SopSearchController.cs b/VueWebCoreApi/Controllers/SopSearchController.cs
new file mode 100644
index 0000000..a05cc2f
--- /dev/null
+++ b/VueWebCoreApi/Controllers/SopSearchController.cs
@@ -0,0 +1,94 @@
+锘縰sing Microsoft.AspNetCore.Mvc;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using VueWebCoreApi.DLL.BLL;
+using VueWebCoreApi.Tools;
+
+namespace VueWebCoreApi.Controllers
+{
+    [ApiExplorerSettings(GroupName = "SOP浠诲姟绠$悊")]
+    [ApiController]
+    [Route("api/[controller]")]
+    public class SopSearchController : Controller
+    {
+        //瀹氫箟鍏ㄥ眬淇℃伅杩斿洖鍙橀噺
+        ToMessage mes = new ToMessage();
+        RedisCommon redis = new RedisCommon();
+
+        #region[MES宸ュ崟鏌ヨ]
+        /// <summary>
+        /// MES宸ュ崟鏌ヨ
+        /// </summary>
+        /// <param name="mesorderstus">宸ュ崟鐘舵�佺爜</param>
+        /// <param name="wkshopcode">杞﹂棿缂栫爜</param>
+        /// <param name="mesordercode">宸ュ崟缂栧彿</param>
+        /// <param name="sourceorder">婧愬崟鍗曞彿</param>
+        /// <param name="saleordercode">閿�鍞崟鍙�</param>
+        /// <param name="ordertype">鍗曟嵁绫诲瀷</param>
+        /// <param name="partcode">浜у搧缂栫爜</param>
+        /// <param name="partname">浜у搧鍚嶇О</param>
+        /// <param name="partspec">浜у搧瑙勬牸</param>
+        /// <param name="datatype">鏃ユ湡绫诲瀷(璁″垝寮�宸�(PS)銆佽鍒掑畬宸�(PE)銆侀璁′氦浠�(ED)銆佸垱寤烘棩鏈�(CT))</param>
+        /// <param name="creatuser">鍒涘缓浜哄憳</param>
+        /// <param name="searchdate">鏌ヨ鏃ユ湡</param>
+        /// <param name="page">椤电爜</param>
+        /// <param name="rows">姣忛〉鏄剧ず鏉℃暟</param>
+        /// <param name="prop">鎺掑簭瀛楁</param>
+        /// <param name="order">鎺掑簭瑙勫垯</param>
+        /// <returns></returns>
+        [Route(template: "MesOrderSearch")]
+        [HttpGet]
+        public JsonResult MesOrderSearch(int page, int rows, string prop, string order, string mesorderstus = null, string wkshopcode = null, string mesordercode = null, string sourceorder = null, string saleordercode = null, string ordertype = null, string partcode = null, string partname = null, string partspec = null, string creatuser = null, string datatype = null, string searchdate = null)
+        {
+            string paydatestartdate = "";  //棰勮寮�宸ュ紑濮嬫椂闂�
+            string paydateenddate = "";    //棰勮寮�宸ョ粨鏉熸椂闂�
+            if (searchdate != "" && searchdate != null)
+            {
+                paydatestartdate = searchdate.Split('~')[0].ToString();
+                paydateenddate = searchdate.Split('~')[1].ToString();
+            }
+            int startNum = rows * (page - 1) + 1;  //璧峰璁板綍rowNum
+            int endNum = rows * page;   //缁撴潫璁板綍 rowNum
+            mes = SopSearchBLL.MesOrderSearch(mesorderstus, wkshopcode, mesordercode, sourceorder, saleordercode, ordertype, partcode, partname, partspec, startNum, creatuser, datatype, paydatestartdate, paydateenddate, endNum, prop, order);
+            return Json(mes);
+        }
+        #endregion
+
+        #region[MES宸ュ崟缂栬緫鑾峰彇宸ュ簭鏁版嵁]
+        /// <summary>
+        /// MES宸ュ崟缂栬緫鑾峰彇宸ュ簭鏁版嵁
+        /// </summary>
+        /// <param name="sourceid">婧愬崟id</param>
+        /// <param name="sourcewo">婧愬崟鍗曞彿</param>
+        /// <param name="wocode">宸ュ崟鍙�</param>
+        /// <param name="data_sources">鏁版嵁鏉ユ簮锛欵RP/MES</param>
+        /// <returns></returns>
+        [Route(template: "UpdateMesOrderStepSearch")]
+        [HttpGet]
+        public JsonResult UpdateMesOrderStepSearch(string sourceid, string sourcewo, string wocode, string data_sources)
+        {
+            mes = SopSearchBLL.UpdateMesOrderStepSearch(sourceid, sourcewo, wocode, data_sources);
+            return Json(mes);
+        }
+        #endregion
+
+        #region[MES宸ュ崟鏌ョ湅宸ヨ壓SOP]
+        /// <summary>
+        /// MES宸ュ崟鏌ョ湅宸ヨ壓SOP
+        /// </summary>
+        /// <param name="materielcode">浜у搧缂栫爜</param>
+        /// <param name="routecode">宸ヨ壓璺嚎缂栫爜</param>
+        /// <param name="stepcode">宸ュ簭缂栫爜</param>
+        /// <returns></returns>
+        [Route(template: "MesOrderProcessSopSearch")]
+        [HttpGet]
+        public JsonResult MesOrderProcessSopSearch(string materielcode, string routecode, string stepcode)
+        {
+            mes = SopSearchBLL.MesOrderProcessSopSearch(materielcode, routecode, stepcode);
+            return Json(mes);
+        }
+        #endregion
+    }
+}
diff --git a/VueWebCoreApi/DLL/BLL/SopSearchBLL.cs b/VueWebCoreApi/DLL/BLL/SopSearchBLL.cs
new file mode 100644
index 0000000..fe57aa3
--- /dev/null
+++ b/VueWebCoreApi/DLL/BLL/SopSearchBLL.cs
@@ -0,0 +1,33 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using VueWebCoreApi.DLL.DAL;
+using VueWebCoreApi.Tools;
+
+namespace VueWebCoreApi.DLL.BLL
+{
+    public class SopSearchBLL
+    {
+        #region[MES宸ュ崟鏌ヨ]
+        public static ToMessage MesOrderSearch(string mesorderstus, string wkshopcode, string mesordercode, string sourceorder, string saleordercode, string ordertype, string partcode, string partname, string partspec, int startNum, string creatuser, string datatype, string paydatestartdate, string paydateenddate, int endNum, string prop, string order)
+        {
+            return SopSearchDAL.MesOrderSearch(mesorderstus, wkshopcode, mesordercode, sourceorder, saleordercode, ordertype, partcode, partname, partspec, startNum, creatuser, datatype, paydatestartdate, paydateenddate, endNum, prop, order);
+        }
+        #endregion
+
+        #region[MES宸ュ崟缂栬緫鑾峰彇宸ュ簭鏁版嵁]
+        public static ToMessage UpdateMesOrderStepSearch(string sourceid, string sourcewo, string wocode, string data_sources)
+        {
+            return SopSearchDAL.UpdateMesOrderStepSearch(sourceid, sourcewo, wocode, data_sources);
+        }
+        #endregion
+
+        #region[MES宸ュ崟鏌ョ湅宸ヨ壓SOP]
+        public static ToMessage MesOrderProcessSopSearch(string materielcode, string routecode, string stepcode)
+        {
+            return SopSearchDAL.MesOrderProcessSopSearch(materielcode,routecode,stepcode);
+        }
+        #endregion
+    }
+}
diff --git a/VueWebCoreApi/DLL/DAL/SopSearchDAL.cs b/VueWebCoreApi/DLL/DAL/SopSearchDAL.cs
new file mode 100644
index 0000000..b0872eb
--- /dev/null
+++ b/VueWebCoreApi/DLL/DAL/SopSearchDAL.cs
@@ -0,0 +1,262 @@
+锘縰sing Dapper;
+using Newtonsoft.Json.Linq;
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Data.SqlClient;
+using System.Linq;
+using System.Threading.Tasks;
+using VueWebCoreApi.Tools;
+
+namespace VueWebCoreApi.DLL.DAL
+{
+    public class SopSearchDAL
+    {
+        public static DataTable dt;    //瀹氫箟鍏ㄥ眬鍙橀噺dt
+        public static bool res;       //瀹氫箟鍏ㄥ眬鍙橀噺dt
+
+        public static ToMessage mes = new ToMessage(); //瀹氫箟鍏ㄥ眬杩斿洖淇℃伅瀵硅薄
+        public static string strProcName = ""; //瀹氫箟鍏ㄥ眬sql鍙橀噺
+        public static List<SqlParameter> listStr = new List<SqlParameter>(); //瀹氫箟鍏ㄥ眬鍙傛暟闆嗗悎
+        public static SqlParameter[] parameters; //瀹氫箟鍏ㄥ眬SqlParameter鍙傛暟鏁扮粍
+
+
+        #region[MES宸ュ崟鏌ヨ]
+        public static ToMessage MesOrderSearch(string mesorderstus, string wkshopcode, string mesordercode, string sourceorder, string saleordercode, string ordertype, string partcode, string partname, string partspec, int startNum, string creatuser, string datatype, string paydatestartdate, string paydateenddate, int endNum, string prop, string order)
+        {
+            var dynamicParams = new DynamicParameters();
+            string search = "";
+            try
+            {
+                if (mesorderstus != "" && mesorderstus != null)
+                {
+                    search += "and A.status=@mesorderstus ";
+                    dynamicParams.Add("@mesorderstus", mesorderstus);
+                }
+                if (wkshopcode != "" && wkshopcode != null)
+                {
+                    search += "and A.wkshp_code=@wkshopcode ";
+                    dynamicParams.Add("@wkshopcode", wkshopcode);
+                }
+                if (mesordercode != "" && mesordercode != null)
+                {
+                    search += "and A.wo_code like '%'+@mesordercode+'%' ";
+                    dynamicParams.Add("@mesordercode", mesordercode);
+                }
+                if (sourceorder != "" && sourceorder != null)
+                {
+                    search += "and A.m_po like '%'+@sourceorder+'%' ";
+                    dynamicParams.Add("@sourceorder", sourceorder);
+                }
+                if (saleordercode != "" && saleordercode != null)
+                {
+                    search += "and W.saleOrderCode like '%'+@saleordercode+'%' ";
+                    dynamicParams.Add("@saleordercode", saleordercode);
+                }
+                if (ordertype != "" && ordertype != null)
+                {
+                    search += "and A.wotype like '%'+@ordertype+'%' ";
+                    dynamicParams.Add("@ordertype", ordertype);
+                }
+                if (partcode != "" && partcode != null)
+                {
+                    search += "and A.materiel_code like '%'+@partcode+'%' ";
+                    dynamicParams.Add("@partcode", partcode);
+                }
+                if (partname != "" && partname != null)
+                {
+                    search += "and B.partname like '%'+@partname+'%' ";
+                    dynamicParams.Add("@partname", partname);
+                }
+                if (partspec != "" && partspec != null)
+                {
+                    search += "and B.partspec like '%'+@partspec+'%' ";
+                    dynamicParams.Add("@partspec", partspec);
+                }
+                if (creatuser != "" && creatuser != null)
+                {
+                    search += "and U.username like '%'+@creatuser+'%' ";
+                    dynamicParams.Add("@creatuser", creatuser);
+                }
+                if (paydatestartdate != "" && paydatestartdate != null)
+                {
+                    switch (datatype)
+                    {
+                        case "PS":
+                            search += "and A.plan_startdate between @paydatestartdate and @paydateenddate ";
+                            dynamicParams.Add("@paydatestartdate", paydatestartdate + " 00:00:00");
+                            dynamicParams.Add("@paydateenddate", paydateenddate + " 23:59:59");
+                            break;
+                        case "PE":
+                            search += "and A.plan_enddate between @paydatestartdate and @paydateenddate ";
+                            dynamicParams.Add("@paydatestartdate", paydatestartdate + " 00:00:00");
+                            dynamicParams.Add("@paydateenddate", paydateenddate + " 23:59:59");
+                            break;
+                        case "ED":
+                            search += "and A.saleOrderDeliveryDate between @paydatestartdate and @paydateenddate ";
+                            dynamicParams.Add("@paydatestartdate", paydatestartdate + " 00:00:00");
+                            dynamicParams.Add("@paydateenddate", paydateenddate + " 23:59:59");
+                            break;
+                        case "CT":
+                            search += "and A.lm_date between @paydatestartdate and @paydateenddate ";
+                            dynamicParams.Add("@paydatestartdate", paydatestartdate + " 00:00:00");
+                            dynamicParams.Add("@paydateenddate", paydateenddate + " 23:59:59");
+                            break;
+                        default:
+                            break;
+                    }
+                }
+                if (search == "")
+                {
+                    search = "and 1=1 ";
+                }
+                // --------------鏌ヨ鎸囧畾鏁版嵁--------------
+                var total = 0; //鎬绘潯鏁�
+                var sql = @"select A.id, A.status,A.wotype,A.wo_code,A.materiel_code as partcode,B.partname,B.partspec,A.route_code,B.default_route,R.name as route_name,A.plan_qty,A.wkshp_code,C.torg_name as wkshp_name,C.islastreport,
+                            A.stck_code,D.name as stck_name,A.plan_startdate,A.plan_enddate,A.piroque,A.sourceid,A.m_po,A.saleOrderDeliveryDate,W.saleOrderCode,U.username as lm_user,A.lm_date,A.data_sources,A.isstep,A.clerkuser,
+                            B.priuserdefnvc1,B.priuserdefnvc2,B.priuserdefnvc3,B.priuserdefnvc4,B.priuserdefnvc5,B.priuserdefnvc6,A.printcount
+                            from TK_Wrk_Man A
+                            left join TKimp_Ewo W on A.m_po=W.wo and A.materiel_code=W.materiel_code and A.sbid=W.sbid
+                            left join TMateriel_Info B on A.materiel_code=B.partcode
+                            left join TOrganization C on A.wkshp_code=C.torg_code
+                            left join TSecStck D on A.stck_code=D.code 
+                            left join TUser U on A.lm_user=U.usercode 
+                            left join TOrganization L on  C.parent_id=L.id
+                            left join TFlw_Rout R on A.route_code=R.code
+                            where A.is_delete<>'1' and A.status<>'CLOSED' and isstep='Y' " + search;
+                var data = DapperHelper.GetPageList<object>(sql, dynamicParams, prop, order, startNum, endNum, out total);
+                mes.code = "200";
+                mes.message = "鏌ヨ鎴愬姛!";
+                mes.count = total;
+                mes.data = data.ToList();
+            }
+            catch (Exception e)
+            {
+                mes.code = "300";
+                mes.count = 0;
+                mes.message = e.Message;
+                mes.data = null;
+            }
+            return mes;
+        }
+        #endregion
+
+        #region[MES宸ュ崟缂栬緫鑾峰彇宸ュ簭鏁版嵁]
+        public static ToMessage UpdateMesOrderStepSearch(string sourceid, string sourcewo, string wocode, string data_sources)
+        {
+            string sql = ""; decimal canupdate_qty = 0;
+            var dynamicParams = new DynamicParameters();
+            Dictionary<object, object> dir = new Dictionary<object, object>();
+            try
+            {
+                if (data_sources == "ERP")  //鏁版嵁鏉ユ簮ERP
+                {
+                    //鏌ヨ璁㈠崟浠诲姟鎬绘暟
+                    sql = @"select qty,relse_qty  from TKimp_Ewo where id=@sourceid and wo=@sourcewo";
+                    dynamicParams.Add("@sourceid", sourceid);
+                    dynamicParams.Add("@sourcewo", sourcewo);
+                    var data0 = DapperHelper.selectdata(sql, dynamicParams);
+                    //鏌ヨ褰撳墠宸ュ崟鍙慨鏀规暟閲�=璁㈠崟鎬绘暟-宸蹭笅杈惧伐鍗曟�绘暟
+                    sql = @"select isnull(sum(plan_qty),0) as plan_qty   from TK_Wrk_Man 
+                            where sourceid=@sourceid and m_po=@sourcewo and wo_code<>@wocode";
+                    dynamicParams.Add("@sourceid", sourceid);
+                    dynamicParams.Add("@sourcewo", sourcewo);
+                    dynamicParams.Add("@wocode", wocode);
+                    var data = DapperHelper.selectdata(sql, dynamicParams);
+                    //褰撳墠宸ュ崟鍙慨鏀规暟閲�=璁㈠崟鏁伴噺-闈炲綋鍓嶅伐鍗曟�讳笅杈惧伐鍗曟暟閲�
+                    canupdate_qty = decimal.Parse(data0.Rows[0]["qty"].ToString()) - decimal.Parse(data.Rows[0]["plan_qty"].ToString());
+                }
+                if (data_sources == "MES")  //鏁版嵁鏉ユ簮MES
+                {
+                    if (sourceid == "" || sourceid == null) //鏃犳簮鍗�
+                    {
+                        //鏌ヨ褰撳墠宸ュ崟鍙慨鏀规暟閲�=宸ュ崟鎬绘暟
+                        sql = @"select plan_qty   from TK_Wrk_Man where wo_code=@wo_code";
+                        dynamicParams.Add("@wo_code", 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,T.stepname,S.stepprice,S.ratio,(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_quantity,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", wocode);
+                var data1 = DapperHelper.selectdata(sql, dynamicParams);
+                dir.Add("canupdate_qty", canupdate_qty);
+                dir.Add("stepdata", data1);
+                mes.code = "200";
+                mes.count = data1.Rows.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宸ュ崟鏌ョ湅宸ヨ壓SOP]
+        public static ToMessage MesOrderProcessSopSearch(string materielcode, string routecode, string stepcode)
+        {
+            var sql = "";
+            List<object> list = new List<object>();
+            var dynamicParams = new DynamicParameters();
+            try
+            {
+                //鏌ヨ绯荤粺娴佺▼閰嶇疆
+                strProcName = @"select json from TSystemProcConfig";
+                DataTable dt0_ = DBHelper.GetTable(strProcName);
+                dynamic dynObj = JObject.Parse(dt0_.Rows[0]["json"].ToString()); 
+                bool route = dynObj.route;
+                if (route) //宸ヨ壓璺嚎鐗�
+                {
+                    //鑾峰彇SOP鏂囦欢淇℃伅
+                    sql = @"select filename,filepath,version from TProcessSop
+                        where  materielcode=@materielcode and routecode=@routecode and stepcode=@stepcode
+                        order by version";
+                    dynamicParams.Add("@materielcode", materielcode);
+                    dynamicParams.Add("@routecode", routecode);
+                    dynamicParams.Add("@stepcode", stepcode);
+                }
+                else
+                {
+                    //鑾峰彇SOP鏂囦欢淇℃伅
+                    sql = @"select filename,filepath,version from TProcessSop
+                        where  materielcode=@materielcode and stepcode=@stepcode
+                        order by version";
+                    dynamicParams.Add("@materielcode", materielcode);
+                    dynamicParams.Add("@stepcode", stepcode);
+                }
+
+                var data = DapperHelper.selectdata(sql, dynamicParams);
+                mes.code = "200";
+                mes.count = data.Rows.Count;
+                mes.data = data;
+                mes.message = "鏌ヨ鎴愬姛!";
+            }
+            catch (Exception e)
+            {
+                mes.code = "300";
+                mes.count = 0;
+                mes.message = e.Message;
+                mes.data = null;
+            }
+            return mes;
+        }
+        #endregion
+    }
+}

--
Gitblit v1.9.3