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