using DS.Module.Core; using DS.Module.SqlSugar; using DS.Module.UserModule; using DS.WMS.Core.TaskPlat.Dtos; using DS.WMS.Core.TaskPlat.Entity; using DS.WMS.Core.TaskPlat.Interface; using LanguageExt.Pipes; using Microsoft.Extensions.Logging; using SqlSugar; namespace DS.WMS.Core.TaskPlat.Method { /// /// 任务分配设置维护服务 /// public class TaskAllocationService : ITaskAllocationService { private readonly IUser user; private readonly ILogger logger; private readonly ISaasDbService saasDbService; public TaskAllocationService(IUser user, ILogger logger, ISaasDbService saasDbService) { this.user = user; this.logger = logger; this.saasDbService = saasDbService; } /// /// 获取任务分配列表 /// /// 船公司Id(可选) public async Task>> GetList(long? carrierId) { var tenantDb = saasDbService.GetBizDbScopeById(user.TenantId); var list = await tenantDb.Queryable() .Where(x => x.CarrierId == carrierId) .ToListAsync(); return DataResult>.Success(list); } /// /// 获取任务分配列表中已存在的船公司列表(用于查询) /// public async Task>> GetContainsCarrierList() { var tenantDb = saasDbService.GetBizDbScopeById(user.TenantId); var carrierList = await tenantDb.Queryable().Select(x => new CarrierInfoDto() { CarrierId = x.CarrierId, Carrier = x.Carrier, CarrierCode = x.CarrierCode }).Where(x => x.CarrierId != null).Distinct().ToListAsync(); return DataResult>.Success(carrierList); } /// /// 保存任务分配设置 /// public async Task Save(TaskAllocationtSetSaveDto saveDto) { var tenantDb = saasDbService.GetBizDbScopeById(user.TenantId); if (string.IsNullOrEmpty(saveDto.CarrierCode)) { saveDto.CarrierCode = null; } if (string.IsNullOrEmpty(saveDto.Carrier)) { saveDto.Carrier = null; } if (saveDto.CarrierId == 0) { saveDto.CarrierId = null; } var fieldName = saveDto.AllocationTargetCode switch { "Operator" => nameof(TaskAllocationtSet.IsAllotOperator), "VouchingClerk" => nameof(TaskAllocationtSet.IsAllotVouchingClerk), "Sale" => nameof(TaskAllocationtSet.IsAllotSale), "Custom" => nameof(TaskAllocationtSet.IsAllotCustom), "FinancialStaff" => nameof(TaskAllocationtSet.IsAllotFinancialStaff), "CustomerService" => nameof(TaskAllocationtSet.IsAllotCustomerService), "Driver" => nameof(TaskAllocationtSet.IsAllotDriver), "Dispatcher" => nameof(TaskAllocationtSet.IsAllotDispatcher), _ => throw new NotImplementedException(), }; try { // 先查出来已有的、指定船公司的配置 var oldSettingList = await tenantDb.Queryable().Where(x => x.CarrierId == saveDto.CarrierId).Select(x => new { x.Id, x.TaskTypeCode }).ToListAsync(); var oldSettingIdList = oldSettingList.Select(x => x.Id); var oldSettingTypeCodeList = oldSettingList.Select(x => x.TaskTypeCode); await tenantDb.Ado.BeginTranAsync(); // 将原有的状态设置为未分配 await tenantDb.Updateable() .SetColumns(fieldName, false) .Where(x => oldSettingIdList.Contains(x.Id)) .ExecuteCommandAsync(); // 补充缺少的任务类型 if (saveDto.TaskTypeList?.Any() == true) { var waitAddTypeCodeList = saveDto.TaskTypeList.Select(x => x.TaskTypeCode).Except(oldSettingTypeCodeList).ToList(); if (waitAddTypeCodeList.Count > 0) { var waitAddSetList = waitAddTypeCodeList.Select(x => new TaskAllocationtSet() { CarrierId = saveDto.CarrierId, Carrier = saveDto.Carrier, CarrierCode = saveDto.CarrierCode, TaskTypeCode = x, TaskTypeName = saveDto.TaskTypeList.First(t => t.TaskTypeCode == x).TaskTypeName, }).ToList(); await tenantDb.Insertable(waitAddSetList).ExecuteCommandAsync(); } var setTaskCodeList = saveDto.TaskTypeList.Select(x => x.TaskTypeCode); // 更新指定船公司的配置 await tenantDb.Updateable() .SetColumns(fieldName, true) .Where(x => x.CarrierId == saveDto.CarrierId && setTaskCodeList.Contains(x.TaskTypeCode)) .ExecuteCommandAsync(); } await tenantDb.Ado.CommitTranAsync(); } catch (Exception ex) { await tenantDb.Ado.RollbackTranAsync(); logger.LogError(ex, "保存任务分配设置异常"); throw; } return DataResult.Successed(MultiLanguageConst.GetDescription(nameof(MultiLanguageConst.DataUpdateSuccess))); } } }