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;
}
}
}