Browse Source

团组汇率 GetGroupRateDataSources
1.按使用币种数量排序
2.每天零点定时任务写入redis缓存

leiy 11 months ago
parent
commit
cb75473222

+ 31 - 8
OASystem/OASystem.Api/Controllers/FinancialController.cs

@@ -30,6 +30,7 @@ using System.Globalization;
 using NPOI.POIFS.Properties;
 using SixLabors.ImageSharp.ColorSpaces;
 using OASystem.Domain.ViewModels.QiYeWeChat;
+using System.Diagnostics;
 
 namespace OASystem.API.Controllers
 {
@@ -50,13 +51,14 @@ namespace OASystem.API.Controllers
         private readonly ForeignReceivablesRepository _ForForeignReceivablesRep;  //对外收款账单仓库
         private readonly ProceedsReceivedRepository _proceedsReceivedRep;  //已收款项仓库
         private readonly PaymentRefundAndOtherMoneyRepository _paymentRefundAndOtherMoneyRep; //收款退还与其他款项 仓库
+        private readonly DelegationInfoRepository _delegationInfoRep; //团组信息 仓库
 
         /// <summary>
         /// 初始化
         /// </summary>
         public FinancialController(IMapper mapper, IConfiguration configuration, DailyFeePaymentRepository daiRep, SqlSugarClient sqlSugar, SetDataTypeRepository setDataTypeRep,
             TeamRateRepository teamRateRep, ForeignReceivablesRepository ForForeignReceivablesRep, ProceedsReceivedRepository proceedsReceivedRep,
-            PaymentRefundAndOtherMoneyRepository paymentRefundAndOtherMoneyRep, HttpClient httpClient)
+            PaymentRefundAndOtherMoneyRepository paymentRefundAndOtherMoneyRep, HttpClient httpClient, DelegationInfoRepository delegationInfoRep)
         {
             _mapper = mapper;
             _config = configuration;
@@ -68,6 +70,7 @@ namespace OASystem.API.Controllers
             _proceedsReceivedRep = proceedsReceivedRep;
             _paymentRefundAndOtherMoneyRep = paymentRefundAndOtherMoneyRep;
             _httpClient = httpClient;
+            _delegationInfoRep = delegationInfoRep;
         }
 
         #region 日付申请
@@ -335,21 +338,41 @@ namespace OASystem.API.Controllers
                 //迁移数据更新团组汇率
                 //Result teamRateData1 = await _teamRateRep.GetGroupRateChangeData();
 
-                //PostGroupTeamRateHot
-
                 //var data = await _teamRateRep.PostGroupTeamRateHot();
 
-                Result teamRateData = await _teamRateRep.GetGroupRateDataSource(dto);
-                if (teamRateData.Code != 0)
+
+                Stopwatch stopwatch = Stopwatch.StartNew();
+
+                GroupNameDto groupNameDto = new GroupNameDto() { PortType = dto.PortType };
+                var groups = await _delegationInfoRep.GetGroupNameList(groupNameDto);
+
+                List<CurrencyHot> _currData = new List<CurrencyHot>();
+
+                string currData = await RedisRepository.RedisFactory.CreateRedisRepository().StringGetAsync<string>("GroupTeamCurrencyData");//string 取
+
+                if (!string.IsNullOrEmpty(currData))
                 {
-                    return Ok(JsonView(false, teamRateData.Msg));
+                    _currData = JsonConvert.DeserializeObject<List<CurrencyHot>>(currData);
                 }
-                return Ok(JsonView(true, teamRateData.Msg, teamRateData.Data));
+                else
+                {
+                    _currData = await _teamRateRep.PostGroupTeamRateHot();
+
+                    //过期时间 25 Hours
+                    TimeSpan ts = DateTime.Now.AddHours(25).TimeOfDay;
+                    await RedisRepository.RedisFactory.CreateRedisRepository().StringSetAsync("GroupTeamCurrencyData", JsonConvert.SerializeObject(_currData), ts);
+                }
+
+                var _data = new { GroupData = groups.Data, TeamRateData = _currData };
+
+                stopwatch.Stop();
+
+                return Ok(JsonView(true, $"查询成功!耗时:{stopwatch.ElapsedMilliseconds / 1000}s", _data));
+
             }
             catch (Exception ex)
             {
                 return Ok(JsonView(false, ex.Message));
-                throw;
             }
         }
 

+ 1 - 0
OASystem/OASystem.Api/OAMethodLib/Quartz/Business/DeleReminderMessage.cs

@@ -83,5 +83,6 @@ namespace OASystem.API.OAMethodLib.Quartz.Business
             }
         }
 
+
     }
 }

+ 30 - 0
OASystem/OASystem.Api/OAMethodLib/Quartz/Business/TeamCurrency.cs

@@ -0,0 +1,30 @@
+using OASystem.Infrastructure.Repositories.Groups;
+
+namespace OASystem.API.OAMethodLib.Quartz.Business
+{
+    public class TeamCurrency
+    {
+
+        private readonly static TeamRateRepository _grpCurrencyRep = AutofacIocManager.Instance.GetService<TeamRateRepository>();
+
+        /// <summary>
+        /// 团组币种信息
+        /// 每天 凌晨零点更新
+        /// </summary>
+        public static async void PostTeamCurrencyUpdate()
+        {
+            string grpCurrencyName = "GroupTeamCurrencyData";
+
+            var _currData = await _grpCurrencyRep.PostGroupTeamRateHot();
+            if (_currData != null)
+            {
+              var s = await RedisRepository.RedisFactory.CreateRedisRepository().KeyDeleteAsync(grpCurrencyName);
+                if (s)
+                {
+                    TimeSpan ts = DateTime.Now.AddHours(25).TimeOfDay;
+                    await RedisRepository.RedisFactory.CreateRedisRepository().StringSetAsync(grpCurrencyName,JsonConvert.SerializeObject(_currData), ts);
+                }
+            }
+        }
+    }
+}

+ 33 - 0
OASystem/OASystem.Api/OAMethodLib/Quartz/Jobs/GroupTeamCurrencyJob.cs

@@ -0,0 +1,33 @@
+using OASystem.API.OAMethodLib.Quartz.Business;
+using Quartz;
+using QuzrtzJob.Factory;
+
+namespace OASystem.API.OAMethodLib.Quartz.Jobs
+{
+    /// <summary>
+    /// 团组币种 定时任务
+    /// </summary>
+    public class GroupTeamCurrencyJob : IJob
+    {
+        private readonly ILogger<GroupTeamCurrencyJob> _logger;
+
+        /// <summary>
+        /// 团组币种
+        /// 定时任务
+        /// </summary>
+        /// <param name="logger"></param>
+        public GroupTeamCurrencyJob(ILogger<GroupTeamCurrencyJob> logger)
+        {
+            _logger = logger;
+        }
+
+        public Task Execute(IJobExecutionContext context)
+        {
+            _logger.LogInformation("调用团组币种接口 " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
+            //在此处编写任务业务代码
+            TeamCurrency.PostTeamCurrencyUpdate();
+
+            return Task.CompletedTask;
+        }
+    }
+}

+ 6 - 0
OASystem/OASystem.Api/OAMethodLib/Quartz/QuartzFactory.cs

@@ -40,16 +40,22 @@ namespace QuzrtzJob.Factory
                             //.WithSimpleSchedule(x => x.WithIntervalInSeconds(60).RepeatForever())//每六十秒执行一次
                             .WithCronSchedule("0 0 9,18 * * ?") //每天早上九点和下午六点触发
                             .Build();
+            var teamCurrencyTrigger = TriggerBuilder.Create()
+                            //.WithSimpleSchedule(x => x.WithIntervalInSeconds(60).RepeatForever())//每六十秒执行一次
+                            .WithCronSchedule("0 0 0 * * ? ") //每天零点零分点触发
+                            .Build();
 
             //5、创建任务
             var jobDetail = JobBuilder.Create<ALiYunPostMessageJob>().WithIdentity("job1", "group") .Build();
             var taskJobDetail = JobBuilder.Create<TaskJob>().WithIdentity("job2", "group").Build();
             var taskMsgJobDetail = JobBuilder.Create<TaskNewsFeedJob>().WithIdentity("job3", "group").Build();
+            var teamCurrencyJobDetail = JobBuilder.Create<GroupTeamCurrencyJob>().WithIdentity("job4", "group").Build();
 
             //6、将触发器和任务器绑定到调度器中
             await _scheduler.ScheduleJob(jobDetail, trigger);
             await _scheduler.ScheduleJob(taskJobDetail, taskTrigger);
             await _scheduler.ScheduleJob(taskMsgJobDetail, taskMsgTrigger);
+            await _scheduler.ScheduleJob(teamCurrencyJobDetail, teamCurrencyTrigger);
 
 
             return await Task.FromResult("将触发器和任务器绑定到调度器中完成");

+ 1 - 14
OASystem/OASystem.Infrastructure/Repositories/Groups/TeamRateRepository.cs

@@ -682,23 +682,10 @@ namespace OASystem.Infrastructure.Repositories.Groups
 
             var teamRateInfo = _sqlSugar.SqlQueryable<TeamRateInfoView>(teamRateInfoSql).ToList();
 
-            List<SetDataInfoView> currencyDatas = new List<SetDataInfoView>();
             #region 获取所有币种
 
             string sql = string.Format(@"Select * From Sys_SetData Where STid = {0} And IsDel = 0", 66);
-            var DBdata = _setDataRep.GetListBySqlWithNolock(sql);
-
-            if (DBdata == null || DBdata.Count == 0)
-            {
-                return _view;
-            }
-
-            currencyDatas = DBdata.Select(x => new SetDataInfoView
-            {
-                Name = x.Name,
-                Id = x.Id,
-                Remark = x.Remark,
-            }).ToList();
+            var currencyDatas = _sqlSugar.SqlQueryable<SetDataInfoView>(sql).ToList();
 
             _view = currencyDatas.Select(it => new CurrencyHot() { CurrencyId = it.Id,  CurrencyCode = it.Name, CurrencyName = it.Remark}).ToList();
             #endregion