From 5d55a31d8ce95e511ffb408f38ed06e81742b67e Mon Sep 17 00:00:00 2001
From: xiazhengtongxue <133085197+xiazhengtongxue@users.noreply.github.com>
Date: 星期五, 27 三月 2026 16:17:30 +0800
Subject: [PATCH] 1
---
项目代码/WCSServices/WIDESEAWCS_TaskInfoService/TaskService.cs | 559 +++++++++++++++++++++++++++++++++++++++++--------------
1 files changed, 413 insertions(+), 146 deletions(-)
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_TaskInfoService/TaskService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_TaskInfoService/TaskService.cs"
index abcbd34..6c99934 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_TaskInfoService/TaskService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_TaskInfoService/TaskService.cs"
@@ -23,6 +23,7 @@
using RYB_PTL_API;
using SqlSugar;
using System.Collections.Generic;
+using System.Diagnostics;
using System.Diagnostics.CodeAnalysis;
using System.DirectoryServices.Protocols;
using System.Linq;
@@ -90,7 +91,7 @@
public List<int> TaskRelocationTypes => typeof(TaskTypeEnum).GetEnumIndexList().Where(x => x >= 900 && x < 1000).ToList();
- public TaskService(ITaskRepository BaseDal, IMapper mapper, ICacheService cacheService, IRouterService routerService, ITaskExecuteDetailService taskExecuteDetailService, ITaskExecuteDetailRepository taskExecuteDetailRepository, IStationMangerRepository stationMangerRepository, IRouterRepository routerRepository, IApiInfoRepository apiInfoRepository,ILocationInfoRepository locationInfoRepository,IUnitOfWorkManage unitOfWorkManage, ILocationInfoService locationInfoService,ILocationStatusChangeRecordService locationStatusChangeRecordService,IErrorInfoRepository errorInfoRepository) : base(BaseDal)
+ public TaskService(ITaskRepository BaseDal, IMapper mapper, ICacheService cacheService, IRouterService routerService, ITaskExecuteDetailService taskExecuteDetailService, ITaskExecuteDetailRepository taskExecuteDetailRepository, IStationMangerRepository stationMangerRepository, IRouterRepository routerRepository, IApiInfoRepository apiInfoRepository, ILocationInfoRepository locationInfoRepository, IUnitOfWorkManage unitOfWorkManage, ILocationInfoService locationInfoService, ILocationStatusChangeRecordService locationStatusChangeRecordService, IErrorInfoRepository errorInfoRepository) : base(BaseDal)
{
_mapper = mapper;
_cacheService = cacheService;
@@ -103,7 +104,7 @@
_locationInfoRepository = locationInfoRepository;
_unitOfWorkManage = unitOfWorkManage;
_locationInfoService = locationInfoService;
- _locationStatusChangeRecordService=locationStatusChangeRecordService;
+ _locationStatusChangeRecordService = locationStatusChangeRecordService;
_errorInfoRepository = errorInfoRepository;
}
static object lock_taskReceive = new object();
@@ -120,19 +121,20 @@
{
lock (lock_taskReceive)
{
+ WriteLog.Write_Log("鍏ュ簱浠诲姟涓嬪彂", "WMS鍏ュ簱浠诲姟鎺ユ敹鍙傛暟", "鎺ユ敹鍙傛暟", $"鍙傛暟锛歿taskDTO.ToJson()}");
List<Dt_Task> tasks = new List<Dt_Task>();
- List<Dt_Task> taskOlds = BaseDal.QueryData(x=> taskDTO.Tasks.Select(x => x.TaskDescribe.ContainerCode).Contains(x.PalletCode));
- List<Dt_LocationInfo> locationInfos = _locationInfoRepository.GetCanOut(taskDTO.Tasks.Select(x=>x.TaskDescribe.ContainerCode).ToList());
+ List<Dt_Task> taskOlds = BaseDal.QueryData(x => taskDTO.Tasks.Select(x => x.TaskDescribe.ContainerCode).Contains(x.PalletCode));
+ List<Dt_LocationInfo> locationInfos = _locationInfoRepository.GetCanOut(taskDTO.Tasks.Select(x => x.TaskDescribe.ContainerCode).ToList());
List<Dt_StationManger> stationMangers = _stationMangerRepository.QueryData();
////涓嬪彂浠诲姟缁�
//string taskGroup= taskDTO.TaskGroupCode.IsNullOrEmpty() ? Guid.NewGuid().ToString().Replace("-","") : taskDTO.TaskGroupCode;
- foreach (var item in taskDTO.Tasks.OrderBy(x=>x.TaskDescribe.ToStationCode))
+ foreach (var item in taskDTO.Tasks.OrderBy(x => x.TaskDescribe.ToStationCode))
{
if (item.TaskDescribe.ToStationCode.IsNullOrEmpty()) throw new Exception($"浠诲姟{item.TaskCode}鍑哄簱鐩爣鎿嶄綔鍙颁笉鑳戒负绌�");
//鑾峰彇鎿嶄綔鍙�
Dt_StationManger? stationManger = stationMangers.FirstOrDefault(x => x.PickStationCode == item.TaskDescribe.ToStationCode);
if (stationManger == null) throw new Exception($"浠诲姟{item.TaskCode}鍑哄簱鐩爣鎿嶄綔鍙皗item.TaskDescribe.ToStationCode}涓嶅瓨鍦�");
- Dt_Task? taskOld = taskOlds.FirstOrDefault(x=>x.PalletCode==item.TaskDescribe.ContainerCode);
+ Dt_Task? taskOld = taskOlds.FirstOrDefault(x => x.PalletCode == item.TaskDescribe.ContainerCode);
if (taskOld != null)
{
errorMsg += $"鏂欑{taskOld.PalletCode}" + (taskOld.TaskType == TaskTypeEnum.Inbound.ObjToInt() ? "鍏ュ簱浠诲姟宸插瓨鍦�;" : "鍑哄簱浠诲姟宸插瓨鍦�;");
@@ -145,7 +147,7 @@
errorMsg += $"鏂欑{item.TaskDescribe.ContainerCode}涓嶅瓨鍦�;";
content.FailData.Add(new BinCodeObj() { Bincode = item.TaskDescribe.ContainerCode });
continue;
- };
+ }
Dt_LocationInfo? noOutLocation = locationInfos.FirstOrDefault(x => (x.LocationStatus != LocationStatusEnum.InStock.ObjToInt() || x.EnableStatus != EnableStatusEnum.Normal.ObjToInt()) && x.PalletCode == item.TaskDescribe.ContainerCode);
if (noOutLocation != null)
{
@@ -169,7 +171,7 @@
locationInfos.ForEach(x =>
{
- x.LocationStatus=LocationStatusEnum.Lock.ObjToInt();
+ x.LocationStatus = LocationStatusEnum.Lock.ObjToInt();
});
//娣诲姞浠诲姟鏇存柊璐т綅鏁版嵁
_unitOfWorkManage.BeginTran();
@@ -177,11 +179,11 @@
_locationInfoRepository.UpdateData(locationInfos);
_unitOfWorkManage.CommitTran();
_taskExecuteDetailService.AddTaskExecuteDetail(tasks.Select(x => x.TaskNum).ToList(), "鎺ユ敹WMS浠诲姟");
- if (tasks.Count>0)
+ if (tasks.Count > 0)
{
_locationStatusChangeRecordService.AddLocationStatusChangeRecord(locationInfos, LocationStatusEnum.InStock, LocationStatusEnum.Lock, LocationChangeType.OutboundAssignLocation, tasks);
}
- content.OK(errorMsg.IsNullOrEmpty()? "鎴愬姛": errorMsg);
+ content.OK(errorMsg.IsNullOrEmpty() ? "鎴愬姛" : errorMsg);
}
}
catch (Exception ex)
@@ -190,7 +192,7 @@
}
return content;
}
-
+
/// <summary>
/// 瀹瑰櫒鍏ュ簱鍒涘缓浠诲姟
/// </summary>
@@ -200,13 +202,13 @@
WebResponseContent content = new WebResponseContent();
try
{
- WriteLog.Write_Log("瀹瑰櫒鍏ュ簱鍒涘缓浠诲姟", $"杈撻�佺嚎淇℃伅", "寮�濮嬪叆搴�", $"鎵樼洏鍙穥containerFlowDTO.ContainerCode}锛岃澶噞deviceCode}");
List<Dt_LocationInfo> locationInfos = _locationInfoRepository.QueryData();
Dt_LocationInfo? locationInfo = locationInfos.FirstOrDefault(x => x.PalletCode == containerFlowDTO.ContainerCode);
if (locationInfo != null) throw new Exception($"搴撲綅鏂欑鍙穥containerFlowDTO.ContainerCode}宸插瓨鍦�");
Dt_Task taskOld = BaseDal.QueryFirst(x => x.PalletCode == containerFlowDTO.ContainerCode);
- if (taskOld !=null && taskOld.PalletCode == containerFlowDTO.ContainerCode && taskOld.TaskType == TaskTypeEnum.Inbound.ObjToInt() && taskOld.TaskState == TaskStatusEnum.CL_Executing.ObjToInt() && taskOld.DeviceCode == deviceCode)
+ if (taskOld != null && taskOld.PalletCode == containerFlowDTO.ContainerCode && taskOld.TaskType == TaskTypeEnum.Inbound.ObjToInt() && taskOld.TaskState == TaskStatusEnum.CL_Executing.ObjToInt() && taskOld.DeviceCode == deviceCode)
{
+ //Thread.Sleep(500);
return content.OK();
}
if (taskOld != null && taskOld.PalletCode == containerFlowDTO.ContainerCode && taskOld.TaskType == TaskTypeEnum.Inbound.ObjToInt() && taskOld.TaskState == TaskStatusEnum.CL_Executing.ObjToInt() && taskOld.DeviceCode != deviceCode)
@@ -229,7 +231,6 @@
Dt_LocationInfo? noInLocation = locationInfos.FirstOrDefault(x => x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && x.EnableStatus == EnableStatusEnum.Normal.ObjToInt());
if (noInLocation == null) throw new Exception($"鍙敤璐т綅涓嶈冻!");
Dt_StationManger stationManger = _stationMangerRepository.QueryFirst(x => x.StationType == StationTypeEnum.StationType_OnlyInbound.ObjToInt() && x.StationDeviceCode == deviceCode);
- WriteLog.Write_Log("瀹瑰櫒鍏ュ簱鍒涘缓浠诲姟", $"绔欏彴淇℃伅", "鏌ヨ绔欏彴", $"绔欏彴鍙穥stationManger.StationCode}锛岃澶噞stationManger.StationDeviceCode}");
//鍒涘缓浠诲姟
Dt_Task task = new Dt_Task();
task.PalletCode = containerFlowDTO.ContainerCode;
@@ -242,10 +243,9 @@
task.Roadway = noInLocation.RoadwayNo;
task.DeviceCode = stationManger.StationDeviceCode;
task.TaskState = TaskStatusEnum.CL_Executing.ObjToInt();
-
+
//娣诲姞浠诲姟
int taskId = BaseDal.AddData(task);
- WriteLog.Write_Log("瀹瑰櫒鍏ュ簱鍒涘缓浠诲姟", $"浠诲姟淇℃伅", "鍒涘缓鍏ュ簱", $"浠诲姟鍙凤細{taskId},鎵樼洏缂栧彿锛歿task.PalletCode}");
if (type > 0)
{
_taskExecuteDetailService.AddTaskExecuteDetail(new List<int>() { task.TaskNum }, "鎵嬪姩鎸夐挳鍏ュ簱");
@@ -254,11 +254,11 @@
{
_taskExecuteDetailService.AddTaskExecuteDetail(new List<int>() { task.TaskNum }, "鍒涘缓鍏ュ簱浠诲姟");
}
+ WriteLog.Write_Log("鍏ュ簱浠诲姟涓嬪彂", "瀹瑰櫒鍏ュ簱浠诲姟娣诲姞浠诲姟", "娣诲姞浠诲姟", $"浠诲姟锛歿task.ToJson()}");
content.OK("鎴愬姛");
}
catch (Exception ex)
{
- WriteLog.Write_Log("瀹瑰櫒鍏ュ簱鍒涘缓浠诲姟", $"浠诲姟", "鍒涘缓鍏ュ簱", $"澶辫触锛歿ex.Message}");
content.Error($"閿欒淇℃伅:{ex.Message}");
}
return content;
@@ -466,14 +466,14 @@
/// 鐢宠鍏ュ簱
/// </summary>
/// <returns></returns>
- public WebResponseContent RequestInTask(string stationCode,string barCode)
+ public WebResponseContent RequestInTask(string stationCode, string barCode)
{
WebResponseContent content = new WebResponseContent();
try
{
lock (lock_requestInTask)
{
- Dt_Task task = BaseDal.QueryFirst(x => x.PalletCode == barCode && x.TaskType==TaskTypeEnum.Inbound.ObjToInt() && x.NextAddress == stationCode && x.TaskState == TaskStatusEnum.CL_Executing.ObjToInt());
+ Dt_Task task = BaseDal.QueryFirst(x => x.PalletCode == barCode && x.TaskType == TaskTypeEnum.Inbound.ObjToInt() && x.NextAddress == stationCode && x.TaskState == TaskStatusEnum.CL_Executing.ObjToInt());
if (task == null) throw new Exception($"{barCode}鏂欑鏈壘鍒颁换鍔�!");
Dt_LocationInfo? locationInfo = _locationInfoService.AssignLocation();
if (locationInfo == null) throw new Exception($"鍙敤璐т綅涓嶈冻!");
@@ -490,6 +490,7 @@
_unitOfWorkManage.CommitTran();
_taskExecuteDetailService.AddTaskExecuteDetail(new List<int>() { task.TaskNum }, $"鍒嗛厤璐т綅{locationInfo.LocationCode}");
_locationStatusChangeRecordService.AddLocationStatusChangeRecord(locationInfo, LocationStatusEnum.Free, LocationStatusEnum.Lock, LocationChangeType.InboundAssignLocation, task.TaskNum);
+ WriteLog.Write_Log("鍏ュ簱浠诲姟涓嬪彂", "鐢宠鍏ュ簱鎺ュ彛", "鏇存柊浠诲姟", $"浠诲姟锛歿task.ToJson()}");
content.OK("鎴愬姛");
}
}
@@ -545,7 +546,7 @@
BaseDal.UpdateData(task);
_taskExecuteDetailService.AddTaskExecuteDetail(task, task.ExceptionMessage);
-
+ WriteLog.Write_Log("鏇存柊浠诲姟寮傚父淇℃伅", "鏇存柊浠诲姟鎺ュ彛", "鏇存柊浠诲姟", $"浠诲姟锛歿task.ToJson()}");
content = WebResponseContent.Instance.OK();
}
catch (Exception ex)
@@ -638,7 +639,7 @@
return content;
}
-
+
/// <summary>
/// 鎺ュ彈WMS鎵嬪姩瀹屾垚浠诲姟
/// </summary>
@@ -648,6 +649,7 @@
{
try
{
+ WriteLog.Write_Log("鎺ュ彈WMS鎵嬪姩瀹屾垚浠诲姟", "鎺ュ彈WMS鎵嬪姩瀹屾垚浠诲姟鎺ュ彛", "浠诲姟鍙�", $"浠诲姟鍙凤細{taskNum}");
Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
if (task != null)
{
@@ -667,9 +669,10 @@
/// <returns></returns>
public WebResponseContent AgvTaskFlow(string code)
{
- WebResponseContent content=new WebResponseContent();
+ WebResponseContent content = new WebResponseContent();
try
{
+ WriteLog.Write_Log("AGV浠诲姟鏀捐", "AGV浠诲姟鏀捐鎺ュ彛", "鏂欑鍙�", $"鏂欑锛歿code}");
string? url = _apiInfoRepository.QueryFirst(x => x.ApiCode == APIEnum.AgvTaskFlow.ToString())?.ApiAddress;
if (string.IsNullOrEmpty(url)) throw new Exception($"{code},鏈壘鍒癆GV浠诲姟鏀捐鎺ュ彛,璇锋鏌ユ帴鍙i厤缃�");
AgvTaskFlowDTO agvTaskFlowDTO = new AgvTaskFlowDTO()
@@ -679,6 +682,7 @@
};
string request = JsonConvert.SerializeObject(agvTaskFlowDTO, settings);
string response = HttpHelper.Post(url, request);
+ WriteLog.Write_Log("AGV浠诲姟鏀捐鎺ュ彛璇锋眰AGV", "AGV浠诲姟鏀捐鎺ュ彛", $"璇锋眰锛歿request}锛屽洖浼狅細{response}");
AgvResponseContent agvResponse = JsonConvert.DeserializeObject<AgvResponseContent>(response) ?? throw new Exception($"{code},鏈帴鏀跺埌AGV浠诲姟鏀捐杩斿洖鍊�");
if (!agvResponse.Success) throw new Exception($"鏂欑{code},AGV浠诲姟鏀捐閿欒,淇℃伅:{agvResponse.Message}");
content.OK();
@@ -693,11 +697,12 @@
/// WMS鏂欑鍒拌揪鎷i�変綅涓婃姤
/// </summary>
/// <returns></returns>
- public WebResponseContent WMSPickUp(string stationCode,string pickCode)
+ public WebResponseContent WMSPickUp(string stationCode, string pickCode)
{
WebResponseContent content = new WebResponseContent();
try
{
+ WriteLog.Write_Log("WMS鏂欑鍒拌揪鎷i�変綅涓婃姤", "WMS鏂欑鍒拌揪鎷i�変綅涓婃姤鎴愭帴鍙�", "淇℃伅", $"鎷i�変綅锛歿stationCode}锛屾枡绠憋細{pickCode}");
string? url = _apiInfoRepository.QueryFirst(x => x.ApiCode == APIEnum.WMSPickArrivedUp.ToString())?.ApiAddress;
if (string.IsNullOrEmpty(url)) throw new Exception($"鏈壘鍒癢MS鏂欑鍒拌揪鎷i�変綅涓婃姤鎺ュ彛,璇锋鏌ユ帴鍙i厤缃�");
ContainerArriveDTO containerArriveDTO = new ContainerArriveDTO()
@@ -707,6 +712,7 @@
};
string request = JsonConvert.SerializeObject(containerArriveDTO, settings);
string response = HttpHelper.Post(url, request);
+ WriteLog.Write_Log("涓婃姤WMS鏂欑鍒拌揪", "涓婃姤WMS鏂欑鍒拌揪", "淇℃伅", $"璇锋眰锛歿request}锛屽洖浼狅細{response}");
WMSResponseContent wMSResponse = JsonConvert.DeserializeObject<WMSResponseContent>(response) ?? throw new Exception($"{pickCode},鏈帴鏀跺埌WMS鏂欑鍒拌揪鎷i�変綅涓婃姤杩斿洖鍊�");
if (wMSResponse.Code != "0") throw new Exception($"鏂欑{pickCode}WMS鏂欑鍒拌揪鎷i�変綅涓婃姤閿欒,淇℃伅:{wMSResponse.Msg}");
content.OK();
@@ -717,6 +723,9 @@
}
return content;
}
+ // 鍦ㄧ被涓坊鍔犻潤鎬侀攣瀵硅薄
+ private static readonly object _taskCompleteLock = new object();
+
/// <summary>
/// 浠诲姟瀹屾垚
/// </summary>
@@ -725,93 +734,212 @@
public WebResponseContent TaskCompleted(int taskNum)
{
WebResponseContent content = new WebResponseContent();
- try
+
+ // 浣跨敤閿佺‘淇濆悓涓�浠诲姟涓嶄細骞跺彂澶勭悊
+ lock (_taskCompleteLock)
{
- Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
- if (task != null && task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)//鍑哄簱浠诲姟瀹屾垚閫昏緫
+ try
{
- Dt_LocationInfo locationInfo = _locationInfoRepository.QueryFirst(x=>x.PalletCode==task.PalletCode);
- if (locationInfo.LocationStatus != LocationStatusEnum.Lock.ObjToInt())
+ WriteLog.Write_Log("浠诲姟瀹屾垚", "浠诲姟瀹屾垚鎺ュ彛", "浠诲姟鍙�", $"浠诲姟锛歿taskNum}");
+
+ // 鍐嶆鏌ヨ浠诲姟鐘舵�侊紝闃叉鍦ㄩ攣绛夊緟鏈熼棿浠诲姟鐘舵�佸凡鏀瑰彉
+ Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
+ if (task == null)
{
- return content.Error($"{locationInfo.LocationCode}璐т綅鐘舵�佷笉姝g‘");
+ return content.Error($"浠诲姟{taskNum}涓嶅瓨鍦�");
}
- task.TaskState = TaskStatusEnum.Finish.ObjToInt();
- locationInfo.LocationStatus = LocationStatusEnum.Free.ObjToInt();
- locationInfo.PalletCode = "";
- //鏂欑鍑哄簱瀹屾垚涓婃姤缁橶MS
- string? url = _apiInfoRepository.QueryFirst(x => x.ApiCode == APIEnum.WMSInOutBoundBack.ToString())?.ApiAddress;
- if (string.IsNullOrEmpty(url))
+
+ // 妫�鏌ヤ换鍔$姸鎬侊紝閬垮厤閲嶅瀹屾垚
+ if (task.TaskState == TaskStatusEnum.Finish.ObjToInt())
{
- _taskExecuteDetailService.AddTaskExecuteDetail(task, $"鏈壘鍒癢MS鍑哄簱涓婃姤鎺ュ彛,璇锋鏌ユ帴鍙i厤缃�");
- UpdateTaskExceptionMessage(taskNum, $"鏈壘鍒癢MS鍑哄簱涓婃姤鎺ュ彛,璇锋鏌ユ帴鍙i厤缃�");
- return content.Error($"{taskNum},鏈壘鍒癢MS鍑哄簱涓婃姤鎺ュ彛,璇锋鏌ユ帴鍙i厤缃�");
+ return content.Error($"浠诲姟{taskNum}宸插畬鎴愶紝璇峰嬁閲嶅鎿嶄綔");
}
- ContainerInFinishDTO containerInFinishDTO = new ContainerInFinishDTO()
+
+ if (task != null && task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)//鍑哄簱浠诲姟瀹屾垚閫昏緫
{
- TaskCode = task.TaskNum.ToString(),
- ContainerCode = task.PalletCode,
- StationCode = task.TargetAddress,
- LocationCode = task.SourceAddress,
- CompleteType = 1
- };
- string request = JsonConvert.SerializeObject(containerInFinishDTO, settings);
-
- _unitOfWorkManage.BeginTran();
- _locationInfoRepository.UpdateData(locationInfo);
- BaseDal.DeleteAndMoveIntoHty(task, App.User?.UserId == 0 ? OperateTypeEnum.鑷姩瀹屾垚 : OperateTypeEnum.浜哄伐瀹屾垚);
- _unitOfWorkManage.CommitTran();
- _locationStatusChangeRecordService.AddLocationStatusChangeRecord(locationInfo, LocationStatusEnum.Lock, LocationStatusEnum.Free, LocationChangeType.OutboundCompleted, task.TaskNum);
- //璋冪敤鎺ュ彛
- string response = HttpHelper.Post(url, request);
- WMSResponseContent wMSResponse = JsonConvert.DeserializeObject<WMSResponseContent>(response) ?? throw new Exception($"{taskNum},鏈帴鏀跺埌WMS鍑哄簱涓婃姤杩斿洖鍊�");
- if (wMSResponse.Code != "0") content.Message=$"鍑哄簱浠诲姟{task.TaskNum}WMS鍑哄簱涓婃姤閿欒,淇℃伅:{wMSResponse.Msg}";
+ Dt_LocationInfo locationInfo = _locationInfoRepository.QueryFirst(x => x.PalletCode == task.PalletCode);
+ if (locationInfo.LocationStatus != LocationStatusEnum.Lock.ObjToInt())
+ {
+ return content.Error($"{locationInfo.LocationCode}璐т綅鐘舵�佷笉姝g‘");
+ }
+ task.TaskState = TaskStatusEnum.Finish.ObjToInt();
+ locationInfo.LocationStatus = LocationStatusEnum.Free.ObjToInt();
+ locationInfo.PalletCode = "";
+ //鏂欑鍑哄簱瀹屾垚涓婃姤缁橶MS
+ string? url = _apiInfoRepository.QueryFirst(x => x.ApiCode == APIEnum.WMSInOutBoundBack.ToString())?.ApiAddress;
+ if (string.IsNullOrEmpty(url))
+ {
+ _taskExecuteDetailService.AddTaskExecuteDetail(task, $"鏈壘鍒癢MS鍑哄簱涓婃姤鎺ュ彛,璇锋鏌ユ帴鍙i厤缃�");
+ UpdateTaskExceptionMessage(taskNum, $"鏈壘鍒癢MS鍑哄簱涓婃姤鎺ュ彛,璇锋鏌ユ帴鍙i厤缃�");
+ return content.Error($"{taskNum},鏈壘鍒癢MS鍑哄簱涓婃姤鎺ュ彛,璇锋鏌ユ帴鍙i厤缃�");
+ }
+ ContainerInFinishDTO containerInFinishDTO = new ContainerInFinishDTO()
+ {
+ TaskCode = task.TaskNum.ToString(),
+ ContainerCode = task.PalletCode,
+ StationCode = task.TargetAddress,
+ LocationCode = task.SourceAddress,
+ CompleteType = 1
+ };
+ string request = JsonConvert.SerializeObject(containerInFinishDTO, settings);
+
+ _unitOfWorkManage.BeginTran();
+ _locationInfoRepository.UpdateData(locationInfo);
+ BaseDal.DeleteAndMoveIntoHty(task, App.User?.UserId == 0 ? OperateTypeEnum.鑷姩瀹屾垚 : OperateTypeEnum.浜哄伐瀹屾垚);
+ _unitOfWorkManage.CommitTran();
+ _locationStatusChangeRecordService.AddLocationStatusChangeRecord(locationInfo, LocationStatusEnum.Lock, LocationStatusEnum.Free, LocationChangeType.OutboundCompleted, task.TaskNum);
+ //璋冪敤鎺ュ彛
+ string response = HttpHelper.Post(url, request);
+ WriteLog.Write_Log("WMS鍑哄簱浠诲姟瀹屾垚鍥炰紶", "浠诲姟瀹屾垚鎺ュ彛", "浠诲姟淇℃伅", $"璇锋眰锛歿request}锛屽洖浼狅細{response}");
+ WMSResponseContent wMSResponse = JsonConvert.DeserializeObject<WMSResponseContent>(response) ?? throw new Exception($"{taskNum},鏈帴鏀跺埌WMS鍑哄簱涓婃姤杩斿洖鍊�");
+ if (wMSResponse.Code != "0") content.Message = $"鍑哄簱浠诲姟{task.TaskNum}WMS鍑哄簱涓婃姤閿欒,淇℃伅:{wMSResponse.Msg}";
+ }
+ else if (task != null && task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)//鍏ュ簱浠诲姟瀹屾垚閫昏緫
+ {
+ string? url = _apiInfoRepository.QueryFirst(x => x.ApiCode == APIEnum.WMSInOutBoundBack.ToString())?.ApiAddress;
+ if (string.IsNullOrEmpty(url))
+ {
+ _taskExecuteDetailService.AddTaskExecuteDetail(task, $"鏈壘鍒癢MS鍏ュ簱涓婃姤鎺ュ彛,璇锋鏌ユ帴鍙i厤缃�");
+ UpdateTaskExceptionMessage(taskNum, $"鏈壘鍒癢MS鍏ュ簱涓婃姤鎺ュ彛,璇锋鏌ユ帴鍙i厤缃�");
+ return content.Error($"{taskNum},鏈壘鍒癢MS鍏ュ簱涓婃姤鎺ュ彛,璇锋鏌ユ帴鍙i厤缃�");
+ }
+ ContainerInFinishDTO containerInFinishDTO = new ContainerInFinishDTO()
+ {
+ TaskCode = task.TaskNum.ToString(),
+ ContainerCode = task.PalletCode,
+ StationCode = task.SourceAddress,
+ LocationCode = task.TargetAddress,
+ CompleteType = 2
+ };
+ string request = JsonConvert.SerializeObject(containerInFinishDTO, settings);
+
+ Dt_LocationInfo locationInfo = _locationInfoRepository.QueryFirst(x => x.LocationCode == task.TargetAddress);
+ if (locationInfo.LocationStatus != LocationStatusEnum.Lock.ObjToInt())
+ {
+ return content.Error($"{locationInfo.LocationCode}璐т綅鐘舵�佷笉姝g‘");
+ }
+ task.TaskState = TaskStatusEnum.Finish.ObjToInt();
+ locationInfo.LocationStatus = LocationStatusEnum.InStock.ObjToInt();
+ locationInfo.PalletCode = task.PalletCode;
+ _unitOfWorkManage.BeginTran();
+ _locationInfoRepository.UpdateData(locationInfo);
+ BaseDal.DeleteAndMoveIntoHty(task, App.User?.UserId == 0 ? OperateTypeEnum.鑷姩瀹屾垚 : OperateTypeEnum.浜哄伐瀹屾垚);
+ _unitOfWorkManage.CommitTran();
+ _locationStatusChangeRecordService.AddLocationStatusChangeRecord(locationInfo, LocationStatusEnum.Lock, LocationStatusEnum.InStock, LocationChangeType.InboundCompleted, task.TaskNum);
+ //璋冪敤鎺ュ彛
+ string response = HttpHelper.Post(url, request);
+ WriteLog.Write_Log("WMS鍏ュ簱浠诲姟瀹屾垚鍥炰紶", "浠诲姟瀹屾垚鎺ュ彛", "浠诲姟淇℃伅", $"璇锋眰锛歿request}锛屽洖浼狅細{response}");
+ WMSResponseContent wMSResponse = JsonConvert.DeserializeObject<WMSResponseContent>(response) ?? throw new Exception($"{taskNum},鏈帴鏀跺埌WMS鍏ュ簱涓婃姤杩斿洖鍊�");
+ if (wMSResponse.Code != "0") content.Message = $"鍏ュ簱浠诲姟{task.TaskNum}WMS鍏ュ簱涓婃姤閿欒,淇℃伅:{wMSResponse.Msg}";
+ }
+ content.OK("浠诲姟瀹屾垚");
}
- else if(task != null && task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)//鍏ュ簱浠诲姟瀹屾垚閫昏緫
+ catch (Exception ex)
{
- string? url = _apiInfoRepository.QueryFirst(x => x.ApiCode == APIEnum.WMSInOutBoundBack.ToString())?.ApiAddress;
- if (string.IsNullOrEmpty(url))
- {
- _taskExecuteDetailService.AddTaskExecuteDetail(task, $"鏈壘鍒癢MS鍏ュ簱涓婃姤鎺ュ彛,璇锋鏌ユ帴鍙i厤缃�");
- UpdateTaskExceptionMessage(taskNum, $"鏈壘鍒癢MS鍏ュ簱涓婃姤鎺ュ彛,璇锋鏌ユ帴鍙i厤缃�");
- return content.Error($"{taskNum},鏈壘鍒癢MS鍏ュ簱涓婃姤鎺ュ彛,璇锋鏌ユ帴鍙i厤缃�");
- }
- ContainerInFinishDTO containerInFinishDTO = new ContainerInFinishDTO()
- {
- TaskCode = task.TaskNum.ToString(),
- ContainerCode = task.PalletCode,
- StationCode = task.SourceAddress,
- LocationCode = task.TargetAddress,
- CompleteType = 2
- };
- string request = JsonConvert.SerializeObject(containerInFinishDTO, settings);
-
- Dt_LocationInfo locationInfo = _locationInfoRepository.QueryFirst(x => x.LocationCode == task.TargetAddress);
- if (locationInfo.LocationStatus != LocationStatusEnum.Lock.ObjToInt())
- {
- return content.Error($"{locationInfo.LocationCode}璐т綅鐘舵�佷笉姝g‘");
- }
- task.TaskState = TaskStatusEnum.Finish.ObjToInt();
- locationInfo.LocationStatus = LocationStatusEnum.InStock.ObjToInt();
- locationInfo.PalletCode = task.PalletCode;
- _unitOfWorkManage.BeginTran();
- _locationInfoRepository.UpdateData(locationInfo);
- BaseDal.DeleteAndMoveIntoHty(task, App.User?.UserId == 0 ? OperateTypeEnum.鑷姩瀹屾垚 : OperateTypeEnum.浜哄伐瀹屾垚);
- _unitOfWorkManage.CommitTran();
- _locationStatusChangeRecordService.AddLocationStatusChangeRecord(locationInfo, LocationStatusEnum.Lock, LocationStatusEnum.InStock, LocationChangeType.InboundCompleted, task.TaskNum);
- //璋冪敤鎺ュ彛
- string response = HttpHelper.Post(url, request);
- WMSResponseContent wMSResponse = JsonConvert.DeserializeObject<WMSResponseContent>(response) ?? throw new Exception($"{taskNum},鏈帴鏀跺埌WMS鍏ュ簱涓婃姤杩斿洖鍊�");
- if (wMSResponse.Code != "0") content.Message = $"鍏ュ簱浠诲姟{task.TaskNum}WMS鍏ュ簱涓婃姤閿欒,淇℃伅:{wMSResponse.Msg}";
+ _unitOfWorkManage.RollbackTran();
+ content.Error(ex.Message);
}
- content.OK("浠诲姟瀹屾垚");
+ return content;
}
- catch (Exception ex)
- {
- _unitOfWorkManage.RollbackTran();
- content.Error(ex.Message);
- }
- return content;
}
+ ///// <summary>
+ ///// 浠诲姟瀹屾垚
+ ///// </summary>
+ ///// <param name="taskNum"></param>
+ ///// <returns></returns>
+ //public WebResponseContent TaskCompleted(int taskNum)
+ //{
+ // WebResponseContent content = new WebResponseContent();
+ // try
+ // {
+ // WriteLog.Write_Log("浠诲姟瀹屾垚", "浠诲姟瀹屾垚鎺ュ彛", "浠诲姟鍙�", $"浠诲姟锛歿taskNum}");
+ // Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
+ // if (task != null && task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)//鍑哄簱浠诲姟瀹屾垚閫昏緫
+ // {
+ // Dt_LocationInfo locationInfo = _locationInfoRepository.QueryFirst(x => x.PalletCode == task.PalletCode);
+ // if (locationInfo.LocationStatus != LocationStatusEnum.Lock.ObjToInt())
+ // {
+ // return content.Error($"{locationInfo.LocationCode}璐т綅鐘舵�佷笉姝g‘");
+ // }
+ // task.TaskState = TaskStatusEnum.Finish.ObjToInt();
+ // locationInfo.LocationStatus = LocationStatusEnum.Free.ObjToInt();
+ // locationInfo.PalletCode = "";
+ // //鏂欑鍑哄簱瀹屾垚涓婃姤缁橶MS
+ // string? url = _apiInfoRepository.QueryFirst(x => x.ApiCode == APIEnum.WMSInOutBoundBack.ToString())?.ApiAddress;
+ // if (string.IsNullOrEmpty(url))
+ // {
+ // _taskExecuteDetailService.AddTaskExecuteDetail(task, $"鏈壘鍒癢MS鍑哄簱涓婃姤鎺ュ彛,璇锋鏌ユ帴鍙i厤缃�");
+ // UpdateTaskExceptionMessage(taskNum, $"鏈壘鍒癢MS鍑哄簱涓婃姤鎺ュ彛,璇锋鏌ユ帴鍙i厤缃�");
+ // return content.Error($"{taskNum},鏈壘鍒癢MS鍑哄簱涓婃姤鎺ュ彛,璇锋鏌ユ帴鍙i厤缃�");
+ // }
+ // ContainerInFinishDTO containerInFinishDTO = new ContainerInFinishDTO()
+ // {
+ // TaskCode = task.TaskNum.ToString(),
+ // ContainerCode = task.PalletCode,
+ // StationCode = task.TargetAddress,
+ // LocationCode = task.SourceAddress,
+ // CompleteType = 1
+ // };
+ // string request = JsonConvert.SerializeObject(containerInFinishDTO, settings);
+
+ // _unitOfWorkManage.BeginTran();
+ // _locationInfoRepository.UpdateData(locationInfo);
+ // BaseDal.DeleteAndMoveIntoHty(task, App.User?.UserId == 0 ? OperateTypeEnum.鑷姩瀹屾垚 : OperateTypeEnum.浜哄伐瀹屾垚);
+ // _unitOfWorkManage.CommitTran();
+ // _locationStatusChangeRecordService.AddLocationStatusChangeRecord(locationInfo, LocationStatusEnum.Lock, LocationStatusEnum.Free, LocationChangeType.OutboundCompleted, task.TaskNum);
+ // //璋冪敤鎺ュ彛
+ // string response = HttpHelper.Post(url, request);
+ // WriteLog.Write_Log("WMS鍑哄簱浠诲姟瀹屾垚鍥炰紶", "浠诲姟瀹屾垚鎺ュ彛", "浠诲姟淇℃伅", $"璇锋眰锛歿request}锛屽洖浼狅細{response}");
+ // WMSResponseContent wMSResponse = JsonConvert.DeserializeObject<WMSResponseContent>(response) ?? throw new Exception($"{taskNum},鏈帴鏀跺埌WMS鍑哄簱涓婃姤杩斿洖鍊�");
+ // if (wMSResponse.Code != "0") content.Message = $"鍑哄簱浠诲姟{task.TaskNum}WMS鍑哄簱涓婃姤閿欒,淇℃伅:{wMSResponse.Msg}";
+ // }
+ // else if (task != null && task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)//鍏ュ簱浠诲姟瀹屾垚閫昏緫
+ // {
+ // string? url = _apiInfoRepository.QueryFirst(x => x.ApiCode == APIEnum.WMSInOutBoundBack.ToString())?.ApiAddress;
+ // if (string.IsNullOrEmpty(url))
+ // {
+ // _taskExecuteDetailService.AddTaskExecuteDetail(task, $"鏈壘鍒癢MS鍏ュ簱涓婃姤鎺ュ彛,璇锋鏌ユ帴鍙i厤缃�");
+ // UpdateTaskExceptionMessage(taskNum, $"鏈壘鍒癢MS鍏ュ簱涓婃姤鎺ュ彛,璇锋鏌ユ帴鍙i厤缃�");
+ // return content.Error($"{taskNum},鏈壘鍒癢MS鍏ュ簱涓婃姤鎺ュ彛,璇锋鏌ユ帴鍙i厤缃�");
+ // }
+ // ContainerInFinishDTO containerInFinishDTO = new ContainerInFinishDTO()
+ // {
+ // TaskCode = task.TaskNum.ToString(),
+ // ContainerCode = task.PalletCode,
+ // StationCode = task.SourceAddress,
+ // LocationCode = task.TargetAddress,
+ // CompleteType = 2
+ // };
+ // string request = JsonConvert.SerializeObject(containerInFinishDTO, settings);
+
+ // Dt_LocationInfo locationInfo = _locationInfoRepository.QueryFirst(x => x.LocationCode == task.TargetAddress);
+ // if (locationInfo.LocationStatus != LocationStatusEnum.Lock.ObjToInt())
+ // {
+ // return content.Error($"{locationInfo.LocationCode}璐т綅鐘舵�佷笉姝g‘");
+ // }
+ // task.TaskState = TaskStatusEnum.Finish.ObjToInt();
+ // locationInfo.LocationStatus = LocationStatusEnum.InStock.ObjToInt();
+ // locationInfo.PalletCode = task.PalletCode;
+ // _unitOfWorkManage.BeginTran();
+ // _locationInfoRepository.UpdateData(locationInfo);
+ // BaseDal.DeleteAndMoveIntoHty(task, App.User?.UserId == 0 ? OperateTypeEnum.鑷姩瀹屾垚 : OperateTypeEnum.浜哄伐瀹屾垚);
+ // _unitOfWorkManage.CommitTran();
+ // _locationStatusChangeRecordService.AddLocationStatusChangeRecord(locationInfo, LocationStatusEnum.Lock, LocationStatusEnum.InStock, LocationChangeType.InboundCompleted, task.TaskNum);
+ // //璋冪敤鎺ュ彛
+ // string response = HttpHelper.Post(url, request);
+ // WriteLog.Write_Log("WMS鍏ュ簱浠诲姟瀹屾垚鍥炰紶", "浠诲姟瀹屾垚鎺ュ彛", "浠诲姟淇℃伅", $"璇锋眰锛歿request}锛屽洖浼狅細{response}");
+ // WMSResponseContent wMSResponse = JsonConvert.DeserializeObject<WMSResponseContent>(response) ?? throw new Exception($"{taskNum},鏈帴鏀跺埌WMS鍏ュ簱涓婃姤杩斿洖鍊�");
+ // if (wMSResponse.Code != "0") content.Message = $"鍏ュ簱浠诲姟{task.TaskNum}WMS鍏ュ簱涓婃姤閿欒,淇℃伅:{wMSResponse.Msg}";
+ // }
+ // content.OK("浠诲姟瀹屾垚");
+ // }
+ // catch (Exception ex)
+ // {
+ // _unitOfWorkManage.RollbackTran();
+ // content.Error(ex.Message);
+ // }
+ // return content;
+ //}
/// <summary>
/// 浜哄伐鎵嬪姩鍙栨秷鎸囧畾浠诲姟
/// </summary>
@@ -822,36 +950,42 @@
WebResponseContent content = new WebResponseContent();
try
{
+ WriteLog.Write_Log("浠诲姟鍙栨秷鎺ユ敹", "浜哄伐鎵嬪姩鍙栨秷鎸囧畾浠诲姟", "浠诲姟鍙�", $"浠诲姟锛歿taskNum}");
// 1. 鑾峰彇浠诲姟淇℃伅
Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
- if (task == null)return content.Error($"浠诲姟{taskNum}涓嶅瓨鍦�");
+ if (task == null) return content.Error($"浠诲姟{taskNum}涓嶅瓨鍦�");
TaskTypeGroup group = task.TaskType.GetTaskTypeGroup();
if (group == TaskTypeGroup.InboundGroup)// 鍏ュ簱浠诲姟鍙栨秷
{
// 鑾峰彇鐩爣璐т綅
Dt_LocationInfo locationInfo = _locationInfoRepository.QueryFirst(x => x.LocationCode == task.TargetAddress);
- if (locationInfo == null)return content.Error($"鐩爣璐т綅{task.TargetAddress}涓嶅瓨鍦�");
- // 楠岃瘉璐т綅鐘舵��
- if (locationInfo.LocationStatus != LocationStatusEnum.Lock.ObjToInt())
- return content.Error($"{task.TargetAddress}璐т綅鐘舵�佸紓甯革紝鏃犳硶鍙栨秷");
-
- // 鎭㈠璐т綅鐘舵��
- locationInfo.LocationStatus = LocationStatusEnum.Free.ObjToInt(); // 鎭㈠涓虹┖闂茬姸鎬�
- locationInfo.PalletCode = ""; // 娓呯┖鎵樼洏鍙�
- // 鏇存柊鏁版嵁搴�
+ if (locationInfo != null)
+ {
+ locationInfo.LocationStatus = LocationStatusEnum.Free.ObjToInt(); // 鎭㈠涓虹┖闂茬姸鎬�
+ locationInfo.PalletCode = ""; // 娓呯┖鎵樼洏鍙�
+ _unitOfWorkManage.BeginTran();
+ _locationInfoRepository.UpdateData(locationInfo);
+ _unitOfWorkManage.CommitTran();
+ content.OK("浠诲姟鍙栨秷鎴愬姛");
+ }
_unitOfWorkManage.BeginTran();
- _locationInfoRepository.UpdateData(locationInfo);
BaseDal.DeleteAndMoveIntoHty(task, OperateTypeEnum.浜哄伐鍒犻櫎);
_unitOfWorkManage.CommitTran();
+ //return content.Error($"鐩爣璐т綅{task.TargetAddress}涓嶅瓨鍦�");
+ // 楠岃瘉璐т綅鐘舵��
+ //if (locationInfo.LocationStatus != LocationStatusEnum.Lock.ObjToInt())
+ // return content.Error($"{task.TargetAddress}璐т綅鐘舵�佸紓甯革紝鏃犳硶鍙栨秷");
+
+ // 鎭㈠璐т綅鐘舵��
+
+ // 鏇存柊鏁版嵁搴�
+ //_unitOfWorkManage.BeginTran();
+ //_locationInfoRepository.UpdateData(locationInfo);
+ //BaseDal.DeleteAndMoveIntoHty(task, OperateTypeEnum.浜哄伐鍒犻櫎);
+ //_unitOfWorkManage.CommitTran();
// 璁板綍鐘舵�佸彉鏇�
- _locationStatusChangeRecordService.AddLocationStatusChangeRecord(
- locationInfo,
- LocationStatusEnum.Lock,
- LocationStatusEnum.Free,
- LocationChangeType.InboundCancelled,
- task.TaskNum
- );
+
content.OK("浠诲姟鍙栨秷鎴愬姛");
}
else
@@ -880,6 +1014,7 @@
WebResponseContent content = new WebResponseContent();
try
{
+ WriteLog.Write_Log("浠诲姟鍙栨秷鎺ユ敹", "浠诲姟鍙栨秷鎺ュ彛", "浠诲姟鍙�", $"浠诲姟锛歿taskNum}");
Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
if (task != null && task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)//鍑哄簱浠诲姟瀹屾垚閫昏緫
{
@@ -917,38 +1052,129 @@
WebResponseContent content = new WebResponseContent();
try
{
- if (taskCancels==null || taskCancels.Count<=0)
+ // 鍙傛暟楠岃瘉
+ if (taskCancels == null || taskCancels.Count == 0)
{
- return content.Error("浼犲叆涓嶈兘涓虹┖");
+ return content.Error("浼犲叆鍙傛暟涓嶈兘涓虹┖");
}
- //鑾峰彇鎵�鏈夋枡绠�
- List<Dt_Task> outTasks = BaseDal.QueryData(x=>x.TaskType==TaskTypeEnum.Outbound.ObjToInt());
+
+ WriteLog.Write_Log("浠诲姟鍙栨秷鎺ユ敹", "浠诲姟鍙栨秷鎺ュ彛", "浠诲姟鍙栨秷", $"浠诲姟锛歿taskCancels.ToJson()}");
+
+ // 鑾峰彇鎵�鏈夊嚭搴撲换鍔★紙鍙煡璇竴娆★級
+ List<Dt_Task> outTasks = BaseDal.QueryData(x =>
+ x.TaskType == TaskTypeEnum.Outbound.ObjToInt());
+
+ if (outTasks.Count == 0)
+ {
+ return content.Error("鏈壘鍒板搴旂殑浠诲姟");
+ }
+
+ // 鎸塆roupId鍒嗙粍澶勭悊
+ var tasksByGroup = outTasks.GroupBy(x => x.GroupId)
+ .Where(g => !string.IsNullOrEmpty(g.Key))
+ .ToDictionary(g => g.Key, g => g.ToList());
+
List<Dt_Task> cancelTasks = new List<Dt_Task>();
List<Dt_Task> cancelTasksCompleted = new List<Dt_Task>();
- //鍒ゆ柇鏄惁鏈変换鍔″瓨鍦�
- foreach (var item in taskCancels)
+ // 鏀堕泦鎵�鏈夐渶瑕佹鏌ョ殑浠诲姟缁�
+ var groupsToCheck = new List<List<Dt_Task>>();
+
+ foreach (var taskCancel in taskCancels)
{
- Dt_Task? taskExist = outTasks.FirstOrDefault(x=>x.PalletCode== item.ContainerCode);
- if (taskExist==null)
+ // 鎵惧埌璇ヤ换鍔℃墍鍦ㄧ殑缁�
+ var group = tasksByGroup.Values.FirstOrDefault(g =>
+ g.Any(t => t.PalletCode == taskCancel.ContainerCode));
+
+ if (group != null && !groupsToCheck.Contains(group))
{
- content.Message += $"{item.ContainerCode}浠诲姟涓嶅瓨鍦�";
- continue;
+ groupsToCheck.Add(group);
}
- if (taskExist.TaskState==TaskStatusEnum.AGV_TakeFinish.ObjToInt())
- {
- taskExist.IsCancel = 1;
- cancelTasks.Add(taskExist);
- }
- else if(taskExist.TaskState == TaskStatusEnum.AGV_Executing.ObjToInt())
- {
- cancelTasksCompleted.Add(taskExist);
- }
- else
- {
- return content.Error($"浠诲姟鍙栨秷澶辫触{item.TaskCode}浠诲姟鐘舵�佷笉鍙彇娑堬紒");
- }
-
}
+ // 楠岃瘉浠诲姟鐘舵��
+ foreach (var group in groupsToCheck)
+ {
+ var firstTask = group.FirstOrDefault();
+ if (firstTask == null) continue;
+
+ // 妫�鏌ョ粍鍐呮墍鏈変换鍔$姸鎬�
+ foreach (var task in group)
+ {
+ if (task.TaskState == TaskStatusEnum.AGV_TakeFinish.ObjToInt())
+ {
+ task.IsCancel = 1;
+ cancelTasks.Add(task);
+ }
+ else if (task.TaskState == TaskStatusEnum.AGV_Executing.ObjToInt())
+ {
+ cancelTasksCompleted.Add(task);
+ }
+ else
+ {
+ return content.Error($"浠诲姟鍙栨秷澶辫触{task.PalletCode}浠诲姟鐘舵�佷笉鍙彇娑堬紒");
+ }
+ }
+ }
+ //WriteLog.Write_Log("浠诲姟鍙栨秷鎺ユ敹", "浠诲姟鍙栨秷鎺ュ彛", "浠诲姟鍙栨秷", $"浠诲姟锛歿taskCancels.ToJson()}");
+ //if (taskCancels==null || taskCancels.Count<=0)
+ //{
+ // return content.Error("浼犲叆涓嶈兘涓虹┖");
+ //}
+ ////鑾峰彇鎵�鏈夋枡绠�
+ //List<Dt_Task> outTasks = BaseDal.QueryData(x=>x.TaskType==TaskTypeEnum.Outbound.ObjToInt());
+ //List<Dt_Task> cancelTasks = new List<Dt_Task>();
+ //List<Dt_Task> cancelTasksCompleted = new List<Dt_Task>();
+ //HashSet<string> processedGroups = new HashSet<string>();
+ ////鍒ゆ柇鏄惁鏈変换鍔″瓨鍦�
+ //foreach (var item in taskCancels)
+ //{
+ // Dt_Task? taskExist = outTasks.FirstOrDefault(x=>x.PalletCode == item.ContainerCode);
+ // if (taskExist==null)
+ // {
+ // content.Message += $"{item.ContainerCode}浠诲姟涓嶅瓨鍦�";
+ // WriteLog.Write_Log("浠诲姟鍙栨秷鎺ユ敹", "浠诲姟鍙栨秷鎺ュ彛", "浠诲姟涓嶅瓨鍦�", $"浠诲姟锛歿item.ContainerCode}");
+ // continue;
+ // }
+ // if (string.IsNullOrEmpty(taskExist.GroupId))
+ // {
+ // continue;
+ // }
+ // processedGroups.Add(taskExist.GroupId);
+ // //if (taskExist.TaskState == TaskStatusEnum.AGV_TakeFinish.ObjToInt())
+ // //{
+ // // taskExist.IsCancel = 1;
+ // // cancelTasks.Add(taskExist);
+ // //}
+ // //else if(taskExist.TaskState == TaskStatusEnum.AGV_Executing.ObjToInt())
+ // //{
+ // // cancelTasksCompleted.Add(taskExist);
+ // //}
+ // //else
+ // //{
+ // // return content.Error($"浠诲姟鍙栨秷澶辫触{item.TaskCode}浠诲姟鐘舵�佷笉鍙彇娑堬紒");
+ // //}
+ //}
+ //// 鍙栨秷鏁翠釜缁�
+ //foreach(var processed in processedGroups)
+ //{
+ // List<Dt_Task> groupTask = BaseDal.QueryData(x => x.TaskType == TaskTypeEnum.Outbound.ObjToInt() && x.GroupId == processed);
+ // foreach (var group in groupTask)
+ // {
+ // if (group.TaskState == TaskStatusEnum.AGV_TakeFinish.ObjToInt())
+ // {
+ // group.IsCancel = 1;
+ // cancelTasks.Add(group);
+ // }
+ // else if (group.TaskState == TaskStatusEnum.AGV_Executing.ObjToInt())
+ // {
+ // cancelTasksCompleted.Add(group);
+ // }
+ // else
+ // {
+ // return content.Error($"浠诲姟鍙栨秷澶辫触{group.PalletCode}浠诲姟鐘舵�佷笉鍙彇娑堬紒");
+ // }
+ // }
+ //}
+
_unitOfWorkManage.BeginTran();
BaseDal.UpdateData(cancelTasks);
foreach (var item in cancelTasksCompleted)
@@ -965,12 +1191,12 @@
{
AgvTaskCancelDTO agvTaskCancel = new AgvTaskCancelDTO()
{
- RequestId= DateTime.Now.ToString("yyMMddHHmmssfff"),
- MissionCode=item.GroupId,
- ContainerCode=item.PalletCode,
- Position="",
- CancelMode= "CTU_REDIRECT_START",
- Reason=""
+ RequestId = DateTime.Now.ToString("yyMMddHHmmssfff"),
+ MissionCode = item.GroupId,
+ ContainerCode = item.PalletCode,
+ Position = "",
+ CancelMode = "CTU_REDIRECT_START",
+ Reason = ""
};
AgvCancelTask(agvTaskCancel);
}
@@ -1141,5 +1367,46 @@
return content;
}
+ public WebResponseContent WmsRecovery()
+ {
+ WebResponseContent content = new WebResponseContent();
+ try
+ {
+ // 鍒犻櫎绗竴涓紓甯�
+ // 鎸夊垱寤烘椂闂村崌搴忚幏鍙栫涓�鏉¤褰�
+ var orderBy = new Dictionary<string, OrderByType>
+ {
+ { "CreateDate", OrderByType.Asc }
+ };
+ Dt_ErrorInfo errorInfo = _errorInfoRepository.QueryFirst(x => true, orderBy);
+ if (errorInfo == null)
+ {
+ return content.Error("褰撳墠娌℃湁寮傚父浠诲姟");
+ }
+ // 鑾峰彇绗竴涓紓甯革紙鎸夊垱寤烘椂闂存帓搴忥級
+ _unitOfWorkManage.BeginTran();
+ _errorInfoRepository.DeleteData(errorInfo);
+ _unitOfWorkManage.CommitTran();
+ // 涓婃姤鎭㈠
+ string? apiErrorBack = _apiInfoRepository.QueryFirst(x => x.ApiCode == APIEnum.WMSErrorBack.ToString())?.ApiAddress;
+ if (string.IsNullOrEmpty(apiErrorBack)) throw new Exception($"鏈壘鍒癢MS鏁呴殰涓婃姤,璇锋鏌ユ帴鍙i厤缃�");
+ TaskError taskError = new TaskError()
+ {
+ MsgID = errorInfo.Id,
+ StationCode = errorInfo.StationCode,
+ MsgCode = 0,
+ Msg = "鎭㈠"
+ };
+ string reqErrorBack = JsonConvert.SerializeObject(taskError, settings);
+ HttpHelper.Post(apiErrorBack, reqErrorBack);
+ return content.OK();
+ }
+ catch (Exception ex)
+ {
+ _unitOfWorkManage.RollbackTran();
+ return content.Error(ex.Message);
+ throw new Exception(ex.Message);
+ }
+ }
}
}
--
Gitblit v1.9.3