海运出口任务交互服务

usertest
嵇文龙 4 months ago
parent e23661b51c
commit 0f0bc5a6c6

@ -25,7 +25,6 @@
<ItemGroup> <ItemGroup>
<Folder Include="Finance\Dtos\" /> <Folder Include="Finance\Dtos\" />
<Folder Include="Finance\Entity\" /> <Folder Include="Finance\Entity\" />
<Folder Include="Op\Interface\Task\" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

@ -429,6 +429,9 @@ public class FlowInstanceService : IFlowInstanceService
/// <param name="instance">运行实例</param> /// <param name="instance">运行实例</param>
protected virtual async Task RunCallbackAsync(FlowInstance instance) protected virtual async Task RunCallbackAsync(FlowInstance instance)
{ {
if (instance.CallbackURL.IsNullOrEmpty())
return;
//请求参数设置 //请求参数设置
var callback = new FlowCallback var callback = new FlowCallback
{ {

@ -0,0 +1,10 @@
namespace DS.WMS.Core.Op.Interface.TaskInteraction
{
/// <summary>
/// 海运出口交互任务
/// </summary>
public interface ISeaExportTaskService : ITaskService
{
}
}

@ -0,0 +1,34 @@
using DS.Module.Core;
using DS.WMS.Core.Flow.Dtos;
using DS.WMS.Core.Op.Dtos.TaskInteraction;
namespace DS.WMS.Core.Op.Interface.TaskInteraction
{
/// <summary>
/// 交互任务
/// </summary>
public interface ITaskService
{
/// <summary>
/// 创建关联任务
/// </summary>
/// <param name="request"></param>
/// <param name="useTransaction">是否使用事务</param>
/// <returns></returns>
Task<DataResult> CreateTaskAsync(TaskCreationRequest request, bool useTransaction = true);
/// <summary>
/// 设置任务状态
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
Task<DataResult> SetTaskStatusAsync(TaskUpdateRequest request);
/// <summary>
/// 审批完成回调更新
/// </summary>
/// <param name="callback">回调信息</param>
/// <returns></returns>
Task UpdateBusinessAsync(FlowCallback callback);
}
}

@ -1,28 +1,28 @@
using DS.Module.Core; using DS.Module.Core;
using DS.Module.Core.Extensions; using DS.Module.Core.Extensions;
using DS.WMS.Core.Fee.Method; using DS.Module.DjyServiceStatus;
using DS.WMS.Core.Flow.Dtos; using DS.WMS.Core.Flow.Dtos;
using DS.WMS.Core.Flow.Entity; using DS.WMS.Core.Flow.Entity;
using DS.WMS.Core.Flow.Interface; using DS.WMS.Core.Flow.Interface;
using DS.WMS.Core.Op.Dtos.TaskInteraction; using DS.WMS.Core.Op.Dtos.TaskInteraction;
using DS.WMS.Core.Op.Entity; using DS.WMS.Core.Op.Entity;
using DS.WMS.Core.Op.Entity.TaskInteraction; using DS.WMS.Core.Op.Entity.TaskInteraction;
using DS.WMS.Core.Op.Interface.TaskInteraction;
using DS.WMS.Core.Sys.Entity; using DS.WMS.Core.Sys.Entity;
using DS.WMS.Core.TaskPlat.Dtos; using DS.WMS.Core.TaskPlat.Dtos;
using DS.WMS.Core.TaskPlat.Interface;
using Masuit.Tools.Systems; using Masuit.Tools.Systems;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using SqlSugar; using Newtonsoft.Json.Linq;
namespace DS.WMS.Core.Op.Method.TaskInteraction namespace DS.WMS.Core.Op.Method.TaskInteraction
{ {
/// <summary> /// <summary>
/// 海运出口任务服务 /// 海运出口任务交互服务
/// </summary> /// </summary>
public class SeaExportTaskService : FeeServiceBase public class SeaExportTaskService : TaskService, ISeaExportTaskService
{ {
ITaskManageService taskService; readonly Lazy<IDjyServiceStatusService> djyService;
Lazy<IClientFlowInstanceService> flowService; readonly Lazy<IClientFlowInstanceService> flowService;
/// <summary> /// <summary>
/// 初始化 /// 初始化
@ -30,29 +30,73 @@ namespace DS.WMS.Core.Op.Method.TaskInteraction
/// <param name="provider"></param> /// <param name="provider"></param>
public SeaExportTaskService(IServiceProvider provider) : base(provider) public SeaExportTaskService(IServiceProvider provider) : base(provider)
{ {
taskService = provider.GetRequiredService<ITaskManageService>(); djyService = new Lazy<IDjyServiceStatusService>(provider.GetRequiredService<IDjyServiceStatusService>());
flowService = new Lazy<IClientFlowInstanceService>(provider.GetRequiredService<IClientFlowInstanceService>()); flowService = new Lazy<IClientFlowInstanceService>(provider.GetRequiredService<IClientFlowInstanceService>());
} }
/// <summary> /// <summary>
/// 创建关联任务 /// 当任务创建时调用
/// </summary> /// </summary>
/// <param name="request"></param> /// <param name="task"></param>
/// <returns></returns> /// <returns></returns>
public async Task<DataResult> CreateTaskAsync(TaskCreationRequest request) protected override async Task<DataResult> OnTaskCreated(BusinessTask task)
{
if (task.TaskType == TaskBaseTypeEnum.WAIT_ORDER_AUDIT)
{
//待审核,需创建工作流
var template = await FindTemplateAsync(AuditType.SeaExport);
if (template == null)
return DataResult.FailedWithDesc(nameof(MultiLanguageConst.TemplateNotFound));
var result = flowService.Value.CreateFlowInstance(new CreateFlowInstanceReq
{
BusinessId = task.BusinessId,
BusinessType = BusinessType.OceanShippingExport,
TemplateId = template.Id
});
if (result.Succeeded)
{ {
var task = await GetTaskAsync(request.BusinessId, request.BusinessType, request.TaskType); var instance = result.Data as FlowInstance;
if (task != null) task.FlowId = instance.Id;
return DataResult.FailedWithDesc(nameof(MultiLanguageConst.Task_Exists)); await TenantDb.Updateable(task).UpdateColumns(x => x.FlowId).ExecuteCommandAsync();
}
}
return DataResult.Success;
}
/// <summary>
/// 创建关联子任务
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public async Task<DataResult> CreateSubTaskAsync(IEnumerable<TaskCreationRequest> request)
{
long userId = long.Parse(User.UserId);
long tenatId = long.Parse(User.TenantId); long tenatId = long.Parse(User.TenantId);
string tenatName = Db.Queryable<SysTenant>().Where(x => x.Id == tenatId).Select(x => x.Name).First(); string tenatName = Db.Queryable<SysTenant>().Where(x => x.Id == tenatId).Select(x => x.Name).First();
var dt = DateTime.Now;
var taskList = new List<BusinessTask>();
var first = request.FirstOrDefault();
var biz = await TenantDb.Queryable<SeaExport>().Select(x => new
{
x.Id,
x.MBLNO,
x.Vessel,
x.Voyno,
x.ETD,
}).FirstAsync(x => x.Id == first.BusinessId);
foreach (var item in request)
{
var info = new TaskManageOrderMessageInfo var info = new TaskManageOrderMessageInfo
{ {
Head = new TaskManageOrderMessageHeadInfo Head = new TaskManageOrderMessageHeadInfo
{ {
GID = Guid.NewGuid().ToString(), GID = Guid.NewGuid().ToString(),
BSNO = request.BusinessId, BSNO = item.BusinessId,
MessageType = "WORK_FLOW_TASK", MessageType = "WORK_FLOW_TASK",
SenderId = "WorkFlow", SenderId = "WorkFlow",
SenderName = "工作流平台", SenderName = "工作流平台",
@ -64,164 +108,115 @@ namespace DS.WMS.Core.Op.Method.TaskInteraction
}, },
Main = new TaskManageOrderMessageMainInfo Main = new TaskManageOrderMessageMainInfo
{ {
TaskType = request.TaskType, TaskType = item.TaskType,
TaskSource = TaskSourceEnum.WORK_FLOW, TaskSource = TaskSourceEnum.WORK_FLOW,
TaskTitle = request.TaskTitle,
TaskDesp = request.TaskDescription,
TaskUserId = User.UserId, TaskUserId = User.UserId,
TaskUserName = User.UserName, TaskUserName = User.UserName,
RecvUserId = User.UserId, RecvUserInfoList = [new RecvUserInfo { RecvUserId = long.Parse(User.UserId), RecvUserName = User.UserName }],
RecvUserName = User.UserName,
TaskTenatId = tenatId, TaskTenatId = tenatId,
TaskTenatName = tenatName TaskTenatName = tenatName
} }
}; };
info.Main.TaskDesp = info.Main.TaskTitle = $"{item.TaskType.GetDescription()} {biz.Vessel} {biz.Voyno} ETD:{biz.ETD?.ToString("yyyy-MM-dd")} BLNo:{biz.MBLNO}";
if (info.Main.TaskTitle.IsNullOrEmpty()) var result = await ManagerService.InitTaskJob(info);
{
var biz = await TenantDb.Queryable<SeaExport>().Select(x => new
{
x.Id,
x.MBLNO,
x.Vessel,
x.Voyno,
x.ETD,
}).FirstAsync();
info.Main.TaskDesp = info.Main.TaskTitle = $"{request.TaskType.GetDescription()} {biz.Vessel} {biz.Voyno} ETD:{biz.ETD?.ToString("yyyy-MM-dd")} BLNo:{biz.MBLNO}";
}
await TenantDb.Ado.BeginTranAsync();
try
{
var result = await taskService.InitTaskJob(info);
if (!result.Succeeded) if (!result.Succeeded)
return result; return result;
task = new BusinessTask var task = new BusinessTask
{ {
BusinessId = request.BusinessId, BusinessId = item.BusinessId,
BusinessType = request.BusinessType, BusinessType = item.BusinessType,
TaskType = request.TaskType, TaskType = item.TaskType,
TaskStatus = TaskStatusEnum.Create, TaskStatus = TaskStatusEnum.Create,
CreateBy = long.Parse(User.UserId), CreateBy = userId,
CreateTime = DateTime.Now CreateTime = dt
}; };
task.NextType = GetNextType(task); taskList.Add(task);
await TenantDb.Insertable(task).ExecuteCommandAsync();
if (request.TaskType == TaskBaseTypeEnum.WAIT_ORDER_AUDIT)
{
//待审核,需创建工作流
var template = await FindTemplateAsync(AuditType.SeaExport);
if (template == null)
return DataResult.FailedWithDesc(nameof(MultiLanguageConst.TemplateNotFound));
result = flowService.Value.CreateFlowInstance(new CreateFlowInstanceReq
{
BusinessId = request.BusinessId,
BusinessType = BusinessType.OceanShippingExport,
TemplateId = template.Id
});
if (result.Succeeded)
{
var instance = result.Data as FlowInstance;
task.FlowId = instance.Id;
await TenantDb.Updateable(task).UpdateColumns(x => x.FlowId).ExecuteCommandAsync();
}
} }
await TenantDb.Ado.CommitTranAsync(); await TenantDb.Insertable(taskList).ExecuteCommandAsync();
return DataResult.Success; return DataResult.Success;
} }
catch (Exception ex)
{
await TenantDb.Ado.RollbackTranAsync();
await ex.LogAsync(Db);
return DataResult.FailedWithDesc(nameof(MultiLanguageConst.Operation_Failed));
}
}
/// <summary> /// <summary>
/// 设置任务状态 /// 当任务状态发生变化时调用
/// </summary> /// </summary>
/// <param name="request"></param> /// <param name="request"></param>
/// <returns></returns> /// <returns></returns>
public async Task<DataResult> UpdateTaskStatusAsync(TaskUpdateRequest request) protected override async Task OnTaskStatusChanged(TaskUpdateRequest request)
{ {
await TenantDb.Ado.BeginTranAsync(); //放舱结束,根据业务所选服务,生成子任务
try if (request.TaskType == TaskBaseTypeEnum.WAIT_SPACE_RELEASE)
{ {
var result = await taskService.SetTaskStatus(request.BusinessId, request.TaskType, request.TaskStatus, DateTime.Now); var list = await GetSubRequestAsync(request.BusinessId, request.BusinessType);
if (!result.Succeeded) await CreateSubTaskAsync(list);
return result; }
}
//更新当前任务状态
BusinessTask task = await GetTaskAsync(request.BusinessId, request.BusinessType, request.TaskType);
if (task == null)
return DataResult.FailedWithDesc(nameof(MultiLanguageConst.EmptyData));
task.TaskStatus = request.TaskStatus;
await TenantDb.Updateable(task).UpdateColumns(x => x.TaskStatus).ExecuteCommandAsync();
//若存在下一任务,则创建 internal async Task<TaskCreationRequest[]> GetSubRequestAsync(long id, BusinessType businessType)
if (task.NextType.HasValue)
{ {
var req = new TaskCreationRequest var svcList = await GetServicesAsync(id);
var list = new TaskCreationRequest[svcList.Length];
for (int i = 0; i < svcList.Length; i++)
{ {
BusinessId = request.BusinessId, var dto = new TaskCreationRequest { BusinessId = id, BusinessType = businessType };
BusinessType = request.BusinessType, var svcName = svcList[i];
TaskType = task.NextType.Value
};
await CreateTaskAsync(req);
}
//放舱结束,根据业务所选服务,生成子任务 if (svcName == "报关")
if (request.TaskType == TaskBaseTypeEnum.WAIT_SPACE_RELEASE) dto.TaskType = TaskBaseTypeEnum.WAIT_BAOGUAN;
{ else if (svcName == "订舱")
dto.TaskType = TaskBaseTypeEnum.WAIT_CANGDAN;
else if (svcName.Equals("VGM", StringComparison.OrdinalIgnoreCase))
dto.TaskType = TaskBaseTypeEnum.WAIT_VGM;
else if (svcName.Equals("AFR", StringComparison.OrdinalIgnoreCase))
dto.TaskType = TaskBaseTypeEnum.WAIT_AFR;
else if (svcName.Equals("AMS", StringComparison.OrdinalIgnoreCase))
dto.TaskType = TaskBaseTypeEnum.WAIT_AMS;
else if (svcName.Equals("ISF", StringComparison.OrdinalIgnoreCase))
dto.TaskType = TaskBaseTypeEnum.WAIT_ISF;
else if (svcName == "熏蒸")
dto.TaskType = TaskBaseTypeEnum.WAIT_XUNZHENG;
else if (svcName == "商检")
dto.TaskType = TaskBaseTypeEnum.WAIT_SHANGJIAN;
else if (svcName.Equals("COA证书", StringComparison.OrdinalIgnoreCase))
dto.TaskType = TaskBaseTypeEnum.WAIT_COA;
else if (svcName == "产地证")
dto.TaskType = TaskBaseTypeEnum.WAIT_CHANDIZHENG;
list[i] = dto;
} }
return DataResult.Success; return list;
} }
catch (Exception ex)
internal async Task<string[]> GetServicesAsync(long id)
{ {
await TenantDb.Ado.RollbackTranAsync(); var result = await djyService.Value.GetServiceProjectList(
await ex.LogAsync(Db); new EmbedQueryServiceProjectWithStatus { BusinessId = id.ToString() });
return DataResult.FailedWithDesc(nameof(MultiLanguageConst.Operation_Failed));
}
}
if (!result.success)
return [];
if (((JObject)result.data)["ext"] is not JArray extArray || extArray.Count == 0)
return [];
internal async Task<BusinessTask> GetTaskAsync(long id, BusinessType businessType, TaskBaseTypeEnum taskType) return extArray.Select(x => x["projectName"]?.Value<string>() ?? string.Empty).ToArray();
{
return await TenantDb.Queryable<BusinessTask>().FirstAsync(x =>
x.BusinessId == id && x.BusinessType == businessType && x.TaskType == taskType);
}
internal async Task<BusinessTask> GetCurrentTaskAsync(long id, BusinessType businessType)
{
return await TenantDb.Queryable<BusinessTask>().Where(x => x.BusinessId == id && x.BusinessType == businessType)
.OrderByDescending(x => x.CreateTime).Take(1).FirstAsync();
} }
/// <summary> /// <summary>
/// 获取给定任务的下一任务类型 /// 审批完成回调更新
/// </summary> /// </summary>
/// <param name="current">任务信息</param> /// <param name="callback">回调信息</param>
/// <returns></returns> /// <returns></returns>
internal static TaskBaseTypeEnum? GetNextType(BusinessTask current) public override async Task UpdateBusinessAsync(FlowCallback callback)
{ {
if (current.TaskType == TaskBaseTypeEnum.WAIT_CHECKOUT_BILL) await base.UpdateBusinessAsync(callback);
return null;
//todo:海运出口主表信息
int currentTypeVal = (int)current.TaskType;
if (currentTypeVal >= 300) //300开始的枚举值为可选服务项目不存在前后关联性
return null;
return (TaskBaseTypeEnum)currentTypeVal++;
} }
} }
} }

@ -0,0 +1,249 @@
using DS.Module.Core;
using DS.Module.Core.Extensions;
using DS.WMS.Core.Fee.Method;
using DS.WMS.Core.Flow.Dtos;
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.Sys.Entity;
using DS.WMS.Core.TaskPlat.Dtos;
using DS.WMS.Core.TaskPlat.Interface;
using Masuit.Tools.Systems;
using Microsoft.Extensions.DependencyInjection;
using SqlSugar;
namespace DS.WMS.Core.Op.Method.TaskInteraction
{
/// <summary>
/// 任务交互服务
/// </summary>
public class TaskService : FeeServiceBase, ITaskService
{
/// <summary>
/// 任务管理服务
/// </summary>
protected ITaskManageService ManagerService { get; private set; }
/// <summary>
/// 初始化
/// </summary>
/// <param name="provider"></param>
protected TaskService(IServiceProvider provider) : base(provider)
{
ManagerService = provider.GetRequiredService<ITaskManageService>();
}
/// <summary>
/// 创建关联任务
/// </summary>
/// <param name="request"></param>
/// <param name="useTransaction">是否使用事务</param>
/// <returns></returns>
public async Task<DataResult> CreateTaskAsync(TaskCreationRequest request, bool useTransaction = true)
{
var task = await GetTaskAsync(request.BusinessId, request.BusinessType, request.TaskType);
if (task != null)
return DataResult.FailedWithDesc(nameof(MultiLanguageConst.Task_Exists));
long tenatId = long.Parse(User.TenantId);
string tenatName = Db.Queryable<SysTenant>().Where(x => x.Id == tenatId).Select(x => x.Name).First();
var info = new TaskManageOrderMessageInfo
{
Head = new TaskManageOrderMessageHeadInfo
{
GID = Guid.NewGuid().ToString(),
BSNO = request.BusinessId,
MessageType = "WORK_FLOW_TASK",
SenderId = "WorkFlow",
SenderName = "工作流平台",
ReceiverId = "TaskManage",
ReceiverName = "任务管理平台",
Version = "1.0",
RequestDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
RequestAction = "Add"
},
Main = new TaskManageOrderMessageMainInfo
{
TaskType = request.TaskType,
TaskSource = TaskSourceEnum.WORK_FLOW,
TaskTitle = request.TaskTitle,
TaskDesp = request.TaskDescription,
TaskUserId = User.UserId,
TaskUserName = User.UserName,
RecvUserId = User.UserId,
RecvUserName = User.UserName,
TaskTenatId = tenatId,
TaskTenatName = tenatName
}
};
if (info.Main.TaskTitle.IsNullOrEmpty())
{
var biz = await TenantDb.Queryable<SeaExport>().Select(x => new
{
x.Id,
x.MBLNO,
x.Vessel,
x.Voyno,
x.ETD,
}).FirstAsync(x => x.Id == request.BusinessId);
info.Main.TaskDesp = info.Main.TaskTitle = $"{request.TaskType.GetDescription()} {biz.Vessel} {biz.Voyno} ETD:{biz.ETD?.ToString("yyyy-MM-dd")} BLNo:{biz.MBLNO}";
}
if (useTransaction)
await TenantDb.Ado.BeginTranAsync();
try
{
var result = await ManagerService.InitTaskJob(info);
if (!result.Succeeded)
return result;
task = new BusinessTask
{
BusinessId = request.BusinessId,
BusinessType = request.BusinessType,
TaskType = request.TaskType,
TaskStatus = TaskStatusEnum.Create,
CreateBy = long.Parse(User.UserId),
CreateTime = DateTime.Now
};
task.NextType = GetNextType(task);
await TenantDb.Insertable(task).ExecuteCommandAsync();
result = await OnTaskCreated(task);
if (!result.Succeeded)
return result;
if (useTransaction)
await TenantDb.Ado.CommitTranAsync();
return result;
}
catch (Exception ex)
{
if (useTransaction)
await TenantDb.Ado.RollbackTranAsync();
await ex.LogAsync(Db);
return DataResult.FailedWithDesc(nameof(MultiLanguageConst.Operation_Failed));
}
}
/// <summary>
/// 当任务创建时调用
/// </summary>
/// <param name="task"></param>
/// <returns></returns>
protected virtual Task<DataResult> OnTaskCreated(BusinessTask task)
{
return Task.FromResult(DataResult.Success);
}
/// <summary>
/// 设置任务状态
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public async Task<DataResult> SetTaskStatusAsync(TaskUpdateRequest request)
{
await TenantDb.Ado.BeginTranAsync();
try
{
var result = await ManagerService.SetTaskStatus(request.BusinessId, request.TaskType, request.TaskStatus, DateTime.Now);
if (!result.Succeeded)
return result;
//更新当前任务状态
BusinessTask task = await GetTaskAsync(request.BusinessId, request.BusinessType, request.TaskType);
if (task == null)
return DataResult.FailedWithDesc(nameof(MultiLanguageConst.EmptyData));
if (task.TaskStatus!= request.TaskStatus)
await OnTaskStatusChanged(request);
task.TaskStatus = request.TaskStatus;
await TenantDb.Updateable(task).UpdateColumns(x => x.TaskStatus).ExecuteCommandAsync();
if (task.TaskStatus == TaskStatusEnum.Complete)
{
//若存在下一任务,则继续创建
if (task.NextType.HasValue)
{
var req = new TaskCreationRequest
{
BusinessId = request.BusinessId,
BusinessType = request.BusinessType,
TaskType = task.NextType.Value
};
await CreateTaskAsync(req, false);
}
}
await TenantDb.Ado.CommitTranAsync();
return DataResult.Success;
}
catch (Exception ex)
{
await TenantDb.Ado.RollbackTranAsync();
await ex.LogAsync(Db);
return DataResult.FailedWithDesc(nameof(MultiLanguageConst.Operation_Failed));
}
}
/// <summary>
/// 当任务状态发生变化时调用
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
protected virtual Task OnTaskStatusChanged(TaskUpdateRequest request)
{
return Task.CompletedTask;
}
/// <summary>
/// 审批完成回调更新
/// </summary>
/// <param name="callback">回调信息</param>
/// <returns></returns>
/// <exception cref="ArgumentNullException"><paramref name="callback"/>为null时引发</exception>
public virtual async Task UpdateBusinessAsync(FlowCallback callback)
{
ArgumentNullException.ThrowIfNull(callback, nameof(callback));
//更新任务状态为完成
await SetTaskStatusAsync(new TaskUpdateRequest
{
BusinessId = callback.BusinessId,
BusinessType = callback.BusinessType.GetValueOrDefault(),
TaskType = TaskBaseTypeEnum.WAIT_ORDER_AUDIT,
TaskStatus = TaskStatusEnum.Complete
});
}
protected internal async Task<BusinessTask> GetTaskAsync(long id, BusinessType businessType, TaskBaseTypeEnum taskType)
{
return await TenantDb.Queryable<BusinessTask>().FirstAsync(x =>
x.BusinessId == id && x.BusinessType == businessType && x.TaskType == taskType);
}
/// <summary>
/// 获取给定任务的下一任务类型
/// </summary>
/// <param name="current">任务信息</param>
/// <returns></returns>
public static TaskBaseTypeEnum? GetNextType(BusinessTask current)
{
if (current.TaskType == TaskBaseTypeEnum.WAIT_CHECKOUT_BILL) //流程的最后一步
return null;
int currentTypeVal = (int)current.TaskType;
if (currentTypeVal >= 300) //300开始的枚举值为可选服务项目不存在前后关联性
return null;
return (TaskBaseTypeEnum)currentTypeVal++;
}
}
}

@ -0,0 +1,60 @@
using System.Net;
using DS.Module.Core;
using DS.WMS.Core.Flow.Dtos;
using DS.WMS.Core.Op.Dtos.TaskInteraction;
using DS.WMS.Core.Op.Interface.TaskInteraction;
using Microsoft.AspNetCore.Mvc;
namespace DS.WMS.OpApi.Controllers
{
/// <summary>
/// 海运出口任务API
/// </summary>
public class SeaExportTaskController : ApiController
{
readonly ISeaExportTaskService taskService;
/// <summary>
/// 构造函数
/// </summary>
/// <param name="service"></param>
public SeaExportTaskController(ISeaExportTaskService service)
{
taskService = service;
}
/// <summary>
/// 创建关联任务
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[HttpPost, Route("CreateTask")]
public async Task<DataResult> CreateTaskAsync(TaskCreationRequest request)
{
return await taskService.CreateTaskAsync(request);
}
/// <summary>
/// 设置任务状态
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[HttpPost, Route("SetTaskStatus")]
public async Task<DataResult> SetTaskStatusAsync(TaskUpdateRequest request)
{
return await taskService.SetTaskStatusAsync(request);
}
/// <summary>
/// 审批完成回调更新(无需客户端手动调用)
/// </summary>
/// <param name="callback">回调信息</param>
/// <returns></returns>
[HttpPost, Route("UpdateBusiness")]
public async Task<IActionResult> UpdateBusinessAsync(FlowCallback callback)
{
await taskService.UpdateBusinessAsync(callback);
return StatusCode((int)HttpStatusCode.NoContent);
}
}
}

@ -782,52 +782,24 @@
2024-07-24 14:14:41.8726 Info Validating config: TargetNames=console, ownFile-web, ConfigItems=54, FilePath=E:\MyCode\Dongsheng8\ds-wms-service\DS.WMS.OpApi\bin\Debug\net8.0\nlog.config 2024-07-24 14:14:41.8726 Info Validating config: TargetNames=console, ownFile-web, ConfigItems=54, FilePath=E:\MyCode\Dongsheng8\ds-wms-service\DS.WMS.OpApi\bin\Debug\net8.0\nlog.config
2024-07-24 14:14:41.8726 Warn Unused target detected. Add a rule for this target to the configuration. TargetName: allfile 2024-07-24 14:14:41.8726 Warn Unused target detected. Add a rule for this target to the configuration. TargetName: allfile
2024-07-24 14:14:41.8863 Info Configuration initialized. 2024-07-24 14:14:41.8863 Info Configuration initialized.
2024-07-24 17:43:01.5160 Info Registered target NLog.Targets.FileTarget(Name=allfile) 2024-07-25 09:55:08.3354 Info Registered target NLog.Targets.FileTarget(Name=allfile)
2024-07-24 17:43:01.5361 Info Registered target NLog.Targets.FileTarget(Name=ownFile-web) 2024-07-25 09:55:08.3354 Info Registered target NLog.Targets.FileTarget(Name=ownFile-web)
2024-07-24 17:43:01.5361 Info Registered target NLog.Targets.ColoredConsoleTarget(Name=console) 2024-07-25 09:55:08.3515 Info Registered target NLog.Targets.ColoredConsoleTarget(Name=console)
2024-07-24 17:43:01.5528 Info NLog, Version=5.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c. File version: 5.2.8.2366. Product version: 5.2.8+f586f1341c46fa38aaaff4c641e7f0fa7e813943. GlobalAssemblyCache: False 2024-07-25 09:55:08.3515 Info NLog, Version=5.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c. File version: 5.2.8.2366. Product version: 5.2.8+f586f1341c46fa38aaaff4c641e7f0fa7e813943. GlobalAssemblyCache: False
2024-07-24 17:43:01.5595 Info Validating config: TargetNames=console, ownFile-web, ConfigItems=54, FilePath=E:\MyCode\Dongsheng8\ds-wms-service\DS.WMS.OpApi\bin\Debug\net8.0\nlog.config 2024-07-25 09:55:08.3711 Info Validating config: TargetNames=console, ownFile-web, ConfigItems=54, FilePath=D:\Source\Repos\DS8\ds-wms-service\DS.WMS.OpApi\bin\Debug\net8.0\nlog.config
2024-07-24 17:43:01.5595 Warn Unused target detected. Add a rule for this target to the configuration. TargetName: allfile 2024-07-25 09:55:08.3711 Warn Unused target detected. Add a rule for this target to the configuration. TargetName: allfile
2024-07-24 17:43:01.5595 Info Configuration initialized. 2024-07-25 09:55:08.3711 Info Configuration initialized.
2024-07-24 17:52:22.4155 Info Registered target NLog.Targets.FileTarget(Name=allfile) 2024-07-25 09:56:52.6865 Info Registered target NLog.Targets.FileTarget(Name=allfile)
2024-07-24 17:52:22.4304 Info Registered target NLog.Targets.FileTarget(Name=ownFile-web) 2024-07-25 09:56:52.7029 Info Registered target NLog.Targets.FileTarget(Name=ownFile-web)
2024-07-24 17:52:22.4304 Info Registered target NLog.Targets.ColoredConsoleTarget(Name=console) 2024-07-25 09:56:52.7029 Info Registered target NLog.Targets.ColoredConsoleTarget(Name=console)
2024-07-24 17:52:22.4474 Info NLog, Version=5.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c. File version: 5.2.8.2366. Product version: 5.2.8+f586f1341c46fa38aaaff4c641e7f0fa7e813943. GlobalAssemblyCache: False 2024-07-25 09:56:52.7214 Info NLog, Version=5.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c. File version: 5.2.8.2366. Product version: 5.2.8+f586f1341c46fa38aaaff4c641e7f0fa7e813943. GlobalAssemblyCache: False
2024-07-24 17:52:22.4474 Info Validating config: TargetNames=console, ownFile-web, ConfigItems=54, FilePath=E:\MyCode\Dongsheng8\ds-wms-service\DS.WMS.OpApi\bin\Debug\net8.0\nlog.config 2024-07-25 09:56:52.7280 Info Validating config: TargetNames=console, ownFile-web, ConfigItems=54, FilePath=D:\Source\Repos\DS8\ds-wms-service\DS.WMS.OpApi\bin\Debug\net8.0\nlog.config
2024-07-24 17:52:22.4592 Warn Unused target detected. Add a rule for this target to the configuration. TargetName: allfile 2024-07-25 09:56:52.7280 Warn Unused target detected. Add a rule for this target to the configuration. TargetName: allfile
2024-07-24 17:52:22.4592 Info Configuration initialized. 2024-07-25 09:56:52.7280 Info Configuration initialized.
2024-07-24 18:18:28.4775 Info Registered target NLog.Targets.FileTarget(Name=allfile) 2024-07-25 10:04:30.5148 Info Registered target NLog.Targets.FileTarget(Name=allfile)
2024-07-24 18:18:28.4775 Info Registered target NLog.Targets.FileTarget(Name=ownFile-web) 2024-07-25 10:04:30.5293 Info Registered target NLog.Targets.FileTarget(Name=ownFile-web)
2024-07-24 18:18:28.4932 Info Registered target NLog.Targets.ColoredConsoleTarget(Name=console) 2024-07-25 10:04:30.5293 Info Registered target NLog.Targets.ColoredConsoleTarget(Name=console)
2024-07-24 18:18:28.4932 Info NLog, Version=5.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c. File version: 5.2.8.2366. Product version: 5.2.8+f586f1341c46fa38aaaff4c641e7f0fa7e813943. GlobalAssemblyCache: False 2024-07-25 10:04:30.5484 Info NLog, Version=5.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c. File version: 5.2.8.2366. Product version: 5.2.8+f586f1341c46fa38aaaff4c641e7f0fa7e813943. GlobalAssemblyCache: False
2024-07-24 18:18:28.5125 Info Validating config: TargetNames=console, ownFile-web, ConfigItems=54, FilePath=E:\MyCode\Dongsheng8\ds-wms-service\DS.WMS.OpApi\bin\Debug\net8.0\nlog.config 2024-07-25 10:04:30.5557 Info Validating config: TargetNames=console, ownFile-web, ConfigItems=54, FilePath=D:\Source\Repos\DS8\ds-wms-service\DS.WMS.OpApi\bin\Debug\net8.0\nlog.config
2024-07-24 18:18:28.5125 Warn Unused target detected. Add a rule for this target to the configuration. TargetName: allfile 2024-07-25 10:04:30.5557 Warn Unused target detected. Add a rule for this target to the configuration. TargetName: allfile
2024-07-24 18:18:28.5262 Info Configuration initialized. 2024-07-25 10:04:30.5557 Info Configuration initialized.
2024-07-24 18:26:06.2961 Info Registered target NLog.Targets.FileTarget(Name=allfile)
2024-07-24 18:26:06.2961 Info Registered target NLog.Targets.FileTarget(Name=ownFile-web)
2024-07-24 18:26:06.3125 Info Registered target NLog.Targets.ColoredConsoleTarget(Name=console)
2024-07-24 18:26:06.3125 Info NLog, Version=5.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c. File version: 5.2.8.2366. Product version: 5.2.8+f586f1341c46fa38aaaff4c641e7f0fa7e813943. GlobalAssemblyCache: False
2024-07-24 18:26:06.3294 Info Validating config: TargetNames=console, ownFile-web, ConfigItems=54, FilePath=E:\MyCode\Dongsheng8\ds-wms-service\DS.WMS.OpApi\bin\Debug\net8.0\nlog.config
2024-07-24 18:26:06.3294 Warn Unused target detected. Add a rule for this target to the configuration. TargetName: allfile
2024-07-24 18:26:06.3294 Info Configuration initialized.
2024-07-24 19:21:42.6540 Info Registered target NLog.Targets.FileTarget(Name=allfile)
2024-07-24 19:21:42.6670 Info Registered target NLog.Targets.FileTarget(Name=ownFile-web)
2024-07-24 19:21:42.6670 Info Registered target NLog.Targets.ColoredConsoleTarget(Name=console)
2024-07-24 19:21:42.6832 Info NLog, Version=5.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c. File version: 5.2.8.2366. Product version: 5.2.8+f586f1341c46fa38aaaff4c641e7f0fa7e813943. GlobalAssemblyCache: False
2024-07-24 19:21:42.6832 Info Validating config: TargetNames=console, ownFile-web, ConfigItems=54, FilePath=E:\MyCode\Dongsheng8\ds-wms-service\DS.WMS.OpApi\bin\Debug\net8.0\nlog.config
2024-07-24 19:21:42.6949 Warn Unused target detected. Add a rule for this target to the configuration. TargetName: allfile
2024-07-24 19:21:42.6949 Info Configuration initialized.
2024-07-24 19:22:50.9145 Info Registered target NLog.Targets.FileTarget(Name=allfile)
2024-07-24 19:22:50.9296 Info Registered target NLog.Targets.FileTarget(Name=ownFile-web)
2024-07-24 19:22:50.9296 Info Registered target NLog.Targets.ColoredConsoleTarget(Name=console)
2024-07-24 19:22:50.9498 Info NLog, Version=5.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c. File version: 5.2.8.2366. Product version: 5.2.8+f586f1341c46fa38aaaff4c641e7f0fa7e813943. GlobalAssemblyCache: False
2024-07-24 19:22:50.9610 Info Validating config: TargetNames=console, ownFile-web, ConfigItems=54, FilePath=E:\MyCode\Dongsheng8\ds-wms-service\DS.WMS.OpApi\bin\Debug\net8.0\nlog.config
2024-07-24 19:22:50.9610 Warn Unused target detected. Add a rule for this target to the configuration. TargetName: allfile
2024-07-24 19:22:50.9610 Info Configuration initialized.
2024-07-24 19:24:05.3244 Info Registered target NLog.Targets.FileTarget(Name=allfile)
2024-07-24 19:24:05.3762 Info Registered target NLog.Targets.FileTarget(Name=ownFile-web)
2024-07-24 19:24:05.3816 Info Registered target NLog.Targets.ColoredConsoleTarget(Name=console)
2024-07-24 19:24:05.3816 Info NLog, Version=5.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c. File version: 5.2.8.2366. Product version: 5.2.8+f586f1341c46fa38aaaff4c641e7f0fa7e813943. GlobalAssemblyCache: False
2024-07-24 19:24:05.4053 Info Validating config: TargetNames=console, ownFile-web, ConfigItems=54, FilePath=E:\MyCode\Dongsheng8\ds-wms-service\DS.WMS.OpApi\bin\Debug\net8.0\nlog.config
2024-07-24 19:24:05.4053 Warn Unused target detected. Add a rule for this target to the configuration. TargetName: allfile
2024-07-24 19:24:05.4155 Info Configuration initialized.

Loading…
Cancel
Save