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/MESTaskService.cs | 221 ++++++++++++++++++++++++++++++++++++++++++------------
1 files changed, 170 insertions(+), 51 deletions(-)
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/MESTaskService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/MESTaskService.cs"
index d80d531..b2f563c 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/MESTaskService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/MESTaskService.cs"
@@ -23,6 +23,8 @@
using WIDESEA_Core.Helper;
using WIDESEA_DTO.Inbound;
using WIDESEA_DTO.Task;
+using WIDESEA_IStockService;
+using WIDESEA_ITaskInfoService;
using WIDESEA_Model.Models;
using static WIDESEA_ITaskInfoService.ITaskService;
@@ -30,10 +32,11 @@
{
public partial class TaskService
{
+ public static List<string> InStationareaList = new List<string>() { "1113", "1114", "1115", "1116", "1117", "1118", "1119", "1120", "1121", "1122" ,"1123"};
//鍏ュ簱锛岀┖鐩樺洖搴�
public ApiResponse AddInStoreDoc(MES_InTask mES_In)
{
- WriteLog.Write_Log("MES_鎺ユ敹MES鍏ュ簱浠诲姟涓嬪彂", $"浠诲姟鎺ユ敹鍙傛暟", "鎺ユ敹鍙傛暟", $"鍙傛暟锛歿mES_In.ToJson()}");
+ WriteLog.Write_Log("MES_鎺ユ敹鍏ュ簱浠诲姟涓嬪彂", $"浠诲姟鎺ユ敹鍙傛暟", "鎺ユ敹鍙傛暟", $"鍙傛暟锛歿mES_In.ToJson()}");
ApiResponse apiResponse = new ApiResponse();
try
{
@@ -50,9 +53,16 @@
Dt_Task setask = BaseDal.QueryData(x => x.PalletCode == mES_In.containerNo).FirstOrDefault();
if (setask != null) return apiResponse.Error($"WMS宸叉湁褰撳墠浠诲姟锛屼笉鍙噸澶嶄笅鍙戯紝鎵樼洏缂栧彿锛歿mES_In.containerNo}");
+ // 鍒ゆ柇涓嬪彂鐨勬墭鐩樼紪鍙锋槸鍚﹀簱瀛樻墭鐩樼紪鍙锋湁閲嶅
+ if (_stockInfoService.IsContainerNoExist(mES_In.containerNo)) return apiResponse.Error($"褰撳墠搴撲綅宸叉湁璇ユ墭鐩樼紪鍙凤紝鎵樼洏缂栧彿锛歿mES_In.containerNo}");
Dt_Warehouse dt_Warehouse = _warehouseService.QueryWarehouse(mES_In.warehouseNo);
int LocationType = 1;
string Roadway = "0";
+
+ if(mES_In.startPosition == "1206")
+ {
+ mES_In.startPosition = "1205";
+ }
string SourceAddress = mES_In.startPosition;
string TargetAddress = "";
@@ -71,8 +81,40 @@
{
LocationType = 3;
}
- Roadway = _locationInfoService.AccessingTunnel(dt_Warehouse.WarehouseId, LocationType);
- if (Roadway == "0") return apiResponse.Error($"WMS鏈兘鏌ヨ閬撳搴斿贩閬撶紪鍙凤紝浠撳簱缂栫爜锛歿mES_In.warehouseNo}");
+
+ // 鏌ヨ姣忎釜宸烽亾鍙风殑浠诲姟鏁伴噺
+ List<RoadwayTaskCount> roadwayTaskCounts;
+
+ // 鏍规嵁 WarehouseId 鑾峰彇瀵瑰簲鐨勫贩閬撳垪琛�
+ var roadwayList = WarehouseId == 1
+ ? new[] { "1", "2" }
+ : new[] { "3", "4", "5" };
+
+ // 鏌ヨ鏁版嵁搴撲腑鐨勫疄闄呮暟鎹�
+ var queryData = BaseDal.QueryData(x => x.WarehouseId == WarehouseId && x.PalletType == (LocationType.ToString() == "3" ? "1" : LocationType.ToString()))
+ .GroupBy(x => x.Roadway)
+ .Select(g => new RoadwayTaskCount
+ {
+ Roadway = g.Key,
+ TaskCount = g.Count()
+ })
+ .ToList();
+
+ // 鍚堝苟鎵�鏈夐渶瑕佺殑宸烽亾锛岀‘淇濇瘡涓贩閬撻兘鏈夊搴旂殑 TaskCount
+ roadwayTaskCounts = roadwayList
+ .Select(roadway => new RoadwayTaskCount
+ {
+ Roadway = roadway,
+ TaskCount = queryData.FirstOrDefault(x => x.Roadway == roadway)?.TaskCount ?? 0
+ })
+ .ToList();
+
+ //var taskCount = BaseDal.QueryData(x => x.WarehouseId == WarehouseId && x.PalletType == LocationType.ToString()).Count();
+
+ Roadway = _locationInfoService.AccessingTunnel(dt_Warehouse.WarehouseId, LocationType, roadwayTaskCounts);
+
+ //if (Roadway == "0") return apiResponse.Error($"WMS鏈兘鏌ヨ閬撳搴斿贩閬撶紪鍙凤紝浠撳簱缂栫爜锛歿mES_In.warehouseNo}");
+ if (Roadway == "0") return apiResponse.Error($"褰撳墠浠撳簱宸茬粡婊★細{mES_In.warehouseNo}");
//鑾峰彇瀵瑰簲PLC绔欏彴淇℃伅
Dt_roadwayinfo _Roadwayinfo = _roadWayinfoService.QbtainPlatform(Roadway);
NextAddress = _Roadwayinfo.InStationCode;
@@ -107,26 +149,48 @@
task.Grade = 1;
task.Creater = "MES";
task.CreateDate = DateTime.Now;
+ int taskid=BaseDal.AddData(task);
- /*Dt_StockInfo dt_StockInfo = new Dt_StockInfo();
- dt_StockInfo.PalletCode = task.PalletCode;
- dt_StockInfo.PalletType = task.PalletType;
- dt_StockInfo.WarehouseId = task.WarehouseId;
- dt_StockInfo.StockStatus = (int)StockStatusEmun.鍏ュ簱涓�;
- dt_StockInfo.Creater = "MWS";
- dt_StockInfo.CreateDate = DateTime.Now;*/
-
- _unitOfWorkManage.BeginTran();
- BaseDal.AddData(task);
- //_stockInfoService.Repository.AddData(dt_StockInfo);
- _unitOfWorkManage.CommitTran();
- WriteLog.Write_Log("MES_鎺ユ敹MES鍏ュ簱浠诲姟涓嬪彂", $"鍙嶉淇℃伅", "鎴愬姛", $"浠诲姟娣诲姞鎴愬姛锛屾墭鐩樻潯鐮侊細{task.PalletCode}");
- return apiResponse.OK();
+ //鍒涘缓浠诲姟鍚庯紝鍒ゆ柇鏄惁鏄骇绾垮洖搴撶殑浠诲姟
+ if (!InStationareaList.Contains(task.SourceAddress))
+ {
+ WriteLog.Write_Log("MES_鎺ユ敹鍏ュ簱浠诲姟涓嬪彂", $"鍙嶉淇℃伅", "鎴愬姛", $"浠诲姟娣诲姞鎴愬姛锛屾墭鐩樻潯鐮侊細{task.PalletCode}");
+ return apiResponse.OK();
+ }
+ else
+ {
+ WCSginseng result = PLC_IssueTasks(
+ taskid, // 涓嶆槸task.Taskid
+ task.WarehouseId,
+ task.TaskNum,
+ task.PalletCode,
+ int.Parse(task.PalletType),
+ task.CurrentAddress,
+ task.NextAddress,
+ "");
+ if (result.IsSuccess)
+ {
+ Dt_Task deltaskin = BaseDal.QueryData(x => x.TaskId == taskid).FirstOrDefault();
+ deltaskin.TaskStatus = (int)InTaskStatusEnum.PLC_InExecuting;
+ deltaskin.Dispatchertime = DateTime.Now;
+ string Result = MesInTaskStatusEnum.Start.GetDescription();
+ BaseDal.UpdateData(deltaskin);
+ //璋冨彇涓婃父绯荤粺鍙嶉寮�濮嬩换鍔�
+ InStoreDocCallback(task.TaskNum, Result, "鎿嶄綔鎴愬姛", task.PalletCode, "");
+ return apiResponse.OK();
+ }
+ else
+ {
+ Dt_Task deltask= BaseDal.QueryData(x => x.TaskId == taskid).FirstOrDefault();
+ BaseDal.DeleteData(deltask);
+ return apiResponse.Error($"涓嬪彂浠诲姟澶辫触锛屼笅鍙慦CS澶辫触锛屽師鍥狅細{result.Message}");
+ }
+ }
}
catch (Exception ex)
{
_unitOfWorkManage.RollbackTran();
- WriteLog.Write_Log("MES_鎺ユ敹MES鍏ュ簱浠诲姟涓嬪彂", $"鍙嶉淇℃伅", "澶辫触", $"浠诲姟娣诲姞澶辫触锛屾墭鐩樻潯鐮侊細{mES_In.containerNo},绯荤粺鍑洪敊鍘熷洜锛歿ex.Message}");
+ WriteLog.Write_Log("MES_鎺ユ敹鍏ュ簱浠诲姟涓嬪彂", $"鍙嶉淇℃伅", "澶辫触", $"浠诲姟娣诲姞澶辫触锛屾墭鐩樻潯鐮侊細{mES_In.containerNo},绯荤粺鍑洪敊鍘熷洜锛歿ex.Message}");
return apiResponse.Error($"WMS浠诲姟娣诲姞閿欒锛屽師鍥狅細{ex.Message}");
}
@@ -149,47 +213,98 @@
if (string.IsNullOrWhiteSpace(mES_In.containerNo)) return apiResponse.Error("鎵樼洏鐮佷笉鑳戒负绌�");
if (string.IsNullOrWhiteSpace(mES_In.endPosition)) return apiResponse.Error("鐩爣浣嶇疆涓嶈兘涓虹┖");
-
- Dt_StockInfo dt_Stock=_stockInfoService.Repository.QueryData(x=>x.PalletCode== mES_In.containerNo && x.StockStatus== (int)StockStatusEmun.宸插叆搴�).FirstOrDefault();
+ // 褰撳墠浠诲姟mES_In.endPosition鐩爣浣嶇疆1113 - 1122
+ var restrictedPositions = new List<string> { "1113", "1114", "1115", "1116", "1117", "1118", "1119", "1120", "1121", "1122", "1123" };
+ bool isRestrictedPosition = restrictedPositions.Contains(mES_In.endPosition);
+ if (isRestrictedPosition)
+ {
+ bool hasExistingTask = BaseDal.QueryData(x => x.TargetAddress == mES_In.endPosition).Any();
+ if (hasExistingTask)
+ {
+ // 鐩爣浣嶇疆鍦�1113-1122鑼冨洿鍐呯殑澶勭悊閫昏緫
+ return apiResponse.Error($"褰撳墠鏈夊幓鐩爣浣嶇疆{mES_In.endPosition}鐨勪换鍔★紝璇烽噸鏂版搷浣�");
+ }
+ }
+ Dt_StockInfo dt_Stock=_stockInfoService.Repository.QueryData(x=>x.PalletCode== mES_In.containerNo).FirstOrDefault();
if (dt_Stock == null) return apiResponse.Error($"WMS鏈兘鏌ユ壘閬撹鎵樼洏鏉$爜鐨勫簱瀛樿揣浣嶄俊鎭紝鏉$爜锛歿mES_In.containerNo}");
- Dt_LocationInfo dt_LocationInfo = _locationInfoService.Repository.QueryData(x => x.LocationCode == dt_Stock.LocationCode && x.LocationStatus== (int)LocationStatusEnum.InStock).FirstOrDefault();
- if (dt_LocationInfo == null) return apiResponse.Error($"WMS鏈兘鏌ユ壘閬撹鎵樼洏鏉$爜鐨勫簱瀛樿揣浣嶄俊鎭紝鏉$爜锛歿mES_In.containerNo}锛屾湭鎵惧埌璐т綅鍙凤細{dt_Stock.LocationCode}");
+ if(dt_Stock.StockStatus == (int)StockStatusEmun.宸插叆搴�)
+ {
+ Dt_LocationInfo dt_LocationInfo = _locationInfoService.Repository.QueryData(x => x.LocationCode == dt_Stock.LocationCode && x.LocationStatus == (int)LocationStatusEnum.InStock).FirstOrDefault();
+ if (dt_LocationInfo == null) return apiResponse.Error($"WMS鏈兘鏌ユ壘閬撹鎵樼洏鏉$爜鐨勫簱瀛樿揣浣嶄俊鎭紝鏉$爜锛歿mES_In.containerNo}锛屾湭鎵惧埌璐т綅鍙凤細{dt_Stock.LocationCode}");
- Dt_roadwayinfo _Roadwayinfo = _roadWayinfoService.QbtainPlatform(dt_LocationInfo.RoadwayNo);
+ Dt_roadwayinfo _Roadwayinfo = _roadWayinfoService.QbtainPlatform(dt_LocationInfo.RoadwayNo);
- Dt_Task setask = BaseDal.QueryData(x => x.PalletCode == mES_In.containerNo).FirstOrDefault();
- if (setask != null) return apiResponse.Error($"WMS宸叉湁褰撳墠浠诲姟锛屼笉鍙噸澶嶄笅鍙戯紝鎵樼洏缂栧彿锛歿mES_In.containerNo}");
+ Dt_Task setask = BaseDal.QueryData(x => x.PalletCode == mES_In.containerNo).FirstOrDefault();
+ if (setask != null) return apiResponse.Error($"WMS宸叉湁褰撳墠浠诲姟锛屼笉鍙噸澶嶄笅鍙戯紝鎵樼洏缂栧彿锛歿mES_In.containerNo}");
- Dt_Task task = new Dt_Task();
- task.TaskNum = mES_In.transNo;
- task.PalletCode = dt_Stock.PalletCode;
- task.PalletType = dt_Stock.PalletType;
- task.Roadway = dt_LocationInfo.RoadwayNo;
- task.TaskType = (int)TaskTypeEnum.Outbound;
- task.TaskStatus = (int)OutTaskStatusEnum.OutNew;
- task.SourceAddress = dt_LocationInfo.LocationCode;
- task.TargetAddress = mES_In.endPosition;
- task.CurrentAddress = dt_LocationInfo.LocationCode;
- task.NextAddress = _Roadwayinfo.OutSCStationCode;
- task.WarehouseId = dt_LocationInfo.WarehouseId;
- task.OrderNo = mES_In.transDate.ToString();
- task.Grade = 1;
- task.Creater = "MES";
- task.CreateDate = DateTime.Now;
+ Dt_Task task = new Dt_Task();
+ task.TaskNum = mES_In.transNo;
+ task.PalletCode = dt_Stock.PalletCode;
+ task.PalletType = dt_Stock.PalletType;
+ task.Roadway = dt_LocationInfo.RoadwayNo;
+ task.TaskType = (int)TaskTypeEnum.Outbound;
+ task.TaskStatus = (int)OutTaskStatusEnum.OutNew;
+ task.SourceAddress = dt_LocationInfo.LocationCode;
+ task.TargetAddress = mES_In.endPosition;
+ task.CurrentAddress = dt_LocationInfo.LocationCode;
+ task.NextAddress = _Roadwayinfo.OutSCStationCode;
+ task.WarehouseId = dt_LocationInfo.WarehouseId;
+ task.OrderNo = mES_In.transDate.ToString();
+ task.Grade = 1;
+ task.Creater = "MES";
+ task.CreateDate = DateTime.Now;
- dt_Stock.StockStatus = (int)StockStatusEmun.鍑哄簱涓�;
- dt_LocationInfo.LocationStatus = (int)LocationStatusEnum.Lock;
+ dt_Stock.StockStatus = (int)StockStatusEmun.鍑哄簱涓�;
+ dt_LocationInfo.LocationStatus = (int)LocationStatusEnum.Lock;
- _unitOfWorkManage.BeginTran();
- BaseDal.AddData(task);
- _stockInfoService.Repository.UpdateData(dt_Stock);
- _locationInfoService.Repository.UpdateData(dt_LocationInfo);
- _unitOfWorkManage.CommitTran();
+ _unitOfWorkManage.BeginTran();
+ BaseDal.AddData(task);
+ _stockInfoService.Repository.UpdateData(dt_Stock);
+ _locationInfoService.Repository.UpdateData(dt_LocationInfo);
+ _unitOfWorkManage.CommitTran();
- WriteLog.Write_Log("MES_鎺ユ敹MES鍑哄簱浠诲姟涓嬪彂", $"鍑哄簱浠诲姟娣诲姞", "鎴愬姛", $"娣诲姞鎴愬姛锛屾墭鐩樻潯鐮侊細{dt_Stock.PalletCode}");
- return apiResponse.OK();
+ WriteLog.Write_Log("MES_鎺ユ敹MES鍑哄簱浠诲姟涓嬪彂", $"鍑哄簱浠诲姟娣诲姞", "鎴愬姛", $"娣诲姞鎴愬姛锛屾墭鐩樻潯鐮侊細{dt_Stock.PalletCode}");
+ return apiResponse.OK();
+ }else if(dt_Stock.StockStatus == (int)StockStatusEmun.绉诲簱閿佸畾)
+ {
+ Dt_LocationInfo dt_LocationInfo = _locationInfoService.Repository.QueryData(x => x.LocationCode == dt_Stock.LocationCode && x.LocationStatus == (int)LocationStatusEnum.Lock).FirstOrDefault();
+ if (dt_LocationInfo == null) return apiResponse.Error($"WMS鏈兘鏌ユ壘閬撹鎵樼洏鏉$爜鐨勫簱瀛樿揣浣嶄俊鎭紝鏉$爜锛歿mES_In.containerNo}锛屾湭鎵惧埌璐т綅鍙凤細{dt_Stock.LocationCode}");
+
+ Dt_roadwayinfo _Roadwayinfo = _roadWayinfoService.QbtainPlatform(dt_LocationInfo.RoadwayNo);
+
+ Dt_Task task = new Dt_Task();
+ task.TaskNum = mES_In.transNo;
+ task.PalletCode = dt_Stock.PalletCode;
+ task.PalletType = dt_Stock.PalletType;
+ task.Roadway = dt_LocationInfo.RoadwayNo;
+ task.TaskType = (int)TaskTypeEnum.Outbound;
+ task.TaskStatus = (int)OutTaskStatusEnum.OutWait;
+ task.SourceAddress = dt_LocationInfo.LocationCode;
+ task.TargetAddress = mES_In.endPosition;
+ task.CurrentAddress = dt_LocationInfo.LocationCode;
+ task.NextAddress = _Roadwayinfo.OutSCStationCode;
+ task.WarehouseId = dt_LocationInfo.WarehouseId;
+ task.OrderNo = mES_In.transDate.ToString();
+ task.Grade = 1;
+ task.Creater = "MES";
+ task.CreateDate = DateTime.Now;
+
+ _unitOfWorkManage.BeginTran();
+ BaseDal.AddData(task);
+ _unitOfWorkManage.CommitTran();
+ WriteLog.Write_Log("MES_鎺ユ敹MES鍑哄簱浠诲姟涓嬪彂", $"鍑哄簱浠诲姟娣诲姞", "鎴愬姛", $"娣诲姞鎴愬姛锛屾墭鐩樻潯鐮侊細{dt_Stock.PalletCode}");
+ return apiResponse.OK();
+
+ }
+ else
+ {
+ WriteLog.Write_Log("MES_鎺ユ敹MES鍑哄簱浠诲姟涓嬪彂", $"鍑哄簱浠诲姟娣诲姞", $"澶辫触,鎵樼洏鏉$爜锛歿dt_Stock.PalletCode}", $"搴撳瓨鐘舵�侀敊璇紝璇锋煡鐪媁MS绯荤粺搴撳瓨,搴撳瓨鐘舵�侊細{dt_Stock.StockStatus}");
+ return apiResponse.Error("搴撳瓨鐘舵�侀敊璇紝璇锋煡鐪媁MS绯荤粺搴撳瓨");
+ }
+
+
}
catch (Exception ex)
{
@@ -282,7 +397,11 @@
{
if (string.IsNullOrWhiteSpace(mES_In.transNo)) return apiResponse.Error("鍗曟嵁缂栧彿涓嶈兘涓虹┖");
Dt_Task dt_Task = BaseDal.QueryData(x => x.TaskNum == mES_In.transNo).FirstOrDefault();
- if (dt_Task == null) return apiResponse.Error($"WMS鏈兘鏌ユ壘閬撳搴斿崟鎹换鍔★紝鏉$爜锛歿mES_In.transNo}");
+ if (dt_Task == null) {
+ WriteLog.Write_Log("MES_浠诲姟鍙栨秷鎺ュ彛", $"浠诲姟鍙栨秷鎺ュ彛", "鎴愬姛", $"鍗曟嵁缂栧彿锛歿mES_In.transNo}锛屾敞鎰忥紒锛乄MS鏈兘鏌ユ壘閬撳搴斿崟鎹换鍔�");
+ return apiResponse.OK();
+ //return apiResponse.Error($"WMS鏈兘鏌ユ壘閬撳搴斿崟鎹换鍔★紝鏉$爜锛歿mES_In.transNo}");
+ }
if(dt_Task.TaskStatus== (int)InTaskStatusEnum.InNew)
{
BaseDal.DeleteData(dt_Task);
--
Gitblit v1.9.3