Browse Source

增加再次推送数据

tangjiang 4 months ago
parent
commit
b01c793905

+ 10 - 0
src/DataSharing.Host/StartupHelper.cs

@@ -263,6 +263,16 @@ namespace DataSharing.Host
                     .WithCronSchedule("0/30 * * * * ? ")
                 );
 
+                //再次电话记录
+                var tasksendcallKey = new JobKey("task-send-call-job", "task send call job");
+                d.AddJob<TaskSendCallJob>(tasksendcallKey);
+                d.AddTrigger(t => t
+                    .WithIdentity("task-send-call-trigger")
+                    .ForJob(tasksendcallKey)
+                    .StartNow()
+                    .WithCronSchedule("0/15 * * * * ? ")
+                );
+
                 ////execute send task
                 //var taskExecuteJobKey = new JobKey("task-execute-job", "send task");
                 //d.AddJob<TaskExecuteJob>(taskExecuteJobKey);

+ 5 - 0
src/DataSharing/ChannelConfiguration.cs

@@ -7,6 +7,11 @@
         /// </summary>
         public string ProcessingServices { get; set; }
 
+        /// <summary>
+        /// 是否开启推送
+        /// </summary>
+        public bool IsOpenPush {  get; set; }
+
         /// <summary>
         /// 业务系统附件上传配置
         /// </summary>

+ 9 - 0
src/DataSharing/ChannelConfigurationManager.cs

@@ -28,6 +28,15 @@ namespace DataSharing
             return _channelOption.Value.ProcessingServices;
         }
 
+        /// <summary>
+        /// 获取是否开启推送
+        /// </summary>
+        /// <returns></returns>
+        public bool GetConfigurationIsOpenPush()
+        {
+            return _channelOption.Value.IsOpenPush;
+        }
+
         /// <summary>
         /// 业务系统附件上传配置
         /// </summary>

+ 7 - 0
src/DataSharing/IChannelConfigurationManager.cs

@@ -8,6 +8,13 @@
         /// <returns></returns>
         string GetConfigurationProcessingServices();
 
+
+        /// <summary>
+        /// 获取是否开启推送
+        /// </summary>
+        /// <returns></returns>
+        bool GetConfigurationIsOpenPush();
+
         /// <summary>
         /// 业务系统附件上传配置
         /// </summary>

+ 38 - 0
src/DataSharing/Province/SendTask/ProvinceOther/DsSendCall.cs

@@ -0,0 +1,38 @@
+using DataSharing.Share.Enums;
+using SqlSugar;
+using XF.Domain.Repository;
+
+namespace DataSharing.Province.SendTask.ProvinceOther
+{
+    public class DsSendCall : CreationEntity
+    {
+        /// <summary>
+        /// 数据读取状态 
+        /// </summary>
+        [SugarColumn(ColumnDescription = "数据读取状态")]
+        public EWaitSendTaskState State { get; set; } = EWaitSendTaskState.WaitPush;
+
+        /// <summary>
+        /// 标识版本字段
+        /// </summary>
+        [SqlSugar.SugarColumn(IsEnableUpdateVersionValidation = true)]
+        public Guid Ver { get; set; }
+
+        /// <summary>
+        /// 旧数据id
+        /// </summary>
+        public string OldDataId { get; set; }
+
+        /// <summary>
+        /// 组装参数
+        /// </summary>
+        [SugarColumn(ColumnDataType = "json", IsJson = true, IsNullable = true, ColumnDescription = "组装参数")]
+        public Share.Dtos.Province.HuiJu.SubmitCaseRecordInfo RequestData { get; set; }
+
+        /// <summary>
+        /// 推送次数
+        /// </summary>
+        [SugarColumn(ColumnDescription = "推送次数")]
+        public int SendTimes { get; set; }
+    }
+}

+ 86 - 0
src/DataSharing/Province/SendTask/TaskSendCallJob.cs

@@ -0,0 +1,86 @@
+using DataSharing.Province.SendTask.ProvinceOther;
+using DataSharing.Province.SendTask.SubmitCaseRecord;
+using DataSharing.SendTask;
+using DataSharing.Share.Enums;
+using Microsoft.Extensions.Logging;
+using Quartz;
+using XF.Domain.Repository;
+
+namespace DataSharing.Province.SendTask
+{
+    public class TaskSendCallJob : IJob, IDisposable
+    {
+        private readonly ILogger<TaskSendCallJob> _logger;
+        private readonly IRepository<DsSendTaskSubmitCaseRecord> _sendTaskSubmitCaseRecordRepository;
+        private readonly IRepository<DsWaitSendTaskSubmitCaseRecord> _waitSendTaskSubmitCaseRecordRepository;
+        private readonly IRepository<DsSendCall> _dsSendCallRepository;
+        private readonly IInitPushDataService _initPushDataService;
+        private readonly IChannelConfigurationManager _channelConfigurationManager;
+
+        public TaskSendCallJob(ILogger<TaskSendCallJob> logger,
+                IRepository<DsSendTaskSubmitCaseRecord> sendTaskSubmitCaseRecordRepository,
+            IRepository<DsWaitSendTaskSubmitCaseRecord> waitSendTaskSubmitCaseRecordRepository,
+            IRepository<DsSendCall> dsSendCallRepository,
+             IInitPushDataService initPushDataService,
+             IChannelConfigurationManager channelConfigurationManager)
+        {
+            _logger = logger;
+            _sendTaskSubmitCaseRecordRepository = sendTaskSubmitCaseRecordRepository;
+            _waitSendTaskSubmitCaseRecordRepository = waitSendTaskSubmitCaseRecordRepository;
+            _dsSendCallRepository = dsSendCallRepository;
+            _initPushDataService = initPushDataService;
+            _channelConfigurationManager = channelConfigurationManager;
+        }
+
+        public async Task Execute(IJobExecutionContext context)
+        {
+            if (_channelConfigurationManager.GetConfigurationIsOpenPush())
+            {
+                //读取数据
+                var dataSendList = await _dsSendCallRepository.Queryable()
+                        .Where(d => d.State == EWaitSendTaskState.WaitPush && d.SendTimes <= 6)
+                        .Take(1)
+                        .ToListAsync(context.CancellationToken);
+
+                //数据不为空
+                if (dataSendList != null && dataSendList.Any())
+                {
+                    List<DsSendCall> sendList = new List<DsSendCall>();
+                    foreach (var dataSend in dataSendList)
+                    {
+                        //锁定数据
+                        dataSend.State = EWaitSendTaskState.Pushing;
+                        if (await _dsSendCallRepository.Updateable(dataSend).ExecuteCommandWithOptLockAsync() > 0)
+                        {
+                            sendList.Add(dataSend);
+                        }
+
+                    }
+                    if (sendList != null && sendList.Any())
+                    {
+                        //添加待推送表数据
+                        foreach (var item in sendList)
+                        {
+                            var data = await _sendTaskSubmitCaseRecordRepository.GetAsync(item.OldDataId, context.CancellationToken);
+                            if (data != null)
+                            {
+                                var id = await _initPushDataService.InitDsSendTaskSubmitCaseRecord(data.ProvinceNo, data.CallId, data.CallLogId, data.Request, data.RequestData, data.GenerationTime, context.CancellationToken);
+                                if (!string.IsNullOrEmpty(id))
+                                    item.State = EWaitSendTaskState.StopPush;
+                                else
+                                    item.State = EWaitSendTaskState.WaitPush;
+                                item.SendTimes = item.SendTimes + 1;
+                                await _dsSendCallRepository.UpdateAsync(item, context.CancellationToken);
+                            }
+                        }
+                    }
+                }
+            }
+        }
+
+
+        public void Dispose()
+        {
+        }
+    }
+}