From 6be6a1e453861fa0beb818236fdd8183024074c4 Mon Sep 17 00:00:00 2001
From: wxw <Administrator@DESKTOP-5BIMHQ3>
Date: 星期二, 04 十一月 2025 08:21:40 +0800
Subject: [PATCH] 增加和MES对接接口

---
 Wms/WMS.BLL/BllTransServer/RcsServer.cs    |  195 +++++++++++++++++++++++++++++++++---------------
 Wms/Model/InterFaceModel/RCSModel.cs       |    6 
 Wms/Wms/appsettings.json                   |    4 
 Wms/WMS.IBLL/IBllTransServer/IRcsServer.cs |    2 
 Wms/Wms/Tools/ApiUrlConfig.cs              |    8 ++
 Wms/Wms/Controllers/DownApiController.cs   |   20 ++++-
 6 files changed, 166 insertions(+), 69 deletions(-)

diff --git a/Wms/Model/InterFaceModel/RCSModel.cs b/Wms/Model/InterFaceModel/RCSModel.cs
index a210cb3..4f75247 100644
--- a/Wms/Model/InterFaceModel/RCSModel.cs
+++ b/Wms/Model/InterFaceModel/RCSModel.cs
@@ -54,9 +54,9 @@
 
         public class ReMes
         {
-            public string Success { get; set; }
-            public string Result { get; set; }
-            public string Message { get; set; }
+            public string state { get; set; }
+            public string message { get; set; }
+            public string data { get; set; }
         }
 
         public class TaskDetial
diff --git a/Wms/WMS.BLL/BllTransServer/RcsServer.cs b/Wms/WMS.BLL/BllTransServer/RcsServer.cs
index 1245029..a00753c 100644
--- a/Wms/WMS.BLL/BllTransServer/RcsServer.cs
+++ b/Wms/WMS.BLL/BllTransServer/RcsServer.cs
@@ -38,7 +38,7 @@
         /// <param name="url"></param>
         /// <param name="taskNo"></param>
         /// <exception cref="Exception"></exception>
-        public void GetPalletNo(Pallnetmsg model, string url, out string taskNo)
+        public void GetPalletNo(Pallnetmsg model, string url,string urlMes, out string taskNo)
         {
             lock (GetPalleLock)
             {
@@ -60,7 +60,6 @@
                     //鍙《璁惧鎵�鍦ㄥ偍浣嶄俊鎭紙鐩爣鍌ㄤ綅锛�
                     var endLoction = new SysStorageLocat();
 
-                    var urlMes = "";//鍥炰紶MES鐨勬帴鍙e湴鍧�
                     var noticeNo = "0";//鍑哄叆搴撳崟鎹槑缁咺D
 
                     //鎵�鏈夊緟鍒嗛厤鐨勬《
@@ -252,36 +251,28 @@
                                 foreach (var item in palletList)
                                 {
                                     #region 鍘绘帀MES
-                                    //string jsonReq = JsonConvert.SerializeObject(item.PalletNo);
-                                    //var response = HttpHelper.DoPost(urlMes, jsonReq, "鍥炰紶MES鑴忔《缂栧彿", "RCS").ToString();
-                                    //var obj = JsonConvert.DeserializeObject<ReMes>(response);//瑙f瀽杩斿洖鏁版嵁
-                                    //if (obj.Success == "0")
-                                    //{
-                                    //    if (obj.Result != "1")//涓嶅彲娓呮礂锛屽皢鑴忔《鍐荤粨
-                                    //    {
-                                    //        item.Status = "5";//寮傚父鍐荤粨
-                                    //        //淇敼璇ユ《搴撳瓨鐘舵��
-                                    //        Db.Updateable(item).ExecuteCommand();
+                                    var reObj = new
+                                    {
+                                        devive = item.PackagNo
+                                    };
+                                    string jsonReq = JsonConvert.SerializeObject(reObj);
+                                    var response = HttpHelper.DoPost(urlMes, jsonReq, "鍥炰紶MES鑴忔《缂栧彿鍒ゆ柇鏄惁鍙竻娲�", "MES").ToString();
+                                    var obj = JsonConvert.DeserializeObject<ReMes>(response);//瑙f瀽杩斿洖鏁版嵁
+                                    if (obj.state == "200")
+                                    {
+                                        if (obj.data != "1")//涓嶅彲娓呮礂锛屽皢鑴忔《鍐荤粨
+                                        {
+                                            item.Status = "5";//寮傚父鍐荤粨
+                                            //淇敼璇ユ《搴撳瓨鐘舵��
+                                            Db.Updateable(item).ExecuteCommand();
 
-                                    //        continue;
-                                    //    }
-                                    //    //涓嬪彂灏忚溅浠诲姟
-                                    //    var task2 = new TaskDetial
-                                    //    {
-                                    //        Startport = item.LocatNo,
-                                    //        Endport = model.Location,
-                                    //        Pallno = item.PalletNo,
-                                    //        Type = model.Type,
-                                    //        Crtype = "1",
-                                    //        Noticedetailno = int.Parse(noticeno),
-                                    //    };
-                                    //    CreateLotTask(task2);
-                                    //    return;
-                                    //}
-                                    //else
-                                    //{
-                                    //    throw new Exception("鍥炰紶MES鍑�妗剁紪鍙峰け璐ワ紒");
-                                    //}
+                                            continue;
+                                        }
+                                    }
+                                    else
+                                    {
+                                        throw new Exception("鍙剰妗跺洖浼燤ES鍒ゆ柇澶辫触锛�");
+                                    }
                                     #endregion
 
                                     item.Status = "2";//鍒嗛厤鐘舵�� 0:寰呭垎閰嶏紝1锛氶儴鍒嗗垎閰� 锛� 2:宸插垎閰�
@@ -783,7 +774,7 @@
                 Db.BeginTran();
 
                 //鏌ユ壘鏄惁鏈夌┖浣欒剰妗朵綅
-                var endLocat = Db.Queryable<SysStorageLocat>().First(w => w.WareHouseNo == detail.WareHouseNo && w.AreaNo.Contains("04") && w.Status == "0" && w.Flag=="0");
+                var endLocat = Db.Queryable<SysStorageLocat>().First(w => w.WareHouseNo == detail.WareHouseNo && w.AreaNo.Contains("04") && w.Status == "0" && w.Flag == "0");
                 if (endLocat == null)
                 {
                     detail.Status = "5";//寮傚父閿佸畾
@@ -831,22 +822,97 @@
         {
             try
             {
+                //妗朵俊鎭�
                 var detail = Db.Queryable<DataStockDetail>().First(w => w.PalletNo == pallnetmsg.PalletNo && w.PalletStatus == "3");
                 if (detail == null)
                 {
                     throw new Exception($"搴撳瓨涓笉瀛樺湪妗跺彿涓猴細{pallnetmsg.PalletNo}鐨勫簱瀛�!");
                 }
-                //涓嬪彂灏忚溅浠诲姟
+                //璁惧淇℃伅
+                var deviceInfo = Db.Queryable<SysStorageArea>().First(w => w.IsDel == "0" && w.DeviceCode.Contains(pallnetmsg.Location));
+                if (deviceInfo == null)
+                {
+                    throw new Exception($"涓嶅瓨鍦ㄨ澶囧彿涓猴細{pallnetmsg.Location}鐨勮澶�!");
+                }
+                //鐩爣鍌ㄤ綅淇℃伅
+                var endLoction = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.WareHouseNo == deviceInfo.WareHouseNo && w.AreaNo == deviceInfo.AreaNo && w.Column == 1);// Column=1 娓呮礂鍌ㄤ綅锛孋olumn=2 娓呮礂瀹屾枡鍌ㄤ綅 
+                if (endLoction == null)
+                {
+                    throw new Exception("鍙《璁惧鐩爣鍌ㄤ綅淇℃伅涓嶅瓨鍦�");
+                }
+
+                detail.Status = "2";//鍒嗛厤鐘舵�� 0:寰呭垎閰嶏紝1锛氶儴鍒嗗垎閰� 锛� 2:宸插垎閰�
+                 //鏇存柊妗跺簱瀛樻槑缁�
+                Db.Updateable(detail).ExecuteCommand();
+
+                //璧峰鍌ㄤ綅鍦板潃淇℃伅
+                var startLoction = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.LocatNo == detail.LocatNo);
+                if (startLoction == null)
+                {
+                    throw new Exception($"妗跺彿锛歿detail.PalletNo}鍌ㄤ綅淇℃伅{detail.LocatNo}涓嶅瓨鍦�");
+                }
+
+                var taskNo = new Common().GetMaxNo("TN");//浠诲姟鍙�
+                var logTaskEntry = new LogTask
+                {
+                    TaskNo = taskNo,
+                    Sender = "WMS",
+                    Receiver = "RCS",
+                    //IsSuccess = 1, //鏄惁涓嬪彂鎴愬姛 0澶辫触 1鎴愬姛
+                    SendDate = DateTime.Now,  //鍙戦�佹椂闂�
+                                              //BackDate = DateTime.Now,  //杩斿洖鏃堕棿
+                    StartLocat = startLoction.LocatNo,//璧峰浣嶇疆
+                    EndLocat = endLoction.LocatNo,//鐩爣浣嶇疆
+                    PalletNo = detail.PalletNo,//鎵樼洏鐮�
+                    IsSend = 1,//鏄惁鍙啀娆′笅鍙�
+                    IsCancel = 1,//鏄惁鍙彇娑�
+                    IsFinish = 1,//鏄惁鍙畬鎴�
+                    Type = "1",//浠诲姟绫诲瀷 0 鍏ュ簱浠诲姟 1 鍑哄簱浠诲姟  2 绉诲簱浠诲姟
+                    OrderType = "3",//鍗曟嵁绫诲瀷 0 鍏ュ簱 1 鍑哄簱 3 绉诲簱
+                    Status = "0",//浠诲姟鐘舵��0锛氱瓑寰呮墽琛�1姝e湪鎵ц2鎵ц瀹屾垚
+                    NoticeDetailNo = 0,
+                    Msg = $"MES涓嬪彂娓呮礂鎸囧畾鑴忔《锛屾《鍙�:{pallnetmsg.PalletNo},璁惧鍙凤細{pallnetmsg.Location}", //鍏抽敭淇℃伅
+                    LotNo = ""//鎵规鍙�
+                };
+                //缁勭粐涓嬪彂灏忚溅浠诲姟淇℃伅
                 var task = new TaskDetial
                 {
-                    Startport = detail.LocatNo,
-                    Endport = pallnetmsg.Location,
-                    Pallno = detail.PalletNo,
-                    Crtype = "1",
+                    Taskno = taskNo,//浠诲姟鍙�
+                    Startport = startLoction.LocatNo,//璧峰浣嶇疆
+                    Endport = endLoction.LocatNo,//鐩爣浣嶇疆
+                    Pallno = detail.PalletNo,//妗跺彿
+                    Crtype = "1",//鍙《
+                    WareHouseNo = detail.WareHouseNo//杞﹂棿缂栫爜
                 };
-                string taskNo = "";
-                string agvMsg = string.Empty;
-                CreateTaskForAgv(task, url, out agvMsg);
+                //缁欎笅杞︿笅鍙戜换鍔�
+                logTaskEntry.SendDate = DateTime.Now;//鍙戦�佹椂闂�
+                string agvMsg=string.Empty;
+                var agvResult = CreateTaskForAgv(task, url, out agvMsg);
+                if (agvResult)//鎴愬姛
+                {
+                    //璇锋眰鎴愬姛淇敼浠诲姟琛ㄧ浉搴斿瓧娈电姸鎬�
+                    logTaskEntry.IsSuccess = 1;
+                    logTaskEntry.IsSend = 0;
+                    //logTaskEntry.IsCancel = 0;
+                    logTaskEntry.BackDate = DateTime.Now;
+                    logTaskEntry.Status = "1";//姝e湪鎵ц
+                    Db.Insertable(logTaskEntry).ExecuteCommand();
+
+                    startLoction.Status = "3";//鍑哄簱涓�
+                    Db.Updateable(startLoction).ExecuteCommand();
+
+                    endLoction.Status = "2";//鍏ュ簱涓�
+                    Db.Updateable(endLoction).ExecuteCommand();
+                }
+                else//澶辫触
+                {
+                    logTaskEntry.IsSuccess = 0;
+                    logTaskEntry.Information = agvMsg;
+                    Db.Insertable(logTaskEntry).ExecuteCommand();
+
+                }
+                //鎻愪氦浜嬪姟
+                Db.CommitTran();
             }
             catch (Exception ex)
             {
@@ -1294,33 +1360,42 @@
                 agvTask.taskTyp = "Z5";
             }
 
-            // 姝e紡杩愯绋嬪簭鏀惧紑
-            var jsonData = JsonConvert.SerializeObject(agvTask);
-            string response = HttpHelper.DoPost(url, jsonData, "涓嬪彂缁橝GV杞繍鍛戒护", "AGV");
-            //瑙f瀽杩斿洖鏁版嵁 
-            var agvModel = JsonConvert.DeserializeObject<OutCommanAgvDto>(response);
-            if (agvModel.Code == "0")
+            
+            if (string.IsNullOrEmpty(url))//娴嬭瘯绯荤粺
             {
-                result = true;//缁欎笅杞︿笅鍙戜换鍔℃垚鍔�
-
+                result = true;
                 agvMsg = "";
             }
-            else
+            else//姝e紡绯荤粺
             {
-                string logMsg = "";
-                if (taskDetial.Crtype == "1")//鍙《锛堟《鍑哄簱锛�
+                var jsonData = JsonConvert.SerializeObject(agvTask);
+                string response = HttpHelper.DoPost(url, jsonData, "涓嬪彂缁橝GV杞繍鍛戒护", "AGV");
+                //瑙f瀽杩斿洖鏁版嵁 
+                var agvModel = JsonConvert.DeserializeObject<OutCommanAgvDto>(response);
+                if (agvModel.Code == "0")
                 {
-                    logMsg = "鐢宠鍙《";
-                }
-                else if (taskDetial.Crtype == "0")//鐢宠鍌ㄤ綅锛堟《鍏ュ簱锛�
-                {
-                    logMsg = "鐢宠鍌ㄤ綅";
-                }
-                var logStr = $@".\log\AGV\AGV{logMsg}" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
-                LogFile.SaveLogToFile($"AGV{logMsg}寮傚父锛�( {agvModel.Message} ),", logStr);
+                    result = true;//缁欎笅杞︿笅鍙戜换鍔℃垚鍔�
 
-                agvMsg = agvModel.Message;
+                    agvMsg = "";
+                }
+                else
+                {
+                    string logMsg = "";
+                    if (taskDetial.Crtype == "1")//鍙《锛堟《鍑哄簱锛�
+                    {
+                        logMsg = "鐢宠鍙《";
+                    }
+                    else if (taskDetial.Crtype == "0")//鐢宠鍌ㄤ綅锛堟《鍏ュ簱锛�
+                    {
+                        logMsg = "鐢宠鍌ㄤ綅";
+                    }
+                    var logStr = $@".\log\AGV\AGV{logMsg}" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
+                    LogFile.SaveLogToFile($"AGV{logMsg}寮傚父锛�( {agvModel.Message} ),", logStr);
+
+                    agvMsg = agvModel.Message;
+                }
             }
+            
             return result;
             #endregion
         }
diff --git a/Wms/WMS.IBLL/IBllTransServer/IRcsServer.cs b/Wms/WMS.IBLL/IBllTransServer/IRcsServer.cs
index 66235fe..f90d43e 100644
--- a/Wms/WMS.IBLL/IBllTransServer/IRcsServer.cs
+++ b/Wms/WMS.IBLL/IBllTransServer/IRcsServer.cs
@@ -14,7 +14,7 @@
         /// <param name="warehouseno">搴撳尯</param>
         /// <param name="type">鍙枡绫诲瀷</param>
         /// <returns></returns>
-        public void GetPalletNo(Pallnetmsg pallnetmsg, string url, out string taskNo);
+        public void GetPalletNo(Pallnetmsg pallnetmsg, string url, string urlMes, out string taskNo);
 
         /// <summary>
         /// 灏嗗噣妗舵敼涓鸿剰妗跺苟鎷夊埌鑴忔《鍖�
diff --git a/Wms/Wms/Controllers/DownApiController.cs b/Wms/Wms/Controllers/DownApiController.cs
index a4e3fb8..b11c7f2 100644
--- a/Wms/Wms/Controllers/DownApiController.cs
+++ b/Wms/Wms/Controllers/DownApiController.cs
@@ -21,6 +21,7 @@
 using Microsoft.Extensions.Logging;
 using ZXing.QrCode.Internal;
 using Model.ModelVm.BllCheckVm;
+using System.DirectoryServices.Protocols;
 
 namespace Wms.Controllers
 {
@@ -683,7 +684,7 @@
                 }
                 string taskNo = "";
                 //鍏蜂綋澶勭悊鏂规硶
-                _rcsserver.GetPalletNo(pallmsg, _config.AgvHost + _config.GenAgvSchedulingTask, out taskNo);
+                _rcsserver.GetPalletNo(pallmsg, _config.AgvHost + _config.GenAgvSchedulingTask, _config.MesHost + _config.MesPanClearPallet, out taskNo);
 
                 resultModel = new AgvResultModel { code = "0", message = "鍙《鎴愬姛!", data = taskNo, reqCode = "" };
                 var jsonData2 = JsonConvert.SerializeObject(resultModel);
@@ -757,16 +758,20 @@
             }
         }
         /// <summary>
-        /// 灏嗗噣妗舵敼涓鸿剰妗跺苟鎷夊埌鑴忔《鍖�
+        /// MES灏嗗噣妗舵敼涓鸿剰妗跺苟鎷夊埌鑴忔《鍖�
         /// </summary>
         /// <param name="pallmsg"></param>
         /// <returns></returns>
         [HttpPost]
         public IActionResult ChangePalletStatus(Pallnetmsg pallmsg)
         {
+            var logStr = $@".\log\MES\MES灏嗗噣妗舵敼涓鸿剰妗跺苟鎷夊埌鑴忔《鍖�" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
             var result = new ErpModel { Success = -1, Message = "", };
             try
             {
+                var jsonData = JsonConvert.SerializeObject(pallmsg);
+                LogFile.SaveLogToFile($"MES灏嗗噣妗舵敼涓鸿剰妗跺苟鎷夊埌鑴忔《鍖�-璇锋眰鎶ユ枃锛�( {jsonData} ),", logStr);
+
                 if (string.IsNullOrWhiteSpace(pallmsg.PalletNo))
                 {
                     result.Message = "妗剁紪鍙蜂笉鑳戒负绌猴紒";
@@ -779,22 +784,28 @@
             }
             catch (Exception e)
             {
+                LogFile.SaveLogToFile($"MES灏嗗噣妗舵敼涓鸿剰妗跺苟鎷夊埌鑴忔《鍖哄紓甯革細( {e.Message} ),", logStr);
+
                 result.Message = e.Message;
                 return Ok(result);
             }
         }
 
         /// <summary>
-        /// MES涓嬪彂娓呮礂閿佸畾鑴忔《
+        /// MES涓嬪彂娓呮礂鎸囧畾鑴忔《
         /// </summary>
         /// <param name="pallmsg"></param>
         /// <returns></returns>
         [HttpPost]
         public IActionResult CleanPallet(Pallnetmsg pallmsg)
         {
-            var result = new ErpModel { Success = -1, Message = "", };
+            var logStr = $@".\log\MES\MES涓嬪彂娓呮礂鎸囧畾鑴忔《" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
+            ErpModel result = new ErpModel { Success = -1, Message = "" };
             try
             {
+                var jsonData = JsonConvert.SerializeObject(pallmsg);
+                LogFile.SaveLogToFile($"MES涓嬪彂娓呮礂鎸囧畾鑴忔《-璇锋眰鎶ユ枃锛�( {jsonData} ),", logStr);
+
                 if (string.IsNullOrWhiteSpace(pallmsg.Location))
                 {
                     result.Message = "鍙枡浣嶇疆涓虹┖锛�";
@@ -812,6 +823,7 @@
             }
             catch (Exception e)
             {
+                LogFile.SaveLogToFile($"MES涓嬪彂娓呮礂鎸囧畾鑴忔《寮傚父锛�( {e.Message} ),", logStr);
                 result.Message = e.Message;
                 return Ok(result);
             }
diff --git a/Wms/Wms/Tools/ApiUrlConfig.cs b/Wms/Wms/Tools/ApiUrlConfig.cs
index fe5f1ff..5f31817 100644
--- a/Wms/Wms/Tools/ApiUrlConfig.cs
+++ b/Wms/Wms/Tools/ApiUrlConfig.cs
@@ -19,6 +19,10 @@
         /// 杩芥函鎴栬祴鐮佺殑IP
         /// </summary>
         public string BoxHost { get; set; }
+        /// <summary>
+        /// MES鐨処P
+        /// </summary>
+        public string MesHost { get; set; }
 
         /// <summary>
         /// Agv鐨処P
@@ -46,6 +50,10 @@
         /// 鑾峰彇绠辩爜淇℃伅--浠庤拷婧垨璧嬬爜绯荤粺
         /// </summary>
         public string GetBoxUrl { get; set; }
+        /// <summary>
+        /// MES鍒ゆ柇鑴忔《鏄惁鍙竻娲�
+        /// </summary>
+        public string MesPanClearPallet { get; set; }
 
         #endregion
         
diff --git a/Wms/Wms/appsettings.json b/Wms/Wms/appsettings.json
index a5363d4..2b95ac2 100644
--- a/Wms/Wms/appsettings.json
+++ b/Wms/Wms/appsettings.json
@@ -30,6 +30,7 @@
     "WcsHost": "http://localhost:57061", //wcsIPhttp://localhost:57061/
     "BoxHost": "http://10.110.24.30:8081", //boxIP
     "AgvHost": "http://172.15.1.74:8182", //agvIP
+    "MesHost": "http://172.16.106.200:5100", //mesIP
 
     "IssueComApiUrl": "/api/WCSApi/AddTasks", //涓嬪彂鍛戒护(鍑哄簱銆佺Щ搴�)
     "IssueComApiUrl2": "/api/WCSApi/AddTask", //閲嶆柊涓嬪彂鍛戒护(鍑哄簱銆佺Щ搴�)
@@ -41,7 +42,8 @@
 
     "EditLocateUrl": "/api/WCSApi/EditLocatStatus", //鍚屾淇敼鍌ㄤ綅淇℃伅
 
-
+    //MES
+    "MesPanClearPallet": "/ibps/mes/v3/webservice/mes-si/interfaceListener/CHECK_DEVICE_CLEAN_METHOD",
     // AGV
     "GenAgvSchedulingTask": "/rcms/services/rest/hikRpcService/genAgvSchedulingTask", //鐢熸垚浠诲姟鍗曟帴鍙�
     "ContinueTask": "/rcms/services/rest/hikRpcService/continueTask", //缁х画鎵ц浠诲姟鎺ュ彛

--
Gitblit v1.8.0