From 3a56820d028e98ac3c4bd315aa76181d7d6720cd Mon Sep 17 00:00:00 2001
From: 海波 张 <2956280567@qq.com>
Date: 星期一, 28 七月 2025 17:29:57 +0800
Subject: [PATCH] 金坛二合一出库修改

---
 dispatch/WcsTask.cs |  581 ++++++++++++++++++++++++++++++++++++++++------------------
 1 files changed, 401 insertions(+), 180 deletions(-)

diff --git a/dispatch/WcsTask.cs b/dispatch/WcsTask.cs
index 0fdfb0d..2e50bb6 100644
--- a/dispatch/WcsTask.cs
+++ b/dispatch/WcsTask.cs
@@ -16,6 +16,7 @@
 using System.Web.Services.Description;
 using Top.Api;
 using static HH.WCS.ZhongCeJinTan.api.ApiModel;
+using static HH.WCS.ZhongCeJinTan.util.Settings;
 using static HH.WCS.ZhongCeJinTan.wms.WcsModel;
 
 namespace HH.WCS.ZhongCeJinTan.dispatch
@@ -41,79 +42,83 @@
             string Traycode = mst.S_CNTR_CODE;
             var isFu = "0";
 
-            var cntr = ContainerHelper.GetCntr(Traycode);
-
-            if (cntr!=null)
+            try
             {
-                if (cntr.N_DETAIL_COUNT>0)
+                var cntr = ContainerHelper.GetCntr(Traycode);
+
+                if (cntr != null)
                 {
-                    isFu = "1";
+                    if (cntr.N_DETAIL_COUNT > 0)
+                    {
+                        isFu = "1";
+                    }
                 }
-            }
-            var workFlow = TaskHelper.selectWorkFlowByType(mst.N_TYPE.ToString(), mst.TOOLSTYPE);
+               
+                
+                    if (mst.S_TYPE.Contains("鍏ュ簱")|| mst.S_TYPE.Contains("鍥炲簱"))
+                    {
+                        Type = "1";
+                    }
 
-            
+                    if (mst.S_TYPE.Contains("鍑哄簱"))
+                    {
+                        Type = "2";
+                        var count = TaskHelper.GetConnectionTask(mst.S_END_LOC);
+                        if (count >= 2)
+                        {
+                            return false;
+                        }
 
-            if (workFlow != null)
-            {
-                if (workFlow.INOROUT.Contains("鍏ュ簱"))
+
+                    }
+                
+
+                if (mst.S_CNTR_CODE.Contains("KJZ"))
                 {
-                    Type = "1";
+                    TrayType = "KJZ";
                 }
 
-                if (workFlow.INOROUT.Contains("鍑哄簱"))
+                var interact = new
                 {
-                    Type = "2";
-                    var count = TaskHelper.GetConnectionTask(mst.S_END_LOC);
-                    if (count>=2)
+                    requestPk = mst.S_CODE,//浠诲姟鍙�+                    contNo = Traycode,//鎵樼洏鍙�+                    contType = TrayType,//鎵樼洏绫诲瀷
+                    trkType = Type,//浠诲姟绫诲瀷
+                    trkPrty = mst.N_PRIORITY,//浠诲姟浼樺厛绾�+                    frmPos = mst.S_START_LOC,//璧峰浣嶇疆
+                    toPos = mst.S_END_LOC,//鐩殑鍦�+                    isFull = isFu,//绌烘墭 婊℃墭
+                    groupNo = Item?.S_ITEM_NAME,//鎼�缁勫彿
+                    clientCode = "WMS",//鎿嶄綔浜�+                    operationTime = DateTime.Now.ToString()//鎿嶄綔鏃堕棿
+                };
+                LogHelper.Info("Wcs绔嬪簱涓嬪彂浠诲姟 鍦板潃淇℃伅:" + baseUrl + "receive", "绔嬪簱涓嬪彂浠诲姟");
+                LogHelper.Info("Wcs绔嬪簱涓嬪彂浠诲姟 鍙傛暟淇℃伅:" + JsonConvert.SerializeObject(interact), "绔嬪簱涓嬪彂浠诲姟");
+                var result = apiHelper.Post(baseUrl + "receive", JsonConvert.SerializeObject(interact));
+                LogHelper.Info("Wcs绔嬪簱涓嬪彂浠诲姟 杩斿洖淇℃伅:" + JsonConvert.SerializeObject(result), "绔嬪簱涓嬪彂浠诲姟");
+                if (!string.IsNullOrEmpty(result))
+                {
+                    var res = JsonConvert.DeserializeObject<WcsTaskReturn>(result);
+                    if (res.code == "0")
+                    {
+                        TaskHelper.UpdateStatus(mst, "宸叉帹閫�);
+                        return true;
+                    }
+                    else
                     {
                         return false;
                     }
-
-
-                }
-            }
-
-            if (mst.S_CNTR_CODE.Contains("KJZ"))
-            {
-                TrayType = "KJZ";
-            }
-           
-            var interact = new
-            {
-                requestPk = mst.S_CODE,//浠诲姟鍙�-                contNo = Traycode,//鎵樼洏鍙�-                contType = TrayType,//鎵樼洏绫诲瀷
-                trkType = Type,//浠诲姟绫诲瀷
-                trkPrty = mst.N_PRIORITY,//浠诲姟浼樺厛绾�-                frmPos = mst.S_START_LOC,//璧峰浣嶇疆
-                toPos = mst.S_END_LOC,//鐩殑鍦�-                isFull = isFu,//绌烘墭 婊℃墭
-                groupNo = Item?.S_ITEM_NAME,//鎼�缁勫彿
-                clientCode = "WMS",//鎿嶄綔浜�-                operationTime = DateTime.Now.ToString()//鎿嶄綔鏃堕棿
-            };
-            LogHelper.Info("Wcs绔嬪簱涓嬪彂浠诲姟 鍦板潃淇℃伅:" + baseUrl + "receive", "绔嬪簱涓嬪彂浠诲姟");
-            LogHelper.Info("Wcs绔嬪簱涓嬪彂浠诲姟 鍙傛暟淇℃伅:" + JsonConvert.SerializeObject(interact), "绔嬪簱涓嬪彂浠诲姟");
-            var result = apiHelper.Post(baseUrl + "receive", JsonConvert.SerializeObject(interact));
-            LogHelper.Info("Wcs绔嬪簱涓嬪彂浠诲姟 杩斿洖淇℃伅:" + JsonConvert.SerializeObject(result), "绔嬪簱涓嬪彂浠诲姟");
-            if (!string.IsNullOrEmpty(result))
-            {
-                var res = JsonConvert.DeserializeObject<WcsTaskReturn>(result);
-                if (res.code == "0")
-                {
-                    TaskHelper.UpdateStatus(mst, "宸叉帹閫�);
-                    return true;
                 }
                 else
                 {
+                    LogHelper.Info("Wcs绔嬪簱涓嬪彂浠诲姟 杩斿洖淇℃伅涓虹┖", "绔嬪簱涓嬪彂浠诲姟");
                     return false;
                 }
             }
-            else
+            catch (Exception)
             {
-                LogHelper.Info("Wcs绔嬪簱涓嬪彂浠诲姟 杩斿洖淇℃伅涓虹┖", "绔嬪簱涓嬪彂浠诲姟");
-                return false;
+
+                throw;
             }
         }
 
@@ -185,10 +190,10 @@
                 stnNo = aloneWcsTask.S_START_LOC,//鎺ラ┏浣�                 reqTime = DateTime.Now.ToString()//鎿嶄綔鏃堕棿
             };
-            LogHelper.Info("Wcs绔嬪簱杈撻�绾挎槸鍚︽湁璐�鍦板潃淇℃伅:" + baseUrl + "CV-state", "绔嬪簱");
-            LogHelper.Info("Wcs绔嬪簱杈撻�绾挎槸鍚︽湁璐�鍙傛暟淇℃伅:" + JsonConvert.SerializeObject(interact), "绔嬪簱");
+            LogHelper.Info("Wcs绔嬪簱杈撻�绾挎槸鍚︽湁璐�鍦板潃淇℃伅:" + baseUrl + "CV-state", "鏄惁鏈夎揣");
+            LogHelper.Info("Wcs绔嬪簱杈撻�绾挎槸鍚︽湁璐�鍙傛暟淇℃伅:" + JsonConvert.SerializeObject(interact), "鏄惁鏈夎揣");
             var result = apiHelper.Post(baseUrl + "CV-state", JsonConvert.SerializeObject(interact));
-            LogHelper.Info("Wcs绔嬪簱杈撻�绾挎槸鍚︽湁璐�杩斿洖淇℃伅:" + JsonConvert.SerializeObject(result), "绔嬪簱");
+            LogHelper.Info("Wcs绔嬪簱杈撻�绾挎槸鍚︽湁璐�杩斿洖淇℃伅:" + JsonConvert.SerializeObject(result), "鏄惁鏈夎揣");
             if (!string.IsNullOrEmpty(result))
             {
                 var res = JsonConvert.DeserializeObject<WcsTaskReturn>(result);
@@ -203,7 +208,7 @@
             }
             else
             {
-                LogHelper.Info("Wcs绔嬪簱杈撻�绾挎槸鍚︽湁璐�杩斿洖淇℃伅涓虹┖", "绔嬪簱");
+                LogHelper.Info("Wcs绔嬪簱杈撻�绾挎槸鍚︽湁璐�杩斿洖淇℃伅涓虹┖", "鏄惁鏈夎揣");
                 return false;
             }
         }
@@ -636,9 +641,7 @@
                      //浠诲姟瀹屾垚
                     case "2":
                         LogHelper.Info($"浠诲姟{taskNo}瀹屾垚", "Wcs浠诲姟鎵ц閫氱煡");
-                        LocationHelper.UnLockLoc(transportTask.S_START_LOC);
                         TaskProcess.OperateStatus(transportTask, 4);
-                        LocationHelper.UnLockLoc(transportTask.S_END_LOC);
                         TaskProcess.OperateStatus(transportTask, 6);
                         TaskHelper.End(transportTask);
                         LocationHelper.CreateUpAndDown(transportTask);
@@ -673,11 +676,10 @@
                                 RfidChek.S_RESULT = "RFID鏍¢獙澶辫触";
                                 if (WcsCancellTask(transportTask))
                                 {
-                                    ContainerHelper.delCntr(transportTask.S_CNTR_CODE);
-                                    ContainerHelper.delCntrItem(transportTask.S_CNTR_CODE);
+                                   
                                     TaskHelper.Fail(transportTask);
                                     TaskProcess.OperateStatus(transportTask, 7);
-
+                                    
                                     var agvTask = TaskHelper.GetTaskByWorkNo(transportTask.S_OP_CODE, "agv");
 
                                     if (agvTask == null)
@@ -685,6 +687,14 @@
                                         LogHelper.Info($"RFID鏍¢獙澶辫触锛屾病鎵惧埌瀵瑰簲{transportTask.S_OP_CODE}鐨刟gv浠诲姟", "Wcs浠诲姟鎵ц閫氱煡");
                                         throw new Exception($"RFID鏍¢獙澶辫触,娌℃壘鍒板搴攞transportTask.S_OP_CODE}鐨刟gv浠诲姟");
                                     }
+
+                                    WmsTaskAction ac7 = TaskHelper.GetActionRecord(agvTask.S_CODE, "7");
+                                    if (ac7!=null)
+                                    {
+                                        LogHelper.Info($"RFID鏍¢獙澶辫触锛宎gv浠诲姟{agvTask.S_CODE},宸茬粡鍙栨秷锛岃浜哄伐澶勭悊", "Wcs浠诲姟鎵ц閫氱煡");
+                                        throw new Exception($"RFID鏍¢獙澶辫触锛宎gv浠诲姟{agvTask.S_CODE},宸茬粡鍙栨秷锛岃浜哄伐澶勭悊");
+                                    }
+
                                     var workFlow = TaskHelper.selectWorkFlowByType(agvTask.N_TYPE.ToString(), agvTask.TOOLSTYPE);
 
                                     if (workFlow == null)
@@ -721,12 +731,123 @@
                                         throw new Exception("淇敼浠诲姟琛ㄥけ璐�);
                                     }
                                     newDb.CommitTran();
+
+                                    var agvTask1 = TaskHelper.GetTaskByWorkNo(transportTask.S_OP_CODE, "agv");
+                                    TaskHelper.opMesTask(agvTask1, 3);
+                                    ContainerHelper.delCntr(transportTask.S_CNTR_CODE);
+                                    ContainerHelper.delCntrItem(transportTask.S_CNTR_CODE);
                                 }
                                 else {
                                     LogHelper.Info($"RFID鏍¢獙澶辫触锛岄�鐭cs鍙栨秷浠诲姟澶辫触", "Wcs浠诲姟鎵ц閫氱煡");
                                     throw new Exception($"RFID鏍¢獙澶辫触锛岄�鐭cs鍙栨秷浠诲姟澶辫触");
                                 }
                             }
+
+                            if (model.code == "2") {
+
+                                TaskHelper.Fail(transportTask);
+                                TaskProcess.OperateStatus(transportTask, 7);
+
+                                if (!WcsCancellTask(transportTask)) {
+                                    LogHelper.Info($"澶栧舰妫�祴澶辫触锛岄�鐭cs鍙栨秷浠诲姟澶辫触", "Wcs浠诲姟鎵ц閫氱煡");
+                                    throw new Exception($"澶栧舰妫�祴澶辫触锛岄�鐭cs鍙栨秷浠诲姟澶辫触");
+                                }
+
+                                var work = TaskHelper.GetWmsWork(transportTask.S_OP_CODE);
+                                if (work==null)
+                                {
+                                    LogHelper.Info($"鏈煡璇㈠埌{transportTask.S_OP_CODE}瀵瑰簲鐨勪綔涓�, "Wcs浠诲姟鎵ц閫氱煡");
+                                    throw new Exception("鏈煡璇㈠埌瀵瑰簲鐨勪綔涓�);
+                                }
+
+                                var workFlow = TaskHelper.selectWorkFlowByType(work.N_TYPE.ToString(), work.TOOLSTYPE);
+
+                                if (workFlow == null)
+                                {
+                                    LogHelper.Info($"澶栧舰妫�祴澶辫触锛屾病鎵惧埌瀵瑰簲浣滀笟娴佺▼", "Wcs浠诲姟鎵ц閫氱煡");
+                                    throw new Exception($"澶栧舰妫�祴澶辫触,娌℃壘鍒板搴斾綔涓氭祦绋�);
+                                }
+                                //鏌ユ壘缁堢偣
+                                var endList = LocationHelper.GetAllLocList1(workFlow.ERRORAREA);
+
+                                //var end = LocationHelper.FindBalanceEndcolByLocList(endList, workFlow.ERRORAREA,workFlow.ROADWAY);
+                                var end = LocationHelper.FindEndcolByLoc(endList, workFlow.ERRORAREA);
+                                LogHelper.Info($"澶栧舰妫�祴澶辫触澶辫触涓嬪彂寮傚父缁堢偣淇℃伅" + JsonConvert.SerializeObject(end), "Wcs浠诲姟鎵ц閫氱煡");
+
+
+                                if (end == null)
+                                {
+                                    LogHelper.Info($"澶栧舰妫�祴澶辫触澶辫触涓嬪彂浠诲姟澶辫触锛岀粓鐐瑰簱鍖簕workFlow.ERRORAREA},娌℃壘鍒扮粓鐐�, "Wcs浠诲姟鎵ц閫氱煡");
+                                    throw new Exception($"澶栧舰妫�祴澶辫触澶辫触缁堢偣搴撳尯{workFlow.ERRORAREA},娌℃壘鍒扮粓鐐�);
+                                }
+
+                                LocationHelper.LockLoc(end.S_CODE, "鍏ュ簱閿�, 1);
+
+
+                                var connectionLoc = LocationHelper.GetLoc(work.CONNECTION.Replace("R", "C"));
+
+                                if (connectionLoc==null)
+                                {
+                                    LogHelper.Info($"鏈煡璇㈠埌{work.CONNECTION.Replace("R", "C")}瀵瑰簲鐨勬帴椹充綅", "Wcs浠诲姟鎵ц閫氱煡");
+                                    throw new Exception("鏈煡璇㈠埌瀵瑰簲鐨勫嚭搴撴帴椹充綅");
+                                }
+
+                                var connection = connectionLoc.S_CODE;
+
+                                var operation = new WmsWork
+                                {
+                                    // 浣滀笟鍙�+                                    S_CODE = TaskHelper.GenerateTaskNo(),
+                                    // 浣滀笟绫诲瀷
+                                    N_TYPE = 99,
+                                    // 浣滀笟绫诲瀷
+                                    S_TYPE = work.S_TYPE.Replace("鍏�,"鍑�),
+                                    // 璧风偣璐т綅
+                                    S_START_LOC = work.CONNECTION,
+                                    // 璧风偣搴撳尯缂栫爜
+                                    S_START_AREA = work.CONNECTION_AREA,
+                                    //璧风偣搴撳尯鍚嶇О
+                                    S_START_AREA_NAME = work.CONNECTION_AREA,
+                                    //鎺ラ┏浣�+                                    CONNECTION = connection,
+                                    //鎺ラ┏搴撳尯鍚嶇О
+                                    CONNECTION_AREA = connectionLoc.S_AREA_Name,
+                                    // 缁堢偣璐т綅
+                                    S_END_LOC = end.S_CODE,
+                                    // 缁堢偣搴撳尯缂栫爜
+                                    S_END_AREA = end.S_AREA_CODE,
+                                    //缁堢偣搴撳尯鍚嶇О
+                                    S_END_AREA_NAME = end.S_AREA_Name,
+                                    // 瀹瑰櫒缂栫爜
+                                    S_CNTR_CODE = work.S_CNTR_CODE,
+                                    // 浣滀笟瀹氫箟鍚嶇О
+                                    S_OP_DEF_NAME = workFlow.FLOWNAME,
+                                    //浼樺厛绾�+                                    N_PRIORITY = work.N_PRIORITY,
+                                    //宸ヨ绫诲瀷
+                                    TOOLSTYPE = work.TOOLSTYPE
+                                };
+
+                                //鍒涘缓浣滀笟
+                                if (WMSHelper.CreateWmsWork(operation))
+                                {
+                                    if (connection != "")
+                                    {
+                                        LocationHelper.LockLoc(operation.S_START_LOC, "鍑哄簱閿�, 2);
+                                        LocationHelper.LockLoc(operation.S_END_LOC, "鍏ュ簱閿�, 1);
+                                        LocationHelper.LockLoc(operation.CONNECTION, "鍏ュ簱閿�, 1);
+                                    }
+
+                                    LogHelper.Info($"寮傚父鍑哄簱浣滀笟鍒涘缓鎴愬姛{operation.S_CODE}", "Mes浠诲姟涓嬪彂");
+                                }
+                                else
+                                {
+                                    LogHelper.Info($"寮傚父鍑哄簱浠诲姟涓嬪彂鍒涘缓浣滀笟澶辫触", "Mes浠诲姟涓嬪彂");
+                                    throw new Exception($"寮傚父鍑哄簱浠诲姟涓嬪彂鍒涘缓浣滀笟澶辫触");
+                                }
+                            }
+
+
                             newDb.BeginTran();
                             var R = newDb.Insertable(RfidChek).ExecuteCommand();
                             if (R == 0)
@@ -755,6 +876,8 @@
                             {
                                 TaskHelper.Fail(agvTask1);
                                 NDCApi.CancelOrder(agvTask1.S_CODE.Trim());
+                              
+                                LogHelper.Info($"Wcs浠诲姟鎵ц閫氱煡锛屼换鍔″彿{transportTask.S_CODE}鍙栨秷,瑙i攣", "瑙i攣");
                                 TaskProcess.CacheBitCancelUpdate(agvTask1);
                             }
                         }
@@ -989,100 +1112,112 @@
             string bit = "";
             var Meshod = "";
             var newDb = new SqlHelper<object>().GetInstance();
-            var tac = newDb.Queryable<WcsSafety>().Where(a => a.TaskNo == mst.S_CODE && a.Sign == state).ToList();
-            if (tac.Count() > 0)
+
+            try
             {
-                LogHelper.Info("鏌ヨ鍒板畨鍏ㄨ姹備俊鍙疯褰曡〃宸茬粡瀛樺湪鏁版嵁,姝ゆ淇″彿涓嶄笅杈剧粰绔嬪簱", "agv鎵ц閫氱煡");
-                return true;
-            }
-            switch (state)
-            {
-                case 1101:
-                    Type = "1";
-                    bit = mst.S_START_LOC;
-                    Meshod = "AgvRequest";
-                    break;
-                case 1102:
-                    Type = "1";
-                    bit = mst.S_START_LOC;
-                    Meshod = "Complete";
-                    break;
-                case 1103:
-                    Type = "2";
-                    bit = mst.S_END_LOC;
-                    Meshod = "AgvRequest";
-                    break;
-                case 1104:
-                    Type = "2";
-                    bit = mst.S_END_LOC;
-                    Meshod = "Complete";
-                    break;
-                case 7:
-                    Type = "5";
-                    if (mst.S_TYPE.Contains("鍑哄簱"))
-                    {
-                        bit = mst.S_START_LOC;
-                    }
-                    else {
-                        bit = mst.S_END_LOC;
-                    }
-
-                    //閫�簱鍙栨秷鍙慳gv璧风偣
-                    if (LocationHelper.GetErroArea(mst.S_END_AREA))
-                    {
-                        bit = mst.S_START_LOC;
-                    }
-
-
-                    Meshod = "AgvRequestCancel";
-                    break;
-            }
-
-
-
-
-            var interact = new
-            {
-                requestPk = mst.S_CODE,//浠诲姟鍙�-                trkType = Type,//浠诲姟绫诲瀷
-                method = Meshod,//API鍚嶇О
-                stnNo = bit,//鐩殑鍦扮珯鍙板彿
-                carNo = forkliftNo,// 杞﹀彿
-                clientCode = "WMS",//鎿嶄綔浜�-                operationTime = DateTime.Now.ToString()//鎿嶄綔鏃堕棿
-            };
-            LogHelper.Info("agv鎵ц閫氱煡 鍦板潃淇℃伅:" + baseUrl + "agvCallback", "agv鎵ц閫氱煡");
-            LogHelper.Info("agv鎵ц閫氱煡 鍙傛暟淇℃伅:" + JsonConvert.SerializeObject(interact), "agv鎵ц閫氱煡");
-            var result = apiHelper.Post(baseUrl + "agvCallback", JsonConvert.SerializeObject(interact));
-            LogHelper.Info("agv鎵ц閫氱煡 杩斿洖淇℃伅:" + JsonConvert.SerializeObject(result), "agv鎵ц閫氱煡");
-            if (!string.IsNullOrEmpty(result))
-            {
-                var res = JsonConvert.DeserializeObject<WcsTaskCallBack>(result);
-                if (res.code == "0")
+                var tac = newDb.Queryable<WcsSafety>().Where(a => a.TaskNo == mst.S_CODE && a.Sign == state).ToList();
+                if (tac.Count() > 0)
                 {
-                    WcsSafety Sign = new WcsSafety();
-                    Sign.TaskNo = mst.S_CODE;
-                    Sign.Sign = state;
-                    newDb.BeginTran();
-                    var B = newDb.Insertable(Sign).ExecuteCommand();
-                    if (B == 0)
-                    {
-                        newDb.RollbackTran();
-                    }
-                    newDb.CommitTran();
-                    LogHelper.Info("agv鎵ц閫氱煡鎴愬姛:", "agv鎵ц閫氱煡");
+                    LogHelper.Info("鏌ヨ鍒板畨鍏ㄨ姹備俊鍙疯褰曡〃宸茬粡瀛樺湪鏁版嵁,姝ゆ淇″彿涓嶄笅杈剧粰绔嬪簱", "agv鎵ц閫氱煡");
                     return true;
+                }
+                switch (state)
+                {
+                    case 1101:
+                        Type = "1";
+                        bit = mst.S_START_LOC;
+                        Meshod = "AgvRequest";
+                        break;
+                    case 1102:
+                        Type = "1";
+                        bit = mst.S_START_LOC;
+                        Meshod = "Complete";
+                        break;
+                    case 1103:
+                        Type = "2";
+                        bit = mst.S_END_LOC;
+                        Meshod = "AgvRequest";
+                        break;
+                    case 1104:
+                        Type = "2";
+                        bit = mst.S_END_LOC;
+                        Meshod = "Complete";
+                        break;
+                    case 7:
+                        Type = "5";
+                        if (mst.S_TYPE.Contains("鍑哄簱"))
+                        {
+                            bit = mst.S_START_LOC;
+                        }
+                        else
+                        {
+                            bit = mst.S_END_LOC;
+                        }
+
+                        //閫�簱鍙栨秷鍙慳gv璧风偣
+                        if (LocationHelper.GetErroArea(mst.S_END_AREA))
+                        {
+                            bit = mst.S_START_LOC;
+                        }
+
+
+                        Meshod = "AgvRequestCancel";
+                        break;
+                }
+
+
+
+
+                var interact = new
+                {
+                    requestPk = mst.S_CODE,//浠诲姟鍙�+                    trkType = Type,//浠诲姟绫诲瀷
+                    method = Meshod,//API鍚嶇О
+                    stnNo = bit,//鐩殑鍦扮珯鍙板彿
+                    carNo = forkliftNo,// 杞﹀彿
+                    clientCode = "WMS",//鎿嶄綔浜�+                    operationTime = DateTime.Now.ToString()//鎿嶄綔鏃堕棿
+                };
+                LogHelper.Info("agv鎵ц閫氱煡 鍦板潃淇℃伅:" + baseUrl + "agvCallback", "agv鎵ц閫氱煡");
+                LogHelper.Info("agv鎵ц閫氱煡 鍙傛暟淇℃伅:" + JsonConvert.SerializeObject(interact), "agv鎵ц閫氱煡");
+                var result = apiHelper.Post(baseUrl + "agvCallback", JsonConvert.SerializeObject(interact));
+                LogHelper.Info("agv鎵ц閫氱煡 杩斿洖淇℃伅:" + JsonConvert.SerializeObject(result), "agv鎵ц閫氱煡");
+                if (!string.IsNullOrEmpty(result))
+                {
+                    var res = JsonConvert.DeserializeObject<WcsTaskCallBack>(result);
+                    if (res.code == "0")
+                    {
+                        WcsSafety Sign = new WcsSafety();
+                        Sign.TaskNo = mst.S_CODE;
+                        Sign.Sign = state;
+                        newDb.BeginTran();
+                        var B = newDb.Insertable(Sign).ExecuteCommand();
+                        if (B == 0)
+                        {
+                            newDb.RollbackTran();
+                        }
+                        newDb.CommitTran();
+                        LogHelper.Info("agv鎵ц閫氱煡鎴愬姛:", "agv鎵ц閫氱煡");
+                        return true;
+                    }
+                    else
+                    {
+                        return false;
+                    }
                 }
                 else
                 {
+                    LogHelper.Info("agv鎵ц閫氱煡鎴愬姛 杩斿洖淇℃伅涓虹┖", "agv鎵ц閫氱煡");
                     return false;
                 }
             }
-            else
+            catch (Exception)
             {
-                LogHelper.Info("agv鎵ц閫氱煡鎴愬姛 杩斿洖淇℃伅涓虹┖", "agv鎵ц閫氱煡");
-                return false;
+
+                throw;
             }
+
+           
 
         }
 
@@ -1183,8 +1318,75 @@
             }
 
         }
+        
+        /// <summary>
+        /// 鍙栬揣鏃犺揣
+        /// </summary>
+        /// <param name="model"></param>
+        /// <returns></returns>
+        public static WcsWarningReurn ZcOutChangeBit(changeBitParme model)
+        {
+            var result = new WcsWarningReurn();
+            var newDb = new SqlHelper<object>().GetInstance();
 
+            try
+            {
+                if (string.IsNullOrEmpty(model.taskNo))
+                {
+                    throw new Exception("浠诲姟鍙蜂负绌�);
+                }
 
+                var task = TaskHelper.GetTask(model.taskNo);
+                if (task == null)
+                {
+                    throw new Exception($"鏈煡璇㈠埌浠诲姟鍙穥model.taskNo}鐨勪换鍔�);
+                }
+
+                if (task.S_TYPE.Contains("鍑哄簱"))
+                {
+                    //鍙栬揣鏃犺揣
+                    LogHelper.Info($"浠诲姟鍙穥task.S_CODE},鍙栬揣鏃犺揣,鍙栨秷浠诲姟", "鍙栬揣鏃犺揣");
+                    if (WcsCancellTask(task))
+                    {
+                        LogHelper.Info($"浠诲姟鍙穥task.S_CODE},鍙栨秷浠诲姟鎴愬姛锛岃捣鐐箋task.S_START_LOC}璁句负寮傚父", "鍙栬揣鏃犺揣");
+                        TaskHelper.Fail(task);
+
+                        TaskProcess.OperateStatus(task, 7);
+                        LocationHelper.updateLocLock(task.S_START_LOC, 3, "鍏朵粬閿�);
+                        var agvTask = TaskHelper.GetTaskByWorkNo(task.S_OP_CODE, "agv");
+                        if (agvTask != null)
+                        {
+                            if (agvTask.S_B_STATE != "鏈墽琛�)
+                            {
+                                NDCApi.CancelOrder(agvTask.S_CODE.Trim());
+                            }
+                            TaskHelper.Fail(agvTask);
+
+                            LogHelper.Info($"鍙栬揣鏃犺揣锛屼换鍔″彿{task.S_CODE}鍙栨秷,瑙i攣", "瑙i攣");
+                            TaskProcess.CacheBitCancelUpdate(agvTask);
+                        }
+                    }
+
+                }
+                else
+                {
+                    throw new Exception($"浠诲姟鍙穥model.taskNo},浠诲姟绫诲瀷{task.S_TYPE}");
+                }
+                result.msg = "Wcs鍙栬揣鏃犺揣澶勭悊鎴愬姛";
+                result.code = "0";
+                result.requestPk = model.requestPk;
+                return result;
+            }
+            catch (Exception ex)
+            {
+                newDb.RollbackTran();
+                result.msg = "Wcs鍙栬揣鏃犺揣寮傚父";
+                result.code = "1";
+                result.requestPk = model.requestPk;
+                LogHelper.Info("Wcs鍙栬揣鏃犺揣寮傚父" + ex.Message, "鍙栬揣鏃犺揣");
+                return result;
+            }
+        }
 
         /// <summary>
         /// 鏀捐揣鏈夎揣
@@ -1209,47 +1411,24 @@
                             throw new Exception($"鏈煡璇㈠埌浠诲姟鍙穥model.taskNo}鐨勪换鍔�);
                         }
 
-                    if (task.S_TYPE.Contains("鍑哄簱"))
-                    {
-                        //鍙栬揣鏃犺揣
-                        LogHelper.Info($"浠诲姟鍙穥task.S_CODE},鍙栬揣鏃犺揣,鍙栨秷浠诲姟", "鏀捐揣鏈夎揣");
-                        if (WcsCancellTask(task))
-                        {
-                            LogHelper.Info($"浠诲姟鍙穥task.S_CODE},鍙栨秷浠诲姟鎴愬姛锛岃捣鐐箋task.S_START_LOC}璁句负寮傚父", "鏀捐揣鏈夎揣");
-                            TaskHelper.Fail(task);
-                            TaskProcess.OperateStatus(task, 7);
-                            LocationHelper.updateLocLock(task.S_START_LOC, 4, "寮傚父閿�);
-                            var agvTask = TaskHelper.GetTaskByWorkNo(task.S_OP_CODE, "agv");
-                            if (agvTask != null)
-                            {
-                                if (agvTask.S_B_STATE!="鏈墽琛�)
-                                {
-                                    NDCApi.CancelOrder(agvTask.S_CODE.Trim());
-                                }
-                                TaskHelper.Fail(agvTask);
-                                TaskProcess.CacheBitCancelUpdate(agvTask);
-                            }
-                        }
-
-                    }
-                    else {
+                    if (!task.S_TYPE.Contains("鍑哄簱")) {
                         //鍗歌揣鏈夎揣
-                        if (task.S_B_STATE.Contains("瀹屾垚") || task.S_B_STATE.Contains("鍙栨秷") || task.S_B_STATE.Contains("澶辫触"))
+                        if (task.S_B_STATE == "瀹屾垚" || task.S_B_STATE.Contains("鍙栨秷") || task.S_B_STATE.Contains("澶辫触"))
                         {
                             throw new Exception($"浠诲姟鍙穥model.taskNo}锛屼换鍔$姸鎬侊細{task.S_B_STATE}锛屼笉鑳芥敼閬�);
                         }
 
                         var endLoc = LocationHelper.GetLocOne(task.S_END_LOC);
 
-                        var end = newDb.Queryable<Location>().Where(a => a.S_AREA_CODE == endLoc.S_AREA_CODE && a.N_ROW == endLoc.N_ROW && a.N_COL > endLoc.N_COL && a.S_LOCK_STATE == "鏃� && a.N_CURRENT_NUM == 0 && a.C_ENABLE == "Y").OrderBy(b => b.N_COL).First();
+                        var end = newDb.Queryable<Location>().Where(a => a.S_AREA_CODE == endLoc.S_AREA_CODE && a.N_ROADWAY == endLoc.N_ROADWAY && a.N_COL != endLoc.N_COL && a.S_LOCK_STATE == "鏃� && a.N_CURRENT_NUM == 0 && a.C_ENABLE == "Y").OrderBy(b => b.N_ROW).OrderBy(b => b.N_COL).OrderBy(b => b.N_LAYER).First();
 
                         LogHelper.Info($"Wcs鏀捐揣鏈夎揣瀵绘壘鏂扮粓鐐逛俊鎭� + JsonConvert.SerializeObject(end), "鏀捐揣鏈夎揣");
 
                         if (end != null)
                         {
                             newDb.BeginTran();
-                            endLoc.N_LOCK_STATE = 4;
-                            endLoc.S_LOCK_STATE = "寮傚父閿�;
+                            endLoc.N_LOCK_STATE = 3;
+                            endLoc.S_LOCK_STATE = "鍏朵粬閿�;
                             newDb.Updateable(endLoc).UpdateColumns(it => new { it.N_LOCK_STATE, it.S_LOCK_STATE }).ExecuteCommand();
                             task.S_END_LOC = end.S_CODE;
                             newDb.Updateable(task).UpdateColumns(it => new { it.S_END_LOC }).ExecuteCommand();
@@ -1258,17 +1437,19 @@
                             result.msg = end.S_CODE;
                             result.code = "0";
                             result.requestPk = model.requestPk;
+                            return result;
                         }
                         else
                         {
                             throw new Exception($"鏈煡璇㈠埌搴撳尯{endLoc.S_AREA_CODE}鏈夌鍚堢殑璐т綅");
                         }
+                    }else
+                        {
+                        throw new Exception($"浠诲姟鍙穥model.taskNo},浠诲姟绫诲瀷{task.S_TYPE}");
+
                     }
 
-                        result.msg = "Wcs鏀捐揣鏈夎揣/鍙栬揣鏃犺揣澶勭悊鎴愬姛";
-                        result.code = "0";
-                        result.requestPk = model.requestPk;
-                        return result;
+                   
                     }
                     catch (Exception ex)
                     {
@@ -1279,7 +1460,6 @@
                         LogHelper.Info("Wcs鏀捐揣鏈夎揣寮傚父" + ex.Message, "鏀捐揣鏈夎揣");
                     return result;
                     }
-                    return result;
              }
 
 
@@ -1314,6 +1494,47 @@
                 result.msg = "鎴愬姛";
                 result.requestPk = model.requestPk;
                 LogHelper.Info("Wcs閫氱煡纭杩斿洖" + JsonConvert.SerializeObject(result), "閫氱煡纭");
+
+                //鏌ユ壘绔嬪簱閫氱煡纭琛�+                var mst = TaskHelper.GetTask(model.requestPk);
+                if (mst==null)
+                {
+                    throw new Exception($"涓烘煡璇㈠埌浠诲姟{model.requestPk}");
+                }
+                
+                if (mst.S_TYPE.Contains("鍑哄簱"))
+                {
+                    var ac1102 = TaskHelper.GetWcsSafety(mst.S_CODE, "1102");
+                    if (ac1102 == null) {
+                        if (model.trkType == "1" && model.isAllow == "1")
+                        {
+                            //绔嬪簱閫氱煡鎴愬姛淇敼鍙傛暟
+                            LogHelper.Info($"绔嬪簱閫氱煡纭锛屽彇璐т氦绠℃垚鍔燂紝淇敼鍙傛暟", "瀹夊叏浜や簰");
+                            NDCApi.ChangeOrderParam(mst.S_CODE, 6, "1");
+                        }
+                        else
+                        {
+                            LogHelper.Info($"绔嬪簱閫氱煡纭锛屼换鍔″彿={mst.S_CODE}锛屽彇璐т氦绠′笉鍏佽锛屼笉淇敼鍙傛暟", "瀹夊叏浜や簰");
+                        }
+                    }   
+                }
+                else {
+                    var ac1104 = TaskHelper.GetWcsSafety(mst.S_CODE, "1104");
+                    if (ac1104==null)
+                    {
+                        if (model.trkType == "2" && model.isAllow == "1")
+                        {
+                            //绔嬪簱閫氱煡鎴愬姛淇敼鍙傛暟
+                            LogHelper.Info($"绔嬪簱閫氱煡纭锛屼换鍔″彿={mst.S_CODE}锛屽嵏璐т氦绠℃垚鍔燂紝淇敼鍙傛暟", "瀹夊叏浜や簰");
+                            NDCApi.ChangeOrderParam(mst.S_CODE, 6, "1");
+                        }
+                        else
+                        {
+                            LogHelper.Info($"绔嬪簱閫氱煡纭锛屼换鍔″彿={mst.S_CODE}锛屽嵏璐т氦绠′笉鍏佽锛屼笉淇敼鍙傛暟", "瀹夊叏浜や簰");
+                        }
+                    }
+                }
+
                 return result;
             }
             catch (Exception ex)
@@ -1351,7 +1572,7 @@
         public string code { get; set; }
         public string msg { get; set; }
         public bool success { get; set; }
-        public DataItem lastTime { get; set; }
+        public DateTime lastTime { get; set; }
     }
 
     /// <summary>

--
Gitblit v1.9.1