tangjiang 10 months ago
parent
commit
2839cd7ea2

+ 1 - 1
src/DataSharing.Application/Receivers/ProvinceReceiver.cs

@@ -175,10 +175,10 @@ namespace DataSharing.Application.Receivers
         public async Task OrderFlowStartedAsync(PublishCallRecrodDto pushdto, CancellationToken cancellationToken)
         {
             var dto = pushdto.Order;
-            var dataOrder = await _dsOrderRepository.GetAsync(p => p.OrderId == dto.Id, cancellationToken);
 
             #region 本地保存工单基础数据
             //本地保存工单基础数据---存在修改,不存在新增
+            var dataOrder = await _dsOrderRepository.GetAsync(p => p.OrderId == dto.Id, cancellationToken);
             if (dataOrder == null)
             {
                 dataOrder = new()

+ 87 - 5
src/DataSharing.Host/Controllers/HotlineWebController.cs

@@ -1,4 +1,5 @@
-using DataSharing.HotlineWeb;
+using DataSharing.FwDataExchange;
+using DataSharing.HotlineWeb;
 using DataSharing.Province.SendTask;
 using DataSharing.Province.SendTask.ProvinceOther;
 using DataSharing.Province.SendTask.SubmitCaseInfo;
@@ -10,15 +11,19 @@ using DataSharing.SendTask;
 using DataSharing.SendTask.OtherPlatforms;
 using DataSharing.Share.Consts;
 using DataSharing.Share.Dtos.Common;
+using DataSharing.Share.Dtos.HotlineSetting;
 using DataSharing.Share.Dtos.HotlineWeb;
 using DataSharing.Share.Enums;
 using DataSharing.Share.Requests;
 using DotNetCore.CAP;
 using Hotline.Share.Dtos;
+using Hotline.Share.Dtos.Order;
 using MapsterMapper;
 using MediatR;
 using Microsoft.AspNetCore.Authorization;
 using Microsoft.AspNetCore.Mvc;
+using Org.BouncyCastle.Utilities;
+using Polly.Caching;
 using SqlSugar;
 using XF.Domain.Cache;
 using XF.Domain.Exceptions;
@@ -60,6 +65,8 @@ namespace DataSharing.Host.Controllers
         private readonly IRepository<DsSendTask> _taskRepository;
         private readonly IRepository<DsSendTaskInfo> _taskInfoRepository;
         private readonly IRepository<DsOrder> _dsOrderRepository;
+        private readonly IRepository<SendHotlineErrorData> _sendHotlineErrorDataRepository;
+        private readonly FwClient _fwClient;
 
         /// <summary>
         /// 
@@ -92,6 +99,8 @@ namespace DataSharing.Host.Controllers
         /// <param name="taskRepository"></param>
         /// <param name="taskInfoRepository"></param>
         /// <param name="dsOrderRepository"></param>
+        /// <param name="sendHotlineErrorDataRepository"></param>
+        /// <param name="fwClient"></param>
         public HotlineWebController(IMapper mapper,
             IMediator mediator,
             ICapPublisher capPublisher,
@@ -119,7 +128,9 @@ namespace DataSharing.Host.Controllers
            IInitPushDataService initPushDataService,
            IRepository<DsSendTask> taskRepository,
            IRepository<DsSendTaskInfo> taskInfoRepository,
-           IRepository<DsOrder> dsOrderRepository)
+           IRepository<DsOrder> dsOrderRepository,
+           IRepository<SendHotlineErrorData> sendHotlineErrorDataRepository,
+           FwClient fwClient)
         {
             _mapper = mapper;
             _mediator = mediator;
@@ -149,6 +160,8 @@ namespace DataSharing.Host.Controllers
             _taskRepository = taskRepository;
             _taskInfoRepository = taskInfoRepository;
             _dsOrderRepository = dsOrderRepository;
+            _sendHotlineErrorDataRepository = sendHotlineErrorDataRepository;
+            _fwClient = fwClient;
         }
         #endregion
 
@@ -1172,7 +1185,7 @@ namespace DataSharing.Host.Controllers
                 .CountAsync();
 
             //工单
-            if (orderRate != null )
+            if (orderRate != null)
             {
                 calculateUploadRateDto.OrderCountNum = orderRate.OrderCountNum;
                 calculateUploadRateDto.OrderTimely = orderRate.OrderTimely;
@@ -1185,7 +1198,7 @@ namespace DataSharing.Host.Controllers
             }
 
             //电话
-            if (callRate != null )
+            if (callRate != null)
             {
                 calculateUploadRateDto.TelCountNum = callRate.TelCountNum;
                 calculateUploadRateDto.TelTimely = callRate.TelTimely;
@@ -1195,7 +1208,7 @@ namespace DataSharing.Host.Controllers
             }
 
             //回访
-            if (visitList != null )
+            if (visitList != null)
             {
                 calculateUploadRateDto.VisitCountNum = visitList.VisitCountNum;
                 calculateUploadRateDto.SatisfactionCountNum = visitList.SatisfactionCountNum;
@@ -1288,5 +1301,74 @@ namespace DataSharing.Host.Controllers
         }
         #endregion
 
+        /// <summary>
+        /// 查询推送业务系统失败数据
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>  
+        [HttpGet("getsendhotlineerrordata")]
+        [AllowAnonymous]
+        public async Task<PagedDto<SendHotlineErrorData>> GetSendHotlineErrorData([FromQuery] QuerySendTaskDto dto)
+        {
+            if (!dto.StartTime.HasValue)
+                dto.StartTime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd 00:00:00"));
+            if (!dto.EndTime.HasValue)
+                dto.EndTime = dto.StartTime.Value.AddDays(1).AddSeconds(-1);
+            else
+                dto.EndTime = dto.EndTime.Value.AddDays(1).AddSeconds(-1);
+
+            //数据查询
+            RefAsync<int> total = 0;
+            var items = await _sendHotlineErrorDataRepository.Queryable()
+                 .Where(p => p.CreationTime >= dto.StartTime && p.CreationTime <= dto.EndTime)
+                 .OrderBy(p => p.CreationTime)
+                 .ToPageListAsync(dto.PageIndex, dto.PageSize, total, HttpContext.RequestAborted);
+
+            return new PagedDto<SendHotlineErrorData>(total, items);
+        }
+
+        /// <summary>
+        /// 从新推送
+        /// </summary>
+        /// <param name="Id"></param>
+        /// <returns></returns>
+        [HttpGet("pushfromhotlinedata")]
+        [AllowAnonymous]
+        public async Task PushFromHotlineData(string Id)
+        {
+            var data = await _sendHotlineErrorDataRepository.GetAsync(p => p.Id == Id, HttpContext.RequestAborted);
+            if (data == null)
+                throw UserFriendlyException.SameMessage("重新推送失败");
+
+            bool isSuccess = true;
+            string error = "";
+            //调用工单创建接口
+            try
+            {
+                var result = await _fwClient.RequestNoTokenAsync<HotlineClientResponse>(data.Path, data.HttpMethod, data.RequestData);
+                if (result == null || result.code != 0)
+                {
+                    isSuccess = false;
+                    error = result?.message;
+                }
+            }
+            catch (Exception ex)
+            {
+                isSuccess = false;
+                error = ex.Message;
+            }
+
+            //推送失败添加
+            if (!isSuccess)
+            {
+                data.SendTimes = data.SendTimes + 1;
+                data.ErrorMessage = error;
+                await _sendHotlineErrorDataRepository.AddAsync(data, HttpContext.RequestAborted);
+            }
+            else
+            {
+                await _sendHotlineErrorDataRepository.RemoveAsync(data, cancellationToken: HttpContext.RequestAborted);
+            }
+        }
     }
 }

+ 46 - 10
src/DataSharing.Host/Controllers/Police110/PoliceDCJTController.cs

@@ -22,6 +22,7 @@ using System.Net;
 using System.Text;
 using XF.Domain.Filters;
 using XF.Domain.Repository;
+using static System.Runtime.InteropServices.JavaScript.JSType;
 
 namespace DataSharing.Host.Controllers.Police110
 {
@@ -43,6 +44,7 @@ namespace DataSharing.Host.Controllers.Police110
         private readonly IRepository<DsReceivePoliceData> _dsReceivePoliceDataRepository;
         private readonly FwClient _fwClient;
         private readonly ISharingConfigurationManager _sharingConfigurationManager;
+        private readonly IRepository<SendHotlineErrorData> _sendHotlineErrorDataRepository;
 
         /// <summary>
         /// 
@@ -57,6 +59,7 @@ namespace DataSharing.Host.Controllers.Police110
         /// <param name="dsReceivePoliceDataRepository"></param>
         /// <param name="fwClient"></param>
         /// <param name="sharingConfigurationManager"></param>
+        /// <param name="sendHotlineErrorDataRepository"></param>
         public PoliceDCJTController(IMapper mapper,
             ICapPublisher capPublisher,
             IMediator mediator,
@@ -66,7 +69,8 @@ namespace DataSharing.Host.Controllers.Police110
             IRepository<DsOrder> dsOrderRepository,
             IRepository<DsReceivePoliceData> dsReceivePoliceDataRepository,
             FwClient fwClient,
-            ISharingConfigurationManager sharingConfigurationManager)
+            ISharingConfigurationManager sharingConfigurationManager,
+            IRepository<SendHotlineErrorData> sendHotlineErrorDataRepository)
         {
             _mapper = mapper;
             _capPublisher = capPublisher;
@@ -78,6 +82,7 @@ namespace DataSharing.Host.Controllers.Police110
             _dsReceivePoliceDataRepository = dsReceivePoliceDataRepository;
             _fwClient = fwClient;
             _sharingConfigurationManager = sharingConfigurationManager;
+            _sendHotlineErrorDataRepository = sendHotlineErrorDataRepository;
         }
         #endregion
 
@@ -105,6 +110,7 @@ namespace DataSharing.Host.Controllers.Police110
             var apiR = new DCJTDeResponse<string>();
             try
             {
+                string id = "";
                 // 验证dcsm
                 string dcsmMsg = CheckDcsm(Request.Headers["dcsm"].ToString(), configurationPoliceDCJT.token1_dcsm);
                 if (!string.IsNullOrEmpty(dcsmMsg))
@@ -123,7 +129,7 @@ namespace DataSharing.Host.Controllers.Police110
                         if (!string.IsNullOrEmpty(jsonRes))
                             chainAlarm = System.Text.Json.JsonSerializer.Deserialize<ChainAlarm_DCJT>(jsonRes);
 
-                        await InitRawData("/service/api/dcjt/110To12345/chainAlarm", base64String, jsonRes, chainAlarm?.AlarmReceiptNumber);
+                        id = await InitRawData("/service/api/dcjt/110To12345/chainAlarm", base64String, jsonRes, chainAlarm?.AlarmReceiptNumber);
                     }
 
                     #region 数据验证
@@ -167,13 +173,43 @@ namespace DataSharing.Host.Controllers.Police110
                             _ => EGender.Unknown,
                         };
 
-
+                        bool isSuccess = true;
+                        string error = "";
                         //调用工单创建接口
-                        var result = await _fwClient.RequestNoTokenAsync<HotlineClientResponse>("api/v1/Order/add-anonymous", "Post", System.Text.Json.JsonSerializer.Serialize(orderDto));
-                        if (result != null && result.code == 0)
-                            apiR = DCJTDeResponse<string>.Succeed(null);
-                        else
-                            apiR = DCJTDeResponse<string>.Failed(null);
+                        try
+                        {
+                            var result = await _fwClient.RequestNoTokenAsync<HotlineClientResponse>("api/v1/Order/add-anonymous", "Post", System.Text.Json.JsonSerializer.Serialize(orderDto));
+                            if (result == null || result.code != 0)
+                            {
+                                isSuccess = false;
+                                error = result?.message;
+                            }
+                        }
+                        catch (Exception ex)
+                        {
+                            isSuccess = false;
+                            error = ex.Message;
+                        }
+
+                        //推送失败添加
+                        if (!isSuccess)
+                        {
+                            SendHotlineErrorData errorData = new SendHotlineErrorData()
+                            {
+                                DataId = id,
+                                PlatformSource = EPlatformSource.Police110,
+                                ReceiveServiceInterface = "/service/api/dcjt/110To12345/chainAlarm",
+                                RawData = base64String,
+                                RequestData = System.Text.Json.JsonSerializer.Serialize(orderDto),
+                                Path = "api/v1/Order/add-anonymous",
+                                SendTimes = 0,
+                                HttpMethod = "Post",
+                                ErrorMessage = error
+                            };
+                            await _sendHotlineErrorDataRepository.AddAsync(errorData, HttpContext.RequestAborted);
+                        }
+
+                        apiR = DCJTDeResponse<string>.Succeed(null);
 
                     }
                     else
@@ -729,7 +765,7 @@ namespace DataSharing.Host.Controllers.Police110
         /// <param name="receiveRawData"></param>
         /// <param name="receiveData"></param>
         /// <returns></returns>
-        private async Task InitRawData(string serviceInterface, string receiveRawData, string receiveData, string? externalId)
+        private async Task<string> InitRawData(string serviceInterface, string receiveRawData, string receiveData, string? externalId)
         {
             DsReceivePoliceData dsReceivePoliceData = new()
             {
@@ -739,7 +775,7 @@ namespace DataSharing.Host.Controllers.Police110
                 ReceiveData = receiveData,
                 PoliceSource = EPoliceSource.DCJT
             };
-            await _dsReceivePoliceDataRepository.AddAsync(dsReceivePoliceData, HttpContext.RequestAborted);
+            return await _dsReceivePoliceDataRepository.AddAsync(dsReceivePoliceData, HttpContext.RequestAborted);
         }
         #endregion
 

+ 48 - 10
src/DataSharing.Host/Controllers/Police110/PoliceDSController.cs

@@ -19,6 +19,9 @@ using XF.Domain.Repository;
 using DataSharing.Police110.Encryption;
 using DataSharing.Share.Dtos.Police110.DaoShu110;
 using DataSharing.Share.Dtos.Police110;
+using DataSharing.Share.Dtos.Police110.DCJT110;
+using DataSharing.Share.Enums;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
 
 namespace DataSharing.Host.Controllers.Police110
 {
@@ -40,6 +43,7 @@ namespace DataSharing.Host.Controllers.Police110
         private readonly IRepository<DsReceivePoliceData> _dsReceivePoliceDataRepository;
         private readonly FwClient _fwClient;
         private readonly ISharingConfigurationManager _sharingConfigurationManager;
+        private readonly IRepository<SendHotlineErrorData> _sendHotlineErrorDataRepository;
 
         /// <summary>
         /// 
@@ -54,6 +58,7 @@ namespace DataSharing.Host.Controllers.Police110
         /// <param name="dsReceivePoliceDataRepository"></param>
         /// <param name="fwClient"></param>
         /// <param name="sharingConfigurationManager"></param>
+        /// <param name="sendHotlineErrorDataRepository"></param>
         public PoliceDSController(IMapper mapper,
             ICapPublisher capPublisher,
             IMediator mediator,
@@ -63,7 +68,8 @@ namespace DataSharing.Host.Controllers.Police110
             IRepository<DsOrder> dsOrderRepository,
             IRepository<DsReceivePoliceData> dsReceivePoliceDataRepository,
             FwClient fwClient,
-            ISharingConfigurationManager sharingConfigurationManager)
+            ISharingConfigurationManager sharingConfigurationManager,
+            IRepository<SendHotlineErrorData> sendHotlineErrorDataRepository)
         {
             _mapper = mapper;
             _capPublisher = capPublisher;
@@ -75,6 +81,7 @@ namespace DataSharing.Host.Controllers.Police110
             _dsReceivePoliceDataRepository = dsReceivePoliceDataRepository;
             _fwClient = fwClient;
             _sharingConfigurationManager = sharingConfigurationManager;
+            _sendHotlineErrorDataRepository = sendHotlineErrorDataRepository;
         }
         #endregion
 
@@ -110,6 +117,7 @@ namespace DataSharing.Host.Controllers.Police110
                 }
                 else
                 {
+                    string id = "";
                     string base64String = await GetStreamBase64(HttpContext.Request);
                     ChainAlarm_DS chainAlarm = new();
                     if (!string.IsNullOrEmpty(base64String))
@@ -120,7 +128,7 @@ namespace DataSharing.Host.Controllers.Police110
                         if (!string.IsNullOrEmpty(jsonRes))
                             chainAlarm = System.Text.Json.JsonSerializer.Deserialize<ChainAlarm_DS>(jsonRes);
 
-                        await InitRawData("service/api/ds/110To12345/chainAlarm", base64String, jsonRes, chainAlarm?.AlarmReceiptNumber);
+                        id = await InitRawData("service/api/ds/110To12345/chainAlarm", base64String, jsonRes, chainAlarm?.AlarmReceiptNumber);
                     }
 
                     #region 数据验证
@@ -157,13 +165,43 @@ namespace DataSharing.Host.Controllers.Police110
                             Title = string.Empty
                         };
 
+                        bool isSuccess = true;
+                        string error = "";
                         //调用工单创建接口
-                        //var result = await _hotlineClient.ReceiveOrderAsync(orderDto, HttpContext.RequestAborted);
-                        var result = await _fwClient.RequestNoTokenAsync<HotlineClientResponse>("api/v1/Order/add-anonymous", "Post", System.Text.Json.JsonSerializer.Serialize(orderDto));
-                        if (result != null && result.code == 0)
-                            apiR = DaoShuDeResponse<string>.Succeed(null);
-                        else
-                            apiR = DaoShuDeResponse<string>.Failed(null);
+                        try
+                        {
+                            var result = await _fwClient.RequestNoTokenAsync<HotlineClientResponse>("api/v1/Order/add-anonymous", "Post", System.Text.Json.JsonSerializer.Serialize(orderDto));
+                            if (result == null || result.code != 0)
+                            {
+                                isSuccess = false;
+                                error = result?.message;
+                            }
+                        }
+                        catch (Exception ex)
+                        {
+                            isSuccess = false;
+                            error = ex.Message;
+                        }
+
+                        //推送失败添加
+                        if (!isSuccess)
+                        {
+                            SendHotlineErrorData errorData = new SendHotlineErrorData()
+                            {
+                                DataId = id,
+                                PlatformSource = EPlatformSource.Police110,
+                                ReceiveServiceInterface = "service/api/ds/110To12345/chainAlarm",
+                                RawData = base64String,
+                                RequestData = System.Text.Json.JsonSerializer.Serialize(orderDto),
+                                Path = "api/v1/Order/add-anonymous",
+                                SendTimes = 0,
+                                HttpMethod = "Post",
+                                ErrorMessage = error
+                            };
+                            await _sendHotlineErrorDataRepository.AddAsync(errorData, HttpContext.RequestAborted);
+                        }
+
+                        apiR = DaoShuDeResponse<string>.Succeed(null);
 
                     }
                     else
@@ -711,7 +749,7 @@ namespace DataSharing.Host.Controllers.Police110
         /// <param name="receiveRawData"></param>
         /// <param name="receiveData"></param>
         /// <returns></returns>
-        private async Task InitRawData(string serviceInterface, string receiveRawData, string receiveData, string? externalId)
+        private async Task<string> InitRawData(string serviceInterface, string receiveRawData, string receiveData, string? externalId)
         {
             DsReceivePoliceData dsReceivePoliceData = new()
             {
@@ -720,7 +758,7 @@ namespace DataSharing.Host.Controllers.Police110
                 ReceiveRawData = receiveRawData,
                 ReceiveData = receiveData
             };
-            await _dsReceivePoliceDataRepository.AddAsync(dsReceivePoliceData, HttpContext.RequestAborted);
+            return await _dsReceivePoliceDataRepository.AddAsync(dsReceivePoliceData, HttpContext.RequestAborted);
         }
         #endregion
 

+ 41 - 4
src/DataSharing.Host/Controllers/ProvinceController.cs

@@ -5,6 +5,7 @@ using DataSharing.Share.Dtos;
 using DataSharing.Share.Dtos.FwDataExchange;
 using DataSharing.Share.Dtos.HotlineSetting;
 using DataSharing.Share.Dtos.Province.XieTong.Receive;
+using DataSharing.Share.Enums;
 using DotNetCore.CAP;
 using Hotline.Share.Dtos.DataSharing.PusherHotlineDto;
 using Hotline.Share.Dtos.File;
@@ -35,6 +36,7 @@ namespace DataSharing.Host.Controllers
         private readonly FwClient _fwClient;
         private readonly IRepository<SendFwErrorData> _sendFwErrorDataRepository;
         private readonly ISharingConfigurationManager _sharingConfigurationManager;
+        private readonly IRepository<SendHotlineErrorData> _sendHotlineErrorDataRepository;
 
         /// <summary>
         /// 
@@ -51,6 +53,7 @@ namespace DataSharing.Host.Controllers
         /// <param name="fwClient"></param>
         /// <param name="sendFwErrorDataRepository"></param>
         /// <param name="sharingConfigurationManager"></param>
+        /// <param name="sendHotlineErrorDataRepository"></param>
         public ProvinceController(IMapper mapper,
              IMediator mediator,
              ICapPublisher capPublisher,
@@ -62,7 +65,8 @@ namespace DataSharing.Host.Controllers
              IRepository<DsSendCaseInfo> sendCaseInfoRepository,
              FwClient fwClient,
              IRepository<SendFwErrorData> sendFwErrorDataRepository,
-             ISharingConfigurationManager sharingConfigurationManager)
+             ISharingConfigurationManager sharingConfigurationManager,
+             IRepository<SendHotlineErrorData> sendHotlineErrorDataRepository)
         {
             _mapper = mapper;
             _mediator = mediator;
@@ -76,6 +80,7 @@ namespace DataSharing.Host.Controllers
             _fwClient = fwClient;
             _sendFwErrorDataRepository = sendFwErrorDataRepository;
             _sharingConfigurationManager = sharingConfigurationManager;
+            _sendHotlineErrorDataRepository = sendHotlineErrorDataRepository;
         }
         #endregion
 
@@ -201,10 +206,42 @@ namespace DataSharing.Host.Controllers
             if (!string.IsNullOrEmpty(id))
             {
                 data.Files = await GetFileData(dto.CliengGuid, dto.CaseSerial, "受理上传");
-                //await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.SharingOrderCreation, data, cancellationToken: HttpContext.RequestAborted);
-                //var result = await _hotlineClient.ReceiveOrderAsync(data, HttpContext.RequestAborted);
 
-                var result = await _fwClient.RequestNoTokenAsync<HotlineClientResponse>("api/v1/Order/add-anonymous", "Post", System.Text.Json.JsonSerializer.Serialize(data));
+                bool isSuccess = true;
+                string error = "";
+                try
+                {
+                    var result = await _fwClient.RequestNoTokenAsync<HotlineClientResponse>("api/v1/Order/add-anonymous", "Post", System.Text.Json.JsonSerializer.Serialize(data));
+                    if (result == null || result.code != 0)
+                    {
+                        isSuccess = false;
+                        error = result?.message;
+                    }
+
+                }
+                catch (Exception ex)
+                {
+                    isSuccess = false;
+                    error = ex.Message;
+                }
+
+                //推送失败添加
+               if (!isSuccess)
+                {
+                    SendHotlineErrorData errorData = new SendHotlineErrorData()
+                    {
+                        DataId=id,
+                        PlatformSource= EPlatformSource.Province,
+                        ReceiveServiceInterface = "rest/receive_case_info",
+                        RawData= System.Text.Json.JsonSerializer.Serialize(dto),
+                        RequestData= System.Text.Json.JsonSerializer.Serialize(data),
+                        Path = "api/v1/Order/add-anonymous",
+                        SendTimes = 0,
+                        HttpMethod= "Post",
+                        ErrorMessage=error
+                    };
+                    await _sendHotlineErrorDataRepository.AddAsync(errorData, HttpContext.RequestAborted);
+                }
 
                 return OpenResponse.Ok(GetDataBaseReponse<string>.Success("您已成功提交数据!"));
             }

+ 67 - 0
src/DataSharing/RawData/SendHotlineErrorData.cs

@@ -0,0 +1,67 @@
+using DataSharing.Share.Enums;
+using SqlSugar;
+using System.ComponentModel;
+using XF.Domain.Repository;
+
+namespace DataSharing.RawData
+{
+    /// <summary>
+    /// 推送业务系统失败数据
+    /// </summary>
+    [Description("推送业务系统失败数据")]
+    public class SendHotlineErrorData : CreationModificationEntity
+    {
+        /// <summary>
+        /// 原始数据ID
+        /// </summary>
+        public string DataId { get; set; }
+
+        /// <summary>
+        /// 平台名称
+        /// </summary>
+        [SugarColumn(ColumnDescription = "平台名称")]
+        public EPlatformSource PlatformSource { get; set; } = EPlatformSource.Province;
+
+        /// <summary>
+        /// 接收接口名称
+        /// </summary>
+        [SugarColumn(ColumnDescription = "接收接口名称", ColumnDataType = "varchar(100)")]
+        public string? ReceiveServiceInterface { get; set; }
+
+        /// <summary>
+        /// 接收的原始数据
+        /// </summary>
+        [SugarColumn(ColumnDataType = "text", ColumnDescription = "接收的原始数据")]
+        public string? RawData { get; set; }
+
+        /// <summary>
+        /// 组装参数
+        /// </summary>
+        [SugarColumn(ColumnDataType = "text", ColumnDescription = "组装参数")]
+        public string? RequestData { get; set; }
+
+        /// <summary>
+        /// 推送次数
+        /// </summary>
+        [SugarColumn(ColumnDescription = "推送次数")]
+        public int SendTimes { get; set; }
+
+        /// <summary>
+        /// 请求地址
+        /// </summary>
+        [SugarColumn(ColumnDescription = "请求地址")]
+        public string? Path { get; set; }
+
+        /// <summary>
+        /// 请求方式
+        /// </summary>
+        [SugarColumn(ColumnDescription = "请求方式")]
+        public string? HttpMethod { get; set; }
+
+        /// <summary>
+        /// 错误消息
+        /// </summary>
+        [SugarColumn(ColumnDescription = "错误消息")]
+        public string? ErrorMessage { get; set; }
+    }
+}