diff --git a/ds-wms-service/DS.WMS.Core/Op/Dtos/TaskInteraction/TaskCreationRequest.cs b/ds-wms-service/DS.WMS.Core/Op/Dtos/TaskInteraction/TaskCreationRequest.cs
index 1e755eda..b133c8c6 100644
--- a/ds-wms-service/DS.WMS.Core/Op/Dtos/TaskInteraction/TaskCreationRequest.cs
+++ b/ds-wms-service/DS.WMS.Core/Op/Dtos/TaskInteraction/TaskCreationRequest.cs
@@ -31,5 +31,10 @@ namespace DS.WMS.Core.Op.Dtos.TaskInteraction
/// 下一任务类型
///
public TaskBaseTypeEnum? NextType { get; set; }
+
+ ///
+ /// 是否现舱(默认null值)
+ ///
+ public bool? HasCabin { get; set; }
}
}
diff --git a/ds-wms-service/DS.WMS.Core/Op/Interface/TaskInteraction/IActionManagerService.cs b/ds-wms-service/DS.WMS.Core/Op/Interface/TaskInteraction/IActionManagerService.cs
index 8bb70911..98057bab 100644
--- a/ds-wms-service/DS.WMS.Core/Op/Interface/TaskInteraction/IActionManagerService.cs
+++ b/ds-wms-service/DS.WMS.Core/Op/Interface/TaskInteraction/IActionManagerService.cs
@@ -70,10 +70,17 @@ namespace DS.WMS.Core.Op.Interface.TaskInteraction
///
Task TriggerActionAsync(BusinessTask businessTask, bool includeOrder = false, IDictionary? additionalData = null);
-
///
/// 执行放舱任务(任务台使用)
///
Task SpaceReleaseTask(TaskFlowDataContext dataContext);
+
+ ///
+ /// 自动订舱
+ ///
+ /// 业务ID
+ /// 业务类型
+ ///
+ Task AutomaticBooking(long businessId, BusinessType businessType);
}
}
diff --git a/ds-wms-service/DS.WMS.Core/Op/Method/TaskInteraction/ActionManagerService.cs b/ds-wms-service/DS.WMS.Core/Op/Method/TaskInteraction/ActionManagerService.cs
index 6480bc9f..5c732d85 100644
--- a/ds-wms-service/DS.WMS.Core/Op/Method/TaskInteraction/ActionManagerService.cs
+++ b/ds-wms-service/DS.WMS.Core/Op/Method/TaskInteraction/ActionManagerService.cs
@@ -7,6 +7,7 @@ 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 DS.WMS.Core.Op.Method.TaskInteraction.ActionSelector;
using DS.WMS.Core.TaskPlat;
using Fasterflect;
using Masuit.Tools;
@@ -234,6 +235,37 @@ namespace DS.WMS.Core.Op.Method.TaskInteraction
await taskFlow.RunWithBsno(businessTask.TaskType, businessTask.BusinessId, dataContext);
}
+ ///
+ /// 自动订舱
+ ///
+ /// 业务ID
+ /// 业务类型
+ ///
+ public async Task AutomaticBooking(long businessId, BusinessType businessType)
+ {
+ try
+ {
+ var businessTask = await TenantDb.Queryable().Where(
+ x => x.BusinessId == businessId && x.BusinessType == businessType && x.TaskType == TaskBaseTypeEnum.WAIT_BOOKING).FirstAsync();
+ if (businessTask == null)
+ return DataResult.FailedWithDesc(MultiLanguageConst.TaskStatusNotSupported);
+
+ TaskFlowDataContext dataContext = new
+ (
+ (TaskFlowDataNameConst.BusinessTask, businessTask),
+ ("TypeName", typeof(BookingSelector).AssemblyQualifiedName)
+ );
+
+ await ExecuteAsync(dataContext);
+ return DataResult.Success;
+ }
+ catch (Exception ex)
+ {
+ await ex.LogAsync(Db);
+ return DataResult.FailedWithDesc(MultiLanguageConst.Operation_Failed);
+ }
+ }
+
///
/// 执行动作
///
@@ -250,7 +282,6 @@ namespace DS.WMS.Core.Op.Method.TaskInteraction
ServiceProvider = ServiceProvider
};
-
foreach (var key in dataContext.Keys)
context.AdditionalData[key] = dataContext[key];
diff --git a/ds-wms-service/DS.WMS.Core/Op/Method/TaskInteraction/ActionSelector/BookingSelector.cs b/ds-wms-service/DS.WMS.Core/Op/Method/TaskInteraction/ActionSelector/BookingSelector.cs
index a1aeda86..d662986f 100644
--- a/ds-wms-service/DS.WMS.Core/Op/Method/TaskInteraction/ActionSelector/BookingSelector.cs
+++ b/ds-wms-service/DS.WMS.Core/Op/Method/TaskInteraction/ActionSelector/BookingSelector.cs
@@ -1,4 +1,5 @@
-using DS.WMS.Core.Info.Interface;
+using DS.Module.Core;
+using DS.WMS.Core.Info.Interface;
using DS.WMS.Core.Op.Dtos.TaskInteraction;
using DS.WMS.Core.Op.Entity;
using DS.WMS.Core.Op.Interface.TaskInteraction;
@@ -18,10 +19,15 @@ namespace DS.WMS.Core.Op.Method.TaskInteraction.ActionSelector
public async Task GetActionExecutor(ActionExecutionContext context)
{
+ //var taskService = context.ServiceProvider.GetRequiredService();
+ //var list = await taskService.GetTasks(context.TaskInfo.BusinessId, context.TaskInfo.BusinessType, TaskBaseTypeEnum.WAIT_BOOKING);
+ //if (list.Data?.Count > 0 && list.Data?[0].TaskStatus == TaskStatusEnum.Complete)
+ // return new DefaultActionExecutor();
+
switch (context.TaskInfo.BusinessType)
{
case BusinessType.OceanShippingExport:
- var seTaskService = context.ServiceProvider.GetService();
+ var seTaskService = context.ServiceProvider.GetRequiredService();
var order = await seTaskService.AsQueryable(x => x.Id == context.TaskInfo.BusinessId).Select(x => new
{
x.BookingNo,
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 4f3f8291..3d934e26 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
@@ -99,7 +99,6 @@ namespace DS.WMS.Core.Op.Method.TaskInteraction
TenantDb.QueryFilter.Clear();
}
-
///
/// 创建关联任务
///
@@ -111,6 +110,14 @@ namespace DS.WMS.Core.Op.Method.TaskInteraction
if (!await EnsureModuleAuthorized())
return DataResult.SuccessedWithDesc(nameof(MultiLanguageConst.ModuleUnauthorized));
+ if (request.HasCabin.GetValueOrDefault())
+ {
+ //如果为现舱,获取下一任务类型进行创建
+ var nextType = await GetNextTypeAsync(request.BusinessId, request.BusinessType, request.TaskType);
+ if (nextType.HasValue)
+ request.TaskTypeName = nextType.Value.ToString();
+ }
+
var task = await GetQuery(request.BusinessId, request.BusinessType, request.TaskType).FirstAsync();
if (task != null && task.TaskStatus != TaskStatusEnum.Cancel)
return DataResult.FailedWithDesc(nameof(MultiLanguageConst.TaskExists));
@@ -661,8 +668,10 @@ namespace DS.WMS.Core.Op.Method.TaskInteraction
public virtual async Task UpdateBusinessAsync(FlowCallback callback)
{
ArgumentNullException.ThrowIfNull(callback, nameof(callback));
+ if (callback.Type == null || callback.BusinessType == null)
+ return;
- var taskType = TypeMappings.Where(x => x.Value == callback.Type.GetValueOrDefault()).Select(x => x.Key).FirstOrDefault();
+ var taskType = TypeMappings.Where(x => x.Value == callback.Type.Value).Select(x => x.Key).FirstOrDefault();
var req = new TaskUpdateRequest
{
BusinessId = callback.BusinessId,
@@ -741,14 +750,24 @@ namespace DS.WMS.Core.Op.Method.TaskInteraction
///
protected async Task GetNextTypeAsync(BusinessTask current)
{
- var order = await ActionService.GetBusinessDataAsync(current.BusinessId, current.BusinessType);
- TaskFlowRuner flowRuner = new(TenantDb, ServiceProvider);
- var taskType = await flowRuner.GetWorkFlowNextConfigByTaskType(TaskBaseTypeEnum.WORK_FLOW_MAIN,
- new TaskFlowDataContext(
- (TaskFlowDataNameConst.Business, order)
- ), current.TaskType);
+ return await GetNextTypeAsync(current.BusinessId, current.BusinessType, current.TaskType);
+ }
- return taskType;
+ ///
+ /// 获取给定任务的下一任务类型
+ ///
+ /// 业务ID
+ /// 业务类型
+ /// 当前任务类型
+ ///
+ protected async Task GetNextTypeAsync(long bsId, BusinessType businessType, TaskBaseTypeEnum currentType)
+ {
+ var order = await ActionService.GetBusinessDataAsync(bsId, businessType);
+ TaskFlowRuner flowRuner = new(TenantDb, ServiceProvider);
+ return await flowRuner.GetWorkFlowNextConfigByTaskType(TaskBaseTypeEnum.WORK_FLOW_MAIN,
+ new TaskFlowDataContext(
+ (TaskFlowDataNameConst.Business, order)
+ ), currentType);
}
///
diff --git a/ds-wms-service/DS.WMS.OpApi/Controllers/SeaExportTaskController.cs b/ds-wms-service/DS.WMS.OpApi/Controllers/SeaExportTaskController.cs
index d26069b9..073be7ea 100644
--- a/ds-wms-service/DS.WMS.OpApi/Controllers/SeaExportTaskController.cs
+++ b/ds-wms-service/DS.WMS.OpApi/Controllers/SeaExportTaskController.cs
@@ -58,6 +58,20 @@ namespace DS.WMS.OpApi.Controllers
return await logService.ReadLogAsync(businessId, businessType);
}
+ ///
+ /// 触发自动订舱
+ ///
+ ///
+ /// 业务ID
+ /// 业务类型(可空,默认=海运出口)
+ ///
+ [HttpPost, Route("AutomaticBooking")]
+ public async Task AutomaticBookingAsync([FromServices] IActionManagerService actionService,
+ [FromQuery] long businessId, [FromQuery] BusinessType businessType = BusinessType.OceanShippingExport)
+ {
+ return await actionService.AutomaticBooking(businessId, businessType);
+ }
+
///
/// 创建关联任务
///