From acd1392775acc6ad7daee9d51a0bfd15541215c6 Mon Sep 17 00:00:00 2001 From: jianghaiqing Date: Thu, 6 Jul 2023 12:48:15 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=9C=8D=E5=8A=A1=E6=B5=81?= =?UTF-8?q?=E7=A8=8B=E4=BF=9D=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Dtos/ServiceWorkFlowActivitiesShowDto.cs | 41 +++++++- .../Dtos/TrackingSystemMapper.cs | 16 ++++ .../ServiceWorkFlowBaseService.cs | 96 +++++++++++++++++-- .../TrackingSystem/StatusSkuBaseService.cs | 4 +- 4 files changed, 145 insertions(+), 12 deletions(-) diff --git a/Myshipping.Application/Service/TrackingSystem/Dtos/ServiceWorkFlowActivitiesShowDto.cs b/Myshipping.Application/Service/TrackingSystem/Dtos/ServiceWorkFlowActivitiesShowDto.cs index 6521106f..b8c84e9f 100644 --- a/Myshipping.Application/Service/TrackingSystem/Dtos/ServiceWorkFlowActivitiesShowDto.cs +++ b/Myshipping.Application/Service/TrackingSystem/Dtos/ServiceWorkFlowActivitiesShowDto.cs @@ -9,7 +9,46 @@ namespace Myshipping.Application /// /// /// - public class ServiceWorkFlowActivitiesShowDto: ServiceWorkFlowActivitiesDto + public class ServiceWorkFlowActivitiesShowDto + { + /// + /// 主键 + /// + public string PKId { get; set; } + + /// + /// 状态主键 + /// + public string StatusSKUId { get; set; } + + /// + /// 状态显示名称 + /// + public string ShowName { get; set; } + + /// + /// 显示顺序号 + /// + public int SortNo { get; set; } + + /// + /// 是否包含子状态 1-包含 0-不包含 + /// + public int IsContainsSub { get; set; } + + /// + /// 子活动列表 + /// + public List SubList { get; set; } + + /// + /// 状态详情 + /// + public StatusSkuBaseDto statusSkuBase { get; set; } + + } + + public class ServiceWorkFlowActivitiesSubShowDto: ServiceWorkFlowActivitiesSubDto { /// /// 状态详情 diff --git a/Myshipping.Application/Service/TrackingSystem/Dtos/TrackingSystemMapper.cs b/Myshipping.Application/Service/TrackingSystem/Dtos/TrackingSystemMapper.cs index db962100..a88fb452 100644 --- a/Myshipping.Application/Service/TrackingSystem/Dtos/TrackingSystemMapper.cs +++ b/Myshipping.Application/Service/TrackingSystem/Dtos/TrackingSystemMapper.cs @@ -56,6 +56,12 @@ namespace Myshipping.Application .Map(dest => dest.STATUS_SKU_NOTE, src => src.StatusSKUNote) .Map(dest => dest.BACKGROUND_COLOR, src => src.BackgroundColor); + config.ForType() + .Map(dest => dest.PKId, src => src.PK_ID) + .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); + config.ForType() .Map(dest => dest.PKId, src => src.PK_ID) .Map(dest => dest.StatusSKUCode, src => src.STATUS_SKU_CODE) @@ -115,6 +121,16 @@ namespace Myshipping.Application .Map(dest => dest.PK_ID, src => src.PKId) .Map(dest => dest.STATUS_SKU_ID, src => src.StatusSKUId) .Map(dest => dest.SHOW_NAME, src => src.ShowName); + + config.ForType() + .Map(dest => dest.PKId, src => src.PK_ID) + .Map(dest => dest.StatusSKUId, src => src.STATUS_SKU_ID) + .Map(dest => dest.ShowName, src => src.SHOW_NAME); + + config.ForType() + .Map(dest => dest.PKId, src => src.PK_ID) + .Map(dest => dest.StatusSKUId, src => src.STATUS_SKU_ID) + .Map(dest => dest.ShowName, src => src.SHOW_NAME); } } } diff --git a/Myshipping.Application/Service/TrackingSystem/ServiceWorkFlowBaseService.cs b/Myshipping.Application/Service/TrackingSystem/ServiceWorkFlowBaseService.cs index 0d5d43bd..4f03a02d 100644 --- a/Myshipping.Application/Service/TrackingSystem/ServiceWorkFlowBaseService.cs +++ b/Myshipping.Application/Service/TrackingSystem/ServiceWorkFlowBaseService.cs @@ -31,15 +31,17 @@ namespace Myshipping.Application private readonly SqlSugarRepository _serviceWorkFlowActivitiesInfoRepository; private readonly SqlSugarRepository _serviceWorkFlowProjectRelationRepository; private readonly SqlSugarRepository _serviceWorkFlowActivitiesRelationRepository; + private readonly SqlSugarRepository _serviceWorkFlowActivitiesSubRelationRepository; + - private readonly ILogger _logger; public ServiceWorkFlowBaseService(SqlSugarRepository serviceWorkFlowBaseRepository, ILogger logger, SqlSugarRepository serviceWorkFlowActivitiesInfoRepository, SqlSugarRepository serviceWorkFlowProjectRelationRepository, - SqlSugarRepository serviceWorkFlowActivitiesRelationRepository) + SqlSugarRepository serviceWorkFlowActivitiesRelationRepository, + SqlSugarRepository serviceWorkFlowActivitiesSubRelationRepository) { _serviceWorkFlowBaseRepository = serviceWorkFlowBaseRepository; _serviceWorkFlowActivitiesInfoRepository = serviceWorkFlowActivitiesInfoRepository; @@ -47,6 +49,7 @@ namespace Myshipping.Application _serviceWorkFlowActivitiesRelationRepository = serviceWorkFlowActivitiesRelationRepository; _logger = logger; + _serviceWorkFlowActivitiesSubRelationRepository = serviceWorkFlowActivitiesSubRelationRepository; } /// @@ -203,6 +206,14 @@ namespace Myshipping.Application _logger.LogInformation($"更新状态前,获取原始记录 JSON={JSON.Serialize(model)}"); + if (info.StatusSkuList != null && info.StatusSkuList.Count > 0) + { + if (info.StatusSkuList.Any(a => a.IsContainsSub == 1 && (a.SubList == null || a.SubList.Count == 0))) + { + throw Oops.Oh($"状态已选择包含子状态,子状态列表不能为空", typeof(InvalidOperationException)); + } + } + ValidateServiceWorkFlow(entity, OperateTypeEnum.Save); entity.UpdatedTime = DateTime.Now; @@ -226,6 +237,10 @@ namespace Myshipping.Application //批量删除服务流程与服务活动关系(物理删除) _serviceWorkFlowActivitiesRelationRepository.EntityContext.Deleteable() .Where(a => a.SERVICE_WORKFLOW_ID == entity.PK_ID); + + //批量删除服务流程活动与子活动的关系(物理删除) + _serviceWorkFlowActivitiesSubRelationRepository.EntityContext.Deleteable() + .Where(a => a.SERVICE_WORKFLOW_ID == entity.PK_ID); } //服务流程与服务项目关系 @@ -250,9 +265,26 @@ namespace Myshipping.Application PK_ID = IDGen.NextID().ToString(), SERVICE_WORKFLOW_ID = entity.PK_ID, SERVICE_ACTIVITIES_ID = sku.PKId, + IS_CONTAINS_SUB = sku.IsContainsSub }; - await _serviceWorkFlowActivitiesRelationRepository.InsertAsync(); + await _serviceWorkFlowActivitiesRelationRepository.InsertAsync(wfRelationActivities); + + //处理子状态 + if(sku.IsContainsSub == 1) + { + sku.SubList.ForEach(async sub => { + var wfRelationActivitiesSub = new ServiceWorkFlowActivitiesSubRelation + { + PK_ID = IDGen.NextID().ToString(), + SERVICE_WORKFLOW_ID = entity.PK_ID, + SERVICE_ACTIVITIES_ID = sku.PKId, + SUB_SERVICE_ACTIVITIES_ID = sub.PKId + }; + + await _serviceWorkFlowActivitiesSubRelationRepository.InsertAsync(wfRelationActivitiesSub); + }); + } }); } @@ -336,18 +368,64 @@ namespace Myshipping.Application .LeftJoin((rela, act) => rela.SERVICE_ACTIVITIES_ID == act.PK_ID && rela.SERVICE_WORKFLOW_ID == pkId) .LeftJoin((rela, act, sku) => act.STATUS_SKU_ID == sku.PK_ID) - .Select((rela, act, sku) => new { Act = act, Sku = sku, SortNo = rela.SORT_NO }).ToList(); + .Select((rela, act, sku) => + new { Act = act, Sku = sku, SortNo = rela.SORT_NO, IsSub = rela.IS_CONTAINS_SUB }) + .ToList(); if (activitiesList.Count > 0) { - showModel.StatusSkuList = activitiesList.OrderBy(a=>a.SortNo) + showModel.StatusSkuList = activitiesList.OrderBy(a => a.SortNo) + .Select(a => + { + var actModel = a.Act.Adapt(); + + actModel.SortNo = a.SortNo; + actModel.IsContainsSub = a.IsSub; + actModel.statusSkuBase = a.Sku.Adapt(); + + return actModel; + }).ToList(); + } + + var activitiesSubList = _serviceWorkFlowActivitiesSubRelationRepository.AsQueryable() + .LeftJoin((rela, act) => + rela.SUB_SERVICE_ACTIVITIES_ID == act.PK_ID && rela.SERVICE_WORKFLOW_ID == pkId) + .LeftJoin((rela, act, sku) => act.STATUS_SKU_ID == sku.PK_ID) + .Select((rela, act, sku) => + new { Act = act, Sku = sku, SortNo = rela.SORT_NO, ParentId = rela.SERVICE_ACTIVITIES_ID }) + .ToList(); + + if(activitiesSubList.Count > 0) + { + var subList = activitiesSubList + .GroupBy(a => a.ParentId) .Select(a => { - var actModel = a.Act.Adapt(); + var currArg = a.ToList(); + + + return new { Key = a.Key, SubList = currArg.OrderBy(b=>b.SortNo) + .Select(b => { + var actModel = b.Act.Adapt(); + + actModel.SortNo = b.SortNo; + actModel.statusSkuBase = b.Sku.Adapt(); + + return actModel; + }).ToList() }; + }); + + showModel.StatusSkuList.GroupJoin(subList, l => l.PKId, r => r.Key, (l, + r) => { + var currArg = r.ToList(); + + if (currArg.Count == 0) + return l; + + l.SubList = currArg.FirstOrDefault().SubList.ToList(); - actModel.statusSkuBase = a.Sku.Adapt(); + return l; - return actModel; - }).ToList(); + }).ToList(); } return showModel; diff --git a/Myshipping.Application/Service/TrackingSystem/StatusSkuBaseService.cs b/Myshipping.Application/Service/TrackingSystem/StatusSkuBaseService.cs index 87ebc851..b0794031 100644 --- a/Myshipping.Application/Service/TrackingSystem/StatusSkuBaseService.cs +++ b/Myshipping.Application/Service/TrackingSystem/StatusSkuBaseService.cs @@ -546,11 +546,11 @@ namespace Myshipping.Application try { var list = await _statusSkuBaseInfoRepository.AsQueryable().Where(a => - a.IS_ENABLE == 1 && !a.IsDeleted && (a.STATUS_SKU_CODE.Contains(queryItem) || a.STATUS_SKU_NAME.Contains(queryItem))) + a.IS_ENABLE == 1 && !a.IsDeleted && (string.IsNullOrWhiteSpace(queryItem) || (a.STATUS_SKU_CODE.Contains(queryItem) || a.STATUS_SKU_NAME.Contains(queryItem)))) .Take(topNum).ToListAsync(); result.succ = true; - result.ext = list.Adapt>(); + result.ext = list.Adapt>(); } catch (Exception ex)