From 8a2fb929001a766f3954e61169207d478fa7c7a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=9F=E5=96=9C=E6=97=BA?= Date: Fri, 2 Aug 2024 17:45:27 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E9=99=90=E5=88=B6=E5=8F=AA=E8=83=BD?= =?UTF-8?q?=E8=BE=93=E5=85=A5=E8=8B=B1=E6=96=87=E5=92=8C=E8=8B=B1=E6=96=87?= =?UTF-8?q?=E7=AC=A6=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Helpers/StringHelper.cs | 24 ++++++++++ .../ForewarningServices/KpiAreaService.cs | 10 ++-- .../Services/TrackNode/TrackNodeService.cs | 48 ++++++++++++------- 3 files changed, 62 insertions(+), 20 deletions(-) create mode 100644 src/SJZY.Track.Application/Helpers/StringHelper.cs diff --git a/src/SJZY.Track.Application/Helpers/StringHelper.cs b/src/SJZY.Track.Application/Helpers/StringHelper.cs new file mode 100644 index 00000000..682bb788 --- /dev/null +++ b/src/SJZY.Track.Application/Helpers/StringHelper.cs @@ -0,0 +1,24 @@ +using System.Text.RegularExpressions; + +namespace SJZY.Track.Application.Helpers +{ + public class StringHelper + { + /// + /// 只能输入英文字符和键盘上常用的符号 + /// + /// + /// + public static bool IsValidEnglishString(string input) + { + if (string.IsNullOrEmpty(input)) + { + return false; + } + + // Regular expression to match only English letters and specified symbols + var regex = new Regex(@"^[a-zA-Z\(\)@!#$%^&*_\-+=;:""'/><,.\s]+$"); + return regex.IsMatch(input); + } + } +} \ No newline at end of file diff --git a/src/SJZY.Track.Application/Services/ForewarningServices/KpiAreaService.cs b/src/SJZY.Track.Application/Services/ForewarningServices/KpiAreaService.cs index 8f8ecb95..4232bea7 100644 --- a/src/SJZY.Track.Application/Services/ForewarningServices/KpiAreaService.cs +++ b/src/SJZY.Track.Application/Services/ForewarningServices/KpiAreaService.cs @@ -1,7 +1,5 @@ -using SJZY.Expand.ABP.Core; using SJZY.Track.Application.Contract.Services; using SJZY.Track.Domain.Aggregates.KPIAreaAggregate; -using SJZY.Track.Domain.Consts; using SJZY.Track.Domain.Dtos.Forewarning; namespace SJZY.Track.Application.Services.ForewarningServices; @@ -10,8 +8,8 @@ namespace SJZY.Track.Application.Services.ForewarningServices; [Route("/ForewarningService")] public class KpiAreaService : ApplicationService { - private readonly IKpiAreaRepository _ruleAreaRepository; private readonly IForewarningCacheService _forewarningCacheService; + private readonly IKpiAreaRepository _ruleAreaRepository; public KpiAreaService(IKpiAreaRepository ruleAreaRepository, IForewarningCacheService forewarningCacheService) { @@ -28,6 +26,12 @@ public class KpiAreaService : ApplicationService public async ValueTask CreateKpiArea(CreateRuleAreaRequest input) { var ruleAreaEntity = ObjectMapper.Map(input); + var hasSameName = await _ruleAreaRepository.IsAnyAsync(val => val.SubSystemId == input.SystemId && val.Name == input.Name); + if (hasSameName) + { + return new UnifyResultDto(false, "分区名称重复,请重新修改提交"); + } + var areaId = await _ruleAreaRepository.CreateAreaAsync(ruleAreaEntity); return new UnifyResultDto(true, areaId, "创建成功"); } diff --git a/src/SJZY.Track.Application/Services/TrackNode/TrackNodeService.cs b/src/SJZY.Track.Application/Services/TrackNode/TrackNodeService.cs index c9bd2637..b91aaf33 100644 --- a/src/SJZY.Track.Application/Services/TrackNode/TrackNodeService.cs +++ b/src/SJZY.Track.Application/Services/TrackNode/TrackNodeService.cs @@ -1,5 +1,6 @@ using SJZY.Track.Application.Contract.Dtos.TrackNode; using SJZY.Track.Application.Contract.Dtos.TrackStatus; +using SJZY.Track.Application.Helpers; using SJZY.Track.Domain.Aggregates.TrackNodeAggregate; using SJZY.Track.Domain.Aggregates.TrackStatusAggregate; using SJZY.Track.Domain.Dtos.TrackNode; @@ -13,9 +14,9 @@ namespace SJZY.Track.Application.Services.TrackNode [ApiExplorerSettings(GroupName = "轨迹节点")] [Route("/Track/Node")] public class TrackNodeService : ApplicationService, ITransientDependency - { - private readonly ITrackStatusRepository _trackStatusRepository; + { private readonly ITrackNodeRepository _trackNodeRepository; + private readonly ITrackStatusRepository _trackStatusRepository; public TrackNodeService( ITrackNodeRepository trackNodeRepository, ITrackStatusRepository trackStatusRepository) @@ -39,7 +40,7 @@ namespace SJZY.Track.Application.Services.TrackNode _ => throw new BusinessException(message: "当前操作动作不合法") }; } - + /// /// 获取分页轨迹节点 /// @@ -52,7 +53,7 @@ namespace SJZY.Track.Application.Services.TrackNode var resultDto = await _trackNodeRepository.GetPageList(queryParam); return resultDto; } - + /// /// 获取详情 /// @@ -62,9 +63,9 @@ namespace SJZY.Track.Application.Services.TrackNode public async Task GetDetail(int nodeid) { var resultDto = await _trackNodeRepository.GetDetail(nodeid); - return new UnifyResultDto(true,resultDto); + return new UnifyResultDto(true, resultDto); } - + /// /// 获取分页轨迹字典,下拉框用的 /// @@ -83,13 +84,16 @@ namespace SJZY.Track.Application.Services.TrackNode private async Task AddAsync(EditTrackNodeInput input) { #region 业务校验 - if(string.IsNullOrEmpty(input.NodeName)|| string.IsNullOrEmpty(input.NodeEnName) || !input.SubSystemId.HasValue) + + if (string.IsNullOrEmpty(input.NodeName) || string.IsNullOrEmpty(input.NodeEnName) || + !input.SubSystemId.HasValue) { return new UnifyResultDto("200", "NodeName,NodeEnName,SubSystemId 必填", false); } - + var trackNodesEntitys = await _trackNodeRepository.GetListAsync(a => - a.SubSystemId == input.SubSystemId && (a.NodeName == input.NodeName || a.NodeEnName == input.NodeEnName)); + a.SubSystemId == input.SubSystemId && + (a.NodeName == input.NodeName || a.NodeEnName == input.NodeEnName)); if (trackNodesEntitys.Any()) { var trackNodeName = trackNodesEntitys.FirstOrDefault(a => a.NodeName == input.NodeName); @@ -97,14 +101,21 @@ namespace SJZY.Track.Application.Services.TrackNode { throw new BusinessException(message: "该子系统下节点名称已存在"); } + var trackNodeEnName = trackNodesEntitys.FirstOrDefault(a => a.NodeEnName == input.NodeEnName); if (trackNodeEnName != null) { throw new BusinessException(message: "该子系统下节点英文名称已存在"); } } + #endregion + if (!StringHelper.IsValidEnglishString(input.NodeEnName)) + { + return new UnifyResultDto("200", "节点英文名称必须是英文和常用英文符号", false); + } + var entity = ObjectMapper.Map(input); var isTrue = await _trackNodeRepository.InsertAsync(entity); @@ -114,11 +125,12 @@ namespace SJZY.Track.Application.Services.TrackNode private async Task UpdateAsync(EditTrackNodeInput input) { #region 业务校验 - if(string.IsNullOrEmpty(input.NodeName)|| string.IsNullOrEmpty(input.NodeEnName) ) + + if (string.IsNullOrEmpty(input.NodeName) || string.IsNullOrEmpty(input.NodeEnName)) { return new UnifyResultDto("200", "NodeName,NodeEnName 必填", false); } - + var trackNodesEntitys = await _trackNodeRepository.GetFirstAsync(a => a.Id == input.Id); if (trackNodesEntitys == null) { @@ -136,19 +148,21 @@ namespace SJZY.Track.Application.Services.TrackNode private async Task DeleteAsync(EditTrackNodeInput input) { - if(input.Id <=0 || !input.SubSystemId.HasValue) + if (input.Id <= 0 || !input.SubSystemId.HasValue) { return new UnifyResultDto("200", "SubSystemId 必填", false); } - - var trackStatus = await _trackStatusRepository.GetFirstAsync(val => val.Node == input.Id && val.SubSystemId == input.SubSystemId); - if(trackStatus!=null) + + var trackStatus = + await _trackStatusRepository.GetFirstAsync(val => + val.Node == input.Id && val.SubSystemId == input.SubSystemId); + if (trackStatus != null) { return new UnifyResultDto("200", "删除失败,该节点已被使用", false); } - + var rows = await _trackNodeRepository.DeleteById(input.Id); - return new UnifyResultDto("200", "删除成功", rows>0); + return new UnifyResultDto("200", "删除成功", rows > 0); } #endregion