diff --git a/ds-wms-service/DS.WMS.Core/Fee/Method/FeeRecordService.cs b/ds-wms-service/DS.WMS.Core/Fee/Method/FeeRecordService.cs index ac4f0f2c..2a6c190b 100644 --- a/ds-wms-service/DS.WMS.Core/Fee/Method/FeeRecordService.cs +++ b/ds-wms-service/DS.WMS.Core/Fee/Method/FeeRecordService.cs @@ -453,18 +453,28 @@ namespace DS.WMS.Core.Fee.Method /// public async Task DeleteAsync(params long[] ids) { - var model = await TenantDb.Queryable().Where(x => ids.Contains(x.Id)).Select(x => new { x.BusinessId, x.BusinessType }).FirstAsync(); - if (await IsFeeLockedAsync(model.BusinessId, model.BusinessType)) - return DataResult.FailedWithDesc(nameof(MultiLanguageConst.FeeLocked)); - - if (await TenantDb.Queryable().AnyAsync(x => ids.Contains(x.Id) && (x.FeeStatus != FeeStatus.Entering && x.FeeStatus != FeeStatus.RejectSubmission))) - return DataResult.FailedWithDesc(nameof(MultiLanguageConst.FeeRecordDelete)); + await TenantDb.Ado.BeginTranAsync(); + try + { + var model = await TenantDb.Queryable().Where(x => ids.Contains(x.Id)).Select(x => new { x.BusinessId, x.BusinessType }).FirstAsync(); + if (await IsFeeLockedAsync(model.BusinessId, model.BusinessType)) + return DataResult.FailedWithDesc(nameof(MultiLanguageConst.FeeLocked)); - int result = await TenantDb.Deleteable(x => ids.Contains(x.Id)).ExecuteCommandAsync(); + if (await TenantDb.Queryable().AnyAsync(x => ids.Contains(x.Id) && x.FeeStatus != FeeStatus.Entering && x.FeeStatus != FeeStatus.RejectSubmission)) + return DataResult.FailedWithDesc(nameof(MultiLanguageConst.FeeRecordDelete)); - await WriteBackStatusAsync(model.BusinessId, model.BusinessType); + await TenantDb.Deleteable(x => ids.Contains(x.Id)).ExecuteCommandAsync(); + await WriteBackStatusAsync(model.BusinessId, model.BusinessType); - return result > 0 ? DataResult.Success : DataResult.FailedWithDesc(nameof(MultiLanguageConst.Operation_Failed)); + 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)); + } } #region 审核相关 @@ -534,6 +544,8 @@ namespace DS.WMS.Core.Fee.Method x.SubmitBy, x.SubmitDate }).ExecuteCommandAsync(); + await WriteBackStatusAsync(bid, bType); + await TenantDb.Ado.CommitTranAsync(); return DataResult.Success; } @@ -869,6 +881,7 @@ namespace DS.WMS.Core.Fee.Method } await TenantDb.Updateable(fees).UpdateColumns(x => new { x.FeeStatus, x.SubmitBy, x.SubmitDate }).ExecuteCommandAsync(); + await WriteBackStatusAsync(fees[0].BusinessId, fees[0].BusinessType); await TenantDb.Ado.CommitTranAsync(); return DataResult.Success; } @@ -1002,6 +1015,8 @@ namespace DS.WMS.Core.Fee.Method (x.FeeStatus == FeeStatus.Entering || x.FeeStatus == FeeStatus.Withdraw || x.FeeStatus == FeeStatus.RejectSubmission)) .SetColumns(x => x.FeeStatus == FeeStatus.AuditSubmitted).ExecuteCommandAsync(); + await WriteBackStatusAsync(bid, type); + if (useTransaction) await TenantDb.Ado.CommitTranAsync(); return DataResult.Success; @@ -1092,6 +1107,8 @@ namespace DS.WMS.Core.Fee.Method await TenantDb.Updateable().Where(x => x.BusinessId == bid && x.BusinessType == type && x.FeeStatus == FeeStatus.AuditSubmitted) .SetColumns(x => x.FeeStatus == FeeStatus.Entering).ExecuteCommandAsync(); + await WriteBackStatusAsync(bid, type); + await TenantDb.Ado.CommitTranAsync(); return result; } diff --git a/ds-wms-service/DS.WMS.Core/TaskInteraction/Entity/BusinessTaskLog.cs b/ds-wms-service/DS.WMS.Core/TaskInteraction/Entity/BusinessTaskLog.cs index a757420e..e0d82630 100644 --- a/ds-wms-service/DS.WMS.Core/TaskInteraction/Entity/BusinessTaskLog.cs +++ b/ds-wms-service/DS.WMS.Core/TaskInteraction/Entity/BusinessTaskLog.cs @@ -114,6 +114,12 @@ namespace DS.WMS.Core.TaskInteraction.Entity [Description("删除")] Delete = 10, + /// + /// 规则验证 + /// + [Description("规则验证")] + Validation = 11, + /// /// 审核 /// diff --git a/ds-wms-service/DS.WMS.Core/TaskInteraction/Method/FeeBillTaskService.cs b/ds-wms-service/DS.WMS.Core/TaskInteraction/Method/FeeBillTaskService.cs index 99604de3..d61a8954 100644 --- a/ds-wms-service/DS.WMS.Core/TaskInteraction/Method/FeeBillTaskService.cs +++ b/ds-wms-service/DS.WMS.Core/TaskInteraction/Method/FeeBillTaskService.cs @@ -159,6 +159,8 @@ namespace DS.WMS.Core.TaskInteraction.Method await SetLockAsync(biz); } + + await TenantDb.Ado.CommitTranAsync(); } catch (Exception ex) diff --git a/ds-wms-service/DS.WMS.Core/TaskInteraction/Method/TaskService.cs b/ds-wms-service/DS.WMS.Core/TaskInteraction/Method/TaskService.cs index 9a418b79..4584104e 100644 --- a/ds-wms-service/DS.WMS.Core/TaskInteraction/Method/TaskService.cs +++ b/ds-wms-service/DS.WMS.Core/TaskInteraction/Method/TaskService.cs @@ -25,6 +25,7 @@ using Mapster; using Masuit.Tools; using Masuit.Tools.Systems; using Microsoft.Extensions.DependencyInjection; +using Newtonsoft.Json; using SqlSugar; namespace DS.WMS.Core.TaskInteraction.Method @@ -235,7 +236,7 @@ namespace DS.WMS.Core.TaskInteraction.Method if (request.TaskType == TaskBaseTypeEnum.WAIT_ORDER_AUDIT) { - result = await CheckRulesAsync(request.BusinessId, request.BusinessType.Value, RuleEngineType.COMMON_ORDER_AUDIT); + result = await CheckRulesAsync(request.TaskType, request.BusinessId, request.BusinessType.Value, RuleEngineType.COMMON_ORDER_AUDIT); if (!result.Succeeded) return result; } @@ -754,7 +755,7 @@ namespace DS.WMS.Core.TaskInteraction.Method if (task.TaskType == TaskBaseTypeEnum.WAIT_ORDER_AUDIT) { - result = await CheckRulesAsync(request.BusinessId, request.BusinessType.Value, RuleEngineType.COMMON_ORDER_AUDIT); + result = await CheckRulesAsync(request.TaskType, request.BusinessId, request.BusinessType.Value, RuleEngineType.COMMON_ORDER_AUDIT); if (!result.Succeeded) return result; } @@ -970,7 +971,7 @@ namespace DS.WMS.Core.TaskInteraction.Method //如果当前审批为终审,则调用规则库进行校验 if (request.Result == 1 && request.TaskType == TaskBaseTypeEnum.WAIT_ORDER_AUDIT && instance.GetMarkerList().Length == 1) { - result = await CheckRulesAsync(instance.BusinessId, request.BusinessType.GetValueOrDefault(), RuleEngineType.COMMON_OCEAN_BOOKING); + result = await CheckRulesAsync(request.TaskType, instance.BusinessId, request.BusinessType.GetValueOrDefault(), RuleEngineType.COMMON_OCEAN_BOOKING); if (!result.Succeeded) return result; } @@ -1229,7 +1230,8 @@ namespace DS.WMS.Core.TaskInteraction.Method return info; } - async Task CheckRulesAsync(long bsId, BusinessType businessType, RuleEngineType ruleType) + //调用规则库 + async Task CheckRulesAsync(TaskBaseTypeEnum taskType, long bsId, BusinessType businessType, RuleEngineType ruleType) { var rulesReq = new RuleEngineReq(); var order = await TenantDb.Queryable().Where(x => x.Id == bsId).FirstAsync(); @@ -1239,7 +1241,17 @@ namespace DS.WMS.Core.TaskInteraction.Method var ruleResult = await RuleEngineService.Value.ExecuteSeaExportAuditRulesAsync(rulesReq); if (string.Equals(ruleResult.Succ, bool.FalseString, StringComparison.OrdinalIgnoreCase)) { - return DataResult.Failed(ruleResult.Msg); + string msg = "校验规则API返回了错误:" + ruleResult.Msg; + var taskLog = new BusinessTaskLog + { + BusinessId = bsId, + BusinessType = businessType, + ActionType = ActionType.Validation, + TaskType = taskType, + Remark = msg + ";请求参数:" + JsonConvert.SerializeObject(rulesReq) + }; + await LogService.WriteLogAsync(taskLog); + return DataResult.Failed(msg); } else if (ruleResult.Extra.DetailList?.Count > 0) {