using DataSharing.RawData; using Hotline.Share.Dtos.Order; using Hotline.Share.Enums.DataSharing; using MapsterMapper; using Microsoft.Extensions.Logging; using XF.Domain.Repository; namespace DataSharing.Police110.DaoShu110 { /// /// 道枢110 /// public class DaoShuService : IPoliceService { private readonly IMapper _mapper; private readonly ILogger _logger; private readonly IRepository _policeSendChainAlarmDsRepository; private readonly IRepository _policeSendChainDealDsRepository; private readonly IRepository _dsOrderRepository; private readonly ISharingConfigurationManager _sharingConfigurationManager; /// /// /// /// /// /// /// /// /// public DaoShuService(IMapper mapper, ILogger logger, IRepository policeSendChainAlarmDsRepository, IRepository policeSendChainDealDsRepository, IRepository dsOrderRepository, ISharingConfigurationManager sharingConfigurationManager) { _mapper = mapper; _logger = logger; _policeSendChainAlarmDsRepository = policeSendChainAlarmDsRepository; _policeSendChainDealDsRepository = policeSendChainDealDsRepository; _dsOrderRepository = dsOrderRepository; _sharingConfigurationManager = sharingConfigurationManager; } /// /// 组装110数据,12345警情工单推送到110 /// /// /// public async Task InitPoliceSendChainAlarmAsync(OrderDto orderDto, CancellationToken cancellationToken) { var areaCodeDefu = _sharingConfigurationManager.GetCityCode(); ConfigurationPoliceDS config = new(); if (_sharingConfigurationManager.IsCity(ConfigurationConsts.YiBin)) config = _sharingConfigurationManager.GetYiBinConfig().PoliceDS; var registerNo = string.IsNullOrEmpty(orderDto.AcceptorId) == true ? "1001" : orderDto.AcceptorId.Substring(orderDto.AcceptorId.Length - 6); var Content = orderDto.Content.Length > 290 ? orderDto.Content.Substring(0, 290) : orderDto.Content; DsPoliceSendChainAlarmDs policeSend = new() { SerialNumber = orderDto.ExternalId, AlarmReceiptNumber = orderDto.ExternalId, RegisterNo = registerNo, CallPoliceNumber = string.IsNullOrEmpty(orderDto.FromPhone) == true ? orderDto.Contact : orderDto.FromPhone, CallPoliceName = orderDto.FromName, PhoneNumber = orderDto.Contact, CallPoliceContent = Content, PoliceTypeCode = "", PoliceTypeName = "", JurisdictionalUnitCode = config.GXDWDM, JurisdictionalUnitName = config.GXDWMC, JurisdictionalUnitNumber = config.GXDWDH, AlarmReceivingUnitCode = "12345", AlarmReceivingUnitName = "12345热线中心", CallPoliceTime = Convert.ToDateTime(orderDto.CreationTime), PushTime = DateTime.Now, AlarmReceptionType = "0", AreaCode = orderDto.AreaCode.Substring(0, 6), CallPoliceAddress = orderDto.FullAddress, OrderId = orderDto.Id }; if (string.IsNullOrEmpty(policeSend.AlarmReceiptNumber)) { policeSend.AlarmReceiptNumber = areaCodeDefu + "12345" + orderDto.No; policeSend.SerialNumber = areaCodeDefu + "12345" + orderDto.No; } //修改外部唯一ID var orderData = await _dsOrderRepository.GetAsync(p => p.OrderId == orderDto.Id, cancellationToken); if (orderData != null) { orderData.ExternalId = policeSend.AlarmReceiptNumber; await _dsOrderRepository.UpdateAsync(orderData, cancellationToken); } //查询是否有此工单,如果没有新增此工单 var data = await _policeSendChainAlarmDsRepository.GetAsync(p => p.OrderId == orderDto.Id, cancellationToken); if (data == null) await _policeSendChainAlarmDsRepository.AddAsync(policeSend, cancellationToken); } /// /// 110的非警情工单获取办理信息 /// /// /// public async Task InitPoliceSendChainDealAsync(OrderFlowDto dto, CancellationToken cancellationToken) { var data = await _policeSendChainDealDsRepository.GetAsync(p => p.OrderId == dto.Order.Id && p.DisposalType == (int)EDsDisposalType.OrderFiled, cancellationToken); var actualOpinion = dto.Order.ActualOpinion.Length > 300 ? dto.Order.ActualOpinion.Substring(0, 280) : dto.Order.ActualOpinion; var feedbackPersonNumber = string.IsNullOrEmpty(dto.Order.AcceptorId) == true ? "1001" : dto.Order.AcceptorId.Substring(dto.Order.AcceptorId.Length - 6); if (data == null) { data = new() { AlarmReceiptNumber = dto.Order.ExternalId, FeedbackTime = dto.Order.ActualHandleTime, DisposalSituation = actualOpinion, ResultDescription = actualOpinion, FeedbackPersonNumber = feedbackPersonNumber, FeedbackPersonName = dto.Order.ActualHandlerName, FeedbackUnitCode = dto.Order.ActualHandleOrgCode, FeedbackUnitName = dto.Order.ActualHandleOrgName, WarehousingTime = DateTime.Now, DisposalType = 1, OrderId = dto.Order.Id }; await _policeSendChainDealDsRepository.AddAsync(data, cancellationToken); } else { data.AlarmReceiptNumber = dto.Order.ExternalId; data.FeedbackTime = dto.Order.ActualHandleTime; data.DisposalSituation = actualOpinion; data.ResultDescription = actualOpinion; data.FeedbackPersonNumber = feedbackPersonNumber; data.FeedbackPersonName = dto.Order.ActualHandlerName; data.FeedbackUnitCode = dto.Order.ActualHandleOrgCode; data.FeedbackUnitName = dto.Order.ActualHandleOrgName; data.WarehousingTime = DateTime.Now; await _policeSendChainDealDsRepository.UpdateAsync(data, cancellationToken); } } /// /// 110警情工单退回 /// /// /// /// public async Task ReturnPoliceAsync(OrderDto orderDto, CancellationToken cancellationToken) { var checkData = await _policeSendChainDealDsRepository.AnyAsync(p => p.AlarmReceiptNumber == orderDto.ExternalId && p.DisposalType == (int)EDsDisposalType.Return, cancellationToken); if (!checkData) { var actualOpinion = orderDto.ActualOpinion.Length > 100 ? orderDto.ActualOpinion.Substring(0, 80) : orderDto.ActualOpinion; var dataPolice = new DsPoliceSendChainDealDs() { OrderId = orderDto.Id, AlarmReceiptNumber = orderDto.ExternalId, ReturnName = orderDto.ActualHandlerName, ReturnUnit = orderDto.ActualHandleOrgName, ReturnOpinion = actualOpinion, ReturnTime = orderDto.ActualHandleTime, WarehousingTime = DateTime.Now, DisposalType = 2 }; await _policeSendChainDealDsRepository.AddAsync(dataPolice, cancellationToken); } } /// /// 110回访数据 /// /// /// /// public async Task Visit(PublishVisitDto dto, CancellationToken cancellationToken) { var VisitResult = dto.SubjectResultSatifyCode switch { "2" => "3", "4" or "5" => "1", _ => "2", }; var checkData = await _policeSendChainDealDsRepository.GetAsync(p => p.AlarmReceiptNumber == dto.Order.ExternalId && p.DisposalType == (int)EDsDisposalType.Visit, cancellationToken); string visitRemark = "默认评价"; if (!string.IsNullOrEmpty(dto.VisitRemark)) { visitRemark = visitRemark.Length > 140 ? dto.VisitRemark.Substring(0, 140) : dto.VisitRemark; } if (checkData == null) { checkData = new() { AlarmReceiptNumber = dto?.Order?.ExternalId, RevisitTime = dto.VisitTime, CheckingContent = visitRemark, VisitContent = visitRemark, VisitResult = VisitResult, DisposalType = 3 }; await _policeSendChainDealDsRepository.AddAsync(checkData, cancellationToken); } else { checkData.AlarmReceiptNumber = dto?.Order?.ExternalId; checkData.RevisitTime = dto.VisitTime; checkData.CheckingContent = visitRemark; checkData.VisitContent = visitRemark; checkData.VisitResult = VisitResult; await _policeSendChainDealDsRepository.UpdateAsync(checkData, cancellationToken); } } } }