From 94a1a7574f7ce3c61148742cb6f8e6c60a4ed3aa Mon Sep 17 00:00:00 2001
From: chengsc <11752@DESKTOP-DS49RCP>
Date: 星期一, 28 四月 2025 17:19:53 +0800
Subject: [PATCH] 解决冲突

---
 Admin.NET/WCS.Application/PLC/PLCService.cs |  700 ++++++++++++++++++++++++++++++++++++++++++++--------------
 1 files changed, 531 insertions(+), 169 deletions(-)

diff --git a/Admin.NET/WCS.Application/PLC/PLCService.cs b/Admin.NET/WCS.Application/PLC/PLCService.cs
index 0f852e9..f62f828 100644
--- a/Admin.NET/WCS.Application/PLC/PLCService.cs
+++ b/Admin.NET/WCS.Application/PLC/PLCService.cs
@@ -422,226 +422,588 @@
     {
         var plcConn = modDevice.PLCUtil;
 
+        var ledText = "";
         switch (modDevice.Value.ToString())
         {
-            case "20":
+            case "320":
                 {
-                    //灏忚溅璇锋眰寮�鍗峰笜闂� 杩欓噷鏀规垚娴峰悍鐩存帴璋冪敤妯″潡 杩欓噷涓嶉渶瑕佷簡
-                    string Devicelndex = "";
-                    if (modDevice.Text == "2鍙峰嵎甯橀棬")
-                        Devicelndex = "222";
-                    else if (modDevice.Text == "3鍙峰嵎甯橀棬")
-                        Devicelndex = "111";
-                    var modCallBack = sysCacheService.Get<AGVApplyLockInput>("OpenDoor" + Devicelndex);
-                    if (modCallBack != null)
+                    // 鐢宠瀵嗛泦搴撶粍
+                    string strMsg = "";
+                    string taskModel = "";
+
+                    // 鑾峰彇宸ヤ綅鎵樼洏鐮佷俊鎭�
+                    var modPosPallet = modDevice.listStation.FirstOrDefault(m => m.Text == "鎵樼洏鐮�");
+                    var (res, palletVal) = plcConn.GetPlcDBValue(PLCDataTypeEnum.String, modDevice.DbNumber, modPosPallet.PlcPos);
+                    if (!res.IsSucceed)
                     {
-                        var modAgvDevice = PLCTaskAction.plcs.FirstOrDefault(s => s.Text == "AGV");
-                        AgvNotifyInput input = new AgvNotifyInput()
+                        break;
+                    }
+                    var modPosEndLocat = modDevice.listStation.FirstOrDefault(s => s.Text == "鐩殑宸ヤ綅");
+
+                    //鍒ゆ柇鍏ュ簱閿佸畾鏄惁鎵撳紑
+                    if (PLCTaskAction.boEnterLock)
+                    {
+                        var (res350, palletVal350) = plcConn.GetPlcDBValue(PLCDataTypeEnum.String, modDevice.DbNumber, modPosPallet.PlcPos);
+                        if (res350.IsSucceed && palletVal350 != "350")
                         {
-                            ActionStatus = "1",
-                            DeviceIndex = Devicelndex,
-                            UUID = modCallBack.UUID,
-                        };
-                        var response = new HttpService().NotifyExcuteResultInfo(input).Result;
-                        if (response.code == 0)
+                            ledText += $"鐢宠鍏ュ簱澶辫触\n\n";
+                            ledText += $"鎵樼洏鍙�:{palletVal}\n";
+                            ledText += $"鍏ュ簱浠诲姟宸查攣瀹氾紝璇疯В閿佸悗閲嶈瘯!\n";
+                            LedDisplay(modDevice.LedIP, ledText);
+                        }
+
+                        // 鍐欏叆杈撻�佺嚎閫�鍥炴寚浠�
+                        var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modPosEndLocat.PlcPos, modDevice.StationNum);
+                        if (ret.IsSucceed)
                         {
-                            sysCacheService.Remove("OpenDoor" + Devicelndex);
+                            plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "350");
+                        }
+
+                        break;
+                    }
+
+                    if (palletVal == null)
+                    {
+                        var (res350, palletVal350) = plcConn.GetPlcDBValue(PLCDataTypeEnum.String, modDevice.DbNumber, modPosPallet.PlcPos);
+                        if (res350.IsSucceed && palletVal350 != "350")
+                        {
+                            ledText += $"鐢宠鍏ュ簱澶辫触\n\n";
+                            ledText += $"鎵樼洏鍙�:{palletVal}\n";
+                            ledText += $"鎵弿鎵樼洏鍙峰け璐�!\n";
+                            LedDisplay(modDevice.LedIP, ledText);
+                        }
+
+                        // 鍐欏叆杈撻�佺嚎閫�鍥炴寚浠�
+                        var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modPosEndLocat.PlcPos, modDevice.StationNum);
+                        if (ret.IsSucceed)
+                        {
+                            plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "350");
+                        }
+
+                        break;
+                    }
+
+                    var http = new HttpService();
+                    string TaskNo = "", EndLocate = "";
+                    strMsg = http.RequestRoadWay(palletVal, modDevice.StationNum, taskModel, "1", ref EndLocate, ref TaskNo);
+                    if (!strMsg.Contains("-1"))
+                    {
+                        // 鏍规嵁浠诲姟鍙疯幏鍙栬捣濮嬪伐浣嶅湴鍧�锛屾牴鎹捣濮嬪伐浣嶅湴鍧�鑾峰彇LEDIP 鎺ㄩ�佸埌LED灞忓箷銆�
+                        var taskInfo = _db.Queryable<WcsTask>().First(w => w.TaskNo == TaskNo);
+                        modDevice.LedIP = _db.Queryable<WcsDevice>()
+                            .Where(w => w.StationNum == taskInfo.StartLocate)
+                            .Select(s => s.LedIP).First();
+
+                        // 鍐欏叆330
+                        var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "330");
+                        if (ret.IsSucceed)
+                        {
+                            // 鎻掑叆浠诲姟鏄庣粏 
+                            var modInsertTaskMonitor = new WcsTaskMonitor()
+                            {
+                                TaskNo = TaskNo,
+                                PlcId = modDevice.Id,
+                                PlcName = modDevice.Text,
+                                InteractiveMsg = $"鍐欏叆鎸囦护330锛歿modDevice.StationNum}宸ヤ綅鐢宠宸烽亾",
+                                PalletNo = palletVal,
+                                Status = TaskStatusEnum.Complete,
+                                StartLocat = modDevice.StationNum,
+                                EndLocat = EndLocate,
+                            };
+                            // 鎻掑叆浜や簰鏃ュ織
+                            _db.Insertable(modInsertTaskMonitor).ExecuteCommand();
+
+
+                            // 閫氱煡浠诲姟鐣岄潰浠诲姟宸插瓨鍦ㄦ洿鏂� 璇锋洿鏂扮晫闈�
+                            HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>());
+                            // led鏄剧ず鍐呭
+                            try
+                            {
+                                ledText += $"浠诲姟绫诲瀷:{taskInfo.TaskType.GetDescription()}\n\n";
+
+                                ledText += $"浠诲姟鍙�:{taskInfo.TaskNo}\n";
+                                ledText += $"鎵樼洏鍙�:{taskInfo.PalletNo}\n\n";
+
+                                ledText += $"璧峰浣�:{taskInfo.StartRoadway + " " + taskInfo.StartLocate}\n";
+                                ledText += $"鐩爣浣�:{taskInfo.EndRoadway + " " + taskInfo.EndLocate}";
+                                LedDisplay(modDevice.LedIP, ledText);
+
+                            }
+                            catch (Exception ex)
+                            {
+                                Log.Error(ex.Message);
+                            }
+
+                        }
+
+                    }
+                    else
+                    {
+                        var (res350, palletVal350) = plcConn.GetPlcDBValue(PLCDataTypeEnum.String, modDevice.DbNumber, modPosPallet.PlcPos);
+                        if (res350.IsSucceed && palletVal350 != "350")
+                        {
+                            ledText += $"鐢宠鍏ュ簱澶辫触\n\n";
+                            ledText += $"鎵樼洏鍙�:{palletVal}\n";
+                            ledText += $"{strMsg}\n";
+                            LedDisplay(modDevice.LedIP, ledText);
+                        }
+
+                        // 鍐欏叆杈撻�佺嚎閫�鍥炴寚浠�
+                        var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modPosEndLocat.PlcPos, modDevice.StationNum);
+                        if (ret.IsSucceed)
+                        {
+                            plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "350");
                         }
                     }
                 }
                 break;
-            case "100":
+            case "330":
                 {
-                    //宸ヤ綅瀵瑰簲 1=A 4=B 10=C
-                    string stationNum = "";
-                    if (modDevice.StationNum == "1" || modDevice.StationNum == "4")
+                    // 鑾峰彇宸ヤ綅鎵樼洏鐮佷俊鎭�
+                    var modPosPallet = modDevice.listStation.FirstOrDefault(m => m.Text == "鎵樼洏鐮�");
+                    var (res, palletVal) = plcConn.GetPlcDBValue(PLCDataTypeEnum.String, modDevice.DbNumber, modPosPallet.PlcPos);
+                    if (!res.IsSucceed)
                     {
-                        stationNum = "10";
-                        //鍒ゆ柇鏈夋病鏈夊皬杞﹀埌C鍙g殑浠诲姟锛屽鏋滄湁灏卞啓120
-                        var countTask = _db.Queryable<WcsTask>().Where(s => s.Status == TaskStatusEnum.Doing && s.Type == PLCTypeEnum.AGV && s.EndLocate == "A1").Count();
-                        if (countTask != 0)
-                        {
-                            var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "120");
-                            Log.Information($"鍚憄lc{modDevice.PlcIdIP}鍐欏叆120锛岀粨鏋滐細{ret.ToJson()}");
-                            return;
-                        }
+                        break;
                     }
-                    string strPalletNo = "";
-                    if (modDevice.StationNum == "10" || modDevice.StationNum == "4")
+                    string pallet = palletVal.ToString();
+                    // 鑾峰彇浠诲姟淇℃伅
+                    var modTask = _db.Queryable<WcsTask>().First(s => s.IsDelete == false 
+                    && s.PalletNo == pallet 
+                    && s.Type == PLCTypeEnum.ConveyorLine 
+                    && (s.Status == TaskStatusEnum.Wait || s.Status == TaskStatusEnum.Doing) 
+                    && s.TaskType == TaskTypeEnum.In);
+
+                    if (modTask == null)
                     {
-                        var modPosPallet = modDevice.listStation.First(s => s.Text == "鎵樼洏鏉$爜");
-                        //todo:杩欓噷璇荤爜鍣ㄨ�佽涓嶅埌鏉$爜淇℃伅 鍏堝啓姝� 璇荤爜鍣ㄩ棶棰樿В鍐充簡鍙互娉ㄩ噴鎺�
-                        //plcConn.SetPlcDBValue(modPosPallet.PosType, modDevice.DbNumber, modPosPallet.PlcPos, "T2400001");
-                        var (res, palletNo) = plcConn.GetPlcDBValue(modPosPallet.PosType, modDevice.DbNumber, modPosPallet.PlcPos, modPosPallet.StringLength);
-                        if (!res.IsSucceed || palletNo == "")
-                        {
-                            var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "120");
-                            Log.Information($"鍚憄lc{modDevice.PlcIdIP}鍐欏叆120锛岀粨鏋滐細{ret.ToJson()}");
-                            return;
-                        }
-                        strPalletNo = Convert.ToString(palletNo);
+                        // 姝ゆ墭鐩樻病鏈夊搴旂殑杞Щ浠诲姟 led鏄剧ず
+                        break;
                     }
-                    if (modDevice.StationNum == "10")
+                    //鍒ゆ柇鍏ュ簱閿佸畾鏄惁鎵撳紑
+                    if (PLCTaskAction.boEnterLock)
                     {
-                        if (strPalletNo.Substring(0, 1) == "T")
-                            stationNum = "4";
-                        else
-                            stationNum = "1";
+                        break;//鍏ュ簱閿佸畾鎵撳紑鍒欎笉鎵ц鍏ュ簱浠诲姟
                     }
 
-                    // 鍐欏叆鎵樼洏杈撻�佺嚎鐮佸灈宸ヤ綅
+                    // 鑾峰彇鍥涢」杞﹀彇璐у伐浣�
+                    string endLocatVlue = PLCCommon.RoadwayToStationNum(modTask.EndRoadway, modDevice.StationNum);
+
+
+
+                    // 缁橮LC鍐欏叆浠诲姟鏁版嵁
                     var listResult = new List<Result>();
-                    // 鍐欏叆鎵樼洏杈撻�佺嚎鐮佸灈宸ヤ綅 鐩殑宸ヤ綅銆佷换鍔″彿锛屽啓鍏ヤ氦浜掓祦绋嬬粍鎵樻垚鍔�
-                    var posModel = modDevice.listStation.First(m => m.Text == "璧峰宸ヤ綅");
-                    listResult.Add(plcConn.SetPlcDBValue(posModel.PosType, modDevice.DbNumber, posModel.PlcPos, modDevice.StationNum));
-                    var posModel2 = modDevice.listStation.First(m => m.Text == "鐩爣宸ヤ綅");
-                    listResult.Add(plcConn.SetPlcDBValue(posModel2.PosType, modDevice.DbNumber, posModel2.PlcPos, stationNum));
-                    string taskNo = _taskService.GetTaskCode("WCS");
-                    var modPosTask = modDevice.listStation.First(s => s.Text == "浠诲姟鍙�");
-                    listResult.Add(plcConn.SetPlcDBValue(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos, taskNo));
+                    // 浠诲姟鍙枫�佷换鍔$被鍨嬨�佹墭鐩樺彿
+                    var modPosTask = modDevice.listStation.FirstOrDefault(s => s.Text == "浠诲姟鍙�");
+                    listResult.Add(plcConn.SetPlcDBValue(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos, modTask.TaskId.ToString()));
+                    var modPosTaskType = modDevice.listStation.FirstOrDefault(s => s.Text == "浠诲姟绫诲瀷");
+                    var taskTypeStr = (int)modTask.TaskType;
+                    listResult.Add(plcConn.SetPlcDBValue(modPosTaskType.PosType, modDevice.DbNumber, modPosTaskType.PlcPos, taskTypeStr.ToString()));
+                    var modPosPalletNo = modDevice.listStation.FirstOrDefault(s => s.Text == "鎵樼洏鐮�");
+                    listResult.Add(plcConn.SetPlcDBValue(modPosPalletNo.PosType, modDevice.DbNumber, modPosPalletNo.PlcPos, modTask.PalletNo));
+                    // 璧峰宸ヤ綅銆佺洰鐨勫伐浣�
+                    var modPosStrLocat = modDevice.listStation.FirstOrDefault(s => s.Text == "璧峰宸ヤ綅");
+                    listResult.Add(plcConn.SetPlcDBValue(modPosStrLocat.PosType, modDevice.DbNumber, modPosStrLocat.PlcPos, modDevice.StationNum));
+                    var modPosEndLocat = modDevice.listStation.FirstOrDefault(s => s.Text == "鐩殑宸ヤ綅");
+                    listResult.Add(plcConn.SetPlcDBValue(modPosEndLocat.PosType, modDevice.DbNumber, modPosEndLocat.PlcPos, endLocatVlue));
+
 
                     if (listResult.All(s => s.IsSucceed))
                     {
-                        var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "130");
-                        Log.Information($"鍚憄lc{modDevice.PlcIdIP}鍐欏叆130锛岀粨鏋滐細{ret.ToJson()}");
+                        // 灏嗕换鍔$姸鎬佸彉鏇翠负姝e湪鎵ц
+                        _db.Updateable<WcsTask>()
+                           .SetColumns(s => s.Status == TaskStatusEnum.Doing)
+                           .Where(s => s.Id == modTask.Id)
+                           .ExecuteCommand();
+                        // 鍐欏叆娴佺▼瀛� 330 340
+
+                        var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "340");
+
+                        // 鏍规嵁浠诲姟鍙疯幏鍙栬捣濮嬪伐浣嶅湴鍧�锛屾牴鎹捣濮嬪伐浣嶅湴鍧�鑾峰彇LEDIP 鎺ㄩ�佸埌LED灞忓箷銆�
+                        modDevice.LedIP = _db.Queryable<WcsDevice>().Where(w => w.StationNum == modTask.StartLocate).Select(s => s.LedIP).First();
+
                         if (ret.IsSucceed)
                         {
-                            AddWcsTaskInput modTask = new AddWcsTaskInput()
-                            {
-                                TaskNo = taskNo,
-                                TaskType = TaskTypeEnum.In,
-                                PalletNo = strPalletNo,
-                                Status = TaskStatusEnum.Doing,
-                                IsSuccess = TaskSuccessEnum.Fail,
-                                StartLocate = modDevice.StationNum,
-                                EndLocate = stationNum,
-                                Type = PLCTypeEnum.ConveyorLine,
-                            };
-                            _taskService.Add(modTask);
-                            WcsTaskMonitor modTaskMonitor = new WcsTaskMonitor()
+                            // 鎻掑叆浠诲姟鏄庣粏 
+                            var modInsertTaskMonitor = new WcsTaskMonitor()
                             {
                                 TaskNo = modTask.TaskNo,
-                                PlcId = modDevice.PlcId,
+                                PlcId = modDevice.Id,
                                 PlcName = modDevice.Text,
+                                InteractiveMsg = $"鍐欏叆鎸囦护340锛歿modDevice.StationNum}鍌ㄤ綅====銆媨endLocatVlue}宸ヤ綅",
+                                PalletNo = palletVal,
+                                Status = TaskStatusEnum.Complete,
                                 StartLocat = modDevice.StationNum,
-                                EndLocat = stationNum,
-                                Status = TaskStatusEnum.Doing,
-                                InteractiveMsg = $"鍚憑modDevice.Text}鍐欏叆鎸囦护130锛岀粨鏋渰ret.IsSucceed}",
+                                EndLocat = endLocatVlue,
                             };
-                            _db.Insertable(modTaskMonitor).ExecuteCommand();
 
-                            //涓嬪彂浠诲姟鏃ュ織
-                            HubUtil.PublicTask(modTask.Adapt<WcsTaskOutput>());
-                            HubUtil.PublicTaskMonitor(modTaskMonitor.Adapt<WcsTaskMonitorOutput>());
+                            // 鎻掑叆浜や簰鏃ュ織
+                            _db.Insertable(modInsertTaskMonitor).ExecuteCommand();
+
+                            // 閫氱煡浠诲姟鐣岄潰浠诲姟宸插瓨鍦ㄦ洿鏂� 璇锋洿鏂扮晫闈�
+                            HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>());
                         }
                     }
                 }
                 break;
-            case "140":
+            case "620":
                 {
-                    var modPosTask = modDevice.listStation.First(m => m.Text == "浠诲姟鍙�");
-                    var (result, taskNo) = plcConn.GetPlcDBValue(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos, modPosTask.StringLength);
-                    var modPosPallet = modDevice.listStation.First(m => m.Text == "鎵樼洏鏉$爜");
-                    var (res, palletNo) = plcConn.GetPlcDBValue(modPosPallet.PosType, modDevice.DbNumber, modPosPallet.PlcPos, modPosPallet.StringLength);
-                    WcsTaskMonitor modTaskMonitor = new WcsTaskMonitor();
-                    WcsTask modTask = new WcsTask();
-                    if (!result.IsSucceed)
+                    // 鐢宠鍌ㄤ綅 鏇存柊鍏ュ簱浠诲姟(鍌ㄤ綅鍦板潃) 630
+                    var strMsg = "";
+                    var taskModel = "";
+
+                    //// 鏍规嵁宸ヤ綅鍙疯幏鍙栧贩閬撳彿
+                    //var roadway = PLCCommon.GetRoadwayByStation(modDevice.StationNum);
+                    //if (roadway == "")
+                    //{
+                    //    break;
+                    //}
+                    // 鑾峰彇宸ヤ綅鎵樼洏鐮佷俊鎭�
+                    var modPosPallet = modDevice.listStation.FirstOrDefault(m => m.Text == "鎵樼洏鐮�");
+                    var (res, palletVal) = plcConn.GetPlcDBValue(PLCDataTypeEnum.String, modDevice.DbNumber, modPosPallet.PlcPos);
+                    if (!res.IsSucceed)
                     {
-                        Log.Error($"{plcConn.PlcIP}璇诲彇浠诲姟鍙峰け璐�");
-                        return;
+                        break;
                     }
-                    if (modDevice.StationNum == "10")
+                    var http = new HttpService();
+                    string TaskNo = "";
+                    // 鍚慦MS鐢宠鍌ㄤ綅淇℃伅
+                    strMsg = http.RequestLocate(palletVal, modDevice.StationNum, taskModel, "roadway", ref TaskNo);
+
+                    if (!strMsg.Contains("-1"))
                     {
-                        var posModel = modDevice.listStation.First(m => m.Text == "璧峰宸ヤ綅");
-                        var (resultS, station) = plcConn.GetPlcDBValue(posModel.PosType, modDevice.DbNumber, posModel.PlcPos);
-                        if (resultS.IsSucceed)
+                        // 鏍规嵁浠诲姟鍙疯幏鍙栬捣濮嬪伐浣嶅湴鍧�锛屾牴鎹捣濮嬪伐浣嶅湴鍧�鑾峰彇LEDIP 鎺ㄩ�佸埌LED灞忓箷銆�
+                        var taskInfo = _db.Queryable<WcsTask>().First(w => w.TaskNo == TaskNo);
+                        modDevice.LedIP = _db.Queryable<WcsDevice>().Where(w => w.StationNum == taskInfo.StartLocate).Select(s => s.LedIP).First();
+                        // 鍐欏叆娴佺▼瀛� 630
+                        var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "630");
+
+                        if (ret.IsSucceed)
                         {
-                            if (station == 1)
+                            // 鎻掑叆浠诲姟鏄庣粏 
+                            var modInsertTaskMonitor = new WcsTaskMonitor()
                             {
-                                WcsTask modInsertTask = new WcsTask()
-                                {
-                                    TaskNo = _taskService.GetTaskCode(),
-                                    TaskType = TaskTypeEnum.Move,
-                                    Type = PLCTypeEnum.AGV,
-                                    StartLocate = AGVStaionEnum.A1.ToString(),
-                                    EndLocate = AGVStaionEnum.F1.ToString(),
-                                    PalletNo = modTask.PalletNo,
-                                    Status = TaskStatusEnum.Wait,
-                                    Levels = 5,
-                                    Origin = "WCS"
-                                };
-                                _db.Insertable(modInsertTask).ExecuteCommand();
-                                HubUtil.PublicTask(modInsertTask.Adapt<WcsTaskOutput>());
-                            }
-                            else if (station == 4)
-                            {
-                                WcsTask modInsertTask = new WcsTask()
-                                {
-                                    TaskNo = _taskService.GetTaskCode(),
-                                    TaskType = TaskTypeEnum.Move,
-                                    Type = PLCTypeEnum.AGV,
-                                    StartLocate = AGVStaionEnum.A1.ToString(),
-                                    EndLocate = AGVStorageUtil.GetPalletInStorage(),
-                                    PalletNo = modTask.PalletNo,
-                                    Status = TaskStatusEnum.Wait,
-                                    Levels = 5,
-                                    Origin = "WCS"
-                                };
-                                _db.Insertable(modInsertTask).ExecuteCommand();
-                                HubUtil.PublicTask(modInsertTask.Adapt<WcsTaskOutput>());
-                            }
-                        }
-                        else
-                        {
-                            Log.Error("鑾峰彇璧峰宸ヤ綅澶辫触锛屽け璐ュ師鍥�" + resultS.Err);
-                            return;
+                                TaskNo = TaskNo,
+                                PlcId = modDevice.Id,
+                                PlcName = modDevice.Text,
+                                InteractiveMsg = $"鍐欏叆鎸囦护340锛歿modDevice.StationNum}宸ヤ綅鐢宠鍌ㄤ綅",
+                                PalletNo = palletVal,
+                                Status = TaskStatusEnum.Complete,
+                                StartLocat = modDevice.StationNum,
+                                EndLocat = strMsg,
+                            };
+
+                            // 鎻掑叆浜や簰鏃ュ織
+                            _db.Insertable(modInsertTaskMonitor).ExecuteCommand();
+
+                            // 閫氱煡浠诲姟鐣岄潰浠诲姟宸插瓨鍦ㄦ洿鏂� 璇锋洿鏂扮晫闈�
+                            HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>());
+
+                            var ledDevice = PLCTaskAction.plcDevices.First(m => m.StationNum == modDevice.StationNum && m.IsDelete == false && m.DeviceType == DeviceTypeEnum.Business);
+                            ledText += $"浠诲姟绫诲瀷:{taskInfo.TaskType.GetDescription()}\n\n";
+                            ledText += $"浠诲姟鍙�:{taskInfo.TaskNo}\n";
+                            ledText += $"鎵樼洏鍙�:{taskInfo.PalletNo}\n\n";
+                            ledText += $"璧峰浣�:{taskInfo.StartRoadway + " " + taskInfo.StartLocate}\n";
+                            ledText += $"鐩爣浣�:{taskInfo.EndRoadway + " " + taskInfo.EndLocate}";
+                            LedDisplay(modDevice.LedIP, ledText);
                         }
                     }
-                    var ledText = "";
-                    if (modDevice.StationNum == "4")
+                    else
                     {
-                        //todo:led
-                        ledText += "浠诲姟绫诲瀷:鍏ュ簱\n\n";
-                        ledText += $"浠诲姟鍙�:{taskNo}\n";
-                        ledText += $"鎵樼洏鍙�:{palletNo}\n\n";
-                        //ledText += $"璧峰浣�:10\n";
-                        //ledText += $"鐩爣浣�:4";
+                        // 鐢宠鍌ㄤ綅澶辫触锛丩ED鏄剧ず
+                        Log.Error(string.Format($"鐢宠鍌ㄤ綅澶辫触:{strMsg},璇诲啓plc閿欒"));
+                        // led鏄剧ず鍐呭
+                        var ledDevice = PLCTaskAction.plcDevices.First(m => m.StationNum == modDevice.StationNum && m.IsDelete == false && m.DeviceType == DeviceTypeEnum.Business);
+                        ledText += $"鐢宠鍏ュ簱澶辫触\n\n";
+                        ledText += $"{strMsg}\n";
                         LedDisplay(modDevice.LedIP, ledText);
                     }
-                    var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "150");
-                    Log.Information($"鍚憄lc{modDevice.PlcIdIP}鍐欏叆150锛岀粨鏋滐細{ret.ToJson()}");
-                    if (ret.IsSucceed)
-                    {
-                        string strTaskNo = taskNo;
-                        modTask = _db.Queryable<WcsTask>().First(s => s.TaskNo == strTaskNo);
-                        if (modTask != null)
-                        {
-                            modTaskMonitor = new WcsTaskMonitor()
-                            {
-                                TaskNo = modTask.TaskNo,
-                                PlcId = modDevice.PlcId,
-                                PlcName = modDevice.Text,
-                                StartLocat = modTask.StationNum,
-                                EndLocat = modTask.EndLocate,
-                                InteractiveMsg = $"鍚憑modDevice.Text}鍐欏叆鎸囦护150锛岀粨鏋渰ret.IsSucceed}",
-                            };
-                            modTaskMonitor.Status = TaskStatusEnum.Complete;
-                            _db.Insertable(modTaskMonitor).ExecuteCommand();
-                            modTask.FinishDate = DateTime.Now;
-                            modTask.Status = TaskStatusEnum.Complete;
-                            _db.Updateable(modTask).ExecuteCommand();
 
-                            //涓嬪彂浠诲姟鏃ュ織
-                            HubUtil.PublicTask(modTask.Adapt<WcsTaskOutput>());
-                            HubUtil.PublicTaskMonitor(modTaskMonitor.Adapt<WcsTaskMonitorOutput>());
-                        }
-                    }
+                }
+                break;
+            case "630":
+                {
+                    #region plc鍏夌數鎵弿涓嶅埌鎵樼洏鍚� 鑷姩娓呬俊鎭�
+
+                    //// 鑾峰彇宸ヤ綅鎵樼洏鐮佷俊鎭�
+                    //var modPosPallet = modDevice.listStation.FirstOrDefault(m => m.Text == "鎵樼洏鐮�");
+                    //var (res, palletVal) = plcConn.GetPlcDBValue(PLCDataTypeEnum.String, modDevice.DbNumber, modPosPallet.PlcPos);
+                    //// 鑾峰彇宸ヤ綅浠诲姟鍙蜂俊鎭�
+                    //var modPosTaskNo = modDevice.listStation.FirstOrDefault(m => m.Text == "浠诲姟鍙�");
+                    //var (taskRes, taskNoVal) = plcConn.GetPlcDBValue(PLCDataTypeEnum.String, modDevice.DbNumber, modPosTaskNo.PlcPos);
+                    //if (!res.IsSucceed || !taskRes.IsSucceed)
+                    //{
+                    //    break;
+                    //}
+                    //string pallet = palletVal.ToString();
+                    //string taskNo = taskNoVal.ToString();
+                    //// 鑾峰彇浠诲姟淇℃伅
+                    //var modTask = _db.Queryable<WcsTask>().First(s => s.IsDelete == false && s.PalletNo == pallet && s.Status == TaskStatusEnum.Doing && s.TaskType == TaskTypeEnum.In && s.TaskNo == taskNo);
+                    //if (modTask == null)
+                    //{
+                    //    // 姝ゆ墭鐩樻病鏈夊搴旂殑杞Щ浠诲姟 led鏄剧ず
+                    //    break;
+                    //}
+
+                    //var sInfo = PLCCommon.GetStokePlc(modTask.EndRoadway, louCeng);
+                    //if (string.IsNullOrWhiteSpace(sInfo.Ip))
+                    //{
+                    //    //闇�鍔犱笂LED鏄剧ず
+                    //    Log.Error(string.Format($"鏍规嵁宸烽亾鑾峰彇璺烘満IP澶辫触锛岃鑱旂郴绠$悊鍛�"));
+                    //    break;
+                    //}
+                    //// 璺烘満杩炴帴
+                    //var plcStackeConn = PLCTaskAction.listPlcConn.First(m => m.PlcIP == sInfo.Ip);
+                    //if (plcStackeConn.Connected)
+                    //{
+                    //    // 鐩爣鎺掑垪灞�
+                    //    var endLocate = modTask.EndLocate;
+                    //    if (string.IsNullOrWhiteSpace(modTask.EndLocate))
+                    //    {
+                    //        Log.Error(string.Format($"鐩爣浣嶇疆涓虹┖锛岃浜哄伐澶勭悊,璇诲啓plc閿欒"));
+                    //        break;
+                    //    }
+
+                    //    // 杞崲鐩爣宸ヤ綅鎺掑垪灞� 03010301
+                    //    var paiVal = PLCCommon.GetDjAdress(modTask.EndRoadway.Substring(1, 2), endLocate.Substring(0, 2), endLocate.Substring(6, 2));
+                    //    string pai = paiVal.ToString();
+                    //    string lie = int.Parse(endLocate.Substring(2, 2)).ToString();
+                    //    string ceng = int.Parse(endLocate.Substring(4, 2)).ToString();
+
+                    //    var djmodel = _db.Queryable<WcsPlc>().First(m => m.IP == sInfo.Ip);
+
+                    //    var djMod = PLCTaskAction.plcDevices.First(m => m.PlcId == djmodel.Id
+                    //        && m.DeviceType == DeviceTypeEnum.Business && m.IsDelete == false);
+                    //    var djInfos = PLCTaskAction.plcPositions.Where(m => m.IsDelete == false && m.DeviceId == djMod.Id).ToList();
+                    //    var djInfo = djInfos.First(m => m.Text == "PLC娴佺▼瀛�");
+
+                    //    // 鑾峰彇璺烘満褰撳墠鐘舵��
+                    //    var (djRes, djVal) = plcStackeConn.GetPlcDBValue(djMod.PosType, djMod.DbNumber, djMod.PlcPos);
+
+                    //    if (!djRes.IsSucceed || djVal.ToString() != "820")
+                    //    {
+                    //        // 璺烘満闈炵┖闂茬瓑寰�
+                    //        break;
+                    //    }
+                    //    // 缁橮LC鍐欏叆浠诲姟鏁版嵁
+                    //    var listResult = new List<Result>();
+
+                    //    // 浠诲姟鍙枫�佷换鍔$被鍨嬨�佹墭鐩樺彿
+                    //    var modPosTask = djInfos.FirstOrDefault(s => s.Text == "浠诲姟鍙�");
+                    //    listResult.Add(plcStackeConn.SetPlcDBValue(modPosTask.PosType, djMod.DbNumber, modPosTask.PlcPos, modTask.TaskNo));
+                    //    var modPosTaskType = djInfos.FirstOrDefault(s => s.Text == "浠诲姟绫诲瀷");
+                    //    var taskTypeStr = (int)modTask.TaskType;
+                    //    listResult.Add(plcStackeConn.SetPlcDBValue(modPosTaskType.PosType, djMod.DbNumber, modPosTaskType.PlcPos, taskTypeStr.ToString()));
+                    //    var modPosPalletNo = djInfos.FirstOrDefault(s => s.Text == "鎵樼洏鐮�");
+                    //    listResult.Add(plcStackeConn.SetPlcDBValue(modPosPalletNo.PosType, djMod.DbNumber, modPosPalletNo.PlcPos, modTask.PalletNo));
+
+                    //    //璧峰宸ヤ綅
+                    //    var modPosStrStationNum = djInfos.FirstOrDefault(s => s.Text == "璧峰宸ヤ綅");
+                    //    listResult.Add(plcStackeConn.SetPlcDBValue(modPosStrStationNum.PosType, djMod.DbNumber, modPosStrStationNum.PlcPos, modDevice.StationNum));
+
+                    //    //鍙栬揣鎺掋�佸垪銆佸眰
+                    //    var modPosStrPai = djInfos.FirstOrDefault(s => s.Text == "鍙栬揣鎺�");
+                    //    listResult.Add(plcStackeConn.SetPlcDBValue(modPosStrPai.PosType, djMod.DbNumber, modPosStrPai.PlcPos, sInfo.Pai));
+                    //    var modPosStrLie = djInfos.FirstOrDefault(s => s.Text == "鍙栬揣鍒�");
+                    //    listResult.Add(plcStackeConn.SetPlcDBValue(modPosStrLie.PosType, djMod.DbNumber, modPosStrLie.PlcPos, sInfo.Lie));
+                    //    var modPosStrCeng = djInfos.FirstOrDefault(s => s.Text == "鍙栬揣灞�");
+                    //    listResult.Add(plcStackeConn.SetPlcDBValue(modPosStrCeng.PosType, djMod.DbNumber, modPosStrCeng.PlcPos, sInfo.Ceng));
+                    //    //鏀捐揣鎺掋�佸垪銆佸眰
+                    //    var modPosEndPai = djInfos.FirstOrDefault(s => s.Text == "鏀捐揣鎺�");
+                    //    listResult.Add(plcStackeConn.SetPlcDBValue(modPosEndPai.PosType, djMod.DbNumber, modPosEndPai.PlcPos, pai));
+                    //    var modPosEndLie = djInfos.FirstOrDefault(s => s.Text == "鏀捐揣鍒�");
+                    //    listResult.Add(plcStackeConn.SetPlcDBValue(modPosEndLie.PosType, djMod.DbNumber, modPosEndLie.PlcPos, lie));
+                    //    var modPosEndCeng = djInfos.FirstOrDefault(s => s.Text == "鏀捐揣灞�");
+                    //    listResult.Add(plcStackeConn.SetPlcDBValue(modPosEndCeng.PosType, djMod.DbNumber, modPosEndCeng.PlcPos, ceng));
+
+                    //    if (listResult.All(s => s.IsSucceed))
+                    //    {
+                    //        // 鍐欏叆璺烘満 830
+                    //        var retc2 = plcStackeConn.SetPlcDBValue(djMod.PosType, djMod.DbNumber, djMod.WcsPos, "830");
+
+                    //        // 鎻掑叆浠诲姟鏄庣粏 浠诲姟鏄庣粏瀹炰綋绫�
+                    //        var modInsertTaskMonitor = new WcsTaskMonitor()
+                    //        {
+                    //            TaskNo = modTask.TaskNo,
+                    //            PlcId = modDevice.Id,
+                    //            PlcName = modDevice.Text,
+                    //            PalletNo = modTask.PalletNo,
+                    //            Status = TaskStatusEnum.Complete,
+                    //            StartLocat = modDevice.StationNum,
+                    //            EndLocat = modTask.EndLocate                  // 鐩爣鍌ㄤ綅鍦板潃
+                    //        };
+                    //        if (!retc2.IsSucceed)
+                    //        {
+                    //            modInsertTaskMonitor.InteractiveMsg = $"杈撻�佺嚎鍙栬揣宸ヤ綅锛歿modDevice.StationNum},鍐欏叆鍨涙満鍙栬揣浠诲姟830澶辫触绛夊緟鍐嶆鍐欏叆";
+                    //            // 鎻掑叆浜や簰鏃ュ織
+                    //            _db.Insertable(modInsertTaskMonitor).ExecuteCommand();
+                    //            //涓嬪彂浠诲姟鏃ュ織
+                    //            HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>());
+                    //            break;
+
+                    //        }
+                    //        modInsertTaskMonitor.InteractiveMsg = $"璺烘満鍐欏叆鎸囦护830锛歿modDevice.StationNum}宸ヤ綅====銆�" + modTask.EndLocate + "鍌ㄤ綅鍦板潃!";
+                    //        // 鎻掑叆浜や簰鏃ュ織
+                    //        _db.Insertable(modInsertTaskMonitor).ExecuteCommand();
+                    //        if (PLCTaskAction.boRefresh)
+                    //        {
+                    //            //涓嬪彂浠诲姟鏃ュ織
+                    //            HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>());
+                    //        }
+
+                    //    }
+
+
+
+
+                    //}
+
+                    #endregion
                 }
                 break;
 
+            #region 鍑哄簱浜や簰
+            case "420":
+                {
+                    #region 鎵樼洏鍒拌揪鎷i�夊伐浣�/鍑哄簱鍙�
+                    // 鍑哄簱鍙�
+                    // led鏄剧ず鎵樼洏淇℃伅
+                    // 鍐欏叆430
+                    var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "430");
+
+                    if (ret.IsSucceed)
+                    {
+                        var modPosTask = modDevice.listStation.FirstOrDefault(m => m.Text == "浠诲姟鍙�");
+                        var (res, taskVal) = plcConn.GetPlcDBValue(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos);
+                        var modPosPallet = modDevice.listStation.FirstOrDefault(m => m.Text == "鎵樼洏鐮�");
+                        var (res2, palletVal) = plcConn.GetPlcDBValue(modPosPallet.PosType, modDevice.DbNumber, modPosPallet.PlcPos);
+                        var modPosStarStationNum = modDevice.listStation.FirstOrDefault(m => m.Text == "璧峰宸ヤ綅");
+                        var (res3, starVal) = plcConn.GetPlcDBValue(modPosStarStationNum.PosType, modDevice.DbNumber, modPosStarStationNum.PlcPos);
+                        // 鎻掑叆浠诲姟鏄庣粏 
+                        var modInsertTaskMonitor = new WcsTaskMonitor()
+                        {
+                            TaskNo = taskVal,
+                            PlcId = modDevice.Id,
+                            PlcName = modDevice.Text,
+                            InteractiveMsg = $"鍐欏叆鎸囦护430锛氭墭鐩樺埌杈緖modDevice.StationNum}宸ヤ綅",
+                            PalletNo = palletVal,
+                            Status = TaskStatusEnum.Complete,
+                            StartLocat = starVal,
+                            EndLocat = modDevice.StationNum,
+                        };
+
+                        // 鎻掑叆浜や簰鏃ュ織
+                        _db.Insertable(modInsertTaskMonitor).ExecuteCommand();
+
+                        // 閫氱煡浠诲姟鐣岄潰浠诲姟宸插瓨鍦ㄦ洿鏂� 璇锋洿鏂扮晫闈�
+                        HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>());
+
+                        // 鏍规嵁浠诲姟鍙疯幏鍙栬捣濮嬪伐浣嶅湴鍧�锛屾牴鎹捣濮嬪伐浣嶅湴鍧�鑾峰彇LEDIP 鎺ㄩ�佸埌LED灞忓箷銆�
+                        var taskInfo = _db.Queryable<WcsTask>().First(w => w.TaskNo == modInsertTaskMonitor.TaskNo);
+                        modDevice.LedIP = _db.Queryable<WcsDevice>().Where(w => w.StationNum == taskInfo.EndLocate).Select(s => s.LedIP).First();
+
+                        // led鏄剧ず鍐呭
+                        // 鏍规嵁鐩爣宸ヤ綅鍙疯幏鍙栧搴旂殑LEDIP鍦板潃
+                        var ledDevice = PLCTaskAction.plcDevices.First(m => m.StationNum == modDevice.StationNum && m.IsDelete == false && m.DeviceType == DeviceTypeEnum.Business && m.PlcId == modDevice.PlcId);
+
+                        ledText += $"鍑哄簱瀹屾垚\n\n";
+                        ledText += $"浠诲姟鍙�:{taskInfo.TaskNo}\n";
+                        ledText += $"鎵樼洏鍙�:{taskInfo.PalletNo}\n\n";
+                        ledText += $"璧峰浣�:{taskInfo.StartRoadway + " " + taskInfo.StartLocate}\n";
+                        ledText += $"鐩爣浣�:{taskInfo.EndRoadway + " " + taskInfo.EndLocate}";
+                        LedDisplay(ledDevice.LedIP, ledText);
+                    }
+                    // 鍙嶉WMS鍑哄簱瀹屾垚
+                    //TaskReques taskReques = new TaskReques();
+                    //taskReques.taskNo = TaskNo;
+                    //taskReques.TaskType = "1";
+                    //taskReques.TaskStatus = "2";
+                    //bool bl = wcsMySql.RequestTasks(taskReques);
+                    #endregion
+                }
+                break;
+            case "440":
+                {
+                    #region 鎷i�夊畬鎴�,鎵樼洏绂诲紑宸ヤ綅
+                    // 鍐欏叆450
+                    var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "450");
+                    if (ret.IsSucceed)
+                    {
+                        var modPosTask = modDevice.listStation.FirstOrDefault(m => m.Text == "浠诲姟鍙�");
+                        var (res, taskVal) = plcConn.GetPlcDBValue(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos);
+                        var modPosPallet = modDevice.listStation.FirstOrDefault(m => m.Text == "鎵樼洏鐮�");
+                        var (res2, palletVal) = plcConn.GetPlcDBValue(modPosPallet.PosType, modDevice.DbNumber, modPosPallet.PlcPos);
+                        var modPosStarStationNum = modDevice.listStation.FirstOrDefault(m => m.Text == "璧峰宸ヤ綅");
+                        var (res3, starVal) = plcConn.GetPlcDBValue(modPosStarStationNum.PosType, modDevice.DbNumber, modPosStarStationNum.PlcPos);
+
+                        string tasknoVal = taskVal.ToString();
+                        var modTask = _db.Queryable<WcsTask>().First(m => m.Status == TaskStatusEnum.Doing && m.TaskNo == tasknoVal && m.IsDelete == false);
+                        if (modTask == null)
+                        {
+                            Log.Error(string.Format("杈撻�佺嚎440:鏈壘鍒板搴旂殑浠诲姟銆�"));
+                            break;
+                        }
+                        // 鏀瑰彉浠诲姟鐘舵��
+                        modTask.Status = TaskStatusEnum.Complete;
+                        modTask.FinishDate = DateTime.Now;
+                        modTask.Levels = 999;
+                        _db.Updateable(modTask).ExecuteCommand();
+                        HubUtil.PublicTask(modTask.Adapt<WcsTaskOutput>());
+                        // 鎻掑叆浠诲姟鏄庣粏 
+                        var modInsertTaskMonitor = new WcsTaskMonitor()
+                        {
+                            TaskNo = modTask.TaskNo,
+                            PlcId = modDevice.Id,
+                            PlcName = modDevice.Text,
+                            InteractiveMsg = $"鍐欏叆鎸囦护450锛歿modDevice.StationNum}鍑哄簱瀹屾垚",
+                            PalletNo = palletVal,
+                            Status = TaskStatusEnum.Complete,
+                            StartLocat = starVal.ToString(),
+                            EndLocat = modDevice.StationNum,
+                        };
+                        if (modTask.Origin == "WMS")
+                        {
+                            // 鍙嶉WMS
+                            var requestMode = new TaskRequestWMS()
+                            {
+                                TaskNo = modTask.TaskNo + modTask.EndLocate,
+                                PalletNo = modTask.PalletNo,
+                                TaskType = ((int)TaskTypeEnum.Out).ToString(),
+                                TaskStatus = ((int)TaskStatusEnum.Complete).ToString()
+                            };
+                            HttpService httpService = new HttpService();
+                            var modResponseTask = httpService.RequestTask(requestMode).Result;
+                            if (modResponseTask.StatusCode == 0)
+                            {
+                                modInsertTaskMonitor.InteractiveMsg += "锛岃繑鍥炵粰WMS浠诲姟瀹屾垚";
+                            }
+                            else
+                            {
+                                Log.Error(string.Format("浠诲姟鍙嶉澶辫触锛歋tatusCode锛歿0};Msg锛歿1}", modResponseTask.StatusCode, modResponseTask.Msg));
+                            }
+                        }
+
+                        // 鎻掑叆浜や簰鏃ュ織
+                        _db.Insertable(modInsertTaskMonitor).ExecuteCommand();
+
+                        // 閫氱煡浠诲姟鐣岄潰浠诲姟宸插瓨鍦ㄦ洿鏂� 璇锋洿鏂扮晫闈�
+                        HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>());
+                        // led鏄剧ず鍐呭
+                        var ledDevice = PLCTaskAction.plcDevices.First(m => m.StationNum == modDevice.StationNum && m.IsDelete == false && m.DeviceType == DeviceTypeEnum.Business && m.PlcId == modDevice.PlcId);
+
+                        ledText += $"鍑哄簱瀹屾垚\n\n";
+                        ledText += $"浠诲姟鍙�:{modTask.TaskNo}\n";
+                        ledText += $"鎵樼洏鍙�:{modTask.PalletNo}\n\n";
+                        ledText += $"璧峰浣�:{modTask.StartRoadway + " " + modTask.StartLocate}\n";
+                        ledText += $"鐩爣浣�:{modTask.EndRoadway + " " + modTask.EndLocate}";
+                        LedDisplay(ledDevice.LedIP, ledText);
+                    }
+                    #endregion
+                }
+                break;
+
+            #endregion
             default: break;
         }
-
     }
 
     /// <summary>

--
Gitblit v1.8.0