From 510d3fc7d7896e49f6c66bd176dccf0de88d5488 Mon Sep 17 00:00:00 2001 From: jianghaiqing Date: Wed, 5 Jul 2023 15:47:11 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=9C=8D=E5=8A=A1=E7=8A=B6?= =?UTF-8?q?=E6=80=81=E7=BC=96=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../TrackingSystem/Dtos/StatusSkuBaseDto.cs | 5 - .../Dtos/StatusSkuBaseShowDto.cs | 5 + .../Dtos/TrackingSystemMapper.cs | 1 + .../Interface/IStatusSkuBaseService.cs | 12 +- .../ServiceWorkFlowManageService.cs | 57 ++++ .../TrackingSystem/StatusSkuBaseService.cs | 301 ++++++++++++++---- 6 files changed, 302 insertions(+), 79 deletions(-) create mode 100644 Myshipping.Application/Service/TrackingSystem/ServiceWorkFlowManageService.cs diff --git a/Myshipping.Application/Service/TrackingSystem/Dtos/StatusSkuBaseDto.cs b/Myshipping.Application/Service/TrackingSystem/Dtos/StatusSkuBaseDto.cs index aa15d1f9..f11c23f7 100644 --- a/Myshipping.Application/Service/TrackingSystem/Dtos/StatusSkuBaseDto.cs +++ b/Myshipping.Application/Service/TrackingSystem/Dtos/StatusSkuBaseDto.cs @@ -36,11 +36,6 @@ namespace Myshipping.Application /// public int SortNo { get; set; } - /// - /// 是否启用 - /// - public int IsEnable { get; set; } - /// /// 状态说明 /// diff --git a/Myshipping.Application/Service/TrackingSystem/Dtos/StatusSkuBaseShowDto.cs b/Myshipping.Application/Service/TrackingSystem/Dtos/StatusSkuBaseShowDto.cs index 7aaabf9b..13729077 100644 --- a/Myshipping.Application/Service/TrackingSystem/Dtos/StatusSkuBaseShowDto.cs +++ b/Myshipping.Application/Service/TrackingSystem/Dtos/StatusSkuBaseShowDto.cs @@ -40,5 +40,10 @@ namespace Myshipping.Application /// 修改人名称 /// public string UpdatedUserName { get; set; } + + /// + /// 是否启用 + /// + public int IsEnable { get; set; } } } diff --git a/Myshipping.Application/Service/TrackingSystem/Dtos/TrackingSystemMapper.cs b/Myshipping.Application/Service/TrackingSystem/Dtos/TrackingSystemMapper.cs index 559ac9d1..db962100 100644 --- a/Myshipping.Application/Service/TrackingSystem/Dtos/TrackingSystemMapper.cs +++ b/Myshipping.Application/Service/TrackingSystem/Dtos/TrackingSystemMapper.cs @@ -61,6 +61,7 @@ namespace Myshipping.Application .Map(dest => dest.StatusSKUCode, src => src.STATUS_SKU_CODE) .Map(dest => dest.StatusSKUName, src => src.STATUS_SKU_NAME) .Map(dest => dest.SortNo, src => src.SORT_NO) + .Map(dest => dest.IsEnable, src => src.IS_ENABLE) .Map(dest => dest.CreatedTime, src => src.CreatedTime) .Map(dest => dest.UpdatedTime, src => src.UpdatedTime) .Map(dest => dest.CreatedUserId, src => src.CreatedUserId) diff --git a/Myshipping.Application/Service/TrackingSystem/Interface/IStatusSkuBaseService.cs b/Myshipping.Application/Service/TrackingSystem/Interface/IStatusSkuBaseService.cs index f2066dea..5e831262 100644 --- a/Myshipping.Application/Service/TrackingSystem/Interface/IStatusSkuBaseService.cs +++ b/Myshipping.Application/Service/TrackingSystem/Interface/IStatusSkuBaseService.cs @@ -29,23 +29,23 @@ namespace Myshipping.Application /// /// 启用 /// - /// 状态主键 + /// 状态主键数组 /// 返回回执 - Task SetEnable(string pkId); + Task SetEnable(string[] pkIds); /// /// 取消启用 /// - /// 状态主键 + /// 状态主键数组 /// 返回回执 - Task SetUnEnable(string pkId); + Task SetUnEnable(string[] pkIds); /// /// 删除 /// - /// 状态主键 + /// 状态主键数组 /// 返回回执 - Task Delete(string pkId); + Task Delete(string[] pkIds); /// /// 获取状态详情 diff --git a/Myshipping.Application/Service/TrackingSystem/ServiceWorkFlowManageService.cs b/Myshipping.Application/Service/TrackingSystem/ServiceWorkFlowManageService.cs new file mode 100644 index 00000000..d98eaac9 --- /dev/null +++ b/Myshipping.Application/Service/TrackingSystem/ServiceWorkFlowManageService.cs @@ -0,0 +1,57 @@ +using Furion.DependencyInjection; +using Furion.DynamicApiController; +using Microsoft.AspNetCore.Mvc; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Myshipping.Application +{ + /// + /// 服务流程管理 + /// + [ApiDescriptionSettings("Application", Name = "ServiceWorkFlowManage", Order = 10)] + public class ServiceWorkFlowManageService : IServiceWorkFlowManageService, IDynamicApiController, ITransient + { + public ServiceWorkFlowManageService() + { + } + /// + /// 推送状态 + /// + /// 服务流程详情 + /// 返回回执 + [HttpPost("/ServiceWorkFlowManage/PushStatus")] + public async Task PushStatus([FromBody] ServiceWorkFlowBaseDto info) + { + return new TaskManageOrderResultDto(); + } + + + /// + /// 查询单票业务单服务项目查询 + /// + /// 服务流程详情 + /// 返回回执 + [HttpPost("/ServiceWorkFlowManage/QuerySingleBusinessPerServiceProject")] + public async Task QuerySingleBusinessPerServiceProject(ServiceWorkFlowBaseDto info) + { + return new TaskManageOrderResultDto(); + } + + + /// + /// 查询单票所有相关服务项目查询 + /// + /// 服务流程详情 + /// 返回回执 + [HttpPost("/ServiceWorkFlowManage/QuerySingleBusinessAll")] + public async Task QuerySingleBusinessAll(ServiceWorkFlowBaseDto info) + { + return new TaskManageOrderResultDto(); + } + } + +} diff --git a/Myshipping.Application/Service/TrackingSystem/StatusSkuBaseService.cs b/Myshipping.Application/Service/TrackingSystem/StatusSkuBaseService.cs index 3e4224ec..39ff09e6 100644 --- a/Myshipping.Application/Service/TrackingSystem/StatusSkuBaseService.cs +++ b/Myshipping.Application/Service/TrackingSystem/StatusSkuBaseService.cs @@ -99,13 +99,8 @@ namespace Myshipping.Application var model = InnerGetInfo(entity.PK_ID); _logger.LogInformation($"更新状态前,获取原始记录 JSON={JSON.Serialize(model)}"); - /* - 需要校验是否已有服务项目对应到服务流程,已对应的不能修改代码 - */ - if (!entity.STATUS_SKU_CODE.Equals(model.STATUS_SKU_CODE, StringComparison.OrdinalIgnoreCase)) - { - ValidateServiceProject(entity, true); - } + + ValidateServiceStatus(entity, OperateTypeEnum.Save); entity.UpdatedTime = DateTime.Now; entity.UpdatedUserId = UserManager.UserId; @@ -153,16 +148,35 @@ namespace Myshipping.Application /// 校验 /// /// 服务项目详情 - /// 是否校验关系 + /// 操作类型枚举 /// - private void ValidateServiceProject(StatusSkuBaseInfo entity, bool isCheckRelation = false) + private void ValidateServiceStatus(StatusSkuBaseInfo entity, OperateTypeEnum opTypeEnum) { - if (isCheckRelation && _serviceWorkFlowActivitiesInfoRepository.Any(a => a.STATUS_SKU_ID == entity.PK_ID)) + /* + 1、状态名称不能低于2个字符。 + 2、状态修改,需要判断当前状态是否关联服务的活动。已关联的不能修改状态代码。 + 3、取消启用时,需要判断当前状态是否关联服务的活动。已关联的不能取消启用。 + */ + + if (opTypeEnum == OperateTypeEnum.Save) { - _logger.LogInformation($"当前状态已关联服务流程不能修改"); + if(_serviceWorkFlowActivitiesInfoRepository.AsQueryable().Any(a=>a.STATUS_SKU_ID == entity.PK_ID)) + { + throw Oops.Oh($"当前状态已关联服务流程活动,不能修改", typeof(InvalidOperationException)); + } - throw Oops.Oh($"当前状态已关联服务流程不能修改", typeof(InvalidOperationException)); + if (entity.STATUS_SKU_CODE.Length < 2 || entity.STATUS_SKU_NAME.Length < 2) + throw Oops.Oh($"状态代码和状态名称不能小于2个字符,不能修改", typeof(InvalidOperationException)); } + + if (opTypeEnum == OperateTypeEnum.SetUnEnable) + { + if (_serviceWorkFlowActivitiesInfoRepository.AsQueryable().Any(a => a.STATUS_SKU_ID == entity.PK_ID)) + { + throw Oops.Oh($"当前状态已关联服务流程活动,不能取消启用", typeof(InvalidOperationException)); + } + } + } #endregion @@ -195,38 +209,73 @@ namespace Myshipping.Application } #endregion - #region 启用 + #region 处理状态内部方法 /// - /// 启用 + /// 处理状态内部方法 /// - /// 状态主键 + /// 状态详情 + /// 操作类型 /// 返回回执 - [HttpGet("/StatusSkuBase/SetEnable")] - public async Task SetEnable([FromQuery] string pkId) + private async Task InnerExcuteServiceStatus(StatusSkuBaseInfo model, OperateTypeEnum opTypeEnum) { TaskManageOrderResultDto result = new TaskManageOrderResultDto(); + result.bno = model?.STATUS_SKU_NAME; + try { - var model = InnerGetInfo(pkId); + if (model == null) + throw Oops.Oh($"状态获取失败,状态信息不存在或已作废", typeof(InvalidOperationException)); _logger.LogInformation($"更新状态前,获取原始记录 JSON={JSON.Serialize(model)}"); - ValidateServiceProject(model, true); - model.UpdatedTime = DateTime.Now; model.UpdatedUserId = UserManager.UserId; model.UpdatedUserName = UserManager.Name; - model.IS_ENABLE = 1; - await _statusSkuBaseInfoRepository.AsUpdateable(model).UpdateColumns(it => new + if (opTypeEnum == OperateTypeEnum.SetEnable) { - it.IS_ENABLE, - it.UpdatedTime, - it.UpdatedUserId, - it.UpdatedUserName + model.IS_ENABLE = 1; - }).ExecuteCommandAsync(); + await _statusSkuBaseInfoRepository.AsUpdateable(model).UpdateColumns(it => new + { + it.IS_ENABLE, + it.UpdatedTime, + it.UpdatedUserId, + it.UpdatedUserName + + }).ExecuteCommandAsync(); + } + else if (opTypeEnum == OperateTypeEnum.SetUnEnable) + { + ValidateServiceStatus(model, opTypeEnum); + + model.IS_ENABLE = 0; + + await _statusSkuBaseInfoRepository.AsUpdateable(model).UpdateColumns(it => new + { + it.IS_ENABLE, + it.UpdatedTime, + it.UpdatedUserId, + it.UpdatedUserName + + }).ExecuteCommandAsync(); + } + else if (opTypeEnum == OperateTypeEnum.Delete) + { + ValidateServiceStatus(model, opTypeEnum); + + model.IsDeleted = true; + + await _statusSkuBaseInfoRepository.AsUpdateable(model).UpdateColumns(it => new + { + it.IsDeleted, + it.UpdatedTime, + it.UpdatedUserId, + it.UpdatedUserName + + }).ExecuteCommandAsync(); + } result.succ = true; result.msg = "执行成功"; @@ -235,7 +284,77 @@ namespace Myshipping.Application catch (Exception ex) { result.succ = false; - result.msg = $"执行启用异常,原因:{ex.Message}"; + result.msg = $"执行状态异常,原因:{ex.Message}"; + } + + return result; + } + #endregion + + #region 启用 + /// + /// 启用 + /// + /// 状态主键数组 + /// 返回回执 + [HttpPost("/StatusSkuBase/SetEnable")] + public async Task SetEnable([FromBody] string[] pkIds) + { + TaskManageOrderResultDto result = new TaskManageOrderResultDto(); + + try + { + if (pkIds.Length == 0) + { + throw Oops.Oh($"状态主键数组不能为空", typeof(InvalidOperationException)); + } + + var list = _statusSkuBaseInfoRepository.AsQueryable() + .Where(a => pkIds.Contains(a.PK_ID)).ToList(); + + if (list.Count == 0) + throw Oops.Oh($"状态获取失败,请服务项目信息是否存在", typeof(InvalidOperationException)); + + if (list.Count != pkIds.Length) + throw Oops.Oh($"部分状态获取失败,请服务项目信息是否存在", typeof(InvalidOperationException)); + + List rltList = new List(); + + list.ForEach(pr => { + + rltList.Add(InnerExcuteServiceStatus(pr, OperateTypeEnum.SetEnable).GetAwaiter().GetResult()); + }); + + result.succ = true; + result.msg = rltList.FirstOrDefault().msg; + + result.ext = rltList; + + var succ = rltList.Count(x => x.succ); + var fail = rltList.Count(x => !x.succ); + + if (succ > 0) + { + result.batchTotal = succ.ToString(); + } + else + { + result.batchTotal = "- "; + } + + if (fail > 0) + { + result.batchTotal += "/" + fail.ToString(); + } + else + { + result.batchTotal += " -"; + } + } + catch (Exception ex) + { + result.succ = false; + result.msg = $"启用状态异常,原因:{ex.Message}"; } return result; @@ -246,43 +365,66 @@ namespace Myshipping.Application /// /// 取消启用 /// - /// 状态主键 + /// 状态主键数组 /// 返回回执 - [HttpGet("/StatusSkuBase/SetUnEnable")] - public async Task SetUnEnable([FromQuery] string pkId) + [HttpPost("/StatusSkuBase/SetUnEnable")] + public async Task SetUnEnable([FromBody] string[] pkIds) { TaskManageOrderResultDto result = new TaskManageOrderResultDto(); try { - var model = InnerGetInfo(pkId); + if (pkIds.Length == 0) + { + throw Oops.Oh($"状态主键数组不能为空", typeof(InvalidOperationException)); + } - _logger.LogInformation($"更新状态前,获取原始记录 JSON={JSON.Serialize(model)}"); + var list = _statusSkuBaseInfoRepository.AsQueryable() + .Where(a => pkIds.Contains(a.PK_ID)).ToList(); - ValidateServiceProject(model, true); + if (list.Count == 0) + throw Oops.Oh($"状态获取失败,请服务项目信息是否存在", typeof(InvalidOperationException)); - model.UpdatedTime = DateTime.Now; - model.UpdatedUserId = UserManager.UserId; - model.UpdatedUserName = UserManager.Name; - model.IS_ENABLE = 0; + if (list.Count != pkIds.Length) + throw Oops.Oh($"部分状态获取失败,请服务项目信息是否存在", typeof(InvalidOperationException)); - await _statusSkuBaseInfoRepository.AsUpdateable(model).UpdateColumns(it => new - { - it.IS_ENABLE, - it.UpdatedTime, - it.UpdatedUserId, - it.UpdatedUserName + List rltList = new List(); - }).ExecuteCommandAsync(); + list.ForEach(pr => { + + rltList.Add(InnerExcuteServiceStatus(pr, OperateTypeEnum.SetUnEnable).GetAwaiter().GetResult()); + }); result.succ = true; - result.msg = "执行成功"; + result.msg = rltList.FirstOrDefault().msg; + + result.ext = rltList; + + var succ = rltList.Count(x => x.succ); + var fail = rltList.Count(x => !x.succ); + + if (succ > 0) + { + result.batchTotal = succ.ToString(); + } + else + { + result.batchTotal = "- "; + } + if (fail > 0) + { + result.batchTotal += "/" + fail.ToString(); + } + else + { + result.batchTotal += " -"; + } } catch (Exception ex) { result.succ = false; - result.msg = $"执行启用异常,原因:{ex.Message}"; + result.msg = $"启用服务项目异常,原因:{ex.Message}"; } return result; @@ -293,43 +435,66 @@ namespace Myshipping.Application /// /// 删除 /// - /// 状态主键 + /// 状态主键数组 /// 返回回执 - [HttpGet("/StatusSkuBase/Delete")] - public async Task Delete([FromQuery] string pkId) + [HttpPost("/StatusSkuBase/Delete")] + public async Task Delete([FromBody] string[] pkIds) { TaskManageOrderResultDto result = new TaskManageOrderResultDto(); try { - var model = InnerGetInfo(pkId); + if (pkIds.Length == 0) + { + throw Oops.Oh($"状态主键数组不能为空", typeof(InvalidOperationException)); + } - _logger.LogInformation($"更新服务项目前,获取原始记录 JSON={JSON.Serialize(model)}"); + var list = _statusSkuBaseInfoRepository.AsQueryable() + .Where(a => pkIds.Contains(a.PK_ID)).ToList(); - if (model.IS_ENABLE == 1) - ValidateServiceProject(model, true); + if (list.Count == 0) + throw Oops.Oh($"状态获取失败,请服务项目信息是否存在", typeof(InvalidOperationException)); - model.UpdatedTime = DateTime.Now; - model.UpdatedUserId = UserManager.UserId; - model.UpdatedUserName = UserManager.Name; - model.IsDeleted = true; + if (list.Count != pkIds.Length) + throw Oops.Oh($"部分状态获取失败,请服务项目信息是否存在", typeof(InvalidOperationException)); - await _statusSkuBaseInfoRepository.AsUpdateable(model).UpdateColumns(it => new - { - it.IsDeleted, - it.UpdatedTime, - it.UpdatedUserId, - it.UpdatedUserName + List rltList = new List(); - }).ExecuteCommandAsync(); + list.ForEach(pr => { + + rltList.Add(InnerExcuteServiceStatus(pr, OperateTypeEnum.Delete).GetAwaiter().GetResult()); + }); result.succ = true; - result.msg = "执行成功"; + result.msg = rltList.FirstOrDefault().msg; + + result.ext = rltList; + + var succ = rltList.Count(x => x.succ); + var fail = rltList.Count(x => !x.succ); + + if (succ > 0) + { + result.batchTotal = succ.ToString(); + } + else + { + result.batchTotal = "- "; + } + + if (fail > 0) + { + result.batchTotal += "/" + fail.ToString(); + } + else + { + result.batchTotal += " -"; + } } catch (Exception ex) { result.succ = false; - result.msg = $"删除状态异常,原因:{ex.Message}"; + result.msg = $"启用服务项目异常,原因:{ex.Message}"; } return result; @@ -351,7 +516,7 @@ namespace Myshipping.Application { var model = InnerGetInfo(pkId); - var showModel = model.Adapt(); + var showModel = model.Adapt(); result.succ = true; result.ext = showModel;