diff --git a/ds-wms-service/DS.WMS.Core/Info/Method/ClientParamService.cs b/ds-wms-service/DS.WMS.Core/Info/Method/ClientParamService.cs
index c249a2d1..57a1e1ae 100644
--- a/ds-wms-service/DS.WMS.Core/Info/Method/ClientParamService.cs
+++ b/ds-wms-service/DS.WMS.Core/Info/Method/ClientParamService.cs
@@ -50,13 +50,18 @@ namespace DS.WMS.Core.Info.Method
if (model == null)
return param;
- if (typeof(T).IsEnum && Enum.TryParse(typeof(T), model.ItemCode, true, out object? enumValue)) //枚举特殊处理
+ var type = typeof(T);
+ var targetType = Nullable.GetUnderlyingType(type);
+ if (targetType != null)
+ type = targetType;
+
+ if (type.IsEnum && Enum.TryParse(type, model.ItemCode, true, out object? enumValue)) //枚举特殊处理
{
param.Value = (T)enumValue;
}
else
{
- param.Value = (T)Convert.ChangeType(model.ItemCode, typeof(T));
+ param.Value = (T)Convert.ChangeType(model.ItemCode, type);
}
return param;
diff --git a/ds-wms-service/DS.WMS.Core/Op/Interface/TaskInteraction/ISeaExportTaskService.cs b/ds-wms-service/DS.WMS.Core/Op/Interface/TaskInteraction/ISeaExportTaskService.cs
index 010e2856..47f1202c 100644
--- a/ds-wms-service/DS.WMS.Core/Op/Interface/TaskInteraction/ISeaExportTaskService.cs
+++ b/ds-wms-service/DS.WMS.Core/Op/Interface/TaskInteraction/ISeaExportTaskService.cs
@@ -1,4 +1,5 @@
-using DS.WMS.Core.Op.Dtos.TaskInteraction;
+using DS.Module.Core.Data;
+using DS.WMS.Core.Op.Dtos.TaskInteraction;
using DS.WMS.Core.Op.Entity.TaskInteraction;
namespace DS.WMS.Core.Op.Interface.TaskInteraction
@@ -21,5 +22,12 @@ namespace DS.WMS.Core.Op.Interface.TaskInteraction
///
///
Task CreateSubTaskAsync(BusinessTask task);
+
+ ///
+ /// 创建关联子任务
+ ///
+ ///
+ ///
+ Task CreateSubTaskAsync(TaskFlowDataContext dataContext);
}
}
diff --git a/ds-wms-service/DS.WMS.Core/Op/Method/TaskInteraction/ActionExecutor/Booking/BookingActionExecutor.cs b/ds-wms-service/DS.WMS.Core/Op/Method/TaskInteraction/ActionExecutor/Booking/BookingActionExecutor.cs
index f09647ce..029b6bdb 100644
--- a/ds-wms-service/DS.WMS.Core/Op/Method/TaskInteraction/ActionExecutor/Booking/BookingActionExecutor.cs
+++ b/ds-wms-service/DS.WMS.Core/Op/Method/TaskInteraction/ActionExecutor/Booking/BookingActionExecutor.cs
@@ -29,39 +29,6 @@ namespace DS.WMS.Core.Op.Method.TaskInteraction.ActionExecutor.Booking
return Task.CompletedTask;
}
- protected async Task CreateTaskIfNotExistAsync(ActionExecutionContext context)
- {
- if (!context.TaskInfo.NextType.HasValue)
- return DataResult.Success;
-
- var result = await TaskService.ExistsAsync(context.TaskInfo.BusinessId, context.TaskInfo.BusinessType, context.TaskInfo.NextType.Value);
- //任务已存在,跳过创建步骤
- if (result.Data)
- return DataResult.Success;
-
- return await TaskService.CreateTaskAsync(new TaskCreationRequest
- {
- BusinessId = context.TaskInfo.BusinessId,
- BusinessType = context.TaskInfo.BusinessType,
- TaskTypeName = context.TaskInfo.NextType.Value.ToString()
- });
- }
-
- protected async Task SetTaskCompleteAsync(ActionExecutionContext context)
- {
- if (!context.TaskInfo.NextType.HasValue)
- return;
-
- var result = await TaskService.SetTaskStatusAsync(new TaskUpdateRequest
- {
- BusinessId = context.TaskInfo.BusinessId,
- BusinessType = context.TaskInfo.BusinessType,
- TaskTypeName = context.TaskInfo.NextType.Value.ToString(),
- TaskStatus = TaskStatusEnum.Complete,
- AutoCreateNext = true
- });
- if (!result.Succeeded)
- await LogService.WriteLogAsync(context.TaskInfo, $"未能设置任务【{context.TaskInfo.NextType.Value.GetDescription()}】完成,返回结果:{result.Message}");
- }
+
}
}
diff --git a/ds-wms-service/DS.WMS.Core/Op/Method/TaskInteraction/ActionExecutor/Booking/EDIActionExecutor.cs b/ds-wms-service/DS.WMS.Core/Op/Method/TaskInteraction/ActionExecutor/Booking/EDIActionExecutor.cs
index 2a649040..b29e9f17 100644
--- a/ds-wms-service/DS.WMS.Core/Op/Method/TaskInteraction/ActionExecutor/Booking/EDIActionExecutor.cs
+++ b/ds-wms-service/DS.WMS.Core/Op/Method/TaskInteraction/ActionExecutor/Booking/EDIActionExecutor.cs
@@ -1,7 +1,7 @@
-using DS.WMS.Core.Op.Dtos;
+using DS.Module.Core;
+using DS.WMS.Core.Op.Dtos;
using DS.WMS.Core.Op.Dtos.TaskInteraction;
using DS.WMS.Core.Op.Interface;
-using Masuit.Tools.Systems;
using Microsoft.Extensions.DependencyInjection;
namespace DS.WMS.Core.Op.Method.TaskInteraction.ActionExecutor.Booking
@@ -11,7 +11,6 @@ namespace DS.WMS.Core.Op.Method.TaskInteraction.ActionExecutor.Booking
///
public class EDIActionExecutor : BookingActionExecutor
{
-
public async override Task ExecuteAsync(ActionExecutionContext context)
{
await base.ExecuteAsync(context);
@@ -41,7 +40,9 @@ namespace DS.WMS.Core.Op.Method.TaskInteraction.ActionExecutor.Booking
return;
}
- await SetTaskCompleteAsync(context);
+ var task = context.TaskInfo;
+ task.TaskType = TaskBaseTypeEnum.WAIT_BOOKING;
+ await SetTaskCompleteAsync(task, TaskService, LogService);
}
}
}
diff --git a/ds-wms-service/DS.WMS.Core/Op/Method/TaskInteraction/ActionExecutor/Booking/MailActionExecutor.cs b/ds-wms-service/DS.WMS.Core/Op/Method/TaskInteraction/ActionExecutor/Booking/MailActionExecutor.cs
index a18135d3..2ae9183e 100644
--- a/ds-wms-service/DS.WMS.Core/Op/Method/TaskInteraction/ActionExecutor/Booking/MailActionExecutor.cs
+++ b/ds-wms-service/DS.WMS.Core/Op/Method/TaskInteraction/ActionExecutor/Booking/MailActionExecutor.cs
@@ -1,4 +1,5 @@
-using DS.WMS.Core.Op.Dtos;
+using DS.Module.Core;
+using DS.WMS.Core.Op.Dtos;
using DS.WMS.Core.Op.Dtos.TaskInteraction;
using DS.WMS.Core.Op.Entity;
using DS.WMS.Core.Op.Entity.TaskInteraction;
@@ -79,7 +80,9 @@ namespace DS.WMS.Core.Op.Method.TaskInteraction.ActionExecutor.Booking
return;
}
- await SetTaskCompleteAsync(context);
+ var task = context.TaskInfo;
+ task.TaskType = TaskBaseTypeEnum.WAIT_BOOKING;
+ await SetTaskCompleteAsync(task, TaskService, LogService);
}
}
diff --git a/ds-wms-service/DS.WMS.Core/Op/Method/TaskInteraction/ActionExecutor/DefaultActionExecutor.cs b/ds-wms-service/DS.WMS.Core/Op/Method/TaskInteraction/ActionExecutor/DefaultActionExecutor.cs
index 565aa1b2..5d4ce511 100644
--- a/ds-wms-service/DS.WMS.Core/Op/Method/TaskInteraction/ActionExecutor/DefaultActionExecutor.cs
+++ b/ds-wms-service/DS.WMS.Core/Op/Method/TaskInteraction/ActionExecutor/DefaultActionExecutor.cs
@@ -1,6 +1,9 @@
using DS.Module.Core;
using DS.WMS.Core.Op.Dtos.TaskInteraction;
+using DS.WMS.Core.Op.Entity;
+using DS.WMS.Core.Op.Entity.TaskInteraction;
using DS.WMS.Core.Op.Interface.TaskInteraction;
+using Masuit.Tools.Systems;
namespace DS.WMS.Core.Op.Method.TaskInteraction.ActionExecutor
{
@@ -25,5 +28,57 @@ namespace DS.WMS.Core.Op.Method.TaskInteraction.ActionExecutor
{
return Task.CompletedTask;
}
+
+ ///
+ /// 如果指定类型的任务不存在则创建
+ ///
+ /// 业务ID
+ /// 业务类型
+ /// 任务类型
+ /// 任务服务
+ /// 任务日志服务
+ ///
+ protected async Task CreateTaskIfNotExistAsync(long bsId, BusinessType type, TaskBaseTypeEnum taskType,
+ ITaskService taskService, ITaskLogService? logService = null)
+ {
+ ArgumentNullException.ThrowIfNull(taskService, nameof(taskService));
+
+ var result = await taskService.ExistsAsync(bsId, type, taskType);
+ //任务已存在,跳过创建步骤
+ if (result.Data)
+ return DataResult.Success;
+
+ return await taskService.CreateTaskAsync(new TaskCreationRequest
+ {
+ BusinessId = bsId,
+ BusinessType = type,
+ TaskTypeName = taskType.ToString()
+ });
+ }
+
+ ///
+ /// 设置任务状态为完成
+ ///
+ /// 任务对象
+ /// 任务服务
+ /// 任务日志服务
+ ///
+ protected virtual async Task SetTaskCompleteAsync(BusinessTask task, ITaskService taskService, ITaskLogService? logService = null)
+ {
+ ArgumentNullException.ThrowIfNull(task, nameof(task));
+ ArgumentNullException.ThrowIfNull(taskService, nameof(taskService));
+
+ var result = await taskService.SetTaskStatusAsync(new TaskUpdateRequest
+ {
+ BusinessId = task.BusinessId,
+ BusinessType = task.BusinessType,
+ TaskTypeName = task.TaskType.ToString(),
+ TaskStatus = TaskStatusEnum.Complete,
+ AutoCreateNext = true
+ });
+ if (!result.Succeeded && logService != null)
+ await logService.WriteLogAsync(task, $"未能设置任务【{task.NextType?.GetDescription()}】完成,返回结果:{result.Message}");
+ }
+
}
}
diff --git a/ds-wms-service/DS.WMS.Core/Op/Method/TaskInteraction/ActionExecutor/SpaceRelease/SpaceReleaseActionExecutor.cs b/ds-wms-service/DS.WMS.Core/Op/Method/TaskInteraction/ActionExecutor/SpaceRelease/SpaceReleaseActionExecutor.cs
index 70bef106..9bad3f1e 100644
--- a/ds-wms-service/DS.WMS.Core/Op/Method/TaskInteraction/ActionExecutor/SpaceRelease/SpaceReleaseActionExecutor.cs
+++ b/ds-wms-service/DS.WMS.Core/Op/Method/TaskInteraction/ActionExecutor/SpaceRelease/SpaceReleaseActionExecutor.cs
@@ -108,16 +108,27 @@ namespace DS.WMS.Core.Op.Method.TaskInteraction.ActionExecutor.SpaceRelease
await LogService.WriteLogAsync(context.TaskInfo, result.Message);
return;
}
+
+ await SetTaskCompleteAsync(context.TaskInfo,
+ context.ServiceProvider.GetRequiredService(), LogService);
}
//转发BC
async Task RelayBCAsync(ActionExecutionContext context)
{
var taskBase = context.AdditionalData[TaskFlowDataNameConst.TaskBaseInfo] as TaskBaseInfo;
- if (taskBase != null)
- await BCService.SyncBookingSlotChange(taskBase.Id);
+ if (taskBase == null)
+ return;
+
+ var result = await BCService.SyncBookingSlotChange(taskBase.Id);
+ if (!result.Succeeded)
+ return;
+
+ await SetTaskCompleteAsync(context.TaskInfo,
+ context.ServiceProvider.GetRequiredService(), LogService);
}
+
//下货纸
async Task SendShippingOrderAsync(ActionExecutionContext context)
{
diff --git a/ds-wms-service/DS.WMS.Core/Op/Method/TaskInteraction/TaskService.cs b/ds-wms-service/DS.WMS.Core/Op/Method/TaskInteraction/TaskService.cs
index daa05dd1..82f06120 100644
--- a/ds-wms-service/DS.WMS.Core/Op/Method/TaskInteraction/TaskService.cs
+++ b/ds-wms-service/DS.WMS.Core/Op/Method/TaskInteraction/TaskService.cs
@@ -649,7 +649,7 @@ namespace DS.WMS.Core.Op.Method.TaskInteraction
BusinessType = callback.BusinessType.Value,
TaskTypeName = taskType.ToString(),
TaskStatus = callback.FlowStatus == FlowStatusEnum.Approve ? TaskStatusEnum.Complete : TaskStatusEnum.Pending,
- AutoCreateNext = false //审批完成后需根据业务需要自定义任务类型,因此设置为不自动创建下一任务
+ AutoCreateNext = true
};
//根据审批结果更新任务状态
await SetTaskStatusAsync(req);