128 lines
4.6 KiB
C#
128 lines
4.6 KiB
C#
using System.Diagnostics.CodeAnalysis;
|
|
using AutoMapper;
|
|
using SJZY.Track.Application.Helpers;
|
|
using SJZY.Track.Domain.Aggregates.ForewarningAggregate;
|
|
using SJZY.Track.Domain.Dtos.Forewarning;
|
|
using SqlSugar;
|
|
|
|
namespace SJZY.Track.Application.Services.ForewarningServices;
|
|
|
|
[ApiExplorerSettings(GroupName = "预警服务")]
|
|
[Route("/ForewarningService")]
|
|
public class ForewarningService: ApplicationService
|
|
{
|
|
readonly IRuleRepository _ruleRepository;
|
|
IRuleFactorRepository _ruleFactorRepository;
|
|
private IRuleCollectRepository _ruleCollectRepository;
|
|
|
|
public ForewarningService(IRuleRepository ruleRepository
|
|
,IRuleFactorRepository ruleFactorRepository
|
|
, IRuleCollectRepository ruleCollectRepository)
|
|
{
|
|
_ruleRepository = ruleRepository;
|
|
_ruleFactorRepository = ruleFactorRepository;
|
|
_ruleCollectRepository = ruleCollectRepository;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 创建预警模板,存在则更新
|
|
/// </summary>
|
|
/// <param name="input"></param>
|
|
/// <returns></returns>
|
|
[HttpPost("ModifyForewarning")]
|
|
public async ValueTask<UnifyResultDto> ModifyForewarning(CreateRuleFactorRequest input)
|
|
{
|
|
var factors = ObjectMapper.Map<CreateRuleFactorRequest,RuleFactorEntity>(input);
|
|
var ruleCollects = ForewarningFactorHelper.GetFactorItem(factors);
|
|
|
|
//todo 原子性没有保证,后续可能需要调整
|
|
if (input.RuleId > 0)
|
|
{
|
|
await _ruleFactorRepository.DeleteByIdAsync(input.RuleId.ToString());
|
|
}
|
|
|
|
if (input.RuleId > 0)
|
|
{
|
|
var ruleTemplate = await _ruleRepository.GetFirstAsync(val=>val.Id == input.RuleId);
|
|
if (ruleTemplate == null)
|
|
return new UnifyResultDto(false,"规则不存在");
|
|
|
|
ruleTemplate.Name = input.Name;
|
|
ruleTemplate.CustomId = input.CustomId;
|
|
|
|
await _ruleFactorRepository.IndexDocumentAsync(factors);
|
|
await _ruleRepository.UpdateForewarning(ruleTemplate, ruleCollects);
|
|
return new UnifyResultDto(true,"保存成功");
|
|
}
|
|
|
|
var newRuleTemplate = ObjectMapper.Map<CreateRuleFactorRequest, RuleEntity>(input);
|
|
var ruleTemplateId = await _ruleRepository.CreateForewarning(newRuleTemplate, ruleCollects);
|
|
factors.Id = ruleTemplateId.ToString();
|
|
return new UnifyResultDto(true,"保存成功");
|
|
}
|
|
|
|
/// <summary>
|
|
/// 修改时效
|
|
/// </summary>
|
|
[HttpPost("ModifyTimeliness")]
|
|
public async ValueTask<UnifyResultDto> ModifyTimeliness(ModifyTimelinessRequest input)
|
|
{
|
|
var ruleIds = input.Items.Select(val=>val.Id).ToList();
|
|
var ruleCollect = await _ruleCollectRepository.GetListAsync(val => ruleIds.Contains(val.Id) && val.RuleId == input.RuleId);
|
|
if (ruleCollect == null|| ruleCollect.Count == 0)
|
|
throw new BusinessException(message:"规则不存在");
|
|
|
|
var ruleMaps = ruleCollect.ToDictionary(val => val.Id);
|
|
var notModifyList = new List<int>();
|
|
foreach (var item in input.Items)
|
|
{
|
|
if (!ruleMaps.TryGetValue(item.Id, out var rule))
|
|
{
|
|
notModifyList.Add(item.Id);
|
|
continue;
|
|
}
|
|
|
|
rule.Remind= item.Remind;
|
|
rule.Timeliness = item.Timeliness;
|
|
rule.Count = item.Count;
|
|
}
|
|
|
|
await _ruleCollectRepository.UpdateRangeAsync(ruleCollect,val=>val.RuleId==input.RuleId);
|
|
|
|
if (notModifyList.Count > 0)
|
|
return new UnifyResultDto(true, $"更新成功,规则{string.Join(",", notModifyList)}不存在");
|
|
|
|
return new UnifyResultDto(true, "更新成功");
|
|
}
|
|
|
|
/// <summary>
|
|
/// 查询预警模板列表
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
[HttpPost("QueryForewarning")]
|
|
public async Task<UnifyResultDto> QueryForewarning(QueryForewarningRequest input)
|
|
{
|
|
var result = await _ruleRepository.QueryForewarning(input);
|
|
return new UnifyResultDto(true, result);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 查询预警规则列表
|
|
/// </summary>
|
|
[HttpPost("QueryForewarningRules")]
|
|
public async Task<UnifyResultDto> QueryForewarningRules(QueryForewarningRuleRequest input)
|
|
{
|
|
var result = await _ruleCollectRepository.QueryForewarningRule(input);
|
|
return new UnifyResultDto(true, result);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 发送预警通知
|
|
/// </summary>
|
|
[HttpPost("SendForewarningNotification")]
|
|
public void SendForewarningNotification()
|
|
{
|
|
|
|
}
|
|
|
|
} |