Merge branch 'S04轨迹预警' into dev

This commit is contained in:
钟喜旺 2024-07-26 17:25:28 +08:00
commit 9eec434dae
10 changed files with 396 additions and 0 deletions

View File

@ -0,0 +1,29 @@
namespace SJZY.Track.Application.Contract.Dtos.TrackNode;
public class EditTrackNodeInput
{
/// <summary>
/// 操作类型
/// </summary>
public OptionType Options { get; set; }
/// <summary>
/// 轨迹节点id,创建不用填
/// </summary>
public long Id { get; set; }
/// <summary>
/// 系统id
/// </summary>
public int SystemId { get; set; }
/// <summary>
/// 节点名称
/// </summary>
public string Name { get; set; }
/// <summary>
/// 节点英文名称
/// </summary>
public string EnName { get; set; }
}

View File

@ -0,0 +1,14 @@
namespace SJZY.Track.Application.Contract.Dtos.TrackStatus;
public class QueryTrackNodeRequest:PageInfoInput
{
/// <summary>
/// 关键字,节点中文和英文
/// </summary>
public string? KeyWord { get; set; }
/// <summary>
/// 子系统id
/// </summary>
public long? SystemId { get; set; }
}

View File

@ -0,0 +1,20 @@
using AutoMapper;
using SJZY.Track.Application.Contract.Dtos.TrackNode;
using SJZY.Track.Application.Contract.Dtos.TrackStatus;
using SJZY.Track.Domain.Aggregates.TrackNodeAggregate;
using SJZY.Track.Domain.Dtos.TrackNode;
namespace SJZY.Track.Application.AutoMapper;
public class TrackNodeMapperProfile :Profile
{
public TrackNodeMapperProfile()
{
CreateMap<QueryTrackNodeRequest, TrackNodePageDto>();
CreateMap<EditTrackNodeInput, TrackNodeEntity>(MemberList.None)
.ForMember(val => val.NodeName, opt => opt.MapFrom(src => src.Name))
.ForMember(val => val.NodeEnName, opt => opt.MapFrom(src => src.EnName))
.ForMember(val => val.SubSystemId, opt => opt.MapFrom(src => src.SystemId));
}
}

View File

@ -0,0 +1,132 @@
using Microsoft.Extensions.Localization;
using SJZY.Track.Application.Contract.Dtos.TrackNode;
using SJZY.Track.Application.Contract.Dtos.TrackStatus;
using SJZY.Track.Application.Localization;
using SJZY.Track.Domain.Aggregates.TrackNodeAggregate;
using SJZY.Track.Domain.Aggregates.TrackStatusAggregate;
using SJZY.Track.Domain.Dtos.TrackNode;
using Volo.Abp.DependencyInjection;
namespace SJZY.Track.Application.Services.TrackNodeServices
{
/// <summary>
/// 轨迹节点服务
/// </summary>
[ApiExplorerSettings(GroupName = "轨迹节点")]
[Route("/Track/Node")]
public class TrackNodeService : ApplicationService, ITransientDependency
{
private readonly ITrackStatusRepository _trackStatusRepository;
private readonly ITrackNodeRepository _trackNodeRepository;
public TrackNodeService(
ITrackNodeRepository trackNodeRepository, ITrackStatusRepository trackStatusRepository)
{
this._trackNodeRepository = trackNodeRepository;
_trackStatusRepository = trackStatusRepository;
}
/// <summary>
/// 轨迹节点编辑
/// </summary>
/// <returns></returns>
[HttpPost("Edit")]
public async Task<UnifyResultDto> EditAsync(EditTrackNodeInput input)
{
return input.Options switch
{
OptionType.新增 => await AddAsync(input),
OptionType.修改 => await UpdateAsync(input),
OptionType.删除 => await DeleteAsync(input),
_ => throw new BusinessException(message: "当前操作动作不合法")
};
}
/// <summary>
/// 获取分页轨迹节点
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("GetList")]
public async Task<UnifyPageResultDto<TrackNodeDto>> GetPageTrackNode(QueryTrackNodeRequest input)
{
var queryParam = ObjectMapper.Map<QueryTrackNodeRequest, TrackNodePageDto>(input);
var resultDto = await _trackNodeRepository.GetPageList(queryParam);
return resultDto;
}
/// <summary>
/// 获取分页轨迹字典,下拉框用的
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("GetTrackNodeOption")]
public async Task<UnifyPageResultDto<TrackNodeDicDto>> GetTrackNodeOption(QueryTrackNodeRequest input)
{
var queryParam = ObjectMapper.Map<QueryTrackNodeRequest, TrackNodePageDto>(input);
var resultDto = await _trackNodeRepository.GetPageDicList(queryParam);
return resultDto;
}
#region 私有方法
private async Task<UnifyResultDto> AddAsync(EditTrackNodeInput input)
{
#region 业务校验
var trackNodesEntitys = await _trackNodeRepository.GetListAsync(a =>
a.SubSystemId == input.SystemId && (a.NodeName == input.Name || a.NodeEnName == input.EnName));
if (trackNodesEntitys.Any())
{
var trackNodeName = trackNodesEntitys.FirstOrDefault(a => a.NodeName == input.Name);
if (trackNodeName != null)
{
throw new BusinessException(message: "该子系统下节点名称已存在");
}
var trackNodeEnName = trackNodesEntitys.FirstOrDefault(a => a.NodeEnName == input.EnName);
if (trackNodeEnName != null)
{
throw new BusinessException(message: "该子系统下节点英文名称已存在");
}
}
#endregion
var entity = ObjectMapper.Map<EditTrackNodeInput, TrackNodeEntity>(input);
var isTrue = await _trackNodeRepository.InsertAsync(entity);
return new UnifyResultDto("200", "新增成功", isTrue);
}
private async Task<UnifyResultDto> UpdateAsync(EditTrackNodeInput input)
{
#region 业务校验
var trackNodesEntitys = await _trackNodeRepository.GetFirstAsync(a => a.Id == input.Id);
if (trackNodesEntitys == null)
{
return new UnifyResultDto("200", "没有找到数据,更新失败", false);
}
#endregion
trackNodesEntitys.NodeEnName = input.EnName;
trackNodesEntitys.NodeName = input.Name;
var isTrue = await _trackNodeRepository.UpdateAsync(trackNodesEntitys);
return new UnifyResultDto("200", "修改成功", isTrue);
}
private async Task<UnifyResultDto> DeleteAsync(EditTrackNodeInput input)
{
var trackStatus = await _trackStatusRepository.GetFirstAsync(val => val.Node == input.Id && val.SubSystemId == input.SystemId);
if(trackStatus!=null)
{
return new UnifyResultDto("200", "删除失败,该节点已被使用", false);
}
var rows = await _trackNodeRepository.DeleteById(input.Id);
return new UnifyResultDto("200", "删除成功", rows>0);
}
#endregion
}
}

View File

@ -0,0 +1,27 @@
using SJZY.Track.Domain.Dtos.TrackNode;
namespace SJZY.Track.Domain.Aggregates.TrackNodeAggregate;
public interface ITrackNodeRepository:IBasicRepository<TrackNodeEntity>
{
/// <summary>
/// 分页查询
/// </summary>
/// <param name="queryParam"></param>
/// <returns></returns>
Task<UnifyPageResultDto<TrackNodeDto>> GetPageList(TrackNodePageDto queryParam);
/// <summary>
/// 分页查询字典
/// </summary>
/// <param name="queryParam"></param>
/// <returns></returns>
Task<UnifyPageResultDto<TrackNodeDicDto>> GetPageDicList(TrackNodePageDto queryParam);
/// <summary>
/// 删除
/// </summary>
/// <param name="inputId"></param>
/// <returns></returns>
Task<int> DeleteById(long inputId);
}

View File

@ -0,0 +1,32 @@
namespace SJZY.Track.Domain.Aggregates.TrackNodeAggregate;
/// <summary>
/// 轨迹节点主表
/// </summary>
[SugarTable("t_track_node", TableDescription = "轨迹节点主表")]
public class TrackNodeEntity : IFullAuditedBasicEntitys, IAggregateRoot
{
/// <summary>
/// 自增主键
/// </summary>
[SugarColumn(ColumnName = "Id", IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "自增主键")]
public long Id { get; set; }
/// <summary>
/// 子系统id
/// </summary>
[SugarColumn(ColumnName = "SubSystemId", ColumnDescription = "子系统id")]
public int SubSystemId { get; set; }
/// <summary>
/// 节点名称
/// </summary>
[SugarColumn(ColumnName = "NodeName", Length = 32, ColumnDescription = "节点名称")]
public string? NodeName { get; set; }
/// <summary>
/// 节点英文名称
/// </summary>
[SugarColumn(ColumnName = "NodeEnName", Length = 32, ColumnDescription = "节点英文名称")]
public string? NodeEnName { get; set; }
}

View File

@ -0,0 +1,19 @@
namespace SJZY.Track.Domain.Dtos.TrackNode;
public class TrackNodeDicDto
{
/// <summary>
/// 节点id
/// </summary>
public long Id { get; set; }
/// <summary>
/// 名称
/// </summary>
public string NodeName { get; set; }
/// <summary>
/// 名称
/// </summary>
public string EnName { get; set; }
}

View File

@ -0,0 +1,56 @@
namespace SJZY.Track.Domain.Dtos.TrackNode;
/// <summary>
/// 轨迹节点主表 DTO
/// </summary>
public class TrackNodeDto
{
/// <summary>
/// 自增主键
/// </summary>
public long Id { get; set; }
/// <summary>
/// 子系统id
/// </summary>
public int SubSystemId { get; set; }
/// <summary>
/// 节点名称
/// </summary>
public string? NodeName { get; set; }
/// <summary>
/// 节点英文名称
/// </summary>
public string? NodeEnName { get; set; }
/// <summary>
/// 是否删除
/// </summary>
public bool IsDeleted { get; set; }
/// <summary>
/// 创建人id
/// </summary>
public int CreateUserId { get; set; }
/// <summary>
/// 创建时间
/// </summary>
public DateTime CreateTime { get; set; }
/// <summary>
/// 更新人
/// </summary>
public int? UpdateUserId { get; set; }
/// <summary>
/// 更新时间
/// </summary>
public DateTime? UpdateTime { get; set; }
public string? CreateUserName { get; set; }
public string? UpdateUserName { get; set; }
}

View File

@ -0,0 +1,14 @@
namespace SJZY.Track.Domain.Dtos.TrackNode;
public class TrackNodePageDto:PageInfoInput
{
/// <summary>
/// 关键字,节点中文和英文
/// </summary>
public string? KeyWord { get; set; }
/// <summary>
/// 子系统id
/// </summary>
public long? SystemId { get; set; }
}

View File

@ -0,0 +1,53 @@
using SJZY.Track.Domain.Aggregates.TrackNodeAggregate;
using SJZY.Track.Domain.Dtos.TrackNode;
using SJZY.Track.Domain.VEntities;
namespace SJZY.Track.Repository.Repositories;
public class TrackNodeRepository: BasicRepository<TrackNodeEntity>,ITrackNodeRepository,IScopedDependency
{
public async Task<UnifyPageResultDto<TrackNodeDto>> GetPageList(TrackNodePageDto queryParam)
{
var result = await Context.Queryable<TrackNodeEntity>()
.LeftJoin<VUserEntity>((t,u1)=>t.CreateUserId==u1.Id)
.LeftJoin<VUserEntity>((t,u1,u2)=>t.UpdateUserId==u2.Id)
.Where((t,u1,u2)=>!t.IsDeleted&&!u1.IsDeleted&&!u2.IsDeleted)
.WhereIF(!string.IsNullOrEmpty(queryParam.KeyWord), (t,u1,u2)=>t.NodeName!.Contains(queryParam.KeyWord)||t.NodeEnName!.Contains(queryParam.KeyWord))
.WhereIF(queryParam.SystemId.HasValue,(t,u1,u2)=>t.SubSystemId == queryParam.SystemId.Value)
.Select((t, u1, u2) =>new TrackNodeDto()
{
Id = t.Id,
NodeName = t.NodeName,
NodeEnName = t.NodeEnName,
SubSystemId = t.SubSystemId,
UpdateTime = t.UpdateTime,
CreateTime = t.CreateTime,
UpdateUserId = t.UpdateUserId,
UpdateUserName = u2.Name,
CreateUserName = u1.Name
}).ToPagedListAsync(queryParam.PageIndex, queryParam.PageSize);
return result;
}
public async Task<UnifyPageResultDto<TrackNodeDicDto>> GetPageDicList(TrackNodePageDto queryParam)
{
var result = await Context.Queryable<TrackNodeEntity>()
.Where((t)=>!t.IsDeleted)
.WhereIF(!string.IsNullOrEmpty(queryParam.KeyWord), (t)=>t.NodeName!.Contains(queryParam.KeyWord)||t.NodeEnName!.Contains(queryParam.KeyWord))
.WhereIF(queryParam.SystemId.HasValue,(t)=>t.SubSystemId == queryParam.SystemId.Value)
.Select(t =>new TrackNodeDicDto()
{
Id = t.Id,
NodeName = t.NodeName,
EnName = t.NodeEnName,
}).ToPagedListAsync(queryParam.PageIndex, queryParam.PageSize);
return result;
}
public Task<int> DeleteById(long inputId)
{
return Context.Deleteable<TrackNodeEntity>().Where(val=>val.Id==inputId).ExecuteCommandAsync();
}
}