TANG JIANG 1 年之前
父節點
當前提交
36fae8c964

+ 47 - 5
src/Sharing.Api/Controllers/HotlineMessageReceiveController.cs

@@ -13,9 +13,12 @@ using Sharing.Province.Dtos.HuiJu.Send;
 using Sharing.Province.Dtos.XieTong.Send;
 using Sharing.Province.Extend;
 using Sharing.Province.HuiJu.Send;
+using Sharing.Province.Other;
 using Sharing.Province.XieTong.Knowledge;
 using Sharing.Province.XieTong.Receive;
 using Sharing.Province.XieTong.Send;
+using Sharing.Repository.Province.Other;
+using static System.Runtime.InteropServices.JavaScript.JSType;
 
 namespace Sharing.Api.Controllers
 {
@@ -67,6 +70,7 @@ namespace Sharing.Api.Controllers
         private readonly IConfiguration _config;
         private readonly string AreaCode = "";
         private readonly IKnowledgeRawDataRepository _knowledgeRawDataRepository;
+        private readonly IWaitingPushDataRepository _waitingPushDataRepository;
 
         /// <summary>
         /// 
@@ -112,6 +116,7 @@ namespace Sharing.Api.Controllers
         /// <param name="provinceService"></param>
         /// <param name="config"></param>
         /// <param name="knowledgeRawDataRepository"></param>
+        /// <param name="waitingPushDataRepository"></param>
         public HotlineMessageReceiveController(IMediator mediator, ILogger<HotlineMsgReceiver> logger, IMapper mapper
             , IGetCaseResultReceiveRepository getCaseResultReceiveRepository, IGetCaseProcessReceiveRepository getCaseProcessReceiveRepository
             , IGetVisitInfoReceiveRepository getVisitInfoReceiveRepository, IGetCaseBackApplyRepository getCaseBackApplyRepository
@@ -130,7 +135,8 @@ namespace Sharing.Api.Controllers
             , IFormMedicalRepository formMedicalRepository, IFormNetWorktecRepository formNetWorktecRepository
             , IFormPostRepository formPostRepository, IFormReturnexChangeRepository formReturnexChangeRepository
             , IFormShamPubRepository formShamPubRepository, IFormTaxationComplaintRepository formTaxationComplaintRepository
-            , IFormMarketRepository formMarketRepository, IProvinceService provinceService, IConfiguration config, IKnowledgeRawDataRepository knowledgeRawDataRepository)
+            , IFormMarketRepository formMarketRepository, IProvinceService provinceService, IConfiguration config
+            , IKnowledgeRawDataRepository knowledgeRawDataRepository, IWaitingPushDataRepository waitingPushDataRepository)
         {
             _mediator = mediator;
             _logger = logger;
@@ -174,6 +180,7 @@ namespace Sharing.Api.Controllers
             _config = config;
             AreaCode = _config.GetSection("AreaCode").Get<string>();//获取区域配置信息
             _knowledgeRawDataRepository = knowledgeRawDataRepository;
+            _waitingPushDataRepository = waitingPushDataRepository;
         }
         #endregion
 
@@ -416,8 +423,19 @@ namespace Sharing.Api.Controllers
             //将上报信息写入本地库
             data.Id = await _submitCaseProcessRepository.AddAsync(data);
 
+            //将待推送数据写入待推送表
+            WaitingPushData pushData = new()
+            {
+                ServiceInterface = "SubmitCaseProcess",
+                Data = System.Text.Json.JsonSerializer.Serialize(data),
+                Priority = 0,
+                PushUrl = "submit_case_process",
+                Method = HttpMethods.Post
+            };
+            await _waitingPushDataRepository.AddAsync(pushData);
+
             //信息上报
-            await _mediator.Publish(new SubmitCaseProcessNotification(data));
+          // await _mediator.Publish(new SubmitCaseProcessNotification(data));
         }
         #endregion
 
@@ -438,8 +456,19 @@ namespace Sharing.Api.Controllers
             //将上报信息写入本地库
             data.Id = await _submitCaseResultRepository.AddAsync(data);
 
+
+            //将待推送数据写入待推送表
+            WaitingPushData pushData = new()
+            {
+                ServiceInterface = "SubmitCaseResult",
+                Data = System.Text.Json.JsonSerializer.Serialize(data),
+                Priority = 0,
+                PushUrl = "submit_case_result",
+                Method = HttpMethods.Post
+            };
+            await _waitingPushDataRepository.AddAsync(pushData);
             //信息上报
-            await _mediator.Publish(new SubmitCaseResultNotification(data));
+            //await _mediator.Publish(new SubmitCaseResultNotification(data));
         }
 
         /// <summary>
@@ -457,8 +486,20 @@ namespace Sharing.Api.Controllers
             var id = await _submitVisitInfoRepository.AddAsync(data);
 
             data.Id = id;
+
+            //将待推送数据写入待推送表
+            WaitingPushData pushData = new()
+            {
+                ServiceInterface = "SubmitVisitInfo",
+                Data = System.Text.Json.JsonSerializer.Serialize(data),
+                Priority = 0,
+                PushUrl = "submit_visit_info",
+                Method = HttpMethods.Post
+            };
+            await _waitingPushDataRepository.AddAsync(pushData);
+
             //信息上报
-            await _mediator.Publish(new SubmitVisitInfoNotification(data));
+           //await _mediator.Publish(new SubmitVisitInfoNotification(data));
         }
 
         /// <summary>
@@ -611,7 +652,8 @@ namespace Sharing.Api.Controllers
             };
 
             //信息上报
-            await _mediator.Publish(new SubmitCaseExtendsNotification(Newtonsoft.Json.JsonConvert.SerializeObject(submitCaseExtendsInfoId)));
+            //await _mediator.Publish(new SubmitCaseExtendsNotification(Newtonsoft.Json.JsonConvert.SerializeObject(submitCaseExtendsInfoId)));
+            await _mediator.Publish(new SubmitCaseExtendsNotification(System.Text.Json.JsonSerializer.Serialize(submitCaseExtendsInfoId)));
         }
         #endregion
 

+ 0 - 30
src/Sharing.Api/DemoBgService.cs

@@ -1,30 +0,0 @@
-namespace Sharing.Api
-{
-    public class DemoBgService : BackgroundService
-    {
-        private readonly int nSleep = 1 * 10 * 1000;//10秒运行一次
-        private ILogger<DemoBgService> logger;
-
-        public DemoBgService(ILogger<DemoBgService> logger)
-        {
-            this.logger = logger;
-        }
-
-        /// <summary>
-        /// 任务的代码
-        /// </summary>
-        /// <param name="stoppingToken"></param>
-        /// <returns></returns>
-        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
-        {
-            while (!stoppingToken.IsCancellationRequested)
-            {
-                string randomString = "Abc"+DateTime.Now.ToString() +"-"+ Guid.NewGuid().ToString();
-                Console.WriteLine(randomString);
-                await Task.Delay(nSleep, stoppingToken);
-            }
-        }
-
-       
-    }
-}

+ 106 - 0
src/Sharing.Api/PushDataBgService.cs

@@ -0,0 +1,106 @@
+using MapsterMapper;
+using MediatR;
+using Microsoft.Data.SqlClient;
+using Sharing.Notifications.HuiJu;
+using Sharing.Province.Dtos.HuiJu.Send;
+using Sharing.Province.HuiJu.Send;
+using Sharing.Province.Other;
+using static System.Runtime.InteropServices.JavaScript.JSType;
+
+namespace Sharing.Api
+{
+    /// <summary>
+    /// 后台定时执行推送
+    /// </summary>
+    public class PushDataBgService : BackgroundService
+    {
+        private readonly int nSleep = 1 * 60 * 1000;//1分钟运行一次
+        private readonly ILogger<PushDataBgService> _logger;
+        private readonly IMediator _mediator;
+        private readonly IMapper _mapper;
+        private readonly IWaitingPushDataRepository _waitingPushDataRepository;
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="logger"></param>
+        /// <param name="mediator"></param>
+        /// <param name="mapper"></param>
+        /// <param name="waitingPushDataRepository"></param>
+        public PushDataBgService(ILogger<PushDataBgService> logger, IMediator mediator, IMapper mapper, IWaitingPushDataRepository waitingPushDataRepository)
+        {
+            _logger = logger;
+            _mediator = mediator;
+            _mapper = mapper;
+            _waitingPushDataRepository = waitingPushDataRepository;
+        }
+
+        /// <summary>
+        /// 任务的代码 
+        /// </summary>
+        /// <param name="stoppingToken"></param>
+        /// <returns></returns>
+        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
+        {
+            while (!stoppingToken.IsCancellationRequested)
+            {
+                await PushData();
+                await Task.Delay(nSleep, stoppingToken);
+            }
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <returns></returns>
+        public async Task PushData()
+        {
+            //查询待推送数据
+            var listData = await _waitingPushDataRepository
+                   .Queryable()
+                   .OrderByDescending(p => p.Priority)
+                   .ToListAsync();
+            if (listData != null)
+            {
+                List<SubmitCaseProcess> submitCaseProcesses = new(); //服务工单处理过程
+                List<SubmitCaseResult> submitCaseResults = new(); //服务工单处理结果
+                List<SubmitVisitInfo> submitVisitInfos = new(); //服务工单回访评价
+
+                //根据查询出来数据组装推送数据
+                foreach (var item in listData)
+                {
+                    switch (item.ServiceInterface)
+                    {
+                        case "SubmitCaseProcess"://服务工单处理过程
+                            var caseProcess = System.Text.Json.JsonSerializer.Deserialize<SubmitCaseProcess>(item.Data);
+                            if (caseProcess != null) submitCaseProcesses.Add(caseProcess);
+                            break;
+                        case "SubmitCaseResult": //服务工单处理结果
+                            var caseResult = System.Text.Json.JsonSerializer.Deserialize<SubmitCaseResult>(item.Data);
+                            if (caseResult != null) submitCaseResults.Add(caseResult);
+                            break;
+                        case "SubmitVisitInfo"://服务工单回访评价
+                            var visitInfo = System.Text.Json.JsonSerializer.Deserialize<SubmitVisitInfo>(item.Data);
+                            if (visitInfo != null) submitVisitInfos.Add(visitInfo);
+                            break;
+                        default:
+                            break;
+                    }
+                }
+
+                //推送对应消息
+                //服务工单处理过程
+                if (submitCaseProcesses != null && submitCaseProcesses.Count > 0)
+                    await _mediator.Publish(new SubmitCaseProcessNotification(submitCaseProcesses));
+
+                //服务工单处理结果
+                if (submitCaseResults != null && submitCaseResults.Count > 0)
+                    await _mediator.Publish(new SubmitCaseResultNotification(submitCaseResults));
+
+                //服务工单回访评价
+                if (submitVisitInfos != null && submitVisitInfos.Count > 0)
+                    await _mediator.Publish(new SubmitVisitInfoNotification(submitVisitInfos));
+            }
+        }
+    }
+}

+ 1 - 1
src/Sharing.Api/StartupExtensions.cs

@@ -98,7 +98,7 @@ internal static class StartupExtensions
 
         //mq
         services.AddMq(configuration);
-        services.AddHostedService<DemoBgService>();
+        services.AddHostedService<PushDataBgService>();
         return builder.Build();
     }
 

+ 19 - 15
src/Sharing.Province/Handlers/HuiJu/SubmitCaseProcessHandler.cs

@@ -40,34 +40,38 @@ namespace Sharing.Province.Handlers.HuiJu
         /// <returns></returns>
         public async Task Handle(SubmitCaseProcessNotification notification, CancellationToken cancellationToken)
         {
-            var order = notification.DataOrder;
             var pusher = _pusherProvider.CreatePusher(_channelConfigurationManager);
 
-            var dataReceive = _mapper.Map<CaseProcess>(order);
+            var dataReceive = _mapper.Map<List<CaseProcess>>(notification.DataOrder);
 
             var request = new SubmitCaseProcessRequest();
+
+            //var data = new SubmitCaseProcessData
+            //{
+            //    CaseProcesss = new List<CaseProcess>
+            //    {
+            //        dataReceive
+            //    }
+            //};
             var data = new SubmitCaseProcessData
             {
-                CaseProcesss = new List<CaseProcess>
-                {
-                    dataReceive
-                }
+                CaseProcesss = dataReceive
             };
             request.SetData(data);
 
             var response = await pusher.PushSubmitCaseProcessAsync(request, cancellationToken);
 
             //如果推送成功修改数据状态
-            if (response != null)
-            {
-                if (response.Code == "1")
-                    notification.DataOrder.SyncState = "1";
-                else
-                    notification.DataOrder.SyncState = "2";
+            //if (response != null)
+            //{
+            //    if (response.Code == "1")
+            //        notification.DataOrder.SyncState = "1";
+            //    else
+            //        notification.DataOrder.SyncState = "2";
 
-                notification.DataOrder.ReturnResult = Newtonsoft.Json.JsonConvert.SerializeObject(response);
-                await _submitCaseProcessRepository.UpdateAsync(notification.DataOrder);
-            }
+            //    notification.DataOrder.ReturnResult = Newtonsoft.Json.JsonConvert.SerializeObject(response);
+            //    await _submitCaseProcessRepository.UpdateAsync(notification.DataOrder);
+            //}
         }
     }
 }

+ 16 - 12
src/Sharing.Province/Handlers/HuiJu/SubmitCaseResultHandler.cs

@@ -37,17 +37,21 @@ namespace Sharing.Province.Handlers.HuiJu
         /// <returns></returns>
         public async Task Handle(SubmitCaseResultNotification notification, CancellationToken cancellationToken)
         {
-            var order = notification.DataOrder;
             var pusher = _pusherProvider.CreatePusher(_channelConfigurationManager);
 
-            var dataReceive = _mapper.Map<CaseResult>(order);
+            var dataReceive = _mapper.Map<List<CaseResult>>(notification.DataOrder);
+
+            //var data = new SubmitCaseResultData
+            //{
+            //    CaseResults = new List<CaseResult>
+            //    {
+            //        dataReceive
+            //    }
+            //};
 
             var data = new SubmitCaseResultData
             {
-                CaseResults = new List<CaseResult>
-                {
-                    dataReceive
-                }
+                CaseResults = dataReceive
             };
             var request = new SubmitCaseResultRequest();
             request.SetData(data);
@@ -57,13 +61,13 @@ namespace Sharing.Province.Handlers.HuiJu
             //如果推送成功修改数据状态
             if (response != null)
             {
-                if (response.Code == "1")
-                    notification.DataOrder.SyncState = "1";
-                else
-                    notification.DataOrder.SyncState = "2";
+                //if (response.Code == "1")
+                //    notification.DataOrder.SyncState = "1";
+                //else
+                //    notification.DataOrder.SyncState = "2";
 
-                notification.DataOrder.ReturnResult = Newtonsoft.Json.JsonConvert.SerializeObject(response);
-                await _submitCaseResultRepository.UpdateAsync(notification.DataOrder);
+                //notification.DataOrder.ReturnResult = Newtonsoft.Json.JsonConvert.SerializeObject(response);
+                //await _submitCaseResultRepository.UpdateAsync(notification.DataOrder);
             }
         }
     }

+ 16 - 12
src/Sharing.Province/Handlers/HuiJu/SubmitVisitInfoHandler.cs

@@ -40,17 +40,21 @@ namespace Sharing.Province.Handlers.HuiJu
         /// <returns></returns>
         public async Task Handle(SubmitVisitInfoNotification notification, CancellationToken cancellationToken)
         {
-            var order = notification.DataOrder;
             var pusher = _pusherProvider.CreatePusher(_channelConfigurationManager);
 
-            var dataReceive = _mapper.Map<VisitInfo>(order);
+            var dataReceive = _mapper.Map<List<VisitInfo>>(notification.DataOrder);
+
+            //var data = new SubmitVisitInfoData
+            //{
+            //    VisitInfos = new List<VisitInfo>
+            //    {
+            //        dataReceive
+            //    }
+            //};
 
             var data = new SubmitVisitInfoData
             {
-                VisitInfos = new List<VisitInfo>
-                {
-                    dataReceive
-                }
+                VisitInfos = dataReceive
             };
             var request = new SubmitVisitInfoRequest();
             request.SetData(data);
@@ -60,13 +64,13 @@ namespace Sharing.Province.Handlers.HuiJu
             //如果推送成功修改数据状态
             if (response != null)
             {
-                if (response.Code == "1")
-                    notification.DataOrder.SyncState = "1";
-                else
-                    notification.DataOrder.SyncState = "2";
+                //if (response.Code == "1")
+                //    notification.DataOrder.SyncState = "1";
+                //else
+                //    notification.DataOrder.SyncState = "2";
 
-                notification.DataOrder.ReturnResult = Newtonsoft.Json.JsonConvert.SerializeObject(response);
-                await _submitVisitInfoRepository.UpdateAsync(notification.DataOrder);
+                //notification.DataOrder.ReturnResult = Newtonsoft.Json.JsonConvert.SerializeObject(response);
+                //await _submitVisitInfoRepository.UpdateAsync(notification.DataOrder);
             }
         }
     }

+ 14 - 0
src/Sharing.Repository/Province/Other/WaitingPushDataRepository.cs

@@ -0,0 +1,14 @@
+using Sharing.Province.Other;
+using SqlSugar;
+using XF.Domain.Dependency;
+
+namespace Sharing.Repository.Province.Other
+{
+    public class WaitingPushDataRepository : BaseRepository<WaitingPushData>, IWaitingPushDataRepository, IScopeDependency
+    {
+        public WaitingPushDataRepository(ISugarUnitOfWork<SharingDbContext> uow) : base(uow)
+        {
+
+        }
+    }
+}

+ 0 - 12
src/Sharing/DaoShu110/IPoliceReceiveChainAlarmDsService.cs

@@ -1,12 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace Sharing.DaoShu110
-{
-    public interface IPoliceReceiveChainAlarmDsService
-    {
-    }
-}

+ 0 - 31
src/Sharing/DaoShu110/PoliceReceiveChainAlarmDsService.cs

@@ -1,31 +0,0 @@
-using MapsterMapper;
-using Sharing.DaoShu110.Dtos;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using XF.Domain.Dependency;
-
-namespace Sharing.DaoShu110
-{
-    public class PoliceReceiveChainAlarmDsService : IPoliceReceiveChainAlarmDsService, IScopeDependency
-    {
-
-        private readonly IPoliceReceiveChainAlarmDsRepository _policeReceiveChainAlarmDsRepository;
-        private readonly IMapper _mapper;
-
-        /// <summary>
-        /// 
-        /// </summary>
-        /// <param name="mapper"></param>
-        /// <param name="policeReceiveChainAlarmDsRepository"></param>
-        public PoliceReceiveChainAlarmDsService(IMapper mapper,IPoliceReceiveChainAlarmDsRepository policeReceiveChainAlarmDsRepository)
-        {
-            _policeReceiveChainAlarmDsRepository = policeReceiveChainAlarmDsRepository;
-            _mapper = mapper;
-        }
-
-        
-    }
-}

+ 1 - 1
src/Sharing/Notifications/HuiJu/SubmitCaseProcessNotification.cs

@@ -3,5 +3,5 @@ using Sharing.Province.HuiJu.Send;
 
 namespace Sharing.Notifications.HuiJu
 {
-    public record SubmitCaseProcessNotification(SubmitCaseProcess DataOrder) : INotification;
+    public record SubmitCaseProcessNotification(List<SubmitCaseProcess> DataOrder) : INotification;
 }

+ 1 - 1
src/Sharing/Notifications/HuiJu/SubmitCaseResultNotification.cs

@@ -3,5 +3,5 @@ using Sharing.Province.HuiJu.Send;
 
 namespace Sharing.Notifications.HuiJu
 {
-    public record SubmitCaseResultNotification(SubmitCaseResult DataOrder) : INotification;
+    public record SubmitCaseResultNotification(List<SubmitCaseResult> DataOrder) : INotification;
 }

+ 1 - 1
src/Sharing/Notifications/HuiJu/SubmitVisitInfoNotification.cs

@@ -3,5 +3,5 @@ using Sharing.Province.HuiJu.Send;
 
 namespace Sharing.Notifications.HuiJu
 {
-    public record SubmitVisitInfoNotification(SubmitVisitInfo DataOrder) : INotification;
+    public record SubmitVisitInfoNotification(List<SubmitVisitInfo> DataOrder) : INotification;
 }

+ 8 - 0
src/Sharing/Province/Other/IWaitingPushDataRepository.cs

@@ -0,0 +1,8 @@
+using XF.Domain.Repository;
+
+namespace Sharing.Province.Other
+{
+    public interface IWaitingPushDataRepository : IRepository<WaitingPushData>
+    {
+    }
+}

+ 43 - 0
src/Sharing/Province/Other/WaitingPushData.cs

@@ -0,0 +1,43 @@
+using SqlSugar;
+using System.ComponentModel;
+using XF.Domain.Repository;
+
+namespace Sharing.Province.Other
+{
+    /// <summary>
+    /// 省12345待推送数据
+    /// </summary>
+    [Description("省12345待推送数据")]
+    public class WaitingPushData : CreationEntity
+    {
+        /// <summary>
+        /// 服务接口名称
+        /// </summary>
+        [SugarColumn(ColumnDescription = "服务接口名称", ColumnDataType = "varchar(30)")]
+        public string ServiceInterface { get; set; }
+
+        /// <summary>
+        /// 推送数据
+        /// </summary>
+        [SugarColumn(ColumnDescription = "推送数据", ColumnDataType = "text")]
+        public string Data { get; set; }
+
+        /// <summary>
+        /// 推送优先级
+        /// </summary>
+        [SugarColumn(ColumnDescription = "推送优先级")]
+        public int Priority { get; set; } = 0;
+
+        /// <summary>
+        /// 推送地址
+        /// </summary>
+        [SugarColumn(ColumnDescription = "推送地址", ColumnDataType = "varchar(100)", IsNullable = true)]
+        public string PushUrl { get; set; }
+
+        /// <summary>
+        /// 推送方式 post、get
+        /// </summary>
+        [SugarColumn(ColumnDescription = "推送方式 post、get", ColumnDataType = "varchar(10)", IsNullable = true)]
+        public string Method { get; set; }
+    }
+}