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; } /// /// 创建预警模板,存在则更新 /// /// /// [HttpPost("ModifyForewarning")] public async ValueTask ModifyForewarning(CreateRuleFactorRequest input) { var factors = ObjectMapper.Map(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(input); var ruleTemplateId = await _ruleRepository.CreateForewarning(newRuleTemplate, ruleCollects); factors.Id = ruleTemplateId.ToString(); return new UnifyResultDto(true,"保存成功"); } /// /// 修改时效 /// [HttpPost("ModifyTimeliness")] public async ValueTask 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(); 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, "更新成功"); } /// /// 查询预警模板列表 /// /// [HttpPost("QueryForewarning")] public async Task QueryForewarning(QueryForewarningRequest input) { var result = await _ruleRepository.QueryForewarning(input); return new UnifyResultDto(true, result); } /// /// 查询预警规则列表 /// [HttpPost("QueryForewarningRules")] public async Task QueryForewarningRules(QueryForewarningRuleRequest input) { var result = await _ruleCollectRepository.QueryForewarningRule(input); return new UnifyResultDto(true, result); } /// /// 发送预警通知 /// [HttpPost("SendForewarningNotification")] public void SendForewarningNotification() { } }