using DataSharing.FwDataExchange; using DataSharing.Province; using DataSharing.RawData; using DataSharing.Share.Dtos; using DataSharing.Share.Dtos.FwDataExchange; using DataSharing.Share.Dtos.HotlineSetting; using DataSharing.Share.Dtos.Province.XieTong.Receive; using DotNetCore.CAP; using Hotline.Share.Dtos.DataSharing.PusherHotlineDto; using Hotline.Share.Dtos.File; using Hotline.Share.Dtos.Order; using Hotline.Share.Enums.Order; using MapsterMapper; using MediatR; using Microsoft.AspNetCore.Mvc; using XF.Domain.Filters; using XF.Domain.Repository; namespace DataSharing.Host.Controllers { /// /// 下行,省平台调用 /// public class ProvinceController : BaseController { #region 注入 private readonly IMapper _mapper; private readonly IMediator _mediator; private readonly ICapPublisher _capPublisher; private readonly IChannelConfigurationManager _channelConfigurationManager; private readonly IRepository _dataOrderRepository; private readonly IRepository _dsReceiveProvinceDataRepository; private readonly IRepository _getCaseMaterialInfoRepository; private readonly IRepository _getCaseBackApplyRepository; private readonly IRepository _sendCaseInfoRepository; private readonly FwClient _fwClient; private readonly IRepository _sendFwErrorDataRepository; /// /// /// /// /// /// /// /// /// /// /// /// /// /// public ProvinceController(IMapper mapper, IMediator mediator, ICapPublisher capPublisher, IChannelConfigurationManager channelConfigurationManager, IRepository dataOrderRepository, IRepository dsReceiveProvinceDataRepository, IRepository getCaseMaterialInfoRepository, IRepository getCaseBackApplyRepository, IRepository sendCaseInfoRepository, FwClient fwClient, IRepository sendFwErrorDataRepository) { _mapper = mapper; _mediator = mediator; _capPublisher = capPublisher; _channelConfigurationManager = channelConfigurationManager; _dataOrderRepository = dataOrderRepository; _dsReceiveProvinceDataRepository = dsReceiveProvinceDataRepository; _getCaseMaterialInfoRepository = getCaseMaterialInfoRepository; _getCaseBackApplyRepository = getCaseBackApplyRepository; _sendCaseInfoRepository = sendCaseInfoRepository; _fwClient = fwClient; _sendFwErrorDataRepository = sendFwErrorDataRepository; } #endregion /// /// 服务工单交办接口--已完成-----1 /// /// /// [HttpPost("rest/receive_case_info")] public async Task ReceiveCaseInfo([FromBody] ReceiveCaseInfoRequest receiveCaseInfo) { // 验证 if (receiveCaseInfo is null || receiveCaseInfo.paras is null) { return OpenResponse.Ok(GetDataBaseReponse.Failed("数据解析失败")); } //验证接收的数据是否正确 string strResult = receiveCaseInfo.paras.Validate(); if (!string.IsNullOrEmpty(strResult)) return OpenResponse.Ok(GetDataBaseReponse.Failed(strResult)); //转换数据 var dto = receiveCaseInfo.paras; var id = await InitReceiveProvinceData(dto.CaseSerial, dto.CliengGuid, "receive_case_info", System.Text.Json.JsonSerializer.Serialize(dto)); //处理组装数据,推送数据 var data = _mapper.Map(dto); data.IsProvince = true; if (dto.CaseSource.ToLower() == "zmhd".ToLower()) { data.SourceChannel = "省政民互动"; data.SourceChannelCode = "SZMHD"; if (dto.TrowGuid == "【政民互动直派】") data.IsProvince = false; } else { data.SourceChannel = "省12345平台"; data.SourceChannelCode = "S12345"; } data.Source = Hotline.Share.Enums.Order.ESource.ProvinceStraight; //处理性别 data.FromGender = dto.AppLicantSex switch { "0" => Hotline.Share.Enums.Order.EGender.Female, "1" => Hotline.Share.Enums.Order.EGender.Male, "2" => Hotline.Share.Enums.Order.EGender.Unknown, _ => Hotline.Share.Enums.Order.EGender.Unknown, }; //处理证件类型 switch (dto.CertifiCateType) { case "10": data.LicenceTypeCode = "10"; break; case "20": data.LicenceTypeCode = "40"; break; case "30": data.LicenceTypeCode = "55"; break; case "40": data.LicenceTypeCode = "57"; break; } data.AcceptTypeCode = dto.CaseType; //处理紧急程度 switch (dto.CaseIsUrgent) { case "10": data.EmergencyLevel = Hotline.Share.Enums.Order.EEmergencyLevel.QuiteEmergency; break; case "20": data.EmergencyLevel = Hotline.Share.Enums.Order.EEmergencyLevel.Emergency; break; case "30": data.EmergencyLevel = Hotline.Share.Enums.Order.EEmergencyLevel.Normal; break; } //经纬度处理 var lngLat = dto.CaseLngLat.Split(','); if (lngLat != null && lngLat.Length == 2) { data.Longitude = Convert.ToDouble(lngLat[0]); data.Latitude = Convert.ToDouble(lngLat[1]); } if (data.Contact == "信息保密") data.Contact = ""; data.City = "宜宾市"; //处理热点 if (!string.IsNullOrEmpty(dto.CaseAccord)) { data.HotspotExternal = dto.CaseAccord; string hotspotExternal = ""; var length = dto.CaseAccord.Length - 2; if (dto.CaseAccord.Length - 2 > 0) { for (int i = length; i > 0; i = i - 2) { hotspotExternal += dto.CaseAccord.Substring(0, i) + ","; } } if (!string.IsNullOrEmpty(hotspotExternal)) { data.HotspotExternal = hotspotExternal.Substring(0, hotspotExternal.Length - 1); } } data.IdentityType = Hotline.Share.Enums.Order.EIdentityType.Citizen; data.Transpond = false; data.IsEnforcementOrder = false; if (!string.IsNullOrEmpty(id)) { data.Files = await GetFileData(dto.CliengGuid, dto.CaseSerial, "受理上传"); //await _capPublisher.PublishAsync(DataSharing.Share.Mq.EventNames.SharingOrderCreation, data, cancellationToken: HttpContext.RequestAborted); //var result = await _hotlineClient.ReceiveOrderAsync(data, HttpContext.RequestAborted); var result = await _fwClient.RequestNoTokenAsync("api/v1/Order/add-anonymous", "Post", System.Text.Json.JsonSerializer.Serialize(data)); return OpenResponse.Ok(GetDataBaseReponse.Success("您已成功提交数据!")); } else return OpenResponse.Ok(GetDataBaseReponse.Failed("接口调用失败!")); } /// /// 服务工单退回反馈接口--已完成-----1 /// /// 退回反馈 /// [HttpPost("get_case_back_result")] public async Task GetCaseBackResult([FromBody] GetCaseBackResultRequest receiveBackResult) { // 验证 if (receiveBackResult is null || receiveBackResult.paras is null) return OpenResponse.Ok(GetDataBaseReponse.Failed("数据解析失败")); //验证接收的数据是否正确 string strResult = receiveBackResult.paras.Validate(); if (!string.IsNullOrEmpty(strResult)) OpenResponse.Ok(GetDataBaseReponse.Failed(strResult)); //推送老系统数据 var isCheck = await SendDataFw(receiveBackResult.paras.CaseSerial, "api/receive/get_case_back_result", System.Text.Json.JsonSerializer.Serialize(receiveBackResult), "Post"); if (isCheck) { return OpenResponse.Ok(GetDataBaseReponse.Success("您已成功提交数据!")); } //转换数据 var dto = receiveBackResult.paras; var data = await _getCaseBackApplyRepository.GetAsync(p => p.CaseSerial == dto.CaseSerial, HttpContext.RequestAborted); if (data == null) return OpenResponse.Ok(GetDataBaseReponse.Failed("接口调用失败!")); //添加数据 var id = await InitReceiveProvinceData(dto.CaseSerial, dto.CliengGuid, "get_case_back_result", System.Text.Json.JsonSerializer.Serialize(dto)); if (!string.IsNullOrEmpty(id)) { var dataBack = new OrderSendBackResultDto() { Id = data.OrderSendBackId, Reason = dto.BackReason, Result = dto.Result == "1" ? 1 : 0, Source = "province", Files = await GetFileData(dto.CliengGuid, dto.CaseSerial, "工单退回审核") }; //向业务系统推送消息 await _capPublisher.PublishAsync(DataSharing.Share.Mq.EventNames.SharingOrderReturnFeedback, dataBack, cancellationToken: HttpContext.RequestAborted); return OpenResponse.Ok(GetDataBaseReponse.Success("您已成功提交数据!")); } else return OpenResponse.Ok(GetDataBaseReponse.Failed("接口调用失败!")); } /// /// 督办工单派发接口--已完成-----1 /// /// 督办工单对象 /// [HttpPost("send_supervise_info")] public async Task SendSuperviseInfo([FromBody] SendSuperviseInfoRequest receiveSendSuperviseInfo) { // 验证 if (receiveSendSuperviseInfo is null || receiveSendSuperviseInfo.paras is null) return OpenResponse.Ok(GetDataBaseReponse.Failed("数据解析失败")); string strResult = receiveSendSuperviseInfo.paras.Validate(); if (!string.IsNullOrEmpty(strResult)) return OpenResponse.Ok(GetDataBaseReponse.Failed(strResult)); //推送老系统数据 var isCheck = await SendDataFw(receiveSendSuperviseInfo.paras.CaseSerial, "api/receive/send_supervise_info", System.Text.Json.JsonSerializer.Serialize(receiveSendSuperviseInfo), "Post"); if (isCheck) { return OpenResponse.Ok(GetDataBaseReponse.Success("您已成功提交数据!")); } //转换数据 var dto = receiveSendSuperviseInfo.paras; //添加数据 var id = await InitReceiveProvinceData(dto.CaseSerial, dto.CliengGuid, "send_supervise_info", System.Text.Json.JsonSerializer.Serialize(dto)); if (!string.IsNullOrEmpty(id)) { ProvinceSendOrderSuperviseDto orderSuperviseDto = new ProvinceSendOrderSuperviseDto() { ProvinceOrderSuperviseDto = _mapper.Map(dto), Files = await GetFileData(dto.CliengGuid, dto.CaseSerial, "督办工单派发") }; //向业务系统推送消息 await _capPublisher.PublishAsync(DataSharing.Share.Mq.EventNames.SharingOrderSupervise, orderSuperviseDto, cancellationToken: HttpContext.RequestAborted); return OpenResponse.Ok(GetDataBaseReponse.Success("您已成功提交数据!")); } else return OpenResponse.Ok(GetDataBaseReponse.Failed("接口调用失败!")); } /// /// 服务工单催单接口--已完成-----1 /// /// 催单对象 /// [HttpPost("remind_case_info")] public async Task RemindCaseInfo([FromBody] RemindCaseInfoRequest receiveRemindCaseInfo) { // 验证 if (receiveRemindCaseInfo is null || receiveRemindCaseInfo.paras is null) return OpenResponse.Ok(GetDataBaseReponse.Failed("数据解析失败")); string strResult = receiveRemindCaseInfo.paras.Validate(); if (!string.IsNullOrEmpty(strResult)) return OpenResponse.Ok(GetDataBaseReponse.Failed(strResult)); //推送老系统数据 var isCheck = await SendDataFw(receiveRemindCaseInfo.paras.CaseSerial, "api/receive/remind_case_info", System.Text.Json.JsonSerializer.Serialize(receiveRemindCaseInfo), "Post"); if (isCheck) { return OpenResponse.Ok(GetDataBaseReponse.Success("您已成功提交数据!")); } //转换数据 var dto = receiveRemindCaseInfo.paras; //添加数据 var id = await InitReceiveProvinceData(dto.CaseSerial, dto.CliengGuid, "remind_case_info", System.Text.Json.JsonSerializer.Serialize(dto)); if (!string.IsNullOrEmpty(id)) { var data = _mapper.Map(dto); data.DsBisId = dto.CliengGuid; data.Files = await GetFileData(dto.CliengGuid, dto.CaseSerial, "工单催单"); //向业务系统推送消息 await _capPublisher.PublishAsync(DataSharing.Share.Mq.EventNames.SharingOrderRemind, data, cancellationToken: HttpContext.RequestAborted); return OpenResponse.Ok(GetDataBaseReponse.Success("您已成功提交数据!")); } else return OpenResponse.Ok(GetDataBaseReponse.Failed("接口调用失败!")); } /// /// 服务工单甄别结果接口--已完成-----1 /// /// 服务工单甄别结果对象 /// [HttpPost("screen_case_result_receive")] public async Task ScreenCaseResultReceive([FromBody] ScreenCaseResultReceiveRequest receiveScreenCaseResultReceive) { // 验证 if (receiveScreenCaseResultReceive is null || receiveScreenCaseResultReceive.paras is null) return OpenResponse.Ok(GetDataBaseReponse.Failed("数据解析失败")); string strResult = receiveScreenCaseResultReceive.paras.Validate(); if (!string.IsNullOrEmpty(strResult)) return OpenResponse.Ok(GetDataBaseReponse.Failed(strResult)); //推送老系统数据 var isCheck = await SendDataFw(receiveScreenCaseResultReceive.paras.CaseSerial, "api/receive/screen_case_result_receive", System.Text.Json.JsonSerializer.Serialize(receiveScreenCaseResultReceive), "Post"); if (isCheck) { return OpenResponse.Ok(GetDataBaseReponse.Success("您已成功提交数据!")); } //转换数据 var dto = receiveScreenCaseResultReceive.paras; //添加数据 var id = await InitReceiveProvinceData(dto.CaseSerial, dto.CliengGuid, "screen_case_result_receive", System.Text.Json.JsonSerializer.Serialize(dto)); if (!string.IsNullOrEmpty(id)) { ProvinceSendScreenResultDto screenResultDto = new ProvinceSendScreenResultDto() { ProvinceScreenResult = _mapper.Map(dto), Source = "province", Files = await GetFileData(dto.CliengGuid, dto.CaseSerial, "工单甄别结果") }; //向业务系统推送消息 await _capPublisher.PublishAsync(DataSharing.Share.Mq.EventNames.SharingOrderScreen, screenResultDto, cancellationToken: HttpContext.RequestAborted); return OpenResponse.Ok(GetDataBaseReponse.Success("您已成功提交数据!")); } else return OpenResponse.Ok(GetDataBaseReponse.Failed("接口调用失败!")); } /// /// 服务工单延时审核结果接口---已完成-----1 /// /// 延时审核结果对象 /// [HttpPost("delay_case_result_receive")] public async Task DelayCaseResultReceive([FromBody] DelayCaseResultRequest receiveDelayCaseResult) { // 验证 if (receiveDelayCaseResult is null || receiveDelayCaseResult.paras is null) return OpenResponse.Ok(GetDataBaseReponse.Failed("数据解析失败")); string strResult = receiveDelayCaseResult.paras.Validate(); if (!string.IsNullOrEmpty(strResult)) return OpenResponse.Ok(GetDataBaseReponse.Failed(strResult)); //推送老系统数据 var isCheck = await SendDataFw(receiveDelayCaseResult.paras.CaseSerial, "api/receive/delay_case_result_receive", System.Text.Json.JsonSerializer.Serialize(receiveDelayCaseResult), "Post"); if (isCheck) { return OpenResponse.Ok(GetDataBaseReponse.Success("您已成功提交数据!")); } //转换数据 var dto = receiveDelayCaseResult.paras; //添加数据 var id = await InitReceiveProvinceData(dto.CaseSerial, dto.CliengGuid, "delay_case_result_receive", System.Text.Json.JsonSerializer.Serialize(dto)); if (!string.IsNullOrEmpty(id)) { var listFiles = await GetFileData(dto.CliengGuid, dto.CaseSerial, "工单延期审核结果"); ProvinceSendDelayResultDto delayResultDto = new() { IsPass = dto.AuditResult == "1", Opinion = dto.AuditOpinion, No = dto.CaseSerial, Files = listFiles, Source = "province" }; //向业务系统推送消息 await _capPublisher.PublishAsync(DataSharing.Share.Mq.EventNames.SharingOrderDelayResult, delayResultDto, cancellationToken: HttpContext.RequestAborted); return OpenResponse.Ok(GetDataBaseReponse.Success("您已成功提交数据!")); } else return OpenResponse.Ok(GetDataBaseReponse.Failed("接口调用失败!")); } /// /// 服务工单交办补充诉求接口---已完成-----1 /// /// 交办补充诉求对象 /// [HttpPost("supply_case_info_receive")] public async Task SupplyCaseInfoReceive([FromBody] SupplyCaseInfoRequest receiveSupplyCaseInfo) { // 验证 if (receiveSupplyCaseInfo is null || receiveSupplyCaseInfo.paras is null) return OpenResponse.Ok(GetDataBaseReponse.Failed("数据解析失败")); string strResult = receiveSupplyCaseInfo.paras.Validate(); if (!string.IsNullOrEmpty(strResult)) return OpenResponse.Ok(GetDataBaseReponse.Failed(strResult)); //推送老系统数据 var isCheck = await SendDataFw(receiveSupplyCaseInfo.paras.CaseSerial, "api/receive/supply_case_info_receive", System.Text.Json.JsonSerializer.Serialize(receiveSupplyCaseInfo), "Post"); if (isCheck) { return OpenResponse.Ok(GetDataBaseReponse.Success("您已成功提交数据!")); } //转换数据 var dto = receiveSupplyCaseInfo.paras; //添加数据 var id = await InitReceiveProvinceData(dto.CaseSerial, dto.CliengGuid, "supply_case_info_receive", System.Text.Json.JsonSerializer.Serialize(dto)); if (!string.IsNullOrEmpty(id)) { //向业务系统推送消息 var dataOrder = await _dataOrderRepository.GetAsync(p => p.ProvinceNo == dto.CaseSerial, HttpContext.RequestAborted); if (dataOrder != null) { var listFiles = await GetFileData(dto.CliengGuid, dto.CaseSerial, "工单补充"); AddOrderComplementDto complementDto = new AddOrderComplementDto { Opinion = dto.SupplyContent, OrderId = dataOrder.OrderId, DsBisId = dto.CliengGuid, Files = listFiles }; //向业务系统推送消息 await _capPublisher.PublishAsync(DataSharing.Share.Mq.EventNames.SharingOrderSupplements, complementDto, cancellationToken: HttpContext.RequestAborted); } return OpenResponse.Ok(GetDataBaseReponse.Success("您已成功提交数据!")); } else return OpenResponse.Ok(GetDataBaseReponse.Failed("接口调用失败!")); } /// /// 服务工单撤单接口---已完成-----1 /// /// 撤单对象 /// [HttpPost("revoke_case_info")] public async Task RevokeCaseInfo([FromBody] RevokeCaseInfoRequest receiveRevokeCaseInfo) { // 验证 if (receiveRevokeCaseInfo is null || receiveRevokeCaseInfo.paras is null) return OpenResponse.Ok(GetDataBaseReponse.Failed("数据解析失败")); string strResult = receiveRevokeCaseInfo.paras.Validate(); if (!string.IsNullOrEmpty(strResult)) return OpenResponse.Ok(GetDataBaseReponse.Failed(strResult)); //推送老系统数据 var isCheck = await SendDataFw(receiveRevokeCaseInfo.paras.CaseSerial, "api/receive/revoke_case_info", System.Text.Json.JsonSerializer.Serialize(receiveRevokeCaseInfo), "Post"); if (isCheck) { return OpenResponse.Ok(GetDataBaseReponse.Success("您已成功提交数据!")); } //转换数据 var dto = receiveRevokeCaseInfo.paras; //添加数据 var id = await InitReceiveProvinceData(dto.CaseSerial, dto.CliengGuid, "revoke_case_info", System.Text.Json.JsonSerializer.Serialize(dto)); if (!string.IsNullOrEmpty(id)) { CancelOrderDto cancelOrder = new() { Opinion = dto.RevokeReasion, ProvinceNo = dto.CaseSerial, Source = "province" }; //向业务系统推送消息 await _capPublisher.PublishAsync(DataSharing.Share.Mq.EventNames.SharingOrderRevoke, cancelOrder, cancellationToken: HttpContext.RequestAborted); return OpenResponse.Ok(GetDataBaseReponse.Success("您已成功提交数据!")); } else return OpenResponse.Ok(GetDataBaseReponse.Failed("接口调用失败!")); } /// /// 服务工单预警接口 /// /// 预警对象 /// [HttpPost("send_warn_info")] public async Task SendWarnInfo([FromBody] SendWarnInfoRequest receiveSendWarnInfo) { // 验证 if (receiveSendWarnInfo is null || receiveSendWarnInfo.paras is null) return OpenResponse.Ok(GetDataBaseReponse.Failed("数据解析失败")); string strResult = receiveSendWarnInfo.paras.Validate(); if (!string.IsNullOrEmpty(strResult)) return OpenResponse.Ok(GetDataBaseReponse.Failed(strResult)); //推送老系统数据 var isCheck = await SendDataFw(receiveSendWarnInfo.paras.CaseSerial, "api/receive/send_warn_info", System.Text.Json.JsonSerializer.Serialize(receiveSendWarnInfo), "Post"); if (isCheck) { return OpenResponse.Ok(GetDataBaseReponse.Success("您已成功提交数据!")); } //转换数据 var dto = receiveSendWarnInfo.paras; //添加数据 var id = await InitReceiveProvinceData(dto.CaseSerial, null, "send_warn_info", System.Text.Json.JsonSerializer.Serialize(dto)); if (!string.IsNullOrEmpty(id)) { //向业务系统推送消息 await _capPublisher.PublishAsync(DataSharing.Share.Mq.EventNames.SharingOrderWarning, _mapper.Map(dto), cancellationToken: HttpContext.RequestAborted); return OpenResponse.Ok(GetDataBaseReponse.Success("您已成功提交数据!")); } else return OpenResponse.Ok(GetDataBaseReponse.Failed("接口调用失败!")); } /// /// 交办工单满意度接收接口---已完成-----1 /// /// 交办工单满意度对象 /// [HttpPost("send_case_evl_result")] public async Task SendCaseEvlResult([FromBody] SendCaseEvlResultRequest receiveSendCaseEvlResult) { // 验证 if (receiveSendCaseEvlResult is null || receiveSendCaseEvlResult.paras is null) return OpenResponse.Ok(GetDataBaseReponse.Failed("数据解析失败")); string strResult = receiveSendCaseEvlResult.paras.Validate(); if (!string.IsNullOrEmpty(strResult)) return OpenResponse.Ok(GetDataBaseReponse.Failed(strResult)); //推送老系统数据 var isCheck = await SendDataFw(receiveSendCaseEvlResult.paras.CaseSerial, "api/receive/send_case_evl_result", System.Text.Json.JsonSerializer.Serialize(receiveSendCaseEvlResult), "Post"); if (isCheck) { return OpenResponse.Ok(GetDataBaseReponse.Success("您已成功提交数据!")); } //转换数据 var dto = receiveSendCaseEvlResult.paras; //添加数据 var id = await InitReceiveProvinceData(dto.CaseSerial, null, "send_case_evl_result", System.Text.Json.JsonSerializer.Serialize(dto)); if (!string.IsNullOrEmpty(id)) { ProvinceOrderVisitDto orderVisitDto = new() { ProvinceNo = dto.CaseSerial, VisitTime = Convert.ToDateTime(dto.ReplyTime), VisitContent = dto.ReplyContent, OrgProcessingResults = dto.ResultEvl, VisitType = Hotline.Share.Enums.Order.EVisitType.ArtificialVisit }; switch (orderVisitDto.OrgProcessingResults) { case "5": case "4": case "2": break; case "3": orderVisitDto.OrgProcessingResults = "4"; break; case "1": orderVisitDto.OrgProcessingResults = "2"; break; default: orderVisitDto.OrgProcessingResults = "4"; break; } //向业务系统推送消息 await _capPublisher.PublishAsync(DataSharing.Share.Mq.EventNames.SharingOrderEvlResult, orderVisitDto, cancellationToken: HttpContext.RequestAborted); return OpenResponse.Ok(GetDataBaseReponse.Success("您已成功提交数据!")); } else return OpenResponse.Ok(GetDataBaseReponse.Failed("接口调用失败!")); } /// /// 上报工单处理结果/退回接口---已完成-----1 /// /// 上报工单处理结果/退回对象 /// [HttpPost("get_case_result_send")] public async Task GetCaseReultSend([FromBody] GetCaseReultSendRequest receiveGetCaseReultSend) { // 验证 if (receiveGetCaseReultSend is null || receiveGetCaseReultSend.paras is null) return OpenResponse.Ok(GetDataBaseReponse.Failed("数据解析失败")); string strResult = receiveGetCaseReultSend.paras.Validate(); if (!string.IsNullOrEmpty(strResult)) return OpenResponse.Ok(GetDataBaseReponse.Failed(strResult)); //推送老系统数据 var isCheck = await SendDataFw(receiveGetCaseReultSend.paras.CaseSerial, "api/send/get_case_result_send", System.Text.Json.JsonSerializer.Serialize(receiveGetCaseReultSend), "Post"); if (isCheck) { return OpenResponse.Ok(GetDataBaseReponse.Success("您已成功提交数据!")); } //转换数据 var dto = receiveGetCaseReultSend.paras; //添加数据 var id = await InitReceiveProvinceData(dto.CaseSerial, dto.CliengGuid, "get_case_result_send", System.Text.Json.JsonSerializer.Serialize(dto)); if (!string.IsNullOrEmpty(id)) { //查询此工单 var tempData = await _sendCaseInfoRepository.GetAsync(p => p.CaseSerial == dto.CaseSerial, HttpContext.RequestAborted); if (tempData != null) { //将工单的办理状态改为办理完成,终止拉取办理信息 tempData.IsEnd = true; await _sendCaseInfoRepository.UpdateAsync(tempData, HttpContext.RequestAborted); var listFiles = await GetFileData(dto.CliengGuid, dto.CaseSerial, "办理上传"); OrderResultDto orderResult = new() { OrderId = tempData.OrderID, FinishType = dto.FinishType, Opinion = dto.FdBack, Files = listFiles, Source = "province" }; //向业务系统推送消息 await _capPublisher.PublishAsync(DataSharing.Share.Mq.EventNames.SharingOrderReultSend, orderResult, cancellationToken: HttpContext.RequestAborted); } return OpenResponse.Ok(GetDataBaseReponse.Success("您已成功提交数据!")); } else return OpenResponse.Ok(GetDataBaseReponse.Failed("接口调用失败!")); } /// /// 上报工单评价接口 /// /// 上报工单评价对象 /// [HttpPost("get_visit_info_send")] public async Task GetVisitInfoSend([FromBody] GetVisitInfoSendRequest receiveGetVisitInfoSend) { // 验证 if (receiveGetVisitInfoSend is null || receiveGetVisitInfoSend.paras is null) return OpenResponse.Ok(GetDataBaseReponse.Failed("数据解析失败")); string strResult = receiveGetVisitInfoSend.paras.Validate(); if (!string.IsNullOrEmpty(strResult)) return OpenResponse.Ok(GetDataBaseReponse.Failed(strResult)); //推送老系统数据 var isCheck = await SendDataFw(receiveGetVisitInfoSend.paras.CaseSerial, "api/send/get_visit_info_send", System.Text.Json.JsonSerializer.Serialize(receiveGetVisitInfoSend), "Post"); if (isCheck) { return OpenResponse.Ok(GetDataBaseReponse.Success("您已成功提交数据!")); } //转换数据 var dto = receiveGetVisitInfoSend.paras; //添加数据 var id = await InitReceiveProvinceData(dto.CaseSerial, dto.CliengGuid, "get_visit_info_send", System.Text.Json.JsonSerializer.Serialize(dto)); if (!string.IsNullOrEmpty(id)) { ProvinceOrderVisitDto orderVisitDto = new() { ProvinceNo = dto.CaseSerial, VisitTime = Convert.ToDateTime(dto.VisitTime), VisitContent = dto.VisitRemark, OrgProcessingResults = dto.SubjectResultSatify, VisitType = dto.VisitType switch { "DH" => Hotline.Share.Enums.Order.EVisitType.ArtificialVisit, "DX" => Hotline.Share.Enums.Order.EVisitType.SmsVisit, "WZ" => Hotline.Share.Enums.Order.EVisitType.WebVisit, "WX" => Hotline.Share.Enums.Order.EVisitType.WeChatVisit, "AP" => Hotline.Share.Enums.Order.EVisitType.AppVisit, _ => Hotline.Share.Enums.Order.EVisitType.OtherVisit, } }; //向业务系统推送消息 await _capPublisher.PublishAsync(DataSharing.Share.Mq.EventNames.SharingOrderEvlResult, orderVisitDto, cancellationToken: HttpContext.RequestAborted); return OpenResponse.Ok(GetDataBaseReponse.Success("您已成功提交数据!")); } else return OpenResponse.Ok(GetDataBaseReponse.Failed("接口调用失败!")); } /// /// 服务工单拓展信息交办---已完成-----1 /// /// 服务工单拓展信息交办 /// [HttpPost("rest/receive_case_extends")] public async Task ReceiveCaseExtends([FromBody] ReceiveCaseExtendsRequest receiveCaseExtendsRequest) { // 验证 if (receiveCaseExtendsRequest is null || receiveCaseExtendsRequest.paras is null) return OpenResponse.Ok(GetDataBaseReponse.Failed("数据解析失败")); string strResult = receiveCaseExtendsRequest.paras.Validate(); if (!string.IsNullOrEmpty(strResult)) return OpenResponse.Ok(GetDataBaseReponse.Failed(strResult)); //推送老系统数据 var isCheck = await SendDataFw(receiveCaseExtendsRequest.paras.CaseSerial, "api/receive/receive_case_extends", System.Text.Json.JsonSerializer.Serialize(receiveCaseExtendsRequest), "Post"); if (isCheck) { return OpenResponse.Ok(GetDataBaseReponse.Success("您已成功提交数据!")); } var data = receiveCaseExtendsRequest.paras; //添加数据 var id = await InitReceiveProvinceData(data.CaseSerial, null, "receive_case_extends", System.Text.Json.JsonSerializer.Serialize(data)); OrderExtensionDto orderExtension = new(); //扩展信息写入 switch (data.FormType.ToLower()) { case "yl"://医疗表单 //转换数据 orderExtension = _mapper.Map(data.FormMedical); orderExtension.OrderType = "医疗服务中心受理单"; break; case "zwfw"://四川政务服务网技术工单 //转换数据 orderExtension = _mapper.Map(data.FormNetWorktec); orderExtension.OrderType = "四川政务服务网技术中心受理单"; break; case "th"://电视购物及商铺购买退换货工单 //转换数据 orderExtension = _mapper.Map(data.FormReturnexChange); orderExtension.OrderType = "电视购物及商铺购买退换货中心受理单"; break; case "gsgl"://高速公路工单 //转换数据 orderExtension = _mapper.Map(data.FormExpressWay); orderExtension.OrderType = "高速公路投诉中心受理单"; break; case "xjgg"://电视台虚假广告工单 //转换数据 orderExtension = _mapper.Map(data.FormShamPub); orderExtension.OrderType = "电视台虚假广告中心受理单"; break; case "swfwsq"://12366热线诉求交办 //转换数据 orderExtension = _mapper.Map(data.FormTaxationComplaint); orderExtension.OrderType = "四川省12366热线诉求交办单"; break; case "swfwzx"://12366热线咨询交办 //转换数据 orderExtension = _mapper.Map(data.FormTaxationConsulting); orderExtension.OrderType = "四川省12366热线咨询交办单"; break; case "jtfwjd"://12328服务监督 //转换数据 orderExtension = _mapper.Map(data.FormTraffic); orderExtension.OrderType = "12328服务监督中心受理单"; break; case "yzxf"://邮政业消费者申诉 //转换数据 orderExtension = _mapper.Map(data.FormPost); orderExtension.OrderType = "邮政业消费者申诉受理单"; break; case "hbjb"://环保举报业务 //转换数据 orderExtension = _mapper.Map(data.FormEnvironMent); orderExtension.OrderType = "环保举报业务受理单"; break; case "scjgj"://12315个性化表单 break; default: break; } orderExtension.ProvinceNo = data.CaseSerial; orderExtension.OrderTypeCode = data.FormType.ToLower(); if (!string.IsNullOrEmpty(id)) { //向业务系统推送消息 await _capPublisher.PublishAsync(DataSharing.Share.Mq.EventNames.SharingOrderExtends, orderExtension, cancellationToken: HttpContext.RequestAborted); return OpenResponse.Ok(GetDataBaseReponse.Success("您已成功提交数据!")); } else return OpenResponse.Ok(GetDataBaseReponse.Failed("接口调用失败!")); } /// /// 服务工单材料接口 /// /// 工单材料信息 /// 材料文件 /// [HttpPost("get_case_material_info")] public async Task GetCaseMaterialInfo([FromForm] string @params, List files) { // 上传文件为必须 if (files is null || files.Count <= 0) { return OpenResponse.Ok(GetDataBaseReponse.Failed("上传文件为必须")); } // @params = "{ \"token\": \"\", \"paras\":{ \"CaseSerial\":\"RGDH99511500240304000100\", \"MaterialType\":\"10\", \"CliengGuid\":\"91541fea-e1a5-4798-bc43-b25cc77ec6b7\", \"AreaCode\":\"511500\"} }"; // 解析附件信息 var vmCaseMaterialInfo = System.Text.Json.JsonSerializer.Deserialize(@params); if (vmCaseMaterialInfo is null || vmCaseMaterialInfo.paras is null) { return OpenResponse.Ok(GetDataBaseReponse.Failed("数据解析失败")); } GetCaseMaterialInfoModel tmpCaseMaterialInfo = vmCaseMaterialInfo.paras; // 验证 string strResult = tmpCaseMaterialInfo.Validate(); if (false == string.IsNullOrEmpty(strResult)) { return OpenResponse.Ok(GetDataBaseReponse.Failed(strResult)); } //是否推送旧系统 var isCheck = await SendFileDataFw(vmCaseMaterialInfo.paras.CaseSerial, @params, files); if (isCheck) { return OpenResponse.Ok(GetDataBaseReponse.Success("您已成功提交数据!")); } List listData = new(); // 文件列表 foreach (var file in files) { //这里需要上文件服务器上传 var businessFileDto = await SendFileData(file); string strFileName = file.FileName; string strSuffix = strFileName.LastIndexOf(".") > 0 ? strFileName.Substring(strFileName.LastIndexOf(".")) : ""; // 新增文件到列表 var materialInfo = new DsGetCaseMaterialInfo() { CaseSerial = tmpCaseMaterialInfo.CaseSerial, MaterialType = tmpCaseMaterialInfo.MaterialType, CliengGuid = tmpCaseMaterialInfo.CliengGuid, AreaCode = tmpCaseMaterialInfo.AreaCode, FileName = file.FileName, Type = strSuffix.Trim('.'), Additions = businessFileDto.id, Path = businessFileDto.path, Direction = "2", SyncState = "1" }; listData.Add(materialInfo); await _getCaseMaterialInfoRepository.AddAsync(materialInfo, HttpContext.RequestAborted); } if (listData != null && listData.Count > 0) { //处理附件数据 var receiveData = await _dsReceiveProvinceDataRepository.GetAsync(p => p.CliengGuid == tmpCaseMaterialInfo.CliengGuid && p.CaseSerial == tmpCaseMaterialInfo.CaseSerial, HttpContext.RequestAborted); if (receiveData != null) { List listFiles = new(); ReceiveFilesFromDsDto receiveFilesFromDsDto = new ReceiveFilesFromDsDto() { DsBisId = tmpCaseMaterialInfo.CliengGuid, ProvinceNo = tmpCaseMaterialInfo.CaseSerial }; //根据接口处理数据 switch (receiveData.ServiceInterface) { case "receive_case_info": listFiles = await InitFileData(listData, "工单受理"); receiveFilesFromDsDto.DsBisType = EDsBisType.AcceptOrder; break; case "get_case_back_result": listFiles = await InitFileData(listData, "工单退回审核"); receiveFilesFromDsDto.DsBisType = EDsBisType.OrderPreviousResult; break; case "send_supervise_info": listFiles = await InitFileData(listData, "督办申请"); receiveFilesFromDsDto.DsBisType = EDsBisType.SendOrderSupervise; receiveFilesFromDsDto.SuperviseId = tmpCaseMaterialInfo.CaseSerial; break; case "remind_case_info": listFiles = await InitFileData(listData, "催办申请"); receiveFilesFromDsDto.DsBisType = EDsBisType.SendOrderUrge; break; case "screen_case_result_receive": listFiles = await InitFileData(listData, "甄别上传"); receiveFilesFromDsDto.DsBisType = EDsBisType.OrderScreenResult; break; case "delay_case_result_receive": listFiles = await InitFileData(listData, "延期上传"); receiveFilesFromDsDto.DsBisType = EDsBisType.OrderDelayResult; break; case "supply_case_info_receive": listFiles = await InitFileData(listData, "补充上传"); receiveFilesFromDsDto.DsBisType = EDsBisType.SendOrderComplement; break; case "revoke_case_info": // listFiles = await InitFileData(listData, "工单撤单");//暂无附件 break; case "send_warn_info": // listFiles = await InitFileData(listData, "工单预警"); break; case "send_case_evl_result": // listFiles = await InitFileData(listData, "工单满意度"); break; case "get_case_result_send": listFiles = await InitFileData(listData, "办理上传"); receiveFilesFromDsDto.DsBisType = EDsBisType.OrderHandleResult; break; case "get_visit_info_send": // listFiles = await InitFileData(listData, "上报工单评价"); break; default: break; } receiveFilesFromDsDto.Files = listFiles; //推送数据 if (receiveFilesFromDsDto.Files != null && receiveFilesFromDsDto.Files.Count > 0) await _capPublisher.PublishAsync(DataSharing.Share.Mq.EventNames.SharingFileInfo, receiveFilesFromDsDto, cancellationToken: HttpContext.RequestAborted); } } return OpenResponse.Ok(GetDataBaseReponse.Success("您已成功提交数据!")); } #region 私有方法 /// /// 组装附件参数 /// /// /// /// private async Task> InitFileData(List listData, string Classify) { List fileDtos = new(); foreach (var item in listData) { string strSubFileName = item.FileName.LastIndexOf(".") > 0 ? item.FileName.Substring(0, item.FileName.LastIndexOf(".")) : item.FileName; fileDtos.Add(new FileDto() { Name = strSubFileName, Type = item.Type, Classify = Classify, Additions = item.Additions, Path = item.Path }); } return fileDtos; } /// /// 根据附件Id,工单编号查询所有附件 /// /// 材料标识ID /// 工单编号 /// 材料分类 /// private async Task> GetFileData(string CliengGuid, string CaseSerial, string Classify) { var list = await _getCaseMaterialInfoRepository.Queryable().Where(p => p.CliengGuid == CliengGuid && p.CaseSerial == CaseSerial).ToListAsync(); List fileDtos = new(); if (fileDtos == null || fileDtos.Count == 0) return fileDtos; foreach (var item in list) { fileDtos.Add(new FileDto() { Name = item.FileName, Type = item.Type, Classify = Classify, Additions = item.Additions, Path = item.Path }); } return fileDtos; } /// /// 将数据写入本地 /// /// 工单编号 /// 材料标识 /// 接口名称 /// 数据 /// private async Task InitReceiveProvinceData(string CaseSerial, string CliengGuid, string ServiceInterface, string ReceiveData) { DsReceiveProvinceData dsReceive = new() { CaseSerial = CaseSerial, CliengGuid = CliengGuid, ServiceInterface = ServiceInterface, ReceiveData = ReceiveData }; return await _dsReceiveProvinceDataRepository.AddAsync(dsReceive, HttpContext.RequestAborted); } /// /// 将文件流上传到附件服务器 /// /// /// private async Task SendFileData(IFormFile file) { var businessFile = _channelConfigurationManager.GetConfigurationBusinessFile(); // 文件名称 string fileName = file.FileName; // 文件内容字节数据 using var memoryStream = new MemoryStream(); await file.CopyToAsync(memoryStream); memoryStream.Seek(0, SeekOrigin.Begin); byte[] fileContentBytes = memoryStream.ToArray(); // 构造字典文件数据 // 接口参数名称为files CFormUpload.FileParameter fileParameter = new CFormUpload.FileParameter("fileData", fileContentBytes, fileName, "multipart/form-data"); Dictionary dicParam = new() { { fileName, fileParameter } }; string url = string.Format("{0}{1}?source={2}", businessFile.BaseUrl, businessFile.UploadUrlAddress, businessFile.Source); var result = CFormUpload.MultipartFormDataPost(url, null, dicParam, ""); if (!string.IsNullOrEmpty(result)) { var resultData = Newtonsoft.Json.JsonConvert.DeserializeObject(result); if (resultData != null && resultData.code == 0) { return resultData.result; } } return new BusinessFileDto(); } /// /// 下行数据推送到旧系统中 /// /// 省工单编号 /// 接口名称 /// 请求参数 /// 请求方式 /// private async Task SendDataFw(string CaseSerial, string api, string jsonData, string httpMethod = "Post") { var configSendDataOld = _channelConfigurationManager.GetConfigurationSendDataOld(); //先验证是否开启推送 if (configSendDataOld == null || !configSendDataOld.IsSend) return false; //查询是否是本地工单,如果是本地工单不需要推送,如果是旧系统数据则推送 // var isCheck = await _dataOrderRepository.AnyAsync(p => p.ProvinceNo == CaseSerial, HttpContext.RequestAborted); var isCheck = await _dsReceiveProvinceDataRepository.AnyAsync(p => p.CaseSerial == CaseSerial && p.ServiceInterface == "receive_case_info", HttpContext.RequestAborted); if (!isCheck) { var url = configSendDataOld.AddressUrl + api; var response = await _fwClient.RequestAsync(url, httpMethod, jsonData, HttpContext.RequestAborted); if (response != null && response.code != 1) { SendFwErrorData sendFwError = new() { HttpMethod = httpMethod, ServiceInterface = url, SendData = jsonData }; await _sendFwErrorDataRepository.AddAsync(sendFwError, HttpContext.RequestAborted); } return true; } return false; } /// /// 上传附件 /// /// /// /// /// private async Task SendFileDataFw(string CaseSerial, string strParams, List files) { var configSendDataOld = _channelConfigurationManager.GetConfigurationSendDataOld(); //先验证是否开启推送 if (!configSendDataOld.IsSend) return false; var isCheck = await _dataOrderRepository.AnyAsync(p => p.ProvinceNo == CaseSerial, HttpContext.RequestAborted); if (!isCheck) { foreach (var file in files) { // 文件名称 string fileName = file.FileName; // 文件内容字节数据 using var memoryStream = new MemoryStream(); await file.CopyToAsync(memoryStream); memoryStream.Seek(0, SeekOrigin.Begin); byte[] fileContentBytes = memoryStream.ToArray(); // 构造字典文件数据 // 接口参数名称为files CFormUpload.FileParameter fileParameter = new CFormUpload.FileParameter("files", fileContentBytes, fileName, null); strParams = "{ \"token\": \"\", \"paras\":{ \"MATERIAL_SERIAL\":\"RGDH99511500240304000100\", \"MATERIAL_TYPE\":\"10\", \"CLIENG_GUID\":\"91541fea-e1a5-4798-bc43-b25cc77ec6b7\", \"AREA_CODE\":\"511500\"} }"; Dictionary dicParam = new() { { "params", strParams } // 第一个接口参数,json格式字符串 }; dicParam.Add(fileName, fileParameter); var token = await _fwClient.GetFileToken(HttpContext.RequestAborted); string strUrl = configSendDataOld.AddressUrl + "api/receive/get_case_material_info"; // 上传附件 string strResult = CFormUpload.MultipartFormDataPost(strUrl, null, dicParam, token?.Token); } return true; } return false; } #endregion } }