浏览代码

Merge branch 'master' of http://git.12345lm.cn/Fengwo/hotline

Dun.Jason 1 年之前
父节点
当前提交
086e2c880f
共有 100 个文件被更改,包括 9043 次插入235 次删除
  1. 164 0
      src/Hotline.Api/Controllers/DataSharing/CityDataExchangeController.cs
  2. 509 0
      src/Hotline.Api/Controllers/DataSharing/ConvergenceMediaController.cs
  3. 89 0
      src/Hotline.Api/Controllers/DataSharing/EnterpriseController.cs
  4. 767 0
      src/Hotline.Api/Controllers/DataSharing/PoliceDSController.cs
  5. 872 0
      src/Hotline.Api/Controllers/DataSharing/ProvinceController.cs
  6. 493 0
      src/Hotline.Api/Controllers/DataSharing/WebPortalController.cs
  7. 2 233
      src/Hotline.Api/Controllers/OrderController.cs
  8. 2 0
      src/Hotline.Api/StartupExtensions.cs
  9. 94 0
      src/Hotline.Api/config/appsettings.Development.json
  10. 1 0
      src/Hotline.Application.Contracts/Hotline.Application.Contracts.csproj
  11. 143 0
      src/Hotline.Application/DataSharing/Province/PushDataBgService.cs
  12. 76 0
      src/Hotline.Application/Handlers/Order/DelayProvinceResultNotifyHandler.cs
  13. 2 2
      src/Hotline.Application/Handlers/Order/GetOrderDetailNotifyHandler.cs
  14. 53 0
      src/Hotline.Application/Handlers/Order/OrderSendBackResultNotifyHandler.cs
  15. 54 0
      src/Hotline.Application/Handlers/Order/ProvinceOrderSuperviseNotifyHandler.cs
  16. 45 0
      src/Hotline.Application/Handlers/Order/ProvinceOrderUrgeNotifyHandler.cs
  17. 57 0
      src/Hotline.Application/Handlers/Order/ReceiveOrderExtensionNotifyHandler.cs
  18. 82 0
      src/Hotline.Application/Handlers/Order/ReceiveOrderNotifyHandler.cs
  19. 74 0
      src/Hotline.Application/Handlers/Order/ScreenProvinceResultNotifyHandler.cs
  20. 4 0
      src/Hotline.Application/Hotline.Application.csproj
  21. 696 0
      src/Hotline.Application/Mappers/DataSharing/DsMapperConfigs.cs
  22. 1 0
      src/Hotline.Application/Mappers/OrderMapperConfigs.cs
  23. 53 0
      src/Hotline.Share/Dtos/DataSharing/ConvergenceMedia/ConvergenceMediaDeResponse.cs
  24. 20 0
      src/Hotline.Share/Dtos/DataSharing/ConvergenceMedia/GetOrderByRunDataDto.cs
  25. 64 0
      src/Hotline.Share/Dtos/DataSharing/ConvergenceMedia/GetOrderMediaDataDto.cs
  26. 53 0
      src/Hotline.Share/Dtos/DataSharing/ConvergenceMedia/GetOrderMediaReceiveDto.cs
  27. 43 0
      src/Hotline.Share/Dtos/DataSharing/ConvergenceMedia/GetOrderMediaReceiveOpenDto.cs
  28. 15 0
      src/Hotline.Share/Dtos/DataSharing/ConvergenceMedia/GetPurTypeReportDataDto.cs
  29. 87 0
      src/Hotline.Share/Dtos/DataSharing/ConvergenceMedia/MediaDataReceiveDto.cs
  30. 70 0
      src/Hotline.Share/Dtos/DataSharing/ConvergenceMedia/MediaOrderDetailDataDto.cs
  31. 26 0
      src/Hotline.Share/Dtos/DataSharing/ConvergenceMedia/MediaOrderDetailReceiveDto.cs
  32. 25 0
      src/Hotline.Share/Dtos/DataSharing/ConvergenceMedia/WriteOrderResponseDto.cs
  33. 153 0
      src/Hotline.Share/Dtos/DataSharing/DaoShu110/ChainAlarm_DS.cs
  34. 124 0
      src/Hotline.Share/Dtos/DataSharing/DaoShu110/ChainDeal_DS.cs
  35. 52 0
      src/Hotline.Share/Dtos/DataSharing/DaoShu110/DaoShuDeResponse.cs
  36. 29 0
      src/Hotline.Share/Dtos/DataSharing/DaoShu110/Get_Knowledge.cs
  37. 37 0
      src/Hotline.Share/Dtos/DataSharing/DaoShu110/KnowledgeDto.cs
  38. 31 0
      src/Hotline.Share/Dtos/DataSharing/DaoShu110/OpenData.cs
  39. 18 0
      src/Hotline.Share/Dtos/DataSharing/DaoShu110/SM4Context.cs
  40. 104 0
      src/Hotline.Share/Dtos/DataSharing/DataExchange/CityDataReceiveDto.cs
  41. 61 0
      src/Hotline.Share/Dtos/DataSharing/DataExchange/DataExchangeDeReponse.cs
  42. 25 0
      src/Hotline.Share/Dtos/DataSharing/DataExchange/DataExchangeResponseDto.cs
  43. 20 0
      src/Hotline.Share/Dtos/DataSharing/DataExchange/ReplyFiles.cs
  44. 45 0
      src/Hotline.Share/Dtos/DataSharing/Enterprise/DataWriteResultDto.cs
  45. 66 0
      src/Hotline.Share/Dtos/DataSharing/Enterprise/EnRecordsDto.cs
  46. 31 0
      src/Hotline.Share/Dtos/DataSharing/Enterprise/EnterpriseRequest.cs
  47. 78 0
      src/Hotline.Share/Dtos/DataSharing/Enterprise/EnterpriseResponse.cs
  48. 16 0
      src/Hotline.Share/Dtos/DataSharing/Enterprise/IEnterpriseRequest.cs
  49. 20 0
      src/Hotline.Share/Dtos/DataSharing/Enterprise/Receive/SelectEnterpriseListDto.cs
  50. 46 0
      src/Hotline.Share/Dtos/DataSharing/Enterprise/Receive/SelectEnterpriseListRequest .cs
  51. 57 0
      src/Hotline.Share/Dtos/DataSharing/Enterprise/Receive/WriteResultDto.cs
  52. 40 0
      src/Hotline.Share/Dtos/DataSharing/Enterprise/Send/CancelWorkOrderRequest.cs
  53. 126 0
      src/Hotline.Share/Dtos/DataSharing/Enterprise/Send/PushWorkOrderRequest.cs
  54. 54 0
      src/Hotline.Share/Dtos/DataSharing/Enterprise/TokenEnterprise.cs
  55. 38 0
      src/Hotline.Share/Dtos/DataSharing/Extend/FormEnvironMentInfoDto.cs
  56. 28 0
      src/Hotline.Share/Dtos/DataSharing/Extend/FormExpressWayInfoDto.cs
  57. 358 0
      src/Hotline.Share/Dtos/DataSharing/Extend/FormMarketInfoDto.cs
  58. 43 0
      src/Hotline.Share/Dtos/DataSharing/Extend/FormMedicalInfoDto.cs
  59. 18 0
      src/Hotline.Share/Dtos/DataSharing/Extend/FormNetWorktecInfoDto.cs
  60. 68 0
      src/Hotline.Share/Dtos/DataSharing/Extend/FormPostInfoDto.cs
  61. 48 0
      src/Hotline.Share/Dtos/DataSharing/Extend/FormReturnexChangeInfoDto.cs
  62. 23 0
      src/Hotline.Share/Dtos/DataSharing/Extend/FormShamPubInfoDto.cs
  63. 23 0
      src/Hotline.Share/Dtos/DataSharing/Extend/FormTaxationComplaintInfoDto.cs
  64. 18 0
      src/Hotline.Share/Dtos/DataSharing/Extend/FormTaxationConsultingInfoDto.cs
  65. 18 0
      src/Hotline.Share/Dtos/DataSharing/Extend/FormTrafficInfoDto.cs
  66. 68 0
      src/Hotline.Share/Dtos/DataSharing/Extend/ReceiveCaseExtendsDto.cs
  67. 43 0
      src/Hotline.Share/Dtos/DataSharing/Province/BaseModel.cs
  68. 14 0
      src/Hotline.Share/Dtos/DataSharing/Province/ClientInfo.cs
  69. 53 0
      src/Hotline.Share/Dtos/DataSharing/Province/DelayResultDto.cs
  70. 33 0
      src/Hotline.Share/Dtos/DataSharing/Province/EvlResultDto.cs
  71. 12 0
      src/Hotline.Share/Dtos/DataSharing/Province/Extend/Class1.cs
  72. 46 0
      src/Hotline.Share/Dtos/DataSharing/Province/Extend/FormEnvironMentInfo.cs
  73. 34 0
      src/Hotline.Share/Dtos/DataSharing/Province/Extend/FormExpressWayInfo.cs
  74. 430 0
      src/Hotline.Share/Dtos/DataSharing/Province/Extend/FormMarketInfo.cs
  75. 52 0
      src/Hotline.Share/Dtos/DataSharing/Province/Extend/FormMedicalInfo.cs
  76. 22 0
      src/Hotline.Share/Dtos/DataSharing/Province/Extend/FormNetWorktecInfo.cs
  77. 82 0
      src/Hotline.Share/Dtos/DataSharing/Province/Extend/FormPostInfo.cs
  78. 58 0
      src/Hotline.Share/Dtos/DataSharing/Province/Extend/FormReturnexChangeInfo.cs
  79. 28 0
      src/Hotline.Share/Dtos/DataSharing/Province/Extend/FormShamPubInfo.cs
  80. 28 0
      src/Hotline.Share/Dtos/DataSharing/Province/Extend/FormTaxationComplaintInfo.cs
  81. 22 0
      src/Hotline.Share/Dtos/DataSharing/Province/Extend/FormTaxationConsultingInfo.cs
  82. 22 0
      src/Hotline.Share/Dtos/DataSharing/Province/Extend/FormTrafficInfo.cs
  83. 50 0
      src/Hotline.Share/Dtos/DataSharing/Province/FileDto.cs
  84. 118 0
      src/Hotline.Share/Dtos/DataSharing/Province/HuiJu/Send/SubmitCaseExtendsRequest.cs
  85. 241 0
      src/Hotline.Share/Dtos/DataSharing/Province/HuiJu/Send/SubmitCaseInfoRequest.cs
  86. 80 0
      src/Hotline.Share/Dtos/DataSharing/Province/HuiJu/Send/SubmitCaseProcessRequest.cs
  87. 96 0
      src/Hotline.Share/Dtos/DataSharing/Province/HuiJu/Send/SubmitCaseRecordRequest.cs
  88. 146 0
      src/Hotline.Share/Dtos/DataSharing/Province/HuiJu/Send/SubmitCaseResultRequest.cs
  89. 62 0
      src/Hotline.Share/Dtos/DataSharing/Province/HuiJu/Send/SubmitCaseTotalRequest.cs
  90. 66 0
      src/Hotline.Share/Dtos/DataSharing/Province/HuiJu/Send/SubmitVisitInfoRequest.cs
  91. 22 0
      src/Hotline.Share/Dtos/DataSharing/Province/IProvinceRequest.cs
  92. 14 0
      src/Hotline.Share/Dtos/DataSharing/Province/ISharingRequest.cs
  93. 73 0
      src/Hotline.Share/Dtos/DataSharing/Province/ProvinceDistrecordResponse.cs
  94. 53 0
      src/Hotline.Share/Dtos/DataSharing/Province/ProvinceRequest.cs
  95. 63 0
      src/Hotline.Share/Dtos/DataSharing/Province/ProvinceResponse.cs
  96. 33 0
      src/Hotline.Share/Dtos/DataSharing/Province/RemindDto.cs
  97. 48 0
      src/Hotline.Share/Dtos/DataSharing/Province/ReturnFeedbackDto.cs
  98. 98 0
      src/Hotline.Share/Dtos/DataSharing/Province/ReultSendDto.cs
  99. 38 0
      src/Hotline.Share/Dtos/DataSharing/Province/RevokeDto.cs
  100. 43 0
      src/Hotline.Share/Dtos/DataSharing/Province/ScreenDto.cs

+ 164 - 0
src/Hotline.Api/Controllers/DataSharing/CityDataExchangeController.cs

@@ -0,0 +1,164 @@
+using Fw.Utility.UnifyResponse;
+using Hotline.DataSharing;
+using Hotline.DataSharing.DataExchange;
+using Hotline.DataSharing.Province.Notifications;
+using Hotline.Share.Dtos.DataSharing;
+using Hotline.Share.Dtos.DataSharing.DataExchange;
+using Hotline.Share.Dtos.Order;
+using MapsterMapper;
+using MediatR;
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Mvc;
+using Sharing.Share.Dtos.DataSharing.DataExchange;
+using System.Security.Cryptography;
+using System.Text;
+using XF.Domain.Filters;
+using XF.Domain.Repository;
+
+namespace Hotline.Api.Controllers.DataSharing
+{
+    /// <summary>
+    /// 市州数据交换
+    /// </summary>
+    public class CityDataExchangeController : BaseController
+    {
+        private readonly IMapper _mapper;
+        private readonly IMediator _mediator;
+        private readonly IRepository<DsCityDataReceive> _cityDataReceiveRepository;
+        private readonly IChannelConfigurationManager _channelConfigurationManager;
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="mapper"></param>
+        /// <param name="mediator"></param>
+        /// <param name="cityDataReceiveRepository"></param>
+        /// <param name="channelConfigurationManager"></param>
+        public CityDataExchangeController(IMapper mapper, IMediator mediator,
+            IRepository<DsCityDataReceive> cityDataReceiveRepository,
+            IChannelConfigurationManager channelConfigurationManager)
+        {
+            _mapper = mapper;
+            _mediator = mediator;
+            _cityDataReceiveRepository = cityDataReceiveRepository;
+            _channelConfigurationManager = channelConfigurationManager;
+        }
+
+        /// <summary>
+        /// 宜宾泸州数据互换
+        /// </summary>
+        /// <param name="cityDataReceiveDto">宜宾泸州数据互换</param>
+        /// <returns></returns>
+        [HttpPost("city_hand_data")]
+        [AllowAnonymous]
+        public async Task<OpenResponse> CityHandData([FromBody] CityDataReceiveDto cityDataReceiveDto)
+        {
+            // 验证
+            if (cityDataReceiveDto is null)
+                return OpenResponse.Ok(DataExchangeDeReponse.Failed(description: "数据解析失败"));
+
+            //验证数据
+            string strResult = cityDataReceiveDto.Validate();
+            if (!string.IsNullOrEmpty(strResult))
+                return OpenResponse.Ok(DataExchangeDeReponse.Failed(description: strResult));
+
+            var cityHandOver = _channelConfigurationManager.GetConfigurationCityHandOver();
+            //验证MD5
+            strResult = Verification(cityDataReceiveDto.Code, cityDataReceiveDto.Source + cityHandOver.SecretKey);
+            if (!string.IsNullOrEmpty(strResult))
+                return OpenResponse.Ok(DataExchangeDeReponse.Failed("-900", strResult));
+
+            //转换数据
+            var dto = _mapper.Map<DsCityDataReceive>(cityDataReceiveDto);
+            //添加数据
+            var id = await _cityDataReceiveRepository.AddAsync(dto, HttpContext.RequestAborted);
+
+            if (!string.IsNullOrEmpty(id))
+            {
+                AddOrderDto data = new()
+                {
+                    Title = cityDataReceiveDto.Title,
+                    ExternalId = cityDataReceiveDto.FSHCode,
+                    AcceptType = cityDataReceiveDto.PurTypeName,
+                    HotspotSpliceName = cityDataReceiveDto.ConTypeName,
+                    FromName = cityDataReceiveDto.LinkName,
+                    Contact = cityDataReceiveDto.Mobile,
+                    Address = cityDataReceiveDto.Address,
+                    Content = cityDataReceiveDto.Content,
+                    Source = Hotline.Share.Enums.Order.ESource.CityDataExchangeLz,
+                    FromGender = cityDataReceiveDto.Gender switch
+                    {
+                        "1" => Hotline.Share.Enums.Order.EGender.Male,
+                        "2" => Hotline.Share.Enums.Order.EGender.Female,
+                        _ => Hotline.Share.Enums.Order.EGender.Unknown,
+                    }
+                };
+                //调用工单创建接口
+                var result = await _mediator.Send(new ReceiveOrderNotify { AddOrderDto = data }, HttpContext.RequestAborted);
+                if (result!=null&&!string.IsNullOrEmpty(result.Id))
+                {
+                    dto.Id = id;
+                    dto.OrderId = result.Id;
+                    await _cityDataReceiveRepository.UpdateAsync(dto, HttpContext.RequestAborted);
+                    return OpenResponse.Ok(DataExchangeDeReponse.Success(result.No, result.Password, "您已成功提交数据!"));
+                }
+                else
+                    return OpenResponse.Ok(DataExchangeDeReponse.Failed(description: "接口调用失败!"));
+
+            }
+            else
+                return OpenResponse.Ok(DataExchangeDeReponse.Failed(description: "接口调用失败!"));
+        }
+
+        #region 密钥验证
+
+        /// <summary>
+        /// 密钥验证
+        /// </summary>
+        /// <param name="Code">密钥</param>
+        private static string Verification(string Code, string Source)
+        {
+            string strJson = "";
+            string strJJYLCode = GetMD5(Source);
+            if (strJJYLCode.ToLower().Trim() != Code.ToLower().Trim())
+            {
+                strJson = "密钥错误";
+                return strJson;
+            }
+            return "";
+        }
+
+        #endregion
+
+        #region MD5 32位加密
+
+        /// <summary>
+        /// MD5 32位加密
+        /// </summary>
+        /// <param name="myString"></param>
+        /// <returns></returns>
+        private static string GetMD5(string myString)
+        {
+            string cl = myString;
+            string pwd = "";
+            try
+            {
+                MD5 md5 = MD5.Create();//实例化一个md5对像
+                                       // 加密后是一个字节类型的数组,这里要注意编码UTF8/Unicode等的选择 
+                byte[] s = md5.ComputeHash(Encoding.UTF8.GetBytes(cl));
+                // 通过使用循环,将字节类型的数组转换为字符串,此字符串是常规字符格式化所得
+                for (int i = 0; i < s.Length; i++)
+                {
+                    // 将得到的字符串使用十六进制类型格式。格式后的字符是小写的字母,如果使用大写(X)则格式后的字符是大写字符 
+                    pwd = pwd + s[i].ToString("X2");
+                }
+            }
+            catch (Exception)
+            {
+            }
+            return pwd;
+        }
+
+        #endregion
+    }
+}

+ 509 - 0
src/Hotline.Api/Controllers/DataSharing/ConvergenceMediaController.cs

@@ -0,0 +1,509 @@
+using DotNetCore.CAP;
+using Fw.Utility.UnifyResponse;
+using Hotline.DataSharing;
+using Hotline.DataSharing.ConvergenceMedia;
+using Hotline.DataSharing.Order;
+using Hotline.DataSharing.Province.Notifications;
+using Hotline.Share.Dtos.DataSharing;
+using Hotline.Share.Dtos.DataSharing.ConvergenceMedia;
+using Hotline.Share.Dtos.Order;
+using Hotline.Share.Enums.DataSharing;
+using Hotline.Share.Enums.Order;
+using MapsterMapper;
+using MediatR;
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Mvc;
+using Sharing.Share.Dtos.DataSharing.ConvergenceMedia;
+using SqlSugar;
+using XF.Domain.Filters;
+using XF.Domain.Repository;
+
+namespace Hotline.Api.Controllers.DataSharing
+{
+    /// <summary>
+    /// 融媒体
+    /// </summary>
+    public class ConvergenceMediaController : BaseController
+    {
+        #region 注入
+        private readonly IMapper _mapper;
+        private readonly IMediator _mediator;
+        private readonly IChannelConfigurationManager _channelConfigurationManager;
+        private readonly IRepository<DsMediaDataReceive> _mediaDataReceiveRepository;
+        private readonly IRepository<DsOrder> _dataOrderRepository;
+        private readonly IRepository<DsOrderWorkFlow> _dataOrderWorkFlowRepository;
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="mapper"></param>
+        /// <param name="mediator"></param>
+        /// <param name="channelConfigurationManager"></param>
+        /// <param name="mediaDataReceiveRepository"></param>
+        /// <param name="dataOrderRepository"></param>
+        /// <param name="dataOrderWorkFlowRepository"></param>
+        public ConvergenceMediaController(IMapper mapper, IMediator mediator, IChannelConfigurationManager channelConfigurationManager,
+            IRepository<DsMediaDataReceive> mediaDataReceiveRepository, IRepository<DsOrder> dataOrderRepository
+            , IRepository<DsOrderWorkFlow> dataOrderWorkFlowRepository)
+        {
+            _mapper = mapper;
+            _mediator = mediator;
+            _channelConfigurationManager = channelConfigurationManager;
+            _mediaDataReceiveRepository = mediaDataReceiveRepository;
+            _dataOrderRepository = dataOrderRepository;
+            _dataOrderWorkFlowRepository = dataOrderWorkFlowRepository;
+        }
+        #endregion
+
+        /// <summary>
+        /// 2.1融媒体写信
+        /// </summary>
+        /// <param name="mediaDataReceiveDto"></param>
+        /// <returns></returns>
+        [HttpPost("WriteOrder")]
+        [AllowAnonymous]
+        public async Task<OpenResponse> WriteOrder([FromBody] MediaDataReceiveDto mediaDataReceiveDto)
+        {
+            //验证密钥
+            var mediaCode = _channelConfigurationManager.GetConfigurationMediaCode();
+            if (mediaCode.MediaCode.ToLower().Trim() != mediaDataReceiveDto.Code.ToLower().Trim())
+                return OpenResponse.Ok(ConvergenceMediaDeResponse<WriteOrderResponseDto>.Failed(new WriteOrderResponseDto() { AcceptCode = "", AcceptPwd = "", msg = "密钥错误", Code = "-900" }, "1", "密钥错误"));
+
+            //验证数据
+            string strResult = mediaDataReceiveDto.Validate();
+            if (!string.IsNullOrEmpty(strResult))
+                return OpenResponse.Ok(ConvergenceMediaDeResponse<WriteOrderResponseDto>.Failed(new WriteOrderResponseDto() { AcceptCode = "", AcceptPwd = "", msg = strResult, Code = "0" }, "1", description: strResult));
+
+            //转换数据
+            var dto = _mapper.Map<DsMediaDataReceive>(mediaDataReceiveDto);
+            //添加数据
+            var id = await _mediaDataReceiveRepository.AddAsync(dto, HttpContext.RequestAborted);
+            if (!string.IsNullOrEmpty(id))
+            {
+                AddOrderDto data = new()
+                {
+                    Title = mediaDataReceiveDto.Title,
+                    FromName = mediaDataReceiveDto.LinkName,
+                    Contact = mediaDataReceiveDto.Mobile,
+                    Address = mediaDataReceiveDto.Address,
+                    Content = mediaDataReceiveDto.Content,
+                    IsSecret = mediaDataReceiveDto.Secrecy == 0 ? false : true,
+                    Source = ESource.ConvergenceMedia,
+                    FromGender = mediaDataReceiveDto.Gender switch
+                    {
+                        "1" => EGender.Male,
+                        "2" => EGender.Female,
+                        _ => EGender.Unknown,
+                    }
+                };
+                switch (mediaDataReceiveDto.PurTypeName)
+                {
+                    case 17:
+                        data.AcceptType = "咨询";
+                        data.AcceptTypeCode = "10";
+                        break;
+                    case 18:
+                        data.AcceptType = "举报";
+                        data.AcceptTypeCode = "30";
+                        break;
+                    case 19:
+                        data.AcceptType = "投诉";
+                        data.AcceptTypeCode = "35";
+                        break;
+                    case 20:
+                        data.AcceptType = "求助";
+                        data.AcceptTypeCode = "20";
+                        break;
+                    case 21:
+                        data.AcceptType = "建议";
+                        data.AcceptTypeCode = "15";
+                        break;
+                    case 25:
+                        data.AcceptType = "其他";
+                        data.AcceptTypeCode = "40";
+                        break;
+                    default:
+                        data.AcceptType = "其他";
+                        data.AcceptTypeCode = "40";
+                        break;
+                }
+
+                string areaName = "";
+                switch (mediaDataReceiveDto.AreaID)
+                {
+                    case 2:
+                        data.AreaCode = "511504"; areaName = "叙州区";
+                        break;
+                    case 3:
+                        data.AreaCode = "511503"; areaName = "翠屏区";
+                        break;
+                    case 4:
+                        data.AreaCode = "511504"; areaName = "南溪区";
+                        break;
+                    case 5:
+                        data.AreaCode = "511524"; areaName = "长宁县";
+                        break;
+                    case 6:
+                        data.AreaCode = "511528"; areaName = "兴文县";
+                        break;
+                    case 7:
+                        data.AreaCode = "511526"; areaName = "珙县";
+                        break;
+                    case 8:
+                        data.AreaCode = "511525"; areaName = "高县";
+                        break;
+                    case 9:
+                        data.AreaCode = "511527"; areaName = "筠连县";
+                        break;
+                    case 10:
+                        data.AreaCode = "511523"; areaName = "江安县";
+                        break;
+                    case 11:
+                        data.AreaCode = "511529"; areaName = "屏山县";
+                        break;
+                    case 12:
+                        data.AreaCode = "511504"; areaName = "叙州区";
+                        break;
+                    default:
+                        break;
+                }
+                data.Address = "四川省宜宾市" + areaName;
+
+                //调用工单创建接口
+                var result = await _mediator.Send(new ReceiveOrderNotify { AddOrderDto = data }, HttpContext.RequestAborted);
+                if (result != null && !string.IsNullOrEmpty(result.Id))
+                {
+                    dto.Id = id;
+                    dto.OrderId = result.Id;
+                    await _mediaDataReceiveRepository.UpdateAsync(dto, HttpContext.RequestAborted);
+                    return OpenResponse.Ok(ConvergenceMediaDeResponse<WriteOrderResponseDto>.Success(new WriteOrderResponseDto() { AcceptCode = result.No, AcceptPwd = result.Password, msg = "写信成功", Code = "1" }, "您已成功提交数据!"));
+                }
+                else
+                    return OpenResponse.Ok(ConvergenceMediaDeResponse<WriteOrderResponseDto>.Failed(new WriteOrderResponseDto() { AcceptCode = "", AcceptPwd = "", msg = "接口调用失败", Code = "0" }, "1", description: "接口调用失败!"));
+
+            }
+            else
+                return OpenResponse.Ok(ConvergenceMediaDeResponse<WriteOrderResponseDto>.Failed(new WriteOrderResponseDto() { AcceptCode = "", AcceptPwd = "", msg = "接口调用失败", Code = "0" }, "1", description: "接口调用失败!"));
+        }
+
+        /// <summary>
+        /// 2.2工单列表
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpPost("GetOrderByList")]
+        [AllowAnonymous]
+        public async Task<OpenResponse> GetOrderByList([FromBody] GetOrderMediaReceiveDto dto)
+        {
+            //密钥验证
+            var mediaCode = _channelConfigurationManager.GetConfigurationMediaCode();
+            if (mediaCode.MediaCode.ToLower().Trim() != dto.Code.ToLower().Trim())
+                return OpenResponse.Ok(ConvergenceMediaDeResponse<GetOrderMediaDataDto>.Failed(null, "0", "密钥错误"));
+
+            //数据处理
+            string AcceptTypeCode = "";
+            switch (dto.PurTypeID)
+            {
+                case 17:
+                    AcceptTypeCode = "10";
+                    break;
+                case 18:
+                    AcceptTypeCode = "30";
+                    break;
+                case 19:
+                    AcceptTypeCode = "35";
+                    break;
+                case 20:
+                    AcceptTypeCode = "20";
+                    break;
+                case 21:
+                    AcceptTypeCode = "15";
+                    break;
+                case 25:
+                    AcceptTypeCode = "40";
+                    break;
+                default:
+                    AcceptTypeCode = "";
+                    break;
+            }
+
+            //数据查询
+            RefAsync<int> total = 0;
+            var items = await _dataOrderRepository
+            .Queryable()
+            .Where(p => p.Source == ESource.ConvergenceMedia.ToString())
+            .WhereIF(!string.IsNullOrEmpty(dto.AcceptCode), p => p.OrderNo.Contains(dto.AcceptCode))
+            .WhereIF(!string.IsNullOrEmpty(dto.Title), p => p.Title.Contains(dto.Title))
+            .WhereIF(!string.IsNullOrEmpty(dto.Mobile), p => p.Contact.Contains(dto.Mobile))
+            .WhereIF(!string.IsNullOrEmpty(AcceptTypeCode), p => p.CaseTypeCode == AcceptTypeCode)
+            .WhereIF(!string.IsNullOrEmpty(dto.StartDate), p => p.CaseDate >= Convert.ToDateTime(dto.StartDate))
+            .WhereIF(!string.IsNullOrEmpty(dto.EndDate), p => p.CaseDate < Convert.ToDateTime(dto.EndDate).AddDays(1))
+            .Select(it => new
+            {
+                FlowID = it.Id,
+                RowID = SqlFunc.MappingColumn(default(int), "  row_number()  over( order by 'AddDate' desc ) "),
+                //  RowID= SqlFunc.RowNumber(it.CaseDate),
+                Code = it.OrderNo,
+                Title = it.Title,
+                AddDate = it.CaseDate,
+                FromName = it.CaseSource,
+                PurTypeName = it.CaseType,
+                ResultState = it.HandleState
+            })
+              .ToPageListAsync(dto.CurrentPage, dto.PageSize, total);
+
+            //计算总页数
+            int nPageCount = Convert.ToInt32(Math.Ceiling(Convert.ToDouble(total) / dto.PageSize));
+
+            //处理返回
+            GetOrderMediaDataDto dataDto = new()
+            {
+                PageCount = nPageCount,
+                data = _mapper.Map<IReadOnlyList<GetOrderMediaDataListDto>>(items)
+            };
+
+            return OpenResponse.Ok(ConvergenceMediaDeResponse<GetOrderMediaDataDto>.Success(dataDto, "成功"));
+
+        }
+
+        /// <summary>
+        /// 2.3 工单查询
+        /// </summary>
+        /// <returns></returns>
+        [HttpPost("GetOrderDetail")]
+        [AllowAnonymous]
+        public async Task<OpenResponse> GetOrderDetail([FromBody] MediaOrderDetailReceiveDto dto)
+        {
+            //验证密钥
+            var mediaCode = _channelConfigurationManager.GetConfigurationMediaCode();
+            if (mediaCode.MediaCode.ToLower().Trim() != dto.Code.ToLower().Trim())
+                return OpenResponse.Ok(ConvergenceMediaDeResponse<IReadOnlyList<MediaOrderDetailDataDto>>.Failed(null, "0", "密钥错误"));
+
+            //验证数据
+            string strResult = dto.Validate();
+            if (!string.IsNullOrEmpty(strResult))
+                return OpenResponse.Ok(ConvergenceMediaDeResponse<IReadOnlyList<MediaOrderDetailDataDto>>.Failed(null, "0", strResult));
+
+            //查询数据
+            var items = await _dataOrderRepository
+             .Queryable()
+             .Where(p => p.OrderNo == dto.AcceptCode)
+             .Where(p => p.Password == dto.AcceptPwd)
+             .Where(p => p.Source == ESource.ConvergenceMedia.ToString())
+              .Select(it => new
+              {
+                  FlowID = it.Id,
+                  FlowCode = it.OrderNo,
+                  FlowTitle = it.Title,
+                  FlowFromName = it.CaseSource,
+                  FlowPurTypeName = it.CaseType,
+                  FlowConTypeName = it.HotspotName,
+                  FlowAddDate = it.CaseDate,
+                  FlowLKName = it.FromName,
+                  FlowBMName = it.ActualHandleOrgName,
+                  FlowRSFlagName = it.HandleState,
+                  FlowContent = it.Content,
+                  FlowResult = it.ActualOpinion,
+              })
+              .ToListAsync();
+
+            if (items == null)
+                return OpenResponse.Ok(ConvergenceMediaDeResponse<IReadOnlyList<MediaOrderDetailDataDto>>.Failed(null, "0", "编号、密码错误!"));
+            else
+                return OpenResponse.Ok(ConvergenceMediaDeResponse<IReadOnlyList<MediaOrderDetailDataDto>>.Success(_mapper.Map<IReadOnlyList<MediaOrderDetailDataDto>>(items), "成功"));
+
+        }
+
+        /// <summary>
+        /// 2.4 今日受理分类统计
+        /// </summary>
+        /// <param name="Code"></param>
+        /// <returns></returns>
+        [HttpPost("GetPurTypeReport")]
+        [AllowAnonymous]
+        public async Task<OpenResponse> GetPurTypeReport([FromBody] string Code)
+        {
+            //验证密钥
+            var mediaCode = _channelConfigurationManager.GetConfigurationMediaCode();
+            if (mediaCode.MediaCode.ToLower().Trim() != Code.ToLower().Trim())
+                return OpenResponse.Ok(ConvergenceMediaDeResponse<List<GetPurTypeReportDataDto>>.Failed(null, "0", "密钥错误"));
+
+            //数据查询
+            var list = _dataOrderRepository.Queryable()
+                .Where(p => p.CaseDate >= Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd 00:00:00")))
+                .Where(p => p.CaseDate <= Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd 23:59:59")))
+                .Select(it => new
+                {
+                    it.CaseType,
+                    it.CaseTypeCode
+                })
+                .MergeTable()//将查询出来的结果合并成一个新表
+                 .GroupBy(it => new { it.CaseType, it.CaseTypeCode })//对新表进行分组
+                 .Select(it => new
+                 {
+                     PurTypeName = it.CaseType,
+                     Count = SqlFunc.AggregateCount(it.CaseTypeCode)
+                 })
+                 .ToListAsync();
+
+            var listData = _mapper.Map<List<GetPurTypeReportDataDto>>(list);
+            return OpenResponse.Ok(ConvergenceMediaDeResponse<List<GetPurTypeReportDataDto>>.Success(listData, "成功"));
+        }
+
+        /// <summary>
+        /// 2.5 答复公开
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpPost("GetOrderByListOpen")]
+        [AllowAnonymous]
+        public async Task<OpenResponse> GetOrderByListOpen([FromBody] GetOrderMediaReceiveOpenDto dto)
+        {
+            //密钥验证
+            var mediaCode = _channelConfigurationManager.GetConfigurationMediaCode();
+            if (mediaCode.MediaCode.ToLower().Trim() != dto.Code.ToLower().Trim())
+                return OpenResponse.Ok(ConvergenceMediaDeResponse<GetOrderMediaDataDto>.Failed(null, "0", "密钥错误"));
+
+            //数据处理
+            string AcceptTypeCode = "";
+            switch (dto.PurTypeID)
+            {
+                case 17:
+                    AcceptTypeCode = "10";
+                    break;
+                case 18:
+                    AcceptTypeCode = "30";
+                    break;
+                case 19:
+                    AcceptTypeCode = "35";
+                    break;
+                case 20:
+                    AcceptTypeCode = "20";
+                    break;
+                case 21:
+                    AcceptTypeCode = "15";
+                    break;
+                case 25:
+                    AcceptTypeCode = "40";
+                    break;
+                default:
+                    AcceptTypeCode = "";
+                    break;
+            }
+
+            //查询数据
+            RefAsync<int> total = 0;
+            var items = await _dataOrderRepository
+            .Queryable()
+            .Where(p => p.IsPublish == EDsPublishState.Open)
+            .WhereIF(!string.IsNullOrEmpty(dto.Title), p => p.Title.Contains(dto.Title))
+            .WhereIF(!string.IsNullOrEmpty(AcceptTypeCode), p => p.CaseTypeCode == AcceptTypeCode)
+            .WhereIF(!string.IsNullOrEmpty(dto.StartDate), p => p.CaseDate >= Convert.ToDateTime(dto.StartDate))
+            .WhereIF(!string.IsNullOrEmpty(dto.EndDate), p => p.CaseDate < Convert.ToDateTime(dto.EndDate).AddDays(1))
+            .Select(it => new
+            {
+                FlowID = it.Id,
+                RowID = SqlFunc.MappingColumn(default(int), "  row_number()  over( order by 'AddDate' desc ) "),
+                Code = it.OrderNo,
+                Title = it.Title,
+                AddDate = it.CaseDate,
+                FromName = it.CaseSource,
+                PurTypeName = it.CaseType,
+                ResultState = it.HandleState
+            })
+              .ToPageListAsync(dto.CurrentPage, dto.PageSize, total);
+
+            //计算总页数
+            int nPageCount = Convert.ToInt32(Math.Ceiling(Convert.ToDouble(total) / dto.PageSize));
+
+            //返回数据处理
+            GetOrderMediaDataDto dataDto = new()
+            {
+                PageCount = nPageCount,
+                data = _mapper.Map<IReadOnlyList<GetOrderMediaDataListDto>>(items)
+            };
+
+            return OpenResponse.Ok(ConvergenceMediaDeResponse<GetOrderMediaDataDto>.Success(dataDto, "成功"));
+
+        }
+
+        /// <summary>
+        /// 2.6 办理明细
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpPost("GetOrderByRun")]
+        [AllowAnonymous]
+        public async Task<OpenResponse> GetOrderByRun([FromBody] MediaOrderDetailReceiveDto dto)
+        {
+            //密钥验证
+            var mediaCode = _channelConfigurationManager.GetConfigurationMediaCode();
+            if (mediaCode.MediaCode.ToLower().Trim() != dto.Code.ToLower().Trim())
+                return OpenResponse.Ok(ConvergenceMediaDeResponse<IReadOnlyList<GetOrderByRunDataDto>>.Failed(null, "0", "密钥错误"));
+
+            //验证数据
+            string strResult = dto.Validate();
+            if (!string.IsNullOrEmpty(strResult))
+                return OpenResponse.Ok(ConvergenceMediaDeResponse<IReadOnlyList<GetOrderByRunDataDto>>.Failed(null, "0", strResult));
+
+            //验证信件是否存在
+            var data = await _dataOrderRepository.GetAsync(p => p.OrderNo == dto.AcceptCode && p.Password == dto.AcceptPwd && p.Source == ESource.ConvergenceMedia.ToString());
+            if (data != null)
+                return OpenResponse.Ok(ConvergenceMediaDeResponse<IReadOnlyList<GetOrderByRunDataDto>>.Failed(null, "0", "编号、密码错误!"));
+
+            //数据查询
+            var list = await _dataOrderWorkFlowRepository.Queryable()
+                  .Where(p => p.OrderId == data.OrderId)
+                  .Where(p => p.WorkflowId == data.WorkflowId)
+                  .Select(it => new
+                  {
+                      BMName = it.HandlerOrgName,
+                      TTime = it.StepExpiredTime,
+                      DisposeDate = it.HandleTime
+                  })
+                  .ToListAsync();
+            return OpenResponse.Ok(ConvergenceMediaDeResponse<IReadOnlyList<GetOrderByRunDataDto>>.Success(_mapper.Map<IReadOnlyList<GetOrderByRunDataDto>>(list), "成功"));
+        }
+
+        /// <summary>
+        /// 2.1.3 上传附件----未完成
+        /// </summary>
+        /// <param name="formData"></param>
+        /// <returns></returns>
+        [HttpPost("WriteFiles")]
+        [AllowAnonymous]
+        public async Task<byte[]> WriteFiles([FromForm] IFormCollection formData)
+        {
+            string Code = formData["Code"];
+            string AcceptCode = formData["AcceptCode"];
+            string AcceptPwd = formData["AcceptPwd"];
+
+            IFormFileCollection files = formData.Files;//等价于Request.Form.Files
+            long size = files.Sum(f => f.Length);
+            var file = files[0];
+
+            string FileName = file.FileName;
+
+            var stream = file.OpenReadStream();
+            byte[] ByteFile = i_StreamToBytes(stream);
+            return ByteFile;
+        }
+
+
+        #region 私有方法-将文件转化为文件流
+        /// <summary>
+        /// 将文件转化为文件流
+        /// </summary>
+        /// <param name="stream"></param>
+        /// <returns></returns>
+        private byte[] i_StreamToBytes(Stream stream)
+        {
+            byte[] bytes = new byte[stream.Length];
+            stream.Read(bytes, 0, bytes.Length);
+            // 设置当前流的位置为流的开始    
+            stream.Seek(0, SeekOrigin.Begin);
+            return bytes;
+        }
+        #endregion
+    }
+}

+ 89 - 0
src/Hotline.Api/Controllers/DataSharing/EnterpriseController.cs

@@ -0,0 +1,89 @@
+using DotNetCore.CAP;
+using Hotline.DataSharing;
+using Hotline.DataSharing.Enterprise;
+using Hotline.Share.Dtos.DataSharing;
+using Hotline.Share.Dtos.DataSharing.Enterprise.Receive;
+using MapsterMapper;
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Mvc;
+using Sharing.Share.Dtos.DataSharing.Enterprise;
+using XF.Domain.Filters;
+using XF.Domain.Repository;
+
+namespace Hotline.Api.Controllers.DataSharing
+{
+    /// <summary>
+    /// 企业专班
+    /// </summary>
+    public class EnterpriseController : BaseController
+    {
+        private readonly IMapper _mapper;
+        private readonly IRepository<DsReceiveWriteResult> _receiveWriteResultRepository;
+        private readonly EnterpriseClient _enterpriseClient;
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="mapper"></param>
+        /// <param name="receiveWriteResultRepository"></param>
+        public EnterpriseController(IMapper mapper, IRepository<DsReceiveWriteResult> receiveWriteResultRepository, EnterpriseClient enterpriseClient)
+        {
+            _mapper = mapper;
+            _receiveWriteResultRepository = receiveWriteResultRepository;
+            _enterpriseClient = enterpriseClient;
+        }
+
+        /// <summary>
+        /// 查询企业专班
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpPost("platform/12345/selectEnterpriseList")]
+        [AllowAnonymous]
+        public async Task<OpenResponse> GetEnterpriseList(SelectEnterpriseListDto dto)
+        {
+            var request = new SelectEnterpriseListRequest();
+
+            var enterpriseList = _mapper.Map<SelectEnterpriseList>(dto);
+            request.SetData(enterpriseList);
+
+            var response = await _enterpriseClient.RequestAsync<SelectEnterpriseListRequest, EnterpriseResponse>(request, HttpContext.RequestAborted);// await _enterprisePusher.SelectEnterpriseListAsync(request, HttpContext.RequestAborted);
+
+            if (response != null)
+            {
+                if (response.success == true && response.data != null)
+                {
+                    return OpenResponse.Ok(System.Text.Json.JsonSerializer.Deserialize<EnRecordsDto>(response.data.ToString()));
+                }
+            }
+            return OpenResponse.Ok("");
+        }
+
+        /// <summary>
+        /// 企业服务提交办理结果
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpPost("api/yb12345/enterprise/writeResult")]
+        [AllowAnonymous]
+        public async Task<OpenResponse> WriteResult(WriteResultDto dto)
+        {
+            //验证数据
+            string strResult = dto.Validate();
+            if (!string.IsNullOrEmpty(strResult))
+                return OpenResponse.Ok(EnterpriseDeResponse.Failed(description: strResult));
+
+            var data = _mapper.Map<DsReceiveWriteResult>(dto);
+
+            var id = await _receiveWriteResultRepository.AddAsync(data, HttpContext.RequestAborted);
+            if (!string.IsNullOrEmpty(id))
+            {
+                //向业务系统推送消息
+                // await _capPublisher.PublishAsync("", _mapper.Map<DataWriteResultDto>(dto), cancellationToken: HttpContext.RequestAborted);
+                //这里往业务系统推送数据
+                return OpenResponse.Ok(EnterpriseDeResponse.Success("回复提交成功"));
+            }
+            return OpenResponse.Ok(EnterpriseDeResponse.Failed("接口调用失败!"));
+        }
+    }
+}

+ 767 - 0
src/Hotline.Api/Controllers/DataSharing/PoliceDSController.cs

@@ -0,0 +1,767 @@
+using DotNetCore.CAP;
+using Hotline.DataSharing;
+using Hotline.DataSharing.DaoShu110;
+using Hotline.DataSharing.Province.Notifications;
+using Hotline.DataSharing.Province.XieTong.Knowledge;
+using Hotline.Share.Dtos.DataSharing;
+using Hotline.Share.Dtos.DataSharing.DaoShu110;
+using Hotline.Share.Dtos.Order;
+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 Sharing.Share.Dtos.DataSharing.Province;
+using System.Net;
+using System.Text;
+using XF.Domain.Filters;
+using XF.Domain.Repository;
+using Hotline.DataSharing.Extensions;
+
+namespace Hotline.Api.Controllers.DataSharing
+{
+    /// <summary>
+    /// 110
+    /// </summary>
+    public class PoliceDSController : BaseController
+    {
+        #region 注入
+        private readonly IMapper _mapper;
+        private readonly ICapPublisher _capPublisher;
+        private readonly IMediator _mediator;
+        private readonly IRepository<DsPoliceReceiveChainAlarmDs> _policeReceiveChainAlarmDsRepository;
+        private readonly IRepository<DsPoliceReceiveChainDealDs> _policeReceiveChainDealDsRepository;
+        private readonly IRepository<DsPoliceSendChainAlarmDs> _policeSendChainAlarmDsRepository;
+        private readonly IRepository<DsPoliceSendChainDealDs> _policeSendChainDealDsRepository;
+        private readonly IRepository<DsKnowledgeRawData> _knowledgeRawDataRepository;
+        private readonly IChannelConfigurationManager _channelConfigurationManager;
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="mapper"></param>
+        /// <param name="capPublisher"></param>
+        /// <param name="mediator"></param>
+        /// <param name="policeReceiveChainAlarmDsRepository"></param>
+        /// <param name="policeReceiveChainDealDsRepository"></param>
+        /// <param name="policeSendChainAlarmDsRepository"></param>
+        /// <param name="policeSendChainDealDsRepository"></param>
+        /// <param name="knowledgeRawDataRepository"></param>
+        /// <param name="channelConfigurationManager"></param>
+        public PoliceDSController(IMapper mapper,
+            ICapPublisher capPublisher,
+            IMediator mediator,
+            IRepository<DsPoliceReceiveChainAlarmDs> policeReceiveChainAlarmDsRepository,
+            IRepository<DsPoliceReceiveChainDealDs> policeReceiveChainDealDsRepository,
+             IRepository<DsPoliceSendChainAlarmDs> policeSendChainAlarmDsRepository,
+             IRepository<DsPoliceSendChainDealDs> policeSendChainDealDsRepository,
+             IRepository<DsKnowledgeRawData> knowledgeRawDataRepository,
+              IChannelConfigurationManager channelConfigurationManager)
+        {
+            _mapper = mapper;
+            _capPublisher = capPublisher;
+            _mediator = mediator;
+            _policeReceiveChainAlarmDsRepository = policeReceiveChainAlarmDsRepository;
+            _policeReceiveChainDealDsRepository = policeReceiveChainDealDsRepository;
+            _policeSendChainAlarmDsRepository = policeSendChainAlarmDsRepository;
+            _policeSendChainDealDsRepository = policeSendChainDealDsRepository;
+            _knowledgeRawDataRepository = knowledgeRawDataRepository;
+            _channelConfigurationManager = channelConfigurationManager;
+        }
+        #endregion
+
+        #region receive-工单受理-已完成
+
+        /// <summary>
+        /// 工单受理
+        /// </summary>
+        /// <returns></returns>
+        [HttpPost("service/api/ds/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
+            var configurationPoliceDS = _channelConfigurationManager.GetConfigurationPoliceDS();
+            var sm4 = configurationPoliceDS.token1_sm4_mw;
+
+            var apiR = new DaoShuDeResponse<string>();
+            try
+            {
+                // 验证dcsm
+                string dcsmMsg = CheckDcsm(Request.Headers["dcsm"].ToString(), configurationPoliceDS.token1_dcsm);
+                if (!string.IsNullOrEmpty(dcsmMsg))
+                {
+                    apiR = DaoShuDeResponse<string>.Failed(dcsmMsg);
+                }
+                else
+                {
+                    string base64String = await GetStreamBase64(HttpContext.Request);
+                    ChainAlarm_DS 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_DS>(jsonRes);
+                    }
+
+                    #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))
+                    {
+                        #region 写入本地数据库
+                        var data = _mapper.Map<DsPoliceReceiveChainAlarmDs>(chainAlarm);
+                        var id = await _policeReceiveChainAlarmDsRepository.AddAsync(data);
+                        if (!string.IsNullOrEmpty(id))
+                        {
+                            //组装业务系统工单数据
+                            AddOrderDto orderDto = new()
+                            {
+                                ExternalId = data.AlarmReceiptNumber,
+                                //   AcceptorStaffNo = policeReceive.RegisterNo,
+                                FromPhone = data.CallPoliceNumber,
+                                FromName = data.CallPoliceName,
+                                Contact = data.PhoneNumber,
+                                Content = data.CallPoliceContent,
+                                IncidentTime = data.CallPoliceTime,
+                                AreaCode = data.AreaCode,
+                                Street = data.CallPoliceAddress
+                            };
+                            //调用工单创建接口
+                            var result = await _mediator.Send(new ReceiveOrderNotify { AddOrderDto = orderDto }, HttpContext.RequestAborted);
+                            if (result != null && !string.IsNullOrEmpty(result.Id))
+                            {
+                                data.Id = id;
+                                data.OrderId = result.Id;
+                                await _policeReceiveChainAlarmDsRepository.UpdateAsync(data, HttpContext.RequestAborted);
+                                apiR = DaoShuDeResponse<string>.Succeed(null);
+                            }
+                            else
+                                apiR = DaoShuDeResponse<string>.Failed(null);
+                        }
+                        else
+                            apiR = DaoShuDeResponse<string>.Failed(null);
+                        #endregion
+                    }
+                    else
+                        apiR = DaoShuDeResponse<string>.Failed(strResult);
+                }
+            }
+            catch (System.Exception)
+            {
+                apiR = DaoShuDeResponse<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, System.Text.Encoding.UTF8, "text/plain");
+            #endregion
+
+            return OpenResponse.Ok(resp);
+        }
+
+        #endregion
+
+        #region receive-工单办结
+
+        /// <summary>
+        /// 工单办结
+        /// </summary>
+        /// <returns></returns>
+        [HttpPost("service/api/ds/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
+            var configurationPoliceDS = _channelConfigurationManager.GetConfigurationPoliceDS();
+            string sm4 = configurationPoliceDS.token4_sm4_mw;
+
+            var apiR = new DaoShuDeResponse<string>();
+            try
+            {
+                // 验证dcsm
+                string dcsmMsg = CheckDcsm(Request.Headers["dcsm"].ToString(), configurationPoliceDS.token4_dcsm);
+                if (!string.IsNullOrEmpty(dcsmMsg))
+                {
+                    apiR = DaoShuDeResponse<string>.Failed(dcsmMsg);
+                }
+                else
+                {
+                    ChainDeal_DS 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_DS>(jsonRes);
+                    }
+
+                    #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))
+                    {
+                        #region 写入本地数据库
+                        var data = _mapper.Map<DsPoliceReceiveChainDealDs>(chainDeal);
+                        if (!string.IsNullOrEmpty(await _policeReceiveChainDealDsRepository.AddAsync(data)))
+                        {
+                            //这里组装数据推送到业务系统
+                            await InitChainDeal(data);
+                            apiR = DaoShuDeResponse<string>.Succeed(null);
+                        }
+                        else
+                            apiR = DaoShuDeResponse<string>.Failed(null);
+
+                        #endregion
+                    }
+                    else
+                        apiR = DaoShuDeResponse<string>.Failed(null);
+
+                }
+            }
+            catch (System.Exception)
+            {
+                apiR = DaoShuDeResponse<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, System.Text.Encoding.UTF8, "text/plain");
+            return OpenResponse.Ok(resp);
+        }
+
+        #endregion
+
+        #region send-工单受理-已完成
+
+        /// <summary>
+        /// 工单受理
+        /// </summary>
+        /// <returns></returns>
+        [HttpPost("service/api/ds/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=
+            var configurationPoliceDS = _channelConfigurationManager.GetConfigurationPoliceDS();
+            string sm4 = configurationPoliceDS.token3_sm4_mw;
+
+            var apiR = new DaoShuDeResponse<string>();
+            try
+            {
+                // 验证dcsm
+                string dcsmMsg = CheckDcsm(Request.Headers["dcsm"].ToString(), configurationPoliceDS.token3_dcsm);
+                if (!string.IsNullOrEmpty(dcsmMsg))
+                {
+                    apiR = DaoShuDeResponse<string>.Failed(dcsmMsg);
+                }
+                else
+                {
+                    OpenData openData = 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 转 实体类
+                            openData = System.Text.Json.JsonSerializer.Deserialize<OpenData>(jsonRes);
+                    }
+                    bool bRun = true;
+                    if (string.IsNullOrEmpty(openData.StartDate) || !IsDate(openData.StartDate))
+                    {
+                        bRun = false;
+                        apiR = DaoShuDeResponse<string>.Failed("【创建开始时间】不是日期格式 yyyy-MM-dd HH:mm:ss");
+                    }
+                    if (string.IsNullOrEmpty(openData.EndDate) || !IsDate(openData.EndDate))
+                    {
+                        bRun = false;
+                        apiR = DaoShuDeResponse<string>.Failed("【创建结束时间】不是日期格式 yyyy-MM-dd HH:mm:ss");
+                    }
+                    if (bRun)
+                    {
+                        var listData = await _policeSendChainAlarmDsRepository.Queryable()
+                             .WhereIF(!string.IsNullOrEmpty(openData.StartDate), p => p.CallPoliceTime >= Convert.ToDateTime(openData.StartDate))
+                             .WhereIF(!string.IsNullOrEmpty(openData.EndDate), p => p.CallPoliceTime >= Convert.ToDateTime(openData.EndDate))
+                             .OrderBy(p => p.CallPoliceTime)
+                             .Take(50)
+                             .ToListAsync();
+
+                        if (null == listData)
+                            apiR = DaoShuDeResponse<string>.Failed(null);
+                        else
+                        {
+                            var dto = _mapper.Map<IReadOnlyList<ChainAlarm_DS>>(listData);
+                            // 返回数据
+                            apiR = DaoShuDeResponse<string>.Succeed(System.Text.Json.JsonSerializer.Serialize(dto), "调用成功");
+                        }
+                    }
+                }
+            }
+            catch (System.Exception)
+            {
+                apiR = DaoShuDeResponse<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, System.Text.Encoding.UTF8, "text/plain");
+            return OpenResponse.Ok(resp);
+        }
+
+        #endregion
+
+        #region send-工单办结
+
+        /// <summary>
+        /// 工单办结
+        /// </summary>
+        /// <returns></returns>
+        [HttpPost("service/api/ds/12345To110/chainDeal")]
+        [AllowAnonymous]
+        public async Task<OpenResponse> ChainDeal_Send()
+        {
+            // 测试JSON
+            // {"JJDBH":"510300202304070001202304070001","CZLX":"1"}
+
+            // 测试Base64
+            // 6RB6Hat8dpBfvCTtEpwotd/MlonxdmqZaa3TcLaua/xcjFv1SZJzKZPrhgsux63Gq/DXxtAQ25buLsI1fgFv3g==
+            var configurationPoliceDS = _channelConfigurationManager.GetConfigurationPoliceDS();
+            string sm4 = configurationPoliceDS.token2_sm4_mw;
+
+            var apiR = new DaoShuDeResponse<string>();
+            try
+            {
+                // 验证dcsm
+                string dcsmMsg = CheckDcsm(Request.Headers["dcsm"].ToString(), configurationPoliceDS.token2_dcsm);
+                if (!string.IsNullOrEmpty(dcsmMsg))
+                {
+                    apiR = DaoShuDeResponse<string>.Failed(dcsmMsg);
+                }
+                else
+                {
+                    string base64String = await GetStreamBase64(HttpContext.Request);
+                    OpenData openData = new();
+                    if (!string.IsNullOrEmpty(base64String))
+                    {
+                        // 解密:base64通过sm4解密转json
+                        string jsonRes = Sm4Crypto.Decrypt_ECB_Base64(sm4, base64String);
+                        if (!string.IsNullOrEmpty(jsonRes))
+                            // json 转 实体类
+                            openData = System.Text.Json.JsonSerializer.Deserialize<OpenData>(jsonRes);
+                    }
+                    bool bRun = true;
+
+                    if (!string.IsNullOrEmpty(openData.StartDate) && !IsDate(openData.StartDate))
+                    {
+                        bRun = false;
+                        apiR = DaoShuDeResponse<string>.Failed("【创建开始时间】不是日期格式 yyyy-MM-dd HH:mm:ss");
+                    }
+                    if (!string.IsNullOrEmpty(openData.EndDate) && !IsDate(openData.EndDate))
+                    {
+                        bRun = false;
+                        apiR = DaoShuDeResponse<string>.Failed("【创建结束时间】不是日期格式 yyyy-MM-dd HH:mm:ss");
+                    }
+
+                    if (bRun)
+                    {
+                        var listData = await _policeSendChainDealDsRepository.Queryable()
+                                 .WhereIF(!string.IsNullOrEmpty(openData.StartDate), p => p.WarehousingTime >= Convert.ToDateTime(openData.StartDate))
+                                 .WhereIF(!string.IsNullOrEmpty(openData.EndDate), p => p.WarehousingTime >= Convert.ToDateTime(openData.EndDate))
+                                 .WhereIF(!string.IsNullOrEmpty(openData.AlarmReceiptNumber), p => p.AlarmReceiptNumber == openData.AlarmReceiptNumber)
+                                 .Where(p => p.DisposalType == openData.DisposalType)
+                                 .OrderBy(p => p.WarehousingTime)
+                                 .Take(50)
+                                 .ToListAsync();
+
+                        if (null == listData)
+                            apiR = DaoShuDeResponse<string>.Failed(null);
+                        else
+                        {
+                            var dto = _mapper.Map<IReadOnlyList<ChainDeal_DS>>(listData);
+                            // 返回数据
+                            apiR = DaoShuDeResponse<string>.Succeed(System.Text.Json.JsonSerializer.Serialize(dto), "调用成功");
+                        }
+                    }
+                }
+            }
+            catch (System.Exception)
+            {
+                apiR = DaoShuDeResponse<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, System.Text.Encoding.UTF8, "text/plain");
+            return OpenResponse.Ok(resp);
+        }
+
+        #endregion
+
+        #region send-知识库列表-已完成
+
+        /// <summary>
+        /// 查询知识库列表
+        /// </summary>
+        /// <returns></returns>
+        [HttpPost("service/api/ds/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
+            var configurationPoliceDS = _channelConfigurationManager.GetConfigurationPoliceDS();
+            string sm4 = configurationPoliceDS.token5_sm4_mw;
+
+            var apiR = new DaoShuDeResponse<string>();
+            try
+            {
+                // 验证dcsm
+                string dcsmMsg = CheckDcsm(Request.Headers["dcsm"].ToString(), configurationPoliceDS.token5_dcsm);
+                if (!string.IsNullOrEmpty(dcsmMsg))
+                {
+                    apiR = DaoShuDeResponse<string>.Failed(dcsmMsg);
+                }
+                else
+                {
+                    string base64String = await GetStreamBase64(HttpContext.Request);
+
+                    Get_Knowledge get_Knowledge = new Get_Knowledge();
+                    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);
+                    }
+
+                    bool bRun = true;
+                    if (string.IsNullOrEmpty(get_Knowledge.createTimeBegin) || !IsDate(get_Knowledge.createTimeBegin))
+                    {
+                        bRun = false;
+                        apiR = DaoShuDeResponse<string>.Failed("【创建开始时间】不是日期格式 yyyy-MM-dd HH:mm:ss");
+                    }
+                    if (string.IsNullOrEmpty(get_Knowledge.createTimeEnd) || !IsDate(get_Knowledge.createTimeEnd))
+                    {
+                        bRun = false;
+                        apiR = DaoShuDeResponse<string>.Failed("【创建结束时间】不是日期格式 yyyy-MM-dd HH:mm:ss");
+                    }
+                    if (bRun)
+                    {
+                        var listData = await _knowledgeRawDataRepository
+                        .Queryable()
+                        .WhereIF(!string.IsNullOrEmpty(get_Knowledge.createTimeBegin), p => p.CreatDate >= Convert.ToDateTime(get_Knowledge.createTimeBegin))
+                          .WhereIF(!string.IsNullOrEmpty(get_Knowledge.createTimeEnd), p => p.CreatDate <= Convert.ToDateTime(get_Knowledge.createTimeEnd))
+                          .WhereIF(!string.IsNullOrEmpty(get_Knowledge.keyWord), p => p.KName.Contains(get_Knowledge.keyWord))
+                         .OrderByDescending(p => p.CreatDate)
+                          .ToListAsync();
+
+                        if (null == listData)
+                            apiR = DaoShuDeResponse<string>.Failed(null);
+                        else
+                        {
+                            var dto = _mapper.Map<IReadOnlyList<KnowledgeDto>>(listData);
+                            // 返回数据
+                            apiR = DaoShuDeResponse<string>.Succeed(System.Text.Json.JsonSerializer.Serialize(dto), "调用成功");
+                        }
+                    }
+                }
+            }
+            catch (System.Exception)
+            {
+                apiR = DaoShuDeResponse<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, System.Text.Encoding.UTF8, "text/plain");
+            return OpenResponse.Ok(resp);
+        }
+
+        #endregion
+
+        #region send-知识库内容-已完成
+
+        /// <summary>
+        /// 查询知识库内容
+        /// </summary>
+        /// <returns></returns>
+        [HttpPost("service/api/ds/get_knowledge_content")]
+        [AllowAnonymous]
+        public async Task<OpenResponse> Get_Knowledge_Content()
+        {
+            var configurationPoliceDS = _channelConfigurationManager.GetConfigurationPoliceDS();
+            string sm4 = configurationPoliceDS.token6_sm4_mw;
+
+            var apiR = new DaoShuDeResponse<string>();
+            try
+            {
+                // 验证dcsm
+                string dcsmMsg = CheckDcsm(Request.Headers["dcsm"].ToString(), configurationPoliceDS.token6_dcsm);
+                if (!string.IsNullOrEmpty(dcsmMsg))
+                    apiR = DaoShuDeResponse<string>.Failed(dcsmMsg);
+                else
+                {
+                    string base64String = await GetStreamBase64(HttpContext.Request);
+
+                    Get_Knowledge get_Knowledge = new Get_Knowledge();
+                    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);
+                    }
+
+                    if (string.IsNullOrEmpty(get_Knowledge.id))
+                    {
+                        apiR = DaoShuDeResponse<string>.Failed("【知识库ID】不能为空");
+                    }
+                    else
+                    {
+                        var data = await _knowledgeRawDataRepository.GetAsync(p => p.Id == get_Knowledge.id);
+                        if (null == data)
+                            apiR = DaoShuDeResponse<string>.Failed(null);
+                        else
+                        {
+                            var dto = _mapper.Map<KnowledgeContent>(data);
+                            // 返回数据
+                            apiR = DaoShuDeResponse<string>.Succeed(System.Text.Json.JsonSerializer.Serialize(dto), "调用成功");
+                        }
+                    }
+                }
+            }
+            catch (System.Exception)
+            {
+                apiR = DaoShuDeResponse<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, System.Text.Encoding.UTF8, "text/plain");
+            return OpenResponse.Ok(resp);
+        }
+
+        #endregion
+
+        #region 私有方法
+        /// <summary>
+        /// 工单办结
+        /// </summary>
+        /// <param name="policeReceiveChainDealDs"></param>
+        /// <returns></returns>
+        private async Task InitChainDeal(DsPoliceReceiveChainDealDs policeReceiveChainDealDs)
+        {
+            if (policeReceiveChainDealDs.DisposalType == 1)//正常办理
+            {
+                OrderDto orderDto = new()
+                {
+                    ExternalId = policeReceiveChainDealDs.AlarmReceiptNumber,
+                    ActualHandleTime = policeReceiveChainDealDs.FeedbackTime,
+                    ActualOpinion = policeReceiveChainDealDs.DisposalSituation,
+                    ActualHandlerId = policeReceiveChainDealDs.FeedbackPersonNumber,
+                    ActualHandlerName = policeReceiveChainDealDs.FeedbackPersonName,
+                    ActualHandleOrgCode = policeReceiveChainDealDs.FeedbackUnitCode,
+                    ActualHandleOrgName = policeReceiveChainDealDs.FeedbackUnitName
+                };
+                // orderFlowDto.Order.ActualHandleTime = policeReceiveChainDealDs.WarehousingTime;
+                //orderFlowDto.Order.ActualOpinion = policeReceiveChainDealDs.DisposalSituation;
+                //向业务系统推送消息
+                //  await _capPublisher.PublishAsync(Sharing.Share.Mq.EventNames.SharingPoliceHandle, orderDto, cancellationToken: HttpContext.RequestAborted);
+            }
+            else if (policeReceiveChainDealDs.DisposalType == 2)//退回 
+            {
+                ReturnFeedbackDto feedbackDto = new()
+                {
+                    CaseSerial = policeReceiveChainDealDs.AlarmReceiptNumber,
+                    DealDept = policeReceiveChainDealDs.ReturnUnit,
+                    DealName = policeReceiveChainDealDs.ReturnName,
+                    ApplyTime = policeReceiveChainDealDs.ReturnTime,
+                    Reason = policeReceiveChainDealDs.ReturnOpinion
+                };
+                //向业务系统推送消息
+                //  await _capPublisher.PublishAsync(Sharing.Share.Mq.EventNames.SharingPoliceReturn, feedbackDto, cancellationToken: HttpContext.RequestAborted);
+            }
+            else if (policeReceiveChainDealDs.DisposalType == 3)//回访 
+            {
+                PublishVisitDto publishVisitDto = new()
+                {
+                    VisitTime = policeReceiveChainDealDs.RevisitTime,
+                    VisitRemark = policeReceiveChainDealDs.VisitContent,
+                    SubjectResultSatifyCode = policeReceiveChainDealDs.VisitResult,
+                    VisitType = EVisitType.ArtificialVisit
+                };
+                publishVisitDto.Order.ExternalId = policeReceiveChainDealDs.AlarmReceiptNumber;
+
+                //向业务系统推送消息
+                //   await _capPublisher.PublishAsync(Sharing.Share.Mq.EventNames.SharingPoliceVisit, publishVisitDto, cancellationToken: HttpContext.RequestAborted);
+            }
+
+        }
+
+        #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 (System.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
+    }
+}

+ 872 - 0
src/Hotline.Api/Controllers/DataSharing/ProvinceController.cs

@@ -0,0 +1,872 @@
+using DotNetCore.CAP;
+using Fw.Utility.UnifyResponse;
+using Hotline.DataSharing.Province.Extend;
+using Hotline.DataSharing.Province.Notifications;
+using Hotline.DataSharing.Province.XieTong.Receive;
+using Hotline.DataSharing.Province.XieTong.Send;
+using Hotline.Orders.Notifications;
+using Hotline.Share.Dtos.DataSharing;
+using Hotline.Share.Dtos.DataSharing.Province;
+using Hotline.Share.Dtos.DataSharing.Province.XieTong.Receive;
+using Hotline.Share.Dtos.Order;
+using Hotline.Share.Enums.Order;
+using MapsterMapper;
+using MediatR;
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Mvc;
+using XF.Domain.Filters;
+using XF.Domain.Repository;
+
+namespace Hotline.Api.Controllers.DataSharing
+{
+    /// <summary>
+    /// 下行,省平台调用
+    /// </summary>
+    public class ProvinceController : BaseController
+    {
+        #region 注入
+        private readonly IMapper _mapper;
+        private readonly ICapPublisher _capPublisher;
+        private readonly IMediator _mediator;
+        private readonly IRepository<DsReceiveCaseInfo> _receiveCaseInfoRepository;
+        private readonly IRepository<DsGetCaseBackResult> _getCaseBackResultRepository;
+        private readonly IRepository<DsDelayCaseResult> _delayCaseResultRepository;
+        private readonly IRepository<DsSupplyCaseInfo> _supplyCaseInfoRepository;
+        private readonly IRepository<DsRevokeCaseInfo> _revokeCaseInfoRepository;
+        private readonly IRepository<DsRemindCaseInfo> _remindCaseInfoRepository;
+        private readonly IRepository<DsSendWarnInfo> _sendWarnInfoRepository;
+        private readonly IRepository<DsSendSuperviseInfo> _sendSuperviseInfoRepository;
+        private readonly IRepository<DsScreenCaseResultReceive> _screenCaseResultReceiveRepository;
+        private readonly IRepository<DsSendCaseEvlResult> _sendCaseEvlResultRepository;
+        private readonly IRepository<DsGetCaseReultSend> _getCaseReultSendRepository;
+        private readonly IRepository<DsGetVisitInfoSend> _getVisitInfoSendRepository;
+        private readonly IRepository<DsFormEnvironMent> _formEnvironMentRepository;
+        private readonly IRepository<DsFormTraffic> _formTrafficRepository;
+        private readonly IRepository<DsFormExpressWay> _formExpressWayRepository;
+        private readonly IRepository<DsFormMedical> _formMedicalRepository;
+        private readonly IRepository<DsFormNetWorktec> _formNetWorktecRepository;
+        private readonly IRepository<DsFormPost> _formPostRepository;
+        private readonly IRepository<DsFormReturnexChange> _formReturnexChangeRepository;
+        private readonly IRepository<DsFormShamPub> _formShamPubRepository;
+        private readonly IRepository<DsFormTaxationComplaint> _formTaxationComplaintRepository;
+        private readonly IRepository<DsFormTaxationConsulting> _formTaxationConsultingRepository;
+        private readonly IRepository<DsReceiveCaseExtends> _receiveCaseExtendsRepository;
+        private readonly IRepository<DsGetCaseMaterialInfo> _getCaseMaterialInfoRepository;
+        private readonly IRepository<DsSendCaseInfo> _sendCaseInfoRepository;
+        private readonly IRepository<DsGetCaseBackApply> _getCaseBackApplyRepository;
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="mapper"></param>
+        /// <param name="capPublisher"></param>
+        /// <param name="receiveCaseInfoRepository"></param>
+        /// <param name="getCaseBackResultRepository"></param>
+        /// <param name="delayCaseResultRepository"></param>
+        /// <param name="supplyCaseInfoRepository"></param>
+        /// <param name="revokeCaseInfoRepository"></param>
+        /// <param name="remindCaseInfoRepository"></param>
+        /// <param name="sendWarnInfoRepository"></param>
+        /// <param name="sendSuperviseInfoRepository"></param>
+        /// <param name="screenCaseResultReceiveRepository"></param>
+        /// <param name="sendCaseEvlResultRepository"></param>
+        /// <param name="getCaseReultSendRepository"></param>
+        /// <param name="getVisitInfoSendRepository"></param>
+        /// <param name="formEnvironMentRepository"></param>
+        /// <param name="formTrafficRepository"></param>
+        /// <param name="formExpressWayRepository"></param>
+        /// <param name="formMedicalRepository"></param>
+        /// <param name="formNetWorktecRepository"></param>
+        /// <param name="formPostRepository"></param>
+        /// <param name="formReturnexChangeRepository"></param>
+        /// <param name="formShamPubRepository"></param>
+        /// <param name="formTaxationComplaintRepository"></param>
+        /// <param name="formTaxationConsultingRepository"></param>
+        /// <param name="receiveCaseExtendsRepository"></param>
+        /// <param name="getCaseMaterialInfoRepository"></param>
+        /// <param name="sendCaseInfoRepository"></param>
+        /// <param name="getCaseBackApplyRepository"></param>
+        public ProvinceController(IMapper mapper,
+          ICapPublisher capPublisher,
+           IMediator mediator,
+          IRepository<DsReceiveCaseInfo> receiveCaseInfoRepository,
+          IRepository<DsGetCaseBackResult> getCaseBackResultRepository,
+          IRepository<DsDelayCaseResult> delayCaseResultRepository,
+          IRepository<DsSupplyCaseInfo> supplyCaseInfoRepository,
+          IRepository<DsRevokeCaseInfo> revokeCaseInfoRepository,
+          IRepository<DsRemindCaseInfo> remindCaseInfoRepository,
+          IRepository<DsSendWarnInfo> sendWarnInfoRepository,
+          IRepository<DsSendSuperviseInfo> sendSuperviseInfoRepository,
+          IRepository<DsScreenCaseResultReceive> screenCaseResultReceiveRepository,
+          IRepository<DsSendCaseEvlResult> sendCaseEvlResultRepository,
+          IRepository<DsGetCaseReultSend> getCaseReultSendRepository,
+          IRepository<DsGetVisitInfoSend> getVisitInfoSendRepository,
+          IRepository<DsFormEnvironMent> formEnvironMentRepository,
+          IRepository<DsFormTraffic> formTrafficRepository,
+          IRepository<DsFormExpressWay> formExpressWayRepository,
+          IRepository<DsFormMedical> formMedicalRepository,
+          IRepository<DsFormNetWorktec> formNetWorktecRepository,
+          IRepository<DsFormPost> formPostRepository,
+          IRepository<DsFormReturnexChange> formReturnexChangeRepository,
+          IRepository<DsFormShamPub> formShamPubRepository,
+          IRepository<DsFormTaxationComplaint> formTaxationComplaintRepository,
+          IRepository<DsFormTaxationConsulting> formTaxationConsultingRepository,
+          IRepository<DsReceiveCaseExtends> receiveCaseExtendsRepository,
+          IRepository<DsGetCaseMaterialInfo> getCaseMaterialInfoRepository,
+          IRepository<DsSendCaseInfo> sendCaseInfoRepository,
+          IRepository<DsGetCaseBackApply> getCaseBackApplyRepository)
+        {
+            _mapper = mapper;
+            _capPublisher = capPublisher;
+            _mediator = mediator;
+            _receiveCaseInfoRepository = receiveCaseInfoRepository;
+            _getCaseBackResultRepository = getCaseBackResultRepository;
+            _delayCaseResultRepository = delayCaseResultRepository;
+            _supplyCaseInfoRepository = supplyCaseInfoRepository;
+            _revokeCaseInfoRepository = revokeCaseInfoRepository;
+            _remindCaseInfoRepository = remindCaseInfoRepository;
+            _sendWarnInfoRepository = sendWarnInfoRepository;
+            _sendSuperviseInfoRepository = sendSuperviseInfoRepository;
+            _screenCaseResultReceiveRepository = screenCaseResultReceiveRepository;
+            _sendCaseEvlResultRepository = sendCaseEvlResultRepository;
+            _getCaseReultSendRepository = getCaseReultSendRepository;
+            _getVisitInfoSendRepository = getVisitInfoSendRepository;
+            _formEnvironMentRepository = formEnvironMentRepository;
+            _formTrafficRepository = formTrafficRepository;
+            _formExpressWayRepository = formExpressWayRepository;
+            _formMedicalRepository = formMedicalRepository;
+            _formNetWorktecRepository = formNetWorktecRepository;
+            _formPostRepository = formPostRepository;
+            _formReturnexChangeRepository = formReturnexChangeRepository;
+            _formShamPubRepository = formShamPubRepository;
+            _formTaxationComplaintRepository = formTaxationComplaintRepository;
+            _formTaxationConsultingRepository = formTaxationConsultingRepository;
+            _receiveCaseExtendsRepository = receiveCaseExtendsRepository;
+            _getCaseMaterialInfoRepository = getCaseMaterialInfoRepository;
+            _sendCaseInfoRepository = sendCaseInfoRepository;
+            _getCaseBackApplyRepository = getCaseBackApplyRepository;
+        }
+        #endregion
+
+        /// <summary>
+        /// 服务工单交办接口--已完成-----1
+        /// </summary>
+        /// <param name="receiveCaseInfo"></param>
+        /// <returns></returns>
+        [HttpPost("rest/receive_case_info")]
+        [AllowAnonymous]
+        public async Task<OpenResponse> ReceiveCaseInfo([FromBody] ReceiveCaseInfoRequest receiveCaseInfo)
+        {
+            // 验证
+            if (receiveCaseInfo is null || receiveCaseInfo.paras is null)
+            {
+                return OpenResponse.Ok(Reponse.Failed("数据解析失败"));
+            }
+
+            //验证接收的数据是否正确
+            string strResult = receiveCaseInfo.paras.Validate();
+            if (!string.IsNullOrEmpty(strResult))
+                return OpenResponse.Ok(Reponse.Failed(strResult));
+
+            //转换数据
+            var dto = _mapper.Map<DsReceiveCaseInfo>(receiveCaseInfo.paras);
+
+            //添加数据
+            var id = await _receiveCaseInfoRepository.AddAsync(dto, HttpContext.RequestAborted);
+
+            //处理组装数据,推送数据
+            var data = _mapper.Map<AddOrderDto>(dto);
+            if (dto.TrowGuid != "【政民互动直派】")
+                data.IsProvince = true;
+
+            //处理性别
+            switch (dto.AppLicantSex)
+            {
+                case "0":
+                    data.FromGender = EGender.Female;
+                    break;
+                case "1":
+                    data.FromGender = EGender.Male;
+                    break;
+                case "2":
+                    data.FromGender = EGender.Unknown;
+                    break;
+                default:
+                    data.FromGender = EGender.Unknown;
+                    break;
+            }
+
+            //处理证件类型
+            switch (dto.CertifiCateType)
+            {
+                case "10":
+                    data.LicenceTypeCode = "10";
+                    break;
+                case "20":
+                    data.LicenceTypeCode = "40";
+                    break;
+                case "30":
+                    data.LicenceTypeCode = "55";
+                    break;
+                case "40":
+                    data.LicenceTypeCode = "57";
+                    break;
+            }
+
+            data.AcceptTypeCode = dto.CaseType;
+
+            //处理紧急程度
+            switch (dto.CaseIsUrgent)
+            {
+                case "10":
+                    data.EmergencyLevel = EEmergencyLevel.QuiteEmergency;
+                    break;
+                case "20":
+                    data.EmergencyLevel = EEmergencyLevel.Emergency;
+                    break;
+                case "30":
+                    data.EmergencyLevel = EEmergencyLevel.Normal;
+                    break;
+            }
+
+            //经纬度处理
+            var lngLat = dto.CaseLngLat.Split(',');
+            if (lngLat != null && lngLat.Length == 2)
+            {
+                data.Longitude = Convert.ToDouble(lngLat[0]);
+                data.Latitude = Convert.ToDouble(lngLat[1]);
+            }
+
+            if (!string.IsNullOrEmpty(id))
+            {
+                //调用工单创建接口
+                var result = await _mediator.Send(new ReceiveOrderNotify { AddOrderDto = data }, HttpContext.RequestAborted);
+                if (result != null && !string.IsNullOrEmpty(result.Id))
+                {
+                    dto.Id = id;
+                    dto.OrderId = result.Id;
+                    await _receiveCaseInfoRepository.UpdateAsync(dto, HttpContext.RequestAborted);
+                    return OpenResponse.Ok(Reponse.Success("您已成功提交数据!"));
+                }
+                else
+                    return OpenResponse.Ok(Reponse.Failed("接口调用失败!"));
+            }
+            else
+                return OpenResponse.Ok(Reponse.Failed("接口调用失败!"));
+        }
+
+        /// <summary>
+        /// 服务工单退回反馈接口--已完成-----1
+        /// </summary>
+        /// <param name="receiveBackResult">退回反馈</param>
+        /// <returns></returns>
+        [HttpPost("get_case_back_result")]
+        [AllowAnonymous]
+        public async Task<OpenResponse> GetCaseBackResult([FromBody] GetCaseBackResultRequest receiveBackResult)
+        {
+            // 验证
+            if (receiveBackResult is null || receiveBackResult.paras is null)
+                return OpenResponse.Ok(Reponse.Failed("数据解析失败"));
+
+            //验证接收的数据是否正确
+            string strResult = receiveBackResult.paras.Validate();
+            if (!string.IsNullOrEmpty(strResult))
+                OpenResponse.Ok(Reponse.Failed(strResult));
+
+            //转换数据
+            var dto = _mapper.Map<DsGetCaseBackResult>(receiveBackResult.paras);
+
+            var data = await _getCaseBackApplyRepository.GetAsync(p => p.CaseSerial == dto.CaseSerial);
+            if (data == null)
+                return OpenResponse.Ok(Reponse.Failed("接口调用失败!"));
+
+            //添加数据
+            var id = await _getCaseBackResultRepository.AddAsync(dto, HttpContext.RequestAborted);
+
+            if (!string.IsNullOrEmpty(id))
+            {
+                await _mediator.Send(new OrderSendBackResultNotify
+                {
+                    OrderSendBackResultDto = new OrderSendBackResultDto()
+                    {
+                        Id = data.OrderSendBackId,
+                        Reason = dto.BackReason,
+                        Result = dto.Result == true ? 1 : 0
+                    }
+                });
+                return OpenResponse.Ok(Reponse.Success("您已成功提交数据!"));
+            }
+            else
+                return OpenResponse.Ok(Reponse.Failed("接口调用失败!"));
+        }
+
+        /// <summary>
+        /// 督办工单派发接口--已完成-----1
+        /// </summary>
+        /// <param name="receiveSendSuperviseInfo">督办工单对象</param>
+        /// <returns></returns>
+        [HttpPost("send_supervise_info")]
+        [AllowAnonymous]
+        public async Task<OpenResponse> SendSuperviseInfo([FromBody] SendSuperviseInfoRequest receiveSendSuperviseInfo)
+        {
+            // 验证
+            if (receiveSendSuperviseInfo is null || receiveSendSuperviseInfo.paras is null)
+                return OpenResponse.Ok(Reponse.Failed("数据解析失败"));
+
+            string strResult = receiveSendSuperviseInfo.paras.Validate();
+            if (!string.IsNullOrEmpty(strResult))
+                return OpenResponse.Ok(Reponse.Failed(strResult));
+
+            //转换数据
+            var dto = _mapper.Map<DsSendSuperviseInfo>(receiveSendSuperviseInfo.paras);
+
+            //添加数据
+            var id = await _sendSuperviseInfoRepository.AddAsync(dto, HttpContext.RequestAborted);
+
+            if (!string.IsNullOrEmpty(id))
+            {
+                //向业务系统推送消息
+                await _mediator.Send(new ProvinceOrderSuperviseNotify { ProvinceOrderSuperviseDto = _mapper.Map<ProvinceOrderSuperviseDto>(dto) });
+                return OpenResponse.Ok(Reponse.Success("您已成功提交数据!"));
+
+            }
+            else
+                return OpenResponse.Ok(Reponse.Failed("接口调用失败!"));
+        }
+
+        /// <summary>
+        /// 服务工单催单接口--已完成-----1
+        /// </summary>
+        /// <param name="receiveRemindCaseInfo">催单对象</param>
+        /// <returns></returns>
+        [HttpPost("remind_case_info")]
+        [AllowAnonymous]
+        public async Task<OpenResponse> RemindCaseInfo([FromBody] RemindCaseInfoRequest receiveRemindCaseInfo)
+        {
+            // 验证
+            if (receiveRemindCaseInfo is null || receiveRemindCaseInfo.paras is null)
+                return OpenResponse.Ok(Reponse.Failed("数据解析失败"));
+
+            string strResult = receiveRemindCaseInfo.paras.Validate();
+            if (!string.IsNullOrEmpty(strResult))
+                return OpenResponse.Ok(Reponse.Failed(strResult));
+
+            //转换数据
+            var dto = _mapper.Map<DsRemindCaseInfo>(receiveRemindCaseInfo.paras);
+            dto.Direction = "2";
+            //添加数据
+            var id = await _remindCaseInfoRepository.AddAsync(dto, HttpContext.RequestAborted);
+
+            if (!string.IsNullOrEmpty(id))
+            {
+                //向业务系统推送消息
+                await _mediator.Send(new ProvinceOrderUrgeNotify { ProvinceOrderUrgeDto = _mapper.Map<ProvinceOrderUrgeDto>(dto) });
+
+                return OpenResponse.Ok(Reponse.Success("您已成功提交数据!"));
+            }
+            else
+                return OpenResponse.Ok(Reponse.Failed("接口调用失败!"));
+        }
+
+        /// <summary>
+        /// 服务工单甄别结果接口--已完成-----1
+        /// </summary>
+        /// <param name="receiveScreenCaseResultReceive">服务工单甄别结果对象</param>
+        /// <returns></returns>
+        [HttpPost("screen_case_result_receive")]
+        [AllowAnonymous]
+        public async Task<OpenResponse> ScreenCaseResultReceive([FromBody] ScreenCaseResultReceiveRequest receiveScreenCaseResultReceive)
+        {
+            // 验证
+            if (receiveScreenCaseResultReceive is null || receiveScreenCaseResultReceive.paras is null)
+                return OpenResponse.Ok(Reponse.Failed("数据解析失败"));
+
+            string strResult = receiveScreenCaseResultReceive.paras.Validate();
+            if (!string.IsNullOrEmpty(strResult))
+                return OpenResponse.Ok(Reponse.Failed(strResult));
+
+            //转换数据
+            var dto = _mapper.Map<DsScreenCaseResultReceive>(receiveScreenCaseResultReceive.paras);
+
+            //添加数据
+            var id = await _screenCaseResultReceiveRepository.AddAsync(dto, HttpContext.RequestAborted);
+
+            if (!string.IsNullOrEmpty(id))
+            {
+                await _mediator.Send(new ScreenProvinceResultNotify { ProvinceScreenResult = _mapper.Map<ProvinceScreenResult>(dto) });
+
+                return OpenResponse.Ok(Reponse.Success("您已成功提交数据!"));
+            }
+            else
+                return OpenResponse.Ok(Reponse.Failed("接口调用失败!"));
+        }
+
+        /// <summary>
+        /// 服务工单延时审核结果接口---已完成-----1
+        /// </summary>
+        /// <param name="receiveDelayCaseResult">延时审核结果对象</param>
+        /// <returns></returns>
+        [HttpPost("delay_case_result_receive")]
+        [AllowAnonymous]
+        public async Task<OpenResponse> DelayCaseResultReceive([FromBody] DelayCaseResultRequest receiveDelayCaseResult)
+        {
+            // 验证
+            if (receiveDelayCaseResult is null || receiveDelayCaseResult.paras is null)
+                return OpenResponse.Ok(Reponse.Failed("数据解析失败"));
+
+            string strResult = receiveDelayCaseResult.paras.Validate();
+            if (!string.IsNullOrEmpty(strResult))
+                return OpenResponse.Ok(Reponse.Failed(strResult));
+
+            //转换数据
+            var dto = _mapper.Map<DsDelayCaseResult>(receiveDelayCaseResult.paras);
+
+            //添加数据
+            var id = await _delayCaseResultRepository.AddAsync(dto, HttpContext.RequestAborted);
+
+            if (!string.IsNullOrEmpty(id))
+            {
+                //向业务系统推送消息
+                await _mediator.Send(new DelayProvinceResultNotify { IsPass = dto.AuditResult == "1", Opinion = dto.AuditOpinion, No = dto.CaseSerial }, HttpContext.RequestAborted);
+                return OpenResponse.Ok(Reponse.Success("您已成功提交数据!"));
+            }
+            else
+                return OpenResponse.Ok(Reponse.Failed("接口调用失败!"));
+        }
+
+        /// <summary>
+        /// 服务工单交办补充诉求接口
+        /// </summary>
+        /// <param name="receiveSupplyCaseInfo">交办补充诉求对象</param>
+        /// <returns></returns>
+        [HttpPost("supply_case_info_receive")]
+        [AllowAnonymous]
+        public async Task<OpenResponse> SupplyCaseInfoReceive([FromBody] SupplyCaseInfoRequest receiveSupplyCaseInfo)
+        {
+            // 验证
+            if (receiveSupplyCaseInfo is null || receiveSupplyCaseInfo.paras is null)
+                return OpenResponse.Ok(Reponse.Failed("数据解析失败"));
+
+            string strResult = receiveSupplyCaseInfo.paras.Validate();
+            if (!string.IsNullOrEmpty(strResult))
+                return OpenResponse.Ok(Reponse.Failed(strResult));
+
+            //转换数据
+            var dto = _mapper.Map<DsSupplyCaseInfo>(receiveSupplyCaseInfo.paras);
+
+            //添加数据
+            var id = await _supplyCaseInfoRepository.AddAsync(dto, HttpContext.RequestAborted);
+
+
+            if (!string.IsNullOrEmpty(id))
+            {
+                //向业务系统推送消息
+                //await _capPublisher.PublishAsync(Sharing.Share.Mq.EventNames.SharingOrderSupplements, _mapper.Map<SupplementsDto>(dto), cancellationToken: HttpContext.RequestAborted);
+                return OpenResponse.Ok(Reponse.Success("您已成功提交数据!"));
+
+            }
+            else
+                return OpenResponse.Ok(Reponse.Failed("接口调用失败!"));
+        }
+
+        /// <summary>
+        /// 服务工单撤单接口
+        /// </summary>
+        /// <param name="receiveRevokeCaseInfo">撤单对象</param>
+        /// <returns></returns>
+        [HttpPost("revoke_case_info")]
+        [AllowAnonymous]
+        public async Task<OpenResponse> RevokeCaseInfo([FromBody] RevokeCaseInfoRequest receiveRevokeCaseInfo)
+        {
+            // 验证
+            if (receiveRevokeCaseInfo is null || receiveRevokeCaseInfo.paras is null)
+                return OpenResponse.Ok(Reponse.Failed("数据解析失败"));
+
+            string strResult = receiveRevokeCaseInfo.paras.Validate();
+            if (!string.IsNullOrEmpty(strResult))
+                return OpenResponse.Ok(Reponse.Failed(strResult));
+
+            //转换数据
+            var dto = _mapper.Map<DsRevokeCaseInfo>(receiveRevokeCaseInfo.paras);
+            dto.Direction = "2";
+            //添加数据
+            var id = await _revokeCaseInfoRepository.AddAsync(dto, HttpContext.RequestAborted);
+
+            if (!string.IsNullOrEmpty(id))
+            {
+                //向业务系统推送消息
+                //  await _capPublisher.PublishAsync(Sharing.Share.Mq.EventNames.SharingOrderRevoke, _mapper.Map<RevokeDto>(dto), cancellationToken: HttpContext.RequestAborted);
+                return OpenResponse.Ok(Reponse.Success("您已成功提交数据!"));
+            }
+            else
+                return OpenResponse.Ok(Reponse.Failed("接口调用失败!"));
+        }
+
+        /// <summary>
+        /// 服务工单预警接口
+        /// </summary>
+        /// <param name="receiveSendWarnInfo">预警对象</param>
+        /// <returns></returns>
+        [HttpPost("send_warn_info")]
+        [AllowAnonymous]
+        public async Task<OpenResponse> SendWarnInfo([FromBody] SendWarnInfoRequest receiveSendWarnInfo)
+        {
+            // 验证
+            if (receiveSendWarnInfo is null || receiveSendWarnInfo.paras is null)
+                return OpenResponse.Ok(Reponse.Failed("数据解析失败"));
+
+            string strResult = receiveSendWarnInfo.paras.Validate();
+            if (!string.IsNullOrEmpty(strResult))
+                return OpenResponse.Ok(Reponse.Failed(strResult));
+
+            //转换数据
+            var dto = _mapper.Map<DsSendWarnInfo>(receiveSendWarnInfo.paras);
+
+            //添加数据
+            var id = await _sendWarnInfoRepository.AddAsync(dto, HttpContext.RequestAborted);
+
+            if (!string.IsNullOrEmpty(id))
+            {
+                //向业务系统推送消息
+                //await _capPublisher.PublishAsync(Sharing.Share.Mq.EventNames.SharingOrderWarning, _mapper.Map<WarningDto>(dto), cancellationToken: HttpContext.RequestAborted);
+                return OpenResponse.Ok(Reponse.Success("您已成功提交数据!"));
+            }
+            else
+                return OpenResponse.Ok(Reponse.Failed("接口调用失败!"));
+        }
+
+        /// <summary>
+        /// 交办工单满意度接收接口
+        /// </summary>
+        /// <param name="receiveSendCaseEvlResult">交办工单满意度对象</param>
+        /// <returns></returns>
+        [HttpPost("send_case_evl_result")]
+        [AllowAnonymous]
+        public async Task<OpenResponse> SendCaseEvlResult([FromBody] SendCaseEvlResultRequest receiveSendCaseEvlResult)
+        {
+            // 验证
+            if (receiveSendCaseEvlResult is null || receiveSendCaseEvlResult.paras is null)
+                return OpenResponse.Ok(Reponse.Failed("数据解析失败"));
+
+            string strResult = receiveSendCaseEvlResult.paras.Validate();
+            if (!string.IsNullOrEmpty(strResult))
+                return OpenResponse.Ok(Reponse.Failed(strResult));
+
+            //转换数据
+            var dto = _mapper.Map<DsSendCaseEvlResult>(receiveSendCaseEvlResult.paras);
+
+            //添加数据
+            var id = await _sendCaseEvlResultRepository.AddAsync(dto, HttpContext.RequestAborted);
+
+            if (!string.IsNullOrEmpty(id))
+            {
+                //向业务系统推送消息
+                //await _capPublisher.PublishAsync(Sharing.Share.Mq.EventNames.SharingOrderEvlResult, _mapper.Map<EvlResultDto>(dto), cancellationToken: HttpContext.RequestAborted);
+                return OpenResponse.Ok(Reponse.Success("您已成功提交数据!"));
+            }
+            else
+                return OpenResponse.Ok(Reponse.Failed("接口调用失败!"));
+        }
+
+        /// <summary>
+        /// 上报工单处理结果/退回接口
+        /// </summary>
+        /// <param name="receiveGetCaseReultSend">上报工单处理结果/退回对象</param>
+        /// <returns></returns>
+        [HttpPost]
+        [Route("get_case_result_send")]
+        public async Task<OpenResponse> GetCaseReultSend([FromBody] GetCaseReultSendRequest receiveGetCaseReultSend)
+        {
+            // 验证
+            if (receiveGetCaseReultSend is null || receiveGetCaseReultSend.paras is null)
+                return OpenResponse.Ok(Reponse.Failed("数据解析失败"));
+
+            string strResult = receiveGetCaseReultSend.paras.Validate();
+            if (!string.IsNullOrEmpty(strResult))
+                return OpenResponse.Ok(Reponse.Failed(strResult));
+
+            //转换数据
+            var dto = _mapper.Map<DsGetCaseReultSend>(receiveGetCaseReultSend.paras);
+
+            //添加数据
+            var id = await _getCaseReultSendRepository.AddAsync(dto, HttpContext.RequestAborted);
+
+            if (!string.IsNullOrEmpty(id))
+            {
+                //查询此工单
+                var tempData = await _sendCaseInfoRepository.GetAsync(p => p.CaseSerial == dto.CaseSerial, HttpContext.RequestAborted);
+                if (tempData != null)
+                {
+                    //将工单的办理状态改为办理完成,终止拉取办理信息
+                    tempData.IsEnd = true;
+                    await _sendCaseInfoRepository.UpdateAsync(tempData, HttpContext.RequestAborted);
+                }
+                //向业务系统推送消息
+                //await _capPublisher.PublishAsync(Sharing.Share.Mq.EventNames.SharingOrderReultSend, _mapper.Map<ReultSendDto>(dto), cancellationToken: HttpContext.RequestAborted);
+                return OpenResponse.Ok(Reponse.Success("您已成功提交数据!"));
+            }
+            else
+                return OpenResponse.Ok(Reponse.Failed("接口调用失败!"));
+        }
+
+        /// <summary>
+        /// 上报工单评价接口
+        /// </summary>
+        /// <param name="receiveGetVisitInfoSend">上报工单评价对象</param>
+        /// <returns></returns>
+        [HttpPost]
+        [Route("get_visit_info_send")]
+        [AllowAnonymous]
+        public async Task<OpenResponse> GetVisitInfoSend([FromBody] GetVisitInfoSendRequest receiveGetVisitInfoSend)
+        {
+            // 验证
+            if (receiveGetVisitInfoSend is null || receiveGetVisitInfoSend.paras is null)
+                return OpenResponse.Ok(Reponse.Failed("数据解析失败"));
+
+            string strResult = receiveGetVisitInfoSend.paras.Validate();
+            if (!string.IsNullOrEmpty(strResult))
+                return OpenResponse.Ok(Reponse.Failed(strResult));
+
+            //转换数据
+            var dto = _mapper.Map<DsGetVisitInfoSend>(receiveGetVisitInfoSend.paras);
+
+            //添加数据
+            var id = await _getVisitInfoSendRepository.AddAsync(dto, HttpContext.RequestAborted);
+
+            if (!string.IsNullOrEmpty(id))
+            {
+                //向业务系统推送消息
+                // await _capPublisher.PublishAsync(Sharing.Share.Mq.EventNames.SharingOrderVisitInfo, _mapper.Map<VisitInfoDto>(dto), cancellationToken: HttpContext.RequestAborted);
+                return OpenResponse.Ok(Reponse.Success("您已成功提交数据!"));
+            }
+            else
+                return OpenResponse.Ok(Reponse.Failed("接口调用失败!"));
+        }
+
+        /// <summary>
+        /// 服务工单拓展信息交办---已完成-----1
+        /// </summary>
+        /// <param name="receiveCaseExtendsRequest">服务工单拓展信息交办</param>
+        /// <returns></returns>
+        [HttpPost]
+        [Route("rest/receive_case_extends")]
+        [AllowAnonymous]
+        public async Task<OpenResponse> ReceiveCaseExtends([FromBody] ReceiveCaseExtendsRequest receiveCaseExtendsRequest)
+        {
+            // 验证
+            if (receiveCaseExtendsRequest is null || receiveCaseExtendsRequest.paras is null)
+                return OpenResponse.Ok(Reponse.Failed("数据解析失败"));
+
+            string strResult = receiveCaseExtendsRequest.paras.Validate();
+            if (!string.IsNullOrEmpty(strResult))
+                return OpenResponse.Ok(Reponse.Failed(strResult));
+
+            var data = receiveCaseExtendsRequest.paras;
+
+            //扩展主表信息
+            DsReceiveCaseExtends receiveCaseExtends = new()
+            {
+                CaseSerial = data.CaseSerial,
+                FormType = data.FormType,
+                SyncState = "1",
+                Direction = "2"
+            };
+            var id = await _receiveCaseExtendsRepository.AddAsync(receiveCaseExtends, HttpContext.RequestAborted);
+            if (!string.IsNullOrEmpty(id))
+                return OpenResponse.Ok(Reponse.Failed("数据提交失败"));
+
+            OrderExtensionDto orderExtension = new()
+            {
+                ProvinceNo = data.CaseSerial,
+                OrderTypeCode = data.FormType.ToLower()
+            };
+            //扩展信息写入
+            switch (data.FormType.ToLower())
+            {
+                case "yl"://医疗表单
+                    //转换数据
+                    var dtoyl = _mapper.Map<DsFormMedical>(data.FormMedical);
+                    dtoyl.RCEId = id;
+                    //添加数据
+                    await _formMedicalRepository.AddAsync(dtoyl, HttpContext.RequestAborted);
+                    orderExtension = _mapper.Map<OrderExtensionDto>(dtoyl);
+                    orderExtension.OrderType = "医疗服务中心受理单";
+                    break;
+                case "zwfw"://四川政务服务网技术工单
+                    //转换数据
+                    var dtozwfw = _mapper.Map<DsFormNetWorktec>(data.FormNetWorktec);
+                    dtozwfw.RCEId = id;
+                    //添加数据
+                    await _formNetWorktecRepository.AddAsync(dtozwfw, HttpContext.RequestAborted);
+                    orderExtension = _mapper.Map<OrderExtensionDto>(dtozwfw);
+                    orderExtension.OrderType = "四川政务服务网技术中心受理单";
+                    break;
+                case "th"://电视购物及商铺购买退换货工单
+                    //转换数据
+                    var dtoth = _mapper.Map<DsFormReturnexChange>(data.FormReturnexChange);
+                    dtoth.RCEId = id;
+                    //添加数据
+                    await _formReturnexChangeRepository.AddAsync(dtoth, HttpContext.RequestAborted);
+                    orderExtension = _mapper.Map<OrderExtensionDto>(dtoth);
+                    orderExtension.OrderType = "电视购物及商铺购买退换货中心受理单";
+                    break;
+                case "gsgl"://高速公路工单
+                    //转换数据
+                    var dtogsgl = _mapper.Map<DsFormExpressWay>(data.FormExpressWay);
+                    dtogsgl.RCEId = id;
+                    //添加数据
+                    await _formExpressWayRepository.AddAsync(dtogsgl, HttpContext.RequestAborted);
+                    orderExtension = _mapper.Map<OrderExtensionDto>(dtogsgl);
+                    orderExtension.OrderType = "高速公路投诉中心受理单";
+                    break;
+                case "xjgg"://电视台虚假广告工单
+                    //转换数据
+                    var dtoxjgg = _mapper.Map<DsFormShamPub>(data.FormShamPub);
+                    dtoxjgg.RCEId = id;
+                    //添加数据
+                    await _formShamPubRepository.AddAsync(dtoxjgg, HttpContext.RequestAborted);
+                    orderExtension = _mapper.Map<OrderExtensionDto>(dtoxjgg);
+                    orderExtension.OrderType = "电视台虚假广告中心受理单";
+                    break;
+                case "swfwsq"://12366热线诉求交办
+                    //转换数据
+                    var dtoswfwsq = _mapper.Map<DsFormTaxationComplaint>(data.FormTaxationComplaint);
+                    dtoswfwsq.RCEId = id;
+                    //添加数据
+                    await _formTaxationComplaintRepository.AddAsync(dtoswfwsq, HttpContext.RequestAborted);
+                    orderExtension = _mapper.Map<OrderExtensionDto>(dtoswfwsq);
+                    orderExtension.OrderType = "四川省12366热线诉求交办单";
+                    break;
+                case "swfwzx"://12366热线咨询交办
+                    //转换数据
+                    var dtoswfwzx = _mapper.Map<DsFormTaxationConsulting>(data.FormTaxationConsulting);
+                    dtoswfwzx.RCEId = id;
+                    //添加数据
+                    await _formTaxationConsultingRepository.AddAsync(dtoswfwzx, HttpContext.RequestAborted);
+                    orderExtension = _mapper.Map<OrderExtensionDto>(dtoswfwzx);
+                    orderExtension.OrderType = "四川省12366热线咨询交办单";
+                    break;
+                case "jtfwjd"://12328服务监督
+                    //转换数据
+                    var dtojtfwjd = _mapper.Map<DsFormTraffic>(data.FormTraffic);
+                    dtojtfwjd.RCEId = id;
+                    //添加数据
+                    await _formTrafficRepository.AddAsync(dtojtfwjd, HttpContext.RequestAborted);
+                    orderExtension = _mapper.Map<OrderExtensionDto>(dtojtfwjd);
+                    orderExtension.OrderType = "12328服务监督中心受理单";
+                    break;
+                case "yzxf"://邮政业消费者申诉
+                    //转换数据
+                    var dtoyzxf = _mapper.Map<DsFormPost>(data.FormPost);
+                    dtoyzxf.RCEId = id;
+                    //添加数据
+                    await _formPostRepository.AddAsync(dtoyzxf, HttpContext.RequestAborted);
+                    orderExtension = _mapper.Map<OrderExtensionDto>(dtoyzxf);
+                    orderExtension.OrderType = "邮政业消费者申诉受理单";
+                    break;
+                case "hbjb"://环保举报业务
+                    //转换数据
+                    var dtohbjb = _mapper.Map<DsFormEnvironMent>(data.FormEnvironMent);
+                    dtohbjb.RCEId = id;
+                    //添加数据
+                    await _formEnvironMentRepository.AddAsync(dtohbjb, HttpContext.RequestAborted);
+                    orderExtension = _mapper.Map<OrderExtensionDto>(dtohbjb);
+                    orderExtension.OrderType = "环保举报业务受理单";
+                    break;
+                case "scjgj"://12315个性化表单
+                    break;
+                default:
+                    break;
+            }
+
+            if (!string.IsNullOrEmpty(id))
+            {
+                //向业务系统推送消息
+                await _mediator.Send(new ReceiveOrderExtensionNotify { OrderExtensionDto = orderExtension });
+
+                return OpenResponse.Ok(Reponse.Success("您已成功提交数据!"));
+
+            }
+            else
+                return OpenResponse.Ok(Reponse.Failed("接口调用失败!"));
+        }
+
+        /// <summary>
+        /// 服务工单材料接口
+        /// </summary>
+        /// <param name="params">工单材料信息</param>
+        /// <param name="files">材料文件</param>
+        /// <returns></returns>
+        [HttpPost]
+        [Route("get_case_material_info")]
+        [AllowAnonymous]
+        public async Task<OpenResponse> GetCaseMaterialInfo(string @params, List<IFormFile> files)
+        {
+            // 上传文件为必须
+            if (files is null || files.Count <= 0)
+            {
+                return OpenResponse.Ok(Reponse.Failed("上传文件为必须"));
+            }
+
+            // 解析附件信息
+            var vmCaseMaterialInfo = Newtonsoft.Json.JsonConvert.DeserializeObject<GetCaseMaterialInfoRequest>(@params);
+            if (vmCaseMaterialInfo is null || vmCaseMaterialInfo.paras is null)
+            {
+                return OpenResponse.Ok(Reponse.Failed("数据解析失败"));
+            }
+            GetCaseMaterialInfoModel tmpCaseMaterialInfo = vmCaseMaterialInfo.paras;
+
+            // 验证
+            string strResult = tmpCaseMaterialInfo.Validate();
+            if (false == string.IsNullOrEmpty(strResult))
+            {
+                return OpenResponse.Ok(Reponse.Failed(strResult));
+            }
+
+            // 文件列表
+            foreach (var file in files)
+            {
+                // 文件内容字节数据
+                using var memoryStream = new MemoryStream();
+                await file.CopyToAsync(memoryStream);
+                memoryStream.Seek(0, SeekOrigin.Begin);
+                byte[] fileContentBytes = memoryStream.ToArray();
+
+                //这里需要上文件服务器上传
+                var Additions = await SendFileData(fileContentBytes);
+
+                // 新增文件到列表
+                var materialInfo = new DsGetCaseMaterialInfo()
+                {
+                    CaseSerial = tmpCaseMaterialInfo.CaseSerial,
+                    MaterialType = tmpCaseMaterialInfo.MaterialType,
+                    CliengGuid = tmpCaseMaterialInfo.CliengGuid,
+                    AreaCode = tmpCaseMaterialInfo.AreaCode,
+                    FileName = file.FileName,
+                    FileSize = file.Length,
+                    Additions = Additions,
+                    Direction = "2",
+                    SyncState = "1"
+                };
+                await _getCaseMaterialInfoRepository.AddAsync(materialInfo, HttpContext.RequestAborted);
+                //向业务系统推送消息
+                //  await _capPublisher.PublishAsync(Sharing.Share.Mq.EventNames.SharingFileData, _mapper.Map<FileDto>(materialInfo), cancellationToken: HttpContext.RequestAborted);
+            }
+
+            return OpenResponse.Ok(Reponse.Success("您已成功提交数据!"));
+        }
+
+        //还需要将附件上传到业务服务器
+
+        /// <summary>
+        /// 将文件流上传到附件服务器
+        /// </summary>
+        /// <param name="fileContentBytes"></param>
+        /// <returns></returns>
+        private async Task<string> SendFileData(byte[] fileContentBytes)
+        {
+            return "";
+        }
+    }
+}

+ 493 - 0
src/Hotline.Api/Controllers/DataSharing/WebPortalController.cs

@@ -0,0 +1,493 @@
+using Fw.Utility.UnifyResponse;
+using Hotline.DataSharing.Order;
+using Hotline.DataSharing.Province.Notifications;
+using Hotline.DataSharing.WebPortal;
+using Hotline.Share.Dtos;
+using Hotline.Share.Dtos.DataSharing.WebPortal;
+using Hotline.Share.Dtos.Order;
+using Hotline.Share.Enums.DataSharing;
+using Hotline.Share.Enums.Order;
+using MapsterMapper;
+using MediatR;
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Mvc;
+using MongoDB.Driver.Linq;
+using Sharing.Share.Dtos.DataSharing.WebPortal;
+using SqlSugar;
+using XF.Domain.Filters;
+using XF.Domain.Repository;
+
+namespace Hotline.Api.Controllers.DataSharing
+{
+    /// <summary>
+    /// 门户网站数据获取
+    /// </summary>
+    public class WebPortalController : BaseController
+    {
+        private readonly IMapper _mapper;
+        private readonly IMediator _mediator;
+        private readonly IRepository<DsBulletin> _bulletinRepository;
+        private readonly IRepository<DsOrder> _dataOrderRepository;
+        private readonly IRepository<DsWebFlowAccept> _webFlowAcceptRepository;
+        private readonly IRepository<DsWebUserRegister> _webUserRegisterRepository;
+        private readonly IRepository<DsWebUserAuth> _webUserAuthRepository;
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="mapper"></param>
+        /// <param name="mediator"></param>
+        /// <param name="bulletinRepository"></param>
+        /// <param name="dataOrderRepository"></param>
+        /// <param name="webFlowAcceptRepository"></param>
+        /// <param name="webUserRegisterRepository"></param>
+        /// <param name="webUserAuthRepository"></param>
+        public WebPortalController(IMapper mapper, IMediator mediator,
+            IRepository<DsBulletin> bulletinRepository,
+               IRepository<DsOrder> dataOrderRepository,
+            IRepository<DsWebFlowAccept> webFlowAcceptRepository,
+              IRepository<DsWebUserRegister> webUserRegisterRepository,
+            IRepository<DsWebUserAuth> webUserAuthRepository)
+        {
+            _mapper = mapper;
+            _mediator = mediator;
+            _bulletinRepository = bulletinRepository;
+            _dataOrderRepository = dataOrderRepository;
+            _webFlowAcceptRepository = webFlowAcceptRepository;
+            _webUserRegisterRepository = webUserRegisterRepository;
+            _webUserAuthRepository = webUserAuthRepository;
+
+        }
+
+        #region 通知
+        /// <summary>
+        /// 获取列表
+        /// </summary>
+        /// <returns></returns>
+        [AllowAnonymous]
+        [HttpPost("getarticlelist")]
+        public async Task<OpenResponse> GetArticleList([FromBody] QueryArticleListDto dto)
+        {
+            Kv kv = new() { Key = "2", Value = "门户网站" };
+            RefAsync<int> total = 0;
+            var items = await _bulletinRepository.Queryable()
+                .Where(p => p.LoseEfficacyTime >= DateTime.Now)
+                 .Where(p => p.PushRanges.Contains(new() { Key = "2", Value = "门户网站" }))
+                 .Where(p => p.BulletinTypeId == dto.NoticeType)
+                 .WhereIF(!string.IsNullOrEmpty(dto.Condition), p => p.Title.Contains(dto.Condition))
+                 .OrderByDescending(p => p.BulletinTime)
+                 .Select(it => new
+                 {
+                     Page = SqlFunc.MappingColumn(default(int), "  row_number()  over( order by 'NoticeCreateDate' desc ) "),
+                     NoticeID = it.Id,
+                     NoticeContent = it.Content,
+                     NoticeTypeName = it.BulletinTypeName,
+                     NoticeTitle = it.Title,
+                     NoticeBMName = it.SourceOrgName,
+                     NoticeCreateDate = it.BulletinTime,
+                     VideoUrl = "",
+                     WNLT_FullCode = ""
+                 })
+                .ToPageListAsync(dto.PageIndex, dto.PageSize, total);
+
+            //计算总页数
+            int nPageCount = Convert.ToInt32(Math.Ceiling(Convert.ToDouble(total) / dto.PageSize));
+            ArticleListDataDto dataDto = new()
+            {
+                PageCount = nPageCount,
+                data = _mapper.Map<IReadOnlyList<ArticleListDto>>(items)
+            };
+
+            return OpenResponse.Ok(WebPortalDeResponse<ArticleListDataDto>.Success(dataDto));
+        }
+
+        /// <summary>
+        /// 获取详情,修改阅读次数
+        /// </summary>
+        /// <param name="id"></param>
+        /// <returns></returns>
+        [AllowAnonymous]
+        [HttpPost("getarticledetails")]
+        public async Task<OpenResponse> GetArticleDetails(string id)
+        {
+            var data = await _bulletinRepository.GetAsync(p => p.Id == id, HttpContext.RequestAborted);
+
+            if (data != null)
+            {
+                data.ReadedNum = data.ReadedNum++;
+                await _bulletinRepository.UpdateAsync(data, HttpContext.RequestAborted);
+            }
+
+            ArticleDetailsDto detailsDto = new()
+            {
+                NoticeID = data.Id,
+                NoticeTypeName = data.BulletinTypeName,
+                NoticeTitle = data.Title,
+                NoticeBMName = data.SourceOrgName,
+                NoticeCreateDate = data.BulletinTime,
+                NoticeRCount = data.ReadedNum,
+                WNED_VideoUrl = "",
+                NoticeContent = data.Content
+            };
+
+            return OpenResponse.Ok(WebPortalDeResponse<ArticleDetailsDto>.Success(detailsDto));
+        }
+
+        /// <summary>
+        /// 上一条和下一条
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [AllowAnonymous]
+        [HttpPost("getpreviousandnext")]
+        public async Task<OpenResponse> GetPreviousAndNext([FromBody] ArticlePreviousAndNextDto dto)
+        {
+            var sugar = _bulletinRepository.Queryable()
+                .Where(p => p.LoseEfficacyTime >= DateTime.Now)
+                 .Where(p => p.PushRanges.Contains(new() { Key = "2", Value = "门户网站" }));
+            if (dto.FullSearch == "1")//全文搜索
+            {
+                sugar.Where(p => p.BulletinTypeId == "1" || p.BulletinTypeId == "5" || p.BulletinTypeId == "6" || p.BulletinTypeId == "7" || p.BulletinTypeId == "3")
+                    .WhereIF(!string.IsNullOrEmpty(dto.Condition), p => p.Content.Contains(dto.Condition) || p.Title.Contains(dto.Condition));
+            }
+            else//指定分类
+            {
+                sugar.WhereIF(!string.IsNullOrEmpty(dto.Condition), p => p.Title.Contains(dto.Condition))
+                    .Where(p => p.BulletinTypeId == dto.NoticeTypeId);
+            }
+
+            var list = await sugar.OrderByDescending(p => p.BulletinTime)
+                .Select(it => new
+                {
+                    Page = SqlFunc.MappingColumn(default(int), "  row_number()  over( order by 'NoticeCreateDate' desc ) "),
+                    NoticeID = it.Id,
+                    NoticeTitle = it.Title,
+                    NoticeCreateDate = it.BulletinTime
+                })
+                .ToListAsync();
+            //数据为空返回空数据
+            if (list == null || list.Count == 0)
+                return OpenResponse.Ok(WebPortalDeResponse<List<ArticlePreviousAndNextDataDto>>.Success(null));
+            else
+            {
+                var temp = list.Find(p => p.NoticeID == dto.ID);
+                if (temp != null)
+                {
+                    List<ArticlePreviousAndNextDataDto> returnDto = new();
+                    //上一条
+                    var pTemp = list.Find(p => p.Page == temp.Page - 1);
+                    if (pTemp != null)
+
+                        returnDto.Add(new()
+                        {
+                            NoticeID = pTemp.NoticeID,
+                            NoticeTitle = pTemp.NoticeTitle,
+                            pntype = "p"
+                        });
+
+                    //下一条
+                    var nTemp = list.Find(p => p.Page == temp.Page + 1);
+                    if (nTemp != null)
+                        returnDto.Add(new()
+                        {
+                            NoticeID = nTemp.NoticeID,
+                            NoticeTitle = nTemp.NoticeTitle,
+                            pntype = "n"
+                        });
+                    return OpenResponse.Ok(WebPortalDeResponse<List<ArticlePreviousAndNextDataDto>>.Success(returnDto));
+                }
+                else
+                    return OpenResponse.Ok(WebPortalDeResponse<List<ArticlePreviousAndNextDataDto>>.Success(null));
+            }
+        }
+
+        /// <summary>
+        /// 全文检索
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [AllowAnonymous]
+        [HttpPost("getfulltextsearchlist")]
+        public async Task<OpenResponse> GetFullTextSearchList([FromBody] QueryArticleListDto dto)
+        {
+            if (string.IsNullOrEmpty(dto.Condition))
+                return OpenResponse.Ok(WebPortalDeResponse<FullTextSearchListDataDto>.Success(null));
+
+            RefAsync<int> total = 0;
+            var items = await _bulletinRepository.Queryable()
+                .Where(p => p.LoseEfficacyTime >= DateTime.Now)
+                 .Where(p => p.PushRanges.Contains(new() { Key = "2", Value = "门户网站" }))
+                 .Where(p => p.BulletinTypeId == "1" || p.BulletinTypeId == "5" || p.BulletinTypeId == "6" || p.BulletinTypeId == "7" || p.BulletinTypeId == "3")
+                 .WhereIF(!string.IsNullOrEmpty(dto.Condition), p => p.Title.Contains(dto.Condition))
+                 .OrderByDescending(p => p.BulletinTime)
+                 .Select(it => new
+                 {
+                     Page = SqlFunc.MappingColumn(default(int), "  row_number()  over( order by 'NoticeCreateDate' desc ) "),
+                     NoticeID = it.Id,
+                     Content = it.Content,
+                     NoticeTypeID = it.BulletinTypeId,
+                     NoticeTypeName = it.BulletinTypeName,
+                     NoticeTitle = it.Title,
+                     NoticeBMName = it.SourceOrgName,
+                     NoticeCreateDate = it.BulletinTime,
+                     TypeCode = "",
+                 })
+                .ToPageListAsync(dto.PageIndex, dto.PageSize, total);
+
+            //计算总页数
+            int nPageCount = Convert.ToInt32(Math.Ceiling(Convert.ToDouble(total) / dto.PageSize));
+            FullTextSearchListDataDto dataDto = new()
+            {
+                PageCount = nPageCount,
+                data = _mapper.Map<IReadOnlyList<FullTextSearchListDto>>(items)
+            };
+            return OpenResponse.Ok(WebPortalDeResponse<FullTextSearchListDataDto>.Success(dataDto));
+        }
+
+        #endregion
+
+        #region 办件
+        /// <summary>
+        /// 办件摘编列表数据
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpPost("GetOrderList")]
+        [AllowAnonymous]
+        public async Task<OpenResponse> GetOrderList([FromBody] QueryOrderListDto dto)
+        {
+            RefAsync<int> total = 0;
+            var items = await _dataOrderRepository.Queryable()
+                .Where(p => p.IsPublish == EDsPublishState.Open)
+                .Where(p => p.HandleState == "办理完成")
+                .WhereIF(!string.IsNullOrEmpty(dto.FlowCode), d => d.OrderNo == dto.FlowCode)
+                .WhereIF(!string.IsNullOrEmpty(dto.FlowName), d => d.Title.Contains(dto.FlowName))
+                .WhereIF(!string.IsNullOrEmpty(dto.FlowSType), d => d.CaseTypeCode == dto.FlowSType)
+                .WhereIF(!string.IsNullOrEmpty(dto.FlowRType), d => d.HotspotId == dto.FlowRType)
+                .WhereIF(!string.IsNullOrEmpty(dto.FlowSDate), d => d.CaseDate >= DateTime.Parse(DateTime.Parse(dto.FlowSDate).ToString("yyyy-MM-dd 00:00:00")))//dto.FlowSDate
+                .WhereIF(!string.IsNullOrEmpty(dto.FlowEDate), d => d.CaseDate <= DateTime.Parse(DateTime.Parse(dto.FlowEDate).ToString("yyyy-MM-dd 00:00:00")))// dto.FlowEDate
+                .WhereIF(!string.IsNullOrEmpty(dto.FlowFrom), d => d.FromName.Contains(dto.FlowFrom))
+                .OrderByDescending(p => p.PublishDate)
+                .ToPageListAsync(dto.PageIndex, dto.PageSize, total);
+
+            //计算总页数
+            int nPageCount = Convert.ToInt32(Math.Ceiling(Convert.ToDouble(total) / dto.PageSize));
+            OrderListReturnDto returnDto = new()
+            {
+                PageNum = dto.PageIndex,
+                PageCount = nPageCount,
+                Data = _mapper.Map<IReadOnlyList<OrderListDto>>(items)
+            };
+
+            return OpenResponse.Ok(WebPortalDeResponse<OrderListReturnDto>.Success(returnDto, "成功"));
+        }
+
+        /// <summary>
+        /// 办件摘编详情
+        /// </summary>
+        /// <param name="id"></param>
+        /// <returns></returns>
+        [AllowAnonymous]
+        [HttpPost("getorderdetailbyid")]
+        public async Task<OpenResponse> GetOrderDetailById(string id)
+        {
+            var data = await _dataOrderRepository.GetAsync(p => p.OrderId == id);
+
+            var orderDetail = _mapper.Map<OrderDetail>(data);
+            return OpenResponse.Ok(WebPortalDeResponse<OrderDetail>.Success(orderDetail));
+        }
+
+        /// <summary>
+        /// 根据编号和密码查询信件ID
+        /// </summary>
+        /// <param name="OrderNo"></param>
+        /// <param name="Pwd"></param>
+        /// <returns></returns>
+        [AllowAnonymous]
+        [HttpPost("getorderid")]
+        public async Task<OpenResponse> GetOrderId(string OrderNo, string Pwd)
+        {
+            var data = await _dataOrderRepository.GetAsync(p => p.OrderNo == OrderNo && p.Password == Pwd);
+
+            return OpenResponse.Ok(WebPortalDeResponse<string>.Success(data?.OrderId));
+        }
+
+        /// <summary>
+        /// 写信接口
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [AllowAnonymous]
+        [HttpPost("orderacceptance")]
+        public async Task<OpenResponse> OrderAcceptance([FromBody] DsWebFlowAccept dto)
+        {
+            var data = _mapper.Map<AddOrderDto>(dto);
+            data.SourceChannel = "网站";
+            data.SourceChannelCode = "WZ";
+            data.Source = ESource.Hotline;
+            if (!string.IsNullOrEmpty(data.LicenceNo))
+            {
+                data.LicenceTypeCode = "10";
+                data.LicenceType = "中华人民共和国居民身份证";
+            }
+            var result = await _mediator.Send(new ReceiveOrderNotify { AddOrderDto = data }, HttpContext.RequestAborted);
+
+            OrderAcceptanceReturnDto returnDto = new();
+            if (result != null && !string.IsNullOrEmpty(result.Id))
+            {
+                returnDto.PWD = result.Password;
+                returnDto.Code = result.No;
+                returnDto.State = "1";
+
+                dto.Pwd = result.Password;
+                dto.Code = result.No;
+                dto.OrderId = result.Id;
+                await _webFlowAcceptRepository.AddAsync(dto, HttpContext.RequestAborted);
+
+            }
+            else
+                returnDto.State = "0";
+
+            return OpenResponse.Ok(WebPortalDeResponse<OrderAcceptanceReturnDto>.Success(returnDto));
+        }
+
+        /// <summary>
+        /// 受理类型和热点统计
+        /// </summary>
+        /// <returns></returns>
+        [AllowAnonymous]
+        [HttpPost("getchartdata")]
+        public async Task<OpenResponse> GetChartData()
+        {
+            var startDate = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd 00:00:00"));
+            var endDate = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd 23:59:59"));
+
+            //数据查询
+            var listType = await _dataOrderRepository.Queryable()
+                .Where(p => p.CaseDate >= startDate)
+                .Where(p => p.CaseDate <= endDate)
+                .Select(it => new
+                {
+                    it.CaseType,
+                    it.CaseTypeCode
+                })
+                .MergeTable()//将查询出来的结果合并成一个新表
+                 .GroupBy(it => new { it.CaseType, it.CaseTypeCode })//对新表进行分组
+                 .Select(it => new
+                 {
+                     name = it.CaseType,
+                     value = SqlFunc.AggregateCount(it.CaseTypeCode)
+                 })
+                 .ToListAsync();
+
+            //数据查询-查询总数前5的数据
+            var listHot = await _dataOrderRepository.Queryable()
+                .Where(p => p.CaseDate >= startDate)
+                .Where(p => p.CaseDate <= endDate)
+                .Select(it => new
+                {
+                    it.HotspotId,
+                    it.HotspotName
+                })
+                .MergeTable()//将查询出来的结果合并成一个新表
+                 .GroupBy(it => new { it.HotspotId, it.HotspotName })//对新表进行分组
+                 .Select(it => new
+                 {
+                     typeName = it.HotspotName,
+                     num = SqlFunc.AggregateCount(it.HotspotId)
+                 })
+                 .OrderByDescending(it => it.num)
+                 .Take(5)
+                 .ToListAsync();
+
+            GetChartDataDto dataDto = new()
+            {
+                formCount = _mapper.Map<IReadOnlyList<OrderFormCount>>(listType),
+                hotCount = _mapper.Map<IReadOnlyList<OrderHotCount>>(listHot)
+            };
+
+            return OpenResponse.Ok(WebPortalDeResponse<GetChartDataDto>.Success(dataDto));
+        }
+
+        /// <summary>
+        /// 获取统计数据
+        /// </summary>
+        /// <returns></returns>
+        [AllowAnonymous]
+        [HttpPost("getstatist")]
+        public async Task<OpenResponse> GetStatist()
+        {
+            var startDate = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd 00:00:00"));
+            var endDate = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd 23:59:59"));
+            GetStatistDto getStatistDto = new()
+            {
+                AllCount = await _dataOrderRepository.Queryable().GroupBy(p => p.OrderId).CountAsync(),
+                AllTrandCount = await _dataOrderRepository.Queryable().GroupBy(p => p.OrderId).Where(p => p.HandleState == "办理完成").CountAsync(),
+                DayCount = await _dataOrderRepository.Queryable().GroupBy(p => p.OrderId).Where(p => p.CaseDate >= startDate).Where(p => p.CaseDate <= endDate).CountAsync(),
+                DayTrandCount = await _dataOrderRepository.Queryable().GroupBy(p => p.OrderId).Where(p => p.HandleState == "办理完成").Where(p => p.CaseDate >= startDate).Where(p => p.CaseDate <= endDate).CountAsync()
+            };
+
+            return OpenResponse.Ok(WebPortalDeResponse<GetStatistDto>.Success(getStatistDto));
+        }
+        #endregion
+
+        #region 用户
+        /// <summary>
+        /// 添加统一认证用户数据
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [AllowAnonymous]
+        [HttpPost("adduserauth")]
+        public async Task<OpenResponse> AddUserAuth([FromBody] UserModelDto dto)
+        {
+            bool bResult = false;
+            // 唯一记录ID
+            string id = dto.id;
+            // 注册用户ID
+            string webUserID = "";
+            // 统一认证用户注册ID
+            string wUAID = "";
+            //查询是否有注册用户
+            var dataUser = await _webUserAuthRepository.GetAsync(p => p.DataId == id, HttpContext.RequestAborted);
+            if (dataUser != null)
+            {
+                webUserID = dataUser.WebUserID;
+                wUAID = dataUser.Id;
+            }
+            //没有注册用户添加数据
+            if (string.IsNullOrEmpty(webUserID))
+            {
+                var userRegister = _mapper.Map<DsWebUserRegister>(dto);
+                userRegister.RegDate = DateTime.Now;
+                userRegister.LastDate = DateTime.Now;
+                webUserID = await _webUserRegisterRepository.AddAsync(userRegister, HttpContext.RequestAborted);
+            }
+
+            //统一认证数据
+            var userAuth = _mapper.Map<DsWebUserAuth>(dto);
+            if (!string.IsNullOrEmpty(wUAID))
+            {
+                //修改数据
+                userAuth.Id = wUAID;
+                await _webUserAuthRepository.UpdateAsync(userAuth, HttpContext.RequestAborted);
+                bResult = true;
+            }
+            else
+            {
+                //新增数据
+                userAuth.WebGUID = Guid.NewGuid().ToString();
+                userAuth.WebUserID = webUserID;
+                var addId = await _webUserAuthRepository.AddAsync(userAuth, HttpContext.RequestAborted);
+                if (string.IsNullOrEmpty(addId))
+                    bResult = true;
+            }
+            //判断是否成功
+            if (bResult)
+                return OpenResponse.Ok(WebPortalDeResponse<string>.Success(webUserID));
+            else
+                return OpenResponse.Ok(WebPortalDeResponse<string>.Failed());
+        }
+        #endregion
+    }
+}

+ 2 - 233
src/Hotline.Api/Controllers/OrderController.cs

@@ -1009,7 +1009,6 @@ public class OrderController : BaseController
         return new PagedDto<OrderDelayDto>(total, _mapper.Map<IReadOnlyList<OrderDelayDto>>(items));
     }
 
-
     /// <summary>
     /// 延期详情
     /// </summary>
@@ -1051,53 +1050,6 @@ public class OrderController : BaseController
             HttpContext.RequestAborted);
     }
 
-    /// <summary>
-    /// 省工单延期结果
-    /// </summary>
-    /// <returns></returns>
-    [HttpPost("delay/province/result")]
-    public async Task DelayProvinceResult([FromBody] DelayProvinceResultDto dto)
-    {
-        var orderDelay = await _orderDelayRepository.Queryable()
-            .Includes(d => d.Order)
-            .Includes(d => d.Workflow)
-            .FirstAsync(d => d.Order.ProvinceNo == dto.No && d.DelayState == EDelayState.Examining,
-                HttpContext.RequestAborted);
-        if (orderDelay is null)
-            throw new UserFriendlyException("无效省工单编号");
-
-        //todo 延期业务
-
-        if (dto.IsPass)
-        {
-            var nextDtos =
-                await _workflowApplication.GetNextStepsAsync(orderDelay.WorkflowId, HttpContext.RequestAborted);
-            var nextStep = nextDtos.Steps.FirstOrDefault(d => d.Key == "end");
-            if (nextStep is null)
-                throw new UserFriendlyException("未查询到结束节点");
-
-            var nextDto = new NextWorkflowDto
-            {
-                WorkflowId = orderDelay.WorkflowId,
-                //StepExpiredTime = orderDelay.Workflow.ExpiredTime,
-                NextStepCode = nextStep.Key,
-                NextStepName = nextStep.Value,
-                NextMainHandler = nextStep.Key,
-                Opinion = dto.Opinion
-            };
-            await _workflowApplication.NextAsync(nextDto, HttpContext.RequestAborted);
-        }
-        else
-        {
-            var rejectDto = new RejectDto
-            {
-                WorkflowId = orderDelay.WorkflowId,
-                Opinion = dto.Opinion,
-            };
-            await _workflowApplication.RejectAsync(rejectDto, HttpContext.RequestAborted);
-        }
-    }
-
     /// <summary>
     /// 延期页面基础信息
     /// </summary>
@@ -1303,50 +1255,6 @@ public class OrderController : BaseController
         return rspModel;
     }
 
-    /// <summary>
-    /// 省工单督办结果
-    /// </summary>
-    /// <returns></returns>
-    [HttpPost("screen/province/result")]
-    public async Task ScreenProvinceResultAsync([FromBody] ProvinceScreenResult dto)
-    {
-        var orderScreen = await _orderScreenRepository.Queryable()
-            .Includes(d => d.Order)
-            .Includes(d => d.Workflow)
-            .FirstAsync(d => d.Order.ProvinceNo == dto.CaseSerial && d.Status == EScreenStatus.Approval,
-                HttpContext.RequestAborted);
-        if (orderScreen is null)
-            throw new UserFriendlyException("无效省工单编号");
-        var pass = "1".Equals(dto.AuditResult);
-        if (pass)
-        {
-            var nextDtos =
-                await _workflowApplication.GetNextStepsAsync(orderScreen.WorkflowId, HttpContext.RequestAborted);
-            var nextStep = nextDtos.Steps.FirstOrDefault(d => d.Key == "end");
-            if (nextStep is null)
-                throw new UserFriendlyException("未查询到结束节点");
-
-            var nextDto = new NextWorkflowDto
-            {
-                WorkflowId = orderScreen.WorkflowId,
-                NextStepCode = nextStep.Key,
-                NextStepName = nextStep.Value,
-                NextMainHandler = nextStep.Key,
-                Opinion = dto.AuditOpinion
-            };
-            await _workflowApplication.NextAsync(nextDto, HttpContext.RequestAborted);
-        }
-        else
-        {
-            var rejectDto = new RejectDto
-            {
-                WorkflowId = orderScreen.WorkflowId,
-                Opinion = dto.AuditOpinion,
-            };
-            await _workflowApplication.RejectAsync(rejectDto, HttpContext.RequestAborted);
-        }
-    }
-
     #endregion
 
     #region 工单督办
@@ -1503,32 +1411,7 @@ public class OrderController : BaseController
             .Includes(x => x.Order)
             .FirstAsync(x => x.Id == id);
     }
-
-    /// <summary>
-    /// 省上督办
-    /// </summary>
-    /// <param name="dto"></param>
-    /// <returns></returns>
-    [HttpPost("supervise/province")]
-    public async Task ProvinceOrderSupervise([FromBody] ProvinceOrderSuperviseDto dto)
-    {
-        var order = await _orderRepository.Queryable().Where(x => x.ProvinceNo == dto.CaseSerial).FirstAsync();
-        var org = await _organizeRepository.Queryable().Where(x => x.Name == dto.SuperviseRsvDept).FirstAsync();
-        var model = new OrderSupervise
-        {
-            OrderId = order.Id,
-            ReplyLimitTime = dto.SuperviseReturnDate,
-            OrgId = org.Id,
-            OrgName = org.Name,
-            LaunchOrgName = dto.SuperviseSendDept,
-            State = 0,
-            ApplyContent = dto.SuperviseContent,
-            CrUser = dto.SupervisePerson,
-            SuperviseSerial = dto.SuperviseSerial
-        };
-        await _orderSuperviseRepository.AddAsync(model, HttpContext.RequestAborted);
-    }
-
+    
     #endregion
 
     #region 工单催办
@@ -1661,27 +1544,7 @@ public class OrderController : BaseController
             .Includes(x => x.Order)
             .FirstAsync(x => x.Id == id);
     }
-
-    /// <summary>
-    /// 省上催办
-    /// </summary>
-    /// <param name="dto"></param>
-    /// <returns></returns>
-    [HttpPost("urge/province")]
-    public async Task ProvinceOrderUrge([FromBody] ProvinceOrderUrgeDto dto)
-    {
-        var order = await _orderRepository.Queryable().Where(x => x.ProvinceNo == dto.CaseSerial).FirstAsync();
-        var model = new OrderUrge
-        {
-            OrderId = order.Id,
-            ApplyContent = dto.RemindReasion,
-            CrUser = dto.RemindName,
-            State = 0,
-            CreationTime = dto.RemindTime
-        };
-        await _orderUrgeRepository.AddAsync(model, HttpContext.RequestAborted);
-    }
-
+    
     #endregion
 
     #region 工单办理
@@ -1831,78 +1694,6 @@ public class OrderController : BaseController
         return orderId;
     }
 
-    /// <summary>
-    /// 接受其他平台工单数据
-    /// </summary>
-    [HttpPost("receive")]
-    public async Task<AddOrderResponse> ReceiveOrder([FromBody] AddOrderDto dto)
-    {
-        if (string.IsNullOrEmpty(dto.ProvinceNo))
-            throw new UserFriendlyException("无效省工单编号");
-
-        var order = await _orderRepository.GetAsync(d => d.ProvinceNo == dto.ProvinceNo, HttpContext.RequestAborted);
-        if (order is null)
-        {
-            order = _mapper.Map<Order>(dto);
-            var orderId = await _orderDomainService.AddAsync(order, HttpContext.RequestAborted);
-
-            if (order.Source is ESource.ProvinceStraight)
-            {
-                var orderExtension =
-                    await _orderDomainService.GetOrderExtensionsAsync(dto.ProvinceNo, HttpContext.RequestAborted);
-                if (orderExtension is not null)
-                {
-                    orderExtension.Id = orderId;
-                    await _orderDomainService.UpdateExtensionAsync(orderExtension, HttpContext.RequestAborted);
-                }
-            }
-
-            return new AddOrderResponse
-            {
-                Id = orderId,
-                No = order.No,
-                Password = order.Password
-            };
-        }
-        else
-        {
-            if (order.Source is ESource.ProvinceStraight)
-            {
-                //todo 特提(撤回至发起)
-                await _workflowApplication.RecallToStartAsync(order.WorkflowId, "省工单重派", HttpContext.RequestAborted);
-            }
-
-            return _mapper.Map<AddOrderResponse>(order);
-        }
-    }
-
-    /// <summary>
-    /// 接受其他平台工单扩展信息
-    /// </summary>
-    [HttpPost("receive/extension")]
-    public async Task<string> ReceiveExtension(OrderExtensionDto dto)
-    {
-        if (string.IsNullOrEmpty(dto.ProvinceNo))
-            throw new UserFriendlyException("无效省工单编号");
-
-        var orderExtension = await _orderDomainService.GetOrderExtensionsAsync(dto.ProvinceNo, HttpContext.RequestAborted);
-        if (orderExtension is not null) return string.Empty;
-
-        var extension = _mapper.Map<OrderExtension>(dto);
-        var order = await _orderRepository.GetAsync(d => d.ProvinceNo == dto.ProvinceNo, HttpContext.RequestAborted);
-        if (order is null)
-        {
-            await _orderDomainService.AddExtensionAsync(extension, HttpContext.RequestAborted);
-        }
-        else
-        {
-            order.OrderExtension = extension;
-            await _orderRepository.UpdateNav(order).Include(d => d.OrderExtension).ExecuteCommandAsync();
-        }
-
-        return extension.Id;
-    }
-
     /// <summary>
     /// 删除工单
     /// </summary>
@@ -2253,28 +2044,6 @@ public class OrderController : BaseController
         }
     }
 
-    /// <summary>
-    /// 省上退回结果返回
-    /// </summary>
-    /// <param name="dto"></param>
-    /// <returns></returns>
-    [HttpPost("send_back/result")]
-    public async Task ReplyUrge([FromBody] OrderSendBackResultDto dto)
-    {
-        //验证是否存在退回
-        var sendBack = await _orderSendBackRepository.GetAsync(dto.Id, HttpContext.RequestAborted);
-        if (sendBack is null)
-            throw UserFriendlyException.SameMessage("无效退回");
-
-        _mapper.Map(dto, sendBack);
-        sendBack.Result = dto.Result;
-        sendBack.Reason = dto.Reason;
-        await _orderSendBackRepository.UpdateAsync(sendBack, HttpContext.RequestAborted);
-        var order = await _orderRepository.GetAsync(sendBack.OrderId, HttpContext.RequestAborted);
-        order.Status = EOrderStatus.WaitForAccept;
-        await _orderRepository.UpdateAsync(order, HttpContext.RequestAborted);
-    }
-
     /// <summary>
     /// 退回详情
     /// </summary>

+ 2 - 0
src/Hotline.Api/StartupExtensions.cs

@@ -20,6 +20,7 @@ using XF.Domain.Filters;
 using XF.Domain.Options;
 using XF.EasyCaching;
 using XF.Utility.MQ;
+using Hotline.DataSharing;
 
 namespace Hotline.Api;
 
@@ -40,6 +41,7 @@ internal static class StartupExtensions
         //services.Configure<DeviceConfigs>(d => configuration.GetSection(nameof(DeviceConfigs)).Bind(d));
         services.Configure<IdentityConfiguration>(d => configuration.GetSection(nameof(IdentityConfiguration)).Bind(d));
         services.Configure<CallCenterConfiguration>(d => configuration.GetSection(nameof(CallCenterConfiguration)).Bind(d));
+        services.Configure<ChannelConfiguration>(d => configuration.GetSection(nameof(ChannelConfiguration)).Bind(d));
 
         // Add services to the container.
         services

+ 94 - 0
src/Hotline.Api/config/appsettings.Development.json

@@ -97,6 +97,100 @@
     "Username": "root",
     "Password": "12345678aa",
     "Ip": "222.213.23.229"
+  },
+  "ChannelConfiguration": {
+    //省12345配置
+    "Province": {
+      "HuiJu": "http://103.203.219.157/cns-sccthj-job-test/rest/",
+      "XieTong": "http://103.203.219.157/cns-scxthj-rest-test/rest/",
+      "ClientId": "6384f475-2e1e-4985-9e34-51a3379452d0",
+      "ClientSecret": "3e92b698-d640-4056-be94-128710ac1a7e"
+    },
+    //企业服务
+    "Enterprise": {
+      "AddressUrl": "http://10.12.185.227:8834/",
+      "ClientId": "1462598736",
+      "ClientSecret": "6nZtVK4rKfnsncGymUHB",
+      "TenantId": "000000"
+    },
+    //市州数据交换
+    "CityHandOver": {
+      "SecretKey": "AA9FF92A-5040-442A-BDFF-A50AD536BF3D",
+      "SendCityName": "宜宾",
+      "ReceiveCityName": "泸州",
+      "BaseUrl": "http://localhost:6028/",
+      "UrlAddress": "CityHandOver.asmx/FlowWrite"
+    },
+    //融媒体
+    "MediaCode": {
+      "MediaCode": "FWYB0828"
+    },
+    //系统市州编码
+    "CityCode": {
+      "AreaCode": "511500"
+    },
+    //110对接
+    "PoliceDS": {
+      //1、非警情分流推送服务_宜宾市
+      //   receive-工单受理
+      //   http://10.12.185.168:8001/service/api/ds/110To12345/chainAlarm
+      "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-工单办结
+      //   http://10.12.185.168:8001/service/api/ds/110To12345/chainDeal
+      "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-工单受理
+      //   http://10.12.185.168:8001/service/api/ds/12345To110/chainAlarm
+      "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-工单办结
+      //   http://10.12.185.168:8001/service/api/ds/12345To110/chainDeal
+      "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-知识库列表
+      //   http://10.12.185.168:8001/service/api/ds/get_knowledge_info
+      "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-知识库内容
+      //   http://10.12.185.168:8001/service/api/ds/get_knowledge_content
+      "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"
+    }
   }
 
 }

+ 1 - 0
src/Hotline.Application.Contracts/Hotline.Application.Contracts.csproj

@@ -17,6 +17,7 @@
 
   <ItemGroup>
     <Folder Include="Configurations\" />
+    <Folder Include="Validators\DataSharing\" />
   </ItemGroup>
 
 </Project>

+ 143 - 0
src/Hotline.Application/DataSharing/Province/PushDataBgService.cs

@@ -0,0 +1,143 @@
+//using Hotline.DataSharing.Province.HuiJu.Send;
+//using Hotline.DataSharing.Province.Other;
+//using Hotline.DataSharing.Province.Services;
+//using Hotline.DataSharing.Province.XieTong.Receive;
+//using Hotline.DataSharing.Province.XieTong.Send;
+//using MediatR;
+//using Microsoft.Extensions.DependencyInjection;
+//using Microsoft.Extensions.Hosting;
+//using XF.Domain.Repository;
+
+//namespace Hotline.Application.DataSharing.Province
+//{
+//    /// <summary>
+//    /// 后台定时任务
+//    /// </summary>
+//    public class PushDataBgService : BackgroundService
+//    {
+//        private readonly IServiceScopeFactory _serviceScopeFactory;
+
+//        /// <summary>
+//        /// 
+//        /// </summary>
+//        /// <param name="serviceScopeFactory"></param>
+//        public PushDataBgService(IServiceScopeFactory serviceScopeFactory)
+//        {
+//            _serviceScopeFactory = serviceScopeFactory;
+//        }
+
+//        /// <summary>
+//        /// 
+//        /// </summary>
+//        /// <param name="stoppingToken"></param>
+//        /// <returns></returns>
+//        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
+//        {
+//            //10分钟扫描一次数据库
+//            using var sc = _serviceScopeFactory.CreateScope();
+//            var time = TimeSpan.FromSeconds(60 * 10);
+//            while (!stoppingToken.IsCancellationRequested)
+//            {
+//                using var scope = _serviceScopeFactory.CreateScope();
+//                var _waitingPushDataRepository = scope.ServiceProvider.GetService<IRepository<DsWaitingPushData>>();
+//                var _sendCaseInfoRepository = scope.ServiceProvider.GetService<IRepository<DsSendCaseInfo>>();
+//                var _mediator = scope.ServiceProvider.GetService<IMediator>();
+//                var _pusherProviderService = scope.ServiceProvider.GetService<IPusherProviderService>();
+
+//                #region 批量推送省数据
+//                //查询待推送数据
+//                var listData = await _waitingPushDataRepository
+//                .Queryable()
+//                .OrderByDescending(p => p.Priority)
+//                       .ToListAsync();
+//                var isContinue = true;
+//                if (listData != null && listData.Count > 0)
+//                {
+//                    List<DsSubmitCaseProcess> submitCaseProcesses = new(); //服务工单处理过程
+//                    List<DsSubmitCaseResult> submitCaseResults = new(); //服务工单处理结果
+//                    List<DsSubmitVisitInfo> submitVisitInfos = new(); //服务工单回访评价
+//                    List<DsGetCaseMaterialInfo> getCaseMaterialInfos = new();//附件上传处理
+
+//                    //根据查询出来数据组装推送数据
+//                    foreach (var item in listData)
+//                    {
+//                        switch (item.ServiceInterface)
+//                        {
+//                            case "SubmitCaseProcess"://服务工单处理过程
+//                                var caseProcess = System.Text.Json.JsonSerializer.Deserialize<DsSubmitCaseProcess>(item.Data);
+//                                if (caseProcess != null) submitCaseProcesses.Add(caseProcess);
+//                                break;
+//                            case "SubmitCaseResult": //服务工单处理结果
+//                                var caseResult = System.Text.Json.JsonSerializer.Deserialize<DsSubmitCaseResult>(item.Data);
+//                                if (caseResult != null) submitCaseResults.Add(caseResult);
+//                                break;
+//                            case "SubmitVisitInfo"://服务工单回访评价
+//                                var visitInfo = System.Text.Json.JsonSerializer.Deserialize<DsSubmitVisitInfo>(item.Data);
+//                                if (visitInfo != null) submitVisitInfos.Add(visitInfo);
+//                                break;
+//                            case "GetCaseMaterialInfo"://附件
+//                                var materialInfo = System.Text.Json.JsonSerializer.Deserialize<DsGetCaseMaterialInfo>(item.Data);
+//                                if (materialInfo != null) getCaseMaterialInfos.Add(materialInfo);
+//                                break;
+//                            default:
+//                                break;
+//                        }
+//                    }
+
+//                    //推送对应消息
+//                    //服务工单处理过程
+//                    if (submitCaseProcesses != null && submitCaseProcesses.Count > 0)
+//                    {
+//                        await _pusherProviderService.SubmitCaseProcessPusher(submitCaseProcesses, default);
+//                        //  await _mediator.Publish(new SubmitCaseProcessNotification(submitCaseProcesses));
+//                    }
+
+//                    //服务工单处理结果
+//                    if (submitCaseResults != null && submitCaseResults.Count > 0)
+//                    {
+//                        await _pusherProviderService.SubmitCaseResultPusher(submitCaseResults, default);
+//                        //  await _mediator.Publish(new SubmitCaseResultNotification(submitCaseResults));
+//                    }
+
+//                    //服务工单回访评价
+//                    if (submitVisitInfos != null && submitVisitInfos.Count > 0)
+//                    {
+//                        await _pusherProviderService.SubmitVisitInfoPusher(submitVisitInfos, default);
+//                        // await _mediator.Publish(new SubmitVisitInfoNotification(submitVisitInfos));
+//                    }
+
+
+//                    //附件上传处理  
+//                    if (getCaseMaterialInfos != null && getCaseMaterialInfos.Count > 0)
+//                    {
+//                        await _pusherProviderService.GetCaseMaterialInfoPusher(getCaseMaterialInfos, default);
+//                        // await _mediator.Publish(new GetCaseMaterialInfoNotification(getCaseMaterialInfos));
+//                    }
+//                }
+//                else
+//                    isContinue = false;
+//                #endregion
+
+//                #region 拉取12315工单办理信息
+//                //查询是否存在需要拉取办理信息的工单
+//                var listSendCaseInfo = await _sendCaseInfoRepository
+//                    .Queryable()
+//                    .OrderBy(p => p.CreationTime)
+//                    .ToListAsync();
+//                //处理数据
+//                if (listSendCaseInfo != null && listSendCaseInfo.Count > 0)
+//                {
+//                    foreach (var item in listSendCaseInfo)
+//                        await _pusherProviderService.GetCaseDistrecordSendPusher(item.CaseSerial, default);// _mediator.Publish(new GetCaseDistrecordSendNotification(item.CaseSerial));
+//                }
+//                else
+//                    isContinue = false;
+//                #endregion
+
+//                //如果数据都为空,停止
+//                if (!isContinue)
+//                    await Task.Delay(time, stoppingToken);
+//            }
+//        }
+//    }
+//}

+ 76 - 0
src/Hotline.Application/Handlers/Order/DelayProvinceResultNotifyHandler.cs

@@ -0,0 +1,76 @@
+using MediatR;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Hotline.Application.FlowEngine;
+using Hotline.DataSharing.Province.Notifications;
+using Hotline.Orders;
+using Hotline.Share.Dtos.FlowEngine;
+using Hotline.Share.Enums.Order;
+using XF.Domain.Exceptions;
+using XF.Domain.Repository;
+
+namespace Hotline.Application.Handlers.Order
+{
+    public class DelayProvinceResultNotifyHandler : INotificationHandler<DelayProvinceResultNotify>
+    {
+        private readonly IRepository<OrderDelay> _orderDelayRepository;
+        private readonly IWorkflowApplication _workflowApplication;
+
+        public DelayProvinceResultNotifyHandler(
+            IRepository<OrderDelay> orderDelayRepository,
+            IWorkflowApplication workflowApplication)
+        {
+            _orderDelayRepository = orderDelayRepository;
+            _workflowApplication = workflowApplication;
+        }
+
+        /// <summary>Handles a notification</summary>
+        /// <param name="notification">The notification</param>
+        /// <param name="cancellationToken">Cancellation token</param>
+        public async Task Handle(DelayProvinceResultNotify notification, CancellationToken cancellationToken)
+        {
+            var dto = notification;
+            var orderDelay = await _orderDelayRepository.Queryable()
+                .Includes(d => d.Order)
+                .Includes(d => d.Workflow)
+                .FirstAsync(d => d.Order.ProvinceNo == dto.No && d.DelayState == EDelayState.Examining, cancellationToken);
+            if (orderDelay is null)
+                throw new UserFriendlyException("无效省工单编号");
+
+            //todo 延期业务
+
+            if (dto.IsPass)
+            {
+                //todo workflow优化
+                var nextDtos =
+                    await _workflowApplication.GetNextStepsAsync(orderDelay.WorkflowId, cancellationToken);
+                var nextStep = nextDtos.Steps.FirstOrDefault(d => d.Key == "end");
+                if (nextStep is null)
+                    throw new UserFriendlyException("未查询到结束节点");
+
+                var nextDto = new NextWorkflowDto
+                {
+                    WorkflowId = orderDelay.WorkflowId,
+                    //StepExpiredTime = orderDelay.Workflow.ExpiredTime,
+                    NextStepCode = nextStep.Key,
+                    NextStepName = nextStep.Value,
+                    NextMainHandler = nextStep.Key,
+                    Opinion = dto.Opinion
+                };
+                await _workflowApplication.NextAsync(nextDto, cancellationToken);
+            }
+            else
+            {
+                var rejectDto = new RejectDto
+                {
+                    WorkflowId = orderDelay.WorkflowId,
+                    Opinion = dto.Opinion,
+                };
+                await _workflowApplication.RejectAsync(rejectDto, cancellationToken);
+            }
+        }
+    }
+}

+ 2 - 2
src/Hotline.Application/Handlers/Order/GetOrderDetailHandler.cs → src/Hotline.Application/Handlers/Order/GetOrderDetailNotifyHandler.cs

@@ -9,11 +9,11 @@ using MediatR;
 
 namespace Hotline.Application.Handlers.Order
 {
-    public class GetOrderDetailHandler : INotificationHandler<GetOrderDetailNotify>
+    public class GetOrderDetailNotifyHandler : INotificationHandler<GetOrderDetailNotify>
     {
         private readonly IWorkflowDomainService _workflowDomainService;
 
-        public GetOrderDetailHandler(IWorkflowDomainService workflowDomainService)
+        public GetOrderDetailNotifyHandler(IWorkflowDomainService workflowDomainService)
         {
             _workflowDomainService = workflowDomainService;
         }

+ 53 - 0
src/Hotline.Application/Handlers/Order/OrderSendBackResultNotifyHandler.cs

@@ -0,0 +1,53 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Hotline.DataSharing.Province.Notifications;
+using Hotline.Orders;
+using Hotline.Share.Enums.Order;
+using MapsterMapper;
+using MediatR;
+using Microsoft.AspNetCore.Http;
+using XF.Domain.Exceptions;
+using XF.Domain.Repository;
+
+namespace Hotline.Application.Handlers.Order
+{
+    public class OrderSendBackResultNotifyHandler : INotificationHandler<OrderSendBackResultNotify>
+    {
+        private readonly IRepository<OrderSendBack> _orderSendBackRepository;
+        private readonly IOrderRepository _orderRepository;
+        private readonly IMapper _mapper;
+
+        public OrderSendBackResultNotifyHandler(
+            IRepository<OrderSendBack> orderSendBackRepository,
+            IOrderRepository orderRepository,
+            IMapper mapper)
+        {
+            _orderSendBackRepository = orderSendBackRepository;
+            _orderRepository = orderRepository;
+            _mapper = mapper;
+        }
+
+        /// <summary>Handles a notification</summary>
+        /// <param name="notification">The notification</param>
+        /// <param name="cancellationToken">Cancellation token</param>
+        public async Task Handle(OrderSendBackResultNotify notification, CancellationToken cancellationToken)
+        {
+            var dto = notification.OrderSendBackResultDto;
+            //验证是否存在退回
+            var sendBack = await _orderSendBackRepository.GetAsync(dto.Id, cancellationToken);
+            if (sendBack is null)
+                throw UserFriendlyException.SameMessage("无效退回");
+
+            _mapper.Map(dto, sendBack);
+            sendBack.Result = dto.Result;
+            sendBack.Reason = dto.Reason;
+            await _orderSendBackRepository.UpdateAsync(sendBack, cancellationToken);
+            var order = await _orderRepository.GetAsync(sendBack.OrderId, cancellationToken);
+            order.Status = EOrderStatus.WaitForAccept;
+            await _orderRepository.UpdateAsync(order, cancellationToken);
+        }
+    }
+}

+ 54 - 0
src/Hotline.Application/Handlers/Order/ProvinceOrderSuperviseNotifyHandler.cs

@@ -0,0 +1,54 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Hotline.DataSharing.Province.Notifications;
+using Hotline.Orders;
+using Hotline.Settings;
+using MediatR;
+using Microsoft.AspNetCore.Http;
+using XF.Domain.Repository;
+
+namespace Hotline.Application.Handlers.Order
+{
+    public class ProvinceOrderSuperviseNotifyHandler : INotificationHandler<ProvinceOrderSuperviseNotify>
+    {
+        private readonly IOrderRepository _orderRepository;
+        private readonly IRepository<OrderSupervise> _orderSuperviseRepository;
+        private readonly ISystemOrganizeRepository _organizeRepository;
+
+        public ProvinceOrderSuperviseNotifyHandler(
+            IOrderRepository orderRepository,
+            IRepository<OrderSupervise> orderSuperviseRepository,
+            ISystemOrganizeRepository organizeRepository)
+        {
+            _orderRepository = orderRepository;
+            _orderSuperviseRepository = orderSuperviseRepository;
+            _organizeRepository = organizeRepository;
+        }
+
+        /// <summary>Handles a notification</summary>
+        /// <param name="notification">The notification</param>
+        /// <param name="cancellationToken">Cancellation token</param>
+        public async Task Handle(ProvinceOrderSuperviseNotify notification, CancellationToken cancellationToken)
+        {
+            var dto = notification.ProvinceOrderSuperviseDto;
+            var order = await _orderRepository.Queryable().Where(x => x.ProvinceNo == dto.CaseSerial).FirstAsync();
+            var org = await _organizeRepository.Queryable().Where(x => x.Name == dto.SuperviseRsvDept).FirstAsync();
+            var model = new OrderSupervise
+            {
+                OrderId = order.Id,
+                ReplyLimitTime = dto.SuperviseReturnDate,
+                OrgId = org.Id,
+                OrgName = org.Name,
+                LaunchOrgName = dto.SuperviseSendDept,
+                State = 0,
+                ApplyContent = dto.SuperviseContent,
+                CrUser = dto.SupervisePerson,
+                SuperviseSerial = dto.SuperviseSerial
+            };
+            await _orderSuperviseRepository.AddAsync(model, cancellationToken);
+        }
+    }
+}

+ 45 - 0
src/Hotline.Application/Handlers/Order/ProvinceOrderUrgeNotifyHandler.cs

@@ -0,0 +1,45 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Hotline.DataSharing.Province.Notifications;
+using Hotline.Orders;
+using MediatR;
+using Microsoft.AspNetCore.Http;
+using XF.Domain.Repository;
+
+namespace Hotline.Application.Handlers.Order
+{
+    public class ProvinceOrderUrgeNotifyHandler : INotificationHandler<ProvinceOrderUrgeNotify>
+    {
+        private readonly IOrderRepository _orderRepository;
+        private readonly IRepository<OrderUrge> _orderUrgeRepository;
+
+        public ProvinceOrderUrgeNotifyHandler(
+            IOrderRepository orderRepository,
+            IRepository<OrderUrge> orderUrgeRepository)
+        {
+            _orderRepository = orderRepository;
+            _orderUrgeRepository = orderUrgeRepository;
+        }
+
+        /// <summary>Handles a notification</summary>
+        /// <param name="notification">The notification</param>
+        /// <param name="cancellationToken">Cancellation token</param>
+        public async Task Handle(ProvinceOrderUrgeNotify notification, CancellationToken cancellationToken)
+        {
+            var dto = notification.ProvinceOrderUrgeDto;
+            var order = await _orderRepository.Queryable().Where(x => x.ProvinceNo == dto.CaseSerial).FirstAsync();
+            var model = new OrderUrge
+            {
+                OrderId = order.Id,
+                ApplyContent = dto.RemindReasion,
+                CrUser = dto.RemindName,
+                State = 0,
+                CreationTime = dto.RemindTime
+            };
+            await _orderUrgeRepository.AddAsync(model, cancellationToken);
+        }
+    }
+}

+ 57 - 0
src/Hotline.Application/Handlers/Order/ReceiveOrderExtensionNotifyHandler.cs

@@ -0,0 +1,57 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Hotline.DataSharing.Province.Notifications;
+using Hotline.Orders;
+using MapsterMapper;
+using MediatR;
+using Microsoft.AspNetCore.Http;
+using XF.Domain.Exceptions;
+
+namespace Hotline.Application.Handlers.Order
+{
+    public class ReceiveOrderExtensionNotifyHandler : INotificationHandler<ReceiveOrderExtensionNotify>
+    {
+        private readonly IOrderRepository _orderRepository;
+        private readonly IOrderDomainService _orderDomainService;
+        private readonly IMapper _mapper;
+
+        public ReceiveOrderExtensionNotifyHandler(
+            IOrderRepository orderRepository,
+            IOrderDomainService orderDomainService,
+            IMapper mapper)
+        {
+            _orderRepository = orderRepository;
+            _orderDomainService = orderDomainService;
+            _mapper = mapper;
+        }
+
+        /// <summary>Handles a notification</summary>
+        /// <param name="notification">The notification</param>
+        /// <param name="cancellationToken">Cancellation token</param>
+        public async Task Handle(ReceiveOrderExtensionNotify notification, CancellationToken cancellationToken)
+        {
+            var dto = notification.OrderExtensionDto;
+            if (string.IsNullOrEmpty(dto.ProvinceNo))
+                throw new UserFriendlyException("无效省工单编号");
+
+            var orderExtension = await _orderDomainService.GetOrderExtensionsAsync(dto.ProvinceNo, cancellationToken);
+            if (orderExtension is not null) return;
+
+            var extension = _mapper.Map<OrderExtension>(dto);
+            var order = await _orderRepository.GetAsync(d => d.ProvinceNo == dto.ProvinceNo, cancellationToken);
+            if (order is null)
+            {
+                await _orderDomainService.AddExtensionAsync(extension, cancellationToken);
+            }
+            else
+            {
+                order.OrderExtension = extension;
+                await _orderRepository.UpdateNav(order).Include(d => d.OrderExtension).ExecuteCommandAsync();
+            }
+
+        }
+    }
+}

+ 82 - 0
src/Hotline.Application/Handlers/Order/ReceiveOrderNotifyHandler.cs

@@ -0,0 +1,82 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Hotline.Application.FlowEngine;
+using Hotline.DataSharing.Province.Notifications;
+using Hotline.Orders;
+using Hotline.Share.Dtos.Order;
+using Hotline.Share.Enums.Order;
+using MapsterMapper;
+using MediatR;
+using Microsoft.AspNetCore.Http;
+using XF.Domain.Exceptions;
+
+namespace Hotline.Application.Handlers.Order
+{
+    public class ReceiveOrderNotifyHandler : IRequestHandler<ReceiveOrderNotify, AddOrderResponse>
+    {
+        private readonly IOrderRepository _orderRepository;
+        private readonly IOrderDomainService _orderDomainService;
+        private readonly IWorkflowApplication _workflowApplication;
+        private readonly IMapper _mapper;
+
+        public ReceiveOrderNotifyHandler(
+            IOrderRepository orderRepository,
+            IOrderDomainService orderDomainService,
+            IWorkflowApplication workflowApplication,
+            IMapper mapper)
+        {
+            _orderRepository = orderRepository;
+            _orderDomainService = orderDomainService;
+            _workflowApplication = workflowApplication;
+            _mapper = mapper;
+        }
+
+        /// <summary>Handles a request</summary>
+        /// <param name="request">The request</param>
+        /// <param name="cancellationToken">Cancellation token</param>
+        /// <returns>Response from the request</returns>
+        public async Task<AddOrderResponse> Handle(ReceiveOrderNotify request, CancellationToken cancellationToken)
+        {
+            var dto = request.AddOrderDto;
+            if (string.IsNullOrEmpty(dto.ProvinceNo))
+                throw new UserFriendlyException("无效省工单编号");
+
+            var order = await _orderRepository.GetAsync(d => d.ProvinceNo == dto.ProvinceNo, cancellationToken);
+            if (order is null)
+            {
+                order = _mapper.Map<Hotline.Orders.Order>(dto);
+                var orderId = await _orderDomainService.AddAsync(order, cancellationToken);
+
+                if (order.Source is ESource.ProvinceStraight)
+                {
+                    var orderExtension = await _orderDomainService.GetOrderExtensionsAsync(dto.ProvinceNo, cancellationToken);
+                    if (orderExtension is not null)
+                    {
+                        orderExtension.Id = orderId;
+                        await _orderDomainService.UpdateExtensionAsync(orderExtension, cancellationToken);
+                    }
+                }
+
+                return new AddOrderResponse
+                {
+                    Id = orderId,
+                    No = order.No,
+                    Password = order.Password
+                };
+            }
+            else
+            {
+                if (order.Source is ESource.ProvinceStraight)
+                {
+                    //todo 特提(撤回至发起)
+                    await _workflowApplication.RecallToStartAsync(order.WorkflowId, "省工单重派", cancellationToken);
+                }
+
+                return _mapper.Map<AddOrderResponse>(order);
+            }
+        }
+    }
+}

+ 74 - 0
src/Hotline.Application/Handlers/Order/ScreenProvinceResultNotifyHandler.cs

@@ -0,0 +1,74 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Hotline.Application.FlowEngine;
+using Hotline.DataSharing.Province.Notifications;
+using Hotline.Orders;
+using Hotline.Share.Dtos.FlowEngine;
+using Hotline.Share.Enums.Order;
+using MediatR;
+using Microsoft.AspNetCore.Http;
+using XF.Domain.Exceptions;
+using XF.Domain.Repository;
+
+namespace Hotline.Application.Handlers.Order
+{
+    public class ScreenProvinceResultNotifyHandler : INotificationHandler<ScreenProvinceResultNotify>
+    {
+        private readonly IRepository<OrderScreen> _orderScreenRepository;
+        private readonly IWorkflowApplication _workflowApplication;
+
+        public ScreenProvinceResultNotifyHandler(
+            IRepository<OrderScreen> orderScreenRepository,
+            IWorkflowApplication workflowApplication)
+        {
+            _orderScreenRepository = orderScreenRepository;
+            _workflowApplication = workflowApplication;
+        }
+
+        /// <summary>Handles a notification</summary>
+        /// <param name="notification">The notification</param>
+        /// <param name="cancellationToken">Cancellation token</param>
+        public async Task Handle(ScreenProvinceResultNotify notification, CancellationToken cancellationToken)
+        {
+            var dto = notification.ProvinceScreenResult;
+            var orderScreen = await _orderScreenRepository.Queryable()
+                .Includes(d => d.Order)
+                .Includes(d => d.Workflow)
+                .FirstAsync(d => d.Order.ProvinceNo == dto.CaseSerial && d.Status == EScreenStatus.Approval, cancellationToken);
+            if (orderScreen is null)
+                throw new UserFriendlyException("无效省工单编号");
+            var pass = "1".Equals(dto.AuditResult);
+            if (pass)
+            {
+                //todo workflow优化
+                var nextDtos =
+                    await _workflowApplication.GetNextStepsAsync(orderScreen.WorkflowId, cancellationToken);
+                var nextStep = nextDtos.Steps.FirstOrDefault(d => d.Key == "end");
+                if (nextStep is null)
+                    throw new UserFriendlyException("未查询到结束节点");
+
+                var nextDto = new NextWorkflowDto
+                {
+                    WorkflowId = orderScreen.WorkflowId,
+                    NextStepCode = nextStep.Key,
+                    NextStepName = nextStep.Value,
+                    NextMainHandler = nextStep.Key,
+                    Opinion = dto.AuditOpinion
+                };
+                await _workflowApplication.NextAsync(nextDto, cancellationToken);
+            }
+            else
+            {
+                var rejectDto = new RejectDto
+                {
+                    WorkflowId = orderScreen.WorkflowId,
+                    Opinion = dto.AuditOpinion,
+                };
+                await _workflowApplication.RejectAsync(rejectDto, cancellationToken);
+            }
+        }
+    }
+}

+ 4 - 0
src/Hotline.Application/Hotline.Application.csproj

@@ -20,4 +20,8 @@
     <ProjectReference Include="..\XF.EasyCaching\XF.EasyCaching.csproj" />
   </ItemGroup>
 
+  <ItemGroup>
+    <Folder Include="Mappers\DataSharing\" />
+  </ItemGroup>
+
 </Project>

+ 696 - 0
src/Hotline.Application/Mappers/DataSharing/DsMapperConfigs.cs

@@ -0,0 +1,696 @@
+using Hotline.DataSharing.DataExchange;
+using Hotline.DataSharing.Enterprise;
+using Hotline.DataSharing.Order;
+using Hotline.DataSharing.Province.Extend;
+using Hotline.DataSharing.Province.HuiJu.Send;
+using Hotline.DataSharing.Province.XieTong.Receive;
+using Hotline.DataSharing.Province.XieTong.Send;
+using Hotline.DataSharing.WebPortal;
+using Hotline.Share.Dtos.Order;
+using Hotline.Share.Enums.CallCenter;
+using Hotline.Share.Enums.Order;
+using Mapster;
+using Sharing.Share.Dtos.DataSharing.WebPortal;
+
+namespace Hotline.Application.Mappers.DataSharing
+{
+    public class DsMapperConfigs : IRegister
+    {
+        public void Register(TypeAdapterConfig config)
+        {
+            //服务工单受理
+            config.ForType<OrderDto, DsSubmitCaseInfo>()
+               .Ignore(d => d.Id)
+               .Map(d => d.OrderID, x => x.Id)
+               .Map(d => d.CaseTitle, x => x.Title)
+               .Map(d => d.CaseRegister, x => x.AcceptorName)
+               .Map(d => d.CaseRegisterNo, x => x.AcceptorStaffNo)
+               .Map(d => d.CaseDate, x => Convert.ToDateTime(x.CreationTime))
+               .Map(d => d.PhoneNumber, x => x.Contact)
+               .Map(d => d.AppLicantName, x => x.FromName)
+               .Map(d => d.AppLicantAge, x => x.AgeRangeCode)
+               .Map(d => d.AppLicantId, x => x.LicenceNo)
+               .Map(d => d.CaseAccord, x => x.Hotspot.ProvinceCode)
+               .Map(d => d.CaseContent, x => x.Content)
+               .Map(d => d.CaseProcessType, x => Convert.ToInt32(x.ProcessType))
+               .Map(d => d.CaseIsSecrect, x => x.IsSecret ? "1" : "0")
+               .Map(d => d.CaseIsVisit, x => x.ProcessType == Hotline.Share.Enums.Order.EProcessType.Zhiban ? "0" : "1")
+               .Map(d => d.EventDate, x => x.IncidentTime)
+               .Map(d => d.PushType, x => x.PushTypeCode)
+               .Map(d => d.AreaCode, x => x.AreaCode)
+               .Map(d => d.CaseSerial, x => x.ProvinceNo)
+               .Map(d => d.CaseSource, x => x.SourceChannelCode)
+               .Map(d => d.CaseAddress, x => x.FullAddress)
+               .Map(d => d.CaseType, x => x.AcceptTypeCode)
+              ;
+
+            config.ForType<OrderDto, DsSendCaseInfo>()
+               .Ignore(d => d.Id)
+               .Map(d => d.OrderID, x => x.Id)
+               .Map(d => d.CaseTitle, x => x.Title)
+               .Map(d => d.CaseRegister, x => x.AcceptorName)
+               .Map(d => d.CaseRegisterNo, x => x.AcceptorStaffNo)
+               .Map(d => d.CaseDate, x => Convert.ToDateTime(x.CreationTime))
+               .Map(d => d.PhoneNumber, x => x.Contact)
+               .Map(d => d.AppLicantName, x => x.FromName)
+               .Map(d => d.AppLicantAge, x => x.AgeRangeCode)
+               .Map(d => d.AppLicantId, x => x.LicenceNo)
+               .Map(d => d.CaseAccord, x => x.Hotspot.ProvinceCode)
+               .Map(d => d.CaseContent, x => x.Content)
+               .Map(d => d.CaseProcessType, x => Convert.ToInt32(x.ProcessType))
+               .Map(d => d.CaseIsSecrect, x => x.IsSecret ? "1" : "0")
+               .Map(d => d.CaseIsVisit, x => x.ProcessType == Hotline.Share.Enums.Order.EProcessType.Zhiban ? "0" : "1")
+               .Map(d => d.EventDate, x => x.IncidentTime)
+               .Map(d => d.AreaCode, x => x.AreaCode)
+               .Map(d => d.CaseSerial, x => x.ProvinceNo)
+               .Map(d => d.CaseSource, x => x.SourceChannelCode)
+               .Map(d => d.CaseAddress, x => x.FullAddress)
+               .Map(d => d.CaseType, x => x.AcceptTypeCode)
+              ;
+
+            //服务工单处理过程
+            config.ForType<OrderFlowDto, DsSubmitCaseProcess>()
+            .Map(d => d.CaseSerial, x => x.Order.ProvinceNo)
+            .Map(d => d.DeptName, x => x.WorkflowTrace.HandlerOrgName)
+            .Map(d => d.ProcessTime, x => x.WorkflowTrace.HandleTime)
+            .Map(d => d.ProcessName, x => x.WorkflowTrace.HandlerName)
+            .Map(d => d.ProcessNote, x => x.WorkflowTrace.Opinion)
+            .Map(d => d.EndAreaCode, x => x.WorkflowTrace.HandlerOrgAreaCode)
+            .Map(d => d.EndAreaName, x => x.WorkflowTrace.HandlerOrgAreaName)
+            //  .Map(d => d.CaseId, x => x.WorkflowTrace.Id)
+            .Map(d => d.AreaCode, x => x.Order.AreaCode)
+            ;
+
+            //服务工单交办处理过程
+            config.ForType<OrderFlowDto, DsGetCaseProcessReceive>()
+           .Map(d => d.CaseSerial, x => x.Order.ProvinceNo)
+           .Map(d => d.DeptName, x => x.WorkflowTrace.HandlerOrgName)
+           .Map(d => d.ProcessTime, x => x.WorkflowTrace.HandleTime)
+           .Map(d => d.ProcessName, x => x.WorkflowTrace.HandlerName)
+           .Map(d => d.ProcessNote, x => x.WorkflowTrace.Opinion)
+           .Map(d => d.EndAreaCode, x => x.WorkflowTrace.HandlerOrgAreaCode)
+           .Map(d => d.EndAreaName, x => x.WorkflowTrace.HandlerOrgAreaName)
+           //.Map(d => d.TrowGuid, x => x.WorkflowTrace.Id)
+           .Map(d => d.AreaCode, x => x.Order.AreaCode)
+           ;
+
+            //服务工单回访评价
+            config.ForType<PublishVisitDto, DsSubmitVisitInfo>()
+            .Map(d => d.CaseSerial, x => x.Order.ProvinceNo)
+            .Map(d => d.SubjectResultSatify, x => x.SubjectResultSatifyCode)
+            .Map(d => d.FirstSatisfaction, x => x.FirstSatisfactionCode)
+            ;
+            //服务工单交办评价
+            config.ForType<PublishVisitDto, DsGetVisitInfoReceive>()
+            .Map(d => d.CaseSerial, x => x.Order.ProvinceNo)
+            .Map(d => d.SubjectResultSatify, x => x.SubjectResultSatifyCode)
+            ;
+
+            //接收
+            //工单交办
+            config.ForType<DsReceiveCaseInfo, AddOrderDto>()
+           .Map(d => d.ProvinceNo, x => x.CaseSerial)
+           .Map(d => d.Title, x => x.CaseTitle)
+           //.Map(d => d.AcceptorName, x => x.CaseRegister)
+           //.Map(d => d.AcceptorStaffNo, x => x.CaseRegisterNo)
+           //.Map(d => d.CreationTime, x => x.CaseDate)
+           .Map(d => d.Contact, x => x.PhoneNumber)
+           .Map(d => d.FromName, x => x.AppLicantName)
+           .Map(d => d.AgeRangeCode, x => x.AppLicantAge)
+           .Map(d => d.LicenceNo, x => x.AppLicantId)
+           // .Map(d => d.Hotspot.ProvinceCode, x => x.CaseAccord)
+           .Map(d => d.Content, x => x.CaseContent)
+           // .Map(d => d.ProcessType, x => x.CaseProcessType)
+           .Map(d => d.IsSecret, x => x.CaseIsSecrect == "1" ? true : false)
+           //  .Map(d => d.IsPublicity, x => x.CaseIsPublic == "1" ? true : false)
+           .Map(d => d.ExpiredTimeProvince, x => x.TfdBackTimeBf)
+           .Map(d => d.AreaCode, x => x.AreaCode)
+           .Map(d => d.Street, x => x.CaseAddress)
+           .Map(d => d.IncidentTime, x => x.EventDate)
+           .Map(d => d.SourceChannelCode, x => x.CaseSource)
+             ;
+
+            //服务工单处理结果
+            config.ForType<OrderFlowDto, DsSubmitCaseResult>()
+           .Map(d => d.CaseSerial, x => x.Order.ProvinceNo)
+           .Map(d => d.DeptName, x => x.Order.ActualHandleOrgName)
+           .Map(d => d.FinishTime, x => x.Order.ActualHandleTime)
+           .Map(d => d.FinishName, x => x.Order.ActualHandlerName)
+           .Map(d => d.FinishNote, x => x.Order.ActualOpinion)
+           .Map(d => d.EndDept, x => x.Order.ActualHandleOrgName)
+           .Map(d => d.EndName, x => x.Order.ActualHandlerName)
+           .Map(d => d.SendTime, x => x.Order.CenterToOrgTime)
+           .Map(d => d.FdBack, x => x.Order.ActualOpinion)
+           .Map(d => d.AreaCode, x => x.Order.AreaCode)
+           .Map(d => d.EndAreaCode, x => x.Order.ActualHandleOrgAreaCode)
+           .Map(d => d.EndAreaName, x => x.Order.ActualHandleOrgAreaName)
+           .Map(d => d.SignTimeBf, x => x.Order.ExpiredTime)
+           .Map(d => d.SignTime, x => x.Order.ActualHandleStepAcceptTime)
+           .Map(d => d.FdBackTimeBf, x => x.Order.ExpiredTime)
+           .Map(d => d.FdBackTime, x => x.Order.ActualHandleTime)
+           .Map(d => d.HandleTimeLong, x => x.Order.HandleDurationWorkday)
+             ;
+
+            ///服务工单交办处理结果
+            config.ForType<OrderFlowDto, DsGetCaseResultReceive>()
+           .Map(d => d.CaseSerial, x => x.Order.ProvinceNo)
+           .Map(d => d.DeptName, x => x.Order.ActualHandleOrgName)
+           .Map(d => d.FinishTime, x => x.Order.ActualHandleTime)
+           .Map(d => d.FinishName, x => x.Order.ActualHandlerName)
+           .Map(d => d.FinishNote, x => x.Order.ActualOpinion)
+           .Map(d => d.EndDept, x => x.Order.ActualHandleOrgName)
+           .Map(d => d.EndName, x => x.Order.ActualHandlerName)
+           .Map(d => d.SendTime, x => x.Order.CenterToOrgTime)
+           .Map(d => d.FdBack, x => x.Order.ActualOpinion)
+           .Map(d => d.AreaCode, x => x.Order.AreaCode)
+           .Map(d => d.EndAreaCode, x => x.Order.ActualHandleOrgAreaCode)
+           .Map(d => d.EndAreaName, x => x.Order.ActualHandleOrgAreaName)
+           .Map(d => d.HandleTimeLong, x => x.Order.HandleDurationWorkday)
+            ;
+
+            //通话记录
+            config.ForType<CallConnectOrderDto, DsSubmitCaseRecord>()
+            .Map(d => d.CallId, x => x.CallRecord.CallId)
+            .Map(d => d.PhoneNumber, x => x.CallRecord.CPN)
+            .Map(d => d.PhoneStatus, x => x.CallRecord.OnState == EOnState.On ? "10" : "20")
+            .Map(d => d.IsPhoneCall, x => x.CallRecord.Direction == ECallDirection.Out ? "1" : "0")
+            .Map(d => d.CallStart, x => x.CallRecord.AnsweredTime)
+            .Map(d => d.CallEnd, x => x.CallRecord.ByeTime)
+            .Map(d => d.InIvr, x => x.CallRecord.InIvrTime)
+            .Map(d => d.InQueue, x => x.CallRecord.InQueueTime)
+            .Map(d => d.CallTime, x => x.CallRecord.BeginRingTime)
+            .Map(d => d.CallLength, x => x.CallRecord.TalkTime)
+            .Map(d => d.SeatNumber, x => x.CallRecord.StaffNo)
+            .Map(d => d.AccordUrl, x => x.CallRecord.Direction == ECallDirection.Out ? x.CallRecord.RecordUrl : x.CallRecord.OtherRecordUrl)
+            ;
+
+            //发起甄别
+            config.ForType<PublishScreenDto, DsScreenCaseInfoSend>()
+            .Map(d => d.CaseSerial, x => x.Order.ProvinceNo)
+            .Map(d => d.AreaCode, x => x.Order.AreaCode)
+           .Map(d => d.ApplyName, x => x.Screen.CreatorName)
+           .Map(d => d.ApplyTime, x => x.Screen.CreationTime)
+           .Map(d => d.ApplyOuName, x => x.Screen.CreatorOrgName)
+           .Map(d => d.ApplyReason, x => x.Screen.Content)
+           ;
+
+            //服务工单督办过程
+            config.ForType<PublishSuperviseDto, DsSendSuperviseProcessInfo>()
+             .Map(d => d.SuperviseSerial, x => x.Supervise.SuperviseSerial)
+             .Map(d => d.AreaCode, x => x.Order.AreaCode)
+             .Map(d => d.ReplyName, x => x.Supervise.ReUser)
+            .Map(d => d.ReplyTime, x => x.Supervise.ReplyTime)
+            .Map(d => d.ReplyOpinion, x => x.Supervise.ReplyContent)
+            ;
+
+            //服务工单督办结果
+            config.ForType<PublishSuperviseDto, DsSendSuperviseResultInfo>()
+            .Map(d => d.SuperviseSerial, x => x.Supervise.SuperviseSerial)
+            .Map(d => d.AreaCode, x => x.Order.AreaCode)
+            .Map(d => d.EndName, x => x.Supervise.ReUser)
+           .Map(d => d.EndDate, x => x.Supervise.ReplyTime)
+           .Map(d => d.EndOpinion, x => x.Supervise.ReplyContent)
+           ;
+
+            //服务工单催单
+            config.ForType<PublishUrgeDto, DsRemindCaseInfo>()
+            .Map(d => d.RemindTime, x => x.Urge.CreationTime)
+            .Map(d => d.RemindName, x => x.Urge.CrUser)
+            .Map(d => d.RemindReasion, x => x.Urge.ApplyContent)
+           .Map(d => d.AreaCode, x => x.Order.AreaCode)
+           .Map(d => d.CaseSerial, x => x.Order.ProvinceNo)
+           ;
+
+            //服务工单退回申请
+            config.ForType<PublishOrderSendBackDto, DsGetCaseBackApply>()
+            .Map(d => d.OrderSendBackId, x => x.SendBack.Id)
+            .Map(d => d.BackType, x => x.SendBack.Handle)
+            .Map(d => d.DealDept, x => x.SendBack.CreatorOrgName)
+           .Map(d => d.DealName, x => x.SendBack.CreatorName)
+           .Map(d => d.CaseSerial, x => x.Order.ProvinceNo)
+           .Map(d => d.AreaCode, x => x.Order.AreaCode)
+           .Map(d => d.ApplyTime, x => x.SendBack.CreationTime)
+           .Map(d => d.BackReason, x => string.IsNullOrEmpty(x.SendBack.AuditOpinion) ? x.SendBack.Content : x.SendBack.AuditOpinion)
+
+           ;
+
+            #region 汇聚扩展数据--拓展信息
+
+            //医疗工单
+            config.ForType<OrderExtensionDto, DsFormMedical>()
+            .Ignore(d => d.Id)
+            .Map(d => d.MedicalName, x => x.MedName)
+            .Map(d => d.MedicalAddr, x => x.MedAddress)
+            .Map(d => d.DepartMent, x => x.MedDepartment)
+            .Map(d => d.Doctor, x => x.MedDoctor)
+            .Map(d => d.PatientName, x => x.MedPatient)
+            .Map(d => d.ClinicCardNum, x => x.MedNo)
+            .Map(d => d.CardNum, x => x.MedIdNo)
+            ;
+
+            //四川政务服务网技术工单
+            config.ForType<OrderExtensionDto, DsFormNetWorktec>()
+            .Ignore(d => d.Id)
+            .Map(d => d.ZwfwAccount, x => x.ZwfwwAccount)
+            .Map(d => d.LinkPeson, x => x.ZwfwwContact)
+            ;
+
+            //电视购物及商铺购买退换货工单
+            config.ForType<OrderExtensionDto, DsFormReturnexChange>()
+            .Ignore(d => d.Id)
+            .Map(d => d.SubjectName, x => x.ExchTv)
+            .Map(d => d.PurchaseTime, x => x.ExchTradeTime)
+            .Map(d => d.ProductName, x => x.ExchProduct)
+            .Map(d => d.Charge, x => x.ExchAmount)
+            .Map(d => d.BusinessName, x => x.ExchName)
+            .Map(d => d.BusunessAddr, x => x.ExchAddress)
+            .Map(d => d.ReceivePerson, x => x.ExchConsignee)
+            .Map(d => d.ReceiveAddr, x => x.ExchConsigneeAddress)
+            ;
+
+            //高速公路工单
+            config.ForType<OrderExtensionDto, DsFormExpressWay>()
+            .Ignore(d => d.Id)
+            .Map(d => d.InWay, x => x.ExpwyEntrance)
+            .Map(d => d.OutWay, x => x.ExpwyExit)
+            .Map(d => d.OperateDate, x => x.ExpwyTime)
+            .Map(d => d.CardNum, x => x.ExpwyNo)
+            ;
+
+            //电视台虚假广告工单
+            config.ForType<OrderExtensionDto, DsFormShamPub>()
+            .Ignore(d => d.Id)
+            .Map(d => d.SubjectName, x => x.AdTv)
+            .Map(d => d.ProductName, x => x.AdProduct)
+            .Map(d => d.PubContent, x => x.AdContent)
+            ;
+
+            //12366热线诉求交办
+            config.ForType<OrderExtensionDto, DsFormTaxationComplaint>()
+            .Ignore(d => d.Id)
+            .Map(d => d.TaxAuthority, x => x.Location12366Sq)
+            .Map(d => d.ComplaintSubject, x => x.Info12366Sq)
+            .Map(d => d.ComplaintType, x => x.Type12366Sq)
+            ;
+
+            //12366热线咨询交办
+            config.ForType<OrderExtensionDto, DsFormTaxationConsulting>()
+            .Ignore(d => d.Id)
+            .Map(d => d.TaxAuthority, x => x.Location12366Zx)
+            .Map(d => d.ComplaintSubject, x => x.Info12366Zx)
+            ;
+
+            //12328服务监督
+            config.ForType<OrderExtensionDto, DsFormTraffic>()
+            .Ignore(d => d.Id)
+            .Map(d => d.AcceptType, x => x.AcceptType12328)
+            .Map(d => d.Customer, x => x.Client12328)
+            ;
+
+            //邮政业消费者申诉
+            config.ForType<OrderExtensionDto, DsFormPost>()
+            .Ignore(d => d.Id)
+            .Map(d => d.AppealName, x => x.MailClaimantName)
+            .Map(d => d.AppealNum, x => x.MailClaimantPhone)
+            .Map(d => d.AppealEnterprise, x => x.MailClaimantEnterprise)
+            .Map(d => d.SenderName, x => x.MailSenderName)
+            .Map(d => d.SenderNum, x => x.MailSenderPhone)
+            .Map(d => d.SenderAddr, x => x.MailSenderAddress)
+            .Map(d => d.AddresseeName, x => x.MailReceiverName)
+            .Map(d => d.AddresseeNum, x => x.MailReceiverPhone)
+            .Map(d => d.AddresseeAddr, x => x.MailReceiverAddress)
+            .Map(d => d.InsuredPrice, x => x.MailAmount)
+            .Map(d => d.IsContact, x => x.MailIsContacted == true ? "是" : "否")
+            .Map(d => d.OperateResult, x => x.MailResult)
+            ;
+
+            //环保举报业务
+            config.ForType<OrderExtensionDto, DsFormEnvironMent>()
+            .Ignore(d => d.Id)
+            .Map(d => d.ComplaintMailBox, x => x.EpEmail)
+            .Map(d => d.PostalAddress, x => x.EpAddress)
+            .Map(d => d.ReportObject, x => x.EpObject)
+            .Map(d => d.DetailedAddr, x => x.EpObjectAddress)
+            .Map(d => d.IndustryType, x => x.EpIndustryType)
+            .Map(d => d.KeyPoint, x => x.EpKeyPoint)
+            ;
+
+            //12315个性化表单--投诉、举报
+            config.ForType<OrderExtensionDto, DsFormMarket>()
+            .Ignore(d => d.Id)
+            .Map(d => d.ApplBasQue, x => x.ComplainClassifyCode)
+            .Map(d => d.ApplBasQueName, x => x.ComplainClassify)
+            .Map(d => d.Zlh, x => x.PatentNo)
+            .Map(d => d.Zlqr, x => x.Patentee)
+            .Map(d => d.Fmmc, x => x.PatentName)
+            .Map(d => d.Zllx, x => x.PatentTypeCode)
+            .Map(d => d.ZllxMc, x => x.PatentType)
+            .Map(d => d.Accsce, x => x.BusinessPosition.AreaCode)
+            .Map(d => d.Sfdd, x => x.BusinessPosition.FullAddress)
+            .Map(d => d.ControversyTime, x => x.OccurrenceTime)
+            .Map(d => d.OBType, x => x.ObjectClassifyCode)
+            .Map(d => d.OBTypeName, x => x.ObjectClassify)
+            .Map(d => d.MdseName, x => x.ObjectClassify)
+            .Map(d => d.SaleMode, x => x.SalesModeCode)
+            .Map(d => d.DsptType, x => x.ComplainTargetCode)
+            .Map(d => d.DsptCode, x => x.ECommercePlatformCode)
+            .Map(d => d.DsptName, x => x.ECommercePlatform)
+            .Map(d => d.BrandCode, x => x.BrandCode)
+            .Map(d => d.BrandName, x => x.Brand)
+            .Map(d => d.BIdNo, x => x.ExternalOrderNo)
+            .Map(d => d.InvoAm, x => x.Amount)
+            .Map(d => d.Jtqdtype, x => x.SalesChannelCode)
+            .Map(d => d.Jtqdname, x => x.SalesChannel)
+            .Map(d => d.ProdName, x => x.ProductName)
+            .Map(d => d.ProdAppNo, x => x.ApprovalNumber)
+            .Map(d => d.ProdPatchNo, x => x.ProductBatchNo)
+            .Map(d => d.ProdTypeSpf, x => x.ProductStandard)
+            .Map(d => d.ProdFty, x => x.Manufacturer)
+            .Map(d => d.ProdSalEnt, x => x.SalesEnterprise)
+            .Map(d => d.ProdValid, x => x.ProductExpiredTime.ToString())
+            .Map(d => d.ProviderAddr, x => x.ConsumerAddress)
+            .Map(d => d.Invopt, x => x.EnterpriseName)
+            .Map(d => d.UBindType, x => x.IndustryClassifyCode)
+            .Map(d => d.UBindTypeName, x => x.IndustryClassify)
+            .Map(d => d.EntType, x => x.MarketTypeCode)
+            .Map(d => d.EntTypeName, x => x.MarketType)
+            .Map(d => d.Addr, x => x.RegisterAddress)
+            .Map(d => d.Sjztlxr, x => x.EnterpriseContact)
+            .Map(d => d.Nbxh, x => x.UnifiedSocialCreditCode)
+            .Map(d => d.RegNo, x => x.RegisterNumber)
+            .Map(d => d.CertType, x => x.LicenceTypeCode)
+            .Map(d => d.CertTypeName, x => x.LicenceType)
+            .Map(d => d.CertNo, x => x.LicenceNo)
+            .Map(d => d.ReveType, x => x.IdentityTypeCode)
+            .Map(d => d.ReveTypeName, x => x.IdentityType)
+            .Map(d => d.Nationality, x => x.NationalityCode)
+            .Map(d => d.NationalityName, x => x.Nationality)
+            .Map(d => d.Folk, x => x.NationCode)
+            .Map(d => d.FolkName, x => x.Nation)
+            .Map(d => d.Peride, x => x.IdentityCode)
+            .Map(d => d.PerideName, x => x.Identity)
+            .Map(d => d.ProviderMail, x => x.Email)
+            .Map(d => d.Qtlxfs, x => x.OtherContact)
+            ;
+
+            #endregion
+
+            #region 协同扩展数据--拓展信息
+
+            //医疗工单
+            config.ForType<DsFormMedical, OrderExtensionDto>()
+            .Ignore(d => d.Id)
+            .Map(d => d.MedName, x => x.MedicalName)
+            .Map(d => d.MedAddress, x => x.MedicalAddr)
+            .Map(d => d.MedDepartment, x => x.DepartMent)
+            .Map(d => d.MedDoctor, x => x.Doctor)
+            .Map(d => d.MedPatient, x => x.PatientName)
+            .Map(d => d.MedNo, x => x.ClinicCardNum)
+            .Map(d => d.MedIdNo, x => x.CardNum)
+            ;
+
+            //四川政务服务网技术工单
+            config.ForType<DsFormNetWorktec, OrderExtensionDto>()
+            .Ignore(d => d.Id)
+            .Map(d => d.ZwfwwAccount, x => x.ZwfwAccount)
+            .Map(d => d.ZwfwwContact, x => x.LinkPeson)
+            ;
+
+            //电视购物及商铺购买退换货工单
+            config.ForType<DsFormReturnexChange, OrderExtensionDto>()
+            .Ignore(d => d.Id)
+            .Map(d => d.ExchTv, x => x.SubjectName)
+            .Map(d => d.ExchTradeTime, x => x.PurchaseTime)
+            .Map(d => d.ExchProduct, x => x.ProductName)
+            .Map(d => d.ExchAmount, x => x.Charge)
+            .Map(d => d.ExchName, x => x.BusinessName)
+            .Map(d => d.ExchAddress, x => x.BusunessAddr)
+            .Map(d => d.ExchConsignee, x => x.ReceivePerson)
+            .Map(d => d.ExchConsigneeAddress, x => x.ReceiveAddr)
+            ;
+
+            //高速公路工单
+            config.ForType<DsFormExpressWay, OrderExtensionDto>()
+            .Ignore(d => d.Id)
+            .Map(d => d.ExpwyEntrance, x => x.InWay)
+            .Map(d => d.ExpwyExit, x => x.OutWay)
+            .Map(d => d.ExpwyTime, x => x.OperateDate)
+            .Map(d => d.ExpwyNo, x => x.CardNum)
+            ;
+
+            //电视台虚假广告工单
+            config.ForType<DsFormShamPub, OrderExtensionDto>()
+            .Ignore(d => d.Id)
+            .Map(d => d.AdTv, x => x.SubjectName)
+            .Map(d => d.AdProduct, x => x.ProductName)
+            .Map(d => d.AdContent, x => x.PubContent)
+            ;
+
+            //12366热线诉求交办
+            config.ForType<DsFormTaxationComplaint, OrderExtensionDto>()
+            .Ignore(d => d.Id)
+            .Map(d => d.Location12366Sq, x => x.TaxAuthority)
+            .Map(d => d.Info12366Sq, x => x.ComplaintSubject)
+            .Map(d => d.Type12366Sq, x => x.ComplaintType)
+            ;
+
+            //12366热线咨询交办
+            config.ForType<DsFormTaxationConsulting, OrderExtensionDto>()
+            .Ignore(d => d.Id)
+            .Map(d => d.Location12366Zx, x => x.TaxAuthority)
+            .Map(d => d.Info12366Zx, x => x.ComplaintSubject)
+            ;
+
+            //12328服务监督
+            config.ForType<DsFormTraffic, OrderExtensionDto>()
+            .Ignore(d => d.Id)
+            .Map(d => d.AcceptType12328, x => x.AcceptType)
+            .Map(d => d.Client12328, x => x.Customer)
+            ;
+
+            //邮政业消费者申诉
+            config.ForType<DsFormPost, OrderExtensionDto>()
+            .Ignore(d => d.Id)
+            .Map(d => d.MailClaimantName, x => x.AppealName)
+            .Map(d => d.MailClaimantPhone, x => x.AppealNum)
+            .Map(d => d.MailClaimantEnterprise, x => x.AppealEnterprise)
+            .Map(d => d.MailSenderName, x => x.SenderName)
+            .Map(d => d.MailSenderPhone, x => x.SenderNum)
+            .Map(d => d.MailSenderAddress, x => x.SenderAddr)
+            .Map(d => d.MailReceiverName, x => x.AddresseeName)
+            .Map(d => d.MailReceiverPhone, x => x.AddresseeNum)
+            .Map(d => d.MailReceiverAddress, x => x.AddresseeAddr)
+            .Map(d => d.MailAmount, x => x.InsuredPrice)
+            //   .Map(d => d.MailIsContacted, x => x.  IsContact == true ? "是" : "否")
+            .Map(d => d.MailResult, x => x.OperateResult)
+            ;
+
+            //环保举报业务
+            config.ForType<DsFormEnvironMent, OrderExtensionDto>()
+            .Ignore(d => d.Id)
+            .Map(d => d.EpEmail, x => x.ComplaintMailBox)
+            .Map(d => d.EpAddress, x => x.PostalAddress)
+            .Map(d => d.EpObject, x => x.ReportObject)
+            .Map(d => d.EpObjectAddress, x => x.DetailedAddr)
+            .Map(d => d.EpIndustryType, x => x.IndustryType)
+            .Map(d => d.EpKeyPoint, x => x.KeyPoint)
+            ;
+
+            //12315个性化表单--投诉、举报
+            config.ForType<DsFormMarket, OrderExtensionDto>()
+            .Ignore(d => d.Id)
+            .Map(d => d.ComplainClassifyCode, x => x.ApplBasQue)
+            .Map(d => d.ComplainClassify, x => x.ApplBasQueName)
+            .Map(d => d.PatentNo, x => x.Zlh)
+            .Map(d => d.Patentee, x => x.Zlqr)
+            .Map(d => d.PatentName, x => x.Fmmc)
+            .Map(d => d.PatentTypeCode, x => x.Zllx)
+            .Map(d => d.PatentType, x => x.ZllxMc)
+            .Map(d => d.BusinessPosition.AreaCode, x => x.Accsce)
+            .Map(d => d.BusinessPosition.FullAddress, x => x.Sfdd)
+            .Map(d => d.OccurrenceTime, x => x.ControversyTime)
+            .Map(d => d.ObjectClassifyCode, x => x.OBType)
+            .Map(d => d.ObjectClassify, x => x.OBTypeName)
+            .Map(d => d.ObjectClassify, x => x.MdseName)
+            .Map(d => d.SalesModeCode, x => x.SaleMode)
+            .Map(d => d.ComplainTargetCode, x => x.DsptType)
+            .Map(d => d.ECommercePlatformCode, x => x.DsptCode)
+            .Map(d => d.ECommercePlatform, x => x.DsptName)
+            .Map(d => d.BrandCode, x => x.BrandCode)
+            .Map(d => d.Brand, x => x.BrandName)
+            .Map(d => d.ExternalOrderNo, x => x.BIdNo)
+            .Map(d => d.Amount, x => x.InvoAm)
+            .Map(d => d.SalesChannelCode, x => x.Jtqdtype)
+            .Map(d => d.SalesChannel, x => x.Jtqdname)
+            .Map(d => d.ProductName, x => x.ProdName)
+            .Map(d => d.ApprovalNumber, x => x.ProdAppNo)
+            .Map(d => d.ProductBatchNo, x => x.ProdPatchNo)
+            .Map(d => d.ProductStandard, x => x.ProdTypeSpf)
+            .Map(d => d.Manufacturer, x => x.ProdFty)
+            .Map(d => d.SalesEnterprise, x => x.ProdSalEnt)
+            .Map(d => d.ProductExpiredTime, x => x.ProdValid)
+            .Map(d => d.ConsumerAddress, x => x.ProviderAddr)
+            .Map(d => d.EnterpriseName, x => x.Invopt)
+            .Map(d => d.IndustryClassifyCode, x => x.UBindType)
+            .Map(d => d.IndustryClassify, x => x.UBindTypeName)
+            .Map(d => d.MarketTypeCode, x => x.EntType)
+            .Map(d => d.MarketType, x => x.EntTypeName)
+            .Map(d => d.RegisterAddress, x => x.Addr)
+            .Map(d => d.EnterpriseContact, x => x.Sjztlxr)
+            .Map(d => d.UnifiedSocialCreditCode, x => x.Nbxh)
+            .Map(d => d.RegisterNumber, x => x.RegNo)
+            .Map(d => d.LicenceTypeCode, x => x.CertType)
+            .Map(d => d.LicenceType, x => x.CertTypeName)
+            .Map(d => d.LicenceNo, x => x.CertNo)
+            .Map(d => d.IdentityTypeCode, x => x.ReveType)
+            .Map(d => d.IdentityType, x => x.ReveTypeName)
+            .Map(d => d.NationalityCode, x => x.Nationality)
+            .Map(d => d.Nationality, x => x.NationalityName)
+            .Map(d => d.NationCode, x => x.Folk)
+            .Map(d => d.Nation, x => x.FolkName)
+            .Map(d => d.IdentityCode, x => x.Peride)
+            .Map(d => d.Identity, x => x.PerideName)
+            .Map(d => d.Email, x => x.ProviderMail)
+            .Map(d => d.OtherContact, x => x.Qtlxfs)
+            ;
+
+            #endregion
+
+            #region 市州数据交换
+            //市州数据-接受
+            config.ForType<DsCityDataReceive, OrderDto>()
+               .Ignore(d => d.Id)
+               .Map(d => d.Title, x => x.Title)
+               .Map(d => d.ExternalId, x => x.FSHCode)
+               .Map(d => d.AcceptType, x => x.PurTypeName)
+               .Map(d => d.HotspotSpliceName, x => x.ConTypeName)
+               .Map(d => d.FromName, x => x.LinkName)
+               .Map(d => d.FromGender, x => x.Gender)
+               .Map(d => d.Contact, x => x.Mobile)
+               .Map(d => d.Address, x => x.Address)
+               .Map(d => d.Content, x => x.Content)
+               .Map(d => d.Source, x => string.IsNullOrEmpty(x.Source) ? Hotline.Share.Enums.Order.ESource.Hotline : Hotline.Share.Enums.Order.ESource.HotlineImport)
+              ;
+
+            //市州数据-发送
+            config.ForType<OrderDto, DsCityDataSend>()
+               .Ignore(d => d.Id)
+               .Map(d => d.Title, x => x.Title)
+               .Map(d => d.FSHCode, x => x.No)
+               .Map(d => d.PurTypeName, x => x.AcceptType)
+               .Map(d => d.ConTypeName, x => x.HotspotSpliceName)
+               .Map(d => d.LinkName, x => x.FromName)
+               .Map(d => d.Gender, x => x.FromGender)
+               .Map(d => d.Mobile, x => x.Contact)
+               .Map(d => d.Address, x => x.Address)
+               .Map(d => d.Content, x => x.Content)
+               .Map(d => d.Source, x => x.Source)
+              ;
+
+            #endregion
+
+            #region 企业服务
+            //企业数据推送
+            config.ForType<OrderDto, DsDataWorkOrderSend>()
+               .Ignore(d => d.Id)
+               .Map(d => d.WorkOrderTitle, x => x.Title)
+               .Map(d => d.WorkOrderNo, x => x.No)
+               .Map(d => d.AcceptTime, x => x.CreationTime)
+               .Map(d => d.AppealChannel, x => x.SourceChannel)
+               .Map(d => d.ContactPhone, x => x.Contact)
+               .Map(d => d.ContactName, x => x.FromName)
+               .Map(d => d.AppealType, x => x.AcceptType)
+                .Map(d => d.HotspotType, x => x.HotspotSpliceName)
+               .Map(d => d.AppealContent, x => x.Content)
+               .Map(d => d.UrgencyDegree, x => x.EmergencyLevel.ToString())
+               .Map(d => d.RegionCode, x => x.AreaCode)
+               .Map(d => d.ExpirationTime, x => x.ExpiredTime)
+               .Map(d => d.IncidentTime, x => x.IncidentTime)
+              ;
+
+            //企业数据推送
+            config.ForType<OrderFlowDto, DsOrderWorkFlow>()
+               .Ignore(d => d.Id)
+               .Map(d => d.OrderId, x => x.Order.Id)
+               .Map(d => d.WorkflowId, x => x.Order.WorkflowId)
+              ;
+            #endregion
+
+
+            #region 门户网站数据
+            //办件摘编列表
+            config.ForType<DsOrder, OrderListDto>()
+            .Map(d => d.FlowID, x => x.OrderId)
+               .Map(d => d.FlowCode, x => x.OrderNo)
+               .Map(d => d.FlowPwd, x => x.Password)
+               .Map(d => d.FlowTitle, x => string.IsNullOrEmpty(x.ArrangeTitle) ? x.Title : x.ArrangeTitle)
+               .Map(d => d.FlowFromName, x => x.CaseSource)
+               .Map(d => d.FlowPurTypeName, x => x.CaseType)
+               .Map(d => d.ConTypeName, x => x.HotspotName)
+               .Map(d => d.FlowAddDate, x => x.CaseDate)
+               .Map(d => d.PubDate, x => x.PublishDate)
+               .Map(d => d.RSFlagName, x => x.HandleState)
+          ;
+
+            //办件摘编详情
+            config.ForType<DsOrder, OrderDetail>()
+            .Map(d => d.FlowID, x => x.OrderId)
+            .Map(d => d.FlowCode, x => x.OrderNo)
+            .Map(d => d.Pwd, x => x.Password)
+            .Map(d => d.FlowTitle, x => string.IsNullOrEmpty(x.ArrangeTitle) ? x.Title : x.ArrangeTitle)
+            .Map(d => d.FlowFromName, x => x.CaseSource)
+            .Map(d => d.FlowPurTypeName, x => x.CaseType)
+            .Map(d => d.FlowConTypeName, x => x.HotspotName)
+            .Map(d => d.FlowAddDate, x => x.CaseDate)
+            .Map(d => d.FlowEndDate, x => x.ActualHandleTime)
+            .Map(d => d.FlowBMID, x => x.ActualHandleOrgCode)
+            .Map(d => d.FlowBMName, x => x.ActualHandleOrgName)
+            .Map(d => d.FlowLKName, x => x.FromName)
+            .Map(d => d.FlowRSFlagName, x => x.HandleState)
+            .Map(d => d.FlowPubFlagName, x => x.IsPublish == Hotline.Share.Enums.DataSharing.EDsPublishState.Open ? "公开" : x.IsPublish == Hotline.Share.Enums.DataSharing.EDsPublishState.NotPublic ? "不公开" : "未发布")
+            .Map(d => d.FlowContent, x => string.IsNullOrEmpty(x.ArrangeContent) ? x.Content : x.ArrangeContent)
+            .Map(d => d.FlowResult, x => string.IsNullOrEmpty(x.ArrangeOpinion) ? x.ActualOpinion : x.ArrangeOpinion)
+       ;
+            //注册用户数据
+            config.ForType<UserModelDto, DsWebUserRegister>()
+            .Map(d => d.WebUserName, x => x.name)
+            .Map(d => d.WebLoginName, x => x.username)
+            .Map(d => d.PhoneNum, x => x.employeeMobile)
+            .Map(d => d.IDCard, x => x.idNumber)
+            .Map(d => d.Address, x => x.address)
+            .Map(d => d.Gender, x => x.sex)
+            ;
+
+            //统一认证数据
+            config.ForType<UserModelDto, DsWebUserAuth>()
+            .Map(d => d.DataId, x => x.id)
+            .Map(d => d.Type, x => x.type)
+            .Map(d => d.Address, x => x.address)
+            .Map(d => d.Birth, x => x.birth)
+            .Map(d => d.DocumentType, x => x.document_type)
+            .Map(d => d.IdNumber, x => x.idNumber)
+            .Map(d => d.Nationality, x => x.nationality)
+            .Map(d => d.Name, x => x.name)
+            .Map(d => d.Sex, x => x.sex)
+            .Map(d => d.DisplayName, x => x.displayName)
+            .Map(d => d.Username, x => x.username)
+            .Map(d => d.EmployeeMobile, x => x.employeeMobile)
+            ;
+
+            //门户网站写信
+            config.ForType<DsWebFlowAccept, AddOrderDto>()
+            .Map(d => d.FromName, x => x.LKName)
+            .Map(d => d.FromGender, x => x.Sex == "男" ? EGender.Male : x.Sex == "女" ? EGender.Female : EGender.Unknown)
+            .Map(d => d.IsSecret, x => x.IsSecret)
+            .Map(d => d.LicenceNo, x => x.IDCard)
+            .Map(d => d.Contact, x => x.Mobile)
+            .Map(d => d.FullAddress, x => x.Address)
+            .Map(d => d.Title, x => x.Title)
+            .Map(d => d.Content, x => x.Content)
+            .Map(d => d.AcceptType, x => x.PurTypeName)
+            .Map(d => d.AcceptTypeCode, x => x.PurTypeID)
+            ;
+            #endregion
+        }
+    }
+}

+ 1 - 0
src/Hotline.Application/Mappers/OrderMapperConfigs.cs

@@ -28,6 +28,7 @@ public class OrderMapperConfigs : IRegister
             .Map(d => d.StartTime, s => s.CreationTime)
             .Ignore(d => d.Status)
             .Ignore(d => d.Title)
+            .Ignore(d => d.ExternalId)
             .AfterMapping((s, d) =>
             {
                 d.UpdateHandlingStatus(s.IsInCountersign);

+ 53 - 0
src/Hotline.Share/Dtos/DataSharing/ConvergenceMedia/ConvergenceMediaDeResponse.cs

@@ -0,0 +1,53 @@
+namespace Hotline.Share.Dtos.DataSharing.ConvergenceMedia
+{
+    public class ConvergenceMediaDeResponse<TData>
+    {
+        /// <summary>
+        /// 状态
+        /// </summary>
+        public string code { get; set; }
+
+        /// <summary>
+        /// 描述
+        /// </summary>
+        public string msg { get; set; }
+
+        /// <summary>
+        /// 数据
+        /// </summary>
+        public TData data { get; set; }
+
+        /// <summary>
+        /// 成功
+        /// </summary>
+        /// <param name="data"></param>
+        /// <param name="description"></param>
+        /// <returns></returns>
+        public static List<ConvergenceMediaDeResponse<TData>> Success(TData data, string? description = "")
+        {
+            return new List<ConvergenceMediaDeResponse<TData>>() { new ConvergenceMediaDeResponse<TData>
+            {
+                code = "1",
+                data = data,
+                msg = (description ?? "您已成功提交数据!")
+            }};
+        }
+
+        /// <summary>
+        /// 失败
+        /// </summary>
+        /// <param name="data"></param>
+        /// <param name="code"></param>
+        /// <param name="description"></param>
+        /// <returns></returns>
+        public static List<ConvergenceMediaDeResponse<TData>> Failed(TData data, string? code = "0", string? description = "")
+        {
+            return new List<ConvergenceMediaDeResponse<TData>>() { new ConvergenceMediaDeResponse<TData>
+            {
+               code = code,
+                data = data,
+                msg = (description ?? "接口调用失败!")
+            }};
+        }
+    }
+}

+ 20 - 0
src/Hotline.Share/Dtos/DataSharing/ConvergenceMedia/GetOrderByRunDataDto.cs

@@ -0,0 +1,20 @@
+namespace Sharing.Share.Dtos.DataSharing.ConvergenceMedia
+{
+    public class GetOrderByRunDataDto
+    {
+        /// <summary>
+        /// 办理部门
+        /// </summary>
+        public string BMName { get; set; }
+
+        /// <summary>
+        /// 到期时间
+        /// </summary>
+        public DateTime? TTime { get; set; }
+
+        /// <summary>
+        /// 办理时间
+        /// </summary>
+        public DateTime? DisposeDate { get; set; }
+    }
+}

+ 64 - 0
src/Hotline.Share/Dtos/DataSharing/ConvergenceMedia/GetOrderMediaDataDto.cs

@@ -0,0 +1,64 @@
+namespace Sharing.Share.Dtos.DataSharing.ConvergenceMedia
+{
+    /// <summary>
+    /// 工单列表数据
+    /// </summary>
+    public class GetOrderMediaDataDto
+    {
+        /// <summary>
+        /// 总页数
+        /// </summary>
+        public int PageCount { get; set; } = 0;
+
+        /// <summary>
+        /// 数据
+        /// </summary>
+        public IReadOnlyList<GetOrderMediaDataListDto> data { get; set; }
+    }
+
+    /// <summary>
+    /// 工单数据
+    /// </summary>
+    public class GetOrderMediaDataListDto
+    {
+        /// <summary>
+        /// 索引
+        /// </summary>
+        public string RowID { get; set; }
+
+        /// <summary>
+        /// 标识
+        /// </summary>
+        public string FlowID { get; set; }
+
+        /// <summary>
+        /// 工单编号
+        /// </summary>
+        public string Code { get; set; }
+
+        /// <summary>
+        /// 工单标题
+        /// </summary>
+        public string Title { get; set; }
+
+        /// <summary>
+        /// 保存时间
+        /// </summary>
+        public string AddDate { get; set; }
+
+        /// <summary>
+        /// 工单来源
+        /// </summary>
+        public string FromName { get; set; }
+
+        /// <summary>
+        /// 受理类型
+        /// </summary>
+        public string PurTypeName { get; set; }
+
+        /// <summary>
+        /// 办理状态
+        /// </summary>
+        public string ResultState { get; set; }
+    }
+}

+ 53 - 0
src/Hotline.Share/Dtos/DataSharing/ConvergenceMedia/GetOrderMediaReceiveDto.cs

@@ -0,0 +1,53 @@
+namespace Sharing.Share.Dtos.DataSharing.ConvergenceMedia
+{
+    /// <summary>
+    /// 工单列表
+    /// </summary>
+    public record GetOrderMediaReceiveDto
+    {
+        /// <summary>
+        /// 接口密钥
+        /// </summary>
+        public string Code { get; set; }
+
+        /// <summary>
+        /// 工单编号
+        /// </summary>
+        public string AcceptCode { get; set; }
+
+        /// <summary>
+        /// 标题
+        /// </summary>
+        public string Title { get; set; }
+
+        /// <summary>
+        /// 手机号
+        /// </summary>
+        public string Mobile { get; set; }
+
+        /// <summary>
+        /// 受理类型编码
+        /// </summary>
+        public int PurTypeID { get; set; }
+
+        /// <summary>
+        /// 开始时间(格式:2020-01-01)
+        /// </summary>
+        public string StartDate { get; set; }
+
+        /// <summary>
+        /// 结束时间(格式:2020-01-01)
+        /// </summary>
+        public string EndDate { get; set; }
+
+        /// <summary>
+        /// 当前页
+        /// </summary>
+        public int CurrentPage { get; set; } = 1;
+
+        /// <summary>
+        /// 查询每页大小(每页最大20条)
+        /// </summary>
+        public int PageSize { get; set; } = 10;
+    }
+}

+ 43 - 0
src/Hotline.Share/Dtos/DataSharing/ConvergenceMedia/GetOrderMediaReceiveOpenDto.cs

@@ -0,0 +1,43 @@
+namespace Sharing.Share.Dtos.DataSharing.ConvergenceMedia
+{
+    /// <summary>
+    /// 答复公开
+    /// </summary>
+    public class GetOrderMediaReceiveOpenDto
+    {
+        /// <summary>
+        /// 接口密钥
+        /// </summary>
+        public string Code { get; set; }
+
+        /// <summary>
+        /// 标题
+        /// </summary>
+        public string Title { get; set; }
+
+        /// <summary>
+        /// 受理类型编码
+        /// </summary>
+        public int PurTypeID { get; set; }
+
+        /// <summary>
+        /// 开始时间(格式:2020-01-01)
+        /// </summary>
+        public string StartDate { get; set; }
+
+        /// <summary>
+        /// 结束时间(格式:2020-01-01)
+        /// </summary>
+        public string EndDate { get; set; }
+
+        /// <summary>
+        /// 当前页
+        /// </summary>
+        public int CurrentPage { get; set; } = 1;
+
+        /// <summary>
+        /// 查询每页大小(每页最大20条)
+        /// </summary>
+        public int PageSize { get; set; } = 10;
+    }
+}

+ 15 - 0
src/Hotline.Share/Dtos/DataSharing/ConvergenceMedia/GetPurTypeReportDataDto.cs

@@ -0,0 +1,15 @@
+namespace Sharing.Share.Dtos.DataSharing.ConvergenceMedia
+{
+    public class GetPurTypeReportDataDto
+    {
+        /// <summary>
+        /// 受理分类名称
+        /// </summary>
+        public string PurTypeName { get; set; }
+
+        /// <summary>
+        /// 总数
+        /// </summary>
+        public int Count { get; set; }
+    }
+}

+ 87 - 0
src/Hotline.Share/Dtos/DataSharing/ConvergenceMedia/MediaDataReceiveDto.cs

@@ -0,0 +1,87 @@
+namespace Hotline.Share.Dtos.DataSharing.ConvergenceMedia
+{
+    public class MediaDataReceiveDto
+    {
+        /// <summary>
+        /// 密钥
+        /// </summary>
+        [MDisplayName("密钥")]
+        [VRequired]
+        public string Code { get; set; }
+
+        /// <summary>
+        /// 受理类型编码
+        /// </summary>
+        [MDisplayName("受理类型编码")]
+        [VRequired]
+        public int PurTypeName { get; set; }
+
+        /// <summary>
+        /// 标题
+        /// </summary>
+        [MDisplayName("标题")]
+        [VRequired]
+        [VStringLength(0, 200)]
+        public string Title { get; set; }
+
+        /// <summary>
+        /// 来电人名称
+        /// </summary>
+        [MDisplayName("来电人名称")]
+        [VRequired]
+        [VStringLength(0, 20)]
+        public string LinkName { get; set; }
+
+        /// <summary>
+        /// 性别 0:未知,1:男,2:女
+        /// </summary>
+        [MDisplayName("性别")]
+        public string Gender { get; set; } = "0";
+
+        /// <summary>
+        /// 联系电话
+        /// </summary>
+        [MDisplayName("联系电话")]
+        [VRequired]
+        [VStringLength(0, 12)]
+        public string Mobile { get; set; }
+
+        /// <summary>
+        /// 邮箱
+        /// </summary>
+        [MDisplayName("邮箱")]
+        [VStringLength(0, 100)]
+        public string Mail { get; set; }
+
+        /// <summary>
+        /// 地址
+        /// </summary>
+        [MDisplayName("地址")]
+        [VRequired]
+        [VStringLength(0, 200)]
+        public string Address { get; set; }
+
+        /// <summary>
+        /// 内容
+        /// </summary>
+        [MDisplayName("内容")]
+        [VRequired]
+        [VStringLength(0, 7000)]
+        public string Content { get; set; }
+
+        /// <summary>
+        /// 是否保密: 0、不保密 ;1、保密
+        /// </summary>
+        [MDisplayName("是否保密")]
+        [VRequired]
+        public int Secrecy { get; set; }
+
+        /// <summary>
+        /// 区域类型编码
+        /// </summary>
+        [MDisplayName("区域类型编码")]
+        [VRequired]
+        public int AreaID { get; set; }
+
+    }
+}

+ 70 - 0
src/Hotline.Share/Dtos/DataSharing/ConvergenceMedia/MediaOrderDetailDataDto.cs

@@ -0,0 +1,70 @@
+namespace Sharing.Share.Dtos.DataSharing.ConvergenceMedia
+{
+    public class MediaOrderDetailDataDto
+    {
+        /// <summary>
+        /// 标识
+        /// </summary>
+        public string FlowID { get; set; }
+
+        /// <summary>
+        /// 工单编号
+        /// </summary>
+        public string FlowCode { get; set; }
+
+        /// <summary>
+        /// 工单标题
+        /// </summary>
+        public string FlowTitle { get; set; }
+
+        /// <summary>
+        /// 工单来源
+        /// </summary>
+        public string FlowFromName { get; set; }
+
+        /// <summary>
+        /// 受理类型
+        /// </summary>
+        public string FlowPurTypeName { get; set; }
+
+        /// <summary>
+        /// 热点类型
+        /// </summary>
+        public string FlowConTypeName { get; set; }
+
+        /// <summary>
+        /// 保存时间
+        /// </summary>
+        public string FlowAddDate { get; set; }
+
+        /// <summary>
+        /// 联系人
+        /// </summary>
+        public string FlowLKName { get; set; }
+
+        /// <summary>
+        /// 办理部门
+        /// </summary>
+        public string FlowBMName { get; set; }
+
+        /// <summary>
+        /// 办理状态
+        /// </summary>
+        public string FlowRSFlagName { get; set; }
+
+        /// <summary>
+        /// 受理内容
+        /// </summary>
+        public string FlowContent { get; set; }
+
+        /// <summary>
+        /// 处理结果
+        /// </summary>
+        public string FlowResultg { get; set; }
+    }
+
+    public class MediaOrderDetailDataDtoList
+    {
+        public IReadOnlyList<MediaOrderDetailDataDto> Data { get; set; }
+    }
+}

+ 26 - 0
src/Hotline.Share/Dtos/DataSharing/ConvergenceMedia/MediaOrderDetailReceiveDto.cs

@@ -0,0 +1,26 @@
+namespace Hotline.Share.Dtos.DataSharing.ConvergenceMedia
+{
+    public class MediaOrderDetailReceiveDto
+    {
+        /// <summary>
+        /// 密钥
+        /// </summary>
+        [MDisplayName("密钥")]
+        [VRequired]
+        public string Code { get; set; }
+
+        /// <summary>
+        /// 工单编号
+        /// </summary>
+        [MDisplayName("工单编号")]
+        [VRequired]
+        public string AcceptCode { get; set; }
+
+        /// <summary>
+        /// 工单密码
+        /// </summary>
+        [MDisplayName("工单密码")]
+        [VRequired]
+        public string AcceptPwd { get; set; }
+    }
+}

+ 25 - 0
src/Hotline.Share/Dtos/DataSharing/ConvergenceMedia/WriteOrderResponseDto.cs

@@ -0,0 +1,25 @@
+namespace Hotline.Share.Dtos.DataSharing.ConvergenceMedia
+{
+    public class WriteOrderResponseDto
+    {
+        /// <summary>
+        /// 状态
+        /// </summary>
+        public string Code { get; set; }
+
+        /// <summary>
+        /// 消息
+        /// </summary>
+        public string msg { get; set; }
+
+        /// <summary>
+        /// 受理编号
+        /// </summary>
+        public string AcceptCode { get; set; }
+
+        /// <summary>
+        /// 受理密码
+        /// </summary>
+        public string AcceptPwd { get; set; }
+    }
+}

+ 153 - 0
src/Hotline.Share/Dtos/DataSharing/DaoShu110/ChainAlarm_DS.cs

@@ -0,0 +1,153 @@
+using System.Text.Json.Serialization;
+
+namespace Hotline.Share.Dtos.DataSharing.DaoShu110
+{
+    /// <summary>
+    /// 道枢受理工单表
+    /// </summary>
+    public class ChainAlarm_DS
+    {
+        /// <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("JJDBH")]
+        [MDisplayName("接警单编号")]
+        [VRequired]
+        public string AlarmReceiptNumber { get; set; }
+
+        /// <summary>
+        /// 报警电话
+        /// </summary>
+        [JsonPropertyName("BJDH")]
+        [MDisplayName("报警电话")]
+        [VRequired]
+        public string CallPoliceNumber { 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/Hotline.Share/Dtos/DataSharing/DaoShu110/ChainDeal_DS.cs

@@ -0,0 +1,124 @@
+using System.Text.Json.Serialization;
+
+namespace Hotline.Share.Dtos.DataSharing.DaoShu110
+{
+    /// <summary>
+    /// 道枢办理结果表
+    /// </summary>
+    public class ChainDeal_DS
+    {
+        /// <summary>
+        /// 接警单编号
+        /// </summary>
+        [JsonPropertyName("JJDBH")]
+        [MDisplayName("接警单编号")]
+        [VRequired]
+        public string AlarmReceiptNumber { 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("TSSJ")]
+        [MDisplayName("入库时间")]
+        [VRequired]
+        public string WarehousingTime { 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>
+        /// 处置类型 1正常 2退回 3回访
+        /// </summary>
+        [JsonPropertyName("CZLX")]
+        [MDisplayName("处置类型")]
+        [VRequired]
+        public int DisposalType { get; set; }
+    }
+}

+ 52 - 0
src/Hotline.Share/Dtos/DataSharing/DaoShu110/DaoShuDeResponse.cs

@@ -0,0 +1,52 @@
+namespace Hotline.Share.Dtos.DataSharing.DaoShu110
+{
+    public class DaoShuDeResponse<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 DaoShuDeResponse<TData> Succeed(TData data, string? description = "")
+        {
+            return new DaoShuDeResponse<TData>
+            {
+                rcode = 0,
+                rdata = data,
+                rmsg = (description ?? "调用成功")
+            };
+        }
+
+        /// <summary>
+        /// 失败
+        /// </summary>
+        /// <param name="data"></param>
+        /// <param name="description"></param>
+        /// <returns></returns>
+        public static DaoShuDeResponse<TData> Failed(TData data, string? description = "")
+        {
+            return new DaoShuDeResponse<TData>
+            {
+                rcode = 0,
+                rdata = data,
+                rmsg = (description ?? "调用失败")
+            };
+        }
+    }
+}

+ 29 - 0
src/Hotline.Share/Dtos/DataSharing/DaoShu110/Get_Knowledge.cs

@@ -0,0 +1,29 @@
+namespace Hotline.Share.Dtos.DataSharing.DaoShu110
+{
+    /// <summary>
+    /// 知识库
+    /// </summary>
+    public class Get_Knowledge
+    {
+        /// <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; }
+    }
+}
+

+ 37 - 0
src/Hotline.Share/Dtos/DataSharing/DaoShu110/KnowledgeDto.cs

@@ -0,0 +1,37 @@
+using System.Text.Json.Serialization;
+
+namespace Hotline.Share.Dtos.DataSharing.DaoShu110
+{
+    public class KnowledgeDto
+    {
+        /// <summary>
+        /// 知识库ID
+        /// </summary>
+        [JsonPropertyName("id")]
+        public string Id { get; set; }
+
+        /// <summary>
+        /// 标题
+        /// </summary>
+        [JsonPropertyName("title")]
+        public string KName { get; set; }
+
+        /// <summary>
+        /// 知识创建时间
+        /// </summary>
+        [JsonPropertyName("createTime")]
+        public string CreatDate { get; set; }
+    }
+
+    /// <summary>
+    /// 知识内容
+    /// </summary>
+    public class KnowledgeContent
+    {
+        /// <summary>
+        /// 知识内容
+        /// </summary>
+        [JsonPropertyName("content")]
+        public string KContent { get; set; }
+    }
+}

+ 31 - 0
src/Hotline.Share/Dtos/DataSharing/DaoShu110/OpenData.cs

@@ -0,0 +1,31 @@
+using System.Text.Json.Serialization;
+
+namespace Hotline.Share.Dtos.DataSharing.DaoShu110
+{
+    public class OpenData
+    {
+        /// <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回访
+        /// </summary>
+        [JsonPropertyName("CZLX")]
+        public int DisposalType { get; set; } = 1;
+    }
+}

+ 18 - 0
src/Hotline.Share/Dtos/DataSharing/DaoShu110/SM4Context.cs

@@ -0,0 +1,18 @@
+namespace Hotline.Share.Dtos.DataSharing.DaoShu110
+{
+    public class SM4Context
+    {
+        public int mode;
+
+        public long[] sk;
+
+        public bool isPadding;
+
+        public SM4Context()
+        {
+            this.mode = 1;
+            this.isPadding = true;
+            this.sk = new long[32];
+        }
+    }
+}

+ 104 - 0
src/Hotline.Share/Dtos/DataSharing/DataExchange/CityDataReceiveDto.cs

@@ -0,0 +1,104 @@
+using Hotline.Share.Dtos.DataSharing;
+
+namespace Sharing.Share.Dtos.DataSharing.DataExchange
+{
+    public class CityDataReceiveDto
+    {
+        /// <summary>
+        /// 密钥
+        /// </summary>
+        [MDisplayName("密钥")]
+        [VRequired]
+        public string Code { get; set; }
+
+        /// <summary>
+        /// 来源
+        /// </summary>
+        [MDisplayName("来源")]
+        [VRequired]
+        public string Source { get; set; }
+
+        /// <summary>
+        /// 工单编号
+        /// </summary>
+        [MDisplayName("撤单时间")]
+        [VRequired]
+        public string FSHCode { get; set; }
+
+        /// <summary>
+        /// 0:市民、1:企业
+        /// </summary>
+        [MDisplayName("请输入正确的市民、企业类型")]
+        [VRequired]
+        public string ServerName { get; set; }
+
+        /// <summary>
+        /// 信件类别
+        /// </summary>
+        [MDisplayName("信件类别")]
+        [VRequired]
+        public string PurTypeName { get; set; }
+
+        /// <summary>
+        /// 热点
+        /// </summary>
+        [MDisplayName("热点")]
+        [VRequired]
+        public string ConTypeName { get; set; }
+
+        /// <summary>
+        /// 标题
+        /// </summary>
+        [MDisplayName("标题")]
+        [VRequired]
+        [VStringLength(0, 100)]
+        public string Title { get; set; }
+
+        /// <summary>
+        /// 来电人名称
+        /// </summary>
+        [MDisplayName("来电人名称")]
+        [VRequired]
+        [VStringLength(0, 20)]
+        public string LinkName { get; set; }
+
+        /// <summary>
+        /// 性别 0:未知,1:男,2:女
+        /// </summary>
+        [MDisplayName("性别")]
+        [VRequired]
+        public string Gender { get; set; }
+
+        /// <summary>
+        /// 联系电话
+        /// </summary>
+        [MDisplayName("联系电话")]
+        [VRequired]
+        [VStringLength(0, 12)]
+        public string Mobile { get; set; }
+
+        /// <summary>
+        /// 邮箱
+        /// </summary>
+        [MDisplayName("邮箱")]
+        [VStringLength(0, 100)]
+        public string Mail { get; set; }
+
+        /// <summary>
+        /// 地址
+        /// </summary>
+        [MDisplayName("地址")]
+        [VRequired]
+        [VStringLength(0, 200)]
+        public string Address { get; set; }
+
+        /// <summary>
+        /// 内容
+        /// </summary>
+        [MDisplayName("内容")]
+        [VRequired]
+        [VStringLength(0, 7000)]
+        public string Content { get; set; }
+
+    }
+}

+ 61 - 0
src/Hotline.Share/Dtos/DataSharing/DataExchange/DataExchangeDeReponse.cs

@@ -0,0 +1,61 @@
+namespace Hotline.Share.Dtos.DataSharing.DataExchange
+{
+    public class DataExchangeDeReponse
+    {
+        /// <summary>
+        /// 状态
+        /// </summary>
+        public string code { get; set; }
+
+        /// <summary>
+        /// 描述
+        /// </summary>
+        public string msg { get; set; }
+
+        /// <summary>
+        /// 受理编号
+        /// </summary>
+        public string AcceptCode { get; set; }
+
+        /// <summary>
+        /// 受理密码
+        /// </summary>
+        public string AcceptPwd { get; set; }
+
+        /// <summary>
+        /// 成功
+        /// </summary>
+        /// <param name="OrderCode"></param>
+        /// <param name="OrderPwd"></param>
+        /// <param name="description"></param>
+        /// <returns></returns>
+        public static DataExchangeDeReponse Success(string OrderCode, string OrderPwd, string? description = "")
+        {
+            return new DataExchangeDeReponse
+            {
+                code = "1",
+                AcceptCode = OrderCode,
+                AcceptPwd = OrderPwd,
+                msg = (description ?? "您已成功提交数据!")
+            };
+        }
+
+        /// <summary>
+        /// 失败
+        /// </summary>
+        /// <param name="code"></param>
+        /// <param name="description"></param>
+        /// <returns></returns>
+        public static DataExchangeDeReponse Failed(string? code = "0", string? description = "")
+        {
+            return new DataExchangeDeReponse
+            {
+                code = code,
+                AcceptCode = "",
+                AcceptPwd = "",
+                msg = (description ?? "接口调用失败!")
+            };
+        }
+
+    }
+}

+ 25 - 0
src/Hotline.Share/Dtos/DataSharing/DataExchange/DataExchangeResponseDto.cs

@@ -0,0 +1,25 @@
+namespace Hotline.Share.Dtos.DataSharing.DataExchange
+{
+    public class DataExchangeResponseDto
+    {
+        /// <summary>
+        /// 状态
+        /// </summary>
+        public string Code { get; set; }
+
+        /// <summary>
+        /// 消息
+        /// </summary>
+        public string msg { get; set; }
+
+        /// <summary>
+        /// 受理编号
+        /// </summary>
+        public string AcceptCode { get; set; }
+
+        /// <summary>
+        /// 受理密码
+        /// </summary>
+        public string AcceptPwd { get; set; }
+    }
+}

+ 20 - 0
src/Hotline.Share/Dtos/DataSharing/DataExchange/ReplyFiles.cs

@@ -0,0 +1,20 @@
+namespace Sharing.Share.Dtos.DataSharing.DataExchange
+{
+    public class ReplyFiles
+    {
+        /// <summary>
+        /// 文件名称
+        /// </summary>
+        public string Filename { get; set; }
+
+        /// <summary>
+        /// 文件格式
+        /// </summary>
+        public string Fileformat { get; set; }
+
+        /// <summary>
+        /// byte[]转base64,方法如下:Convert.ToBase64String(byte)
+        /// </summary>
+        public string FileText { get; set; }
+    }
+}

+ 45 - 0
src/Hotline.Share/Dtos/DataSharing/Enterprise/DataWriteResultDto.cs

@@ -0,0 +1,45 @@
+using Sharing.Share.Dtos.DataSharing.DataExchange;
+
+namespace Sharing.Share.Dtos.DataSharing.Enterprise
+{
+    /// <summary>
+    /// 数据交换提交办理结果
+    /// </summary>
+    public class DataWriteResultDto
+    {
+        /// <summary>
+        /// 工单编号,唯一标识
+        /// </summary>
+        public string ReplyCode { get; set; }
+
+        /// <summary>
+        /// 回复日期
+        /// </summary>
+        public DateTime? ReplyDate { get; set; }
+
+        /// <summary>
+        /// 回复人
+        /// </summary>
+        public string ReplyUserName { get; set; }
+
+        /// <summary>
+        /// 回复部门
+        /// </summary>
+        public string ReplyBMName { get; set; }
+
+        /// <summary>
+        /// 回复详情
+        /// </summary>
+        public string ReplyContent { get; set; }
+
+        /// <summary>
+        /// 0:办理中 1:办理完成 2:办理退回
+        /// </summary>
+        public int ReplyResultType { get; set; }
+
+        /// <summary>
+        /// 附件
+        /// </summary>
+        public List<ReplyFiles>? ReplyFiles { get; set; }
+    }
+}

+ 66 - 0
src/Hotline.Share/Dtos/DataSharing/Enterprise/EnRecordsDto.cs

@@ -0,0 +1,66 @@
+namespace Sharing.Share.Dtos.DataSharing.Enterprise
+{
+    /// <summary>
+    /// 查询企业专班返回参数
+    /// </summary>
+    public class EnRecordsDto
+    {
+        /// <summary>
+        /// 数据
+        /// </summary>
+        public List<EnRecordsInfo> records { get; set; }
+
+        /// <summary>
+        /// 总条数
+        /// </summary>
+        public int total { get; set; }
+
+        /// <summary>
+        /// 每页条数
+        /// </summary>
+        public int size { get; set; }
+
+        /// <summary>
+        /// 当前页数
+        /// </summary>
+        public int current { get; set; }
+
+        /// <summary>
+        /// 页码
+        /// </summary>
+        public int pages { get; set; }
+
+        /// <summary>
+        /// 最大条数
+        /// </summary>
+        public int? maxLimit { get; set; }
+    }
+
+    /// <summary>
+    /// 查询企业专班返回参数
+    /// </summary>
+    public class EnRecordsInfo
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        public string enterpriseCode { get; set; }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public string enterpriseName { get; set; }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public string specialTeamCode { get; set; }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public string specialTeamName { get; set; }
+    }
+
+
+}

+ 31 - 0
src/Hotline.Share/Dtos/DataSharing/Enterprise/EnterpriseRequest.cs

@@ -0,0 +1,31 @@
+namespace Hotline.Share.Dtos.DataSharing.Enterprise
+{
+    public abstract class EnterpriseRequest : IEnterpriseRequest
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <returns></returns>
+        public abstract string GetRequestUrl();
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <returns></returns>
+        public abstract string GetHttpMethod();
+    }
+
+    /// <summary>
+    /// 
+    /// </summary>
+    /// <typeparam name="TData"></typeparam>
+    public abstract class EnterpriseRequest<TData> : EnterpriseRequest, IEnterpriseRequest<TData>
+    {
+        public TData Data { get; set; }
+
+        public void SetData(TData data)
+        {
+            Data = data;
+        }
+    }
+}

+ 78 - 0
src/Hotline.Share/Dtos/DataSharing/Enterprise/EnterpriseResponse.cs

@@ -0,0 +1,78 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Sharing.Share.Dtos.DataSharing.Enterprise
+{
+    /// <summary>
+    /// 接口返回
+    /// </summary>
+    public class EnterpriseResponse
+    {
+        /// <summary>
+        /// 响应码
+        /// </summary>
+        public int code { get; set; }
+
+        /// <summary>
+        /// 是否成功
+        /// </summary>
+        public bool success { get; set; }
+
+        /// <summary>
+        /// 返回消息
+        /// </summary>
+        public string msg { get; set; }
+
+        /// <summary>
+        /// 操作结果
+        /// </summary>
+        public Object data { get; set; }
+    }
+
+    public class EnterpriseDeResponse
+    {
+        /// <summary>
+        /// 状态
+        /// </summary>
+        public string code { get; set; }
+
+        /// <summary>
+        /// 描述
+        /// </summary>
+        public string msg { get; set; }
+
+        /// <summary>
+        /// 成功
+        /// </summary>
+        /// <param name="data"></param>
+        /// <param name="description"></param>
+        /// <returns></returns>
+        public static EnterpriseDeResponse Success(string? description = "")
+        {
+            return new EnterpriseDeResponse
+            {
+                code = "1",
+                msg = (description ?? "您已成功提交数据!")
+            };
+        }
+
+        /// <summary>
+        /// 失败
+        /// </summary>
+        /// <param name="code"></param>
+        /// <param name="description"></param>
+        /// <returns></returns>
+        public static EnterpriseDeResponse Failed(string? code = "0", string? description = "")
+        {
+            return new EnterpriseDeResponse
+            {
+                code = code,
+                msg = (description ?? "接口调用失败!")
+            };
+        }
+
+    }
+}

+ 16 - 0
src/Hotline.Share/Dtos/DataSharing/Enterprise/IEnterpriseRequest.cs

@@ -0,0 +1,16 @@
+using Hotline.Share.Dtos.DataSharing.Province;
+
+namespace Hotline.Share.Dtos.DataSharing.Enterprise
+{
+    public interface IEnterpriseRequest : ISharingRequest
+    {
+
+    }
+
+    public interface IEnterpriseRequest<TData> : IEnterpriseRequest
+    {
+        TData Data { get; set; }
+
+        void SetData(TData data);
+    }
+}

+ 20 - 0
src/Hotline.Share/Dtos/DataSharing/Enterprise/Receive/SelectEnterpriseListDto.cs

@@ -0,0 +1,20 @@
+namespace Hotline.Share.Dtos.DataSharing.Enterprise.Receive
+{
+    public class SelectEnterpriseListDto
+    {
+        /// <summary>
+        /// 企业名称;支持模糊查询
+        /// </summary>
+        public string EnterpriseName { get; set; }
+
+        /// <summary>
+        /// 当前页;默认为1
+        /// </summary>
+        public int Current { get; set; } = 1;
+
+        /// <summary>
+        /// 每页的数量;默认为10
+        /// </summary>
+        public int Size { get; set; } = 10;
+    }
+}

+ 46 - 0
src/Hotline.Share/Dtos/DataSharing/Enterprise/Receive/SelectEnterpriseListRequest .cs

@@ -0,0 +1,46 @@
+using System.Text.Json.Serialization;
+
+namespace Hotline.Share.Dtos.DataSharing.Enterprise.Receive
+{
+    /// <summary>
+    /// 12345平台实时分页查询服务企业名单
+    /// </summary>
+    public class SelectEnterpriseListRequest : EnterpriseRequest<SelectEnterpriseList>
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <returns></returns>
+        public override string GetRequestUrl() => "platform/12345/selectEnterpriseList";
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <returns></returns>
+        public override string GetHttpMethod() => "Post";
+    }
+
+    /// <summary>
+    /// 12345平台实时分页查询服务企业名单
+    /// </summary>
+    public class SelectEnterpriseList
+    {
+        /// <summary>
+        /// 企业名称
+        /// </summary>
+        [JsonPropertyName("enterpriseName")]
+        public string EnterpriseName { get; set; }
+
+        /// <summary>
+        /// 当前页;默认为1
+        /// </summary>
+        [JsonPropertyName("current")]
+        public int Current { get; set; } = 1;
+
+        /// <summary>
+        /// 每页的数量;默认为10
+        /// </summary>
+        [JsonPropertyName("size")]
+        public int Size { get; set; } = 10;
+    }
+}

+ 57 - 0
src/Hotline.Share/Dtos/DataSharing/Enterprise/Receive/WriteResultDto.cs

@@ -0,0 +1,57 @@
+using Sharing.Share.Dtos.DataSharing.DataExchange;
+
+namespace Hotline.Share.Dtos.DataSharing.Enterprise.Receive
+{
+    public class WriteResultDto
+    {
+        /// <summary>
+        /// 工单编号,唯一标识
+        /// </summary>
+        [MDisplayName("工单编号")]
+        [VRequired]
+        [VStringLength(0, 20)]
+        public string ReplyCode { get; set; }
+
+        /// <summary>
+        /// 回复日期
+        /// </summary>
+        [MDisplayName("回复日期")]
+        [VRequired]
+        public DateTime? ReplyDate { get; set; }
+
+        /// <summary>
+        /// 回复人
+        /// </summary>
+        [MDisplayName("回复人")]
+        [VRequired]
+        [VStringLength(0, 8)]
+        public string ReplyUserName { get; set; }
+
+        /// <summary>
+        /// 回复部门
+        /// </summary>
+        [MDisplayName("回复部门")]
+        [VRequired]
+        [VStringLength(0, 50)]
+        public string ReplyBMName { get; set; }
+
+        /// <summary>
+        /// 回复详情
+        /// </summary>
+        [MDisplayName("回复详情")]
+        [VRequired]
+        public string ReplyContent { get; set; }
+
+        /// <summary>
+        /// 0:办理中 1:办理完成 2:办理退回
+        /// </summary>
+        [MDisplayName("办理类型")]
+        [VRequired]
+        public int ReplyResultType { get; set; }
+
+        /// <summary>
+        /// 附件
+        /// </summary>
+        public List<ReplyFiles>? ReplyFiles { get; set; }
+    }
+}

+ 40 - 0
src/Hotline.Share/Dtos/DataSharing/Enterprise/Send/CancelWorkOrderRequest.cs

@@ -0,0 +1,40 @@
+using System.Text.Json.Serialization;
+
+namespace Hotline.Share.Dtos.DataSharing.Enterprise.Send
+{
+    /// <summary>
+    /// 12345平台撤销涉企工单推送至服务企业平台
+    /// </summary>
+    public class CancelWorkOrderRequest : EnterpriseRequest<CancelWorkOrder>
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <returns></returns>
+        public override string GetRequestUrl() => "platform/12345/cancelWorkOrder";
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <returns></returns>
+        public override string GetHttpMethod() => "Post";
+    }
+
+    /// <summary>
+    /// 12345平台撤销涉企工单推送至服务企业平台
+    /// </summary>
+    public class CancelWorkOrder
+    {
+        /// <summary>
+        /// 服务工单编号
+        /// </summary>
+        [JsonPropertyName("workOrderNo")]
+        public string WorkOrderNo { get; set; }
+
+        /// <summary>
+        /// 撤销原因
+        /// </summary>
+        [JsonPropertyName("reason")]
+        public string Reason { get; set; }
+    }
+}

+ 126 - 0
src/Hotline.Share/Dtos/DataSharing/Enterprise/Send/PushWorkOrderRequest.cs

@@ -0,0 +1,126 @@
+using Sharing.Share.Dtos.DataSharing.DataExchange;
+using System.Text.Json.Serialization;
+
+namespace Hotline.Share.Dtos.DataSharing.Enterprise.Send
+{
+    /// <summary>
+    /// 12345平台推送涉企工单至服务企业平台
+    /// </summary>
+    public class PushWorkOrderRequest : EnterpriseRequest<PushWorkOrder>
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <returns></returns>
+        public override string GetRequestUrl() => "platform/12345/pushWorkOrder";
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <returns></returns>
+        public override string GetHttpMethod() => "Post";
+    }
+
+    /// <summary>
+    /// 12345平台推送涉企工单至服务企业平台
+    /// </summary>
+    public class PushWorkOrder
+    {
+        /// <summary>
+        /// 企业CODE
+        /// </summary>
+        [JsonPropertyName("enterpriseCode")]
+        public string EnterpriseCode { get; set; }
+
+        /// <summary>
+        /// 专班CODE
+        /// </summary>
+        [JsonPropertyName("specialTeamCode")]
+        public string SpecialTeamCode { get; set; }
+
+        /// <summary>
+        /// 服务工单编号
+        /// </summary>
+        [JsonPropertyName("workOrderNo")]
+        public string WorkOrderNo { get; set; }
+
+        /// <summary>
+        /// 服务工单标题
+        /// </summary>
+        [JsonPropertyName("workOrderTitle")]
+        public string WorkOrderTitle { get; set; }
+
+        /// <summary>
+        /// 受理时间(yyyy-MM-dd HH:mm:ss格式)
+        /// </summary>
+        [JsonPropertyName("acceptTime")]
+        public string AcceptTime { get; set; }
+
+        /// <summary>
+        /// 诉求渠道
+        /// </summary>
+        [JsonPropertyName("appealChannel")]
+        public string AppealChannel { get; set; }
+
+        /// <summary>
+        /// 联系电话
+        /// </summary>
+        [JsonPropertyName("contactPhone")]
+        public string ContactPhone { get; set; }
+
+        /// <summary>
+        ///服务对象姓名
+        /// </summary>
+        [JsonPropertyName("contactName")]
+        public string ContactName { get; set; }
+
+        /// <summary>
+        /// 诉求类型
+        /// </summary>
+        [JsonPropertyName("appealType")]
+        public string AppealType { get; set; }
+
+        /// <summary>
+        /// 热点类型
+        /// </summary>
+        [JsonPropertyName("hotspotType")]
+        public string HotspotType { get; set; }
+
+        /// <summary>
+        /// 诉求内容
+        /// </summary>
+        [JsonPropertyName("appealContent")]
+        public string AppealContent { get; set; }
+
+        /// <summary>
+        /// 紧急程度
+        /// </summary>
+        [JsonPropertyName("urgencyDegree")]
+        public string UrgencyDegree { get; set; }
+
+        /// <summary>
+        /// 行政区划代码
+        /// </summary>
+        [JsonPropertyName("regionCode")]
+        public string RegionCode { get; set; }
+
+        /// <summary>
+        /// 期满时间(yyyy-MM-dd HH:mm:ss格式)
+        /// </summary>
+        [JsonPropertyName("expirationTime")]
+        public string ExpirationTime { get; set; }
+
+        /// <summary>
+        /// 事发时间(yyyy-MM-dd HH:mm:ss格式)
+        /// </summary>
+        [JsonPropertyName("incidentTime")]
+        public string? IncidentTime { get; set; }
+
+        /// <summary>
+        /// byte[]转base64,方法如下:Convert.ToBase64String(byte)
+        /// </summary>
+        [JsonPropertyName("replyFiles")]
+        public List<ReplyFiles>? ReplyFiles { get; set; } = new List<ReplyFiles>();
+    }
+
+}

+ 54 - 0
src/Hotline.Share/Dtos/DataSharing/Enterprise/TokenEnterprise.cs

@@ -0,0 +1,54 @@
+using System.Text.Json.Serialization;
+
+
+namespace Hotline.Share.Dtos.DataSharing.Enterprise
+{
+    /// <summary>
+    /// token 返回值
+    /// </summary>
+    [Serializable]
+    public class TokenEnterprise
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        [JsonPropertyName("success")]
+        public bool Success { get; set; }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        [JsonPropertyName("data")]
+        public TokenTokenEnterpriseInfo TokenInfo { get; set; }
+    }
+
+    /// <summary>
+    /// token 内容
+    /// </summary>
+    public class TokenTokenEnterpriseInfo
+    {
+        /// <summary>
+        /// access_token
+        /// </summary>
+        [JsonPropertyName("access_token")]
+        public string AccessToken { get; set; }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        [JsonPropertyName("refresh_token")]
+        public string RefreshToken { get; set; }
+
+        /// <summary>
+        /// token类型
+        /// </summary>
+        [JsonPropertyName("token_type")]
+        public string TokenType { get; set; }
+
+        /// <summary>
+        /// token有效期,单位秒
+        /// </summary>
+        [JsonPropertyName("expires_in")]
+        public string ExpiresIn { get; set; }
+    }
+}

+ 38 - 0
src/Hotline.Share/Dtos/DataSharing/Extend/FormEnvironMentInfoDto.cs

@@ -0,0 +1,38 @@
+namespace Sharing.Share.Dtos.DataSharing.Extend
+{
+    /// <summary>
+    /// 环保举报业务专业表单
+    /// </summary>
+    public class FormEnvironMentInfoDto
+    {
+        /// <summary>
+        /// 邮箱 
+        /// </summary>
+        public string ComplaintMailBox { get; set; }
+
+        /// <summary>
+        /// 通讯地址 
+        /// </summary>
+        public string PostalAddress { get; set; }
+
+        /// <summary>
+        /// 举报对象 
+        /// </summary>
+        public string ReportObject { get; set; }
+
+        /// <summary>
+        /// 详细地址 
+        /// </summary>
+        public string DetailedAddr { get; set; }
+
+        /// <summary>
+        /// 行业类型 
+        /// </summary>
+        public string IndustryType { get; set; }
+
+        /// <summary>
+        /// 重点要素 
+        /// </summary>
+        public string KeyPoint { get; set; }
+    }
+}

+ 28 - 0
src/Hotline.Share/Dtos/DataSharing/Extend/FormExpressWayInfoDto.cs

@@ -0,0 +1,28 @@
+namespace Sharing.Share.Dtos.DataSharing.Extend
+{
+    /// <summary>
+    /// 高速公路工单
+    /// </summary>
+    public class FormExpressWayInfoDto
+    {
+        /// <summary>
+        /// 高速入口  
+        /// </summary>
+        public string InWay { get; set; }
+
+        /// <summary>
+        /// 高速出口  
+        /// </summary>
+        public string OutWay { get; set; }
+
+        /// <summary>
+        /// 发生时间  
+        /// </summary>
+        public DateTime? OperateDate { get; set; }
+
+        /// <summary>
+        /// 车牌号  
+        /// </summary>
+        public string CardNum { get; set; }
+    }
+}

+ 358 - 0
src/Hotline.Share/Dtos/DataSharing/Extend/FormMarketInfoDto.cs

@@ -0,0 +1,358 @@
+namespace Sharing.Share.Dtos.DataSharing.Extend
+{
+    /// <summary>
+    /// 12315表单
+    /// </summary>
+    public class FormMarketInfoDto
+    {
+        /// <summary>
+        /// 表单类型  投诉:20举报:25咨询:10
+        /// </summary>
+        public string Rqsttypy { get; set; }
+
+        /// <summary>
+        /// 投诉问题类别
+        /// </summary>
+        public string ApplBasQue { get; set; }
+
+        /// <summary>
+        /// 投诉问题类别名称
+        /// </summary>
+        public string ApplBasQueName { get; set; }
+
+        /// <summary>
+        /// 专利号
+        /// </summary>
+        public string Zlh { get; set; }
+
+        /// <summary>
+        /// 专利权人
+        /// </summary>
+        public string Zlqr { get; set; }
+
+        /// <summary>
+        /// 发明名称
+        /// </summary>
+        public string Fmmc { get; set; }
+
+        /// <summary>
+        /// 专利类型
+        /// </summary>
+        public string Zllx { get; set; }
+
+        /// <summary>
+        /// 专利类型名称
+        /// </summary>
+        public string ZllxMc { get; set; }
+
+        /// <summary>
+        /// 实际经营地代码
+        /// </summary>
+        public string Accsce { get; set; }
+
+        /// <summary>
+        /// 实际经营地详细地址
+        /// </summary>
+        public string Sfdd { get; set; }
+
+        /// <summary>
+        /// 争议发生时间
+        /// </summary>
+        public DateTime? ControversyTime { get; set; }
+
+        /// <summary>
+        /// 诉求内容
+        /// </summary>
+        public string AppealContent { get; set; }
+
+        /// <summary>
+        /// 登记部门编码
+        /// </summary>
+        public string HandDepCode { get; set; }
+
+        /// <summary>
+        /// 登记部门名称
+        /// </summary>
+        public string HandDep { get; set; }
+
+        /// <summary>
+        /// 坐席工号
+        /// </summary>
+        public string Zxgh { get; set; }
+
+        /// <summary>
+        /// 受理登记人编码
+        /// </summary>
+        public string AccregperId { get; set; }
+
+        /// <summary>
+        /// 受理登记人名称
+        /// </summary>
+        public string AccregperName { get; set; }
+
+        /// <summary>
+        /// 登记信息录入时间
+        /// </summary>
+        public DateTime? RegTime { get; set; }
+
+        /// <summary>
+        /// 登记信息提交时间
+        /// </summary>
+        public DateTime? CmTime { get; set; }
+
+        /// <summary>
+        /// 商品服务类别编码
+        /// </summary>
+        public string OBType { get; set; }
+
+        /// <summary>
+        /// 商品服务类别名称
+        /// </summary>
+        public string OBTypeName { get; set; }
+
+        /// <summary>
+        /// 商品服务名称
+        /// </summary>
+        public string MdseName { get; set; }
+
+        /// <summary>
+        /// 销售方式
+        /// </summary>
+        public string SaleMode { get; set; }
+
+        /// <summary>
+        /// 投诉目标:网购时必填项选择【1:投诉电商平台2:投诉电商平台入驻商户】
+        /// </summary>
+        public string DsptType { get; set; }
+
+        /// <summary>
+        /// 电商平台代码
+        /// </summary>
+        public string DsptCode { get; set; }
+
+        /// <summary>
+        /// 电商平台名称
+        /// </summary>
+        public string DsptName { get; set; }
+
+        /// <summary>
+        /// 品牌代码/品牌ID
+        /// </summary>
+        public string BrandCode { get; set; }
+
+        /// <summary>
+        /// 品牌名称
+        /// </summary>
+        public string BrandName { get; set; }
+
+        /// <summary>
+        /// 订单号
+        /// </summary>
+        public string BIdNo { get; set; }
+
+        /// <summary>
+        /// 消费金额
+        /// </summary>
+        public decimal? InvoAm { get; set; }
+
+        /// <summary>
+        /// 具体渠道类型 1 电视购物 ;2 电话购物;3 邮购(销售方式是“电视电话购物及邮购”时必填)
+        /// </summary>
+        public string Jtqdtype { get; set; }
+
+        /// <summary>
+        /// 具体渠道内容
+        /// </summary>
+        public string Jtqdname { get; set; }
+
+        /// <summary>
+        /// 产品名称
+        /// </summary>
+        public string ProdName { get; set; }
+
+        /// <summary>
+        /// 批准文号
+        /// </summary>
+        public string ProdAppNo { get; set; }
+
+        /// <summary>
+        /// 产品批号
+        /// </summary>
+        public string ProdPatchNo { get; set; }
+
+        /// <summary>
+        /// 产品规格
+        /// </summary>
+        public string ProdTypeSpf { get; set; }
+
+        /// <summary>
+        /// 生产厂家
+        /// </summary>
+        public string ProdFty { get; set; }
+
+        /// <summary>
+        /// 销售企业
+        /// </summary>
+        public string ProdSalEnt { get; set; }
+
+        /// <summary>
+        /// 产品有效期
+        /// </summary>
+        public string ProdValid { get; set; }
+
+        /// <summary>
+        /// 消费者地址
+        /// </summary>
+        public string ProviderAddr { get; set; }
+
+        /// <summary>
+        /// 企业名称
+        /// </summary>
+        public string Invopt { get; set; }
+
+        /// <summary>
+        /// 所在行业类型代码
+        /// </summary>
+        public string UBindType { get; set; }
+
+        /// <summary>
+        /// 所在行业类型名称
+        /// </summary>
+        public string UBindTypeName { get; set; }
+
+        /// <summary>
+        /// 市场主体类型代码
+        /// </summary>
+        public string EntType { get; set; }
+
+        /// <summary>
+        /// 市场主体类型名称
+        /// </summary>
+        public string EntTypeName { get; set; }
+
+        /// <summary>
+        /// 企业所属行政区划代码
+        /// </summary>
+        public string ReqUnit { get; set; }
+
+        /// <summary>
+        /// 企业注册地址
+        /// </summary>
+        public string Addr { get; set; }
+
+        /// <summary>
+        /// 联系人
+        /// </summary>
+        public string Sjztlxr { get; set; }
+
+        /// <summary>
+        /// 统一社会信用代码
+        /// </summary>
+        public string Nbxh { get; set; }
+
+        /// <summary>
+        /// 注册号
+        /// </summary>
+        public string RegNo { get; set; }
+
+        /// <summary>
+        /// 证件类型
+        /// </summary>
+        public string CertType { get; set; }
+
+        /// <summary>
+        /// 证件类型名称
+        /// </summary>
+        public string CertTypeName { get; set; }
+
+        /// <summary>
+        /// 证件号码
+        /// </summary>
+        public string CertNo { get; set; }
+
+        /// <summary>
+        /// 提供方类型
+        /// </summary>
+        public string ReveType { get; set; }
+
+        /// <summary>
+        /// 提供方类型名称
+        /// </summary>
+        public string ReveTypeName { get; set; }
+
+        /// <summary>
+        /// 国籍
+        /// </summary>
+        public string Nationality { get; set; }
+
+        /// <summary>
+        /// 国籍名称
+        /// </summary>
+        public string NationalityName { get; set; }
+
+        /// <summary>
+        /// 民族
+        /// </summary>
+        public string Folk { get; set; }
+
+        /// <summary>
+        /// 民族名称
+        /// </summary>
+        public string FolkName { get; set; }
+
+        /// <summary>
+        /// 提供方身份
+        /// </summary>
+        public string Peride { get; set; }
+
+        /// <summary>
+        /// 提供方身份名称
+        /// </summary>
+        public string PerideName { get; set; }
+
+        /// <summary>
+        /// 电子邮箱
+        /// </summary>
+        public string ProviderMail { get; set; }
+
+        /// <summary>
+        /// 其他联系方式
+        /// </summary>
+        public string Qtlxfs { get; set; }
+
+        /// <summary>
+        /// 咨询内容
+        /// </summary>
+        public string ApplIdiQue { get; set; }
+
+        /// <summary>
+        /// 咨询范围
+        /// </summary>
+        public string ConlrangeCode { get; set; }
+
+        /// <summary>
+        /// 咨询范围名称
+        /// </summary>
+        public string ConlrangeName { get; set; }
+
+        /// <summary>
+        /// 答复内容
+        /// </summary>
+        public string Fknr { get; set; }
+
+        /// <summary>
+        /// 邮政编码
+        /// </summary>
+        public string Yzbm { get; set; }
+
+        /// <summary>
+        /// 年龄段
+        /// </summary>
+        public string AgeGroup { get; set; }
+
+        /// <summary>
+        /// 年龄段名称
+        /// </summary>
+        public string AgeGroupName { get; set; }
+    }
+}

+ 43 - 0
src/Hotline.Share/Dtos/DataSharing/Extend/FormMedicalInfoDto.cs

@@ -0,0 +1,43 @@
+namespace Sharing.Share.Dtos.DataSharing.Extend
+{
+    /// <summary>
+    /// 医疗工单
+    /// </summary>
+    public class FormMedicalInfoDto
+    {
+        /// <summary>
+        /// 医院名称
+        /// </summary>
+        public string MedicalName { get; set; }
+
+        /// <summary>
+        /// 医院地址
+        /// </summary>
+        public string MedicalAddr { get; set; }
+
+        /// <summary>
+        /// 科室
+        /// </summary>
+        public string DepartMent { get; set; }
+
+        /// <summary>
+        /// 医生
+        /// </summary>
+        public string Doctor { get; set; }
+
+        /// <summary>
+        /// 患者姓名
+        /// </summary>
+        public string PatientName { get; set; }
+
+        /// <summary>
+        /// 就诊卡号
+        /// </summary>
+        public string ClinicCardNum { get; set; }
+
+        /// <summary>
+        /// 患者身份证号
+        /// </summary>
+        public string CardNum { get; set; }
+    }
+}

+ 18 - 0
src/Hotline.Share/Dtos/DataSharing/Extend/FormNetWorktecInfoDto.cs

@@ -0,0 +1,18 @@
+namespace Sharing.Share.Dtos.DataSharing.Extend
+{
+    /// <summary>
+    /// 四川政务服务网技术工单
+    /// </summary>
+    public class FormNetWorktecInfoDto
+    {
+        /// <summary>
+        /// 政务服务网账号  
+        /// </summary>
+        public string ZwfwAccount { get; set; }
+
+        /// <summary>
+        /// 联系方式  
+        /// </summary>
+        public string LinkPeson { get; set; }
+    }
+}

+ 68 - 0
src/Hotline.Share/Dtos/DataSharing/Extend/FormPostInfoDto.cs

@@ -0,0 +1,68 @@
+namespace Sharing.Share.Dtos.DataSharing.Extend
+{
+    /// <summary>
+    /// 邮政业消费者申诉受理信息
+    /// </summary>
+    public class FormPostInfoDto
+    {
+        /// <summary>
+        /// 申诉人姓名 
+        /// </summary>
+        public string AppealName { get; set; }
+
+        /// <summary>
+        /// 申诉人电话 
+        /// </summary>
+        public string AppealNum { get; set; }
+
+        /// <summary>
+        /// 申诉企业 
+        /// </summary>
+        public string AppealEnterprise { get; set; }
+
+        /// <summary>
+        /// 寄件人姓名 
+        /// </summary>
+        public string SenderName { get; set; }
+
+        /// <summary>
+        /// 寄件人电话 
+        /// </summary>
+        public string SenderNum { get; set; }
+
+        /// <summary>
+        /// 寄件人地址 
+        /// </summary>
+        public string SenderAddr { get; set; }
+
+        /// <summary>
+        /// 收件人姓名 
+        /// </summary>
+        public string AddresseeName { get; set; }
+
+        /// <summary>
+        /// 收件人电话 
+        /// </summary>
+        public string AddresseeNum { get; set; }
+
+        /// <summary>
+        /// 收件人地址 
+        /// </summary>
+        public string AddresseeAddr { get; set; }
+
+        /// <summary>
+        /// 涉及金额 
+        /// </summary>
+        public string InsuredPrice { get; set; }
+
+        /// <summary>
+        /// 是否联系快递公司投诉 
+        /// </summary>
+        public string IsContact { get; set; }
+
+        /// <summary>
+        /// 处理结果 
+        /// </summary>
+        public string OperateResult { get; set; }
+    }
+}

+ 48 - 0
src/Hotline.Share/Dtos/DataSharing/Extend/FormReturnexChangeInfoDto.cs

@@ -0,0 +1,48 @@
+namespace Sharing.Share.Dtos.DataSharing.Extend
+{
+    /// <summary>
+    /// 电视购物及商铺购买退换货工单
+    /// </summary>
+    public class FormReturnexChangeInfoDto
+    {
+        /// <summary>
+        /// 电视台(商铺)  
+        /// </summary>
+        public string SubjectName { get; set; }
+
+        /// <summary>
+        /// 购买时间  
+        /// </summary>
+        public string PurchaseTime { get; set; }
+
+        /// <summary>
+        /// 产品名称  
+        /// </summary>
+        public string ProductName { get; set; }
+
+        /// <summary>
+        /// 消费金额  
+        /// </summary>
+        public string Charge { get; set; }
+
+        /// <summary>
+        /// 商家名称  
+        /// </summary>
+        public string BusinessName { get; set; }
+
+        /// <summary>
+        /// 商家地址  
+        /// </summary>
+        public string BusunessAddr { get; set; }
+
+        /// <summary>
+        /// 收货人  
+        /// </summary>
+        public string ReceivePerson { get; set; }
+
+        /// <summary>
+        /// 收货人地址  
+        /// </summary>
+        public string ReceiveAddr { get; set; }
+    }
+}

+ 23 - 0
src/Hotline.Share/Dtos/DataSharing/Extend/FormShamPubInfoDto.cs

@@ -0,0 +1,23 @@
+namespace Sharing.Share.Dtos.DataSharing.Extend
+{
+    /// <summary>
+    /// 电视台虚假广告工单
+    /// </summary>
+    public class FormShamPubInfoDto
+    {
+        /// <summary>
+        /// 电视台  
+        /// </summary>
+        public string SubjectName { get; set; }
+
+        /// <summary>
+        ///产品名称
+        /// </summary>
+        public string ProductName { get; set; }
+
+        /// <summary>
+        /// 虚假广告内容
+        /// </summary>
+        public string PubContent { get; set; }
+    }
+}

+ 23 - 0
src/Hotline.Share/Dtos/DataSharing/Extend/FormTaxationComplaintInfoDto.cs

@@ -0,0 +1,23 @@
+namespace Sharing.Share.Dtos.DataSharing.Extend
+{
+    /// <summary>
+    /// 12366投诉表单
+    /// </summary>
+    public class FormTaxationComplaintInfoDto
+    {
+        /// <summary>
+        /// 主管税务机关(问题归属地)  
+        /// </summary>
+        public string TaxAuthority { get; set; }
+
+        /// <summary>
+        /// 被投诉单位或个人信息  
+        /// </summary>
+        public string ComplaintSubject { get; set; }
+
+        /// <summary>
+        /// 投诉类型  
+        /// </summary>
+        public string ComplaintType { get; set; }
+    }
+}

+ 18 - 0
src/Hotline.Share/Dtos/DataSharing/Extend/FormTaxationConsultingInfoDto.cs

@@ -0,0 +1,18 @@
+namespace Sharing.Share.Dtos.DataSharing.Extend
+{
+    /// <summary>
+    /// 四川省12366热线咨询交办单
+    /// </summary>
+    public class FormTaxationConsultingInfoDto
+    {
+        /// <summary>
+        /// 主管税务机关(问题归属地)  
+        /// </summary>
+        public string TaxAuthority { get; set; }
+
+        /// <summary>
+        /// 被投诉单位或个人信息  
+        /// </summary>
+        public string ComplaintSubject { get; set; }
+    }
+}

+ 18 - 0
src/Hotline.Share/Dtos/DataSharing/Extend/FormTrafficInfoDto.cs

@@ -0,0 +1,18 @@
+namespace Sharing.Share.Dtos.DataSharing.Extend
+{
+    /// <summary>
+    /// 12328服务监督中心受理单
+    /// </summary>
+    public class FormTrafficInfoDto
+    {
+        /// <summary>
+        /// 受理方式
+        /// </summary>
+        public string AcceptType { get; set; }
+
+        /// <summary>
+        /// 客户  
+        /// </summary>
+        public string Customer { get; set; }
+    }
+}

+ 68 - 0
src/Hotline.Share/Dtos/DataSharing/Extend/ReceiveCaseExtendsDto.cs

@@ -0,0 +1,68 @@
+namespace Sharing.Share.Dtos.DataSharing.Extend
+{
+    /// <summary>
+    /// 拓展信息
+    /// </summary>
+    public class ReceiveCaseExtendsDto
+    {
+        /// <summary>
+        /// 服务工单编号
+        /// </summary>
+        public string CaseSerial { get; set; }
+
+        /// <summary>
+        /// 表单类型
+        /// </summary>
+        public string FormType { get; set; }
+
+        /// <summary>
+        /// 医疗工单
+        /// </summary>
+        public FormMedicalInfoDto FormMedical { get; set; }
+
+        /// <summary>
+        /// 电视购物及商铺购买退换货工单
+        /// </summary>
+        public FormReturnexChangeInfoDto FormReturnexChange { get; set; }
+
+        /// <summary>
+        /// 电视台虚假广告工单
+        /// </summary>
+        public FormShamPubInfoDto FormShamPub { get; set; }
+
+        /// <summary>
+        /// 高速公路工单
+        /// </summary>
+        public FormExpressWayInfoDto FormExpressWay { get; set; }
+
+        /// <summary>
+        /// 四川政务服务网技术工单
+        /// </summary>
+        public FormNetWorktecInfoDto FormNetWorktec { get; set; }
+
+        /// <summary>
+        /// 12366投诉表单
+        /// </summary>
+        public FormTaxationComplaintInfoDto FormTaxationComplaint { get; set; }
+
+        /// <summary>
+        /// 四川省12366热线咨询交办单
+        /// </summary>
+        public FormTaxationConsultingInfoDto FormTaxationConsulting { get; set; }
+
+        /// <summary>
+        /// 12328服务监督中心受理单
+        /// </summary>
+        public FormTrafficInfoDto FormTraffic { get; set; }
+
+        /// <summary>
+        /// 邮政业消费者申诉受理信息
+        /// </summary>
+        public FormPostInfoDto FormPost { get; set; }
+
+        /// <summary>
+        /// 环保举报业务专业表单
+        /// </summary>
+        public FormEnvironMentInfoDto FormEnvironMent { get; set; }
+    }
+}

+ 43 - 0
src/Hotline.Share/Dtos/DataSharing/Province/BaseModel.cs

@@ -0,0 +1,43 @@
+using System.Text.Json.Serialization;
+
+namespace Hotline.Share.Dtos.DataSharing.Province
+{
+    /// <summary>
+    /// 基础公用
+    /// </summary>
+    public class BaseModel : BaseProvinceModel
+    {
+        /// <summary>
+        /// 材料标识
+        /// </summary>
+        [JsonPropertyName("CLIENG_GUID")]
+        [MDisplayName("材料标识")]
+        [VRequired]
+        [VStringLength(0, 50)]
+        public string CliengGuid { get; set; }
+    }
+
+    /// <summary>
+    /// 基础公用
+    /// </summary>
+    public class BaseProvinceModel
+    {
+        /// <summary>
+        /// 服务工单编号
+        /// </summary>
+        [JsonPropertyName("CASE_SERIAL")]
+        [VRequired]
+        [VStringLength(0, 50)]
+        [MDisplayName("服务工单编号")]
+        public string CaseSerial { get; set; }
+
+        /// <summary>
+        /// 行政区划代码
+        /// </summary>
+        [JsonPropertyName("AREA_CODE")]
+        [MDisplayName("行政区划代码")]
+        [VRequired]
+        [VStringLength(0, 24)]
+        public string AreaCode { get; set; }
+    }
+}

+ 14 - 0
src/Hotline.Share/Dtos/DataSharing/Province/ClientInfo.cs

@@ -0,0 +1,14 @@
+namespace Hotline.Share.Dtos.DataSharing.Province
+{
+    public class ClientInfo
+    {
+        public ClientInfo(string clientId, string clientSecret)
+        {
+            ClientId = clientId;
+            ClientSecret = clientSecret;
+        }
+
+        public string ClientId { get; set; }
+        public string ClientSecret { get; set; }
+    }
+}

+ 53 - 0
src/Hotline.Share/Dtos/DataSharing/Province/DelayResultDto.cs

@@ -0,0 +1,53 @@
+namespace Sharing.Share.Dtos.DataSharing.Province
+{
+    /// <summary>
+    /// 服务工单延时审核结果接口
+    /// </summary>
+    public class DelayResultDto
+    {
+        /// <summary>
+        /// 服务工单编号  
+        /// </summary>
+        public string CaseSerial { get; set; }
+
+        /// <summary>
+        /// 审核结果       1:通过;0:不通过;2:申请;
+        /// </summary>
+        public string AuditResult { get; set; }
+
+        /// <summary>
+        /// 审核意见
+        /// </summary>
+        public string AuditOpinion { get; set; }
+
+        /// <summary>
+        /// 审核时间
+        /// </summary>
+        public DateTime? AuditTime { get; set; }
+
+        /// <summary>
+        /// 审核部门
+        /// </summary>
+        public string AuditOuname { get; set; }
+
+        /// <summary>
+        /// 审核人
+        /// </summary>
+        public string AuditPerson { get; set; }
+
+        /// <summary>
+        /// 申请延期数量
+        /// </summary>
+        public int ApplyDelaynum { get; set; }
+
+        /// <summary>
+        /// 申请延期单位(工作日或工作小时)1:工作小时;2:工作日;3:自然日;
+        /// </summary>
+        public int ApplyDelayunit { get; set; }
+
+        /// <summary>
+        /// 材料标识
+        /// </summary>
+        public List<string> CliengGuid { get; set; }
+    }
+}

+ 33 - 0
src/Hotline.Share/Dtos/DataSharing/Province/EvlResultDto.cs

@@ -0,0 +1,33 @@
+namespace Sharing.Share.Dtos.DataSharing.Province
+{
+    /// <summary>
+    /// 交办工单满意度接收
+    /// </summary>
+    public class EvlResultDto
+    {
+        /// <summary>
+        /// 服务工单编号  
+        /// </summary>
+        public string CaseSerial { get; set; }
+
+        /// <summary>
+        /// 评价时间
+        /// </summary>
+        public DateTime? ReplyTime { get; set; }
+
+        /// <summary>
+        /// 评价内容
+        /// </summary>
+        public string ReplyContent { get; set; }
+
+        /// <summary>
+        /// 结果满意度       1:非常不满意;2:不满意;3:基本满意;4:满意;5:非常满意;
+        /// </summary>
+        public string ResultEvl { get; set; }
+
+        /// <summary>
+        /// 作风满意度       1:非常不满意;2:不满意;3:基本满意;4:满意;5:非常满意;
+        /// </summary>
+        public string StyleEvl { get; set; }
+    }
+}

+ 12 - 0
src/Hotline.Share/Dtos/DataSharing/Province/Extend/Class1.cs

@@ -0,0 +1,12 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Hotline.Share.Dtos.DataSharing.Province.Extend
+{
+    internal class Class1
+    {
+    }
+}

+ 46 - 0
src/Hotline.Share/Dtos/DataSharing/Province/Extend/FormEnvironMentInfo.cs

@@ -0,0 +1,46 @@
+using System.Text.Json.Serialization;
+
+namespace Hotline.Share.Dtos.DataSharing.Province.Extend
+{
+    /// <summary>
+    /// 环保举报业务专业表单
+    /// </summary>
+    public class FormEnvironMentInfo
+    {
+        /// <summary>
+        /// 邮箱 
+        /// </summary>
+        [JsonPropertyName("COMPLAINT_MAILBOX")]
+        public string ComplaintMailBox { get; set; }
+
+        /// <summary>
+        /// 通讯地址 
+        /// </summary>
+        [JsonPropertyName("POSTAL_ADDRESS")]
+        public string PostalAddress { get; set; }
+
+        /// <summary>
+        /// 举报对象 
+        /// </summary>
+        [JsonPropertyName("REPORT_OBJECT")]
+        public string ReportObject { get; set; }
+
+        /// <summary>
+        /// 详细地址 
+        /// </summary>
+        [JsonPropertyName("DETAILED_ADDR")]
+        public string DetailedAddr { get; set; }
+
+        /// <summary>
+        /// 行业类型 
+        /// </summary>
+        [JsonPropertyName("INDUSTRY_TYPE")]
+        public string IndustryType { get; set; }
+
+        /// <summary>
+        /// 重点要素 
+        /// </summary>
+        [JsonPropertyName("KEY_POINT")]
+        public string KeyPoint { get; set; }
+    }
+}

+ 34 - 0
src/Hotline.Share/Dtos/DataSharing/Province/Extend/FormExpressWayInfo.cs

@@ -0,0 +1,34 @@
+using System.Text.Json.Serialization;
+
+namespace Hotline.Share.Dtos.DataSharing.Province.Extend
+{
+    /// <summary>
+    /// 高速公路工单
+    /// </summary>
+    public class FormExpressWayInfo
+    {
+        /// <summary>
+        /// 高速入口  
+        /// </summary>
+        [JsonPropertyName("IN_WAY")]
+        public string InWay { get; set; }
+
+        /// <summary>
+        /// 高速出口  
+        /// </summary>
+        [JsonPropertyName("OUT_WAY")]
+        public string OutWay { get; set; }
+
+        /// <summary>
+        /// 发生时间  
+        /// </summary>
+        [JsonPropertyName("OPERATEDATE")]
+        public DateTime? OperateDate { get; set; }
+
+        /// <summary>
+        /// 车牌号  
+        /// </summary>
+        [JsonPropertyName("CARDNUM")]
+        public string CardNum { get; set; }
+    }
+}

+ 430 - 0
src/Hotline.Share/Dtos/DataSharing/Province/Extend/FormMarketInfo.cs

@@ -0,0 +1,430 @@
+using System.Text.Json.Serialization;
+
+namespace Hotline.Share.Dtos.DataSharing.Province.Extend
+{
+    /// <summary>
+    /// 12315表单
+    /// </summary>
+    public class FormMarketInfo
+    {
+        /// <summary>
+        /// 表单类型  投诉:20举报:25咨询:10
+        /// </summary>
+        [JsonPropertyName("Rqsttypy")]
+        public string Rqsttypy { get; set; }
+
+        /// <summary>
+        /// 投诉问题类别
+        /// </summary>
+        [JsonPropertyName("ApplBasQue")]
+        public string ApplBasQue { get; set; }
+
+        /// <summary>
+        /// 投诉问题类别名称
+        /// </summary>
+        [JsonPropertyName("ApplBasQueName")]
+        public string ApplBasQueName { get; set; }
+
+        /// <summary>
+        /// 专利号
+        /// </summary>
+        [JsonPropertyName("Zlh")]
+        public string Zlh { get; set; }
+
+        /// <summary>
+        /// 专利权人
+        /// </summary>
+        [JsonPropertyName("Zlqr")]
+        public string Zlqr { get; set; }
+
+        /// <summary>
+        /// 发明名称
+        /// </summary>
+        [JsonPropertyName("Fmmc")]
+        public string Fmmc { get; set; }
+
+        /// <summary>
+        /// 专利类型
+        /// </summary>
+        [JsonPropertyName("Zllx")]
+        public string Zllx { get; set; }
+
+        /// <summary>
+        /// 专利类型名称
+        /// </summary>
+        [JsonPropertyName("ZllxMc")]
+        public string ZllxMc { get; set; }
+
+        /// <summary>
+        /// 实际经营地代码
+        /// </summary>
+        [JsonPropertyName("Accsce")]
+        public string Accsce { get; set; }
+
+        /// <summary>
+        /// 实际经营地详细地址
+        /// </summary>
+        [JsonPropertyName("Sfdd")]
+        public string Sfdd { get; set; }
+
+        /// <summary>
+        /// 争议发生时间
+        /// </summary>
+        [JsonPropertyName("ControversyTime")]
+        public DateTime? ControversyTime { get; set; }
+
+        /// <summary>
+        /// 诉求内容
+        /// </summary>
+        [JsonPropertyName("AppealContent")]
+        public string AppealContent { get; set; }
+
+        /// <summary>
+        /// 登记部门编码
+        /// </summary>
+        [JsonPropertyName("HandDepCode")]
+        public string HandDepCode { get; set; }
+
+        /// <summary>
+        /// 登记部门名称
+        /// </summary>
+        [JsonPropertyName("HandDep")]
+        public string HandDep { get; set; }
+
+        /// <summary>
+        /// 坐席工号
+        /// </summary>
+        [JsonPropertyName("Zxgh")]
+        public string Zxgh { get; set; }
+
+        /// <summary>
+        /// 受理登记人编码
+        /// </summary>
+        [JsonPropertyName("AccregperId")]
+        public string AccregperId { get; set; }
+
+        /// <summary>
+        /// 受理登记人名称
+        /// </summary>
+        [JsonPropertyName("AccregperName")]
+        public string AccregperName { get; set; }
+
+        /// <summary>
+        /// 登记信息录入时间
+        /// </summary>
+        [JsonPropertyName("RegTime")]
+        public DateTime? RegTime { get; set; }
+
+        /// <summary>
+        /// 登记信息提交时间
+        /// </summary>
+        [JsonPropertyName("CmTime")]
+        public DateTime? CmTime { get; set; }
+
+        /// <summary>
+        /// 商品服务类别编码
+        /// </summary>
+        [JsonPropertyName("OBType")]
+        public string OBType { get; set; }
+
+        /// <summary>
+        /// 商品服务类别名称
+        /// </summary>
+        [JsonPropertyName("OBTypeName")]
+        public string OBTypeName { get; set; }
+
+        /// <summary>
+        /// 商品服务名称
+        /// </summary>
+        [JsonPropertyName("MdseName")]
+        public string MdseName { get; set; }
+
+        /// <summary>
+        /// 销售方式
+        /// </summary>
+        [JsonPropertyName("SaleMode")]
+        public string SaleMode { get; set; }
+
+        /// <summary>
+        /// 投诉目标:网购时必填项选择【1:投诉电商平台2:投诉电商平台入驻商户】
+        /// </summary>
+        [JsonPropertyName("DsptType")]
+        public string DsptType { get; set; }
+
+        /// <summary>
+        /// 电商平台代码
+        /// </summary>
+        [JsonPropertyName("DsptCode")]
+        public string DsptCode { get; set; }
+
+        /// <summary>
+        /// 电商平台名称
+        /// </summary>
+        [JsonPropertyName("DsptName")]
+        public string DsptName { get; set; }
+
+        /// <summary>
+        /// 品牌代码/品牌ID
+        /// </summary>
+        [JsonPropertyName("BrandCode")]
+        public string BrandCode { get; set; }
+
+        /// <summary>
+        /// 品牌名称
+        /// </summary>
+        [JsonPropertyName("BrandName")]
+        public string BrandName { get; set; }
+
+        /// <summary>
+        /// 订单号
+        /// </summary>
+        [JsonPropertyName("BIdNo")]
+        public string BIdNo { get; set; }
+
+        /// <summary>
+        /// 消费金额
+        /// </summary>
+        [JsonPropertyName("InvoAm")]
+        public decimal? InvoAm { get; set; }
+
+        /// <summary>
+        /// 具体渠道类型 1 电视购物 ;2 电话购物;3 邮购(销售方式是“电视电话购物及邮购”时必填)
+        /// </summary>
+        [JsonPropertyName("Jtqdtype")]
+        public string Jtqdtype { get; set; }
+
+        /// <summary>
+        /// 具体渠道内容
+        /// </summary>
+        [JsonPropertyName("Jtqdname")]
+        public string Jtqdname { get; set; }
+
+        /// <summary>
+        /// 产品名称
+        /// </summary>
+        [JsonPropertyName("ProdName")]
+        public string ProdName { get; set; }
+
+        /// <summary>
+        /// 批准文号
+        /// </summary>
+        [JsonPropertyName("ProdAppNo")]
+        public string ProdAppNo { get; set; }
+
+        /// <summary>
+        /// 产品批号
+        /// </summary>
+        [JsonPropertyName("ProdPatchNo")]
+        public string ProdPatchNo { get; set; }
+
+        /// <summary>
+        /// 产品规格
+        /// </summary>
+        [JsonPropertyName("ProdTypeSpf")]
+        public string ProdTypeSpf { get; set; }
+
+        /// <summary>
+        /// 生产厂家
+        /// </summary>
+        [JsonPropertyName("ProdFty")]
+        public string ProdFty { get; set; }
+
+        /// <summary>
+        /// 销售企业
+        /// </summary>
+        [JsonPropertyName("ProdSalEnt")]
+        public string ProdSalEnt { get; set; }
+
+        /// <summary>
+        /// 产品有效期
+        /// </summary>
+        [JsonPropertyName("ProdValid")]
+        public string ProdValid { get; set; }
+
+        /// <summary>
+        /// 消费者地址
+        /// </summary>
+        [JsonPropertyName("ProviderAddr")]
+        public string ProviderAddr { get; set; }
+
+        /// <summary>
+        /// 企业名称
+        /// </summary>
+        [JsonPropertyName("Invopt")]
+        public string Invopt { get; set; }
+
+        /// <summary>
+        /// 所在行业类型代码
+        /// </summary>
+        [JsonPropertyName("UBindType")]
+        public string UBindType { get; set; }
+
+        /// <summary>
+        /// 所在行业类型名称
+        /// </summary>
+        [JsonPropertyName("UBindTypeName")]
+        public string UBindTypeName { get; set; }
+
+        /// <summary>
+        /// 市场主体类型代码
+        /// </summary>
+        [JsonPropertyName("EntType")]
+        public string EntType { get; set; }
+
+        /// <summary>
+        /// 市场主体类型名称
+        /// </summary>
+        [JsonPropertyName("EntTypeName")]
+        public string EntTypeName { get; set; }
+
+        /// <summary>
+        /// 企业所属行政区划代码
+        /// </summary>
+        [JsonPropertyName("ReqUnit")]
+        public string ReqUnit { get; set; }
+
+        /// <summary>
+        /// 企业注册地址
+        /// </summary>
+        [JsonPropertyName("Addr")]
+        public string Addr { get; set; }
+
+        /// <summary>
+        /// 联系人
+        /// </summary>
+        [JsonPropertyName("Sjztlxr")]
+        public string Sjztlxr { get; set; }
+
+        /// <summary>
+        /// 统一社会信用代码
+        /// </summary>
+        [JsonPropertyName("Nbxh")]
+        public string Nbxh { get; set; }
+
+        /// <summary>
+        /// 注册号
+        /// </summary>
+        [JsonPropertyName("RegNo")]
+        public string RegNo { get; set; }
+
+        /// <summary>
+        /// 证件类型
+        /// </summary>
+        [JsonPropertyName("CertType")]
+        public string CertType { get; set; }
+
+        /// <summary>
+        /// 证件类型名称
+        /// </summary>
+        [JsonPropertyName("CertTypeName")]
+        public string CertTypeName { get; set; }
+
+        /// <summary>
+        /// 证件号码
+        /// </summary>
+        [JsonPropertyName("CertNo")]
+        public string CertNo { get; set; }
+
+        /// <summary>
+        /// 提供方类型
+        /// </summary>
+        [JsonPropertyName("ReveType")]
+        public string ReveType { get; set; }
+
+        /// <summary>
+        /// 提供方类型名称
+        /// </summary>
+        [JsonPropertyName("ReveTypeName")]
+        public string ReveTypeName { get; set; }
+
+        /// <summary>
+        /// 国籍
+        /// </summary>
+        [JsonPropertyName("Nationality")]
+        public string Nationality { get; set; }
+
+        /// <summary>
+        /// 国籍名称
+        /// </summary>
+        [JsonPropertyName("NationalityName")]
+        public string NationalityName { get; set; }
+
+        /// <summary>
+        /// 民族
+        /// </summary>
+        [JsonPropertyName("Folk")]
+        public string Folk { get; set; }
+
+        /// <summary>
+        /// 民族名称
+        /// </summary>
+        [JsonPropertyName("FolkName")]
+        public string FolkName { get; set; }
+
+        /// <summary>
+        /// 提供方身份
+        /// </summary>
+        [JsonPropertyName("Peride")]
+        public string Peride { get; set; }
+
+        /// <summary>
+        /// 提供方身份名称
+        /// </summary>
+        [JsonPropertyName("PerideName")]
+        public string PerideName { get; set; }
+
+        /// <summary>
+        /// 电子邮箱
+        /// </summary>
+        [JsonPropertyName("ProviderMail")]
+        public string ProviderMail { get; set; }
+
+        /// <summary>
+        /// 其他联系方式
+        /// </summary>
+        [JsonPropertyName("Qtlxfs")]
+        public string Qtlxfs { get; set; }
+
+        /// <summary>
+        /// 咨询内容
+        /// </summary>
+        [JsonPropertyName("ApplIdiQue")]
+        public string ApplIdiQue { get; set; }
+
+        /// <summary>
+        /// 咨询范围
+        /// </summary>
+        [JsonPropertyName("ConlrangeCode")]
+        public string ConlrangeCode { get; set; }
+
+        /// <summary>
+        /// 咨询范围名称
+        /// </summary>
+        [JsonPropertyName("ConlrangeName")]
+        public string ConlrangeName { get; set; }
+
+        /// <summary>
+        /// 答复内容
+        /// </summary>
+        [JsonPropertyName("Fknr")]
+        public string Fknr { get; set; }
+
+        /// <summary>
+        /// 邮政编码
+        /// </summary>
+        [JsonPropertyName("Yzbm")]
+        public string Yzbm { get; set; }
+
+        /// <summary>
+        /// 年龄段
+        /// </summary>
+        [JsonPropertyName("AgeGroup")]
+        public string AgeGroup { get; set; }
+
+        /// <summary>
+        /// 年龄段名称
+        /// </summary>
+        [JsonPropertyName("AgeGroupName")]
+        public string AgeGroupName { get; set; }
+    }
+}

+ 52 - 0
src/Hotline.Share/Dtos/DataSharing/Province/Extend/FormMedicalInfo.cs

@@ -0,0 +1,52 @@
+using System.Text.Json.Serialization;
+
+namespace Hotline.Share.Dtos.DataSharing.Province.Extend
+{
+    /// <summary>
+    /// 医疗工单
+    /// </summary>
+    public class FormMedicalInfo
+    {
+        /// <summary>
+        /// 医院名称
+        /// </summary>
+        [JsonPropertyName("MEDICAL_NAME")]
+        public string MedicalName { get; set; }
+
+        /// <summary>
+        /// 医院地址
+        /// </summary>
+        [JsonPropertyName("MEDICAL_ADDR")]
+        public string MedicalAddr { get; set; }
+
+        /// <summary>
+        /// 科室
+        /// </summary>
+        [JsonPropertyName("DEPARTMENT")]
+        public string DepartMent { get; set; }
+
+        /// <summary>
+        /// 医生
+        /// </summary>
+        [JsonPropertyName("DOCTOR")]
+        public string Doctor { get; set; }
+
+        /// <summary>
+        /// 患者姓名
+        /// </summary>
+        [JsonPropertyName("PATIENTNAME")]
+        public string PatientName { get; set; }
+
+        /// <summary>
+        /// 就诊卡号
+        /// </summary>
+        [JsonPropertyName("CLINICCARDNUM")]
+        public string ClinicCardNum { get; set; }
+
+        /// <summary>
+        /// 患者身份证号
+        /// </summary>
+        [JsonPropertyName("CARDNUM")]
+        public string CardNum { get; set; }
+    }
+}

+ 22 - 0
src/Hotline.Share/Dtos/DataSharing/Province/Extend/FormNetWorktecInfo.cs

@@ -0,0 +1,22 @@
+using System.Text.Json.Serialization;
+
+namespace Hotline.Share.Dtos.DataSharing.Province.Extend
+{
+    /// <summary>
+    /// 四川政务服务网技术工单
+    /// </summary>
+    public class FormNetWorktecInfo
+    {
+        /// <summary>
+        /// 政务服务网账号  
+        /// </summary>
+        [JsonPropertyName("ZWFW_ACCOUNT")]
+        public string ZwfwAccount { get; set; }
+
+        /// <summary>
+        /// 联系方式  
+        /// </summary>
+        [JsonPropertyName("LINK_PESON")]
+        public string LinkPeson { get; set; }
+    }
+}

+ 82 - 0
src/Hotline.Share/Dtos/DataSharing/Province/Extend/FormPostInfo.cs

@@ -0,0 +1,82 @@
+using System.Text.Json.Serialization;
+
+namespace Hotline.Share.Dtos.DataSharing.Province.Extend
+{
+    /// <summary>
+    /// 邮政业消费者申诉受理信息
+    /// </summary>
+    public class FormPostInfo
+    {
+        /// <summary>
+        /// 申诉人姓名 
+        /// </summary>
+        [JsonPropertyName("APPEAL_NAME")]
+        public string AppealName { get; set; }
+
+        /// <summary>
+        /// 申诉人电话 
+        /// </summary>
+        [JsonPropertyName("APPEAL_NUM")]
+        public string AppealNum { get; set; }
+
+        /// <summary>
+        /// 申诉企业 
+        /// </summary>
+        [JsonPropertyName("APPEAL_ENTERPRISE")]
+        public string AppealEnterprise { get; set; }
+
+        /// <summary>
+        /// 寄件人姓名 
+        /// </summary>
+        [JsonPropertyName("SENDER_NAME")]
+        public string SenderName { get; set; }
+
+        /// <summary>
+        /// 寄件人电话 
+        /// </summary>
+        [JsonPropertyName("SENDER_NUM")]
+        public string SenderNum { get; set; }
+
+        /// <summary>
+        /// 寄件人地址 
+        /// </summary>
+        [JsonPropertyName("SENDER_ADDR")]
+        public string SenderAddr { get; set; }
+
+        /// <summary>
+        /// 收件人姓名 
+        /// </summary>
+        [JsonPropertyName("ADDRESSEE_NAME")]
+        public string AddresseeName { get; set; }
+
+        /// <summary>
+        /// 收件人电话 
+        /// </summary>
+        [JsonPropertyName("ADDRESSEE_NUM")]
+        public string AddresseeNum { get; set; }
+
+        /// <summary>
+        /// 收件人地址 
+        /// </summary>
+        [JsonPropertyName("ADDRESSEE_ADDR")]
+        public string AddresseeAddr { get; set; }
+
+        /// <summary>
+        /// 涉及金额 
+        /// </summary>
+        [JsonPropertyName("INSURED_PRICE")]
+        public string InsuredPrice { get; set; }
+
+        /// <summary>
+        /// 是否联系快递公司投诉 
+        /// </summary>
+        [JsonPropertyName("IS_CONTACT")]
+        public string IsContact { get; set; }
+
+        /// <summary>
+        /// 处理结果 
+        /// </summary>
+        [JsonPropertyName("OPERATE_RESULT")]
+        public string OperateResult { get; set; }
+    }
+}

+ 58 - 0
src/Hotline.Share/Dtos/DataSharing/Province/Extend/FormReturnexChangeInfo.cs

@@ -0,0 +1,58 @@
+using System.Text.Json.Serialization;
+
+namespace Hotline.Share.Dtos.DataSharing.Province.Extend
+{
+    /// <summary>
+    /// 电视购物及商铺购买退换货工单
+    /// </summary>
+    public class FormReturnexChangeInfo
+    {
+        /// <summary>
+        /// 电视台(商铺)  
+        /// </summary>
+        [JsonPropertyName("SUBJECT_NAME")]
+        public string SubjectName { get; set; }
+
+        /// <summary>
+        /// 购买时间  
+        /// </summary>
+        [JsonPropertyName("PURCHASE_TIME")]
+        public string PurchaseTime { get; set; }
+
+        /// <summary>
+        /// 产品名称  
+        /// </summary>
+        [JsonPropertyName("PRODUCT_NAME")]
+        public string ProductName { get; set; }
+
+        /// <summary>
+        /// 消费金额  
+        /// </summary>
+        [JsonPropertyName("CHARGE")]
+        public string Charge { get; set; }
+
+        /// <summary>
+        /// 商家名称  
+        /// </summary>
+        [JsonPropertyName("BUSINESS_NAME")]
+        public string BusinessName { get; set; }
+
+        /// <summary>
+        /// 商家地址  
+        /// </summary>
+        [JsonPropertyName("BUSUNESS_ADDR")]
+        public string BusunessAddr { get; set; }
+
+        /// <summary>
+        /// 收货人  
+        /// </summary>
+        [JsonPropertyName("RECEIVE_PERSON")]
+        public string ReceivePerson { get; set; }
+
+        /// <summary>
+        /// 收货人地址  
+        /// </summary>
+        [JsonPropertyName("RECEIVE_ADDR")]
+        public string ReceiveAddr { get; set; }
+    }
+}

+ 28 - 0
src/Hotline.Share/Dtos/DataSharing/Province/Extend/FormShamPubInfo.cs

@@ -0,0 +1,28 @@
+using System.Text.Json.Serialization;
+
+namespace Hotline.Share.Dtos.DataSharing.Province.Extend
+{
+    /// <summary>
+    /// 电视台虚假广告工单
+    /// </summary>
+    public class FormShamPubInfo
+    {
+        /// <summary>
+        /// 电视台  
+        /// </summary>
+        [JsonPropertyName("SUBJECT_NAME")]
+        public string SubjectName { get; set; }
+
+        /// <summary>
+        ///产品名称
+        /// </summary>
+        [JsonPropertyName("PRODUCT_NAME")]
+        public string ProductName { get; set; }
+
+        /// <summary>
+        /// 虚假广告内容
+        /// </summary>
+        [JsonPropertyName("PUB_CONTENT")]
+        public string PubContent { get; set; }
+    }
+}

+ 28 - 0
src/Hotline.Share/Dtos/DataSharing/Province/Extend/FormTaxationComplaintInfo.cs

@@ -0,0 +1,28 @@
+using System.Text.Json.Serialization;
+
+namespace Hotline.Share.Dtos.DataSharing.Province.Extend
+{
+    /// <summary>
+    /// 12366投诉表单
+    /// </summary>
+    public class FormTaxationComplaintInfo
+    {
+        /// <summary>
+        /// 主管税务机关(问题归属地)  
+        /// </summary>
+        [JsonPropertyName("TAX_AUTHORITY")]
+        public string TaxAuthority { get; set; }
+
+        /// <summary>
+        /// 被投诉单位或个人信息  
+        /// </summary>
+        [JsonPropertyName("COMPLAINT_SUBJECT")]
+        public string ComplaintSubject { get; set; }
+
+        /// <summary>
+        /// 投诉类型  
+        /// </summary>
+        [JsonPropertyName("COMPLAINT_TYPE")]
+        public string ComplaintType { get; set; }
+    }
+}

+ 22 - 0
src/Hotline.Share/Dtos/DataSharing/Province/Extend/FormTaxationConsultingInfo.cs

@@ -0,0 +1,22 @@
+using System.Text.Json.Serialization;
+
+namespace Hotline.Share.Dtos.DataSharing.Province.Extend
+{
+    /// <summary>
+    /// 四川省12366热线咨询交办单
+    /// </summary>
+    public class FormTaxationConsultingInfo
+    {
+        /// <summary>
+        /// 主管税务机关(问题归属地)  
+        /// </summary>
+        [JsonPropertyName("TAX_AUTHORITY")]
+        public string TaxAuthority { get; set; }
+
+        /// <summary>
+        /// 被投诉单位或个人信息  
+        /// </summary>
+        [JsonPropertyName("COMPLAINT_SUBJECT")]
+        public string ComplaintSubject { get; set; }
+    }
+}

+ 22 - 0
src/Hotline.Share/Dtos/DataSharing/Province/Extend/FormTrafficInfo.cs

@@ -0,0 +1,22 @@
+using System.Text.Json.Serialization;
+
+namespace Hotline.Share.Dtos.DataSharing.Province.Extend
+{
+    /// <summary>
+    /// 12328服务监督中心受理单
+    /// </summary>
+    public class FormTrafficInfo
+    {
+        /// <summary>
+        /// 受理方式
+        /// </summary>
+        [JsonPropertyName("ACCEPT_TYPE")]
+        public string AcceptType { get; set; }
+
+        /// <summary>
+        /// 客户  
+        /// </summary>
+        [JsonPropertyName("CUSTOMER")]
+        public string Customer { get; set; }
+    }
+}

+ 50 - 0
src/Hotline.Share/Dtos/DataSharing/Province/FileDto.cs

@@ -0,0 +1,50 @@
+namespace Sharing.Share.Dtos.DataSharing.Province
+{
+    public class FileDto
+    {
+        /// <summary>
+        /// 服务工单编号  
+        /// </summary>
+        public string CaseSerial { get; set; }
+
+        /// <summary>
+        /// 材料类型
+        /// </summary>
+        public string MaterialType { get; set; }
+
+        /// <summary>
+        /// 材料标识
+        /// </summary>
+        public string CliengGuid { get; set; }
+
+        /// <summary>
+        /// 行政区划代码
+        /// </summary>
+        public string AreaCode { get; set; }
+
+        /// <summary>
+        /// 附件名称
+        /// </summary>
+        public string? FileName { get; set; }
+
+        /// <summary>
+        /// 附件大小
+        /// </summary>
+        public long? FileSize { get; set; }
+
+        /// <summary>
+		/// 附件KEY
+		/// </summary>
+        public string Key { get; set; }
+
+        /// <summary>
+        /// 附件类型
+        /// </summary>
+        public string? Type { get; set; }
+
+        /// <summary>
+		/// 附件
+		/// </summary>
+        public string? Additions { get; set; }
+    }
+}

+ 118 - 0
src/Hotline.Share/Dtos/DataSharing/Province/HuiJu/Send/SubmitCaseExtendsRequest.cs

@@ -0,0 +1,118 @@
+using Hotline.Share.Dtos.DataSharing.Province;
+using Hotline.Share.Dtos.DataSharing.Province.Extend;
+using System.Text.Json.Serialization;
+
+namespace Sharing.Province.Dtos.HuiJu.Send
+{
+    /// <summary>
+    /// 服务工单拓展信息
+    /// </summary>
+    public class SubmitCaseExtendsRequest : ProvinceRequest<SubmitCaseExtendsInfo>
+    {
+        //业务汇聚-服务工单受理接口
+
+        public override string GetRequestUrl() => "submit_case_extends";
+
+        public override string GetHttpMethod() => "Post";
+    }
+
+    /// <summary>
+    /// 
+    /// </summary>
+    public class SubmitCaseExtendsInfoId
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        public string Id { get; set; }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public SubmitCaseExtendsInfo Info { get; set; }
+    }
+
+    /// <summary>
+    /// 服务工单拓展信息
+    /// </summary>
+    public class SubmitCaseExtendsInfo
+    {
+        /// <summary>
+        /// 服务工单编号
+        /// </summary>
+        [JsonPropertyName("CASE_SERIAL")]
+        public string CaseSerial { get; set; }
+
+        /// <summary>
+        /// 表单类型
+        /// </summary>
+        [JsonPropertyName("FORM_TYPE")]
+        public string FormType { get; set; }
+
+        /// <summary>
+        /// 医疗工单
+        /// </summary>
+        [JsonPropertyName("FORM_MEDICAL")]
+        public FormMedicalInfo FormMedical { get; set; }
+
+        /// <summary>
+        /// 电视购物及商铺购买退换货工单
+        /// </summary>
+        [JsonPropertyName("FORM_RETURNEXCHANGE")]
+        public FormReturnexChangeInfo FormReturnexChange { get; set; }
+
+        /// <summary>
+        /// 电视台虚假广告工单
+        /// </summary>
+        [JsonPropertyName("FORM_SHAMPUB")]
+        public FormShamPubInfo FormShamPub { get; set; }
+
+        /// <summary>
+        /// 高速公路工单
+        /// </summary>
+        [JsonPropertyName("FORM_EXPRESSWAY")]
+        public FormExpressWayInfo FormExpressWay { get; set; }
+
+        /// <summary>
+        /// 四川政务服务网技术工单
+        /// </summary>
+        [JsonPropertyName("FORM_NETWORKTEC")]
+        public FormNetWorktecInfo FormNetWorktec { get; set; }
+
+        /// <summary>
+        /// 12366投诉表单
+        /// </summary>
+        [JsonPropertyName("FORM_TAXATION_COMPLAINT")]
+        public FormTaxationComplaintInfo FormTaxationComplaint { get; set; }
+
+        /// <summary>
+        /// 四川省12366热线咨询交办单
+        /// </summary>
+        [JsonPropertyName("FORM_TAXATION_CONSULTING")]
+        public FormTaxationConsultingInfo FormTaxationConsulting { get; set; }
+
+        /// <summary>
+        /// 12328服务监督中心受理单
+        /// </summary>
+        [JsonPropertyName("FORM_TRAFFIC")]
+        public FormTrafficInfo FormTraffic { get; set; }
+
+        /// <summary>
+        /// 邮政业消费者申诉受理信息
+        /// </summary>
+        [JsonPropertyName("FORM_POST")]
+        public FormPostInfo FormPost { get; set; }
+
+        /// <summary>
+        /// 环保举报业务专业表单
+        /// </summary>
+        [JsonPropertyName("FORM_ENVIRONMENT")]
+        public FormEnvironMentInfo FormEnvironMent { get; set; }
+
+        /// <summary>
+        /// 12315表单
+        /// </summary>
+        [JsonPropertyName("FORM_MARKET")]
+        public FormMarketInfo FormMarket { get; set; }
+    }
+}

+ 241 - 0
src/Hotline.Share/Dtos/DataSharing/Province/HuiJu/Send/SubmitCaseInfoRequest.cs

@@ -0,0 +1,241 @@
+using Hotline.Share.Dtos.DataSharing.Province;
+using System.Text.Json.Serialization;
+
+namespace Sharing.Province.Dtos.HuiJu.Send;
+
+/// <summary>
+/// 服务工单受理
+/// </summary>
+public class SubmitCaseInfoRequest : ProvinceRequest<SubmitCaseInfoData>
+{
+    //业务汇聚-服务工单受理接口
+
+    public override string GetRequestUrl() => "submit_case_info";
+
+    public override string GetHttpMethod() => "Post";
+}
+
+/// <summary>
+/// 服务工单受理
+/// </summary>
+public class SubmitCaseInfoData
+{
+    [JsonPropertyName("jsonList")]
+    public IReadOnlyList<CaseInfo> CaseInfos { get; set; }
+}
+
+/// <summary>
+/// 
+/// </summary>
+public class CaseInfo : BaseModel
+{
+    /// <summary>
+    /// 服务工单标题
+    /// </summary>
+    [JsonPropertyName("CASE_TITLE")]
+    public string CaseTitle { get; set; }
+
+    /// <summary>
+    /// 服务代表姓名
+    /// </summary>
+    [JsonPropertyName("CASE_REGISTER")]
+    public string CaseRegister { get; set; }
+
+    /// <summary>
+    /// 服务代表工号
+    /// </summary>
+    [JsonPropertyName("CASE_REGISTERNO")]
+    public string CaseRegisterNo { get; set; }
+
+    /// <summary>
+    /// 登记时间
+    /// </summary>
+    [JsonPropertyName("CASE_DATE")]
+    public DateTime CaseDate { get; set; }
+
+    /// <summary>
+    /// 诉求渠道
+    /// </summary>
+    [JsonPropertyName("CASE_SOURCE")]
+    public string CaseSource { get; set; }
+
+    /// <summary>
+    /// 联系电话
+    /// </summary>
+    [JsonPropertyName("PHONE_NUMBER")]
+    public string PhoneNumber { get; set; }
+
+    /// <summary>
+    /// 服务对象名称
+    /// </summary>
+    [JsonPropertyName("APPLICANT_NAME")]
+    public string AppLicantName { get; set; }
+
+    /// <summary>
+    /// 服务对象性别
+    /// </summary>
+    [JsonPropertyName("APPLICANT_SEX")]
+    public string AppLicantSex { get; set; }
+
+    /// <summary>
+    /// 服务对象年龄
+    /// </summary>
+    [JsonPropertyName("APPLICANT_AGE")]
+    public string AppLicantAge { get; set; }
+
+    /// <summary>
+    /// 证件号码
+    /// </summary>
+    [JsonPropertyName("APPLICANT_ID")]
+    public string AppLicantId { get; set; }
+
+    /// <summary>
+    /// 证件类型
+    /// </summary>
+    [JsonPropertyName("CERTIFICATE_TYPE")]
+    public string CertifiCateType { get; set; }
+
+    /// <summary>
+    /// 诉求类型
+    /// </summary>
+    [JsonPropertyName("CASE_TYPE")]
+    public string CaseType { get; set; }
+
+    /// <summary>
+    /// 诉求归口
+    /// </summary>
+    [JsonPropertyName("CASE_ACCORD")]
+    public string CaseAccord { get; set; }
+
+    /// <summary>
+    /// 诉求内容
+    /// </summary>
+    [JsonPropertyName("CASE_CONTENT")]
+    public string CaseContent { get; set; }
+
+    /// <summary>
+    /// 处理方式
+    /// </summary>
+    [JsonPropertyName("CASE_PROCESS_TYPE")]
+    public string CaseProcessType { get; set; }
+
+    /// <summary>
+    /// 是否公开
+    /// </summary>
+    [JsonPropertyName("CASE_ISPUBLIC")]
+    public string CaseIsPublic { get; set; }
+
+    /// <summary>
+    /// 是否保密
+    /// </summary>
+    [JsonPropertyName("CASE_ISSECRECT")]
+    public string CaseIsSecrect { get; set; }
+
+    /// <summary>
+    /// 是否回访-工单是否需要回访
+    /// </summary>
+    [JsonPropertyName("CASE_ISVISIT")]
+    public string CaseIsVisit { get; set; }
+
+    /// <summary>
+    /// 是否有效受理
+    /// </summary>
+    [JsonPropertyName("CASE_VALID")]
+    public string CaseValid { get; set; }
+
+    /// <summary>
+    /// 紧急程度
+    /// </summary>
+    [JsonPropertyName("CASE_ISURGENT")]
+    public string CaseIsUrgent { get; set; }
+
+    /// <summary>
+    /// 应签收时限
+    /// </summary>
+    [JsonPropertyName("TSIGNTIME_BF")]
+    public DateTime? TSigntTmeBf { get; set; }
+
+    /// <summary>
+    /// 应办结时限
+    /// </summary>
+    [JsonPropertyName("TFDBACKTIME_BF")]
+    public DateTime? TfdBackTimeBf { get; set; }
+
+    /// <summary>
+    /// 应退回时限
+    /// </summary>
+    [JsonPropertyName("TBACKTIME_BF")]
+    public DateTime? TBackTimeBf { get; set; }
+
+    /// <summary>
+    /// 关联服务工单
+    /// </summary>
+    [JsonPropertyName("RELATE_SERIAL")]
+    public string? RelateSerial { get; set; }
+
+    /// <summary>
+    /// 经纬度
+    /// </summary>
+    [JsonPropertyName("CASE_LNGLAT")]
+    public string CaseLngLat { get; set; }
+
+    /// <summary>
+    /// 诉求情感
+    /// </summary>
+    [JsonPropertyName("CASE_EMOTION")]
+    public string CaseEmotion { get; set; }
+
+    /// <summary>
+    /// 诉求详细地址
+    /// </summary>
+    [JsonPropertyName("CASE_ADDRESS")]
+    public string CaseAddress { get; set; }
+
+    /// <summary>
+    /// 事发时间
+    /// </summary>
+    [JsonPropertyName("EVENT_DATE")]
+    public DateTime? EventDate { get; set; }
+
+    /// <summary>
+    /// 诉求目的
+    /// </summary>
+    [JsonPropertyName("CASE_GOAL")]
+    public string CaseGoal { get; set; }
+
+    /// <summary>
+    /// 主题工单类型
+    /// </summary>
+    [JsonPropertyName("THEME_SERIAL")]
+    public string ThemeSerial { get; set; }
+
+    /// <summary>
+    /// 建议类型
+    /// </summary>
+    [JsonPropertyName("ADVISE_TYPE")]
+    public string AdviseType { get; set; }
+
+    /// <summary>
+    /// 建议部门
+    /// </summary>
+    [JsonPropertyName("ADVISE_DEPT")]
+    public string AdviseDept { get; set; }
+
+    /// <summary>
+    /// 投诉类型
+    /// </summary>
+    [JsonPropertyName("COMPLAIN_TYPE")]
+    public string ComplainType { get; set; }
+
+    /// <summary>
+    /// 投诉部门
+    /// </summary>
+    [JsonPropertyName("COMPLAIN_DEPT")]
+    public string ComplainDept { get; set; }
+
+    /// <summary>
+    /// 推送类型
+    /// </summary>
+    [JsonPropertyName("PUSH_TYPE")]
+    public string PushType { get; set; }
+}

+ 80 - 0
src/Hotline.Share/Dtos/DataSharing/Province/HuiJu/Send/SubmitCaseProcessRequest.cs

@@ -0,0 +1,80 @@
+using Hotline.Share.Dtos.DataSharing.Province;
+using System.Text.Json.Serialization;
+
+namespace Sharing.Province.Dtos.HuiJu.Send
+{
+    /// <summary>
+    /// 服务工单处理过程
+    /// </summary>
+    public class SubmitCaseProcessRequest : ProvinceRequest<SubmitCaseProcessData>
+    {
+        //服务工单处理结果
+
+        public override string GetRequestUrl() => "submit_case_process";
+
+        public override string GetHttpMethod() => "Post";
+    }
+
+    /// <summary>
+    /// 服务工单处理过程
+    /// </summary>
+    public class SubmitCaseProcessData
+    {
+        [JsonPropertyName("jsonList")]
+        public IReadOnlyList<CaseProcess> CaseProcesss { get; set; }
+    }
+
+    /// <summary>
+    /// 
+    /// </summary>
+    public class CaseProcess : BaseModel
+    {
+        /// <summary>
+        /// 处理部门
+        /// </summary>
+        [JsonPropertyName("DEPT_NAME")]
+        public string DeptName { get; set; }
+
+        /// <summary>
+        /// 环节名称
+        /// </summary>
+        [JsonPropertyName("TACHE_NAME")]
+        public string TacheName { get; set; }
+
+        /// <summary>
+        /// 处理时间
+        /// </summary>
+        [JsonPropertyName("PROCESS_TIME")]
+        public DateTime? ProcessTime { get; set; }
+
+        /// <summary>
+        /// 处理人员
+        /// </summary>
+        [JsonPropertyName("PROCESS_NAME")]
+        public string ProcessName { get; set; }
+
+        /// <summary>
+        /// 处理意见
+        /// </summary>
+        [JsonPropertyName("PROCESS_NOTE")]
+        public string ProcessNote { get; set; }
+
+        /// <summary>
+        /// 办理部门所在区、市、县行政区划代码
+        /// </summary>
+        [JsonPropertyName("END_AREACODE")]
+        public string EndAreaCode { get; set; }
+
+        /// <summary>
+        /// 办理部门所在区、市、县行政区划名称
+        /// </summary>
+        [JsonPropertyName("END_AREANAME")]
+        public string EndAreaName { get; set; }
+
+        /// <summary>
+        /// 过程记录唯一标识
+        /// </summary>
+        [JsonPropertyName("case_id")]
+        public string CaseId { get; set; }
+    }
+}

+ 96 - 0
src/Hotline.Share/Dtos/DataSharing/Province/HuiJu/Send/SubmitCaseRecordRequest.cs

@@ -0,0 +1,96 @@
+using Hotline.Share.Dtos.DataSharing.Province;
+using System.Text.Json.Serialization;
+
+namespace Sharing.Province.Dtos.HuiJu.Send
+{
+    /// <summary>
+    /// 电话记录
+    /// </summary>
+    public class SubmitCaseRecordRequest : ProvinceRequest<SubmitCaseRecordData>
+    {
+        public override string GetRequestUrl() => "submit_case_record";
+
+        public override string GetHttpMethod() => "Post";
+    }
+
+    /// <summary>
+    /// 电话记录
+    /// </summary>
+    public class SubmitCaseRecordData
+    {
+        [JsonPropertyName("jsonList")]
+        public IReadOnlyList<CaseRecord> CaseRecords { get; set; }
+    }
+
+    /// <summary>
+    /// 
+    /// </summary>
+    public class CaseRecord : BaseProvinceModel
+    {
+        /// <summary>
+        /// 电话号码
+        /// </summary>
+        [JsonPropertyName("DEPT_NAME")]
+        public string PhoneNumber { get; set; }
+
+        /// <summary>
+        /// 通话状态
+        /// </summary>
+        [JsonPropertyName("DEPT_NAME")]
+        public string PhoneStatus { get; set; }
+
+        /// <summary>
+        /// 是否呼出
+        /// </summary>
+        [JsonPropertyName("DEPT_NAME")]
+        public string IsPhoneCall { get; set; }
+
+        /// <summary>
+        /// 接通电话时间
+        /// </summary>
+        [JsonPropertyName("DEPT_NAME")]
+        public DateTime? CallStart { get; set; }
+
+        /// <summary>
+        /// 通话结束时间
+        /// </summary>
+        [JsonPropertyName("DEPT_NAME")]
+        public DateTime? CallEnd { get; set; }
+
+        /// <summary>
+        /// 进ivr时间
+        /// </summary>
+        [JsonPropertyName("DEPT_NAME")]
+        public DateTime? InIvr { get; set; }
+
+        /// <summary>
+        /// 进队列时间
+        /// </summary>
+        [JsonPropertyName("DEPT_NAME")]
+        public DateTime? InQueue { get; set; }
+
+        /// <summary>
+        /// 振铃时间
+        /// </summary>
+        [JsonPropertyName("DEPT_NAME")]
+        public DateTime? CallTime { get; set; }
+
+        /// <summary>
+        /// 通话时长
+        /// </summary>
+        [JsonPropertyName("DEPT_NAME")]
+        public int CallLength { get; set; }
+
+        /// <summary>
+        /// 坐席人员工号
+        /// </summary>
+        [JsonPropertyName("DEPT_NAME")]
+        public string SeatNumber { get; set; }
+
+        /// <summary>
+        /// 录音路径
+        /// </summary>
+        [JsonPropertyName("DEPT_NAME")]
+        public string AccordUrl { get; set; }
+    }
+}

+ 146 - 0
src/Hotline.Share/Dtos/DataSharing/Province/HuiJu/Send/SubmitCaseResultRequest.cs

@@ -0,0 +1,146 @@
+using Hotline.Share.Dtos.DataSharing.Province;
+using System.Text.Json.Serialization;
+
+namespace Sharing.Province.Dtos.HuiJu.Send
+{
+    /// <summary>
+    /// 服务工单处理结果
+    /// </summary>
+    public class SubmitCaseResultRequest : ProvinceRequest<SubmitCaseResultData>
+    {
+        //服务工单处理结果
+
+        public override string GetRequestUrl() => "submit_case_result";
+
+        public override string GetHttpMethod() => "Post";
+    }
+
+    /// <summary>
+    /// 服务工单处理结果
+    /// </summary>
+    public class SubmitCaseResultData
+    {
+        [JsonPropertyName("jsonList")]
+        public IReadOnlyList<CaseResult> CaseResults { get; set; }
+    }
+
+    /// <summary>
+    /// 
+    /// </summary>
+    public class CaseResult : BaseModel
+    {
+        /// <summary>
+        /// 答复单位
+        /// </summary>
+        [JsonPropertyName("DEPT_NAME")]
+        public string DeptName { get; set; }
+
+        /// <summary>
+        /// 答复时间
+        /// </summary>
+        [JsonPropertyName("FINISH_TIME")]
+        public DateTime? FinishTime { get; set; }
+
+        /// <summary>
+        /// 答复人员
+        /// </summary>
+        [JsonPropertyName("FINISH_NAME")]
+        public string FinishName { get; set; }
+
+        /// <summary>
+        /// 办理情况
+        /// </summary>
+        [JsonPropertyName("FINISH_NOTE")]
+        public string FinishNote { get; set; }
+
+        /// <summary>
+        /// 办理单位
+        /// </summary>
+        [JsonPropertyName("END_DEPT")]
+        public string EndDept { get; set; }
+
+        /// <summary>
+        /// 办理人员
+        /// </summary>
+        [JsonPropertyName("END_NAME")]
+        public string EndName { get; set; }
+
+        /// <summary>
+        /// 联系时间
+        /// </summary>
+        [JsonPropertyName("CONCACT_TIME")]
+        public DateTime? ConcactTime { get; set; }
+
+        /// <summary>
+        /// 联系方式
+        /// </summary>
+        [JsonPropertyName("CONCACT_TYPE")]
+        public string ConcactType { get; set; }
+
+        /// <summary>
+        /// 办理操作
+        /// </summary>
+        [JsonPropertyName("FINISH_TYPE")]
+        public string FinishType { get; set; }
+
+        /// <summary>
+        /// 办理时长
+        /// </summary>
+        [JsonPropertyName("HANDLETIME_LONG")]
+        public int HandleTimeLong { get; set; }
+
+        /// <summary>
+        /// 应签收时间
+        /// </summary>
+        [JsonPropertyName("SIGN_TIME_BF")]
+        public DateTime? SignTimeBf { get; set; }
+
+        /// <summary>
+        /// 签收时间
+        /// </summary>
+        [JsonPropertyName("SIGN_TIME")]
+        public DateTime? SignTime { get; set; }
+
+        /// <summary>
+        /// 应反馈时间
+        /// </summary>
+        [JsonPropertyName("FDBACKTIME_BF")]
+        public DateTime? FdBackTime_Bf { get; set; }
+
+        /// <summary>
+        /// 反馈时间
+        /// </summary>
+        [JsonPropertyName("FDBACKTIME")]
+        public DateTime? FdBackTime { get; set; }
+
+        /// <summary>
+        /// 交办时间
+        /// </summary>
+        [JsonPropertyName("SEND_TIME")]
+        public DateTime? SendTime { get; set; }
+
+        /// <summary>
+        /// 反馈意见
+        /// </summary>
+        [JsonPropertyName("FDBACK")]
+        public string FdBack { get; set; }
+
+        /// <summary>
+        /// 办结单位所在区县区域代码
+        /// </summary>
+        [JsonPropertyName("END_AREACODE")]
+        public string EndAreaCode { get; set; }
+
+        /// <summary>
+        /// 办结单位所在区县名称
+        /// </summary>
+        [JsonPropertyName("END_AREANAME")]
+        public string EndAreaName { get; set; }
+
+        /// <summary>
+        /// 工单办理过程中交办单位
+        /// </summary>
+        [JsonPropertyName("BEIZHU")]
+        public string BeiZhu { get; set; }
+    }
+}

+ 62 - 0
src/Hotline.Share/Dtos/DataSharing/Province/HuiJu/Send/SubmitCaseTotalRequest.cs

@@ -0,0 +1,62 @@
+using Hotline.Share.Dtos.DataSharing.Province;
+using System.Text.Json.Serialization;
+
+namespace Sharing.Province.Dtos.HuiJu.Send
+{
+    /// <summary>
+    /// 统计数据
+    /// </summary>
+    public class SubmitCaseTotalRequest : ProvinceRequest<SubmitCaseTotalData>
+    {
+        //服务工单处理结果
+
+        public override string GetRequestUrl() => "submit_case_total";
+
+        public override string GetHttpMethod() => "Post";
+    }
+
+    /// <summary>
+    /// 统计数据
+    /// </summary>
+    public class SubmitCaseTotalData
+    {
+        [JsonPropertyName("jsonList")]
+        public IReadOnlyList<CaseTotal> CaseTotals { get; set; }
+    }
+
+    /// <summary>
+    /// 
+    /// </summary>
+    public class CaseTotal
+    {
+        /// <summary>
+        /// 坐席数(个)
+        /// </summary>
+        [JsonPropertyName("SEATNUM")]
+        public int SeatNum { get; set; }
+
+        /// <summary>
+        /// 坐席话务员数(个)
+        /// </summary>
+        [JsonPropertyName("SEATHWYNUM")]
+        public int SeatHwyNum { get; set; }
+
+        /// <summary>
+        /// 催办总量
+        /// </summary>
+        [JsonPropertyName("CBZL")]
+        public int CBZL { get; set; }
+
+        /// <summary>
+        /// 上报日期
+        /// </summary>
+        [JsonPropertyName("SUBMIT_DATE")]
+        public DateTime? SubmitDate { get; set; } = DateTime.Now;
+
+        /// <summary>
+        /// 行政区划代码
+        /// </summary>
+        [JsonPropertyName("AREA_CODE")]
+        public string AreaCode { get; set; }
+    }
+}

+ 66 - 0
src/Hotline.Share/Dtos/DataSharing/Province/HuiJu/Send/SubmitVisitInfoRequest.cs

@@ -0,0 +1,66 @@
+using Hotline.Share.Dtos.DataSharing.Province;
+using System.Text.Json.Serialization;
+
+namespace Sharing.Province.Dtos.HuiJu.Send
+{
+    /// <summary>
+    /// 服务工单回访评价
+    /// </summary>
+    public class SubmitVisitInfoRequest : ProvinceRequest<SubmitVisitInfoData>
+    {
+        public override string GetRequestUrl() => "submit_visit_info";
+
+        public override string GetHttpMethod() => "Post";
+    }
+
+    /// <summary>
+    /// 服务工单回访评价
+    /// </summary>
+    public class SubmitVisitInfoData
+    {
+        [JsonPropertyName("jsonList")]
+        public IReadOnlyList<VisitInfo> VisitInfos { get; set; }
+    }
+
+    /// <summary>
+    /// 
+    /// </summary>
+    public class VisitInfo : BaseModel
+    {
+        /// <summary>
+        /// 回访评价方式
+        /// </summary>
+        [JsonPropertyName("VISIT_TYPE")]
+        public string VisitType { get; set; }
+
+        /// <summary>
+        /// 回访人员
+        /// </summary>
+        [JsonPropertyName("VISIT_NAME")]
+        public string VisitName { get; set; }
+
+        /// <summary>
+        /// 回访时间
+        /// </summary>
+        [JsonPropertyName("VISIT_TIME")]
+        public DateTime? VisitTime { get; set; }
+
+        /// <summary>
+        /// 回访评价情况
+        /// </summary>
+        [JsonPropertyName("VISIT_REMARK")]
+        public string VisitRemark { get; set; }
+
+        /// <summary>
+        /// 回访结果满意度
+        /// </summary>
+        [JsonPropertyName("SUBJECT_RESULT_SATIFY")]
+        public string SubjectResultSatify { get; set; }
+
+        /// <summary>
+        /// 工单回访首次结果满意度
+        /// </summary>
+        [JsonPropertyName("FirstSatisfaction")]
+        public string FirstSatisfaction { get; set; }
+    }
+}

+ 22 - 0
src/Hotline.Share/Dtos/DataSharing/Province/IProvinceRequest.cs

@@ -0,0 +1,22 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Hotline.Share.Dtos.DataSharing.Province
+{
+    public interface IProvinceRequest : ISharingRequest
+    {
+        ClientInfo ClientInfo { get; set; }
+
+        void BuildClientInfo(string clientId, string clientSecret);
+    }
+
+    public interface IProvinceRequest<TData> : IProvinceRequest
+    {
+        TData Data { get; set; }
+
+        void SetData(TData data);
+    }
+}

+ 14 - 0
src/Hotline.Share/Dtos/DataSharing/Province/ISharingRequest.cs

@@ -0,0 +1,14 @@
+namespace Hotline.Share.Dtos.DataSharing.Province
+{
+    public interface ISharingRequest
+    {
+        string GetRequestUrl();
+
+        string GetHttpMethod();
+    }
+
+    public interface ISharingRequest<TResponse> : ISharingRequest
+    {
+
+    }
+}

+ 73 - 0
src/Hotline.Share/Dtos/DataSharing/Province/ProvinceDistrecordResponse.cs

@@ -0,0 +1,73 @@
+using Hotline.Share.Dtos.DataSharing.Province.XieTong.Receive;
+
+namespace Hotline.Share.Dtos.DataSharing.Province
+{
+    /// <summary>
+    /// 
+    /// </summary>
+    public class ProvinceDistrecordResponse
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        public StatusModel status { get; set; }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public CustomModel custom { get; set; }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public ReturnInfoModel ReturnInfo { get; set; }
+    }
+
+    /// <summary>
+    /// 
+    /// </summary>
+    public class StatusModel
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        public string code { get; set; }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public string text { get; set; }
+    }
+
+    /// <summary>
+    /// 
+    /// </summary>
+    public class CustomModel
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        public List<GetCaseDistrecordSendModel> STEP_List { get; set; }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public string CASE_SERIAL { get; set; }
+    }
+
+    /// <summary>
+    /// 
+    /// </summary>
+    public class ReturnInfoModel
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        public string Code { get; set; }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public string Description { get; set; }
+    }
+}

+ 53 - 0
src/Hotline.Share/Dtos/DataSharing/Province/ProvinceRequest.cs

@@ -0,0 +1,53 @@
+using System.Reflection;
+using System.Text.Json.Serialization;
+
+namespace Hotline.Share.Dtos.DataSharing.Province
+{
+    public abstract class ProvinceRequest<TData> : ProvinceRequest, IProvinceRequest<TData>
+    {
+        [JsonPropertyName("paras")]
+        public TData Data { get; set; }
+
+        public void SetData(TData data)
+        {
+            Data = data;
+        }
+
+        /// <summary>
+        /// 处理时间格式
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <param name="model"></param>
+        public void ForeachClass<T>(T model)
+        {
+            Type t = model.GetType();
+            PropertyInfo[] PropertyList = t.GetProperties();
+            foreach (PropertyInfo item in PropertyList)
+            {
+                if (item.PropertyType == typeof(DateTime?) || item.PropertyType == typeof(DateTime))
+                {
+                    object value = item.GetValue(model, null);
+                    if (value != null)
+                    {
+                        DateTime? data = Convert.ToDateTime(Convert.ToDateTime(value).ToString("yyyy-MM-dd HH:mm:ss"));
+                        item.SetValue(model, data, null);
+                    }
+                }
+            }
+
+        }
+    }
+
+    public abstract class ProvinceRequest : IProvinceRequest
+    {
+        public abstract string GetRequestUrl();
+
+        public abstract string GetHttpMethod();
+
+        [JsonPropertyName("token")]
+        public ClientInfo ClientInfo { get; set; }
+
+        public void BuildClientInfo(string clientId, string clientSecret) =>
+            ClientInfo = new ClientInfo(clientId, clientSecret);
+    }
+}

+ 63 - 0
src/Hotline.Share/Dtos/DataSharing/Province/ProvinceResponse.cs

@@ -0,0 +1,63 @@
+namespace Hotline.Share.Dtos.DataSharing.Province
+{
+    public class ProvinceResponse
+    {
+        public BaseProvinceResponse ReturnInfo { get; set; }
+    }
+
+    /// <summary>
+    /// 省接口返回
+    /// </summary>
+    public class BaseProvinceResponse
+    {
+        public string Code { get; set; }
+
+        public string Description { get; set; }
+
+        public ErrorObjs custom { get; set; }
+    }
+
+    public class ErrorObjs
+    {
+        public List<ErrorInfo> errorObjs { get; set; }
+    }
+
+    public class ErrorInfo
+    {
+        /// <summary>
+        /// 服务工单编号
+        /// </summary>
+        public string caseserial { get; set; }
+
+        public string resturl { get; set; }
+
+        /// <summary>
+        /// 过程唯一值
+        /// </summary>
+        public string caseid { get; set; }
+    }
+
+    public class Reponse
+    {
+        public int Code { get; set; }
+
+        public string Description { get; set; }
+
+        public static Reponse Success(string? description = "")
+        {
+            return new Reponse
+            {
+                Code = 1,
+                Description = (description ?? "您已成功提交数据!")
+            };
+        }
+
+        public static Reponse Failed(string? description = "")
+        {
+            return new Reponse
+            {
+                Description = (description ?? "接口调用失败!")
+            };
+        }
+    }
+}

+ 33 - 0
src/Hotline.Share/Dtos/DataSharing/Province/RemindDto.cs

@@ -0,0 +1,33 @@
+namespace Sharing.Share.Dtos.DataSharing.Province
+{
+    /// <summary>
+    /// 服务工单催单接口
+    /// </summary>
+    public class RemindDto
+    {
+        /// <summary>
+        /// 服务工单编号  
+        /// </summary>
+        public string CaseSerial { get; set; }
+
+        /// <summary>
+        /// 催单时间
+        /// </summary>
+        public DateTime? RemindTime { get; set; }
+
+        /// <summary>
+        /// 操作人员
+        /// </summary>
+        public string RemindName { get; set; }
+
+        /// <summary>
+        /// 催单理由
+        /// </summary>
+        public string RemindReasion { get; set; }
+
+        /// <summary>
+        /// 材料标识
+        /// </summary>
+        public List<string> CliengGuid { get; set; }
+    }
+}

+ 48 - 0
src/Hotline.Share/Dtos/DataSharing/Province/ReturnFeedbackDto.cs

@@ -0,0 +1,48 @@
+namespace Sharing.Share.Dtos.DataSharing.Province
+{
+    /// <summary>
+    /// 服务工单退回反馈接口
+    /// </summary>
+    public class ReturnFeedbackDto
+    {
+        /// <summary>
+        /// 服务工单编号  
+        /// </summary>
+        public string CaseSerial { get; set; }
+
+        /// <summary>
+        /// 办理操作
+        /// </summary>
+        public string BackType { get; set; }
+
+        /// <summary>
+        /// 办理单位
+        /// </summary>
+        public string DealDept { get; set; }
+
+        /// <summary>
+        /// 办理人员
+        /// </summary>
+        public string DealName { get; set; }
+
+        /// <summary>
+        /// 退回反馈时间
+        /// </summary>
+        public DateTime? ApplyTime { get; set; }
+
+        /// <summary>
+        /// 是否同意退回
+        /// </summary>
+        public bool Result { get; set; }
+
+        /// <summary>
+        /// 退回原因
+        /// </summary>
+        public string Reason { get; set; }
+
+        /// <summary>
+        /// 材料标识
+        /// </summary>
+        public List<string> CliengGuid { get; set; }
+    }
+}

+ 98 - 0
src/Hotline.Share/Dtos/DataSharing/Province/ReultSendDto.cs

@@ -0,0 +1,98 @@
+namespace Sharing.Share.Dtos.DataSharing.Province
+{
+    /// <summary>
+    /// 上报工单处理结果/退回
+    /// </summary>
+    public class ReultSendDto
+    {
+        /// <summary>
+        /// 服务工单编号  
+        /// </summary>
+        public string CaseSerial { get; set; }
+
+        /// <summary>
+        /// 答复单位
+        /// </summary>
+        public string DeptName { get; set; }
+
+        /// <summary>
+        /// 答复时间
+        /// </summary>
+        public DateTime? FinishTime { get; set; }
+
+        /// <summary>
+        /// 答复人员
+        /// </summary>
+        public string FinishName { get; set; }
+
+        /// <summary>
+        /// 办理情况
+        /// </summary>
+        public string FinishNote { get; set; }
+
+        /// <summary>
+        /// 办理操作
+        /// </summary>
+        public string FinishType { get; set; }
+
+        /// <summary>
+        /// 办理单位
+        /// </summary>
+        public string EndDept { get; set; }
+
+        /// <summary>
+        /// 办理人员
+        /// </summary>
+        public string EndName { get; set; }
+
+        /// <summary>
+        /// 联系时间
+        /// </summary>
+        public DateTime? ConcactTime { get; set; }
+
+        /// <summary>
+        /// 联系方式
+        /// </summary>
+        public string ConcactType { get; set; }
+
+        /// <summary>
+        /// 签收时间
+        /// </summary>
+        public DateTime? SignTime { get; set; }
+
+        /// <summary>
+        /// 反馈时间
+        /// </summary>
+        public DateTime? FdBackTime { get; set; }
+
+        /// <summary>
+        /// 交办时间
+        /// </summary>
+        public DateTime? SendTime { get; set; }
+
+        /// <summary>
+        /// 反馈意见
+        /// </summary>
+        public string FdBack { get; set; }
+
+        /// <summary>
+        /// 办理时长
+        /// </summary>
+        public decimal? HandletimeLong { get; set; }
+
+        /// <summary>
+        /// 任务单关联 guid
+        /// </summary>
+        public string TrowGuid { get; set; }
+
+        /// <summary>
+        /// 退回类型
+        /// </summary>
+        public string BackType { get; set; }
+
+        /// <summary>
+        /// 材料标识
+        /// </summary>
+        public List<string> CliengGuid { get; set; }
+    }
+}

+ 38 - 0
src/Hotline.Share/Dtos/DataSharing/Province/RevokeDto.cs

@@ -0,0 +1,38 @@
+namespace Sharing.Share.Dtos.DataSharing.Province
+{
+    /// <summary>
+    /// 服务工单撤单接口
+    /// </summary>
+    public class RevokeDto
+    {
+        /// <summary>
+        /// 服务工单编号  
+        /// </summary>
+        public string CaseSerial { get; set; }
+
+        /// <summary>
+        /// 撤单时间
+        /// </summary>
+        public DateTime? RevokeTime { get; set; }
+
+        /// <summary>
+        /// 撤单类型 1:诉求人已私下解决;2:诉求内容有误;3:诉求人信息有误;other:其它
+        /// </summary>
+        public string RevokeType { get; set; }
+
+        /// <summary>
+        /// 操作人员
+        /// </summary>
+        public string RevokeName { get; set; }
+
+        /// <summary>
+        /// 撤单理由
+        /// </summary>
+        public string RevokeReasion { get; set; }
+
+        /// <summary>
+        /// 材料标识
+        /// </summary>
+        public List<string> CliengGuid { get; set; }
+    }
+}

+ 43 - 0
src/Hotline.Share/Dtos/DataSharing/Province/ScreenDto.cs

@@ -0,0 +1,43 @@
+namespace Sharing.Share.Dtos.DataSharing.Province
+{
+    /// <summary>
+    /// 服务工单甄别结果接口
+    /// </summary>
+    public class ScreenDto
+    {
+        /// <summary>
+        /// 服务工单编号  
+        /// </summary>
+        public string CaseSerial { get; set; }
+
+        /// <summary>
+        /// 审核结果是否通过   1:通过;0:不通过;2:申请;
+        /// </summary>
+        public string AuditResult { get; set; }
+
+        /// <summary>
+        /// 审核意见
+        /// </summary>
+        public string AuditOpinion { get; set; }
+
+        /// <summary>
+        /// 审核时间
+        /// </summary>
+        public DateTime? AuditTime { get; set; }
+
+        /// <summary>
+        /// 审核部门
+        /// </summary>
+        public string AuditOuname { get; set; }
+
+        /// <summary>
+        /// 审核人
+        /// </summary>
+        public string AuditPerson { get; set; }
+
+        /// <summary>
+        /// 材料标识
+        /// </summary>
+        public List<string> CliengGuid { get; set; }
+    }
+}

部分文件因为文件数量过多而无法显示