From 94ad631d316da04c46266ddb1fc6e63e6f8f2fae Mon Sep 17 00:00:00 2001
From: wanshenmean <cathay_xy@163.com>
Date: 星期二, 17 三月 2026 17:34:15 +0800
Subject: [PATCH] feat: 同步协议处理、前端交互与业务联调改动
---
Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs | 646 +++++++++++++++++++++++++++++++++++++++++++++++----------
1 files changed, 526 insertions(+), 120 deletions(-)
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs
index 5f9e946..64f3c61 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs
@@ -1,4 +1,5 @@
锘�#region << 鐗� 鏈� 娉� 閲� >>
+
/*----------------------------------------------------------------
* 鍛藉悕绌洪棿锛歐IDESEAWCS_TaskInfoService
* 鍒涘缓鑰咃細鑳$搴�
@@ -11,21 +12,30 @@
* 淇敼鏃堕棿锛�
* 鐗堟湰锛歏1.0.1
* 淇敼璇存槑锛�
- *
+ *
*----------------------------------------------------------------*/
+
#endregion << 鐗� 鏈� 娉� 閲� >>
-using AutoMapper;
+using MapsterMapper;
+using Microsoft.Extensions.Configuration;
+using Newtonsoft.Json;
using SqlSugar;
using System.Diagnostics.CodeAnalysis;
+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_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.Models;
using WIDESEAWCS_QuartzJob.Service;
@@ -37,6 +47,7 @@
private readonly ITaskExecuteDetailService _taskExecuteDetailService;
private readonly ITaskExecuteDetailRepository _taskExecuteDetailRepository;
private readonly IMapper _mapper;
+ private readonly HttpClientHelper _httpClientHelper;
private Dictionary<string, OrderByType> _taskOrderBy = new()
{
@@ -44,18 +55,24 @@
{nameof(Dt_Task.CreateDate),OrderByType.Asc},
};
- public Dictionary<string, OrderByType> TaskOrderBy { get { return _taskOrderBy; } set { _taskOrderBy = value; } }
+ public Dictionary<string, OrderByType> TaskOrderBy
+ { get { return _taskOrderBy; } set { _taskOrderBy = value; } }
public List<int> TaskInboundTypes => typeof(TaskInboundTypeEnum).GetEnumIndexList();
public List<int> TaskOutboundTypes => typeof(TaskOutboundTypeEnum).GetEnumIndexList();
- public TaskService(ITaskRepository BaseDal, IRouterService routerService, ITaskExecuteDetailService taskExecuteDetailService, ITaskExecuteDetailRepository taskExecuteDetailRepository, IMapper mapper) : base(BaseDal)
+ 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)
{
_routerService = routerService;
_taskExecuteDetailService = taskExecuteDetailService;
_taskExecuteDetailRepository = taskExecuteDetailRepository;
_mapper = mapper;
+ _httpClientHelper = httpClientHelper;
}
/// <summary>
@@ -79,24 +96,25 @@
task.Creater = "WMS";
if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
{
- List<Dt_Router> routers = _routerService.QueryNextRoutes(item.RoadWay, item.TargetAddress);
+ var taskType = 100;
+ Dt_Router router = _routerService.QueryNextRoute(item.Roadway, item.TargetAddress, taskType);
//鏆備笉鑰冭檻澶氳矾寰�
- if (routers.Count > 0)
+ if (router != null)
{
- task.TaskState = (int)TaskOutStatusEnum.OutNew;
+ task.TaskStatus = (int)TaskOutStatusEnum.OutNew;
task.CurrentAddress = item.SourceAddress;
- task.NextAddress = routers.FirstOrDefault().ChildPosi;
+ task.NextAddress = router.ChildPosi;
}
}
else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)
{
- List<Dt_Router> routers = _routerService.QueryNextRoutes(item.SourceAddress, item.TargetAddress);
+ Dt_Router routers = _routerService.QueryNextRoute(item.SourceAddress);
//鏆備笉鑰冭檻澶氳矾寰�
- if (routers.Count > 0)
+ if (!routers.IsNullOrEmpty())
{
- task.TaskState = (int)TaskInStatusEnum.InNew;
+ task.TaskStatus = (int)TaskInStatusEnum.InNew;
task.CurrentAddress = item.SourceAddress;
- task.NextAddress = routers.FirstOrDefault().ChildPosi;
+ task.NextAddress = routers.ChildPosi;
}
}
tasks.Add(task);
@@ -105,7 +123,7 @@
_taskExecuteDetailService.AddTaskExecuteDetail(tasks.Select(x => x.TaskNum).ToList(), "鎺ユ敹WMS浠诲姟");
- content = WebResponseContent.Instance.OK("鎴愬姛");
+ content = WebResponseContent.Instance.OK("鎴愬姛", tasks);
}
catch (Exception ex)
{
@@ -130,7 +148,7 @@
TaskNum = Convert.ToInt32(DateTime.Now.ToString("HHmmss")),
Grade = 1,
PalletCode = palletCode,
- RoadWay = "SC01",
+ Roadway = "SC01",
SourceAddress = sourceAddress,
TargetAddress = "SC01",
TaskState = (int)TaskInStatusEnum.InNew,
@@ -155,7 +173,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>
@@ -166,7 +184,10 @@
/// <returns></returns>
public Dt_Task QueryExecutingConveyorLineTask(int taskNum, string nextAddress)
{
- return BaseDal.QueryFirst(x => x.TaskNum == taskNum && x.NextAddress == nextAddress && (x.TaskState == (int)TaskInStatusEnum.Line_InExecuting || x.TaskState == (int)TaskOutStatusEnum.Line_OutExecuting), TaskOrderBy);
+ if (string.IsNullOrEmpty(nextAddress))
+ throw new ArgumentNullException(nameof(nextAddress), "涓嬩竴鍦板潃涓嶈兘涓虹┖");
+
+ return BaseDal.QueryFirst(x => x.TaskNum == taskNum && x.NextAddress == nextAddress && (x.TaskStatus == (int)TaskInStatusEnum.Line_InExecuting || x.TaskStatus == (int)TaskOutStatusEnum.Line_OutExecuting), TaskOrderBy);
}
/// <summary>
@@ -177,7 +198,10 @@
/// <returns></returns>
public Dt_Task QueryCompletedConveyorLineTask(int taskNum, string currentAddress)
{
- return BaseDal.QueryFirst(x => x.TaskNum == taskNum && x.CurrentAddress == currentAddress && (x.TaskState == (int)TaskInStatusEnum.Line_InFinish || x.TaskState == (int)TaskOutStatusEnum.Line_OutFinish), TaskOrderBy);
+ if (string.IsNullOrEmpty(currentAddress))
+ throw new ArgumentNullException(nameof(currentAddress), "褰撳墠鍦板潃涓嶈兘涓虹┖");
+
+ return BaseDal.QueryFirst(x => x.TaskNum == taskNum && x.CurrentAddress == currentAddress && (x.TaskStatus == (int)TaskInStatusEnum.Line_InFinish || x.TaskStatus == (int)TaskOutStatusEnum.Line_OutFinish), TaskOrderBy);
}
/// <summary>
@@ -189,11 +213,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;
}
@@ -206,9 +230,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>
@@ -220,9 +244,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>
@@ -234,9 +258,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>
@@ -247,7 +271,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>
@@ -260,15 +284,18 @@
WebResponseContent content = new WebResponseContent();
try
{
+ if (string.IsNullOrEmpty(message))
+ throw new ArgumentNullException(nameof(message), "寮傚父淇℃伅涓嶈兘涓虹┖");
+
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.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;
@@ -294,7 +321,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);
}
@@ -326,62 +353,376 @@
/// <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 => ProcessOutboundTaskStatus(task),
+ TaskTypeGroup.InboundGroup => ProcessInboundTaskStatus(task),
+ TaskTypeGroup.RelocationGroup => ProcessRelocationTaskStatus(task),
+ TaskTypeGroup.OtherGroup => ProcessRobotTaskStatus(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}銆�");
- }
-
- int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskInStatusEnum>();
- task.TaskState = nextStatus;
-
- if (task.TaskState == (int)TaskInStatusEnum.Line_InFinish)
- {
- Random random = new Random();
- task.CurrentAddress = task.NextAddress;
- task.NextAddress = $"{random.Next(1, 100).ToString().PadLeft(3, '0')}-{random.Next(1, 100).ToString().PadLeft(3, '0')}-{random.Next(1, 100).ToString().PadLeft(3, '0')}";
- task.TargetAddress = task.NextAddress;
- }
- }
- 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)
+
+ // 璁板綍浠诲姟鎵ц璇︽儏
+ string logMessage = App.User.UserId > 0
+ ? $"浜哄伐鎵嬪姩灏嗕换鍔$姸鎬佷粠銆恵oldState}銆戣烦杞埌銆恵task.TaskStatus}銆�"
+ : $"绯荤粺鑷姩娴佺▼锛屼换鍔$姸鎬佷粠銆恵oldState}銆戣浆鍒般�恵task.TaskStatus}銆�";
+ _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, logMessage);
+
+ return WebResponseContent.Instance.OK();
+ }
+
+ /// <summary>
+ /// 澶勭悊鍑哄簱浠诲姟鐘舵�佽浆鎹�
+ /// </summary>
+ private WebResponseContent ProcessOutboundTaskStatus(Dt_Task task)
+ {
+ if (task.TaskStatus >= (int)TaskOutStatusEnum.OutFinish)
+ return WebResponseContent.Instance.Error($"璇ヤ换鍔$姸鎬佷笉鍙烦杞埌涓嬩竴姝�,浠诲姟鍙�:銆恵task.TaskNum}銆�,浠诲姟鐘舵��:銆恵task.TaskStatus}銆�");
+
+ task.TaskStatus = task.TaskStatus.GetNextNotCompletedStatus<TaskOutStatusEnum>();
+
+ if (task.TaskStatus <= 0)
+ return WebResponseContent.Instance.Error($"璇ヤ换鍔$姸鎬佷笉鍙烦杞埌涓嬩竴姝�,浠诲姟鍙�:銆恵task.TaskNum}銆�,浠诲姟鐘舵��:銆恵task.TaskStatus}銆�");
+
+ // 鏍规嵁鐘舵�佽皟鐢ㄤ笉鍚岀殑WMS鎺ュ彛
+ if (task.TaskStatus == (int)TaskOutStatusEnum.Line_OutFinish && task.TaskType == (int)TaskOutboundTypeEnum.Outbound)
{
- content = WebResponseContent.Instance.Error(ex.Message);
+ return GetWMSOutboundTrayTask(task);
}
- return content;
+ else if (task.TaskStatus == (int)TaskOutStatusEnum.Line_OutFinish && task.TaskType == (int)TaskOutboundTypeEnum.OutEmpty)
+ {
+ return GetWMSRobotTask(task);
+ }
+ else
+ {
+ // return UpdateWMSTaskStatus(task);
+ return WebResponseContent.Instance.OK();
+ }
+ }
+
+ /// <summary>
+ /// 澶勭悊鍏ュ簱浠诲姟鐘舵�佽浆鎹�
+ /// </summary>
+ private WebResponseContent ProcessInboundTaskStatus(Dt_Task task)
+ {
+ if (task.TaskStatus >= (int)TaskInStatusEnum.InFinish)
+ return WebResponseContent.Instance.Error($"璇ヤ换鍔$姸鎬佷笉鍙烦杞埌涓嬩竴姝�,浠诲姟鍙�:銆恵task.TaskNum}銆�,浠诲姟鐘舵��:銆恵task.TaskStatus}銆�");
+
+ task.TaskStatus = task.TaskStatus.GetNextNotCompletedStatus<TaskInStatusEnum>();
+
+ if (task.TaskStatus <= 0)
+ return WebResponseContent.Instance.Error($"璇ヤ换鍔$姸鎬佷笉鍙烦杞埌涓嬩竴姝�,浠诲姟鍙�:銆恵task.TaskNum}銆�,浠诲姟鐘舵��:銆恵task.TaskStatus}銆�");
+
+ // 鏍规嵁鐘舵�佽皟鐢ㄤ笉鍚岀殑WMS鎺ュ彛
+ if (task.TaskStatus == (int)TaskInStatusEnum.Line_InFinish)
+ {
+ return GetWMSInboundLocation(task);
+ }
+ else
+ {
+ return UpdateWMSTaskStatus(task);
+ }
+ }
+
+ /// <summary>
+ /// 澶勭悊鏈烘鎵嬩换鍔$姸鎬佽浆鎹�
+ /// </summary>
+ private WebResponseContent ProcessRobotTaskStatus(Dt_Task task)
+ {
+ if (task.TaskStatus >= (int)TaskRobotStatusEnum.RobotFinish)
+ return WebResponseContent.Instance.Error($"璇ヤ换鍔$姸鎬佷笉鍙烦杞埌涓嬩竴姝�,浠诲姟鍙�:銆恵task.TaskNum}銆�,浠诲姟鐘舵��:銆恵task.TaskStatus}銆�");
+
+ task.TaskStatus = task.TaskStatus.GetNextNotCompletedStatus<TaskRobotStatusEnum>();
+
+ if (task.TaskStatus <= 0)
+ return WebResponseContent.Instance.Error($"璇ヤ换鍔$姸鎬佷笉鍙烦杞埌涓嬩竴姝�,浠诲姟鍙�:銆恵task.TaskNum}銆�,浠诲姟鐘舵��:銆恵task.TaskStatus}銆�");
+
+ return WebResponseContent.Instance.OK();
+ }
+
+ /// <summary>
+ /// 澶勭悊绉诲簱浠诲姟鐘舵�佽浆鎹�
+ /// </summary>
+ private WebResponseContent ProcessRelocationTaskStatus(Dt_Task task)
+ {
+ if (task.TaskStatus >= (int)TaskRelocationStatusEnum.RelocationFinish)
+ return WebResponseContent.Instance.Error($"璇ヤ换鍔$姸鎬佷笉鍙烦杞埌涓嬩竴姝�,浠诲姟鍙�:銆恵task.TaskNum}銆�,浠诲姟鐘舵��:銆恵task.TaskStatus}銆�");
+
+ task.TaskStatus = task.TaskStatus.GetNextNotCompletedStatus<TaskRelocationStatusEnum>();
+
+ if (task.TaskStatus <= 0)
+ return WebResponseContent.Instance.Error($"璇ヤ换鍔$姸鎬佷笉鍙烦杞埌涓嬩竴姝�,浠诲姟鍙�:銆恵task.TaskNum}銆�,浠诲姟鐘舵��:銆恵task.TaskStatus}銆�");
+
+ // 绉诲簱浠诲姟寮�濮嬫椂锛屽悓姝MS浠诲姟鐘舵��
+ if (task.TaskStatus == (int)TaskRelocationStatusEnum.SC_RelocationExecuting)
+ {
+ return UpdateWMSTaskStatus(task);
+ }
+
+ // 绉诲簱浠诲姟瀹屾垚鏃讹紝璋冪敤WMS绉诲簱瀹屾垚鎺ュ彛
+ if (task.TaskStatus == (int)TaskRelocationStatusEnum.RelocationFinish)
+ {
+ return NotifyWMSRelocationFinish(task);
+ }
+
+ return WebResponseContent.Instance.OK();
+ }
+
+ /// <summary>
+ /// 閫氱煡WMS绯荤粺鍑哄簱瀹屾垚
+ /// </summary>
+ private WebResponseContent NotifyWMSOutboundFinish(Dt_Task task)
+ {
+ var result = _httpClientHelper.Post<WebResponseContent>(
+ nameof(ConfigKey.OutboundFinishTaskAsync),
+ new StockInfoDTO { PalletCode = task.PalletCode, TaskNum = task.TaskNum }.ToJson());
+
+ if (!result.IsSuccess || !result.Data.Status)
+ return WebResponseContent.Instance.Error($"閫氱煡WMS绯荤粺鍫嗗灈鏈哄嚭搴撳畬鎴愬け璐�,浠诲姟鍙�:銆恵task.TaskNum}銆�,鎵樼洏鍙�:銆恵task.PalletCode}銆�,閿欒淇℃伅:銆恵result.Data?.Message}銆�");
+
+ return WebResponseContent.Instance.OK();
+ }
+
+ /// <summary>
+ /// 鑾峰彇绌烘墭鍑哄簱浠诲姟
+ /// </summary>
+ private WebResponseContent GetWMSOutboundTrayTask(Dt_Task task)
+ {
+ var targetAddress = task.TargetAddress;
+ var warehouseId = MapWarehouseIdConfigKey(task.TargetAddress);
+ string sourceLineNo = ResolveRobotRuleValue(targetAddress, "AddressSourceLineNoMap", task.TargetAddress);
+
+ var result = _httpClientHelper.Post<WebResponseContent>(
+ nameof(ConfigKey.GetOutBoundTrayTaskAsync),
+ new CreateTaskDto { WarehouseId = warehouseId, TargetAddress = sourceLineNo }.ToJson());
+
+ if (!result.IsSuccess || !result.Data.Status)
+ return WebResponseContent.Instance.Error($"鑾峰彇WMS绯荤粺绌烘墭鐩樺嚭搴撲换鍔″け璐�,浠诲姟鍙�:銆恵task.TaskNum}銆�,鎵樼洏鍙�:銆恵task.PalletCode}銆�,閿欒淇℃伅:銆恵result.Data?.Message}銆�");
+
+ var wMSTask = JsonConvert.DeserializeObject<WMSTaskDTO>(result.Data.Data.ToString());
+
+ var tasks = new List<WMSTaskDTO>();
+ tasks.Add(wMSTask);
+
+
+ return ReceiveWMSTask(tasks);
+ }
+
+ /// <summary>
+ /// 鑾峰彇WMS绯荤粺鏈烘鎵嬩换鍔�
+ /// </summary>
+ /// <param name="task"></param>
+ /// <returns></returns>
+ private WebResponseContent GetWMSRobotTask(Dt_Task task)
+ {
+ string configKey = ResolveRobotTaskConfigKey(task.TargetAddress);
+ StockDTO stock = BuildRobotTaskStock(task, configKey);
+
+ var result = _httpClientHelper.Post<WebResponseContent>(configKey, stock.ToJson());
+
+ if (!result.IsSuccess || !result.Data.Status)
+ return WebResponseContent.Instance.Error($"鑾峰彇WMS绯荤粺鏈烘鎵嬩换鍔″け璐�,浠诲姟鍙�:銆恵task.TaskNum}銆�,鎵樼洏鍙�:銆恵task.PalletCode}銆�,鐩爣鍦板潃:銆恵task.TargetAddress}銆�,鎺ュ彛:銆恵configKey}銆�,閿欒淇℃伅:銆恵result.Data?.Message}銆�");
+
+ var tasks = JsonConvert.DeserializeObject<List<WMSTaskDTO>>(result.Data.Data?.ToString() ?? string.Empty);
+ if (tasks == null || tasks.Count == 0)
+ return WebResponseContent.Instance.Error($"鑾峰彇WMS绯荤粺鏈烘鎵嬩换鍔″け璐�,浠诲姟鍙�:銆恵task.TaskNum}銆�,鎵樼洏鍙�:銆恵task.PalletCode}銆�,閿欒淇℃伅:銆怶MS鏈繑鍥炴湁鏁堜换鍔℃暟鎹��");
+
+ return ReceiveWMSTask(tasks);
+ }
+
+ /// <summary>
+ /// 鏍规嵁杈撻�佺嚎鐩爣鍦板潃瑙f瀽鏈烘鎵嬩换鍔℃帴鍙c��
+ /// 瑙勫垯锛�
+ /// 1. 浠庨厤缃鍙栫簿纭湴鍧�鏄犲皠锛圓ddressMap锛�
+ /// 2. 鏈懡涓椂榛樿鎹㈢洏
+ /// </summary>
+ private string ResolveRobotTaskConfigKey(string? targetAddress)
+ {
+ string address = (targetAddress ?? string.Empty).Trim();
+ if (string.IsNullOrWhiteSpace(address))
+ return nameof(ConfigKey.CreateRobotChangePalletTask);
+
+ var section = App.Configuration.GetSection("RobotTaskAddressRules");
+ var addressMap = ReadRobotRuleMap(section.GetSection("AddressMap"));
+ if (addressMap.TryGetValue(address, out string? exactTaskType))
+ return MapRobotTaskTypeToConfigKey(exactTaskType);
+
+ return nameof(ConfigKey.CreateRobotChangePalletTask);
+ }
+
+ private int MapWarehouseIdConfigKey(string? targetAddress)
+ {
+ return targetAddress switch
+ {
+ "11068" => 1,
+ "11001" => 3,
+ "11010" => 3,
+ "10010" => 1,
+ "10030" => 1,
+ _ => 1
+ };
+ }
+
+ /// <summary>
+ /// 灏嗛厤缃换鍔$被鍨嬭浆鎹负鎺ュ彛閰嶇疆閿��
+ /// 鏀寔鍊硷細Split/Group/Change锛堝ぇ灏忓啓涓嶆晱鎰燂級
+ /// </summary>
+ private string MapRobotTaskTypeToConfigKey(string? taskType)
+ {
+ string type = (taskType ?? string.Empty).Trim().ToLowerInvariant();
+ return type switch
+ {
+ "split" => nameof(ConfigKey.CreateRobotSplitPalletTask),
+ "group" => nameof(ConfigKey.CreateRobotGroupPalletTask),
+ _ => nameof(ConfigKey.CreateRobotChangePalletTask)
+ };
+ }
+
+ /// <summary>
+ /// 鏍规嵁鎺ュ彛绫诲瀷鏋勫缓鏈烘鎵嬩换鍔″叆鍙傘��
+ /// </summary>
+ private StockDTO BuildRobotTaskStock(Dt_Task task, string configKey)
+ {
+ string targetAddress = task.TargetAddress ?? string.Empty;
+ string roadway = ResolveRobotRuleValue(targetAddress, "AddressRoadwayMap", task.Roadway);
+ string sourceLineNo = ResolveRobotRuleValue(targetAddress, "AddressSourceLineNoMap", task.SourceAddress);
+
+ var stock = new StockDTO
+ {
+ Roadway = roadway,
+ SourceLineNo = sourceLineNo,
+ TargetLineNo = task.TargetAddress,
+ SourcePalletNo = task.PalletCode,
+ TargetPalletNo = task.PalletCode
+ };
+
+ if (configKey == nameof(ConfigKey.CreateRobotSplitPalletTask))
+ {
+ stock.TargetPalletNo = string.Empty;
+ }
+ else if (configKey == nameof(ConfigKey.CreateRobotGroupPalletTask))
+ {
+ stock.SourcePalletNo = string.Empty;
+ }
+ else if (configKey == nameof(ConfigKey.CreateRobotChangePalletTask))
+ {
+ IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceProDTOs.Any(d => d.DeviceChildCode == sourceLineNo));
+ if (device != null)
+ {
+ CommonConveyorLine conveyorLine = (CommonConveyorLine)device;
+ var barcode = conveyorLine.GetValue<ConveyorLineDBNameNew, string>(ConveyorLineDBNameNew.Barcode, sourceLineNo);
+ stock.SourcePalletNo = string.IsNullOrEmpty(barcode) ? string.Empty : barcode;
+ }
+ }
+
+ return stock;
+ }
+
+ /// <summary>
+ /// 鏍规嵁鐩爣鍦板潃鎸夈�岀簿纭� > 鍥為��鍊笺�嶈В鏋愯鍒欏�笺��
+ /// </summary>
+ private string ResolveRobotRuleValue(string? targetAddress, string addressSectionName, string? fallback)
+ {
+ string address = (targetAddress ?? string.Empty).Trim();
+ string defaultValue = fallback ?? string.Empty;
+ if (string.IsNullOrWhiteSpace(address))
+ return defaultValue;
+
+ var section = App.Configuration.GetSection("RobotTaskAddressRules");
+ var addressMap = ReadRobotRuleMap(section.GetSection(addressSectionName));
+ if (addressMap.TryGetValue(address, out string? value))
+ return value;
+
+ return defaultValue;
+ }
+
+ /// <summary>
+ /// 璇诲彇瑙勫垯鏄犲皠娈点��
+ /// </summary>
+ private Dictionary<string, string> ReadRobotRuleMap(IConfigurationSection section)
+ {
+ return section
+ .GetChildren()
+ .Where(x => !string.IsNullOrWhiteSpace(x.Key) && !string.IsNullOrWhiteSpace(x.Value))
+ .ToDictionary(x => x.Key.Trim(), x => x.Value!.Trim());
+ }
+
+ /// <summary>
+ /// 浠嶹MS绯荤粺鑾峰彇鍏ュ簱鐩爣鍦板潃
+ /// </summary>
+ private WebResponseContent GetWMSInboundLocation(Dt_Task task)
+ {
+ var result = _httpClientHelper.Post<WebResponseContent>(
+ nameof(ConfigKey.GetTasksLocation),
+ new CreateTaskDto { PalletCode = task.PalletCode }.ToJson());
+
+ if (!result.IsSuccess || !result.Data.Status)
+ return WebResponseContent.Instance.Error($"璋冪敤WMS鎺ュ彛鑾峰彇浠诲姟鐩爣鍦板潃澶辫触,浠诲姟鍙�:銆恵task.TaskNum}銆�,閿欒淇℃伅:銆恵result.Data?.Message}銆�");
+
+ var nextAddress = result.Data.Data?.ToString();
+ if (string.IsNullOrEmpty(nextAddress))
+ return WebResponseContent.Instance.Error($"璋冪敤WMS鎺ュ彛鑾峰彇浠诲姟鐩爣鍦板潃澶辫触,浠诲姟鍙�:銆恵task.TaskNum}銆�,閿欒淇℃伅:銆愭湭鑾峰彇鍒版湁鏁堢殑鐩爣鍦板潃銆�");
+
+ task.CurrentAddress = task.NextAddress;
+
+ task.NextAddress = nextAddress;
+ task.TargetAddress = nextAddress;
+
+ return WebResponseContent.Instance.OK();
+ }
+
+ /// <summary>
+ /// 鏇存柊WMS绯荤粺浠诲姟鐘舵��
+ /// </summary>
+ private WebResponseContent UpdateWMSTaskStatus(Dt_Task task)
+ {
+ var result = _httpClientHelper.Post<WebResponseContent>(
+ nameof(ConfigKey.UpdateTaskByStatus),
+ new UpdateTaskDto { Id = task.TaskNum, NewStatus = task.TaskStatus }.ToJson());
+
+ if (!result.IsSuccess || !result.Data.Status)
+ return WebResponseContent.Instance.Error($"璋冪敤WMS鎺ュ彛鏇存柊浠诲姟鐘舵�佸け璐�,浠诲姟鍙�:銆恵task.TaskNum}銆�,閿欒淇℃伅:銆恵result.Data?.Message}銆�");
+
+ return WebResponseContent.Instance.OK();
+ }
+
+ /// <summary>
+ /// 閫氱煡WMS绯荤粺绉诲簱浠诲姟瀹屾垚
+ /// </summary>
+ private WebResponseContent NotifyWMSRelocationFinish(Dt_Task task)
+ {
+ var result = _httpClientHelper.Post<WebResponseContent>(
+ nameof(ConfigKey.RelocationFinishTask),
+ new CreateTaskDto
+ {
+ PalletCode = task.PalletCode,
+ SourceAddress = task.CurrentAddress,
+ TargetAddress = task.TargetAddress,
+ Roadway = task.Roadway,
+ TaskType = task.TaskType
+ }.ToJson());
+
+ if (!result.IsSuccess || !result.Data.Status)
+ return WebResponseContent.Instance.Error($"閫氱煡WMS绯荤粺绉诲簱瀹屾垚澶辫触,浠诲姟鍙�:銆恵task.TaskNum}銆�,鎵樼洏鍙�:銆恵task.PalletCode}銆�,閿欒淇℃伅:銆恵result.Data?.Message}銆�");
+
+ return WebResponseContent.Instance.OK();
}
/// <summary>
@@ -394,17 +735,20 @@
{
try
{
+ if (string.IsNullOrEmpty(currentAddress))
+ throw new ArgumentNullException(nameof(currentAddress), "褰撳墠鍦板潃涓嶈兘涓虹┖");
+
Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum && x.CurrentAddress == currentAddress);
if (task == null) throw new Exception($"鏈壘鍒拌浠诲姟淇℃伅,浠诲姟鍙�:銆恵taskNum}銆�");
string oldCurrentPos = task.CurrentAddress;
string oldNextPos = task.NextAddress;
- List<Dt_Router> routers = _routerService.QueryNextRoutes(task.NextAddress, task.TargetAddress);
- if (!routers.Any()) throw new Exception($"鏈壘鍒拌澶囪矾鐢变俊鎭�");
+ Dt_Router routers = _routerService.QueryNextRoute(task.CurrentAddress);
+ if (routers == null) throw new Exception($"鏈壘鍒拌澶囪矾鐢变俊鎭�");
task.CurrentAddress = task.NextAddress;
- task.NextAddress = routers.FirstOrDefault().ChildPosi;
+ task.NextAddress = routers.ChildPosi;
task.ModifyDate = DateTime.Now;
task.Modifier = "System";
@@ -415,6 +759,7 @@
}
catch (Exception ex)
{
+ Console.WriteLine($"UpdatePosition 鏇存柊浠诲姟浣嶇疆澶辫触,浠诲姟鍙�:銆恵taskNum}銆�,閿欒淇℃伅:銆恵ex.Message}銆�");
}
return null;
}
@@ -432,56 +777,88 @@
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)
+ if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup && task.TaskStatus == (int)TaskOutStatusEnum.SC_OutExecuting)
{
List<Dt_Router> routers = _routerService.QueryNextRoutes(task.NextAddress, task.TargetAddress);
if (!routers.Any()) return WebResponseContent.Instance.Error($"鏈壘鍒拌澶囪矾鐢变俊鎭�");
- int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskOutStatusEnum>();
- task.TaskState = nextStatus;
+ int nextStatus = task.TaskStatus.GetNextNotCompletedStatus<TaskOutStatusEnum>();
+ task.TaskStatus = nextStatus;
task.CurrentAddress = task.NextAddress;
task.NextAddress = routers.FirstOrDefault().ChildPosi;
task.ModifyDate = DateTime.Now;
task.Modifier = "System";
- BaseDal.UpdateData(task);
- _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"鍫嗗灈鏈哄嚭搴撳畬鎴�");
- //todo 鍚屾鍒癢MS
+ content = NotifyWMSOutboundFinish(task);
+ if (content.Status)
+ {
+ BaseDal.UpdateData(task);
- //鏆備笉鑰冭檻澶氫釜鍑哄簱鍙�
+ _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"鍫嗗灈鏈哄嚭搴撳畬鎴�");
+ return content.Error($"閫氱煡WMS绯荤粺鍫嗗灈鏈哄嚭搴撳畬鎴愭垚鍔�,浠诲姟鍙�:銆恵task.TaskNum}銆�,鎵樼洏鍙�:銆恵task.PalletCode}銆�");
+ }
+
+ //var result = _httpClientHelper.Post<WebResponseContent>(nameof(ConfigKey.OutboundFinishTaskAsync), (new StockInfoDTO() { PalletCode = task.PalletCode, TaskNum = task.TaskNum }).ToJson());
+ //if (result.IsSuccess && result.Data.Status)
+ //{
+ // BaseDal.UpdateData(task);
+
+ // _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"鍫嗗灈鏈哄嚭搴撳畬鎴�");
+ // 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.InboundGroup && task.TaskState == (int)TaskInStatusEnum.SC_InExecuting)
+ else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup && task.TaskStatus == (int)TaskInStatusEnum.SC_InExecuting)
{
- //todo
- int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskInStatusEnum>();
- task.TaskState = nextStatus;
+ int nextStatus = task.TaskStatus.GetNextNotCompletedStatus<TaskInStatusEnum>();
+ task.TaskStatus = nextStatus;
task.ModifyDate = DateTime.Now;
task.Modifier = "System";
- BaseDal.UpdateData(task);
- _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"鍫嗗灈鏈哄叆搴撳畬鎴�");
- WMSTaskDTO taskDTO = new WMSTaskDTO()
+ var result = _httpClientHelper.Post<WebResponseContent>(nameof(ConfigKey.InboundFinishTaskAsync), (new CreateTaskDto()
{
- TaskNum = Convert.ToInt32(DateTime.Now.ToString("HHmmss")),
- Grade = 1,
- PalletCode = task.PalletCode + "S",
- RoadWay = "SC01",
- SourceAddress = task.TargetAddress,
- TargetAddress = "CLOutAreaA",
- TaskState = (int)TaskOutStatusEnum.OutNew,
- Id = 0,
- TaskType = (int)TaskOutboundTypeEnum.Outbound
- };
+ PalletCode = task.PalletCode,
+ }).ToJson());
- content = ReceiveWMSTask(new List<WMSTaskDTO> { taskDTO });
+ if (result.IsSuccess && result.Data.Status)
+ {
+ BaseDal.DeleteAndMoveIntoHty(task, OperateTypeEnum.鑷姩瀹屾垚);
+ _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"鍫嗗灈鏈哄叆搴撳畬鎴�");
+ 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绉诲簱瀹屾垚
+ if (task.TaskStatus == (int)TaskRelocationStatusEnum.SC_RelocationExecuting)
+ {
+ int nextStatus = task.TaskStatus.GetNextNotCompletedStatus<TaskRelocationStatusEnum>();
+ task.TaskStatus = nextStatus;
+ task.ModifyDate = DateTime.Now;
+ task.Modifier = "System";
+
+ WebResponseContent result = NotifyWMSRelocationFinish(task);
+ if (result.Status)
+ {
+ BaseDal.DeleteAndMoveIntoHty(task, OperateTypeEnum.鑷姩瀹屾垚);
+ _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"鍫嗗灈鏈虹Щ搴撳畬鎴�");
+ return content.Error($"閫氱煡WMS绯荤粺鍫嗗灈鏈虹Щ搴撳畬鎴愭垚鍔�,浠诲姟鍙�:銆恵task.TaskNum}銆�,鎵樼洏鍙�:銆恵task.PalletCode}銆�");
+ }
+ else
+ {
+ return content.Error($"閫氱煡WMS绯荤粺鍫嗗灈鏈虹Щ搴撳畬鎴愬け璐�,浠诲姟鍙�:銆恵task.TaskNum}銆�,鎵樼洏鍙�:銆恵task.PalletCode}銆�,閿欒淇℃伅:銆恵result.Message}銆�");
+ }
+ }
}
else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OtherGroup)
{
-
}
else
{
@@ -508,25 +885,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
}
@@ -535,7 +912,7 @@
BaseDal.UpdateData(task);
- _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"浜哄伐鎭㈠鎸傝捣浠诲姟,鎭㈠鎸傝捣鏃朵换鍔$姸鎬併�恵task.TaskState}銆�");
+ _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"浜哄伐鎭㈠鎸傝捣浠诲姟,鎭㈠鎸傝捣鏃朵换鍔$姸鎬併�恵task.TaskStatus}銆�");
content = WebResponseContent.Instance.OK();
}
@@ -559,24 +936,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();
}
@@ -598,5 +975,34 @@
BaseDal.DeleteAndMoveIntoHty(tasks, OperateTypeEnum.浜哄伐鍒犻櫎);
return WebResponseContent.Instance.OK($"鎴愬姛鍒犻櫎{tasks.Count}鏉℃暟鎹�");
}
+
+ /// <summary>
+ /// 鏍规嵁璁惧缂栧彿銆佸綋鍓嶅湴鍧�鎸夌収浼樺厛绾т互鍙婂垱寤烘椂闂存帓搴忔煡璇换鍔℃睜鏂板鐨勪换鍔�
+ /// </summary>
+ /// <param name="deviceNo">璁惧缂栧彿</param>
+ /// <param name="currentAddress">褰撳墠鍦板潃</param>
+ /// <returns>杩斿洖浠诲姟瀹炰綋瀵硅薄锛屽彲鑳戒负null</returns>
+ public Dt_Task QueryRobotCraneTask(string deviceNo, string currentAddress = "")
+ {
+ if (string.IsNullOrEmpty(currentAddress))
+ 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.TaskStatus <= (int)TaskRobotStatusEnum.RobotExecuting, TaskOrderBy);
+ }
+
+ /// <summary>
+ /// 鑾峰彇涓庢寚瀹氫换鍔$紪鍙峰叧鑱旂殑浠诲姟銆�
+ /// </summary>
+ /// <param name="taskNum">瑕佽幏鍙栫殑浠诲姟鐨勫敮涓�鏍囪瘑绗︺��</param>
+ /// <returns>琛ㄧず鎸囧畾缂栧彿浠诲姟鐨�<see cref="Dt_Task"/>瀵硅薄锛屽鏋滀笉瀛樺湪璇ヤ换鍔″垯杩斿洖<c>null</c>銆�</returns>
+ public Dt_Task QueryByTaskNum(int taskNum)
+ {
+ return BaseDal.QueryFirst(x => x.TaskNum == taskNum);
+ }
+ }
+
+ public enum ConveyorLineDBNameNew
+ {
+ Barcode
}
}
--
Gitblit v1.9.3