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);