Bläddra i källkod

新增大成均图

tangjiang 10 månader sedan
förälder
incheckning
d9a195406a

+ 847 - 0
src/DataSharing.Host/Controllers/Police110/PoliceDCJTController.cs

@@ -0,0 +1,847 @@
+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.Net;
+using System.Text;
+using XF.Domain.Filters;
+using XF.Domain.Repository;
+
+namespace DataSharing.Host.Controllers.Police110
+{
+    /// <summary>
+    /// 110工单交互
+    /// 公司:大成均图
+    /// 市州:自贡、雅安
+    /// </summary>
+    public class PoliceDCJTController : BaseController
+    {
+        #region 注入
+        private readonly IMapper _mapper;
+        private readonly ICapPublisher _capPublisher;
+        private readonly IMediator _mediator;
+        private readonly IRepository<DsPoliceSendChainAlarmDcjt> _dsPoliceSendChainAlarmDcjtRepository;
+        private readonly IRepository<DsPoliceSendChainDealDcjt> _dsPoliceSendChainDealDcjtRepository;
+        private readonly IRepository<DsKnowledgeRawData> _dsKnowledgeRawDataRepository;
+        private readonly IRepository<DsOrder> _dsOrderRepository;
+        private readonly IRepository<DsReceivePoliceData> _dsReceivePoliceDataRepository;
+        private readonly FwClient _fwClient;
+        private readonly ISharingConfigurationManager _sharingConfigurationManager;
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="mapper"></param>
+        /// <param name="capPublisher"></param>
+        /// <param name="mediator"></param>
+        /// <param name="dsPoliceSendChainAlarmDcjtRepository"></param>
+        /// <param name="dsPoliceSendChainDealDcjtRepository"></param>
+        /// <param name="dsKnowledgeRawDataRepository"></param>
+        /// <param name="dsOrderRepository"></param>
+        /// <param name="dsReceivePoliceDataRepository"></param>
+        /// <param name="fwClient"></param>
+        /// <param name="sharingConfigurationManager"></param>
+        public PoliceDCJTController(IMapper mapper,
+            ICapPublisher capPublisher,
+            IMediator mediator,
+            IRepository<DsPoliceSendChainAlarmDcjt> dsPoliceSendChainAlarmDcjtRepository,
+            IRepository<DsPoliceSendChainDealDcjt> dsPoliceSendChainDealDcjtRepository,
+            IRepository<DsKnowledgeRawData> dsKnowledgeRawDataRepository,
+            IRepository<DsOrder> dsOrderRepository,
+            IRepository<DsReceivePoliceData> dsReceivePoliceDataRepository,
+            FwClient fwClient,
+            ISharingConfigurationManager sharingConfigurationManager)
+        {
+            _mapper = mapper;
+            _capPublisher = capPublisher;
+            _mediator = mediator;
+            _dsPoliceSendChainAlarmDcjtRepository = dsPoliceSendChainAlarmDcjtRepository;
+            _dsPoliceSendChainDealDcjtRepository = dsPoliceSendChainDealDcjtRepository;
+            _dsKnowledgeRawDataRepository = dsKnowledgeRawDataRepository;
+            _dsOrderRepository = dsOrderRepository;
+            _dsReceivePoliceDataRepository = dsReceivePoliceDataRepository;
+            _fwClient = fwClient;
+            _sharingConfigurationManager = sharingConfigurationManager;
+        }
+        #endregion
+
+        #region receive-工单受理-已完成---110推送受理工单给12345
+
+        /// <summary>
+        /// 工单受理
+        /// </summary>
+        /// <returns></returns>
+        [HttpPost("/service/api/dcjt/110To12345/chainAlarm")]
+        [AllowAnonymous]
+        public async Task<OpenResponse> 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;
+
+            var sm4 = configurationPoliceDCJT.token1_sm4_mw;
+            var apiR = new DCJTDeResponse<string>();
+            try
+            {
+                // 验证dcsm
+                string dcsmMsg = CheckDcsm(Request.Headers["dcsm"].ToString(), configurationPoliceDCJT.token1_dcsm);
+                if (!string.IsNullOrEmpty(dcsmMsg))
+                {
+                    apiR = DCJTDeResponse<string>.Failed(dcsmMsg);
+                }
+                else
+                {
+                    string base64String = await GetStreamBase64(HttpContext.Request);
+                    ChainAlarm_DCJT chainAlarm = new();
+                    if (!string.IsNullOrEmpty(base64String))
+                    {
+                        // 解密:base64通过sm4解密转json
+                        string jsonRes = Sm4Crypto.Decrypt_ECB_Base64(sm4, base64String);
+                        // json 转 实体类
+                        if (!string.IsNullOrEmpty(jsonRes))
+                            chainAlarm = System.Text.Json.JsonSerializer.Deserialize<ChainAlarm_DCJT>(jsonRes);
+
+                        await InitRawData("/service/api/dcjt/110To12345/chainAlarm", base64String, jsonRes, chainAlarm?.AlarmReceiptNumber);
+                    }
+
+                    #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 = "YB110",
+                            Source = ESource.Police110,
+                            IdentityType = EIdentityType.Citizen,
+                            Transpond = false,
+                            IsEnforcementOrder = false,
+                            Title = string.Empty
+                        };
+
+                        orderDto.FromGender = chainAlarm.FromGender switch
+                        {
+                            "0" => EGender.Female,
+                            "1" => EGender.Male,
+                            _ => EGender.Unknown,
+                        };
+
+
+                        //调用工单创建接口
+                        var result = await _fwClient.RequestNoTokenAsync<HotlineClientResponse>("api/v1/Order/add-anonymous", "Post", System.Text.Json.JsonSerializer.Serialize(orderDto));
+                        if (result != null && result.code == 0)
+                            apiR = DCJTDeResponse<string>.Succeed(null);
+                        else
+                            apiR = DCJTDeResponse<string>.Failed(null);
+
+                    }
+                    else
+                        apiR = DCJTDeResponse<string>.Failed(strResult);
+                }
+            }
+            catch (Exception)
+            {
+                apiR = DCJTDeResponse<string>.Failed("接口异常");
+            }
+
+            #region 处理返回数据
+            // 返回数据转Json
+            string jsonResult = ModelToJson(apiR);
+            // 加密:json通过sm4加密转base64
+            string base64 = Sm4Crypto.Encrypt_ECB_Base64(sm4, jsonResult);
+
+            var resp = new HttpResponseMessage(HttpStatusCode.OK);
+            resp.Content = new StringContent(base64, Encoding.UTF8, "text/plain");
+            #endregion
+
+            return OpenResponse.Ok(resp);
+        }
+
+        #endregion
+
+        #region receive-工单办结---110推送办理结果给12345
+
+        /// <summary>
+        /// 工单办结
+        /// </summary>
+        /// <returns></returns>
+        [HttpPost("service/api/dcjt/110To12345/chainDeal")]
+        [AllowAnonymous]
+        public async Task<OpenResponse> 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<string>();
+            try
+            {
+                // 验证dcsm
+                string dcsmMsg = CheckDcsm(Request.Headers["dcsm"].ToString(), configurationPoliceDCJT.token4_dcsm);
+                if (!string.IsNullOrEmpty(dcsmMsg))
+                {
+                    apiR = DCJTDeResponse<string>.Failed(dcsmMsg);
+                }
+                else
+                {
+                    ChainDeal_DCJT chainDeal = 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 转 实体类
+                            chainDeal = System.Text.Json.JsonSerializer.Deserialize<ChainDeal_DCJT>(jsonRes);
+
+                        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<string>.Succeed(null);
+                    }
+                    else
+                        apiR = DCJTDeResponse<string>.Failed(null);
+
+                }
+            }
+            catch (Exception)
+            {
+                apiR = DCJTDeResponse<string>.Failed("接口异常");
+            }
+
+            // 返回数据转Json
+            string jsonResult = ModelToJson(apiR);
+            // 加密:json通过sm4加密转base64
+            string base64 = Sm4Crypto.Encrypt_ECB_Base64(sm4, jsonResult);
+
+            var resp = new HttpResponseMessage(HttpStatusCode.OK);
+            resp.Content = new StringContent(base64, Encoding.UTF8, "text/plain");
+            return OpenResponse.Ok(resp);
+        }
+
+        #endregion
+
+        #region send-工单受理-已完成---12345将警情工单推送给110
+
+        /// <summary>
+        /// 工单受理
+        /// </summary>
+        /// <returns></returns>
+        [HttpPost("service/api/dcjt/12345To110/chainAlarm")]
+        [AllowAnonymous]
+        public async Task<OpenResponse> 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<string>();
+            try
+            {
+                // 验证dcsm
+                string dcsmMsg = CheckDcsm(Request.Headers["dcsm"].ToString(), configurationPoliceDCJT.token3_dcsm);
+                if (!string.IsNullOrEmpty(dcsmMsg))
+                {
+                    apiR = DCJTDeResponse<string>.Failed(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<SendData>(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<string>.Failed("【创建开始时间】不是日期格式 yyyy-MM-dd HH:mm:ss");
+                    }
+                    if (string.IsNullOrEmpty(sendData.EndDate) || !IsDate(sendData.EndDate))
+                    {
+                        bRun = false;
+                        apiR = DCJTDeResponse<string>.Failed("【创建结束时间】不是日期格式 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))
+                             .OrderBy(p => p.CallPoliceTime)
+                             .Take(takeNum)
+                             .ToListAsync();
+
+                        if (null == listData)
+                            apiR = DCJTDeResponse<string>.Failed(null);
+                        else
+                        {
+                            var dto = _mapper.Map<IReadOnlyList<ChainAlarm_DCJT>>(listData);
+                            // 返回数据
+                            apiR = DCJTDeResponse<string>.Succeed(System.Text.Json.JsonSerializer.Serialize(dto), "调用成功");
+                        }
+                    }
+                }
+            }
+            catch (Exception)
+            {
+                apiR = DCJTDeResponse<string>.Failed("接口异常");
+            }
+
+            // 返回数据转Json
+            string jsonResult = ModelToJson(apiR);
+            // 加密:json通过sm4加密转base64
+            string base64 = Sm4Crypto.Encrypt_ECB_Base64(sm4, jsonResult);
+
+            var resp = new HttpResponseMessage(HttpStatusCode.OK);
+            resp.Content = new StringContent(base64, Encoding.UTF8, "text/plain");
+            return OpenResponse.Ok(resp);
+        }
+
+        #endregion
+
+        #region send-工单办结---12345将110推过来的工单办理结果推送给110
+
+        /// <summary>
+        /// 工单办结
+        /// </summary>
+        /// <returns></returns>
+        [HttpPost("service/api/dcjt/12345To110/chainDeal")]
+        [AllowAnonymous]
+        public async Task<OpenResponse> 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<string>();
+            try
+            {
+                // 验证dcsm
+                string dcsmMsg = CheckDcsm(Request.Headers["dcsm"].ToString(), configurationPoliceDCJT.token2_dcsm);
+                if (!string.IsNullOrEmpty(dcsmMsg))
+                {
+                    apiR = DCJTDeResponse<string>.Failed(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<SendData>(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<string>.Failed("【创建开始时间】不是日期格式 yyyy-MM-dd HH:mm:ss");
+                    }
+                    if (!string.IsNullOrEmpty(sendData.EndDate) && !IsDate(sendData.EndDate))
+                    {
+                        bRun = false;
+                        apiR = DCJTDeResponse<string>.Failed("【创建结束时间】不是日期格式 yyyy-MM-dd HH:mm:ss");
+                    }
+
+                    if (bRun)
+                    {
+                        //默认查询20条,当有参数查询100条
+                        int takeNum = 20;
+                        if (!string.IsNullOrEmpty(sendData.StartDate) || !string.IsNullOrEmpty(sendData.EndDate))
+                            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)
+                                 .OrderBy(p => p.WarehousingTime)
+                                 .Take(50)
+                                 .ToListAsync();
+
+                        if (null == listData)
+                            apiR = DCJTDeResponse<string>.Failed(null);
+                        else
+                        {
+                            var dto = _mapper.Map<IReadOnlyList<ChainDeal_DCJT>>(listData);
+                            // 返回数据
+                            apiR = DCJTDeResponse<string>.Succeed(System.Text.Json.JsonSerializer.Serialize(dto), "调用成功");
+                        }
+                    }
+                }
+            }
+            catch (Exception)
+            {
+                apiR = DCJTDeResponse<string>.Failed("接口异常");
+            }
+
+            // 返回数据转Json
+            string jsonResult = ModelToJson(apiR);
+            // 加密:json通过sm4加密转base64
+            string base64 = Sm4Crypto.Encrypt_ECB_Base64(sm4, jsonResult);
+
+            var resp = new HttpResponseMessage(HttpStatusCode.OK);
+            resp.Content = new StringContent(base64, Encoding.UTF8, "text/plain");
+            return OpenResponse.Ok(resp);
+        }
+
+        #endregion
+
+        #region send-知识库列表-已完成
+
+        /// <summary>
+        /// 查询知识库列表
+        /// </summary>
+        /// <returns></returns>
+        [HttpPost("service/api/dcjt/get_knowledge_info")]
+        [AllowAnonymous]
+        public async Task<OpenResponse> 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<string>();
+            try
+            {
+                // 验证dcsm
+                string dcsmMsg = CheckDcsm(Request.Headers["dcsm"].ToString(), configurationPoliceDCJT.token5_dcsm);
+                if (!string.IsNullOrEmpty(dcsmMsg))
+                {
+                    apiR = DCJTDeResponse<string>.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<SendKnowledgeRequestDto>(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<string>.Failed("【创建开始时间】不是日期格式 yyyy-MM-dd HH:mm:ss");
+                    }
+                    if (string.IsNullOrEmpty(sendKnowledge.createTimeEnd) || !IsDate(sendKnowledge.createTimeEnd))
+                    {
+                        bRun = false;
+                        apiR = DCJTDeResponse<string>.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<string>.Failed(null);
+                        else
+                        {
+                            var dto = _mapper.Map<IReadOnlyList<KnowledgeDto>>(listData);
+                            // 返回数据
+                            apiR = DCJTDeResponse<string>.Succeed(System.Text.Json.JsonSerializer.Serialize(dto), "调用成功");
+                        }
+                    }
+                }
+            }
+            catch (Exception)
+            {
+                apiR = DCJTDeResponse<string>.Failed("接口异常");
+            }
+
+            // 返回数据转Json
+            string jsonResult = ModelToJson(apiR);
+            // 加密:json通过sm4加密转base64
+            string base64 = Sm4Crypto.Encrypt_ECB_Base64(sm4, jsonResult);
+
+            var resp = new HttpResponseMessage(HttpStatusCode.OK);
+            resp.Content = new StringContent(base64, Encoding.UTF8, "text/plain");
+            return OpenResponse.Ok(resp);
+        }
+
+        #endregion
+
+        #region send-知识库内容-已完成
+
+        /// <summary>
+        /// 查询知识库内容
+        /// </summary>
+        /// <returns></returns>
+        [HttpPost("service/api/dcjt/get_knowledge_content")]
+        [AllowAnonymous]
+        public async Task<OpenResponse> 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<string>();
+            try
+            {
+                // 验证dcsm
+                string dcsmMsg = CheckDcsm(Request.Headers["dcsm"].ToString(), configurationPoliceDCJT.token6_dcsm);
+                if (!string.IsNullOrEmpty(dcsmMsg))
+                    apiR = DCJTDeResponse<string>.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<SendKnowledgeRequestDto>(jsonRes);
+
+                        await InitRawData("service/api/dcjt/get_knowledge_content", base64String, jsonRes, null);
+                    }
+
+                    if (string.IsNullOrEmpty(sendKnowledge.id))
+                    {
+                        apiR = DCJTDeResponse<string>.Failed("【知识库ID】不能为空");
+                    }
+                    else
+                    {
+                        var data = await _dsKnowledgeRawDataRepository.GetAsync(p => p.Id == sendKnowledge.id);
+                        if (null == data)
+                            apiR = DCJTDeResponse<string>.Failed(null);
+                        else
+                        {
+                            var dto = _mapper.Map<KnowledgeContent>(data);
+                            // 返回数据
+                            apiR = DCJTDeResponse<string>.Succeed(System.Text.Json.JsonSerializer.Serialize(dto), "调用成功");
+                        }
+                    }
+                }
+            }
+            catch (Exception)
+            {
+                apiR = DCJTDeResponse<string>.Failed("接口异常");
+            }
+
+            // 返回数据转Json
+            string jsonResult = ModelToJson(apiR);
+            // 加密:json通过sm4加密转base64
+            string base64 = Sm4Crypto.Encrypt_ECB_Base64(sm4, jsonResult);
+
+            var resp = new HttpResponseMessage(HttpStatusCode.OK);
+            resp.Content = new StringContent(base64, Encoding.UTF8, "text/plain");
+            return OpenResponse.Ok(resp);
+        }
+
+        #endregion
+
+        #region 私有方法
+
+        #region 工单办结
+
+        /// <summary>
+        /// 工单办结
+        /// </summary>
+        /// <param name="policeReceiveChainDealDs"></param>
+        /// <returns></returns>
+        private async Task InitChainDeal(ChainDeal_DCJT policeReceiveChainDealDs)
+        {
+            var orderData = await _dsOrderRepository.GetAsync(p => p.ExternalId == policeReceiveChainDealDs.AlarmReceiptNumber);
+            if (orderData is null)
+                return;
+
+            if (policeReceiveChainDealDs.DisposalType == "1")//正常办理
+            {
+                OrderResultDto orderResultDto = new()
+                {
+                    OrderId = orderData.OrderId,
+                    FinishType = "1",
+                    Opinion = policeReceiveChainDealDs.DisposalSituation,
+                    Source = "110"
+                };
+                await _capPublisher.PublishAsync(Share.Mq.EventNames.SharingOrderReultSend, orderResultDto, cancellationToken: HttpContext.RequestAborted);
+            }
+            else if (policeReceiveChainDealDs.DisposalType == "2")//退回 
+            {
+                OrderResultDto orderResultDto = new()
+                {
+                    OrderId = orderData.OrderId,
+                    FinishType = "0",
+                    Opinion = policeReceiveChainDealDs.ReturnOpinion,
+                    Source = "110"
+                };
+                //向业务系统推送消息
+                await _capPublisher.PublishAsync(Share.Mq.EventNames.SharingOrderReultSend, orderResultDto, cancellationToken: HttpContext.RequestAborted);
+
+            }
+            else if (policeReceiveChainDealDs.DisposalType == "3")//回访 
+            {
+                ProvinceOrderVisitDto orderVisitDto = new()
+                {
+                    ProvinceNo = orderData.ProvinceNo,
+                    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(Share.Mq.EventNames.SharingOrderEvlResult, orderVisitDto, cancellationToken: HttpContext.RequestAborted);
+            }
+        }
+
+        #endregion
+
+        #region 写入原始数据
+        /// <summary>
+        /// 写入原始数据
+        /// </summary>
+        /// <param name="externalId"></param>
+        /// <param name="serviceInterface"></param>
+        /// <param name="receiveRawData"></param>
+        /// <param name="receiveData"></param>
+        /// <returns></returns>
+        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
+            };
+            await _dsReceivePoliceDataRepository.AddAsync(dsReceivePoliceData, HttpContext.RequestAborted);
+        }
+        #endregion
+
+        #region 获取RAW传入的Base64_Json
+        /// <summary>
+        /// 获取RAW传入的Base64_Json
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns></returns>
+        private static async Task<string> 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是否正确
+
+        /// <summary>
+        /// 验证DCSM是否正确
+        /// </summary>
+        /// <param name="headrs"></param>
+        /// <param name="dcsmIn"></param>
+        /// <returns></returns>
+        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
+        /// <summary>
+        /// 转Json
+        /// </summary>
+        /// <param name="obj"></param>
+        /// <returns></returns>
+        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
+    }
+}

+ 8 - 5
src/DataSharing.Host/Controllers/Police110/PoliceDSController.cs

@@ -18,11 +18,14 @@ using XF.Domain.Filters;
 using XF.Domain.Repository;
 using DataSharing.Police110.Encryption;
 using DataSharing.Share.Dtos.Police110.DaoShu110;
+using DataSharing.Share.Dtos.Police110;
 
 namespace DataSharing.Host.Controllers.Police110
 {
     /// <summary>
-    /// 110
+    /// 110工单交互
+    /// 公司:道枢(上海)数字
+    /// 市州:德阳(新)、宜宾、阿坝、广元
     /// </summary>
     public class PoliceDSController : BaseController
     {
@@ -499,14 +502,14 @@ namespace DataSharing.Host.Controllers.Police110
                 {
                     string base64String = await GetStreamBase64(HttpContext.Request);
 
-                    Get_Knowledge get_Knowledge = new Get_Knowledge();
+                    GetKnowledgeRequestDto get_Knowledge = new GetKnowledgeRequestDto();
                     if (!string.IsNullOrEmpty(base64String))
                     {
                         // 解密:base64通过sm4解密转json
                         string jsonRes = Sm4Crypto.Decrypt_ECB_Base64(sm4, base64String);
                         if (!string.IsNullOrEmpty(jsonRes))
                             // json 转 实体类
-                            get_Knowledge = System.Text.Json.JsonSerializer.Deserialize<Get_Knowledge>(jsonRes);
+                            get_Knowledge = System.Text.Json.JsonSerializer.Deserialize<GetKnowledgeRequestDto>(jsonRes);
 
                         await InitRawData("service/api/ds/get_knowledge_info", base64String, jsonRes, null);
                     }
@@ -588,14 +591,14 @@ namespace DataSharing.Host.Controllers.Police110
                 {
                     string base64String = await GetStreamBase64(HttpContext.Request);
 
-                    Get_Knowledge get_Knowledge = new Get_Knowledge();
+                    GetKnowledgeRequestDto get_Knowledge = new GetKnowledgeRequestDto();
                     if (!string.IsNullOrEmpty(base64String))
                     {
                         // 解密:base64通过sm4解密转json
                         string jsonRes = Sm4Crypto.Decrypt_ECB_Base64(sm4, base64String);
                         if (!string.IsNullOrEmpty(jsonRes))
                             // json 转 实体类
-                            get_Knowledge = System.Text.Json.JsonSerializer.Deserialize<Get_Knowledge>(jsonRes);
+                            get_Knowledge = System.Text.Json.JsonSerializer.Deserialize<GetKnowledgeRequestDto>(jsonRes);
 
                         await InitRawData("service/api/ds/get_knowledge_content", base64String, jsonRes, null);
                     }

+ 4 - 3
src/DataSharing.Host/StartupExtensions.cs

@@ -1,6 +1,5 @@
 using DataSharing.Repository.Extensions;
 using DataSharing.SendTask;
-using DataSharing.YiBin;
 using FluentValidation;
 using FluentValidation.AspNetCore;
 using Hotline.Application;
@@ -103,12 +102,14 @@ internal static class StartupExtensions
         //    });
         //        //.AddTimeout(TimeSpan.FromSeconds(5));
         //});
+
+        //根据市州编码判断属于哪个市州,启用对应的推送服务
         var sharingConfig = configuration.GetSection("SharingConfiguration").Get<SharingConfiguration>();
         if (sharingConfig.CityCode == ConfigurationConsts.YiBin)
             services.AddScoped<ISendTaskDataService, DataSharing.YiBin.YiBinSendTaskDataService>();
-
-        if (sharingConfig.CityCode == ConfigurationConsts.ZiGong)
+        else if (sharingConfig.CityCode == ConfigurationConsts.ZiGong)
             services.AddScoped<ISendTaskDataService, DataSharing.ZiGong.ZiGongSendTaskDataService>();
+
         //job
         services.RegisterJob();
         //services.AddSingleton<IAuthorizationPolicyProvider, AuthorizationPolicyProvider>();

+ 57 - 6
src/DataSharing.Host/config/appsettings.Development.json

@@ -99,6 +99,7 @@
     "CityCode": "511500",
     "CityName": "宜宾市",
 
+    //宜宾
     "CityYiBin": {
       //企业服务
       "Enterprise": {
@@ -188,13 +189,63 @@
       }
     },
 
+    //自贡
     "CityZiGong": {
-      //新老数据交换配置
-      "SendDataOld": {
-        "AddressUrl": "http://192.168.100.195:8066/",
-        "ClientID": "admin",
-        "Secret": "123456",
-        "IsSend": false
+      //110对接--大成均图
+      "PoliceDCJT": {
+        //1、非警情分流推送服务_自贡
+        //   receive-工单受理
+        "token1_token": "b8aae0a998f5b79c9a35aecb888e1a58",
+        "token1_dcsm": "c9bc4e718d1917a9a68add90fecbe5bb60920e5ab85d9ecb6a6167db4352f42b8ae21ac67a6e2aab48b4c99cd9f93ec5fb017e202df969a91f74456c14e8770a",
+        "token1_sm2_public": "BS/H9JVlRdo8vbsZYQLTkeGGZBVjdkX+VJ82CX7n6i4NubmynRIaxvzoSsEAhbbvTDGm2DS96l95nK6Dkd0UZg==",
+        "token1_sm2_private": "GbjU4GFk0yaa/wTdzxeh5BOh8VNlqvnTcb7EUtDVvOY=",
+        "token1_sm4": "BKrW/v4jeRgsFg3HSbxEKnDi6rPceW0AdRiaa1rhEwAnraf8MnHdXzUQoQ7+zyjfghaK5G+zDz+wW+Ob27Jgxt91HkVmyL6+SjqV9ZnqNeGFgTBkQrHDySGz6jHKa12Sv7PZs8pjc716he3NNHZAkCI=",
+        "token1_sm4_mw": "4034d80c19bbd01d",
+
+        //4、警务警情分流推送服务_自贡
+        //   receive-工单办结
+        "token4_token": "8806bfba29b997853bdb059a9ba9a3ae",
+        "token4_dcsm": "f5dce079e0f4acd6b6627b89fb5e72af5fa5775d3ee3b8c7876f546c5ebe723888df4a70c09f9aa5e096bb342d73e0c4793c851a7a8035e8683b07430f132bd3",
+        "token4_sm2_public": "P2IVWpFx38GQTDV3hgrxjlOdfPhLQNW2LyvAKmYqMz9UYHCtm/l3K73UIouMXs4jcmZjXyItepvKFv44g3YnXA==",
+        "token4_sm2_private": "yxIkRALHoOTxpiZ/jrvCDQatcR7k11Xhps7c92peU9w=",
+        "token4_sm4": "BCD88AXnIfMxe8PrUcubSbFRr07cOuDDEPzy754W3CzhOqjcpAcu1B9B6U46jyM4hEFPqkx+SS1PUAfRlG5tzYD1Z8SKsJTBUDGR6bTMRvCc+C/aps+IcRBfzjjRchtT1c5iok4CfiT4LoK5cmOHKKU=",
+        "token4_sm4_mw": "d731ff1282dda792",
+
+        //3、警务警情分流查询服务_自贡
+        //   send-工单受理
+        "token3_token": "b76ba1896c4880998a86b829cf79888a",
+        "token3_dcsm": "3cccc86e021c0ff7827537053ec1b6e4a57cbb49b77c9492257123703c5a6b711000f0842c035fe6d33eb2a947915af53a1ef501916ec7128bff9514d6184e2c",
+        "token3_sm2_public": "qaao4Xh8/eyYGeVOj1K8D7p3+OriP55azWDAbYVoZelMdluNrJuQWM2qPn+hjTHTBnIMAVK2HlHBx4oGfCxGdA==",
+        "token3_sm2_private": "8bSYM8P3b4I94qGt3XVx3bQddNCy/xVKo7o1b5LI4/M=",
+        "token3_sm4": "BIDhFaEu5NILR7byg/JfaPlJEm4dYWC+u9J1IqhtYeYY1AktOxp7cZWqfk/mWjw72pYGT7YRENCULbjZ2bxVG6UUv2pYukZWtYog34Vicu5IgC8ti4VpED9eGzGgtKJ/CT0KtAnjQPQL0PsVbCjTY5M=",
+        "token3_sm4_mw": "bbeb56d247354360",
+
+        //2、非警情分流查询服务_自贡
+        //   send-工单办结
+        "token2_token": "1fbbac1b09b89d11bc569168aabb3c8b",
+        "token2_dcsm": "3873c1b1ff0ce3b8120d63509d3b85169cda4856b0a0d89625a4744641a343951d8ced868bd5c7fc60826403bd6314a02e5a26ba8808dae5a9d9f851555338d0",
+        "token2_sm2_public": "VgjJ7FfA23vY3Hr1pVrdbi3MZt7X0k/nMf9kwEyyC32CXgT2ccWBlxf3kGPXLO56HSBoo9IA7sSEG3eJYVQmLw==",
+        "token2_sm2_private": "QNTPy2nPBe2JY308G0LHO4r42iomDWcdedf81FapkWA=",
+        "token2_sm4": "BKNpLwBCT2MvXwhLRcZ6FoMm4GaXs6LXqVmEa5hMJ3d9G+vC/5j7xtQh9HRKIfSfXkDQI0EQS7UR4inEXks/AnKsLYGhmhRjyzM7AGpEsujr2vJTwcwIWpBmpuc7k0uBQ34bN+kopafIo5UVyk7rIek=",
+        "token2_sm4_mw": "2938d7acb2754a09",
+
+        //5、从公安网侧获取12345政务服务热线平台知识库列表
+        //   send-知识库列表
+        "token5_token": "1fbbac1b09b89d11bc569168aabb3c8b",
+        "token5_dcsm": "3873c1b1ff0ce3b8120d63509d3b85169cda4856b0a0d89625a4744641a343951d8ced868bd5c7fc60826403bd6314a02e5a26ba8808dae5a9d9f851555338d0",
+        "token5_sm2_public": "VgjJ7FfA23vY3Hr1pVrdbi3MZt7X0k/nMf9kwEyyC32CXgT2ccWBlxf3kGPXLO56HSBoo9IA7sSEG3eJYVQmLw==",
+        "token5_sm2_private": "QNTPy2nPBe2JY308G0LHO4r42iomDWcdedf81FapkWA=",
+        "token5_sm4": "BKNpLwBCT2MvXwhLRcZ6FoMm4GaXs6LXqVmEa5hMJ3d9G+vC/5j7xtQh9HRKIfSfXkDQI0EQS7UR4inEXks/AnKsLYGhmhRjyzM7AGpEsujr2vJTwcwIWpBmpuc7k0uBQ34bN+kopafIo5UVyk7rIek=",
+        "token5_sm4_mw": "2938d7acb2754a09",
+
+        //6、从公安网侧获取12345政务服务热线平台知识内容
+        //   send-知识库内容
+        "token6_token": "1fbbac1b09b89d11bc569168aabb3c8b",
+        "token6_dcsm": "3873c1b1ff0ce3b8120d63509d3b85169cda4856b0a0d89625a4744641a343951d8ced868bd5c7fc60826403bd6314a02e5a26ba8808dae5a9d9f851555338d0",
+        "token6_sm2_public": "VgjJ7FfA23vY3Hr1pVrdbi3MZt7X0k/nMf9kwEyyC32CXgT2ccWBlxf3kGPXLO56HSBoo9IA7sSEG3eJYVQmLw==",
+        "token6_sm2_private": "QNTPy2nPBe2JY308G0LHO4r42iomDWcdedf81FapkWA=",
+        "token6_sm4": "BKNpLwBCT2MvXwhLRcZ6FoMm4GaXs6LXqVmEa5hMJ3d9G+vC/5j7xtQh9HRKIfSfXkDQI0EQS7UR4inEXks/AnKsLYGhmhRjyzM7AGpEsujr2vJTwcwIWpBmpuc7k0uBQ34bN+kopafIo5UVyk7rIek=",
+        "token6_sm4_mw": "2938d7acb2754a09"
       }
     }
   }

+ 145 - 0
src/DataSharing.Police110/DCJT110/DsPoliceSendChainAlarmDcjt.cs

@@ -0,0 +1,145 @@
+using SqlSugar;
+using System.ComponentModel;
+using XF.Domain.Repository;
+
+namespace DataSharing.Police110.DCJT110
+{
+    /// <summary>
+    /// 大成均图受理工单表
+    /// </summary>
+    [Description("大成均图受理工单表-发送")]
+    public class DsPoliceSendChainAlarmDcjt : CreationModificationEntity
+    {
+        /// <summary>
+        /// 流水号   
+        /// </summary>
+        [SugarColumn(ColumnDescription = "接警单编号", ColumnDataType = "varchar(35)")]
+        public string SerialNumber { get; set; }
+
+        /// <summary>
+        /// 接警员编号
+        /// </summary>
+        [SugarColumn(ColumnDescription = "接警员编号", ColumnDataType = "varchar(30)")]
+        public string RegisterNo { get; set; }
+
+        /// <summary>
+        /// 接警员姓名
+        /// </summary>
+        [SugarColumn(ColumnDescription = "接警员姓名", ColumnDataType = "varchar(30)")]
+        public string RegisterName { get; set; }
+
+        /// <summary>
+        /// 接警单编号
+        /// </summary>
+        [SugarColumn(ColumnDescription = "接警单编号", ColumnDataType = "varchar(35)")]
+        public string AlarmReceiptNumber { get; set; }
+
+        /// <summary>
+        /// 报警电话
+        /// </summary>
+        [SugarColumn(ColumnDescription = "报警电话", ColumnDataType = "varchar(20)")]
+        public string CallPoliceNumber { get; set; }
+
+        /// <summary>
+        /// 报警人性别
+        /// </summary>
+        [SugarColumn(ColumnDescription = "报警人性别", ColumnDataType = "varchar(10)")]
+        public string FromGender { get; set; }
+
+        /// <summary>
+        /// 报警电话用户名
+        /// </summary>
+        [SugarColumn(ColumnDescription = "报警电话用户名", ColumnDataType = "varchar(20)")]
+        public string CallPoliceName { get; set; }
+
+        /// <summary>
+        /// 联系电话
+        /// </summary>
+        [SugarColumn(ColumnDescription = "联系电话", ColumnDataType = "varchar(20)")]
+        public string PhoneNumber { get; set; }
+
+        /// <summary>
+        /// 报警地址
+        /// </summary>
+        [SugarColumn(ColumnDescription = "报警地址", ColumnDataType = "varchar(200)")]
+        public string CallPoliceAddress { get; set; }
+
+        /// <summary>
+        /// 警情类别代码
+        /// </summary>
+        [SugarColumn(ColumnDescription = "警情类别代码", ColumnDataType = "varchar(50)", IsNullable = true)]
+        public string PoliceTypeCode { get; set; }
+
+        /// <summary>
+        /// 警情类别名称
+        /// </summary>
+        [SugarColumn(ColumnDescription = "警情类别名称", ColumnDataType = "varchar(50)", IsNullable = true)]
+        public string PoliceTypeName { get; set; }
+
+        /// <summary>
+        /// 报警内容
+        /// </summary>
+        [SugarColumn(ColumnDescription = "报警内容", ColumnDataType = "varchar(2000)")]
+        public string CallPoliceContent { get; set; }
+
+        /// <summary>
+        /// 管辖单位代码
+        /// </summary>
+        [SugarColumn(ColumnDescription = "管辖单位代码", ColumnDataType = "varchar(50)", IsNullable = true)]
+        public string JurisdictionalUnitCode { get; set; }
+
+        /// <summary>
+        /// 管辖单位名称
+        /// </summary>
+        [SugarColumn(ColumnDescription = "管辖单位名称", ColumnDataType = "varchar(50)", IsNullable = true)]
+        public string JurisdictionalUnitName { get; set; }
+
+        /// <summary>
+        /// 管辖单位电话
+        /// </summary>
+        [SugarColumn(ColumnDescription = "管辖单位电话", ColumnDataType = "varchar(20)", IsNullable = true)]
+        public string JurisdictionalUnitNumber { get; set; }
+
+        /// <summary>
+        /// 报警时间
+        /// </summary>
+        [SugarColumn(ColumnDescription = "报警时间")]
+        public DateTime? CallPoliceTime { get; set; }
+
+        /// <summary>
+        /// 推送时间
+        /// </summary>
+        [SugarColumn(ColumnDescription = "推送时间")]
+        public DateTime? PushTime { get; set; }
+
+        /// <summary>
+        /// 接警单位代码
+        /// </summary>
+        [SugarColumn(ColumnDescription = "接警单位代码", ColumnDataType = "varchar(50)")]
+        public string AlarmReceivingUnitCode { get; set; }
+
+        /// <summary>
+        /// 接警单位名称
+        /// </summary>
+        [SugarColumn(ColumnDescription = "接警单位名称", ColumnDataType = "varchar(50)")]
+        public string AlarmReceivingUnitName { get; set; }
+
+        /// <summary>
+        /// 接警类型
+        /// </summary>
+        [SugarColumn(ColumnDescription = "接警类型", ColumnDataType = "varchar(50)")]
+        public string AlarmReceptionType { get; set; }
+
+        /// <summary>
+        /// 行政区划代码
+        /// </summary>
+        [SugarColumn(ColumnDescription = "行政区划代码", ColumnDataType = "varchar(50)")]
+        public string AreaCode { get; set; }
+
+        /// <summary>
+        /// 工单编号
+        /// </summary>
+        [SugarColumn(ColumnDescription = "工单编号", ColumnDataType = "varchar(50)", IsNullable = true)]
+        public string OrderId { get; set; }
+    }
+}

+ 128 - 0
src/DataSharing.Police110/DCJT110/DsPoliceSendChainDealDcjt.cs

@@ -0,0 +1,128 @@
+using SqlSugar;
+using System.ComponentModel;
+using XF.Domain.Repository;
+
+namespace DataSharing.Police110.DCJT110
+{
+    /// <summary>
+    /// 大成均图办理结果表
+    /// </summary>
+    [Description("大成均图办理结果表-发送")]
+    public class DsPoliceSendChainDealDcjt : CreationModificationEntity
+    {
+        /// <summary>
+        /// 工单编号
+        /// </summary>
+        [SugarColumn(ColumnDescription = "工单编号", ColumnDataType = "varchar(50)", IsNullable = true)]
+        public string OrderId { get; set; }
+
+        /// <summary>
+        /// 接警单编号
+        /// </summary>
+        [SugarColumn(ColumnDescription = "接警单编号", ColumnDataType = "varchar(50)")]
+        public string AlarmReceiptNumber { get; set; }
+
+        /// <summary>
+        /// 反馈时间
+        /// </summary>
+        [SugarColumn(ColumnDescription = "反馈时间", IsNullable = true)]
+        public DateTime? FeedbackTime { get; set; }
+
+        /// <summary>
+        /// 出警处置情况
+        /// </summary>
+        [SugarColumn(ColumnDescription = "出警处置情况", ColumnDataType = "varchar(2000)", IsNullable = true)]
+        public string DisposalSituation { get; set; }
+
+        /// <summary>
+        /// 警情处理结果说明
+        /// </summary>
+        /// </summary>
+        [SugarColumn(ColumnDescription = "警情处理结果说明", ColumnDataType = "varchar(2000)", IsNullable = true)]
+        public string ResultDescription { get; set; }
+
+        /// <summary>
+        /// 反馈人员编号
+        /// </summary>
+        [SugarColumn(ColumnDescription = "反馈人员编号", ColumnDataType = "varchar(50)", IsNullable = true)]
+        public string FeedbackPersonNumber { get; set; }
+
+        /// <summary>
+        /// 反馈人员姓名
+        /// </summary>
+        [SugarColumn(ColumnDescription = "反馈人员姓名", ColumnDataType = "varchar(30)", IsNullable = true)]
+        public string FeedbackPersonName { get; set; }
+
+        /// <summary>
+        /// 反馈单位代码
+        /// </summary>
+        [SugarColumn(ColumnDescription = "反馈单位代码", ColumnDataType = "varchar(50)", IsNullable = true)]
+        public string FeedbackUnitCode { get; set; }
+
+        /// <summary>
+        /// 反馈单位名称
+        /// </summary>
+        [SugarColumn(ColumnDescription = "反馈单位名称", ColumnDataType = "varchar(50)", IsNullable = true)]
+        public string FeedbackUnitName { get; set; }
+
+        /// <summary>
+        /// 回访时间
+        /// </summary>
+        [SugarColumn(ColumnDescription = "回访时间", IsNullable = true)]
+        public DateTime? RevisitTime { get; set; }
+
+        /// <summary>
+        /// 电话回访核实情况
+        /// </summary>
+        [SugarColumn(ColumnDescription = "电话回访核实情况", ColumnDataType = "varchar(2000)", IsNullable = true)]
+        public string CheckingContent { get; set; }
+
+        /// <summary>
+        /// 回访结果
+        /// </summary>
+        [SugarColumn(ColumnDescription = "回访结果", ColumnDataType = "varchar(20)", IsNullable = true)]
+        public string VisitResult { get; set; }
+
+        /// <summary>
+        /// 回访内容
+        /// </summary>
+        [SugarColumn(ColumnDescription = "回访内容", ColumnDataType = "varchar(2000)", IsNullable = true)]
+        public string VisitContent { get; set; }
+
+        /// <summary>
+        /// 退回接警员
+        /// </summary>
+        [SugarColumn(ColumnDescription = "退回接警员", ColumnDataType = "varchar(50)", IsNullable = true)]
+        public string ReturnName { get; set; }
+
+        /// <summary>
+        /// 退回部门
+        /// </summary>
+        [SugarColumn(ColumnDescription = "退回部门", ColumnDataType = "varchar(50)", IsNullable = true)]
+        public string ReturnUnit { get; set; }
+
+        /// <summary>
+        /// 退回原因
+        /// </summary>
+        [SugarColumn(ColumnDescription = "退回原因", ColumnDataType = "varchar(2000)", IsNullable = true)]
+        public string ReturnOpinion { get; set; }
+
+        /// <summary>
+        /// 退回时间
+        /// </summary>
+        [SugarColumn(ColumnDescription = "退回时间", IsNullable = true)]
+        public DateTime? ReturnTime { get; set; }
+
+        /// <summary>
+        /// 处置类型 1正常 2退回 3回访
+        /// </summary>
+        [SugarColumn(ColumnDescription = "处置类型")]
+        public int DisposalType { get; set; }
+
+        /// <summary>
+        /// 入库时间
+        /// </summary>
+        [SugarColumn(ColumnDescription = "入库时间")]
+        public DateTime? WarehousingTime { get; set; }
+    }
+}

+ 7 - 0
src/DataSharing.Police110/DaoShu110/DsReceivePoliceData.cs

@@ -1,4 +1,5 @@
 using System.ComponentModel;
+using DataSharing.Share.Enums;
 using SqlSugar;
 using XF.Domain.Repository;
 
@@ -33,5 +34,11 @@ namespace DataSharing.Police110.DaoShu110
         /// </summary>
         [SugarColumn(ColumnDescription = "接收解密数据数据", ColumnDataType = "text")]
         public string? ReceiveData { get; set; }
+
+        /// <summary>
+        /// 数据来源方
+        /// </summary>
+        [SugarColumn(ColumnDescription = "数据来源方")]
+        public EPoliceSource? PoliceSource { get; set; }
     }
 }

+ 1 - 1
src/DataSharing.Police110/Encryption/SM4.cs

@@ -1,4 +1,4 @@
-using DataSharing.Share.Dtos.Police110.DaoShu110;
+using DataSharing.Share.Dtos.Police110;
 
 namespace DataSharing.Police110.Encryption
 {

+ 1 - 1
src/DataSharing.Police110/Encryption/Sm4Crypto.cs

@@ -1,4 +1,4 @@
-using DataSharing.Share.Dtos.Police110.DaoShu110;
+using DataSharing.Share.Dtos.Police110;
 using Org.BouncyCastle.Utilities.Encoders;
 using System.Text;
 

+ 168 - 0
src/DataSharing.Share/Dtos/Police110/DCJT110/ChainAlarm_DCJT.cs

@@ -0,0 +1,168 @@
+using System.Text.Json.Serialization;
+
+namespace DataSharing.Share.Dtos.Police110.DaoShu110
+{
+    /// <summary>
+    /// 大成均图受理工单表
+    /// </summary>
+    public class ChainAlarm_DCJT
+    {
+        /// <summary>
+        /// 流水号
+        /// </summary>
+        [JsonPropertyName("LSH")]
+        [MDisplayName("流水号")]
+        [VRequired]
+        public string SerialNumber { get; set; }
+
+        /// <summary>
+        /// 接警员编号
+        /// </summary>
+        [JsonPropertyName("JJYBH")]
+        [MDisplayName("接警员编号")]
+        [VRequired]
+        public string RegisterNo { get; set; }
+
+        /// <summary>
+        /// 接警员姓名
+        /// </summary>
+        [JsonPropertyName("JJYXM")]
+        [MDisplayName("接警员姓名")]
+        public string RegisterName { get; set; }
+
+        /// <summary>
+        /// 接警单编号
+        /// </summary>
+        [JsonPropertyName("JJDBH")]
+        [MDisplayName("接警单编号")]
+        [VRequired]
+        public string AlarmReceiptNumber { get; set; }
+
+        /// <summary>
+        /// 报警电话
+        /// </summary>
+        [JsonPropertyName("BJDH")]
+        [MDisplayName("报警电话")]
+        [VRequired]
+        public string CallPoliceNumber { get; set; }
+
+        /// <summary>
+        /// 报警人性别
+        /// </summary>
+        [JsonPropertyName("BJRXB")]
+        [MDisplayName("报警人性别")]
+        [VRequired]
+        public string FromGender { get; set; }
+
+        /// <summary>
+        /// 报警电话用户名
+        /// </summary>
+        [JsonPropertyName("BJDHYHM")]
+        [MDisplayName("报警电话用户名")]
+        [VRequired]
+        public string CallPoliceName { get; set; }
+
+        /// <summary>
+        /// 联系电话
+        /// </summary>
+        [JsonPropertyName("LXDH")]
+        [MDisplayName("联系电话")]
+        [VRequired]
+        public string PhoneNumber { get; set; }
+
+        /// <summary>
+        /// 报警地址
+        /// </summary>
+        [JsonPropertyName("BJDZ")]
+        [MDisplayName("报警地址")]
+        [VRequired]
+        public string CallPoliceAddress { get; set; }
+
+        /// <summary>
+        /// 警情类别代码
+        /// </summary>
+        [JsonPropertyName("JQLBDM")]
+        public string PoliceTypeCode { get; set; }
+
+        /// <summary>
+        /// 警情类别名称
+        /// </summary>
+        [JsonPropertyName("JQLBMC")]
+        public string PoliceTypeName { get; set; }
+
+        /// <summary>
+        /// 报警内容
+        /// </summary>
+        [JsonPropertyName("BJNR")]
+        [MDisplayName("报警内容")]
+        [VRequired]
+        public string CallPoliceContent { get; set; }
+
+        /// <summary>
+        /// 管辖单位代码
+        /// </summary>
+        [JsonPropertyName("GXDWDM")]
+        public string JurisdictionalUnitCode { get; set; }
+
+        /// <summary>
+        /// 管辖单位名称
+        /// </summary>
+        [JsonPropertyName("GXDWMC")]
+        public string JurisdictionalUnitName { get; set; }
+
+        /// <summary>
+        /// 管辖单位电话
+        /// </summary>
+        [JsonPropertyName("GXDWDH")]
+        public string JurisdictionalUnitNumber { get; set; }
+
+        /// <summary>
+        /// 报警时间
+        /// </summary>
+        [JsonPropertyName("BJSJ")]
+        [MDisplayName("报警时间")]
+        [VRequired]
+        public string CallPoliceTime { get; set; }
+
+        /// <summary>
+        /// 推送时间
+        /// </summary>
+        [JsonPropertyName("TSSJ")]
+        [MDisplayName("推送时间")]
+        [VRequired]
+        public string PushTime { get; set; }
+
+        /// <summary>
+        /// 接警单位代码
+        /// </summary>
+        [JsonPropertyName("JJDWDM")]
+        [MDisplayName("接警单位代码")]
+        [VRequired]
+        public string AlarmReceivingUnitCode { get; set; }
+
+        /// <summary>
+        /// 接警单位名称
+        /// </summary>
+        [JsonPropertyName("JJDWMC")]
+        [MDisplayName("接警单位名称")]
+        [VRequired]
+        public string AlarmReceivingUnitName { get; set; }
+
+        /// <summary>
+        /// 接警类型
+        /// </summary>
+        [JsonPropertyName("JJLX")]
+        [MDisplayName("接警类型")]
+        [VRequired]
+        public string AlarmReceptionType { get; set; }
+
+        /// <summary>
+        /// 行政区划代码
+        /// </summary>
+        [JsonPropertyName("XZQHDM")]
+        [MDisplayName("行政区划代码")]
+        [VRequired]
+        public string AreaCode { get; set; }
+
+    }
+}

+ 124 - 0
src/DataSharing.Share/Dtos/Police110/DCJT110/ChainDeal_DCJT.cs

@@ -0,0 +1,124 @@
+using System.Text.Json.Serialization;
+
+namespace DataSharing.Share.Dtos.Police110.DaoShu110
+{
+    /// <summary>
+    /// 大成均图办理结果表
+    /// </summary>
+    public class ChainDeal_DCJT
+    {
+        /// <summary>
+        /// 接警单编号
+        /// </summary>
+        [JsonPropertyName("JJDBH")]
+        [MDisplayName("接警单编号")]
+        [VRequired]
+        public string AlarmReceiptNumber { get; set; }
+
+        /// <summary>
+        /// 处置类型 1正常 2退回 3回访 4警情签收状态  5是结果签收状态 
+        /// </summary>
+        [JsonPropertyName("CZLX")]
+        [MDisplayName("处置类型")]
+        [VRequired]
+        public string DisposalType { get; set; }
+
+        /// <summary>
+        /// 反馈时间
+        /// </summary>
+        [JsonPropertyName("FKSJ")]
+        public string FeedbackTime { get; set; } = null;
+
+        /// <summary>
+        /// 出警处置情况
+        /// </summary>
+        [JsonPropertyName("CJCZQK")]
+        public string DisposalSituation { get; set; }
+
+        /// <summary>
+        /// 警情处理结果说明
+        /// </summary>
+        [JsonPropertyName("JQCLJGSM")]
+        public string ResultDescription { get; set; }
+
+        /// <summary>
+        /// 反馈人员编号
+        /// </summary>
+        [JsonPropertyName("FKYBH")]
+        public string FeedbackPersonNumber { get; set; }
+
+        /// <summary>
+        /// 反馈人员姓名
+        /// </summary>
+        [JsonPropertyName("FKYXM")]
+        public string FeedbackPersonName { get; set; }
+
+        /// <summary>
+        /// 反馈单位代码
+        /// </summary>
+        [JsonPropertyName("FKDWDM")]
+        public string FeedbackUnitCode { get; set; }
+
+        /// <summary>
+        /// 反馈单位名称
+        /// </summary>
+        [JsonPropertyName("FKDWMC")]
+        public string FeedbackUnitName { get; set; }
+
+        /// <summary>
+        /// 回访时间
+        /// </summary>
+        [JsonPropertyName("HFSJ")]
+        public string RevisitTime { get; set; } = null;
+
+        /// <summary>
+        /// 电话回访核实情况
+        /// </summary>
+        [JsonPropertyName("DHHFHSQK")]
+        public string CheckingContent { get; set; }
+
+        /// <summary>
+        /// 回访结果
+        /// </summary>
+        [JsonPropertyName("CLJGDM")]
+        public string VisitResult { get; set; }
+
+        /// <summary>
+        /// 回访内容
+        /// </summary>
+        [JsonPropertyName("CLJGMC")]
+        public string VisitContent { get; set; }
+
+        /// <summary>
+        /// 退回接警员
+        /// </summary>
+        [JsonPropertyName("HANDLEUSERNAME")]
+        public string ReturnName { get; set; }
+
+        /// <summary>
+        /// 退回部门
+        /// </summary>
+        [JsonPropertyName("HANDLEBMNAME")]
+        public string ReturnUnit { get; set; }
+
+        /// <summary>
+        /// 退回原因
+        /// </summary>
+        [JsonPropertyName("HANDLEOPINION")]
+        public string ReturnOpinion { get; set; }
+
+        /// <summary>
+        /// 退回时间
+        /// </summary>
+        [JsonPropertyName("HANDLETIME")]
+        public string ReturnTime { get; set; } = null;
+
+        /// <summary>
+        /// 入库时间
+        /// </summary>
+        [JsonPropertyName("TSSJ")]
+        [MDisplayName("入库时间")]
+        [VRequired]
+        public string WarehousingTime { get; set; }
+    }
+}

+ 54 - 0
src/DataSharing.Share/Dtos/Police110/DCJT110/DCJTDeResponse.cs

@@ -0,0 +1,54 @@
+using DataSharing.Share.Dtos.Police110.DaoShu110;
+
+namespace DataSharing.Share.Dtos.Police110.DCJT110
+{
+    public class DCJTDeResponse<TData>
+    {
+        /// <summary>
+        /// 状态
+        /// </summary>
+        public int rcode { get; set; }
+
+        /// <summary>
+        /// 描述
+        /// </summary>
+        public string rmsg { get; set; }
+
+        /// <summary>
+        /// 数据
+        /// </summary>
+        public TData rdata { get; set; }
+
+        /// <summary>
+        /// 成功
+        /// </summary>
+        /// <param name="data"></param>
+        /// <param name="description"></param>
+        /// <returns></returns>
+        public static DCJTDeResponse<TData> Succeed(TData data, string? description = "")
+        {
+            return new DCJTDeResponse<TData>
+            {
+                rcode = 0,
+                rdata = data,
+                rmsg = description ?? "调用成功"
+            };
+        }
+
+        /// <summary>
+        /// 失败
+        /// </summary>
+        /// <param name="data"></param>
+        /// <param name="description"></param>
+        /// <returns></returns>
+        public static DCJTDeResponse<TData> Failed(TData data, string? description = "")
+        {
+            return new DCJTDeResponse<TData>
+            {
+                rcode = 0,
+                rdata = data,
+                rmsg = description ?? "调用失败"
+            };
+        }
+    }
+}

+ 31 - 0
src/DataSharing.Share/Dtos/Police110/DCJT110/SendData.cs

@@ -0,0 +1,31 @@
+using System.Text.Json.Serialization;
+
+namespace DataSharing.Share.Dtos.Police110.DCJT110
+{
+    public class SendData
+    {
+        /// <summary>
+        /// 开始时间
+        /// </summary>
+        [JsonPropertyName("startDate")]
+        public string StartDate { get; set; }
+
+        /// <summary>
+        /// 结束时间
+        /// </summary>
+        [JsonPropertyName("endDate")]
+        public string EndDate { get; set; }
+
+        /// <summary>
+        /// 接警单编号
+        /// </summary>
+        [JsonPropertyName("JJDBH")]
+        public string AlarmReceiptNumber { get; set; }
+
+        /// <summary>
+        /// 处置类型 1正常 2退回 3回访 4警情签收状态 5是结果签收状态  
+        /// </summary>
+        [JsonPropertyName("CZLX")]
+        public int DisposalType { get; set; } = 1;
+    }
+}

+ 25 - 0
src/DataSharing.Share/Dtos/Police110/DCJT110/SendKnowledgeRequestDto.cs

@@ -0,0 +1,25 @@
+namespace DataSharing.Share.Dtos.Police110.DCJT110
+{
+    public class SendKnowledgeRequestDto
+    {
+        /// <summary>
+        /// 创建开始时间
+        /// </summary>
+        public string createTimeBegin { get; set; }
+
+        /// <summary>
+        /// 创建结束时间
+        /// </summary>
+        public string createTimeEnd { get; set; }
+
+        /// <summary>
+        /// 关键字
+        /// </summary>
+        public string keyWord { get; set; }
+
+        /// <summary>
+        /// 知识库ID
+        /// </summary>
+        public string id { get; set; }
+    }
+}

+ 1 - 1
src/DataSharing.Share/Dtos/Police110/DaoShu110/Get_Knowledge.cs → src/DataSharing.Share/Dtos/Police110/DaoShu110/GetKnowledgeRequestDto.cs

@@ -3,7 +3,7 @@
     /// <summary>
     /// 知识库
     /// </summary>
-    public class Get_Knowledge
+    public class GetKnowledgeRequestDto
     {
         /// <summary>
         /// 创建开始时间

+ 1 - 1
src/DataSharing.Share/Dtos/Police110/DaoShu110/KnowledgeDto.cs → src/DataSharing.Share/Dtos/Police110/KnowledgeDto.cs

@@ -1,6 +1,6 @@
 using System.Text.Json.Serialization;
 
-namespace DataSharing.Share.Dtos.Police110.DaoShu110
+namespace DataSharing.Share.Dtos.Police110
 {
     public class KnowledgeDto
     {

+ 1 - 1
src/DataSharing.Share/Dtos/Police110/DaoShu110/SM4Context.cs → src/DataSharing.Share/Dtos/Police110/SM4Context.cs

@@ -1,4 +1,4 @@
-namespace DataSharing.Share.Dtos.Police110.DaoShu110
+namespace DataSharing.Share.Dtos.Police110
 {
     public class SM4Context
     {

+ 1 - 1
src/DataSharing.Share/Enums/EDsDisposalType.cs

@@ -5,7 +5,7 @@ namespace DataSharing.Share.Enums
     public enum EDsDisposalType
     {
         /// <summary>
-        /// 正常
+        /// 正常  
         /// </summary>
         [Description("正常")]
         OrderFiled = 1,

+ 19 - 0
src/DataSharing.Share/Enums/EPoliceSource.cs

@@ -0,0 +1,19 @@
+using System.ComponentModel;
+
+namespace DataSharing.Share.Enums
+{
+    public enum EPoliceSource
+    {
+        /// <summary>
+        /// 道枢(上海)数字  
+        /// </summary>
+        [Description("道枢(上海)数字  ")]
+        DaoShu = 1,
+
+        /// <summary>
+        /// 大成均图  
+        /// </summary>
+        [Description("大成均图")]
+        DCJT = 1,
+    }
+}

+ 60 - 0
src/DataSharing/ChannelConfiguration.cs

@@ -197,6 +197,66 @@
         public string token6_sm4_mw { get; set; }
     }
 
+    /// <summary>
+    /// 大成均图110
+    /// </summary>
+    public class ConfigurationPoliceDCJT
+    {
+        //1、非警情分流推送服务_XX市
+        //   receive-工单受理
+        public string token1_token { get; set; }
+        public string token1_dcsm { get; set; }
+        public string token1_sm2_public { get; set; }
+        public string token1_sm2_private { get; set; }
+        public string token1_sm4 { get; set; }
+        public string token1_sm4_mw { get; set; }
+
+        //4、警务警情分流推送服务_XX市
+        //   receive-工单办结
+        public string token4_token { get; set; }
+        public string token4_dcsm { get; set; }
+        public string token4_sm2_public { get; set; }
+        public string token4_sm2_private { get; set; }
+        public string token4_sm4 { get; set; }
+        public string token4_sm4_mw { get; set; }
+
+        //3、警务警情分流查询服务_XX市
+        //   send-工单受理
+        public string token3_token { get; set; }
+        public string token3_dcsm { get; set; }
+        public string token3_sm2_public { get; set; }
+        public string token3_sm2_private { get; set; }
+        public string token3_sm4 { get; set; }
+        public string token3_sm4_mw { get; set; }
+
+        //2、非警情分流查询服务_XX市
+        //   send-工单办结
+        public string token2_token { get; set; }
+        public string token2_dcsm { get; set; }
+        public string token2_sm2_public { get; set; }
+        public string token2_sm2_private { get; set; }
+        public string token2_sm4 { get; set; }
+        public string token2_sm4_mw { get; set; }
+
+        //5、从公安网侧获取12345政务服务热线平台知识库列表
+        //   send-知识库列表
+        public string token5_token { get; set; }
+        public string token5_dcsm { get; set; }
+        public string token5_sm2_public { get; set; }
+        public string token5_sm2_private { get; set; }
+        public string token5_sm4 { get; set; }
+        public string token5_sm4_mw { get; set; }
+
+        //6、从公安网侧获取12345政务服务热线平台知识内容
+        //   send-知识库内容
+        public string token6_token { get; set; }
+        public string token6_dcsm { get; set; }
+        public string token6_sm2_public { get; set; }
+        public string token6_sm2_private { get; set; }
+        public string token6_sm4 { get; set; }
+        public string token6_sm4_mw { get; set; }
+    }
+
     /// <summary>
     /// 新老数据交换
     /// </summary>

+ 9 - 3
src/DataSharing/SharingConfiguration.cs

@@ -10,6 +10,9 @@
         public CityZiGong ZiGong { get; set; }
     }
 
+    /// <summary>
+    /// 宜宾
+    /// </summary>
     public class CityYiBin
     {
         /// <summary>
@@ -23,7 +26,7 @@
         public ConfigurationCityHandOver CityHandOver { get; set; }
 
         /// <summary>
-        /// 道枢110
+        /// 道枢110----德阳(新)、宜宾、阿坝、广元
         /// </summary>
         public ConfigurationPoliceDS PoliceDS { get; set; }
 
@@ -34,11 +37,14 @@
 
     }
 
+    /// <summary>
+    /// 自贡
+    /// </summary>
     public class CityZiGong
     {
         /// <summary>
-        /// 新老数据交换
+        /// 大成均图110-----自贡、雅安
         /// </summary>
-        public ConfigurationSendDataOld SendDataOld { get; set; }
+        public ConfigurationPoliceDCJT PoliceDCJT { get; set; }
     }
 }