diff --git a/ds-wms-service/DS.WMS.Core/Info/Interface/IClientStakeholderService.cs b/ds-wms-service/DS.WMS.Core/Info/Interface/IClientStakeholderService.cs
index f898787c..2f687e88 100644
--- a/ds-wms-service/DS.WMS.Core/Info/Interface/IClientStakeholderService.cs
+++ b/ds-wms-service/DS.WMS.Core/Info/Interface/IClientStakeholderService.cs
@@ -59,5 +59,12 @@ namespace DS.WMS.Core.Info.Interface
/// 干系人
///
Task EditAsync(InfoClientStakeholder stakeholder);
+
+ ///
+ /// 创建客户干系人并提交审核
+ ///
+ /// 干系人
+ ///
+ Task AddSubmitAsync(InfoClientStakeholder stakeholder);
}
}
diff --git a/ds-wms-service/DS.WMS.Core/Info/Method/ClientInfoService.cs b/ds-wms-service/DS.WMS.Core/Info/Method/ClientInfoService.cs
index 4412cecd..249ba1eb 100644
--- a/ds-wms-service/DS.WMS.Core/Info/Method/ClientInfoService.cs
+++ b/ds-wms-service/DS.WMS.Core/Info/Method/ClientInfoService.cs
@@ -574,6 +574,7 @@ public class ClientInfoService : ServiceBase, IClientInfoService
var result = DataResult.Failed("客户信息已存在,请检查客户全称/简称是否重复!", MultiLanguageConst.ClientInfoExist);
result.Code = ResultCode.Fail;
result.Data = client;
+ return result;
}
TenantDb.QueryFilter.Restore();
diff --git a/ds-wms-service/DS.WMS.Core/Info/Method/ClientStakeholderService.cs b/ds-wms-service/DS.WMS.Core/Info/Method/ClientStakeholderService.cs
index 78b6110e..ffafae2b 100644
--- a/ds-wms-service/DS.WMS.Core/Info/Method/ClientStakeholderService.cs
+++ b/ds-wms-service/DS.WMS.Core/Info/Method/ClientStakeholderService.cs
@@ -271,5 +271,15 @@ namespace DS.WMS.Core.Info.Method
return result;
}
+ ///
+ /// 创建客户干系人并提交审核
+ ///
+ /// 干系人
+ ///
+ public async Task AddSubmitAsync(InfoClientStakeholder stakeholder)
+ {
+ await TenantDb.Insertable(stakeholder).ExecuteCommandAsync();
+ return await SubmitAuditAsync(new IdModel { Id = stakeholder.Id.ToString(), Ids = [stakeholder.Id] });
+ }
}
}
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 092e7fa5..310c8df9 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
@@ -3,7 +3,7 @@ using DS.Module.Core;
using DS.Module.Core.Data;
using DS.Module.Core.Helpers;
using DS.Module.DjyRulesEngine;
-using DS.WMS.Core.Application.Dtos;
+using DS.WMS.Core.Fee.Entity;
using DS.WMS.Core.Flow.Dtos;
using DS.WMS.Core.Flow.Entity;
using DS.WMS.Core.Flow.Interface;
@@ -24,7 +24,6 @@ using Masuit.Tools;
using Masuit.Tools.Systems;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
-using Newtonsoft.Json;
using SqlSugar;
namespace DS.WMS.Core.Op.Method.TaskInteraction
@@ -46,6 +45,8 @@ namespace DS.WMS.Core.Op.Method.TaskInteraction
///
static readonly TaskBaseTypeEnum[] AuditTaskTypesManualReject;
+ internal static readonly TaskBaseTypeEnum[] FeeTypes = [TaskBaseTypeEnum.FEE_AUDIT, TaskBaseTypeEnum.FEE_MODIFY_AUDIT, TaskBaseTypeEnum.FEE_DELETE_AUDIT];
+
static readonly ApiFox Api;
static TaskService()
@@ -331,9 +332,35 @@ namespace DS.WMS.Core.Op.Method.TaskInteraction
}
info.Main.TaskDesp = info.Main.TaskDesp ?? info.Main.TaskTitle;
- result = await ManagerService.InitTaskJob(info);
- if (!result.Succeeded)
- return result;
+ //费用审核且多个接收人需拆分任务
+ if (FeeTypes.Contains(request.TaskType) && info.Main.RecvUserInfoList.Count > 1)
+ {
+ var fee = await TenantDb.Queryable().Where(x => x.Id == request.BusinessId)
+ .Select(x => new
+ {
+ x.BusinessId,
+ x.BusinessType
+ }).FirstAsync();
+ var recvUserList = new List(info.Main.RecvUserInfoList); //复制接收人列表
+ foreach (var item in recvUserList)
+ {
+ var copiedInfo = info.DeepClone();
+ copiedInfo.Head.BSNO = fee.BusinessId; //替换为费用关联的订单ID
+
+ copiedInfo.Main.RecvUserInfoList.Clear();
+ copiedInfo.Main.RecvUserInfoList.Add(item);
+
+ result = await ManagerService.InitTaskJob(info);
+ if (!result.Succeeded)
+ return result;
+ }
+ }
+ else
+ {
+ result = await ManagerService.InitTaskJob(info);
+ if (!result.Succeeded)
+ return result;
+ }
task = new BusinessTask
{
@@ -492,10 +519,6 @@ namespace DS.WMS.Core.Op.Method.TaskInteraction
//if (task.TaskStatus == TaskStatusEnum.Cancel)
// return DataResult.FailedWithDesc(nameof(MultiLanguageConst.TaskCancelled));
- var result = await ManagerService.SetTaskStatusWithBsno(request.BusinessId, request.TaskType, request.TaskStatus, DateTime.Now, request.TaskDesc);
- if (!result.Succeeded)
- return DataResult.Failed(result.Message, result.MultiCode);
-
//触发任务状态变更通知
if (task.TaskStatus != request.TaskStatus)
await OnTaskStatusChanged(request);
@@ -505,6 +528,43 @@ namespace DS.WMS.Core.Op.Method.TaskInteraction
task.TaskStatus = request.TaskStatus;
await TenantDb.Updateable(task).UpdateColumns(x => new { x.TaskStatus, x.RejectReason }).ExecuteCommandAsync();
+ DataResult result;
+ if (FeeTypes.Contains(request.TaskType))
+ {
+ var fee = await TenantDb.Queryable().Where(x => x.Id == request.BusinessId)
+ .Select(x => new
+ {
+ x.BusinessId,
+ x.BusinessType
+ }).FirstAsync();
+
+ var relativeTasks = await TenantDb.Queryable()
+ .InnerJoin((t, f) => t.BusinessId == f.Id)
+ .Where((t, f) => f.BusinessId == fee.BusinessId && f.BusinessType == fee.BusinessType && FeeTypes.Contains(t.TaskType) && t.RecvUsers.Contains(User.UserId))
+ .Select((t, f) => new
+ {
+ t.Id,
+ t.BusinessId,
+ t.TaskType,
+ t.TaskStatus,
+ t.RecvUsers
+ }).ToListAsync();
+
+ var groups = relativeTasks.GroupBy(x => x.TaskStatus).Select(x => x.Key).ToList();
+ if (groups.Count == 1 && groups.All(x => x == request.TaskStatus))
+ {
+ result = await ManagerService.SetTaskStatusWithBsno(request.BusinessId, request.TaskType, request.TaskStatus, DateTime.Now, request.TaskDesc);
+ if (!result.Succeeded)
+ return DataResult.Failed(result.Message, result.MultiCode);
+ }
+ }
+ else
+ {
+ result = await ManagerService.SetTaskStatusWithBsno(request.BusinessId, request.TaskType, request.TaskStatus, DateTime.Now, request.TaskDesc);
+ if (!result.Succeeded)
+ return DataResult.Failed(result.Message, result.MultiCode);
+ }
+
if (task.TaskStatus == TaskStatusEnum.Complete && task.NextType.HasValue && request.AutoCreateNext)
{
//存在下一任务,则继续创建
@@ -612,7 +672,7 @@ namespace DS.WMS.Core.Op.Method.TaskInteraction
}
///
- /// 发起任务审核
+ /// 重新发起任务审核
///
///
/// 是否使用事务
@@ -845,28 +905,6 @@ namespace DS.WMS.Core.Op.Method.TaskInteraction
//根据审批结果更新任务状态
await SetTaskStatusAsync(req);
- ////终审通过且任务类型为审单,则生成费用
- //if (request.TaskType == TaskBaseTypeEnum.WAIT_ORDER_AUDIT && instance.IsCompleted)
- //{
- // UriBuilder builder = new(configuration["FeeService:BaseUrl"])
- // {
- // Path = configuration["FeeService:GenerateFees"]
- // };
- // string url = builder.ToString();
- // if (string.IsNullOrEmpty(url))
- // {
- // await LogService.WriteLogAsync(req, "未在配置文件中配置费用服务URL,无法根据费用模板生成费用");
- // continue;
- // }
-
- // string json = JsonConvert.SerializeObject(new BizItem
- // {
- // Id = req.BusinessId,
- // BusinessType = req.BusinessType.GetValueOrDefault()
- // });
- // Api.SendRequestAsync(HttpMethod.Post, url, json);
- //}
-
if (instance.FlowStatus == FlowStatusEnum.Reject)
result.Message = MultiLanguageConst.GetDescription(nameof(MultiLanguageConst.TaskRejected));
@@ -1064,19 +1102,6 @@ namespace DS.WMS.Core.Op.Method.TaskInteraction
.WhereIF(taskTypes != null && taskTypes.Length > 0, x => taskTypes.Contains(x.TaskType));
}
- ///
- /// 获取指定业务ID的任务
- ///
- /// 任务类型
- /// 业务类型
- /// 业务ID
- ///
- protected internal ISugarQueryable GetQuery(TaskBaseTypeEnum taskType, BusinessType? businessType, params long[] ids)
- {
- return TenantDb.Queryable().Where(x => x.TaskType == taskType && ids.Contains(x.BusinessId))
- .WhereIF(businessType.HasValue, x => x.BusinessType == businessType);
- }
-
///
/// 从任务配置中获取接收用户列表
///
diff --git a/ds-wms-service/DS.WMS.MainApi/Controllers/ClientStakeholderController.cs b/ds-wms-service/DS.WMS.MainApi/Controllers/ClientStakeholderController.cs
index 3581d1e3..60b87482 100644
--- a/ds-wms-service/DS.WMS.MainApi/Controllers/ClientStakeholderController.cs
+++ b/ds-wms-service/DS.WMS.MainApi/Controllers/ClientStakeholderController.cs
@@ -103,6 +103,26 @@ namespace DS.WMS.MainApi.Controllers
return await _invokeService.GetAsync(id);
}
+ ///
+ /// 创建客户干系人并提交审核
+ ///
+ /// 客户ID
+ ///
+ [HttpPost, Route("CreateSubmit")]
+ public async Task AddSubmitAsync(long clientId)
+ {
+ var date = DateTime.Now.Date;
+ return await _invokeService.AddSubmitAsync(new InfoClientStakeholder
+ {
+ ClientId = clientId,
+ CreateBy = long.Parse(_user.UserId),
+ CreateByName = _user.UserName,
+ StartDate = date,
+ EndDate = date.AddMonths(4),
+ Status = StakeholderStatus.Uncommitted
+ });
+ }
+
///
/// 新增客户干系人
///