using DataSharing.Common; using DataSharing.ConvergenceMedia; using DataSharing.FwDataExchange; using DataSharing.RawData; using DataSharing.Share.Dtos; using DataSharing.Share.Dtos.Common; using DataSharing.Share.Dtos.HotlineSetting; using DataSharing.Share.Dtos.OtherPlatformsYB; using DotNetCore.CAP; using MapsterMapper; using MediatR; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using XF.Domain.Filters; using XF.Domain.Repository; namespace DataSharing.Host.Controllers { /// /// 智慧宜宾 /// public class OtherPlatformsYBController : BaseDataController { private readonly IMapper _mapper; private readonly IMediator _mediator; private readonly ICapPublisher _capPublisher; private readonly IRepository _dataOrderRepository; private readonly IRepository _dataOrderWorkFlowRepository; private readonly IRepository _dsReceiveMediaDataRepository; private readonly IRepository _dsUserTokenInfoRepository; private readonly FwClient _fwClient; /// /// /// /// /// /// /// /// /// /// /// public OtherPlatformsYBController(IMapper mapper, IMediator mediator, ICapPublisher capPublisher, IRepository dataOrderRepository, IRepository dataOrderWorkFlowRepository, IRepository dsReceiveMediaDataRepository, IRepository dsUserTokenInfoRepository, FwClient fwClient) { _mapper = mapper; _mediator = mediator; _capPublisher = capPublisher; _dataOrderRepository = dataOrderRepository; _dataOrderWorkFlowRepository = dataOrderWorkFlowRepository; _dsReceiveMediaDataRepository = dsReceiveMediaDataRepository; _dsUserTokenInfoRepository = dsUserTokenInfoRepository; _fwClient = fwClient; } /// /// 2.3.1查询受理类型 /// /// /// [HttpPost("e_GetTypeID")] [AllowAnonymous] public async Task GetAcceptType([FromForm] string strVailCode) { var accountDto = await CheckAccountAsync(strVailCode); if (accountDto is null || accountDto.IsCheckAccount == false) return OpenResponse.Ok(OtherPlatformsDeResponse.Failed("密钥错误", "-900")); List acceptTypeListDtos = new() { new() { Name = "咨询", Value = "10" }, new() { Name = "建议", Value = "15" }, new() { Name = "求助", Value = "20" }, new() { Name = "表扬", Value = "25" }, new() { Name = "举报", Value = "30" }, new() { Name = "投诉", Value = "35" }, new() { Name = "其他", Value = "40" }, new() { Name = "意见", Value = "1" }, new() { Name = "惠民帮助", Value = "2" }, new() { Name = "大气污染举报", Value = "3" } }; return OpenResponse.Ok(OtherPlatformsDeResponse>.Success(acceptTypeListDtos)); } /// /// 2.3.2网上写信 /// /// /// [HttpPost("e_WriteInfo")] [AllowAnonymous] public async Task WriteInfo([FromForm] AddWriteInfoDto dto) { var accountDto = await CheckAccountAsync(dto.strVailCode); if (accountDto is null || accountDto.IsCheckAccount == false) return OpenResponse.Ok(OtherPlatformsDeResponse.Failed("密钥错误", "-900")); //验证数据 string strResult = dto.Validate(); if (!string.IsNullOrEmpty(strResult)) return OpenResponse.Ok(OtherPlatformsDeResponse.Failed(strResult, "0")); //写入原始数据 DsReceiveMediaData dsReceiveMediaData = new() { ServiceInterface = "e_WriteInfo", PlatformsName= accountDto.PlatformSource, ReceiveData = System.Text.Json.JsonSerializer.Serialize(dto) }; dsReceiveMediaData.Id = await _dsReceiveMediaDataRepository.AddAsync(dsReceiveMediaData, HttpContext.RequestAborted); Hotline.Share.Dtos.Order.AddOrderDto data = new() { Title = dto.strTitle, FromName = dto.strUserName, Contact = dto.strPhone, FullAddress = dto.strAddress, Content = dto.strContent, IsSecret = false, AcceptTypeCode = dto.strTypeID, Source = (Hotline.Share.Enums.Order.ESource)Enum.Parse(typeof(Hotline.Share.Enums.Order.ESource), accountDto.PlatformSource), FromGender = dto.strGender switch { "1" => Hotline.Share.Enums.Order.EGender.Male, "2" => Hotline.Share.Enums.Order.EGender.Female, _ => Hotline.Share.Enums.Order.EGender.Unknown, }, IdentityType = Hotline.Share.Enums.Order.EIdentityType.Citizen, Transpond = false, IsEnforcementOrder = false, ExternalId = Guid.NewGuid().ToString(), }; data.SourceChannel = "智慧宜宾"; data.SourceChannelCode = "ZHYB"; //调用工单创建接口 var result = await _fwClient.RequestNoTokenAsync("api/v1/Order/add-anonymous", "Post", System.Text.Json.JsonSerializer.Serialize(data)); if (result != null && result.code == 0) { dsReceiveMediaData.ExternalId = result.result.id; dsReceiveMediaData.OrderCode = result.result.no; await _dsReceiveMediaDataRepository.UpdateAsync(dsReceiveMediaData, HttpContext.RequestAborted); List returnData = new() { new WriteInfoReturnDto() { LetterCode = result.result.no, LetterPwd = result.result.password } }; return OpenResponse.Ok(OtherPlatformsDeResponse>.Success(returnData)); } else return OpenResponse.Ok(OtherPlatformsDeResponse.Failed("接口调用失败!", "0")); } /// /// 2.3.3查询办理进度 /// /// /// [HttpPost("e_GetFlowInfo")] [AllowAnonymous] public async Task GetFlowInfo([FromForm] GetFlowDetailDto dto) { var accountDto = await CheckAccountAsync(dto.strVailCode); if (accountDto is null || accountDto.IsCheckAccount == false) return OpenResponse.Ok(OtherPlatformsDeResponse.Failed("密钥错误", "-900")); //验证数据 string strResult = dto.Validate(); if (!string.IsNullOrEmpty(strResult)) return OpenResponse.Ok(OtherPlatformsDeResponse.Failed(strResult, "0")); var dataOrder = await _dsReceiveMediaDataRepository.GetAsync(p => p.OrderCode == dto.strCode, HttpContext.RequestAborted); if (dataOrder == null) return OpenResponse.Ok(OtherPlatformsDeResponse.Failed("编号或密码错误", "0")); var data = await _dataOrderRepository.GetAsync(p => p.OrderId == dataOrder.ExternalId, HttpContext.RequestAborted); if (data == null) return OpenResponse.Ok(OtherPlatformsDeResponse.Failed("信件正在受理中", "0")); var dataFlow = await _dataOrderWorkFlowRepository.Queryable() .Where(p => p.OrderId == dataOrder.ExternalId) .OrderBy(p => p.CreationTime) .ToListAsync(); var list = _mapper.Map>(dataFlow); if (list != null && list.Count > 0 && data.HandleState == "办理完成") list[list.Count - 1].AcceptEnd = "1"; return OpenResponse.Ok(OtherPlatformsDeResponse>.Success(list)); } /// /// 2.3.4查询办理结果 /// /// /// [HttpPost("e_GetFlowDetail")] [AllowAnonymous] public async Task GetFlowDetail([FromForm] GetFlowDetailDto dto) { var accountDto = await CheckAccountAsync(dto.strVailCode); if (accountDto is null || accountDto.IsCheckAccount == false) return OpenResponse.Ok(OtherPlatformsDeResponse.Failed("密钥错误", "-900")); //验证数据 string strResult = dto.Validate(); if (!string.IsNullOrEmpty(strResult)) return OpenResponse.Ok(OtherPlatformsDeResponse.Failed(strResult, "0")); var dataOrder = await _dsReceiveMediaDataRepository.GetAsync(p => p.OrderCode == dto.strCode, HttpContext.RequestAborted); if (dataOrder == null) return OpenResponse.Ok(OtherPlatformsDeResponse.Failed("编号或密码错误", "0")); var data = await _dataOrderRepository.GetAsync(p => p.OrderId == dataOrder.ExternalId, HttpContext.RequestAborted); if (data == null) return OpenResponse.Ok(OtherPlatformsDeResponse.Failed("信件正在受理中", "0")); GetFlowDetailReturnDto getFlowDetailReturn = new() { state = data.HandleState == "办理完成" ? "1" : "0", content = data.ActualOpinion, AcceptName = data.ActualHandleOrgName, AcceptUser = data.ActualHandlerName, AcceptDate = data.ActualHandleTime }; return OpenResponse.Ok(OtherPlatformsDeResponse.Success(getFlowDetailReturn)); } /// /// 验证密钥 /// /// /// private async Task CheckAccountAsync(string Code) { CheckAccountDto accountDto = new() { IsCheckAccount = false }; var data = await _dsUserTokenInfoRepository.GetAsync(p => p.AccountId == Code && p.State == "1", HttpContext.RequestAborted); if (data is not null) { accountDto.PlatformSource = data.PlatformSource; accountDto.IsCheckAccount = true; return accountDto; } accountDto.Message = "授权账号或密码验证不通过"; return accountDto; } } }