From 5c272c606bdf2da3577dbaa5f48d0ee163f1e7d2 Mon Sep 17 00:00:00 2001
From: wangxinhui <wangxinhui@hnkhzn.com>
Date: 星期四, 26 三月 2026 10:35:24 +0800
Subject: [PATCH] 纸张淋膜半成品入库逻辑优化
---
项目代码/WCS/WCSServices/WIDESEAWCS_TaskInfoService/TaskService.cs | 129 ++++++++++++++++++++++++++++++++++++------
1 files changed, 109 insertions(+), 20 deletions(-)
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_TaskInfoService/TaskService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_TaskInfoService/TaskService.cs"
index 9830b27..0afff24 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_TaskInfoService/TaskService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_TaskInfoService/TaskService.cs"
@@ -102,6 +102,7 @@
}
}
}
+ private readonly static object lockerCompleted = new object();
/// <summary>
/// 浠诲姟瀹屾垚
/// </summary>
@@ -109,22 +110,25 @@
{
try
{
- Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
- if (task != null)
+ lock (lockerCompleted)
{
- task.TaskState = TaskStatusEnum.Finish.ObjToInt();
- BaseDal.DeleteAndMoveIntoHty(task, App.User?.UserId == 0 ? OperateTypeEnum.鑷姩瀹屾垚 : OperateTypeEnum.浜哄伐瀹屾垚);
+ Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
+ if (task != null)
+ {
+ task.TaskState = TaskStatusEnum.Finish.ObjToInt();
+ BaseDal.DeleteAndMoveIntoHty(task, App.User?.UserId == 0 ? OperateTypeEnum.鑷姩瀹屾垚 : OperateTypeEnum.浜哄伐瀹屾垚);
+ }
+ string? url = apiInfos.FirstOrDefault(x => x.ApiCode == APIEnum.FeedBackWMSTaskCompleted.ToString())?.ApiAddress;
+ if (string.IsNullOrEmpty(url))
+ {
+ _taskExecuteDetailService.AddTaskExecuteDetail(taskNum, $"鏈壘鍒癢MS浠诲姟瀹屾垚鎺ュ彛,璇锋鏌ユ帴鍙i厤缃�");
+ UpdateTaskExceptionMessage(taskNum, $"鏈壘鍒癢MS浠诲姟瀹屾垚鎺ュ彛,璇锋鏌ユ帴鍙i厤缃�");
+ return WebResponseContent.Instance.Error($"{taskNum},鏈壘鍒癢MS浠诲姟瀹屾垚鎺ュ彛,璇锋鏌ユ帴鍙i厤缃�");
+ }
+ string responseStr = HttpHelper.Get(url + "?taskNum=" + taskNum);
+ WebResponseContent content = JsonConvert.DeserializeObject<WebResponseContent>(responseStr) ?? WebResponseContent.Instance.Error($"{taskNum},鏈帴鏀跺埌浠诲姟瀹屾垚杩斿洖鍊�");
+ return content;
}
- string? url = apiInfos.FirstOrDefault(x => x.ApiCode == APIEnum.FeedBackWMSTaskCompleted.ToString())?.ApiAddress;
- if (string.IsNullOrEmpty(url))
- {
- _taskExecuteDetailService.AddTaskExecuteDetail(taskNum, $"鏈壘鍒癢MS浠诲姟瀹屾垚鎺ュ彛,璇锋鏌ユ帴鍙i厤缃�");
- UpdateTaskExceptionMessage(taskNum, $"鏈壘鍒癢MS浠诲姟瀹屾垚鎺ュ彛,璇锋鏌ユ帴鍙i厤缃�");
- return WebResponseContent.Instance.Error($"{taskNum},鏈壘鍒癢MS浠诲姟瀹屾垚鎺ュ彛,璇锋鏌ユ帴鍙i厤缃�");
- }
- string responseStr = HttpHelper.Get(url + "?taskNum=" + taskNum);
- WebResponseContent content = JsonConvert.DeserializeObject<WebResponseContent>(responseStr) ?? WebResponseContent.Instance.Error($"{taskNum},鏈帴鏀跺埌浠诲姟瀹屾垚杩斿洖鍊�");
- return content;
}
catch (Exception ex)
{
@@ -227,7 +231,7 @@
return WebResponseContent.Instance.Error($"鏈壘鍒扮珯鍙伴厤缃俊鎭�");
}
//鑾峰彇璺敱淇℃伅
- List<Dt_Router> routers = _routerRepository.QueryData(x => x.InOutType == item.TaskType && (item.SourceAddress == x.StartPosi || item.RoadWay == x.StartPosi) && x.Depth==1);
+ List<Dt_Router> routers = _routerRepository.QueryData(x => x.InOutType == item.TaskType && (item.SourceAddress == x.StartPosi || item.RoadWay == x.StartPosi || stationManger.StationDeviceCode==x.StartPosi) && x.Depth==1);
router = routers.FirstOrDefault();
if (router == null)
{
@@ -239,7 +243,7 @@
//鍏ュ簱
if (taskTypeGroup == TaskTypeGroup.InboundGroup)
{
- if (router.NextPosi == "AGV" && router.StartPosi=="AGV")
+ if (router.NextPosi == "AGV" && router.StartPosi=="AGV") //鍙夎溅AGV鎼繍鍏ュ簱
{
task.CurrentAddress = item.SourceAddress;
task.NextAddress = item.TargetAddress;
@@ -247,7 +251,7 @@
}
else
{
- task.CurrentAddress = router.StartPosi;
+ task.CurrentAddress = router.StartPosi == "AGV" ? item.SourceAddress : router.StartPosi;
task.NextAddress = router.NextPosi;
task.DeviceCode = router.ChildPosiDeviceCode;
}
@@ -261,8 +265,7 @@
}
else
{
- //鎴愬搧鐮佸灈浠诲姟鐢熸垚
- if (taskTypeGroup == TaskTypeGroup.InboundGroup && !task.Roadway.Contains("YL"))
+ if (taskTypeGroup == TaskTypeGroup.InboundGroup && !task.Roadway.Contains("YL")) //鎴愬搧鐮佸灈浠诲姟鐢熸垚
{
task.CurrentAddress = router.StartPosi;
task.NextAddress = "";
@@ -295,7 +298,10 @@
if (routers.Count == 1)
{
task.NextAddress = router.NextPosi;
- task.DeviceCode = router.ChildPosi;
+ if (task.Roadway.Contains("StackPlate"))
+ task.DeviceCode = router.ChildPosiDeviceCode;
+ else
+ task.DeviceCode = router.ChildPosi;
}
}
@@ -695,6 +701,89 @@
else
return BaseDal.QueryFirst(x => x.DeviceCode == deviceNo && x.CurrentAddress == currentAddress && x.TaskState == (int)TaskStatusEnum.SC_Execute, TaskOrderBy);
}
+ private static Dictionary<string, int> dict = new Dictionary<string, int>
+ {
+ { "SC01_YL", 0 },
+ { "SC02_YL", 0 },
+ { "SC03_YLDual", 0 },
+ { "SC04_YLDual", 0 },
+ { "SC05_YLDual", 0 }
+ };
+ private readonly static object lockerOldorNew = new object();
+ /// <summary>
+ /// 鍘熸枡搴撲换鍔℃煡璇�
+ /// </summary>
+ /// <param name="deviceNo">璁惧缂栧彿</param>
+ /// <param name="currentAddress">褰撳墠鍦板潃</param>
+ /// <returns>杩斿洖浠诲姟瀹炰綋瀵硅薄锛屽彲鑳戒负null</returns>
+ public Dt_Task QueryStackerYLTask(string deviceNo,TaskTypeGroup? taskTypeGroup= null)
+ {
+ lock (lockerOldorNew)
+ {
+ int OldorNew = dict[deviceNo];
+ if (taskTypeGroup == null)
+ {
+ Dt_Task taskSend = BaseDal.QueryFirst(x => x.DeviceCode == deviceNo && x.TaskState == (int)TaskStatusEnum.SC_Execute && x.TaskType != TaskTypeEnum.OldYLOutbound.ObjToInt(), TaskOrderBy);
+ if (taskSend == null || OldorNew == 0)
+ {
+ dict[deviceNo] = 1;
+ List<Dt_Task> specificTasks = BaseDal.QueryData(t => t.DeviceCode == deviceNo && t.TaskState == (int)TaskStatusEnum.SC_Execute && t.TaskType == TaskTypeEnum.OldYLOutbound.ObjToInt()).OrderBy(t => t.CreateDate.Date)
+ .ThenBy(t => t.Grade)
+ .ThenBy(t => t.TaskNum)
+ .ToList();
+ if (specificTasks.Any())
+ {
+ //鏍规嵁鏃堕棿绛涙煡涓ユ牸鎺掑簭
+ Dt_Task taskCheck = BaseDal.QueryData(t => t.TaskState == (int)TaskStatusEnum.SC_Execute && t.TaskType == TaskTypeEnum.OldYLOutbound.ObjToInt()).OrderBy(t => t.CreateDate.Date)
+ .ThenBy(t => t.Grade)
+ .ThenBy(t => t.TaskNum)
+ .FirstOrDefault();
+ Dt_Task taskCheckSend = specificTasks.FirstOrDefault();
+ if (taskCheck.CreateDate.Date == taskCheckSend.CreateDate.Date && taskCheckSend.Grade <= taskCheck.Grade)
+ {
+ taskSend = taskCheckSend;
+ }
+ }
+ }
+ else
+ {
+ dict[deviceNo] = 0;
+ }
+ return taskSend;
+ }
+ else
+ {
+ Dt_Task taskSend = null;
+ if (OldorNew == 0)
+ {
+ dict[deviceNo] = 1;
+ List<Dt_Task> specificTasks = BaseDal.QueryData(t => t.DeviceCode == deviceNo && t.TaskState == (int)TaskStatusEnum.SC_Execute && t.TaskType == TaskTypeEnum.OldYLOutbound.ObjToInt()).OrderBy(t => t.CreateDate.Date)
+ .ThenBy(t => t.Grade)
+ .ThenBy(t => t.TaskNum)
+ .ToList();
+ if (specificTasks.Any())
+ {
+ //鏍规嵁鏃堕棿绛涙煡涓ユ牸鎺掑簭
+ Dt_Task taskCheck = BaseDal.QueryData(t => t.TaskState == (int)TaskStatusEnum.SC_Execute && t.TaskType == TaskTypeEnum.OldYLOutbound.ObjToInt()).OrderBy(t => t.CreateDate.Date)
+ .ThenBy(t => t.Grade)
+ .ThenBy(t => t.TaskNum)
+ .FirstOrDefault();
+ Dt_Task taskCheckSend = specificTasks.FirstOrDefault();
+ if (taskCheck.CreateDate.Date == taskCheckSend.CreateDate.Date && taskCheckSend.Grade <= taskCheck.Grade)
+ {
+ taskSend = taskCheckSend;
+ }
+ }
+ }
+ else
+ {
+ dict[deviceNo] = 0;
+ taskSend = BaseDal.QueryFirst(x => x.DeviceCode == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskType != TaskTypeEnum.OldYLOutbound.ObjToInt() && x.TaskState == (int)TaskStatusEnum.SC_Execute, TaskOrderBy);
+ }
+ return taskSend;
+ }
+ }
+ }
/// <summary>
/// 鏍规嵁璁惧缂栧彿銆佸綋鍓嶅湴鍧�鎸夌収浼樺厛绾т互鍙婂垱寤烘椂闂存帓搴忔煡璇换鍔℃睜鍏ュ簱绫诲瀷鐨勬柊澧炵殑浠诲姟
--
Gitblit v1.9.3