using DataSharing.FwDataExchange;
using DataSharing.Police110.DaoShu110;
using DataSharing.Police110.DCJT110;
using DataSharing.Police110.Encryption;
using DataSharing.RawData;
using DataSharing.Share.Dtos;
using DataSharing.Share.Dtos.HotlineSetting;
using DataSharing.Share.Dtos.Police110;
using DataSharing.Share.Dtos.Police110.DaoShu110;
using DataSharing.Share.Dtos.Police110.DCJT110;
using DataSharing.Share.Enums;
using DotNetCore.CAP;
using Hotline.Share.Dtos.DataSharing.PusherHotlineDto;
using Hotline.Share.Enums.Order;
using MapsterMapper;
using MediatR;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using System.Text;
using XF.Domain.Filters;
using XF.Domain.Repository;
namespace DataSharing.Host.Controllers.Police110
{
///
/// 110工单交互
/// 公司:大成均图
/// 市州:自贡、雅安
///
public class PoliceDCJTController : BaseOkController
{
#region 注入
private readonly IMapper _mapper;
private readonly ICapPublisher _capPublisher;
private readonly IMediator _mediator;
private readonly IRepository _dsPoliceSendChainAlarmDcjtRepository;
private readonly IRepository _dsPoliceSendChainDealDcjtRepository;
private readonly IRepository _dsKnowledgeRawDataRepository;
private readonly IRepository _dsReceivePoliceDataRepository;
private readonly FwClient _fwClient;
private readonly ISharingConfigurationManager _sharingConfigurationManager;
private readonly IRepository _sendHotlineErrorDataRepository;
private readonly IRepository _dsReceiveHandleDataRepository;
private readonly ILogger _logger;
///
///
///
///
///
///
///
///
///
///
///
///
///
///
///
public PoliceDCJTController(IMapper mapper,
ICapPublisher capPublisher,
IMediator mediator,
IRepository dsPoliceSendChainAlarmDcjtRepository,
IRepository dsPoliceSendChainDealDcjtRepository,
IRepository dsKnowledgeRawDataRepository,
IRepository dsReceivePoliceDataRepository,
FwClient fwClient,
ISharingConfigurationManager sharingConfigurationManager,
IRepository sendHotlineErrorDataRepository,
IRepository dsReceiveHandleDataRepository,
ILogger logger)
{
_mapper = mapper;
_capPublisher = capPublisher;
_mediator = mediator;
_dsPoliceSendChainAlarmDcjtRepository = dsPoliceSendChainAlarmDcjtRepository;
_dsPoliceSendChainDealDcjtRepository = dsPoliceSendChainDealDcjtRepository;
_dsKnowledgeRawDataRepository = dsKnowledgeRawDataRepository;
_dsReceivePoliceDataRepository = dsReceivePoliceDataRepository;
_fwClient = fwClient;
_sharingConfigurationManager = sharingConfigurationManager;
_sendHotlineErrorDataRepository = sendHotlineErrorDataRepository;
_dsReceiveHandleDataRepository = dsReceiveHandleDataRepository;
_logger = logger;
}
#endregion
#region receive-工单受理-已完成---110推送受理工单给12345
///
/// 工单受理
///
///
[HttpPost("service/api/dcjt/110To12345/chainAlarm")]
[AllowAnonymous]
public async Task ChainAlarm_Receive()
{
// 测试JSON
// {"LSH":"510300202304070001202304070001","JJYBH":"1001","JJDBH":"510300202304070001202304070001","BJDH":"13555555555","BJDHYHM":"李四","LXDH":"13555555555","BJDZ":"报警地址","JQLBDM":"","JQLBMC":"","BJNR":"报警内容","GXDWDM":"","GXDWMC":"","GXDWDH":"","BJSJ":"2023-04-07 10:43:17","TSSJ":"2023-04-07 10:43:21","JJDWDM":"12345","JJDWMC":"12345","JJLX":"1","XZQHDM":"510300"}
// 测试Base64
// kKeUhfS8zca5WTA9D2Z7z/GthYLHroPi8jLN2HduG2vK1PCjb56BZ3wLNCiA8V91ARHpOkE50xFdwBJhW+QKB7J2FRjJ6WUrzkKal75G3DCWzl+Fzto+XbkS5U5wUYnII2zSpdo4U6ILrrK2t2u8mFTd1i03+D1Ytv4TlUH5Jwg/xq00AeF/CVhes4+H5PPcxdU/h3KCDMq9Qaoxf6pALQCMBfatQdsDMw4MG0RK5DUbuaCuElOxfCjlDadZTLuVjHWHDw6wWG9sucqN3mrRllxytIDqIsLSdBi1KuCPaW+FhXf5/+v6Eipby8QEXXTPZxOW4m/Kp8cF87+rxBxRE7nIGAjdO2mKDyfiDeipENxKkQs6taTS52U2OG99Prfp+UAU1Uaj69gQ0IShMVqLgnESWhL5b/vIgO2mtYgIIZ7RpwlTuVqVZKxaFfPpjnQtGRFZPDPHVQcqQ7MMT3rjg6/AWVI/Jh7q+pdu18Y6cojl/EGd/XsNVip+uvAeXdCk
ConfigurationPoliceDCJT configurationPoliceDCJT = new();
//根据不同地市州获取不同的配置信息
if (_sharingConfigurationManager.IsCity(ConfigurationConsts.ZiGong))
configurationPoliceDCJT = _sharingConfigurationManager.GetZiGongConfig().PoliceDCJT;
_logger.LogInformation("收到数据---------");
var sm4 = configurationPoliceDCJT.token1_sm4_mw;
var apiR = new DCJTDeResponse();
try
{
string id = "";
_logger.LogInformation("dcsm---------" + Request.Headers["dcsm"].ToString());
// 验证dcsm
string dcsmMsg = CheckDcsm(Request.Headers["dcsm"].ToString(), configurationPoliceDCJT.token1_dcsm);
_logger.LogInformation("验证dcsm---------" + dcsmMsg);
if (!string.IsNullOrEmpty(dcsmMsg))
{
apiR = DCJTDeResponse.Failed(null, dcsmMsg);
}
else
{
string base64String = await GetStreamBase64(HttpContext.Request);
_logger.LogInformation("base64String---------" + base64String);
ChainAlarm_DCJT chainAlarm = new();
if (!string.IsNullOrEmpty(base64String))
{
// 解密:base64通过sm4解密转json
string jsonRes = Sm4Crypto.Decrypt_ECB_Base64(sm4, base64String);
_logger.LogInformation("jsonRes---------" + jsonRes);
// json 转 实体类
if (!string.IsNullOrEmpty(jsonRes))
chainAlarm = System.Text.Json.JsonSerializer.Deserialize(jsonRes);
id = await InitRawData("/service/api/dcjt/110To12345/chainAlarm", base64String, jsonRes, chainAlarm?.AlarmReceiptNumber);
_logger.LogInformation("添加数据---------" + id);
}
#region 数据验证
//数据验证
string strResult = chainAlarm.Validate();
if (!IsDate(chainAlarm.CallPoliceTime.ToString()))
strResult = "【报警时间】不是日期格式 yyyy-MM-dd HH:mm:ss";
if (!IsDate(chainAlarm.PushTime.ToString()))
strResult = "【推送时间】不是日期格式 yyyy-MM-dd HH:mm:ss";
#endregion
if (string.IsNullOrEmpty(strResult))
{
//组装业务系统工单数据
Hotline.Share.Dtos.Order.AddOrderDto orderDto = new()
{
ExternalId = chainAlarm.AlarmReceiptNumber,
// AcceptorStaffNo = policeReceive.RegisterNo,
FromPhone = chainAlarm.CallPoliceNumber,
FromName = chainAlarm.CallPoliceName,
Contact = chainAlarm.PhoneNumber,
Content = chainAlarm.CallPoliceContent,
IncidentTime = Convert.ToDateTime(chainAlarm.CallPoliceTime),
AreaCode = chainAlarm.AreaCode,
FullAddress = chainAlarm.CallPoliceAddress,
SourceChannel = "110接警平台",
SourceChannelCode = "110",
Source = ESource.Police110,
IdentityType = EIdentityType.Citizen,
Transpond = false,
IsEnforcementOrder = false,
Title = string.Empty,
AcceptType = "咨询",
AcceptTypeCode = "10"
};
if (!string.IsNullOrEmpty(orderDto.AreaCode))
{
if (orderDto.AreaCode == "510399")
orderDto.AreaCode = "519800";
if(orderDto.AreaCode.Length>6)
orderDto.AreaCode=orderDto.AreaCode.Substring(0,6);
}
orderDto.FromGender = chainAlarm.FromGender switch
{
"0" => EGender.Female,
"1" => EGender.Male,
_ => EGender.Unknown,
};
bool isSuccess = true;
string error = "";
//调用工单创建接口
try
{
var result = await _fwClient.RequestNoTokenAsync("api/v1/Order/add-anonymous", "Post", System.Text.Json.JsonSerializer.Serialize(orderDto));
if (result == null || result.code != 0)
{
isSuccess = false;
error = result?.message;
}
}
catch (Exception ex)
{
isSuccess = false;
error = ex.Message;
}
//推送失败添加
if (!isSuccess)
{
SendHotlineErrorData errorData = new SendHotlineErrorData()
{
DataId = id,
PlatformSource = EPlatformSource.Police110,
ReceiveServiceInterface = "/service/api/dcjt/110To12345/chainAlarm",
RawData = base64String,
RequestData = System.Text.Json.JsonSerializer.Serialize(orderDto),
Path = "api/v1/Order/add-anonymous",
SendTimes = 0,
HttpMethod = "Post",
ErrorMessage = error
};
await _sendHotlineErrorDataRepository.AddAsync(errorData, HttpContext.RequestAborted);
}
apiR = DCJTDeResponse.Succeed(null, "调用成功");
}
else
apiR = DCJTDeResponse.Failed(null, strResult);
}
}
catch (Exception)
{
apiR = DCJTDeResponse.Failed(null, "接口异常");
}
#region 处理返回数据
// 返回数据转Json
string jsonResult = ModelToJson(apiR);
// 加密:json通过sm4加密转base64
string base64 = Sm4Crypto.Encrypt_ECB_Base64(sm4, jsonResult);
_logger.LogInformation($"输出:" + $"\r\n\r\nbase64:{base64}\r\nJson:{jsonResult}");
#endregion
return OpenResponse.Ok(base64);
}
#endregion
#region receive-工单办结---110推送办理结果给12345
///
/// 工单办结
///
///
[HttpPost("service/api/dcjt/110To12345/chainDeal")]
[AllowAnonymous]
public async Task ChainDeal_Receive()
{
// 测试 办结 {"JJDBH":"510300202304070001202304070001","CZLX":"1","FKSJ":"2023-04-07 10:52:44","CJCZQK":"办理结果","JQCLJGSM":"办理结果","FKYBH":"1001","FKYXM":"1001","FKDWDM":"","FKDWMC":"","HFSJ":"","DHHFHSQK":"","CLJGDM":"","CLJGMC":"","HANDLEUSERNAME":"","HANDLEBMNAME":"","HANDLEOPINION":"","HANDLETIME":"","TSSJ":"2023-04-07 10:53:19"}
// 测试 退回 {"JJDBH":"510300202304070001202304070001","CZLX":"2","FKSJ":"","CJCZQK":"","JQCLJGSM":"","FKYBH":"","FKYXM":"","FKDWDM":"","FKDWMC":"","HFSJ":"","DHHFHSQK":"","CLJGDM":"","CLJGMC":"","HANDLEUSERNAME":"退回人","HANDLEBMNAME":"退回姓名","HANDLEOPINION":"退回原因","HANDLETIME":"2023-04-07 10:53:19","TSSJ":"2023-04-07 10:53:19"}
// 测试 回访 {"JJDBH":"510300202304070001202304070001","CZLX":"3","FKSJ":"","CJCZQK":"","JQCLJGSM":"","FKYBH":"","FKYXM":"","FKDWDM":"","FKDWMC":"","HFSJ":"2023-04-07 10:54:23","DHHFHSQK":"回访情况","CLJGDM":"2","CLJGMC":"回访内容","HANDLEUSERNAME":"","HANDLEBMNAME":"","HANDLEOPINION":"","HANDLETIME":"","TSSJ":"2023-04-07 10:53:19"}
// 测试Base64
// 办结 Jv5JJHwByfD4CXMb1l4PtPsgC6UmNeRfws6mEKz24rackMA28z27tu2GRlIyq0qmbeYeEM0nY783aUxb0jlqSQlk+xtc6cop/CvZI5vczHIsXhtfNozkW/hlx/R43ecuKEvyMzEHwf3EuBZ7jsY1zGuJe61K6YTkmCt6+Xndbd585ZMluNJNIA0qZPbT08jVDiI+wa9ot3HA7AEuDqNxJwfU7NfqoTk6Ml5nnuPkdmp55VKeoLZspAgBflEtFJyppIsN0VQyJkrn+ADQFOPcTpedx5H6+V+2MYM9+5pE/Re17S+s3cA53vWHsf6KhHnCm3M9qtbocu0TtpAEfyMEBQOIRn4pSEJ1i98fpD3xjzuxddkGPOBvhYrh8Tf3IbNTNpNozEda2a0RFmBCQyfzLvEdk4ZK/obYDKncePIRrE3ZtO2QAeAa3H6V532MxcniZJ4mIqHsKShR2Q8uxdsR5Q==
// 退回 Jv5JJHwByfD4CXMb1l4PtPsgC6UmNeRfws6mEKz24rackMA28z27tu2GRlIyq0qm1U2lexAxHJK7Bhoyw7CNiEXjiobQjSKF2RWOrUHZINPed01DQRTw2pIL03EFsrQpEjsslviumN+BTn/cuJQp8zD2ifPclM87jEJfP2EY6D+UGvUfSebT9mMghSo2VaUeqFzlRKpJmcU6XjV7C65zddc8DEXuYzt0zqATyhac9AO3RGB5SEw9MX1olV8WwPgV4h3OkTTVZ+Dq5co/eb28YIBN+Rshjpv82RusV2thgfvudOyCDZcRDbjh6pEdtj/lvVH/BU2cDo3ch17KtzsPE+xkQvJ68zaAnS8f/klQrFrDHlkmTMi6rEa605yUhhPZFz0Jba+Axizil38YbHV9A1YoxoJNjFXIyL90yCMznb4joMQPRRddp5ky/CbT9r0q283gKBdAY6/v+ywPdalFjg==
// 回访 Jv5JJHwByfD4CXMb1l4PtPsgC6UmNeRfws6mEKz24rackMA28z27tu2GRlIyq0qmvLqUgIfd0QkyZbzT0iQZwEXjiobQjSKF2RWOrUHZINPed01DQRTw2pIL03EFsrQpEjsslviumN+BTn/cuJQp8zD2ifPclM87jEJfP2EY6D8cMxuK/4X9pyxRWKIQtLFdh4ieC9bhojhr2XxStPHmDV4c3oNEybczbb7IXsaW2FCGMI4SLF7Z+VXDSpCGpFX+0dyUUQPnoRrgU7wndkn/6VYi2Axm19MBkwK+Wm5v85oVQ1HFptf5leUiSXomF9XCPtgWbLOFzu313JW7WQvjgllM7usjI2mbyGtQ5EMXyOGJ/AmAupELpMYVwjoGAKy6B/GE1HFyPiLAazsUE3jfaLPxn/Gld0Ef2glG1SQ/vakDtyvyoJDE83pYvBesmQMx
ConfigurationPoliceDCJT configurationPoliceDCJT = new();
//根据不同地市州获取不同的配置信息
if (_sharingConfigurationManager.IsCity(ConfigurationConsts.ZiGong))
configurationPoliceDCJT = _sharingConfigurationManager.GetZiGongConfig().PoliceDCJT;
string sm4 = configurationPoliceDCJT.token4_sm4_mw;
var apiR = new DCJTDeResponse();
try
{
// 验证dcsm
string dcsmMsg = CheckDcsm(Request.Headers["dcsm"].ToString(), configurationPoliceDCJT.token4_dcsm);
if (!string.IsNullOrEmpty(dcsmMsg))
{
apiR = DCJTDeResponse.Failed(null, dcsmMsg);
}
else
{
ChainDeal_DCJT chainDeal = new();
string base64String = await GetStreamBase64(HttpContext.Request);
_logger.LogInformation($"接收原始数据:" + $"\r\n\r\nbase64:{base64String}");
if (!string.IsNullOrEmpty(base64String))
{
// 解密:base64通过sm4解密转json
string jsonRes = Sm4Crypto.Decrypt_ECB_Base64(sm4, base64String);
_logger.LogInformation($"接收原始数据jsonRes:" + $"jsonRes:{jsonRes}");
if (!string.IsNullOrEmpty(jsonRes))
{
var data = JsonConvert.DeserializeObject(jsonRes);
jsonRes = JsonConvert.SerializeObject(data);
}
// json 转 实体类
chainDeal = System.Text.Json.JsonSerializer.Deserialize(jsonRes);
_logger.LogInformation("base64String---------" + base64String);
await InitRawData("service/api/dcjt/110To12345/chainDeal", base64String, jsonRes, chainDeal?.AlarmReceiptNumber);
}
#region 数据验证
string strResult = chainDeal.Validate();
if (chainDeal.FeedbackTime == "")
chainDeal.FeedbackTime = null;
if (chainDeal.ReturnTime == "")
chainDeal.ReturnTime = null;
if (chainDeal.RevisitTime == "")
chainDeal.RevisitTime = null;
#endregion
if (string.IsNullOrEmpty(strResult))
{
//这里组装数据推送到业务系统
await InitChainDeal(chainDeal);
apiR = DCJTDeResponse.Succeed(null, "调用成功");
}
else
apiR = DCJTDeResponse.Failed(null, "调用失败");
}
}
catch (Exception)
{
apiR = DCJTDeResponse.Failed(null, "接口异常");
}
#region 处理返回数据
// 返回数据转Json
string jsonResult = ModelToJson(apiR);
// 加密:json通过sm4加密转base64
string base64 = Sm4Crypto.Encrypt_ECB_Base64(sm4, jsonResult);
_logger.LogInformation($"输出:" + $"\r\n\r\nbase64:{base64}\r\nJson:{jsonResult}");
#endregion
return OpenResponse.Ok(base64);
}
#endregion
#region send-工单受理-已完成---12345将警情工单推送给110
///
/// 工单受理
///
///
[HttpPost("service/api/dcjt/12345To110/chainAlarm")]
[AllowAnonymous]
public async Task ChainAlarm_Send()
{
//{"startDate":"2023-04-01 10:43:17","endDate":"2023-04-17 10:43:17"}
//gzWXSn3A2ZW9u3k9yrHdEqE5zRzto/Rud6LZ6JRJ1k59ou5nWABc8t8fR/sWU89lGweFQMsZkefowEBYzArADnSXjbKwfQj19UoF5RN/0mI=
ConfigurationPoliceDCJT configurationPoliceDCJT = new();
//根据不同地市州获取不同的配置信息
if (_sharingConfigurationManager.IsCity(ConfigurationConsts.ZiGong))
configurationPoliceDCJT = _sharingConfigurationManager.GetZiGongConfig().PoliceDCJT;
string sm4 = configurationPoliceDCJT.token3_sm4_mw;
var apiR = new DCJTDeResponse();
try
{
// 验证dcsm
string dcsmMsg = CheckDcsm(Request.Headers["dcsm"].ToString(), configurationPoliceDCJT.token3_dcsm);
if (!string.IsNullOrEmpty(dcsmMsg))
{
apiR = DCJTDeResponse.Failed(null, dcsmMsg);
}
else
{
SendData sendData = new();
string base64String = await GetStreamBase64(HttpContext.Request);
if (!string.IsNullOrEmpty(base64String))
{
// 解密:base64通过sm4解密转json
string jsonRes = Sm4Crypto.Decrypt_ECB_Base64(sm4, base64String);
if (!string.IsNullOrEmpty(jsonRes))
// json 转 实体类
sendData = System.Text.Json.JsonSerializer.Deserialize(jsonRes);
//await InitRawData("service/api/dcjt/12345To110/chainAlarm", base64String, jsonRes, sendData?.AlarmReceiptNumber);
}
bool bRun = true;
if (!string.IsNullOrEmpty(sendData.StartDate) && !IsDate(sendData.StartDate))
{
bRun = false;
apiR = DCJTDeResponse.Failed(null, "【创建开始时间】不是日期格式 yyyy-MM-dd HH:mm:ss");
}
if (!string.IsNullOrEmpty(sendData.EndDate) && !IsDate(sendData.EndDate))
{
bRun = false;
apiR = DCJTDeResponse.Failed(null, "【创建结束时间】不是日期格式 yyyy-MM-dd HH:mm:ss");
}
if (bRun)
{
int takeNum = 10;
if (!string.IsNullOrEmpty(sendData.StartDate) || !string.IsNullOrEmpty(sendData.EndDate))
takeNum = 100;
var listData = await _dsPoliceSendChainAlarmDcjtRepository.Queryable()
.WhereIF(!string.IsNullOrEmpty(sendData.StartDate), p => p.CallPoliceTime >= Convert.ToDateTime(sendData.StartDate))
.WhereIF(!string.IsNullOrEmpty(sendData.EndDate), p => p.CallPoliceTime <= Convert.ToDateTime(sendData.EndDate))
.Select(p => new ChainAlarm_DCJTNewDto
{
LSH = p.SerialNumber,
JJYBH = p.RegisterNo,
JJYXM = p.RegisterName,
JJDBH = p.AlarmReceiptNumber,
BJDH = p.CallPoliceNumber,
BJRXB = p.FromGender,
BJDHYHM = p.CallPoliceName,
LXDH = p.PhoneNumber,
BJDZ = p.CallPoliceAddress,
JQLBDM = p.PoliceTypeCode,
JQLBMC = p.PoliceTypeName,
BJNR = p.CallPoliceContent,
GXDWDM = p.JurisdictionalUnitCode,
GXDWMC = p.JurisdictionalUnitName,
GXDWDH = p.JurisdictionalUnitNumber,
BJSJ = p.CallPoliceTime,
TSSJ = p.PushTime,
JJDWDM = p.AlarmReceivingUnitCode,
JJDWMC = p.AlarmReceivingUnitName,
JJLX = p.AlarmReceptionType,
XZQHDM = p.AreaCode
})
.OrderByDescending(p => p.TSSJ)
.Take(takeNum)
.ToListAsync();
if (null == listData)
apiR = DCJTDeResponse.Failed(null);
else
{
var daoShuDe = DaoShuDeResponse>.Succeed(listData, "调用成功");
string jsonResultok = ModelToJson(daoShuDe);
// 加密:json通过sm4加密转base64
string base64ok = Sm4Crypto.Encrypt_ECB_Base64(sm4, jsonResultok);
_logger.LogInformation($"输出:" + $"\r\n\r\nbase64:{base64ok}\r\nJson:{jsonResultok}");
return OpenResponse.Ok(base64ok);
}
}
}
}
catch (Exception)
{
apiR = DCJTDeResponse.Failed(null, "接口异常");
}
#region 处理返回数据
// 返回数据转Json
string jsonResult = ModelToJson(apiR);
// 加密:json通过sm4加密转base64
string base64 = Sm4Crypto.Encrypt_ECB_Base64(sm4, jsonResult);
_logger.LogInformation($"输出:" + $"\r\n\r\nbase64:{base64}\r\nJson:{jsonResult}");
#endregion
return OpenResponse.Ok(base64);
}
#endregion
#region send-工单办结---12345将110推过来的工单办理结果推送给110
///
/// 工单办结
///
///
[HttpPost("service/api/dcjt/12345To110/chainDeal")]
[AllowAnonymous]
public async Task ChainDeal_Send()
{
// 测试JSON
// {"JJDBH":"510300202304070001202304070001","CZLX":"1"}
// 测试Base64
// 6RB6Hat8dpBfvCTtEpwotd/MlonxdmqZaa3TcLaua/xcjFv1SZJzKZPrhgsux63Gq/DXxtAQ25buLsI1fgFv3g==
ConfigurationPoliceDCJT configurationPoliceDCJT = new();
//根据不同地市州获取不同的配置信息
if (_sharingConfigurationManager.IsCity(ConfigurationConsts.ZiGong))
configurationPoliceDCJT = _sharingConfigurationManager.GetZiGongConfig().PoliceDCJT;
string sm4 = configurationPoliceDCJT.token2_sm4_mw;
var apiR = new DCJTDeResponse();
try
{
// 验证dcsm
string dcsmMsg = CheckDcsm(Request.Headers["dcsm"].ToString(), configurationPoliceDCJT.token2_dcsm);
if (!string.IsNullOrEmpty(dcsmMsg))
{
apiR = DCJTDeResponse.Failed(null, dcsmMsg);
}
else
{
string base64String = await GetStreamBase64(HttpContext.Request);
SendData sendData = new();
if (!string.IsNullOrEmpty(base64String))
{
// 解密:base64通过sm4解密转json
string jsonRes = Sm4Crypto.Decrypt_ECB_Base64(sm4, base64String);
if (!string.IsNullOrEmpty(jsonRes))
// json 转 实体类
sendData = System.Text.Json.JsonSerializer.Deserialize(jsonRes);
//await InitRawData("service/api/dcjt/12345To110/chainDeal", base64String, jsonRes, sendData?.AlarmReceiptNumber);
}
bool bRun = true;
if (!string.IsNullOrEmpty(sendData.StartDate) && !IsDate(sendData.StartDate))
{
bRun = false;
apiR = DCJTDeResponse.Failed(null, "【创建开始时间】不是日期格式 yyyy-MM-dd HH:mm:ss");
}
if (!string.IsNullOrEmpty(sendData.EndDate) && !IsDate(sendData.EndDate))
{
bRun = false;
apiR = DCJTDeResponse.Failed(null, "【创建结束时间】不是日期格式 yyyy-MM-dd HH:mm:ss");
}
if (bRun)
{
//默认查询20条,当有参数查询100条
int takeNum = 20;
if (!string.IsNullOrEmpty(sendData.StartDate) || !string.IsNullOrEmpty(sendData.EndDate))
takeNum = 100;
if (!string.IsNullOrEmpty(sendData.AlarmReceiptNumber))
takeNum = 100;
if (!string.IsNullOrEmpty(sendData.DisposalType))
takeNum = 100;
var listData = await _dsPoliceSendChainDealDcjtRepository.Queryable()
.WhereIF(!string.IsNullOrEmpty(sendData.StartDate), p => p.WarehousingTime >= Convert.ToDateTime(sendData.StartDate))
.WhereIF(!string.IsNullOrEmpty(sendData.EndDate), p => p.WarehousingTime <= Convert.ToDateTime(sendData.EndDate))
.WhereIF(!string.IsNullOrEmpty(sendData.AlarmReceiptNumber), p => p.AlarmReceiptNumber == sendData.AlarmReceiptNumber)
// .Where(p => p.DisposalType == sendData.DisposalType)
.WhereIF(!string.IsNullOrEmpty(sendData.DisposalType), p => sendData.DisposalType.Contains(p.DisposalType))
.Select(p => new ChainDeal_DCJTNewDto
{
JJDBH = p.AlarmReceiptNumber,
FKSJ = p.FeedbackTime,
CJCZQK = p.DisposalSituation,
JQCLJGSM = p.ResultDescription,
FKYBH = p.FeedbackPersonNumber,
FKYXM = p.FeedbackPersonName,
FKDWDM = p.FeedbackUnitCode,
FKDWMC = p.FeedbackUnitName,
TSSJ = p.WarehousingTime,
HFSJ = p.RevisitTime,
DHHFHSQK = p.CheckingContent,
CLJGDM = p.VisitResult,
CLJGMC = p.VisitContent,
HANDLEUSERNAME = p.ReturnName,
HANDLEBMNAME = p.ReturnUnit,
HANDLEOPINION = p.ReturnOpinion,
HANDLETIME = p.ReturnTime,
CZLX = p.DisposalType,
DYYY = p.CreatorName
})
.OrderByDescending(p => p.TSSJ)
.Take(50)
.ToListAsync();
if (null == listData)
apiR = DCJTDeResponse.Failed(null);
else
{
var daoShuDe = DCJTDeResponse>.Succeed(listData, "调用成功");
string jsonResultok = ModelToJson(daoShuDe);
// 加密:json通过sm4加密转base64
string base64ok = Sm4Crypto.Encrypt_ECB_Base64(sm4, jsonResultok);
_logger.LogInformation($"输出:" + $"\r\n\r\nbase64:{base64ok}\r\nJson:{jsonResultok}");
return OpenResponse.Ok(base64ok);
}
}
}
}
catch (Exception)
{
apiR = DCJTDeResponse.Failed(null, "接口异常");
}
// 返回数据转Json
string jsonResult = ModelToJson(apiR);
// 加密:json通过sm4加密转base64
string base64 = Sm4Crypto.Encrypt_ECB_Base64(sm4, jsonResult);
_logger.LogInformation($"输出:" + $"\r\n\r\nbase64:{base64}\r\nJson:{jsonResult}");
return OpenResponse.Ok(base64);
}
#endregion
#region send-知识库列表-已完成
///
/// 查询知识库列表
///
///
[HttpPost("service/api/dcjt/get_knowledge_info")]
[AllowAnonymous]
public async Task Get_Knowledge_Info()
{
// 测试Json
// {"createTimeBegin":"2003-04-07 10:59:14","createTimeEnd":"2023-12-07 10:59:21","keyWord":"市民"}
// {"createTimeBegin":"2003-04-07 10:59:14","createTimeEnd":"2023-12-07 10:59:21","keyWord":""}
// 测试Base64
// sVGPN7BDsKnDLrd6NzrGx+2IH6vVAo6bjGSenIgCJATssZduYxBOLdQi7TVdsBCy7AGk15xjKRVe4AdovL6r49fxDvWjyDlxS8K4qkukEOtYs/VyP6WIdiKQL6PC3i/T
// sVGPN7BDsKnDLrd6NzrGx+2IH6vVAo6bjGSenIgCJATssZduYxBOLdQi7TVdsBCy7AGk15xjKRVe4AdovL6r49fxDvWjyDlxS8K4qkukEOuaeRL4jMcFsN7HoUTHfDrk
ConfigurationPoliceDCJT configurationPoliceDCJT = new();
//根据不同地市州获取不同的配置信息
if (_sharingConfigurationManager.IsCity(ConfigurationConsts.ZiGong))
configurationPoliceDCJT = _sharingConfigurationManager.GetZiGongConfig().PoliceDCJT;
string sm4 = configurationPoliceDCJT.token5_sm4_mw;
var apiR = new DCJTDeResponse();
try
{
// 验证dcsm
string dcsmMsg = CheckDcsm(Request.Headers["dcsm"].ToString(), configurationPoliceDCJT.token5_dcsm);
if (!string.IsNullOrEmpty(dcsmMsg))
{
apiR = DCJTDeResponse.Failed(dcsmMsg);
}
else
{
string base64String = await GetStreamBase64(HttpContext.Request);
SendKnowledgeRequestDto sendKnowledge = new SendKnowledgeRequestDto();
if (!string.IsNullOrEmpty(base64String))
{
// 解密:base64通过sm4解密转json
string jsonRes = Sm4Crypto.Decrypt_ECB_Base64(sm4, base64String);
if (!string.IsNullOrEmpty(jsonRes))
// json 转 实体类
sendKnowledge = System.Text.Json.JsonSerializer.Deserialize(jsonRes);
await InitRawData("service/api/dcjt/get_knowledge_info", base64String, jsonRes, null);
}
bool bRun = true;
if (string.IsNullOrEmpty(sendKnowledge.createTimeBegin) || !IsDate(sendKnowledge.createTimeBegin))
{
bRun = false;
apiR = DCJTDeResponse.Failed("【创建开始时间】不是日期格式 yyyy-MM-dd HH:mm:ss");
}
if (string.IsNullOrEmpty(sendKnowledge.createTimeEnd) || !IsDate(sendKnowledge.createTimeEnd))
{
bRun = false;
apiR = DCJTDeResponse.Failed("【创建结束时间】不是日期格式 yyyy-MM-dd HH:mm:ss");
}
if (bRun)
{
var listData = await _dsKnowledgeRawDataRepository
.Queryable()
.WhereIF(!string.IsNullOrEmpty(sendKnowledge.createTimeBegin), p => p.CreatDate >= Convert.ToDateTime(sendKnowledge.createTimeBegin))
.WhereIF(!string.IsNullOrEmpty(sendKnowledge.createTimeEnd), p => p.CreatDate <= Convert.ToDateTime(sendKnowledge.createTimeEnd))
.WhereIF(!string.IsNullOrEmpty(sendKnowledge.keyWord), p => p.KName.Contains(sendKnowledge.keyWord))
.OrderByDescending(p => p.CreatDate)
.ToListAsync();
if (null == listData)
apiR = DCJTDeResponse.Failed(null);
else
{
var dto = _mapper.Map>(listData);
// 返回数据
apiR = DCJTDeResponse.Succeed(System.Text.Json.JsonSerializer.Serialize(dto), "调用成功");
}
}
}
}
catch (Exception)
{
apiR = DCJTDeResponse.Failed("接口异常");
}
#region 处理返回数据
// 返回数据转Json
string jsonResult = ModelToJson(apiR);
// 加密:json通过sm4加密转base64
string base64 = Sm4Crypto.Encrypt_ECB_Base64(sm4, jsonResult);
#endregion
return OpenResponse.Ok(base64);
}
#endregion
#region send-知识库内容-已完成
///
/// 查询知识库内容
///
///
[HttpPost("service/api/dcjt/get_knowledge_content")]
[AllowAnonymous]
public async Task Get_Knowledge_Content()
{
ConfigurationPoliceDCJT configurationPoliceDCJT = new();
//根据不同地市州获取不同的配置信息
if (_sharingConfigurationManager.IsCity(ConfigurationConsts.ZiGong))
configurationPoliceDCJT = _sharingConfigurationManager.GetZiGongConfig().PoliceDCJT;
string sm4 = configurationPoliceDCJT.token6_sm4_mw;
var apiR = new DCJTDeResponse();
try
{
// 验证dcsm
string dcsmMsg = CheckDcsm(Request.Headers["dcsm"].ToString(), configurationPoliceDCJT.token6_dcsm);
if (!string.IsNullOrEmpty(dcsmMsg))
apiR = DCJTDeResponse.Failed(dcsmMsg);
else
{
string base64String = await GetStreamBase64(HttpContext.Request);
SendKnowledgeRequestDto sendKnowledge = new SendKnowledgeRequestDto();
if (!string.IsNullOrEmpty(base64String))
{
// 解密:base64通过sm4解密转json
string jsonRes = Sm4Crypto.Decrypt_ECB_Base64(sm4, base64String);
if (!string.IsNullOrEmpty(jsonRes))
// json 转 实体类
sendKnowledge = System.Text.Json.JsonSerializer.Deserialize(jsonRes);
await InitRawData("service/api/dcjt/get_knowledge_content", base64String, jsonRes, null);
}
if (string.IsNullOrEmpty(sendKnowledge.id))
{
apiR = DCJTDeResponse.Failed("【知识库ID】不能为空");
}
else
{
var data = await _dsKnowledgeRawDataRepository.GetAsync(p => p.Id == sendKnowledge.id);
if (null == data)
apiR = DCJTDeResponse.Failed(null);
else
{
var dto = _mapper.Map(data);
// 返回数据
apiR = DCJTDeResponse.Succeed(System.Text.Json.JsonSerializer.Serialize(dto), "调用成功");
}
}
}
}
catch (Exception)
{
apiR = DCJTDeResponse.Failed("接口异常");
}
#region 处理返回数据
// 返回数据转Json
string jsonResult = ModelToJson(apiR);
// 加密:json通过sm4加密转base64
string base64 = Sm4Crypto.Encrypt_ECB_Base64(sm4, jsonResult);
#endregion
return OpenResponse.Ok(base64);
}
#endregion
#region 私有方法
#region 工单办结
///
/// 工单办结
///
///
///
private async Task InitChainDeal(ChainDeal_DCJT policeReceiveChainDealDs)
{
var checkDataDeal = await _dsPoliceSendChainAlarmDcjtRepository.GetAsync(p => p.AlarmReceiptNumber == policeReceiveChainDealDs.AlarmReceiptNumber && p.AlarmReceptionType == "0", HttpContext.RequestAborted);
if (checkDataDeal is null)
{
//写入对外展示表数据
DsReceiveHandleData dsReceive = new()
{
OrderNo = policeReceiveChainDealDs.AlarmReceiptNumber,
Source = "110平台",
PlatformsName = "110平台",
ReceiveData = System.Text.Json.JsonSerializer.Serialize(policeReceiveChainDealDs)
};
if (policeReceiveChainDealDs.DisposalType == "1")//正常办理
{
dsReceive.OperationType = "110推送办理结果";
dsReceive.Opinion = policeReceiveChainDealDs.DisposalSituation;
}
else if (policeReceiveChainDealDs.DisposalType == "2")//退回
{
dsReceive.OperationType = "110退回";
dsReceive.Opinion = policeReceiveChainDealDs.ReturnOpinion;
}
else if (policeReceiveChainDealDs.DisposalType == "3")//回访
{
var orgProcessingResults = policeReceiveChainDealDs.VisitResult switch
{
"1" => "非常满意",//非常满意
"2" => "满意",//满意
"3" => "不满意",//不满意
_ => "满意",
};
dsReceive.OperationType = "110回访内容";
dsReceive.Opinion = "回访时间:" + policeReceiveChainDealDs.RevisitTime + "/br回访内容:" + policeReceiveChainDealDs.VisitContent + "/br回访方式:人工回访/br满意度" + orgProcessingResults;
}
await _dsReceiveHandleDataRepository.AddAsync(dsReceive, HttpContext.RequestAborted);
return;
}
if (policeReceiveChainDealDs.DisposalType == "1")//正常办理
{
OrderResultDto orderResultDto = new()
{
OrderId = checkDataDeal.OrderId,
FinishType = "1",
Opinion = policeReceiveChainDealDs.DisposalSituation,
Source = "110"
};
await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.SharingOrderReultSend, orderResultDto, cancellationToken: HttpContext.RequestAborted);
}
else if (policeReceiveChainDealDs.DisposalType == "2")//退回
{
OrderResultDto orderResultDto = new()
{
OrderId = checkDataDeal.OrderId,
FinishType = "0",
Opinion = policeReceiveChainDealDs.ReturnOpinion,
Source = "110"
};
//向业务系统推送消息
await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.SharingOrderReultSend, orderResultDto, cancellationToken: HttpContext.RequestAborted);
}
else if (policeReceiveChainDealDs.DisposalType == "3")//回访
{
ProvinceOrderVisitDto orderVisitDto = new()
{
ProvinceNo = checkDataDeal.OrderId,
VisitTime = Convert.ToDateTime(policeReceiveChainDealDs.RevisitTime),
VisitContent = policeReceiveChainDealDs.VisitContent,
// OrgProcessingResults = policeReceiveChainDealDs.VisitResult,
VisitType = EVisitType.ArtificialVisit
};
orderVisitDto.OrgProcessingResults = policeReceiveChainDealDs.VisitResult switch
{
"1" => "5",//非常满意
"2" => "4",//满意
"3" => "2",//不满意
_ => "4",
};
//向业务系统推送消息
await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.SharingOrderEvlResult, orderVisitDto, cancellationToken: HttpContext.RequestAborted);
}
else if (policeReceiveChainDealDs.DisposalType == "4" || policeReceiveChainDealDs.DisposalType == "5")
{
//自贡独有业务,目前不需要处理(老系统未处理),4警情签收,5结果签收
}
}
#endregion
#region 写入原始数据
///
/// 写入原始数据
///
///
///
///
///
///
private async Task InitRawData(string serviceInterface, string receiveRawData, string receiveData, string? externalId)
{
DsReceivePoliceData dsReceivePoliceData = new()
{
ExternalId = externalId,
ServiceInterface = serviceInterface,
ReceiveRawData = receiveRawData,
ReceiveData = receiveData,
PoliceSource = EPoliceSource.DCJT
};
return await _dsReceivePoliceDataRepository.AddAsync(dsReceivePoliceData, HttpContext.RequestAborted);
}
#endregion
#region 获取RAW传入的Base64_Json
///
/// 获取RAW传入的Base64_Json
///
///
///
private static async Task GetStreamBase64(HttpRequest request)
{
string base64String = "";
try
{
request.EnableBuffering();
request.Body.Position = 0;
using (var stream = new StreamReader(request.Body, Encoding.UTF8))
{
base64String = await stream.ReadToEndAsync();
}
}
catch (Exception)
{
}
return base64String;
}
#endregion
#region 验证DCSM是否正确
///
/// 验证DCSM是否正确
///
///
///
///
private static string CheckDcsm(string headrs, string dcsmIn)
{
string result = "";
string dcsm = "";
try
{
dcsm = headrs.ToString();
if (dcsm != dcsmIn)
{
result = "【dcsm】错误";
}
}
catch (Exception)
{
result = "【dcsm】不能为空";
}
return result;
}
#endregion
#region 验证日期
private static bool IsDate(string strDate)
{
try
{
if (strDate.Contains('.') == true || strDate.Contains(',') == true)
{
return false;
}
DateTime.Parse(strDate); //不是字符串时会出现异常
return true;
}
catch
{
return false;
}
}
#endregion
#region 转Json
///
/// 转Json
///
///
///
private static string ModelToJson(object obj)
{
string jsonstr = "";
try
{
IsoDateTimeConverter timejson = new IsoDateTimeConverter
{
DateTimeFormat = "yyyy'-'MM'-'dd' 'HH':'mm':'ss"
//如果是年月日的话就是 :DateTimeFormat = "yyyy'-'MM'-'dd" 注意第一个y前面没有单引号 最后一个d后面也没有单引号
};
jsonstr = JsonConvert.SerializeObject(obj, timejson);
}
catch (Exception)
{
}
return jsonstr;
}
#endregion
#endregion
}
}