diff --git a/src/SJZY.Track.Application/AutoMapper/TrackFlagAutoMapperProfile.cs b/src/SJZY.Track.Application/AutoMapper/TrackFlagAutoMapperProfile.cs new file mode 100644 index 00000000..a25177a4 --- /dev/null +++ b/src/SJZY.Track.Application/AutoMapper/TrackFlagAutoMapperProfile.cs @@ -0,0 +1,30 @@ +using AutoMapper; +using AutoMapper.Internal.Mappers; +using SJZY.Track.Application.Dtos.TrackFlags; +using SJZY.Track.Application.Dtos.TrackStatus; +using SJZY.Track.Domain.Aggregates.TrackFlagAggregate; +using SJZY.Track.Domain.Dtos.TrackFlags; +using SJZY.Track.Domain.Dtos.TrackStatus; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Volo.Abp.ObjectMapping; + +namespace SJZY.Track.Application.AutoMapper +{ + public class TrackFlagAutoMapperProfile : Profile + { + public TrackFlagAutoMapperProfile() + { + + CreateMap(MemberList.None) + .ForMember(dest => dest.Name, opt => opt.MapFrom(source => source.Flag)) + .ForMember(dest => dest.IsCompleted, opt => opt.MapFrom(source => source.IsFinish)); + CreateMap(MemberList.None); + CreateMap(MemberList.None); + CreateMap, UnifyPageResultDto>(MemberList.None); + } + } +} diff --git a/src/SJZY.Track.Application/Dtos/TrackFlags/EditTrackFlagInput.cs b/src/SJZY.Track.Application/Dtos/TrackFlags/EditTrackFlagInput.cs new file mode 100644 index 00000000..05c9b56c --- /dev/null +++ b/src/SJZY.Track.Application/Dtos/TrackFlags/EditTrackFlagInput.cs @@ -0,0 +1,74 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SJZY.Track.Application.Dtos.TrackFlags +{ + public class EditTrackFlagInput + { + /// + /// 操作类型 + /// + public OptionType Options { get; set; } + + /// + /// Id + /// + public int Id { get; set; } + + /// + /// 子系统id + /// + public int SubSystemId { get; set; } + + /// + /// 标记 + /// + public string Flag { get; set; } + + /// + /// 代码 + /// + public string Code { get; set; } + + /// + /// 是否完结 + /// + public bool IsFinish { get; set; } + } + + public class GetTrackFlagDetailDto + { + /// + /// Id + /// + public int Id { get; set; } + + /// + /// 子系统id + /// + public int SubSystemId { get; set; } + + /// + /// 子系统 + /// + public string SubSystem { get; set; } + + /// + /// 代码 + /// + public string Code { get; set; } + + /// + /// + /// + public string Flag { get; set; } + + /// + /// 是否完结 + /// + public bool IsFinish { get; set; } + } +} diff --git a/src/SJZY.Track.Application/Dtos/TrackFlags/GetTrackFlagListDto.cs b/src/SJZY.Track.Application/Dtos/TrackFlags/GetTrackFlagListDto.cs new file mode 100644 index 00000000..40097fdc --- /dev/null +++ b/src/SJZY.Track.Application/Dtos/TrackFlags/GetTrackFlagListDto.cs @@ -0,0 +1,69 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SJZY.Track.Application.Dtos.TrackFlags +{ + public class GetTrackFlagListDto + { + /// + /// Id + /// + public int Id { get; set; } + + /// + /// 子系统 + /// + public string SubSystem { get; set; } + + /// + /// 代码 + /// + public string Code { get; set; } + + /// + /// 标记 + /// + public string Flag { get; set; } + + /// + /// 是否完结 + /// + public bool IsFinish { get; set; } + + /// + /// 创建时间 + /// + public DateTime? CreateTime { get; set; } + + /// + /// 创建人 + /// + public string CreateUser { get; set; } + + /// + /// 修改时间 + /// + public DateTime? UpdateTime { get; set; } + + /// + /// 修改人 + /// + public string UpdateUser { get; set; } + } + + public class GetPageTrackFlagInput : PageInfoInput + { + /// + /// 子系统id + /// + public int SubSystemId { get; set; } + + /// + /// 关键字 + /// + public string keywords { get; set; } + } +} diff --git a/src/SJZY.Track.Application/Services/TrackFlags/TrackFlagService.cs b/src/SJZY.Track.Application/Services/TrackFlags/TrackFlagService.cs index a01d56b5..112345e2 100644 --- a/src/SJZY.Track.Application/Services/TrackFlags/TrackFlagService.cs +++ b/src/SJZY.Track.Application/Services/TrackFlags/TrackFlagService.cs @@ -1,5 +1,10 @@ -using SJZY.Track.Application.Dtos.TrackStatus; +using Microsoft.Extensions.Localization; +using SJZY.Track.Application.Dtos.TrackFlags; +using SJZY.Track.Application.Dtos.TrackStatus; +using SJZY.Track.Application.Localization; +using SJZY.Track.Domain.Aggregates.TrackFlagAggregate; using SJZY.Track.Domain.Aggregates.TrackStatusAggregate; +using SJZY.Track.Domain.Dtos.TrackFlags; using SJZY.Track.Domain.Dtos.TrackStatus; using System; using System.Collections.Generic; @@ -17,10 +22,110 @@ namespace SJZY.Track.Application.Services.TrackFlags [Route("/Track/Flag")] public class TrackFlagService : ApplicationService, ITransientDependency { - public TrackFlagService() + private readonly IStringLocalizer _stringLocalizer; + private readonly ITrackFlagRepository _trackFlagRepository; + + public TrackFlagService( + IStringLocalizer stringLocalizer, + ITrackFlagRepository trackFlagRepository + ) { + this._stringLocalizer=stringLocalizer; + this._trackFlagRepository=trackFlagRepository; } - + /// + /// 轨迹标记编辑 + /// + /// + [HttpPost("Edit")] + public async Task EditAsync(EditTrackFlagInput input) + { + return input.Options switch + { + OptionType.新增 => await AddAsync(input), + OptionType.修改 => await UpdateAsync(input), + OptionType.删除 => await DeleteAsync(input), + _ => throw new BusinessException(message: "当前操作动作不合法") + }; + } + + /// + /// 根据标记id获取轨迹标记 + /// + /// + /// + [HttpGet("GetDetail")] + public async Task> GetDetailAsync(int id) + { + var detailInfo = await _trackFlagRepository.GetDetailAsync(id); + if (detailInfo == null) + { + return new UnifyResultDto(false, null, "未查询到轨迹状态"); + } + + var dto = ObjectMapper.Map(detailInfo); + return new UnifyResultDto("200", "", dto); + } + + /// + /// 获取分页轨迹标记 + /// + /// + /// + [HttpPost("GetList")] + public async Task> GetPageTrackFlag(GetPageTrackFlagInput input) + { + var vo = ObjectMapper.Map(input); + var resultDto = await _trackFlagRepository.GetPageTrackFlag(vo); + var pageResultDto = + ObjectMapper.Map, UnifyPageResultDto>( + resultDto); + + return pageResultDto; + } + + #region 私有方法 + private async Task AddAsync(EditTrackFlagInput input) + { + #region 业务校验 + var trackStatusEntity = await _trackFlagRepository.GetFirstAsync(a => a.SubSystemId==input.SubSystemId&& (a.Code==input.Code || a.Name==input.Flag)); + if (trackStatusEntity!=null) + { + throw new BusinessException(message: _stringLocalizer["TrackFlagExist"]); + } + #endregion + + var entity = ObjectMapper.Map(input); + var isTrue = await _trackFlagRepository.InsertAsync(entity); + + return new UnifyResultDto("200", "新增成功", isTrue); + } + + private async Task UpdateAsync(EditTrackFlagInput input) + { + #region 业务校验 + var trackStatusEntity = await _trackFlagRepository.GetFirstAsync(a => a.Id !=input.Id && a.SubSystemId==input.SubSystemId&& (a.Code==input.Code || + a.Name ==input.Flag)); + if (trackStatusEntity!=null) + { + throw new BusinessException(message: _stringLocalizer["TrackFlagExist"]); + } + #endregion + + var templateEntity = await _trackFlagRepository.GetFirstAsync(a => a.Id == input.Id); + ObjectMapper.Map(input, templateEntity); + var isTrue = await _trackFlagRepository.UpdateAsync(templateEntity); + + return new UnifyResultDto("200", "修改成功", isTrue); + } + + private async Task DeleteAsync(EditTrackFlagInput input) + { + var isTrue = await _trackFlagRepository.SoftDeleteAsync(x => x.Id == input.Id); + + return new UnifyResultDto("200", "删除成功", isTrue); + } + #endregion } } diff --git a/src/SJZY.Track.Application/Validations/TrackFlags/EditTrackFlagInputValidation.cs b/src/SJZY.Track.Application/Validations/TrackFlags/EditTrackFlagInputValidation.cs new file mode 100644 index 00000000..da5faec2 --- /dev/null +++ b/src/SJZY.Track.Application/Validations/TrackFlags/EditTrackFlagInputValidation.cs @@ -0,0 +1,35 @@ +using FluentValidation; +using SJZY.Track.Application.Dtos.TrackFlags; +using SJZY.Track.Application.Dtos.TrackStatus; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SJZY.Track.Application.Validations.TrackFlags +{ + public class EditTrackFlagInputValidation : AbstractValidator, IValidationEnabled + { + public EditTrackFlagInputValidation() + { + //条件分支 + When(x => x.Options == OptionType.修改 || x.Options == OptionType.删除, () => + { + RuleFor(x => x.Id).GreaterThan(0).WithMessage("修改或删除时Id必须大于0!"); + }); + + When(x => x.Options == OptionType.新增, () => + { + RuleFor(x => x.Id).Equal(0).WithMessage("新增时Id必须等于0!"); + }); + + When(x => x.Options == OptionType.修改 || x.Options == OptionType.新增, () => + { + RuleFor(x => x.SubSystemId).GreaterThan(0).WithMessage("子系统的id必须大于0!"); + RuleFor(x => x.Code).NotNull().WithMessage("轨迹标记代码必填!").NotEmpty().WithMessage("轨迹标记代码不能为空!"); + RuleFor(x => x.Flag).NotNull().WithMessage("轨迹标记必填!").NotEmpty().WithMessage("轨迹标记不能为空!"); + }); + } + } +} diff --git a/src/SJZY.Track.Domain/Aggregates/TrackFlagAggregate/ITrackFlagRepository.cs b/src/SJZY.Track.Domain/Aggregates/TrackFlagAggregate/ITrackFlagRepository.cs index f465cb25..12ba3bc6 100644 --- a/src/SJZY.Track.Domain/Aggregates/TrackFlagAggregate/ITrackFlagRepository.cs +++ b/src/SJZY.Track.Domain/Aggregates/TrackFlagAggregate/ITrackFlagRepository.cs @@ -1,5 +1,9 @@ -namespace SJZY.Track.Domain.Aggregates.TrackFlagAggregate; +using SJZY.Track.Domain.Dtos.TrackFlags; + +namespace SJZY.Track.Domain.Aggregates.TrackFlagAggregate; public interface ITrackFlagRepository : IBasicRepository { + Task GetDetailAsync(int id); + Task> GetPageTrackFlag(GetPageTrackFlagVO input); } \ No newline at end of file diff --git a/src/SJZY.Track.Domain/Aggregates/TrackFlagAggregate/TrackFlagEntity.cs b/src/SJZY.Track.Domain/Aggregates/TrackFlagAggregate/TrackFlagEntity.cs index 6f689e51..66a2a423 100644 --- a/src/SJZY.Track.Domain/Aggregates/TrackFlagAggregate/TrackFlagEntity.cs +++ b/src/SJZY.Track.Domain/Aggregates/TrackFlagAggregate/TrackFlagEntity.cs @@ -29,4 +29,10 @@ public class TrackFlagEntity : IFullAuditedBasicEntitys, IAggregateRoot /// [SugarColumn(ColumnName = "SubSystemId")] public int SubSystemId { get; set; } + + /// + /// 是否完结 + /// + [SugarColumn(ColumnName = "SubSystemId")] + public bool IsCompleted { get; set; } } \ No newline at end of file diff --git a/src/SJZY.Track.Domain/Dtos/TrackFlags/GetPageTrackFlagVO.cs b/src/SJZY.Track.Domain/Dtos/TrackFlags/GetPageTrackFlagVO.cs new file mode 100644 index 00000000..20f7c40f --- /dev/null +++ b/src/SJZY.Track.Domain/Dtos/TrackFlags/GetPageTrackFlagVO.cs @@ -0,0 +1,69 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SJZY.Track.Domain.Dtos.TrackFlags +{ + public class GetPageTrackFlagVO : PageInfoInput + { + /// + /// 子系统id + /// + public int SubSystemId { get; set; } + + ///// + ///// 关键字 + ///// + //public string Keywords { get; set; } + } + + public class GetTrackFlagListVO + { + /// + /// Id + /// + public int Id { get; set; } + + /// + /// 子系统 + /// + public string SubSystem { get; set; } + + /// + /// 代码 + /// + public string Code { get; set; } + + /// + /// 标记 + /// + public string Flag { get; set; } + + /// + /// 是否完结 + /// + public bool IsFinish { get; set; } + + /// + /// 创建时间 + /// + public DateTime? CreateTime { get; set; } + + /// + /// 创建人 + /// + public string CreateUser { get; set; } + + /// + /// 修改时间 + /// + public DateTime? UpdateTime { get; set; } + + /// + /// 修改人 + /// + public string UpdateUser { get; set; } + } +} diff --git a/src/SJZY.Track.Domain/Dtos/TrackFlags/GetTrackFlagDetailVO.cs b/src/SJZY.Track.Domain/Dtos/TrackFlags/GetTrackFlagDetailVO.cs new file mode 100644 index 00000000..b88c7afd --- /dev/null +++ b/src/SJZY.Track.Domain/Dtos/TrackFlags/GetTrackFlagDetailVO.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SJZY.Track.Domain.Dtos.TrackFlags +{ + public class GetTrackFlagDetailVO + { + /// + /// Id + /// + public int Id { get; set; } + + /// + /// 子系统id + /// + public int SubSystemId { get; set; } + + /// + /// 子系统 + /// + public string SubSystem { get; set; } + + /// + /// 代码 + /// + public string Code { get; set; } + + /// + /// + /// + public string Flag { get; set; } + + /// + /// 是否完结 + /// + public bool IsFinish { get; set; } + } +} diff --git a/src/SJZY.Track.Domain/SJZY.Track.Domain.csproj b/src/SJZY.Track.Domain/SJZY.Track.Domain.csproj index 0354af7d..aac0e12d 100644 --- a/src/SJZY.Track.Domain/SJZY.Track.Domain.csproj +++ b/src/SJZY.Track.Domain/SJZY.Track.Domain.csproj @@ -1,4 +1,4 @@ - + diff --git a/src/SJZY.Track.Repository/TrackFlagRepository.cs b/src/SJZY.Track.Repository/TrackFlagRepository.cs index 4c4d623f..508d80ef 100644 --- a/src/SJZY.Track.Repository/TrackFlagRepository.cs +++ b/src/SJZY.Track.Repository/TrackFlagRepository.cs @@ -1,7 +1,68 @@ using SJZY.Track.Domain.Aggregates.TrackFlagAggregate; +using SJZY.Track.Domain.Aggregates.TrackStatusAggregate; +using SJZY.Track.Domain.Dtos.TrackFlags; +using SJZY.Track.Domain.Dtos.TrackStatus; +using SJZY.Track.Domain.VEntities; namespace SJZY.Track.Repository; public class TrackFlagRepository : BasicRepository, ITrackFlagRepository, IScopedDependency { + public TrackFlagRepository() + { + } + + /// + /// 获取轨迹标记明细 + /// + /// + /// + public async Task GetDetailAsync(int id) + { + var detail = await Context.Queryable() + .LeftJoin((a, b) => a.SubSystemId == b.Id) + .Where((a, b) => a.Id == id) + .Select((a, b) => new GetTrackFlagDetailVO + { + Id = a.Id, + SubSystemId = a.SubSystemId, + SubSystem = b.CnName, + Code = a.Code, + Flag = a.Name, + IsFinish=a.IsCompleted + }) + .FirstAsync(); + return detail; + } + + /// + /// 分页获取轨迹标记 + /// + /// + /// + public async Task> GetPageTrackFlag(GetPageTrackFlagVO input) + { + UnifyPageResultDto pagedList = new UnifyPageResultDto(); + pagedList = await Context.Queryable() + .LeftJoin((a, b) => a.SubSystemId == b.Id) + .LeftJoin((a, b, c) => a.CreateUserId == c.Id) + .LeftJoin((a, b, c, d) => a.UpdateUserId == d.Id) + .WhereIF(input.SubSystemId > 0, (a, b, c, d) => a.SubSystemId == input.SubSystemId) + .Select((a, b, c, d) => new GetTrackFlagListVO + { + Id = a.Id, + SubSystem = b.CnName, + Code = a.Code, + Flag = a.Name, + IsFinish=a.IsCompleted, + CreateTime = a.CreateTime, + CreateUser = c.Name, + UpdateTime = a.UpdateTime, + UpdateUser = d.Name, + + }) + .ToPagedListAsync(input.PageIndex, input.PageSize); + + return pagedList; + } } \ No newline at end of file