From b0327633d7d0c19693a4e577d1e17b3b22e8274e Mon Sep 17 00:00:00 2001
From: wanshenmean <cathay_xy@163.com>
Date: 星期日, 12 四月 2026 01:23:56 +0800
Subject: [PATCH] refactor(WCS&WMS): 新增手动下发输送线任务
---
Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs | 477 +++++++++++++++++++++++++++++++++++------------------------
1 files changed, 281 insertions(+), 196 deletions(-)
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs
index 288f717..ac3cb72 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs
@@ -17,23 +17,25 @@
#endregion << 鐗� 鏈� 娉� 閲� >>
-using AutoMapper;
+using MapsterMapper;
+using Microsoft.IdentityModel.Tokens;
using SqlSugar;
using System.Diagnostics.CodeAnalysis;
-using System.Text.Json;
using WIDESEA_Core;
-using WIDESEAWCS_Common.HttpEnum;
using WIDESEAWCS_Common.TaskEnum;
using WIDESEAWCS_Core;
using WIDESEAWCS_Core.BaseServices;
using WIDESEAWCS_Core.Enums;
using WIDESEAWCS_Core.Helper;
-using WIDESEAWCS_Core.Http;
+using WIDESEAWCS_DTO;
using WIDESEAWCS_DTO.Stock;
using WIDESEAWCS_DTO.TaskInfo;
using WIDESEAWCS_ITaskInfoRepository;
using WIDESEAWCS_ITaskInfoService;
using WIDESEAWCS_Model.Models;
+using WIDESEAWCS_QuartzJob;
+using WIDESEAWCS_QuartzJob.DeviceBase;
+using WIDESEAWCS_QuartzJob.DTO;
using WIDESEAWCS_QuartzJob.Models;
using WIDESEAWCS_QuartzJob.Service;
@@ -45,7 +47,10 @@
private readonly ITaskExecuteDetailService _taskExecuteDetailService;
private readonly ITaskExecuteDetailRepository _taskExecuteDetailRepository;
private readonly IMapper _mapper;
- private readonly HttpClientHelper _httpClientHelper;
+ private readonly IOutboundTaskFlowService _outboundTaskFlowService;
+ private readonly IInboundTaskFlowService _inboundTaskFlowService;
+ private readonly IRelocationTaskFlowService _relocationTaskFlowService;
+ private readonly IRobotTaskFlowService _robotTaskFlowService;
private Dictionary<string, OrderByType> _taskOrderBy = new()
{
@@ -60,15 +65,29 @@
public List<int> TaskOutboundTypes => typeof(TaskOutboundTypeEnum).GetEnumIndexList();
+ public List<int> TaskRelocationTypes => typeof(TaskRelocationTypeEnum).GetEnumIndexList();
+
public List<int> TaskRobotTypes => typeof(TaskOtherTypeEnum).GetEnumIndexList();
- public TaskService(ITaskRepository BaseDal, IRouterService routerService, ITaskExecuteDetailService taskExecuteDetailService, ITaskExecuteDetailRepository taskExecuteDetailRepository, IMapper mapper, HttpClientHelper httpClientHelper) : base(BaseDal)
+ public TaskService(
+ ITaskRepository BaseDal,
+ IRouterService routerService,
+ ITaskExecuteDetailService taskExecuteDetailService,
+ ITaskExecuteDetailRepository taskExecuteDetailRepository,
+ IMapper mapper,
+ IOutboundTaskFlowService outboundTaskFlowService,
+ IInboundTaskFlowService inboundTaskFlowService,
+ IRelocationTaskFlowService relocationTaskFlowService,
+ IRobotTaskFlowService robotTaskFlowService) : base(BaseDal)
{
_routerService = routerService;
_taskExecuteDetailService = taskExecuteDetailService;
_taskExecuteDetailRepository = taskExecuteDetailRepository;
_mapper = mapper;
- _httpClientHelper = httpClientHelper;
+ _outboundTaskFlowService = outboundTaskFlowService;
+ _inboundTaskFlowService = inboundTaskFlowService;
+ _relocationTaskFlowService = relocationTaskFlowService;
+ _robotTaskFlowService = robotTaskFlowService;
}
/// <summary>
@@ -82,43 +101,29 @@
try
{
List<Dt_Task> tasks = new List<Dt_Task>();
+ List<Dt_Task> duplicates = new List<Dt_Task>();
foreach (var item in taskDTOs)
{
- if (BaseDal.QueryFirst(x => x.TaskNum == item.TaskNum || x.PalletCode == item.PalletCode) != null)
+ Dt_Task existingTask = BaseDal.QueryFirst(x => x.TaskNum == item.TaskNum || x.PalletCode == item.PalletCode);
+ if (existingTask != null)
{
+ duplicates.Add(existingTask);
continue;
}
Dt_Task task = _mapper.Map<Dt_Task>(item);
task.Creater = "WMS";
- if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
- {
- List<Dt_Router> routers = _routerService.QueryNextRoutes(item.RoadWay, item.TargetAddress);
- //鏆備笉鑰冭檻澶氳矾寰�
- if (routers.Count > 0)
- {
- task.TaskState = (int)TaskOutStatusEnum.OutNew;
- task.CurrentAddress = item.SourceAddress;
- task.NextAddress = routers.FirstOrDefault().ChildPosi;
- }
- }
- else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)
- {
- List<Dt_Router> routers = _routerService.QueryNextRoutes(item.SourceAddress, item.TargetAddress);
- //鏆備笉鑰冭檻澶氳矾寰�
- if (routers.Count > 0)
- {
- task.TaskState = (int)TaskInStatusEnum.InNew;
- task.CurrentAddress = item.SourceAddress;
- task.NextAddress = routers.FirstOrDefault().ChildPosi;
- }
- }
+ InitializeTaskOnReceive(task, item);
tasks.Add(task);
}
+ // TOOD: 杩欓噷娉ㄦ剰娣诲姞閿欒瑕佽繑鍥為敊璇�
BaseDal.AddData(tasks);
_taskExecuteDetailService.AddTaskExecuteDetail(tasks.Select(x => x.TaskNum).ToList(), "鎺ユ敹WMS浠诲姟");
- content = WebResponseContent.Instance.OK("鎴愬姛");
+ // 灏嗛噸澶嶄换鍔′俊鎭篃涓�骞惰繑鍥�
+ tasks.AddRange(duplicates);
+ var result = tasks;
+ content = WebResponseContent.Instance.OK("鎴愬姛", result);
}
catch (Exception ex)
{
@@ -143,10 +148,10 @@
TaskNum = Convert.ToInt32(DateTime.Now.ToString("HHmmss")),
Grade = 1,
PalletCode = palletCode,
- RoadWay = "SC01",
+ Roadway = "SC01",
SourceAddress = sourceAddress,
TargetAddress = "SC01",
- TaskState = (int)TaskInStatusEnum.InNew,
+ TaskStatus = (int)TaskInStatusEnum.InNew,
Id = 0,
TaskType = (int)TaskInboundTypeEnum.Inbound
};
@@ -161,6 +166,32 @@
}
/// <summary>
+ /// 鎸変换鍔″垎缁勫垵濮嬪寲浠诲姟鎺ユ敹淇℃伅銆�
+ /// </summary>
+ /// <param name="task">浠诲姟瀹炰綋銆�</param>
+ /// <param name="source">WMS鍘熷浠诲姟瀵硅薄銆�</param>
+ private void InitializeTaskOnReceive(Dt_Task task, WMSTaskDTO source)
+ {
+ switch (task.TaskType.GetTaskTypeGroup())
+ {
+ case TaskTypeGroup.OutbondGroup:
+ _outboundTaskFlowService.InitializeOnReceive(task, source);
+ break;
+ case TaskTypeGroup.InboundGroup:
+ _inboundTaskFlowService.InitializeOnReceive(task, source);
+ break;
+ case TaskTypeGroup.RelocationGroup:
+ _relocationTaskFlowService.InitializeOnReceive(task, source);
+ break;
+ case TaskTypeGroup.OtherGroup:
+ _robotTaskFlowService.InitializeOnReceive(task, source);
+ break;
+ default:
+ break;
+ }
+ }
+
+ /// <summary>
/// 鏍规嵁璁惧缂栧彿銆佸綋鍓嶅湴鍧�鏌ヨ杈撻�佺嚎鏈墽琛岀殑浠诲姟
/// </summary>
/// <param name="deviceNo">璁惧缂栧彿</param>
@@ -168,7 +199,7 @@
/// <returns></returns>
public Dt_Task QueryConveyorLineTask(string deviceNo, string currentAddress)
{
- return BaseDal.QueryFirst(x => (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.InNew || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.SC_OutFinish) && x.CurrentAddress == currentAddress, TaskOrderBy);
+ return BaseDal.QueryFirst(x => (TaskInboundTypes.Contains(x.TaskType) && x.TaskStatus == (int)TaskInStatusEnum.InNew || TaskOutboundTypes.Contains(x.TaskType) && x.TaskStatus == (int)TaskOutStatusEnum.SC_OutFinish) && x.CurrentAddress == currentAddress, TaskOrderBy);
}
/// <summary>
@@ -182,7 +213,7 @@
if (string.IsNullOrEmpty(nextAddress))
throw new ArgumentNullException(nameof(nextAddress), "涓嬩竴鍦板潃涓嶈兘涓虹┖");
- return BaseDal.QueryFirst(x => x.TaskNum == taskNum && x.NextAddress == nextAddress && (x.TaskState == (int)TaskInStatusEnum.Line_InExecuting || x.TaskState == (int)TaskOutStatusEnum.Line_OutExecuting), TaskOrderBy);
+ return BaseDal.QueryFirst(x => x.TaskNum == taskNum && x.NextAddress == nextAddress && (x.TaskStatus == (int)TaskInStatusEnum.Line_InExecuting || x.TaskStatus == (int)TaskOutStatusEnum.Line_OutExecuting), TaskOrderBy);
}
/// <summary>
@@ -196,7 +227,7 @@
if (string.IsNullOrEmpty(currentAddress))
throw new ArgumentNullException(nameof(currentAddress), "褰撳墠鍦板潃涓嶈兘涓虹┖");
- return BaseDal.QueryFirst(x => x.TaskNum == taskNum && x.CurrentAddress == currentAddress && (x.TaskState == (int)TaskInStatusEnum.Line_InFinish || x.TaskState == (int)TaskOutStatusEnum.Line_OutFinish), TaskOrderBy);
+ return BaseDal.QueryFirst(x => x.TaskNum == taskNum && x.CurrentAddress == currentAddress && (x.TaskStatus == (int)TaskInStatusEnum.Line_InFinish || x.TaskStatus == (int)TaskOutStatusEnum.Line_OutFinish), TaskOrderBy);
}
/// <summary>
@@ -208,11 +239,11 @@
public Dt_Task? QuertStackerCraneTask(string deviceNo, TaskTypeGroup? taskTypeGroup = null)
{
if (taskTypeGroup == null)
- return BaseDal.QueryFirst(x => x.Roadway == deviceNo && (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew), TaskOrderBy);
+ return BaseDal.QueryFirst(x => x.Roadway == deviceNo && (TaskInboundTypes.Contains(x.TaskType) && x.TaskStatus == (int)TaskInStatusEnum.Line_InFinish || TaskOutboundTypes.Contains(x.TaskType) && x.TaskStatus == (int)TaskOutStatusEnum.OutNew), TaskOrderBy);
if (taskTypeGroup.Value == TaskTypeGroup.InboundGroup)
- return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish, TaskOrderBy);
+ return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskStatus == (int)TaskInStatusEnum.Line_InFinish, TaskOrderBy);
if (taskTypeGroup.Value == TaskTypeGroup.OutbondGroup)
- return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew, TaskOrderBy);
+ return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskStatus == (int)TaskOutStatusEnum.OutNew, TaskOrderBy);
return null;
}
@@ -225,9 +256,9 @@
public Dt_Task QueryStackerCraneTask(string deviceNo, string currentAddress = "")
{
if (string.IsNullOrEmpty(currentAddress))
- return BaseDal.QueryFirst(x => x.Roadway == deviceNo && (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew), TaskOrderBy);
+ return BaseDal.QueryFirst(x => x.Roadway == deviceNo && (TaskInboundTypes.Contains(x.TaskType) && x.TaskStatus == (int)TaskInStatusEnum.Line_InFinish || TaskOutboundTypes.Contains(x.TaskType) && x.TaskStatus == (int)TaskOutStatusEnum.OutNew || TaskRelocationTypes.Contains(x.TaskType) && x.TaskStatus == (int)TaskRelocationStatusEnum.RelocationNew), TaskOrderBy);
else
- return BaseDal.QueryFirst(x => x.Roadway == deviceNo && x.CurrentAddress == currentAddress && (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew), TaskOrderBy);
+ return BaseDal.QueryFirst(x => x.Roadway == deviceNo && x.CurrentAddress == currentAddress && (TaskInboundTypes.Contains(x.TaskType) && x.TaskStatus == (int)TaskInStatusEnum.Line_InFinish || TaskOutboundTypes.Contains(x.TaskType) && x.TaskStatus == (int)TaskOutStatusEnum.OutNew || TaskRelocationTypes.Contains(x.TaskType) && x.TaskStatus == (int)TaskRelocationStatusEnum.RelocationNew), TaskOrderBy);
}
/// <summary>
@@ -239,9 +270,9 @@
public Dt_Task QueryStackerCraneInTask(string deviceNo, string currentAddress = "")
{
if (string.IsNullOrEmpty(currentAddress))
- return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish, TaskOrderBy);
+ return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskStatus == (int)TaskInStatusEnum.Line_InFinish, TaskOrderBy);
else
- return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish && x.CurrentAddress == currentAddress, TaskOrderBy);
+ return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskStatus == (int)TaskInStatusEnum.Line_InFinish && x.CurrentAddress == currentAddress, TaskOrderBy);
}
/// <summary>
@@ -253,9 +284,9 @@
public Dt_Task QueryStackerCraneOutTask(string deviceNo, string currentAddress = "")
{
if (string.IsNullOrEmpty(currentAddress))
- return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew, TaskOrderBy);
+ return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskStatus == (int)TaskOutStatusEnum.OutNew, TaskOrderBy);
else
- return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew && x.CurrentAddress == currentAddress, TaskOrderBy);
+ return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskStatus == (int)TaskOutStatusEnum.OutNew && x.CurrentAddress == currentAddress, TaskOrderBy);
}
/// <summary>
@@ -266,7 +297,7 @@
/// <returns>杩斿洖浠诲姟瀹炰綋瀵硅薄闆嗗悎锛屽彲鑳戒负null</returns>
public List<Dt_Task> QueryStackerCraneOutTasks(string deviceNo, List<string> outStationCodes)
{
- return BaseDal.QueryData(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew && outStationCodes.Contains(x.CurrentAddress), TaskOrderBy);
+ return BaseDal.QueryData(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskStatus == (int)TaskOutStatusEnum.OutNew && outStationCodes.Contains(x.CurrentAddress), TaskOrderBy);
}
/// <summary>
@@ -286,11 +317,11 @@
if (task == null) return WebResponseContent.Instance.Error($"鏈壘鍒拌浠诲姟淇℃伅,浠诲姟鍙�:銆恵taskNum}銆�");
if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
{
- task.TaskState = (int)TaskOutStatusEnum.OutPending;
+ task.TaskStatus = (int)TaskOutStatusEnum.OutPending;
}
else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)
{
- task.TaskState = (int)TaskInStatusEnum.InPending;
+ task.TaskStatus = (int)TaskInStatusEnum.InPending;
}
task.ExceptionMessage = message;
task.ModifyDate = DateTime.Now;
@@ -316,7 +347,7 @@
{
Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
if (task == null) return;
- task.TaskState = status;
+ task.TaskStatus = status;
task.ModifyDate = DateTime.Now;
BaseDal.UpdateData(task);
}
@@ -348,90 +379,47 @@
/// <returns></returns>
public WebResponseContent UpdateTaskStatusToNext([NotNull] Dt_Task task)
{
- WebResponseContent content = new WebResponseContent();
- try
+ int oldState = task.TaskStatus;
+
+ var result = task.TaskType.GetTaskTypeGroup() switch
{
- int oldState = task.TaskState;
- if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
- {
- if (task.TaskState >= (int)TaskOutStatusEnum.OutFinish)
- {
- return content = WebResponseContent.Instance.Error($"璇ヤ换鍔$姸鎬佷笉鍙烦杞埌涓嬩竴姝�,浠诲姟鍙�:銆恵task.TaskNum}銆�,浠诲姟鐘舵��:銆恵task.TaskState}銆�");
- }
+ TaskTypeGroup.OutbondGroup => _outboundTaskFlowService.MoveToNextStatus(task),
+ TaskTypeGroup.InboundGroup => _inboundTaskFlowService.MoveToNextStatus(task),
+ TaskTypeGroup.RelocationGroup => _relocationTaskFlowService.MoveToNextStatus(task),
+ TaskTypeGroup.OtherGroup => _robotTaskFlowService.MoveToNextStatus(task),
+ _ => WebResponseContent.Instance.Error($"浠诲姟绫诲瀷閿欒,鏈壘鍒拌浠诲姟绫诲瀷,浠诲姟鍙�:銆恵task.TaskNum}銆�,浠诲姟绫诲瀷:銆恵task.TaskType}銆�")
+ };
- int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskOutStatusEnum>();
+ if (!result.Status)
+ return result;
- task.TaskState = nextStatus;
- }
- else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)
- {
- if (task.TaskState >= (int)TaskInStatusEnum.InFinish)
- {
- return content = WebResponseContent.Instance.Error($"璇ヤ换鍔$姸鎬佷笉鍙烦杞埌涓嬩竴姝�,浠诲姟鍙�:銆恵task.TaskNum}銆�,浠诲姟鐘舵��:銆恵task.TaskState}銆�");
- }
+ // 鍑哄簱瀹屾垚绾夸綋鑺傜偣鏃讹紝鍙兘闇�瑕佹帴鏀跺叆搴撴柊浠诲姟銆�
+ if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup
+ && result.Data is List<WMSTaskDTO> wmsTasks
+ && wmsTasks.Count > 0)
+ {
+ return ReceiveWMSTask(wmsTasks);
+ }
- int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskInStatusEnum>();
- task.TaskState = nextStatus;
-
- if (task.TaskState == (int)TaskInStatusEnum.Line_InFinish)
- {
- // 璋冪敤WMS绯荤粺鎺ュ彛锛岃幏鍙栨渶缁堢洰鏍囧湴鍧�
- CreateTaskDto taskDto = new CreateTaskDto()
- {
- PalletCode = task.PalletCode,
- };
-
- var result = _httpClientHelper.Post<WebResponseContent>(nameof(ConfigKey.GetTasksLocation), taskDto.ToJson(), nameof(ConfigKey.GetTasksLocation));
- if (!result.IsSuccess && !result.Data.Status)
- {
- return WebResponseContent.Instance.Error($"璋冪敤WMS鎺ュ彛鑾峰彇浠诲姟鐩爣鍦板潃澶辫触,浠诲姟鍙�:銆恵task.TaskNum}銆�,閿欒淇℃伅:銆恵content.Message}銆�");
- }
-
- string wmsTargetAddress = result.Data.Data?.ToString() ?? string.Empty;
- if (string.IsNullOrEmpty(wmsTargetAddress))
- {
- return WebResponseContent.Instance.Error($"璋冪敤WMS鎺ュ彛鑾峰彇浠诲姟鐩爣鍦板潃澶辫触,浠诲姟鍙�:銆恵task.TaskNum}銆�,閿欒淇℃伅:銆愭湭鑾峰彇鍒版湁鏁堢殑鐩爣鍦板潃銆�");
- }
-
- task.NextAddress = wmsTargetAddress;
- task.TargetAddress = wmsTargetAddress;
- task.CurrentAddress = task.NextAddress;
- }
- }
- else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OtherGroup)
- {
- if (task.TaskState >= (int)TaskRobotStatusEnum.RobotNew)
- {
- return content = WebResponseContent.Instance.Error($"璇ヤ换鍔$姸鎬佷笉鍙烦杞埌涓嬩竴姝�,浠诲姟鍙�:銆恵task.TaskNum}銆�,浠诲姟鐘舵��:銆恵task.TaskState}銆�");
- }
-
- int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskRobotStatusEnum>();
-
- task.TaskState = nextStatus;
- }
- else
- {
- throw new Exception($"浠诲姟绫诲瀷閿欒,鏈壘鍒拌浠诲姟绫诲瀷,浠诲姟鍙�:銆恵task.TaskNum}銆�,浠诲姟绫诲瀷:銆恵task.TaskType}銆�");
- }
-
- if (task.TaskState <= 0)
- {
- return content = WebResponseContent.Instance.Error($"璇ヤ换鍔$姸鎬佷笉鍙烦杞埌涓嬩竴姝�,浠诲姟鍙�:銆恵task.TaskNum}銆�,浠诲姟鐘舵��:銆恵task.TaskState}銆�");
- }
-
- task.ModifyDate = DateTime.Now;
- task.Modifier = "System";
+ // 鏇存柊浠诲姟鏁版嵁
+ task.ModifyDate = DateTime.Now;
+ task.Modifier = "System";
+ if (task.TaskStatus == (int)TaskOutStatusEnum.Line_OutFinish)
+ {
+ BaseDal.DeleteAndMoveIntoHty(task, OperateTypeEnum.鑷姩瀹屾垚);
+ }
+ else
+ {
BaseDal.UpdateData(task);
-
- _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, App.User.UserId > 0 ? $"浜哄伐鎵嬪姩灏嗕换鍔$姸鎬佷粠銆恵oldState}銆戣烦杞埌銆恵task.TaskState}銆�" : $"绯荤粺鑷姩娴佺▼锛屼换鍔$姸鎬佷粠銆恵oldState}銆戣浆鍒般�恵task.TaskState}銆�");
-
- content = WebResponseContent.Instance.OK();
}
- catch (Exception ex)
- {
- content = WebResponseContent.Instance.Error(ex.Message);
- }
- return content;
+
+ // 璁板綍浠诲姟鎵ц璇︽儏
+ string logMessage = App.User.UserId > 0
+ ? $"浜哄伐鎵嬪姩灏嗕换鍔$姸鎬佷粠銆恵oldState}銆戣烦杞埌銆恵task.TaskStatus}銆�"
+ : $"绯荤粺鑷姩娴佺▼锛屼换鍔$姸鎬佷粠銆恵oldState}銆戣浆鍒般�恵task.TaskStatus}銆�";
+ _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, logMessage);
+
+ return WebResponseContent.Instance.OK();
}
/// <summary>
@@ -453,7 +441,8 @@
string oldCurrentPos = task.CurrentAddress;
string oldNextPos = task.NextAddress;
- Dt_Router routers = _routerService.QueryNextRoute(task.CurrentAddress);
+
+ Dt_Router routers = _routerService.QueryNextRoute(oldNextPos, task.TargetAddress);
if (routers == null) throw new Exception($"鏈壘鍒拌澶囪矾鐢变俊鎭�");
task.CurrentAddress = task.NextAddress;
@@ -485,68 +474,41 @@
{
Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
if (task == null) return WebResponseContent.Instance.Error($"鏈壘鍒拌浠诲姟淇℃伅,浠诲姟鍙�:銆恵taskNum}銆�");
-
- if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup && task.TaskState == (int)TaskOutStatusEnum.SC_OutExecuting)
+ TaskTypeGroup taskTypeGroup = task.TaskType.GetTaskTypeGroup();
+ content = taskTypeGroup switch
{
- List<Dt_Router> routers = _routerService.QueryNextRoutes(task.NextAddress, task.TargetAddress);
- if (!routers.Any()) return WebResponseContent.Instance.Error($"鏈壘鍒拌澶囪矾鐢变俊鎭�");
+ TaskTypeGroup.OutbondGroup => _outboundTaskFlowService.CompleteStackerTask(task),
+ TaskTypeGroup.InboundGroup => _inboundTaskFlowService.CompleteStackerTask(task),
+ TaskTypeGroup.RelocationGroup => _relocationTaskFlowService.CompleteStackerTask(task),
+ TaskTypeGroup.OtherGroup => _robotTaskFlowService.CompleteStackerTask(task),
+ _ => throw new Exception($"浠诲姟绫诲瀷閿欒,鏈壘鍒拌浠诲姟绫诲瀷,浠诲姟鍙�:銆恵taskNum}銆�,浠诲姟绫诲瀷:銆恵task.TaskType}銆�")
+ };
+ if (!content.Status)
+ {
+ return content;
+ }
- int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskOutStatusEnum>();
- task.TaskState = nextStatus;
- task.CurrentAddress = task.NextAddress;
- task.NextAddress = routers.FirstOrDefault().ChildPosi;
- task.ModifyDate = DateTime.Now;
- task.Modifier = "System";
+ if (taskTypeGroup == TaskTypeGroup.OutbondGroup && task.TaskStatus == (int)TaskOutStatusEnum.SC_OutFinish)
+ {
BaseDal.UpdateData(task);
-
- _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"鍫嗗灈鏈哄嚭搴撳畬鎴�");
-
- var result = _httpClientHelper.Post<WebResponseContent>(nameof(ConfigKey.OutboundFinishTaskAsync), (new StockInfoDTO() { PalletCode = task.PalletCode, TaskNum = task.TaskNum }).ToJson());
- if (result.IsSuccess && result.Data.Status)
- {
- return content.Error($"閫氱煡WMS绯荤粺鍫嗗灈鏈哄嚭搴撳畬鎴愭垚鍔�,浠诲姟鍙�:銆恵task.TaskNum}銆�,鎵樼洏鍙�:銆恵task.PalletCode}銆�");
-
- }
- else
- {
- return content.Error($"閫氱煡WMS绯荤粺鍫嗗灈鏈哄嚭搴撳畬鎴愬け璐�,浠诲姟鍙�:銆恵task.TaskNum}銆�,鎵樼洏鍙�:銆恵task.PalletCode}銆�,閿欒淇℃伅:銆恵result.Data.Message}銆�");
- }
+ _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, "鍫嗗灈鏈哄嚭搴撳畬鎴�");
+ return content;
}
- else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup && task.TaskState == (int)TaskInStatusEnum.SC_InExecuting)
+
+ if (taskTypeGroup == TaskTypeGroup.InboundGroup && task.TaskStatus == (int)TaskInStatusEnum.SC_InFinish)
{
- int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskInStatusEnum>();
- task.TaskState = nextStatus;
- task.ModifyDate = DateTime.Now;
- task.Modifier = "System";
- BaseDal.UpdateData(task);
- _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"鍫嗗灈鏈哄叆搴撳畬鎴�");
+ BaseDal.DeleteAndMoveIntoHty(task, OperateTypeEnum.鑷姩瀹屾垚);
+ _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, "鍫嗗灈鏈哄叆搴撳畬鎴�");
+ return content;
+ }
+ if (taskTypeGroup == TaskTypeGroup.RelocationGroup && task.TaskStatus == (int)TaskRelocationStatusEnum.RelocationFinish)
+ {
+ BaseDal.DeleteAndMoveIntoHty(task, OperateTypeEnum.鑷姩瀹屾垚);
+ _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, "鍫嗗灈鏈虹Щ搴撳畬鎴�");
+ return content;
+ }
- var result = _httpClientHelper.Post<WebResponseContent>(nameof(ConfigKey.InboundFinishTaskAsync), (new CreateTaskDto()
- {
- PalletCode = task.PalletCode,
- }).ToJson());
-
- if (result.IsSuccess && result.Data.Status)
- {
- return content.Error($"閫氱煡WMS绯荤粺鍫嗗灈鏈哄叆搴撳畬鎴愭垚鍔�,浠诲姟鍙�:銆恵task.TaskNum}銆�,鎵樼洏鍙�:銆恵task.PalletCode}銆�");
- }
- else
- {
- return content.Error($"閫氱煡WMS绯荤粺鍫嗗灈鏈哄叆搴撳畬鎴愬け璐�,浠诲姟鍙�:銆恵task.TaskNum}銆�,鎵樼洏鍙�:銆恵task.PalletCode}銆�,閿欒淇℃伅:銆恵result.Data.Message}銆�");
- }
- }
- else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.RelocationGroup)
- {
- //todo 璋冪敤WMS绉诲簱瀹屾垚
- }
- else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OtherGroup)
- {
- }
- else
- {
- throw new Exception($"浠诲姟绫诲瀷閿欒,鏈壘鍒拌浠诲姟绫诲瀷,浠诲姟鍙�:銆恵taskNum}銆�,浠诲姟绫诲瀷:銆恵task.TaskType}銆�");
- }
content = WebResponseContent.Instance.OK();
}
catch (Exception ex)
@@ -568,25 +530,25 @@
{
Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
if (task == null) return WebResponseContent.Instance.Error($"鏈壘鍒拌浠诲姟淇℃伅,浠诲姟鍙�:銆恵taskNum}銆�");
- if (task.TaskState != (int)TaskInStatusEnum.InPending && task.TaskState != (int)TaskOutStatusEnum.OutPending)
+ if (task.TaskStatus != (int)TaskInStatusEnum.InPending && task.TaskStatus != (int)TaskOutStatusEnum.OutPending)
{
- return content = WebResponseContent.Instance.Error($"璇ヤ换鍔$姸鎬佷笉鍙仮澶�,浠诲姟鍙�:銆恵taskNum}銆�,浠诲姟鐘舵��:銆恵task.TaskState}銆�");
+ return content = WebResponseContent.Instance.Error($"璇ヤ换鍔$姸鎬佷笉鍙仮澶�,浠诲姟鍙�:銆恵taskNum}銆�,浠诲姟鐘舵��:銆恵task.TaskStatus}銆�");
}
Dt_TaskExecuteDetail taskExecuteDetail = _taskExecuteDetailRepository.QueryFirst(x => x.TaskId == task.TaskId && x.IsNormal, new Dictionary<string, OrderByType> { { nameof(Dt_TaskExecuteDetail.TaskDetailId), OrderByType.Desc } });
if (taskExecuteDetail != null)
{
- task.TaskState = taskExecuteDetail.TaskState;
+ task.TaskStatus = taskExecuteDetail.TaskState;
}
else
{
if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
{
- task.TaskState = (int)TaskOutStatusEnum.OutNew;
+ task.TaskStatus = (int)TaskOutStatusEnum.OutNew;
}
else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)
{
- task.TaskState = (int)TaskInStatusEnum.InNew;
+ task.TaskStatus = (int)TaskInStatusEnum.InNew;
}
//todo
}
@@ -595,7 +557,7 @@
BaseDal.UpdateData(task);
- _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"浜哄伐鎭㈠鎸傝捣浠诲姟,鎭㈠鎸傝捣鏃朵换鍔$姸鎬併�恵task.TaskState}銆�");
+ _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"浜哄伐鎭㈠鎸傝捣浠诲姟,鎭㈠鎸傝捣鏃朵换鍔$姸鎬併�恵task.TaskStatus}銆�");
content = WebResponseContent.Instance.OK();
}
@@ -619,24 +581,24 @@
Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
if (task == null) return WebResponseContent.Instance.Error($"鏈壘鍒拌浠诲姟淇℃伅,浠诲姟鍙�:銆恵taskNum}銆�");
- int oldState = task.TaskState;
- Dt_TaskExecuteDetail taskExecuteDetail = _taskExecuteDetailRepository.QueryFirst(x => x.TaskId == task.TaskId && x.TaskState < task.TaskState && x.TaskState > 0, new Dictionary<string, OrderByType> { { nameof(Dt_TaskExecuteDetail.TaskDetailId), OrderByType.Desc } });
+ int oldState = task.TaskStatus;
+ Dt_TaskExecuteDetail taskExecuteDetail = _taskExecuteDetailRepository.QueryFirst(x => x.TaskId == task.TaskId && x.TaskState < task.TaskStatus && x.TaskState > 0, new Dictionary<string, OrderByType> { { nameof(Dt_TaskExecuteDetail.TaskDetailId), OrderByType.Desc } });
if (taskExecuteDetail != null)
{
- task.TaskState = taskExecuteDetail.TaskState;
+ task.TaskStatus = taskExecuteDetail.TaskState;
task.CurrentAddress = taskExecuteDetail.CurrentAddress;
task.NextAddress = taskExecuteDetail.NextAddress;
}
else
{
- return content = WebResponseContent.Instance.Error($"鏈壘鍒颁换鍔℃槑缁嗕俊鎭�,璇ヤ换鍔$姸鎬佷笉鍙洖婊氬埌涓婁竴姝�,浠诲姟鍙�:銆恵taskNum}銆�,浠诲姟鐘舵��:銆恵task.TaskState}銆�");
+ return content = WebResponseContent.Instance.Error($"鏈壘鍒颁换鍔℃槑缁嗕俊鎭�,璇ヤ换鍔$姸鎬佷笉鍙洖婊氬埌涓婁竴姝�,浠诲姟鍙�:銆恵taskNum}銆�,浠诲姟鐘舵��:銆恵task.TaskStatus}銆�");
}
task.ExceptionMessage = string.Empty;
BaseDal.UpdateData(task);
- _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"浜哄伐灏嗕换鍔$姸鎬佷粠銆恵oldState}銆戝洖婊氬埌銆恵task.TaskState}銆�");
+ _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"浜哄伐灏嗕换鍔$姸鎬佷粠銆恵oldState}銆戝洖婊氬埌銆恵task.TaskStatus}銆�");
content = WebResponseContent.Instance.OK();
}
@@ -668,9 +630,9 @@
public Dt_Task QueryRobotCraneTask(string deviceNo, string currentAddress = "")
{
if (string.IsNullOrEmpty(currentAddress))
- return BaseDal.QueryFirst(x => x.Roadway == deviceNo && (TaskRobotTypes.Contains(x.TaskType) && x.TaskState <= (int)TaskRobotStatusEnum.RobotExecuting), TaskOrderBy);
+ return BaseDal.QueryFirst(x => x.Roadway == deviceNo && (TaskRobotTypes.Contains(x.TaskType) && x.TaskStatus <= (int)TaskRobotStatusEnum.RobotExecuting), TaskOrderBy);
else
- return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskRobotTypes.Contains(x.TaskType) && x.CurrentAddress == currentAddress && x.TaskState <= (int)TaskRobotStatusEnum.RobotExecuting, TaskOrderBy);
+ return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskRobotTypes.Contains(x.TaskType) && x.CurrentAddress == currentAddress && x.TaskStatus <= (int)TaskRobotStatusEnum.RobotExecuting, TaskOrderBy);
}
/// <summary>
@@ -682,5 +644,128 @@
{
return BaseDal.QueryFirst(x => x.TaskNum == taskNum);
}
+
+ /// <summary>
+ /// 鎺ユ敹WMS鎵嬪姩鍒涘缓鐨勪换鍔★紝鍒涘缓WCS浠诲姟
+ /// </summary>
+ /// <param name="taskDTOs">WMS浠诲姟瀵硅薄闆嗗悎</param>
+ /// <returns>杩斿洖澶勭悊缁撴灉</returns>
+ public WebResponseContent ReceiveManualTask([NotNull] List<WMSTaskDTO> taskDTOs)
+ {
+ WebResponseContent content = new WebResponseContent();
+ try
+ {
+ // 璋冪敤 ReceiveWMSTask 鍒涘缓 WCS 浠诲姟
+ content = ReceiveWMSTask(taskDTOs);
+ return content;
+ }
+ catch (Exception ex)
+ {
+ content = WebResponseContent.Instance.Error($"鎵嬪姩浠诲姟鎺ユ敹閿欒,閿欒淇℃伅:{ex.Message}");
+ return content;
+ }
+ }
+
+ /// <summary>
+ /// 鏌ヨ鎸囧畾璧风偣鍦板潃鐨勬柊寤烘墜鍔ㄥ叆搴撲换鍔�
+ /// </summary>
+ /// <param name="sourceAddress">璧风偣鍦板潃</param>
+ /// <returns>浠诲姟瀹炰綋</returns>
+ public Dt_Task QueryManualInboundTask(string sourceAddress)
+ {
+ return BaseDal.QueryFirst(x =>
+ x.TaskType == (int)TaskInboundTypeEnum.Inbound &&
+ x.TaskStatus == (int)TaskInStatusEnum.InNew &&
+ x.SourceAddress == sourceAddress &&
+ x.Creater == "WMS");
+ }
+ }
+
+ public enum ConveyorLineDBNameNew
+ {
+ Barcode
+ }
+ public class ConveyorLineTaskCommandNew : DeviceCommand
+ {
+ /// <summary>
+ /// 浠诲姟鍙�
+ /// </summary>
+ public short TaskNo { get; set; }
+
+ /// <summary>
+ /// 婧愪綅缃� 寮�濮嬪湴鍧�
+ /// </summary>
+ public short Source { get; set; }
+
+ /// <summary>
+ /// 鐩爣浣嶇疆
+ /// </summary>
+ public short Target { get; set; }
+
+ /// <summary>
+ /// 绠卞瀷
+ /// </summary>
+ public byte BoxType { get; set; }
+
+ /// <summary>
+ /// 杈撻�佺嚎鐘舵�� 璁惧绌洪棽鐘舵��
+ /// </summary>
+ public byte CV_State { get; set; }
+
+ /// <summary>
+ /// 杈撻�佺嚎閿欒浠g爜
+ /// </summary>
+ public byte CV_ERRCode { get; set; }
+
+ /// <summary>
+ /// WCS灏辩华鏍囧織 WCS涓嬪彂瀹屾垚鏃讹紝瑙﹀彂涓�1
+ /// </summary>
+ public byte WCS_STB { get; set; }
+
+ /// <summary>
+ /// WCS搴旂瓟鏍囧織 WCS鏀跺埌瀹屾垚鏃讹紝瑙﹀彂涓�1
+ /// </summary>
+ public byte WCS_ACK { get; set; }
+
+ /// <summary>
+ /// PLC灏辩华鏍囧織 瀹屾垚浠诲姟鏃讹紝瑙﹀彂涓�1
+ /// </summary>
+ public byte PLC_STB { get; set; }
+
+ /// <summary>
+ /// PLC搴旂瓟鏍囧織 鏀跺埌浠诲姟鏃讹紝瑙﹀彂涓�1
+ /// </summary>
+ public byte PLC_ACK { get; set; }
+
+ /// <summary>
+ /// PLC璇锋眰鏍囧織 鍏ュ簱绔欏彴锛屽埌浣嶅啓1
+ /// </summary>
+ public byte PLC_REQ { get; set; }
+
+ /// <summary>
+ /// WCS閿欒浠g爜
+ /// </summary>
+ public byte WCS_ERRCode { get; set; }
+
+ /// <summary>
+ /// WCS鐗规畩鏍囧織 (鏃嬭浆鏍囪瘑銆佸己鍒舵斁琛屻�佸惊鐜�佺壒娈婄敵璇枫�佹槸鍚﹀彔鐩樸�佹槸鍚﹀牭濉�)
+ /// </summary>
+ public byte WCS_Special { get; set; }
+
+ /// <summary>
+ /// 璁惧鑷姩妯″紡 鎵嬪姩1锛岃嚜鍔�2
+ /// </summary>
+ public byte Equ_Auto { get; set; }
+
+ /// <summary>
+ /// 灏炬澘鏍囧織
+ /// </summary>
+ public byte Last_pallet { get; set; }
+
+ /// <summary>
+ /// 鏉$爜锛�22涓瓧绗︼級
+ /// </summary>
+ [DataLength(22)]
+ public string Barcode { get; set; }
}
}
\ No newline at end of file
--
Gitblit v1.9.3