track/src/SJZY.Track.Application/Services/ForewarningServices/ForewarningService.cs
2024-07-24 08:54:56 +08:00

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()
{
}
}