From b0b5deb5825684bca5b3fa7c2ab59f60ce0e799f Mon Sep 17 00:00:00 2001
From: xiazhengtongxue <133085197+xiazhengtongxue@users.noreply.github.com>
Date: 星期二, 07 四月 2026 16:36:57 +0800
Subject: [PATCH] fix: 修复移库任务号重复问题,优化策略优先处理正常任务,避免任务堵塞

---
 项目代码/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/WCSTaskService.cs |  113 +++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 111 insertions(+), 2 deletions(-)

diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/WCSTaskService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/WCSTaskService.cs"
index 991a724..c93b494 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/WCSTaskService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/WCSTaskService.cs"
@@ -2,6 +2,7 @@
 using Microsoft.AspNetCore.Http;
 using Microsoft.Extensions.Logging;
 using OfficeOpenXml.FormulaParsing.Excel.Functions.Logical;
+using Org.BouncyCastle.Math.EC;
 using System;
 using System.Collections.Generic;
 using System.Linq;
@@ -10,6 +11,7 @@
 using System.Text;
 using System.Threading.Tasks;
 using WIDESEA_Common.Log;
+using WIDESEA_Common.TaskEnum;
 using WIDESEA_Core;
 using WIDESEA_Core.Enums;
 using WIDESEA_Core.Helper;
@@ -23,7 +25,7 @@
     public partial class TaskService
     {
         //杈撻�佺嚎浠诲姟涓嬪彂
-        public WCSginseng PLC_IssueTasks(int TaskId,int AreaNo,string ContainerNo,int ContainerType,string FromPoint,string ToPoint)
+        public WCSginseng PLC_IssueTasks(int TaskId,int AreaNo,string TransNo, string ContainerNo,int ContainerType,string FromPoint,string ToPoint,string ToStation)
         {
             WCSginseng WCS_Parame = new WCSginseng();
             try
@@ -31,11 +33,15 @@
                 WCStask wcstaskinfo = new WCStask();
                 wcstaskinfo.TaskId = TaskId;
                 wcstaskinfo.AreaNo = AreaNo;
+                wcstaskinfo.TransNo = TransNo;
                 wcstaskinfo.ContainerNo = ContainerNo;
                 wcstaskinfo.ContainerType = ContainerType;
                 wcstaskinfo.FromPoint = FromPoint;
                 wcstaskinfo.ToPoint = ToPoint;
+                wcstaskinfo.ToStation = ToStation;
+                WriteLog.Write_Log("WCS_杈撻�佺嚎浠诲姟涓嬪彂", $"浠诲姟涓嬪彂淇℃伅", "鎴愬姛锛屼笅鍙戝弬鏁�", $"涓嬪彂鐨勫弬鏁帮細{wcstaskinfo.ToJson()}");
                 WCS_Parame = HttpHelper.Post<WCSginseng>(WCS_SendConveyorTask, wcstaskinfo, "杈撻�佺嚎浠诲姟涓嬪彂");
+                WriteLog.Write_Log("WCS_杈撻�佺嚎浠诲姟涓嬪彂", $"浠诲姟涓嬪彂淇℃伅", "鎴愬姛锛屽洖鍙�", $"wcs鍥炲弬锛歿WCS_Parame.ToJson()}");
                 return WCS_Parame;
             }
             catch (Exception ex)
@@ -43,12 +49,13 @@
                 WCS_Parame.IsSuccess = false;
                 WCS_Parame.Code = "-1";
                 WCS_Parame.Message = $"杈撻�佺嚎浠诲姟璋冨彇涓嬪彂澶辫触锛歐MS绯荤粺涓嬪彂浠诲姟澶辫触,浠诲姟鍙凤細{TaskId}锛屽師鍥狅細{ex.Message}";
+                WriteLog.Write_Log("WCS_杈撻�佺嚎浠诲姟涓嬪彂", $"浠诲姟涓嬪彂淇℃伅", "澶辫触", $"杈撻�佺嚎浠诲姟璋冨彇涓嬪彂澶辫触锛歐MS绯荤粺涓嬪彂浠诲姟澶辫触,浠诲姟鍙凤細{TaskId}锛屽師鍥狅細{ex.Message}");
                 return WCS_Parame;
             }
         }
 
         //鍫嗗灈鏈轰换鍔′笅鍙�
-        public WCSginseng SC_IssueTasks(int TaskId, int AreaNo, string ContainerNo, int ContainerType, string FromPoint, string ToPoint)
+        public WCSginseng SC_IssueTasks(int TaskId, int AreaNo, string TransNo, string ContainerNo, int ContainerType, string FromPoint, string ToPoint, string ToStation)
         {
             WCSginseng WCS_Parame = new WCSginseng();
             try
@@ -56,11 +63,16 @@
                 WCStask wcstaskinfo = new WCStask();
                 wcstaskinfo.TaskId = TaskId;
                 wcstaskinfo.AreaNo = AreaNo;
+                wcstaskinfo.TransNo = TransNo;
                 wcstaskinfo.ContainerNo = ContainerNo;
                 wcstaskinfo.ContainerType = ContainerType;
                 wcstaskinfo.FromPoint = FromPoint;
                 wcstaskinfo.ToPoint = ToPoint;
+                wcstaskinfo.ToStation = ToStation;
+
+                WriteLog.Write_Log("WCS_鍫嗗灈鏈轰换鍔′笅鍙�", $"浠诲姟涓嬪彂淇℃伅", "鎴愬姛锛屼笅鍙戝弬鏁�", $"涓嬪彂鐨勫弬鏁帮細{wcstaskinfo.ToJson()}");
                 WCS_Parame = HttpHelper.Post<WCSginseng>(WCS_SendStackerTask, wcstaskinfo, "鍫嗗灈鏈轰换鍔′笅鍙�");
+                WriteLog.Write_Log("WCS_鍫嗗灈鏈轰换鍔′笅鍙�", $"浠诲姟涓嬪彂淇℃伅", "鎴愬姛锛屽洖鍙�", $"wcs鍥炲弬锛歿WCS_Parame.ToJson()}");
                 return WCS_Parame;
             }
             catch (Exception ex)
@@ -68,8 +80,105 @@
                 WCS_Parame.IsSuccess = false;
                 WCS_Parame.Code = "-1";
                 WCS_Parame.Message = $"鍫嗗灈鏈轰换鍔¤皟鍙栦笅鍙戝け璐ワ細WMS绯荤粺涓嬪彂浠诲姟澶辫触,浠诲姟鍙凤細{TaskId}锛屽師鍥狅細{ex.Message}";
+                WriteLog.Write_Log("WCS_鍫嗗灈鏈轰换鍔′笅鍙�", $"浠诲姟涓嬪彂淇℃伅", "澶辫触", $"鍫嗗灈鏈轰换鍔¤皟鍙栦笅鍙戝け璐ワ細WMS绯荤粺涓嬪彂浠诲姟澶辫触,浠诲姟鍙凤細{TaskId}锛屽師鍥狅細{ex.Message}");
                 return WCS_Parame;
             }
         }
+
+        //WCS鑾峰彇浠诲姟杩涜鍙嶉
+        public WebResponseContent PalletInboundTask(WCSTaskDTO wCSTask)
+        {
+            
+            WriteLog.Write_Log("WCS_杈撻�佺嚎璇锋眰鍏ュ簱", $"浠诲姟淇℃伅", "鎺ユ敹鍙傛暟", $"鍙傛暟锛歿wCSTask.ToJson()}");
+            WebResponseContent webResponse = new WebResponseContent();
+            try
+            {
+                Dt_Task task = BaseDal.QueryData(x => x.PalletCode == wCSTask.PalletCode).FirstOrDefault();
+                if (task == null)
+                    return webResponse.Error($"鏈壘鍒颁换鍔′俊鎭紝鎵樼洏鏉$爜锛歿wCSTask.PalletCode}");
+
+                //Dt_Task Outtask = BaseDal.QueryData(x => x.TargetAddress == task.SourceAddress).FirstOrDefault();
+                // 澶勭悊鍦板潃杞崲
+                string targetAddress = wCSTask.FromPoint;
+                if (targetAddress == "1104")
+                {
+                    targetAddress = "1103";
+                }
+                else if (targetAddress == "1102")
+                {
+                    targetAddress = "1101";
+                }
+
+                Dt_Task Outtask = BaseDal.QueryData(x => x.TargetAddress == targetAddress).FirstOrDefault();
+                if (Outtask != null) return webResponse.Error($"褰撳墠宸叉湁鏉ヨ鐩爣浣嶇疆{wCSTask.FromPoint}鐨勪换鍔★紝涓嶅彲杩涜鍏ュ簱锛屾墭鐩樻潯鐮侊細{wCSTask.PalletCode}", 501);
+
+                if (task.PalletType != wCSTask.ContainerType.ToString())
+                {
+                    return webResponse.Error($"鎵樼洏绫诲瀷涓嶅尮閰嶏紝褰撳墠浠诲姟涓墭鐩樼被鍨嬩负:{task.PalletType}锛學CS涓婃姤绫诲瀷涓猴細{wCSTask.ContainerType}锛屾墭鐩樻潯鐮侊細{wCSTask.PalletCode}", 502);
+                }
+                // 浠诲姟閲嶅彂
+                if (task.TaskStatus == (int)InTaskStatusEnum.PLC_InExecuting)
+                {
+                    WCStask wcstaskinfo = new WCStask();
+                    wcstaskinfo.TaskId = task.TaskId;
+                    wcstaskinfo.AreaNo = int.Parse(task.Roadway);
+                    wcstaskinfo.TransNo = task.TaskNum;
+                    wcstaskinfo.ContainerNo = task.PalletCode;
+                    wcstaskinfo.ContainerType = int.Parse(task.PalletType);
+                    wcstaskinfo.FromPoint = wCSTask.FromPoint;
+                    wcstaskinfo.ToPoint = task.NextAddress;
+                    wcstaskinfo.ToStation = "";
+                    WriteLog.Write_Log("WCS_杈撻�佺嚎璇锋眰鍏ュ簱", $"浠诲姟淇℃伅", $"杩斿洖杈撻�佺嚎浠诲姟淇℃伅", $"杩斿洖缁欒緭閫佺嚎鐨勪换鍔′俊鎭細{wcstaskinfo.ToJson()}");
+                    return webResponse.OK(data: wcstaskinfo);
+                }
+                if (task.TargetAddress!="" && task.TargetAddress!=null)
+                {
+                    int taskcount = BaseDal.QueryData(x => x.TargetAddress == task.TargetAddress && x.PalletCode != task.PalletCode).Count();
+                    if (taskcount > 0)
+                        return webResponse.Error($"褰撳墠宸叉湁鍘昏鐩爣浣嶇疆鐨勪换鍔′簡锛屼笉鍙笅鍙戯紒锛侊紒");
+                }
+                
+                // 涓婁紶EMS
+                if (task.TaskStatus == (int)InTaskStatusEnum.InNew) 
+                {
+                    task.TaskStatus = (int)InTaskStatusEnum.PLC_InExecuting;
+                    task.Dispatchertime = DateTime.Now;
+                    MES_parameter mES_Parameter = InStoreDocCallback(task.TaskNum, "Start", "鎿嶄綔鎴愬姛", task.PalletCode, "");
+                    if (mES_Parameter.Result == "Y")    //璁板緱鏀瑰洖鏉�
+                    {
+                        WCStask wcstaskinfo = new WCStask();
+                        wcstaskinfo.TaskId = task.TaskId;
+                        wcstaskinfo.AreaNo = int.Parse(task.Roadway);
+                        wcstaskinfo.TransNo = task.TaskNum;
+                        wcstaskinfo.ContainerNo = task.PalletCode;
+                        wcstaskinfo.ContainerType = int.Parse(task.PalletType);
+                        wcstaskinfo.FromPoint = wCSTask.FromPoint;
+                        wcstaskinfo.ToPoint = task.NextAddress;
+                        wcstaskinfo.ToStation = "";
+                        
+                        //杩涜淇敼鏁版嵁搴�
+                        BaseDal.UpdateData(task);
+
+                        WriteLog.Write_Log("WCS_杈撻�佺嚎璇锋眰鍏ュ簱", $"浠诲姟淇℃伅", "杩斿洖杈撻�佺嚎浠诲姟淇℃伅", $"杩斿洖缁欒緭閫佺嚎鐨勪换鍔′俊鎭細{wcstaskinfo.ToJson()}");
+                        return webResponse.OK(data: wcstaskinfo);
+                    }
+                    else
+                    {
+
+                        return webResponse.Error("涓婁紶MES澶辫触锛屽師鍥狅細" + mES_Parameter.ResultMsg);
+                    }
+                }
+                else
+                {
+                    return webResponse.Error($"涓嬪彂杈撻�佺嚎浠诲姟澶辫触锛屽綋鍓嶆墭鐩樻潯鐮侊細{task.PalletCode},涓嶅湪鏂板缓涓紝涓嶅彲閲嶅涓嬪彂");
+                }
+            }
+            catch (Exception ex)
+            {
+                WriteLog.Write_Log("WCS_杈撻�佺嚎璇锋眰鍏ュ簱", $"浠诲姟淇℃伅", "澶辫触", $"浠诲姟鑾峰彇澶辫触锛寃ms绯荤粺鏁呴殰锛屽師鍥狅細{ex.Message}");
+                return webResponse.Error("浠诲姟鑾峰彇澶辫触锛寃ms绯荤粺鏁呴殰锛屽師鍥狅細" + ex.Message);
+            }
+        }
+
     }
 }

--
Gitblit v1.9.3