From c2bed218cc875e59fff53ef43a187d5934bdf35c Mon Sep 17 00:00:00 2001
From: chengsc <11752@DESKTOP-DS49RCP>
Date: 星期日, 27 四月 2025 14:59:20 +0800
Subject: [PATCH] 修改优化问题

---
 Admin.NET/WCS.Application/PLC/PLCService.cs |  439 ++++++++++++++++++++++--------------------------------
 1 files changed, 176 insertions(+), 263 deletions(-)

diff --git a/Admin.NET/WCS.Application/PLC/PLCService.cs b/Admin.NET/WCS.Application/PLC/PLCService.cs
index 1fc0cd8..2fff948 100644
--- a/Admin.NET/WCS.Application/PLC/PLCService.cs
+++ b/Admin.NET/WCS.Application/PLC/PLCService.cs
@@ -5,6 +5,8 @@
 using DocumentFormat.OpenXml.Spreadsheet;
 using Furion.Logging;
 using IoTClient;
+using NewLife.Reflection;
+using WCS.Application.Entity;
 using WCS.Application.Util;
 
 namespace WCS.Application;
@@ -144,6 +146,7 @@
     private static void ShuttleCar(WcsDeviceDto modDevice)
     {
         var plcConn = modDevice.modbusUtil;
+        // 鍥涘悜杞︾姸鎬� 0:鏈┖闂�,1:绌洪棽,2:寮傚父  3锛氬厖鐢典腑
         switch (modDevice.Value.ToString())
         {
             case "0":
@@ -154,54 +157,75 @@
                     sysCacheService.HashAddOrUpdate("AlarmInfo_Car", plcConn.PlcIP, -1);
                     var modPosTaskStatus = modDevice.listStation.FirstOrDefault(s => s.Text == "浠诲姟鐘舵��");
                     var (resultTaskStatus, valueTaskStatus) = plcConn.GetDBValue(modPosTaskStatus.PosType, modPosTaskStatus.PlcPos);
+                    //鍒ゆ柇璇诲彇浠诲姟鐘舵�佹槸鍚︽垚鍔� 骞朵笖浠诲姟鐘舵�佹槸1 0:鏃犱换鍔�,1:浠诲姟瀹屾垚,2:浠诲姟鍙栨秷,3:浠诲姟鏆傚仠锛�4锛氫换鍔″紓甯� 5锛氫换鍔℃墽琛屼腑
+
+                    WcsCarTasks carTask2 = null;//null 鏂颁换鍔�  not null 璺緞2浠诲姟
+                    
                     if (resultTaskStatus.IsSucceed && valueTaskStatus == 1)
                     {
                         var modPosTask = modDevice.listStation.FirstOrDefault(s => s.Text == "浠诲姟鍙�");
                         var (resultTask, valueTask) = plcConn.GetDBValue(modPosTask.PosType, modPosTask.PlcPos);
-                        string valueTaskStr = Convert.ToString(valueTask);
-                        string strNo = "";
-                        var boNo = dicTaskNo.TryGetValue(modDevice.Id.ToString(), out strNo);
-                        if (valueTaskStr != "0" && strNo != valueTaskStr)
+                        //璇诲彇浠诲姟鍙�
+                        int valueTaskStr = Convert.ToInt32(valueTask);
+                        //鑾峰彇浠诲姟淇℃伅 鏍规嵁  浠诲姟鍙枫�佸皬杞︾紪鍙�
+                        var carTask = _db.Queryable<WcsCarTasks>().First(m=>m.IsDelete == false && m.Status == TaskStatusEnum.Doing && m.CarTaskNo == valueTaskStr && m.CarNo == modDevice.PlcIdIP);
+                        if (carTask == null)
                         {
-                            var modFinshTask = _db.Queryable<WcsTask>().First(s => s.Status == TaskStatusEnum.Doing && s.Type == PLCTypeEnum.ShuttleCar && s.Id.ToString().EndsWith(valueTaskStr));
-                            if (modFinshTask != null && modFinshTask.Status != TaskStatusEnum.Complete)
-                            {
-                                //12.4鍑哄簱鏀规垚璋冪敤WMS瀹屾垚浠诲姟鎺ュ彛锛沇MS鎿嶆帶PDA鎵樼洏涓嬫灦鍚庯紝WCS浠诲姟鐘舵�佹墠瀹屾垚锛堥伩鍏嶅皬杞︾户缁窇锛�
-                                if (modFinshTask.TaskType == TaskTypeEnum.In)
-                                {
-                                    modFinshTask.Status = TaskStatusEnum.Complete;
-                                    modFinshTask.FinishDate = DateTime.Now;
-                                    _db.Updateable(modFinshTask).ExecuteCommand();
-                                    var taskMonitor = new WcsTaskMonitor()
-                                    {
-                                        TaskNo = modFinshTask.TaskNo,
-                                        PlcName = modDevice.Text,
-                                        InteractiveMsg = $"绌挎杞﹀弽棣堜换鍔″畬鎴�"
-                                    };
-                                    _db.Insertable(taskMonitor).ExecuteCommand();
-                                    //涓嬪彂浠诲姟鏃ュ織
-                                    HubUtil.PublicTask(modFinshTask.Adapt<WcsTaskOutput>());
-                                    HubUtil.PublicTaskMonitor(taskMonitor.Adapt<WcsTaskMonitorOutput>());
-                                }
-                                HttpService httpService = new HttpService();
-                                var requestMode = new TaskRequestWMS()
-                                {
-                                    TaskNo = modFinshTask.TaskNo,
-                                    PalletNo = modFinshTask.PalletNo,
-                                    TaskType = ((int)modFinshTask.TaskType).ToString(),
-                                    TaskStatus = ((int)TaskStatusEnum.Complete).ToString()
-                                };
-                                var modResponseTask = httpService.RequestTask(requestMode).Result;
-                                modFinshTask.IsSuccess = TaskSuccessEnum.Success;
-                                _db.Updateable(modFinshTask).ExecuteCommand();
-
-                                if (dicTaskNo.ContainsKey(modDevice.Id.ToString()))
-                                    dicTaskNo.Remove(modDevice.Id.ToString());
-                                dicTaskNo.Add(modDevice.Id.ToString(), valueTaskStr);
-                            }
+                            var modRests = modDevice.listStation.FirstOrDefault(s => s.Text == "澶嶄綅");
+                            plcConn.SetDBValue(modRests.PosType, modRests.PlcPos, "1");//娌℃湁鎵惧埌浠诲姟  澶嶄綅
+                            return;
                         }
+                         
+                        var modFinshTask = _db.Queryable<WcsTask>().First(s => s.Status == TaskStatusEnum.Doing && s.Type == PLCTypeEnum.ShuttleCar && s.TaskNo == carTask.TaskNo);
+                        if (modFinshTask == null)
+                        {
+                            break;//娌℃湁鏌ヨ鍒版�讳换鍔�
+                        }
+                        //鑾峰彇璺緞2鐨勪换鍔� 涓嬪彂
+                        carTask2 = _db.Queryable<WcsCarTasks>().Where(m => m.IsDelete == false && m.TaskNo == carTask.TaskNo && m.CarNo == modDevice.PlcIdIP && m.PreId.Contains(carTask.Id.ToString())).OrderBy(m=>m.CreateTime).First();
+                        
+                        if (carTask != null && carTask.Status != TaskStatusEnum.Complete)
+                        {
+                            carTask.Status = TaskStatusEnum.Complete;
+                            carTask.UpdateTime = DateTime.Now;
+                            _db.Updateable(carTask).ExecuteCommand();
+                            //娣诲姞浠诲姟鏄庣粏
+                            var taskMonitor = new WcsTaskMonitor()
+                            {
+                                TaskNo = carTask.TaskNo,
+                                PlcName = modDevice.Text,
+                                InteractiveMsg = $"绌挎杞﹀弽棣堜换鍔″畬鎴�"
+                            };
+                            _db.Insertable(taskMonitor).ExecuteCommand();
+                            //涓嬪彂浠诲姟鏃ュ織
+                            
+                            HubUtil.PublicTaskMonitor(taskMonitor.Adapt<WcsTaskMonitorOutput>());
+                        }
+                        //娌℃湁璺緞2鐨勪换鍔� 鍙樻洿鎬讳换鍔′俊鎭�
+                        if (carTask2 == null && modFinshTask != null && modFinshTask.Status != TaskStatusEnum.Complete)
+                        {
+                            modFinshTask.Status = TaskStatusEnum.Complete;
+                            modFinshTask.FinishDate = DateTime.Now;
+                            _db.Updateable(modFinshTask).ExecuteCommand();
+                            
+                            //鍙嶉WMS绯荤粺 浠诲姟瀹屾垚
+                            //HttpService httpService = new HttpService();
+                            //var requestMode = new TaskRequestWMS()
+                            //{
+                            //    TaskNo = modFinshTask.TaskNo,
+                            //    PalletNo = modFinshTask.PalletNo,
+                            //    TaskType = ((int)modFinshTask.TaskType).ToString(),
+                            //    TaskStatus = ((int)TaskStatusEnum.Complete).ToString()
+                            //};
+                            //var modResponseTask = httpService.RequestTask(requestMode).Result;
+                            //modFinshTask.IsSuccess = TaskSuccessEnum.Success;
+                            //_db.Updateable(modFinshTask).ExecuteCommand();
+                            HubUtil.PublicTask(modFinshTask.Adapt<WcsTaskOutput>());
+                            
+                        }
+                        
                     }
-
+                    
                     var modStationX = modDevice.listStation.FirstOrDefault(s => s.Text == "鍥涘悜杞︿綅缃�(X)");
                     var (resultx, valuex) = plcConn.GetDBValue(modStationX.PosType, modStationX.PlcPos);
                     var modStationY = modDevice.listStation.FirstOrDefault(s => s.Text == "鍥涘悜杞︿綅缃�(Y)");
@@ -209,36 +233,63 @@
                     var modStationZ = modDevice.listStation.FirstOrDefault(s => s.Text == "鍥涘悜杞︿綅缃�(Z)");
                     var (resultz, valuez) = plcConn.GetDBValue(modStationZ.PosType, modStationZ.PlcPos);
 
-                    // 鑾峰彇浠诲姟淇℃伅
-                    var stationStart = ((int)valuex).ToString().PadLeft(2, '0');
-                    var stationEnd = ((int)valuez).ToString().PadLeft(2, '0') + "01";
-                    var listTask = _db.Queryable<WcsTask>().OrderBy(m => m.Levels, OrderByType.Asc).OrderBy(m => m.CreateTime)
-                        .Where(s => s.Status <= TaskStatusEnum.Doing && s.Type == PLCTypeEnum.ShuttleCar
-                        && s.StartLocate.StartsWith(stationStart) && s.StartLocate.EndsWith(stationEnd)).ToList();
-                    var modTask = listTask.FirstOrDefault();
-                    //return;
-                    if (modTask == null)
-                        return;
-                    if (modTask.StartLocate == modTask.EndLocate)
+
+                    WcsTask modTask;
+                    //瑕佷笅鍙戣矾寰�2浠诲姟
+                    if (carTask2 != null)
                     {
-                        modTask.Status = TaskStatusEnum.Doing;
-                        _db.Updateable(modTask).ExecuteCommand();
-                        HubUtil.PublicTask(modTask.Adapt<WcsTaskOutput>());
+                        modTask = _db.Queryable<WcsTask>().First(s => s.IsDelete == false && s.TaskNo == carTask2.TaskNo && s.Status <= TaskStatusEnum.Doing && s.Type == PLCTypeEnum.ShuttleCar);
+
+                        carTask2= _db.Queryable<WcsCarTasks>().Where(m => m.IsDelete == false && m.TaskNo == modTask.TaskNo && m.CarNo == modDevice.PlcIdIP).OrderBy(m => m.CreateTime).First();
+                    }
+                    else
+                    {
+                        // 鑾峰彇浠诲姟淇℃伅
+                        modTask = _db.Queryable<WcsTask>().Where(s => s.Status <= TaskStatusEnum.Doing && s.Type == PLCTypeEnum.ShuttleCar).OrderBy(m => m.Levels, OrderByType.Asc).OrderBy(m => m.CreateTime).First();
+                        if (modTask == null)
+                        {
+                            return;
+                        }
+                        carTask2 = _db.Queryable<WcsCarTasks>().Where(m => m.IsDelete == false && m.TaskNo == modTask.TaskNo && m.CarNo == modDevice.PlcIdIP).OrderBy(m => m.CreateTime).First();
+                    }
+
+                    //return;
+                    if (modTask == null || carTask2 == null)
+                    {
+                        //鍒ゆ柇灏忚溅鏄惁鏈夌┖闂叉椂闂磋褰� 娌℃湁锛氭坊鍔�  鏈夛細鍒ゆ柇褰撳墠鏃堕棿涓庤褰曟椂闂存槸鍚︽弧瓒�5鍒嗛挓 婊¤冻锛氭坊鍔犺灏忚溅鍘诲厖鐢典换鍔�
                         return;
                     }
-                    if (modTask.Status == TaskStatusEnum.Doing)
+                    
+                    if (carTask2.Status == TaskStatusEnum.Doing)
                     {
                         Thread.Sleep(3000);
                         return;
+                    }
+                    //鍒ゆ柇褰撳墠浠诲姟鏄惁杩樻湁鍓嶇疆浠诲姟鏈畬鎴�
+                    var preStrs = carTask2.PreId.Split(';');
+                    foreach (var preStr in preStrs)
+                    {
+                        if (string.IsNullOrWhiteSpace(preStr))
+                        {
+                            continue;
+                        }
+                        var preId = long.Parse(preStr);
+                        var CarTaskPre = _db.Queryable<WcsCarTasks>().First(m => m.Id == preId);
+                        if (CarTaskPre.Status <= TaskStatusEnum.Doing)
+                        {
+                            return;//鍓嶇疆浠诲姟鏈畬鎴�
+                        }
                     }
                     //鍏堝浣�
                     var modRest = modDevice.listStation.FirstOrDefault(s => s.Text == "澶嶄綅");
                     plcConn.SetDBValue(modRest.PosType, modRest.PlcPos, "1");
 
                     List<Result> listResult = new List<Result>();
-                    //鍐欏叆浠诲姟鍙稩d鐨勬湯4浣嶏紝2涓皬杞︿竴璧疯窇鏈夋瀬浣庢鐜囬噸澶�
+                    //鑾峰彇灏忚溅浠诲姟鍙�
+                    var carTaskNo = FourWayCarUtil.GetTaskNo();
+                    
                     var modWriteTask = modDevice.listStation.FirstOrDefault(s => s.Text == "鍐欏叆浠诲姟鍙�");
-                    listResult.Add(plcConn.SetDBValue(modWriteTask.PosType, modWriteTask.PlcPos, modTask.Id.ToString().Substring(modTask.Id.ToString().Length - 4)));
+                    listResult.Add(plcConn.SetDBValue(modWriteTask.PosType, modWriteTask.PlcPos, carTaskNo.ToString()));
 
                     var modNodeX = modDevice.listStation.FirstOrDefault(s => s.Text == "鑺傜偣鍧愭爣X");
                     var modNodeY = modDevice.listStation.FirstOrDefault(s => s.Text == "鑺傜偣鍧愭爣Y");
@@ -248,37 +299,36 @@
                     int posY = Convert.ToInt32(modNodeY.PlcPos);
                     int posZ = Convert.ToInt32(modNodeZ.PlcPos);
                     int posStatus = Convert.ToInt32(modNodeStatus.PlcPos);
-                    if (Convert.ToInt32(valuey) != Convert.ToInt32(modTask.StartLocate.Substring(2, 2)))
+
+                    //浜や簰璺緞
+                    var execuPath = carTask2.ExecutionPath.Split(';');
+                    if (Convert.ToInt32(valuex) != Convert.ToInt32(execuPath[0].Substring(0, 2)) || Convert.ToInt32(valuey) != Convert.ToInt32(execuPath[0].Substring(2, 2)) || Convert.ToInt32(valuez) != Convert.ToInt32(execuPath[0].Substring(4, 2)))
                     {
-                        //鍐欏叆灏忚溅褰撳墠浣嶇疆
-                        listResult.Add(plcConn.SetDBValue(modNodeX.PosType, posX++.ToString(), Convert.ToString(valuex)));
-                        listResult.Add(plcConn.SetDBValue(modNodeY.PosType, posY++.ToString(), Convert.ToString(valuey)));
-                        listResult.Add(plcConn.SetDBValue(modNodeZ.PosType, posZ++.ToString(), Convert.ToString(valuez)));
-                        listResult.Add(plcConn.SetDBValue(modNodeStatus.PosType, posStatus++.ToString(), "3"));
+                        return; //灏忚溅浣嶇疆涓庤矾寰勮捣濮嬩綅缃笉鍚�
+                        ////鍐欏叆灏忚溅褰撳墠浣嶇疆
+                        //listResult.Add(plcConn.SetDBValue(modNodeX.PosType, posX++.ToString(), Convert.ToString(valuex)));
+                        //listResult.Add(plcConn.SetDBValue(modNodeY.PosType, posY++.ToString(), Convert.ToString(valuey)));
+                        //listResult.Add(plcConn.SetDBValue(modNodeZ.PosType, posZ++.ToString(), Convert.ToString(valuez)));
+                        //listResult.Add(plcConn.SetDBValue(modNodeStatus.PosType, posStatus++.ToString(), "3"));
                     }
-                    //鍐欏叆璧峰浣嶇疆鍙栬揣
-                    listResult.Add(plcConn.SetDBValue(modNodeX.PosType, posX++.ToString(), modTask.StartLocate.Substring(0, 2)));
-                    listResult.Add(plcConn.SetDBValue(modNodeY.PosType, posY++.ToString(), modTask.StartLocate.Substring(2, 2)));
-                    listResult.Add(plcConn.SetDBValue(modNodeZ.PosType, posZ++.ToString(), modTask.StartLocate.Substring(4, 2)));
-                    listResult.Add(plcConn.SetDBValue(modNodeStatus.PosType, posStatus++.ToString(), "2"));
-                    //鍐欏叆鐩爣浣嶇疆鏀捐揣
-                    listResult.Add(plcConn.SetDBValue(modNodeX.PosType, posX++.ToString(), modTask.EndLocate.Substring(0, 2)));
-                    listResult.Add(plcConn.SetDBValue(modNodeY.PosType, posY++.ToString(), modTask.EndLocate.Substring(2, 2)));
-                    listResult.Add(plcConn.SetDBValue(modNodeZ.PosType, posZ++.ToString(), modTask.EndLocate.Substring(4, 2)));
-                    listResult.Add(plcConn.SetDBValue(modNodeStatus.PosType, posStatus++.ToString(), "3"));
-                    string endPos = "";
-                    if (modTask.StartLocate.Substring(0, 2).ToInt() >= 14)
-                        endPos = "01";
-                    else
-                        endPos = "21";
-                    if (listTask.Count == 1 && modTask.EndLocate.Substring(2, 2) != endPos)
+                    
+                    foreach (var ePath in execuPath)
                     {
-                        //濡傛灉鍚庣画娌℃湁浠诲姟锛屽氨璁╁皬杞﹀洖鍒板師浣�
-                        listResult.Add(plcConn.SetDBValue(modNodeX.PosType, posX++.ToString(), modTask.EndLocate.Substring(0, 2)));
-                        listResult.Add(plcConn.SetDBValue(modNodeY.PosType, posY++.ToString(), endPos));//todo:杩欓噷浣嶇疆寰呭畾
-                        listResult.Add(plcConn.SetDBValue(modNodeZ.PosType, posZ++.ToString(), modTask.EndLocate.Substring(4, 2)));
-                        listResult.Add(plcConn.SetDBValue(modNodeStatus.PosType, posStatus++.ToString(), "3"));
+                        if (string.IsNullOrWhiteSpace(ePath))
+                        {
+                            continue;
+                        }
+                        var epathx = ePath.Substring(0, 2);
+                        var epathy = ePath.Substring(2, 2);
+                        var epathz = ePath.Substring(4, 2);
+                        var epathn = ePath.Substring(6, 1);
+                        //鍐欏叆浜や簰浣嶇疆
+                        listResult.Add(plcConn.SetDBValue(modNodeX.PosType, posX++.ToString(), epathx));
+                        listResult.Add(plcConn.SetDBValue(modNodeY.PosType, posY++.ToString(), epathy));
+                        listResult.Add(plcConn.SetDBValue(modNodeZ.PosType, posZ++.ToString(), epathz));
+                        listResult.Add(plcConn.SetDBValue(modNodeStatus.PosType, posStatus++.ToString(), epathn));
                     }
+                    
                     //杩欓噷鏄妸鍚庨潰鐨勫潗鏍囧叏鍐�0锛堜负浜嗛槻姝笂娆′换鍔″潗鏍囨病琚鐩栵級
                     while (posX <= 43097)
                     {
@@ -293,17 +343,18 @@
                         var result = plcConn.SetDBValue(modStart.PosType, modStart.PlcPos, "1");
                         if (result.IsSucceed)
                         {
-                            modTask.Status = TaskStatusEnum.Doing;
-                            _db.Updateable(modTask).ExecuteCommand();
+                            carTask2.Status = TaskStatusEnum.Doing;
+                            carTask2.CarTaskNo = carTaskNo;
+                            _db.Updateable(carTask2).ExecuteCommand();
+                            //娓呴櫎灏忚溅绌洪棽鏃堕棿
                             var taskMonitor = new WcsTaskMonitor()
                             {
-                                TaskNo = modTask.TaskNo,
+                                TaskNo = carTask2.TaskNo,
                                 PlcName = modDevice.Text,
-                                InteractiveMsg = $"鍚戠┛姊溅涓嬪彂浠诲姟{modTask.TaskNo}"
+                                InteractiveMsg = $"鍚戠┛姊溅涓嬪彂浠诲姟{carTask2.TaskNo}"
                             };
                             _db.Insertable(taskMonitor).ExecuteCommand();
                             //涓嬪彂浠诲姟鏃ュ織
-                            HubUtil.PublicTask(modTask.Adapt<WcsTaskOutput>());
                             HubUtil.PublicTaskMonitor(taskMonitor.Adapt<WcsTaskMonitorOutput>());
                         }
                     }
@@ -314,42 +365,42 @@
                     //灏忚溅鐘舵�佸紓甯�
                     var modPosTaskStatus = modDevice.listStation.FirstOrDefault(s => s.Text == "浠诲姟鐘舵��");
                     var (resultTaskStatus, valueTaskStatus) = plcConn.GetDBValue(modPosTaskStatus.PosType, modPosTaskStatus.PlcPos);
+                    
+                    if (resultTaskStatus.IsSucceed && valueTaskStatus == 1)
                     {
-                        if (resultTaskStatus.IsSucceed && valueTaskStatus == 1)
+                        var modPosTask = modDevice.listStation.FirstOrDefault(s => s.Text == "浠诲姟鍙�");
+                        var (resultTask, valueTask) = plcConn.GetDBValue(modPosTask.PosType, modPosTask.PlcPos);
+                        string valueTaskStr = Convert.ToString(valueTask);
+                        string strNo = "";
+                        var boNo = dicTaskNo.TryGetValue(modDevice.Id.ToString(), out strNo);
+                        if (valueTaskStr != "0" && strNo != valueTaskStr)
                         {
-                            var modPosTask = modDevice.listStation.FirstOrDefault(s => s.Text == "浠诲姟鍙�");
-                            var (resultTask, valueTask) = plcConn.GetDBValue(modPosTask.PosType, modPosTask.PlcPos);
-                            string valueTaskStr = Convert.ToString(valueTask);
-                            string strNo = "";
-                            var boNo = dicTaskNo.TryGetValue(modDevice.Id.ToString(), out strNo);
-                            if (valueTaskStr != "0" && strNo != valueTaskStr)
+                            var modFinshTask = _db.Queryable<WcsTask>().First(s => s.Status == TaskStatusEnum.Doing && s.Type == PLCTypeEnum.ShuttleCar && s.Id.ToString().EndsWith(valueTaskStr));
+                            if (modFinshTask != null && modFinshTask.Status != TaskStatusEnum.Complete)
                             {
-                                var modFinshTask = _db.Queryable<WcsTask>().First(s => s.Status == TaskStatusEnum.Doing && s.Type == PLCTypeEnum.ShuttleCar && s.Id.ToString().EndsWith(valueTaskStr));
-                                if (modFinshTask != null && modFinshTask.Status != TaskStatusEnum.Complete)
+                                HttpService httpService = new HttpService();
+                                var requestMode = new TaskRequestWMS()
                                 {
-                                    HttpService httpService = new HttpService();
-                                    var requestMode = new TaskRequestWMS()
-                                    {
-                                        TaskNo = modFinshTask.TaskNo,
-                                        PalletNo = modFinshTask.PalletNo,
-                                        TaskType = ((int)modFinshTask.TaskType).ToString(),
-                                        TaskStatus = ((int)TaskStatusEnum.Complete).ToString()
-                                    };
-                                    var modResponseTask = httpService.RequestTask(requestMode).Result;
-                                    modFinshTask.IsSuccess = TaskSuccessEnum.Success;
-                                    _db.Updateable(modFinshTask).ExecuteCommand();
-                                    //涓嬪彂浠诲姟鏃ュ織
-                                    //HubUtil.PublicTask(modFinshTask.Adapt<WcsTaskOutput>());
-                                    //HubUtil.PublicTaskMonitor(taskMonitor.Adapt<WcsTaskMonitorOutput>());
+                                    TaskNo = modFinshTask.TaskNo,
+                                    PalletNo = modFinshTask.PalletNo,
+                                    TaskType = ((int)modFinshTask.TaskType).ToString(),
+                                    TaskStatus = ((int)TaskStatusEnum.Complete).ToString()
+                                };
+                                var modResponseTask = httpService.RequestTask(requestMode).Result;
+                                modFinshTask.IsSuccess = TaskSuccessEnum.Success;
+                                _db.Updateable(modFinshTask).ExecuteCommand();
+                                //涓嬪彂浠诲姟鏃ュ織
+                                //HubUtil.PublicTask(modFinshTask.Adapt<WcsTaskOutput>());
+                                //HubUtil.PublicTaskMonitor(taskMonitor.Adapt<WcsTaskMonitorOutput>());
 
-                                    if (dicTaskNo.ContainsKey(modDevice.Id.ToString()))
-                                        dicTaskNo.Remove(modDevice.Id.ToString());
-                                    dicTaskNo.Add(modDevice.Id.ToString(), valueTaskStr);
-                                }
+                                if (dicTaskNo.ContainsKey(modDevice.Id.ToString()))
+                                    dicTaskNo.Remove(modDevice.Id.ToString());
+                                dicTaskNo.Add(modDevice.Id.ToString(), valueTaskStr);
                             }
-
                         }
+
                     }
+                    
                     Console.WriteLine($"绌挎杞modDevice.PlcIdIP}寮傚父");
                     var modPosError = modDevice.listStation.FirstOrDefault(s => s.Text == "閿欒鐮�");
                     var (result, valueError) = plcConn.GetDBValue(modPosError.PosType, modPosError.PlcPos);
@@ -599,160 +650,22 @@
     /// <param name="modDevice"></param>
     private static void AGV(WcsDeviceDto modDevice)
     {
-        if (AGVStatus)
-        {
-            return;
-        }
-        //杩欓噷鎵惧嚭鏉GV寰呮墽琛屽拰姝e湪鎵ц鐨勪换鍔★紝濡傛灉鏈夋鍦ㄦ墽琛岀殑浠诲姟灏辫烦鍑猴紝娌℃湁鐨勮瘽灏辨寜鐓т紭鍏堢骇涓嬪彂涓�涓换鍔$粰AGV
-        var listTask = _db.Queryable<WcsTask>()
-                        .Where(s => (s.Status == TaskStatusEnum.Doing || s.Status == TaskStatusEnum.Wait) && s.Type == PLCTypeEnum.AGV)
-                        .OrderBy(s => s.Levels).ToList();
+        
+        //杩欓噷鎵惧嚭鏉GV寰呮墽琛岀殑浠诲姟銆佹寜鐓т紭鍏堢骇涓嬪彂涓�涓换鍔$粰AGV
+        var listTask = _db.Queryable<WcsTask>().Where(s => (s.Status == TaskStatusEnum.Wait || s.Status == TaskStatusEnum.Doing) && s.Type == PLCTypeEnum.AGV).OrderBy(s => s.Levels).ToList();
         if (listTask.Count == 0)
-            return;
-        if (listTask.Any(s => s.Status == TaskStatusEnum.Doing))
         {
-            //鏈変换鍔℃墽琛屼腑 鏆備笉涓嬪彂浠诲姟
             return;
         }
-        //WcsTask modTask = listTask.FirstOrDefault();
+        
         foreach (var modTask in listTask)
         {
-            //鍏ョ紦瀛樺尯鏃讹紝妫�楠屼竴涓嬬紦瀛樺尯浣嶇疆
-            if (modTask.EndLocate.Substring(0, 1) == "Z")
+            if (_db.Queryable<WcsTask>().Any(s => s.EndLocate == modTask.EndLocate && s.IsDelete == false && s.Status == TaskStatusEnum.Doing && s.Type == PLCTypeEnum.AGV ))
             {
-                if (modTask.EndLocate.Substring(1, 1) == "5")
-                {
-                    string end = AGVStorageUtil.GetPalletInStorage(modTask.TaskNo);
-                    if (end.IsNullOrEmpty())
-                        continue;
-                    if (modTask.EndLocate != end)
-                    {
-                        modTask.EndLocate = end;
-                    }
-                }
-                else
-                {
-                    string end = AGVStorageUtil.GetProductInStorage(modTask.TaskNo);
-                    if (end.IsNullOrEmpty())
-                        continue;
-                    if (modTask.EndLocate != end)
-                    {
-                        modTask.EndLocate = end;
-                    }
-                }
+                continue; // 鏈夌洰鐨勪綅缃竴鑷翠笖姝e湪鎵ц鐨勪换鍔�
             }
-            //鍑虹紦瀛樺尯鏃讹紝妫�楠屼竴涓嬬紦瀛樺尯浣嶇疆
-            if (modTask.StartLocate.Substring(0, 1) == "Z")
-            {
-                if (modTask.StartLocate.Substring(1, 1) == "5")
-                {
-                    string start = AGVStorageUtil.GetPalletOutStorage();
-                    if (start.IsNullOrEmpty())
-                        continue;
-                    if (modTask.StartLocate != start)
-                    {
-                        modTask.StartLocate = start;
-                    }
-                }
-                else
-                {
-                    string start = AGVStorageUtil.GetProductOutStorage();
-                    if (start.IsNullOrEmpty())
-                        continue;
-                    if (modTask.StartLocate != start)
-                    {
-                        modTask.StartLocate = start;
-                    }
-                }
-            }
-            //鎶婃墭鐩樻媺鍒扮紦瀛樹綅 鍏堝垽鏂繖閲屾湁娌℃湁
-            if (modTask.EndLocate.Substring(0, 1) == "C")
-            {
-                var bo = _sysConfigService.GetConfigValue<bool>("cache_" + modTask.EndLocate).Result;
-                if (bo)
-                    continue;
-            }
-            //濡傛灉鎷夋墭鐩樺幓鎴愬搧宸ヤ綅锛屽厛妫�鏌ユ湁娌℃湁缂烘墭
-            if (modTask.StartLocate.Substring(0, 1) == "D" && modTask.EndLocate.Substring(0, 1) == "B")
-            {
-                //鍒ゆ柇鐩爣浣嶇疆鏄媶鎵樻満鐨勪换鍔℃湁娌℃湁锛屾湁灏辫烦杩囨媶鎵樻満鍒版垚鍝佸伐浣嶇殑浠诲姟
-                if (listTask.Any(s => s.EndLocate.Substring(0, 1) == "D"))
-                    continue;
-            }
-            //濡傛灉鐩殑宸ヤ綅鏄師鏂欎粨锛屽厛妫�鏌ュ師鏂欎粨鍌ㄤ綅鐘舵��
-            if (modTask.EndLocate == AGVStaionEnum.F1.ToString())
-            {
-                if (_sysConfigService.GetConfigValue<bool>("cache_Materal").Result)
-                    continue;
-            }
-            //if (modTask.StartLocate == AGVStaionEnum.F1.ToString())
-            //{
-            //    if (!_sysConfigService.GetConfigValue<bool>("cache_Materal").Result)
-            //        continue;
-            //}
             
-            //濡傛灉璧峰宸ヤ綅鏄媶鎵樻満
-            if (modTask.StartLocate == AGVStaionEnum.D1.ToString())
-            {
-                //鑾峰彇鍙犳媶鎵樻満IP
-                var modPlc = PLCTaskAction.plcs.FirstOrDefault(s => s.Type == PLCTypeEnum.PalletMachine);
-                //鑾峰彇鍙犳媶鎵樻満宸ヤ綅
-                var modDevice2 = PLCTaskAction.plcDevices.FirstOrDefault(s => s.PlcId == modPlc.Id && s.Text == "鎷嗘墭鏈�");
-                //鎵撳紑杩炴帴
-                var modConn = new PLCUtil(modPlc);
-                //鏄惁鍏佽鍙栨墭淇″彿
-                var modPos = PLCTaskAction.plcPositions.FirstOrDefault(s => s.DeviceId == modDevice2.Id && s.Text == "鍏佽鍙栨墭");
-                var (result, value) = modConn.GetPlcDBValue(modPos.PosType, modDevice2.DbNumber, modPos.PlcPos);
-                if (result.IsSucceed)
-                {
-                    if (value)
-                    {
-                        //濡傛灉鏈畬鎴愬氨鍒ゆ柇涓嬪彇鎵樹俊鍙锋湁娌℃湁鍐欙紝瀹屾垚灏卞彨灏忚溅鍙栨墭鐩�
-                        modPos = PLCTaskAction.plcPositions.FirstOrDefault(s => s.DeviceId == modDevice2.Id && s.Text == "鍙栨墭淇″彿");
-                        (result, value) = modConn.GetPlcDBValue(modPos.PosType, modDevice2.DbNumber, modPos.PlcPos);
-                        //濡傛灉娌″啓鍏ュ彇鎵樹俊鍙凤紝灏卞啓鍏�
-                        if (result.IsSucceed && !value)
-                        {
-                            result = modConn.SetPlcDBValue(modPos.PosType, modDevice2.DbNumber, modPos.PlcPos, "1");
-                            WcsTaskMonitor modTaskMonitor = new WcsTaskMonitor()
-                            {
-                                TaskNo = modTask.TaskNo,
-                                PlcId = modDevice2.PlcId,
-                                PlcName = modPos.PlcPos,
-                                Status = TaskStatusEnum.Doing,
-                                InteractiveMsg = $"鍚憑modDevice2.Text}鍐欏叆鍙栨墭淇″彿1锛岀粨鏋渰result.IsSucceed}",
-                            };
-                            _db.Insertable(modTaskMonitor).ExecuteCommand();
-                            HubUtil.PublicTaskMonitor(modTaskMonitor.Adapt<WcsTaskMonitorOutput>());
-                            Thread.Sleep(5000);
-                        }
-                        break;
-
-                    }
-                    else
-                    {
-                        //涓嶅厑璁稿彇鎵橈紝鍒ゆ柇鏄惁鎷嗘墭鏈哄噯澶囧畬鎴�
-                        modPos = PLCTaskAction.plcPositions.FirstOrDefault(s => s.DeviceId == modDevice2.Id && s.Text == "鍑嗗瀹屾垚");
-                        (result, value) = modConn.GetPlcDBValue(modPos.PosType, modDevice2.DbNumber, modPos.PlcPos);
-                        if (!value)
-                        {
-                            continue;
-                        }
-                    }
-                }
-                else
-                {
-                    Console.WriteLine("杩炴帴鎷嗘墭鏈轰俊鍙峰け璐�");
-                    continue;
-                }
-            }
-            //濡傛灉鐩殑宸ヤ綅鏄彁鍗囨満鏀捐揣宸ヤ綅锛屽厛妫�鏌ユ湁娌℃湁鎵樼洏绾跨殑浠诲姟
-            if (modTask.EndLocate == AGVStaionEnum.A1.ToString())
-            {
-                if (_db.Queryable<WcsTask>().Where(s => s.Type == PLCTypeEnum.ConveyorLine && s.Status == TaskStatusEnum.Doing).Any())
-                    continue;
-            }
-
+            //涓嬪彂AGV浠诲姟
             AgvTaskInput input = new AgvTaskInput()
             {
                 ReqCode = modTask.Id.ToString(),

--
Gitblit v1.8.0