Browse Source

查询订单状态增加token、泵码、挂枪时间
员工卡汇总缓存到redis

DOVER-GLOBAL\11047086 1 year ago
parent
commit
1eca9bc897
26 changed files with 833 additions and 128 deletions
  1. 3 0
      .gitignore
  2. BIN
      .vs/ProjectEvaluation/smartfueltool.metadata.v6.1
  3. BIN
      .vs/ProjectEvaluation/smartfueltool.projects.v6.1
  4. BIN
      .vs/smartfueltool/DesignTimeBuild/.dtbcache.v2
  5. BIN
      .vs/smartfueltool/FileContentIndex/5c352688-4a14-4642-817c-fde5bb41ca48.vsidx
  6. BIN
      .vs/smartfueltool/FileContentIndex/bb67af95-41a2-42d9-bc8c-e56f29e5a0d8.vsidx
  7. BIN
      .vs/smartfueltool/FileContentIndex/ca0443ac-f0ed-4996-8f45-bb5bdf024641.vsidx
  8. BIN
      .vs/smartfueltool/FileContentIndex/ea86a3c0-3a80-4ca8-bc30-c0fe4b9f9360.vsidx
  9. 0 0
      .vs/smartfueltool/FileContentIndex/read.lock
  10. BIN
      .vs/smartfueltool/v17/.futdcache.v2
  11. 6 1
      src/MS.DbContexts/AccountingContext.cs
  12. 45 0
      src/MS.Entities/AccountingService_Models/AcctDto.cs
  13. 13 0
      src/MS.Entities/AccountingService_Models/CardSummary.cs
  14. 423 109
      src/MS.Services/Account/AccountService.cs
  15. 2 0
      src/MS.Services/Account/IAccountService.cs
  16. 1 1
      src/MS.Services/PosTrxService/IPosTrxService.cs
  17. 19 4
      src/MS.Services/PosTrxService/PosTrxService.cs
  18. 3 1
      src/MS.UnitOfWork/UnitOfWork/IUnitOfWork.cs
  19. 9 0
      src/MS.UnitOfWork/UnitOfWork/UnitOfWork.cs
  20. 11 0
      src/MS.WebApi/Controllers/AccountController.cs
  21. 3 2
      src/MS.WebApi/Controllers/TransactionStatusController.cs
  22. 10 10
      src/MS.WebApi/appsettings.json
  23. 25 0
      src/MS.WebCore/Core/CustomContractResolver.cs
  24. 154 0
      src/MS.WebCore/Core/RedisExample.cs
  25. 1 0
      src/MS.WebCore/MS.WebCore.csproj
  26. 105 0
      src/QuartzSettings/logs/logs.txt

+ 3 - 0
.gitignore

@@ -108,3 +108,6 @@ _UpgradeReport_Files/
 Backup*/
 UpgradeLog*.XML
 
+.vs/
+*.suo
+*.user

BIN
.vs/ProjectEvaluation/smartfueltool.metadata.v6.1


BIN
.vs/ProjectEvaluation/smartfueltool.projects.v6.1


BIN
.vs/smartfueltool/DesignTimeBuild/.dtbcache.v2


BIN
.vs/smartfueltool/FileContentIndex/5c352688-4a14-4642-817c-fde5bb41ca48.vsidx


BIN
.vs/smartfueltool/FileContentIndex/bb67af95-41a2-42d9-bc8c-e56f29e5a0d8.vsidx


BIN
.vs/smartfueltool/FileContentIndex/ca0443ac-f0ed-4996-8f45-bb5bdf024641.vsidx


BIN
.vs/smartfueltool/FileContentIndex/ea86a3c0-3a80-4ca8-bc30-c0fe4b9f9360.vsidx


+ 0 - 0
.vs/smartfueltool/FileContentIndex/read.lock


BIN
.vs/smartfueltool/v17/.futdcache.v2


+ 6 - 1
src/MS.DbContexts/AccountingContext.cs

@@ -18,6 +18,8 @@ namespace MS.DbContexts
         }
         public static readonly ILoggerFactory MyLoggerFactory = LoggerFactory.Create(builder => builder.AddDebug().AddConsole());
         public DbSet<MyTransaction> TransactionInfoDtos { get; set; }
+        public DbSet<AcctDto> acctDtos { get; set; }
+        public DbSet<CardSummary> cardSummaries { get; set; }
         public DbSet<ChangeHistory> changeHistories { get; set; }
         public virtual DbSet<AccountInfo> AccountInfo { get; set; }
         public virtual DbSet<AccountType> AccountType { get; set; }
@@ -55,7 +57,10 @@ namespace MS.DbContexts
        .Ignore(m => m.BuInfoCreated);
             modelBuilder.Entity<MyTransaction>()
         .HasNoKey(); // 标记为无主键实体
-
+            modelBuilder.Entity<AcctDto>()
+     .HasNoKey(); // 标记为无主键实体
+            modelBuilder.Entity<CardSummary>()
+.HasNoKey(); // 标记为无主键实体
 
 
             modelBuilder.Entity<AccountInfo>(entity =>

+ 45 - 0
src/MS.Entities/AccountingService_Models/AcctDto.cs

@@ -0,0 +1,45 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace MS.Entities.AccountingService_Models
+{
+    public class AcctDto
+    {
+        public string belong_to { get; set; }
+        public string account_id { get; set; }
+        public string card_no { get; set; }
+        public string holder { get; set; }
+        public long? trx_count { get; set; }
+        public long? volume { get; set; }
+        public long? amount { get; set; }
+        public long? card_type { get; set; }
+        public DateTime? card_creation_date { get; set; }
+
+        public long? card_status { get; set; }
+
+        public long? account_status { get; set; }
+
+        public DateTime? creation_date { get; set; }
+        public long? account_balance { get; set; }
+
+        public long? recharge_total { get; set; }
+        public long? account_type { get; set; }
+        public long? card_balance { get; set; }
+        public long? account_deposite_balance { get; set; }
+        public long? card_deposite_balance { get; set; }
+
+
+        public long? card_recharge_total { get; set; }
+    }
+    public class RootObject
+    {
+        public AcctDto data { get; set; }
+        public AcctDto update { get; set; }
+    }
+    public class OuterObject
+    {
+        public string data { get; set; }
+        public string update { get; set; }
+    }
+}

+ 13 - 0
src/MS.Entities/AccountingService_Models/CardSummary.cs

@@ -0,0 +1,13 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace MS.Entities.AccountingService_Models
+{
+    public class CardSummary
+    {
+        public string belong_to { get; set; }
+        public long? amount { get; set; }
+        public long? volume { get; set; }
+    }
+}

+ 423 - 109
src/MS.Services/Account/AccountService.cs

@@ -13,10 +13,14 @@ using MS.Models.ViewModel;
 using MS.UnitOfWork;
 using MS.WebCore;
 using MS.WebCore.Core;
+using Newtonsoft.Json;
+using NPOI.POIFS.Crypt.Dsig;
+using NPOI.SS.Formula.Functions;
 using System;
 using System.Collections;
 using System.Collections.Generic;
 using System.Linq;
+using System.Text.RegularExpressions;
 using System.Threading.Tasks;
 
 namespace MS.Services
@@ -25,6 +29,7 @@ namespace MS.Services
     {
         private readonly JwtService _jwtService;
         private readonly SiteSetting _siteSetting;
+        public RedisExample redisExample = new RedisExample();
         bool ihostSyncRepLost = true;
 
         public AccountService(JwtService jwtService, IOptions<SiteSetting> options, IUnitOfWork<MSDbContext> unitOfWork, IMapper mapper, IdWorker idWorker, IClaimsAccessor claimsAccessor, IStringLocalizer localizer, IUnitOfWork<AccountingContext> AccountingContext, IUnitOfWork<SQLiteContext> SQLiteContext, IUnitOfWork<AuthContext> AuthContext) : base(unitOfWork, mapper, idWorker, claimsAccessor, localizer, AccountingContext, SQLiteContext, AuthContext)
@@ -371,18 +376,18 @@ select
                         }
                     }
 
-//                    var dbAccountInfo = await _AccountingContext.GetRepository<AccountInfo>().FromSql(string.Format(@"
-//                 select accountinf0_.*
-//    from
-//        account_info accountinf0_ 
-//    left outer join
-//        business_unit_info businessun1_ 
-//            on accountinf0_.business_unit_info_id=businessun1_.id 
-//    where
-//        businessun1_.id= '{0}'
-//    order by
-//        accountinf0_.last_modified asc
-//", buid)).ToListAsync();
+                    //                    var dbAccountInfo = await _AccountingContext.GetRepository<AccountInfo>().FromSql(string.Format(@"
+                    //                 select accountinf0_.*
+                    //    from
+                    //        account_info accountinf0_ 
+                    //    left outer join
+                    //        business_unit_info businessun1_ 
+                    //            on accountinf0_.business_unit_info_id=businessun1_.id 
+                    //    where
+                    //        businessun1_.id= '{0}'
+                    //    order by
+                    //        accountinf0_.last_modified asc
+                    //", buid)).ToListAsync();
 
                     var dbAccountInfo = _AccountingContext.GetRepository<AccountInfo>().GetAll().Where(a => a.BusinessUnitInfoId == buid).ToList();
                     foreach (var accountInfo in dbAccountInfo)
@@ -394,33 +399,33 @@ select
                     }
 
                     var dbBlackCardInfo = _AccountingContext.GetRepository<BlackCardInfo>().GetAll().Where(a => a.BuInfoId == buid).ToList();
-//                    var dbBlackCardInfo = await _AccountingContext.GetRepository<BlackCardInfo>().FromSql(string.Format(@"
-//                select
-//        blackcardi0_.id,
-//        blackcardi0_.acct_gid,
-//        blackcardi0_.acct_id,
-//        blackcardi0_.black_card_type,
-//        blackcardi0_.black_date,
-//        blackcardi0_.bu_info_id,
-//        blackcardi0_.bu_info_created_id,
-//        blackcardi0_.card_no,
-//        blackcardi0_.card_type,
-//        blackcardi0_.discount_no,
-//        blackcardi0_.gid,
-//        blackcardi0_.is_deleted,
-//        blackcardi0_.last_modified,
-//        blackcardi0_.reason,
-//        blackcardi0_.upload_flag 
-//    from
-//        black_card_info blackcardi0_ 
-//    left outer join
-//        business_unit_info businessun1_ 
-//            on blackcardi0_.bu_info_id=businessun1_.id 
-//    where
-//        businessun1_.id= '{0}'
-//    order by
-//        blackcardi0_.last_modified asc
-//", buid)).ToListAsync();
+                    //                    var dbBlackCardInfo = await _AccountingContext.GetRepository<BlackCardInfo>().FromSql(string.Format(@"
+                    //                select
+                    //        blackcardi0_.id,
+                    //        blackcardi0_.acct_gid,
+                    //        blackcardi0_.acct_id,
+                    //        blackcardi0_.black_card_type,
+                    //        blackcardi0_.black_date,
+                    //        blackcardi0_.bu_info_id,
+                    //        blackcardi0_.bu_info_created_id,
+                    //        blackcardi0_.card_no,
+                    //        blackcardi0_.card_type,
+                    //        blackcardi0_.discount_no,
+                    //        blackcardi0_.gid,
+                    //        blackcardi0_.is_deleted,
+                    //        blackcardi0_.last_modified,
+                    //        blackcardi0_.reason,
+                    //        blackcardi0_.upload_flag 
+                    //    from
+                    //        black_card_info blackcardi0_ 
+                    //    left outer join
+                    //        business_unit_info businessun1_ 
+                    //            on blackcardi0_.bu_info_id=businessun1_.id 
+                    //    where
+                    //        businessun1_.id= '{0}'
+                    //    order by
+                    //        blackcardi0_.last_modified asc
+                    //", buid)).ToListAsync();
                     foreach (var black in dbBlackCardInfo)
                     {
                         if (black.LastModified <= lastModified)
@@ -429,53 +434,53 @@ select
                         }
                     }
                     var dbGrayInfo = _AccountingContext.GetRepository<GrayInfo>().GetAll().Where(a => a.BuInfoId == buid).ToList();
-//                    var dbGrayInfo = await _AccountingContext.GetRepository<GrayInfo>().FromSql(string.Format(@"
-//                   select
-//        grayinfo0_.id,
-//        grayinfo0_.bu_info_id,
-//        grayinfo0_.bu_info_created_id,
-//        grayinfo0_.card_balance,
-//        grayinfo0_.card_no,
-//        grayinfo0_.comm_id,
-//        grayinfo0_.ctc,
-//        grayinfo0_.discount_no,
-//        grayinfo0_.end_pump,
-//        grayinfo0_.gid,
-//        grayinfo0_.gmac,
-//        grayinfo0_.is_deleted,
-//        grayinfo0_.last_modified,
-//        grayinfo0_.money,
-//        grayinfo0_.nozzle_no,
-//        grayinfo0_.pay_terminal_id,
-//        grayinfo0_.paymode_id,
-//        grayinfo0_.price,
-//        grayinfo0_.psam_asn,
-//        grayinfo0_.psam_tac,
-//        grayinfo0_.psam_tid,
-//        grayinfo0_.psam_ttc,
-//        grayinfo0_.pump_no,
-//        grayinfo0_.pump_type,
-//        grayinfo0_.real_money,
-//        grayinfo0_.sno,
-//        grayinfo0_.sequence_no,
-//        grayinfo0_.tac,
-//        grayinfo0_.tmac,
-//        grayinfo0_.trd_type,
-//        grayinfo0_.ttc,
-//        grayinfo0_.ttc_time,
-//        grayinfo0_.ttc_time_end,
-//        grayinfo0_.upload_flag,
-//        grayinfo0_.volume
-//    from
-//        gray_info grayinfo0_ 
-//    left outer join
-//        business_unit_info businessun1_ 
-//            on grayinfo0_.bu_info_id=businessun1_.id 
-//    where
-//        businessun1_.id= '{0}'
-//    order by
-//        grayinfo0_.last_modified asc
-//", buid)).ToListAsync();
+                    //                    var dbGrayInfo = await _AccountingContext.GetRepository<GrayInfo>().FromSql(string.Format(@"
+                    //                   select
+                    //        grayinfo0_.id,
+                    //        grayinfo0_.bu_info_id,
+                    //        grayinfo0_.bu_info_created_id,
+                    //        grayinfo0_.card_balance,
+                    //        grayinfo0_.card_no,
+                    //        grayinfo0_.comm_id,
+                    //        grayinfo0_.ctc,
+                    //        grayinfo0_.discount_no,
+                    //        grayinfo0_.end_pump,
+                    //        grayinfo0_.gid,
+                    //        grayinfo0_.gmac,
+                    //        grayinfo0_.is_deleted,
+                    //        grayinfo0_.last_modified,
+                    //        grayinfo0_.money,
+                    //        grayinfo0_.nozzle_no,
+                    //        grayinfo0_.pay_terminal_id,
+                    //        grayinfo0_.paymode_id,
+                    //        grayinfo0_.price,
+                    //        grayinfo0_.psam_asn,
+                    //        grayinfo0_.psam_tac,
+                    //        grayinfo0_.psam_tid,
+                    //        grayinfo0_.psam_ttc,
+                    //        grayinfo0_.pump_no,
+                    //        grayinfo0_.pump_type,
+                    //        grayinfo0_.real_money,
+                    //        grayinfo0_.sno,
+                    //        grayinfo0_.sequence_no,
+                    //        grayinfo0_.tac,
+                    //        grayinfo0_.tmac,
+                    //        grayinfo0_.trd_type,
+                    //        grayinfo0_.ttc,
+                    //        grayinfo0_.ttc_time,
+                    //        grayinfo0_.ttc_time_end,
+                    //        grayinfo0_.upload_flag,
+                    //        grayinfo0_.volume
+                    //    from
+                    //        gray_info grayinfo0_ 
+                    //    left outer join
+                    //        business_unit_info businessun1_ 
+                    //            on grayinfo0_.bu_info_id=businessun1_.id 
+                    //    where
+                    //        businessun1_.id= '{0}'
+                    //    order by
+                    //        grayinfo0_.last_modified asc
+                    //", buid)).ToListAsync();
                     foreach (var grayInfo in dbGrayInfo)
                     {
                         if (grayInfo.LastModified <= lastModified)
@@ -487,29 +492,29 @@ select
                     if (ihostSyncRepLost)
                     {
                         var dbRepLossInfo = _AccountingContext.GetRepository<CardRepLossInfo>().GetAll().Where(a => a.BuInfoId == buid).ToList();
-//                        var dbRepLossInfo = await _AccountingContext.GetRepository<CardRepLossInfo>().FromSql(string.Format(@"
-//select
-//        cardreplos0_.id,
-//        cardreplos0_.bu_info_id,
-//        cardreplos0_.bu_info_created_id,
-//        cardreplos0_.card_no,
-//        cardreplos0_.gid,
-//        cardreplos0_.last_modified,
-//        cardreplos0_.loss_time,
-//        cardreplos0_.operation_type,
-//        cardreplos0_.operator_no,
-//        cardreplos0_.reason,
-//        cardreplos0_.sno 
-//    from
-//        card_rep_loss_info cardreplos0_ 
-//    left outer join
-//        business_unit_info businessun1_ 
-//            on cardreplos0_.bu_info_id=businessun1_.id 
-//    where
-//        businessun1_.id= '{0}'
-//    order by
-//        cardreplos0_.last_modified asc
-//", buid)).ToListAsync();
+                        //                        var dbRepLossInfo = await _AccountingContext.GetRepository<CardRepLossInfo>().FromSql(string.Format(@"
+                        //select
+                        //        cardreplos0_.id,
+                        //        cardreplos0_.bu_info_id,
+                        //        cardreplos0_.bu_info_created_id,
+                        //        cardreplos0_.card_no,
+                        //        cardreplos0_.gid,
+                        //        cardreplos0_.last_modified,
+                        //        cardreplos0_.loss_time,
+                        //        cardreplos0_.operation_type,
+                        //        cardreplos0_.operator_no,
+                        //        cardreplos0_.reason,
+                        //        cardreplos0_.sno 
+                        //    from
+                        //        card_rep_loss_info cardreplos0_ 
+                        //    left outer join
+                        //        business_unit_info businessun1_ 
+                        //            on cardreplos0_.bu_info_id=businessun1_.id 
+                        //    where
+                        //        businessun1_.id= '{0}'
+                        //    order by
+                        //        cardreplos0_.last_modified asc
+                        //", buid)).ToListAsync();
                         foreach (var lossInfo in dbRepLossInfo)
                         {
                             if (lossInfo.LastModified <= lastModified)
@@ -668,5 +673,314 @@ select
                              .Where(item => uniqueSet.Contains(item))
                              .ToList();
         }
+        public Task AddEmployeeCardMonthlySummaryToRedisAsync(string buid, string date)
+        {
+
+            AddCardSummary(buid, date);
+            DateTime dateTime = DateTime.Parse(date);
+            DateTime firstDayOfNextMonth = dateTime.AddMonths(1).AddDays(-dateTime.Day);
+            var enddate = firstDayOfNextMonth.ToString("yyyy-MM-dd");
+            string sql = string.Format(@"
+     
+                    SELECT ai.belong_to, trx.account_id, trx.card_no, ci.holder, count(*) as trx_count, sum(trx.volume) as volume, sum(trx.amount) as amount,
+            ci.card_type, ci.creation_date as card_creation_date, ci.card_status, 
+            (array_agg(ai.account_state))[1] as account_status,  
+            (array_agg(ai.creation_date))[1] as creation_date, 
+            (array_agg(ai.balance ORDER BY trx.transaction_time DESC))[1] as account_balance, 
+            (array_agg(ai.recharge_total ORDER BY trx.transaction_time DESC))[1] as recharge_total, 
+            (array_agg(ai.acct_type))[1] as account_type, 
+            (array_agg(ci.balance ORDER BY trx.transaction_time DESC))[1] as card_balance,
+            (array_agg(ai.offline_deposit_balance ORDER BY trx.transaction_time DESC))[1] as account_deposite_balance,
+            (array_agg(ci.deposit_balance ORDER BY trx.transaction_time DESC))[1] as card_deposite_balance, 
+            (array_agg(ci.recharge_total ORDER BY trx.transaction_time DESC))[1] as card_recharge_total
+            FROM public.offline_transaction_info trx 
+            LEFT JOIN public.account_info ai ON ai.id = trx.account_info_id 
+            LEFT JOIN public.card_info ci ON ci.id = trx.card_info_id 
+            WHERE trx.business_unit_info_id IN ('{0}')
+           AND '{1}' <= trx.transaction_time AND trx.transaction_time <= '{2}'
+            AND ci.holder is not null 
+            AND ci.activation_date is not null 
+             AND ci.card_type IN (4)
+            AND ((trx.transaction_type = 10 AND trx.sub_transaction_type IN (0, 1)) OR trx.transaction_type = 1) 
+            GROUP BY trx.account_id, trx.card_no, ai.belong_to, ci.holder, ci.card_type, ci.creation_date, ci.card_status
+            ORDER BY trx.account_id DESC 
+", buid, date, enddate);
+
+            var results = _AccountingContext.DbContext.acctDtos
+               .FromSqlRaw(sql)
+                 .ToList();
+            string sdate = DateTime.Parse(date).ToString("yyyy-MM-dd");
+
+            //"149f3efa-28a0-4368-af6d-af65ca255ef0"   2020-09-15 14:17:22
+            for (var i = 0; i < results.Count(); i++)
+            {
+                string key = "EmployeeCard:" + buid + ":" + results[i].card_no + ":" + results[i].belong_to;//key
+                var hashkey = redisExample.HashKeyExists(key, date);
+                JsonSerializerSettings settings = new JsonSerializerSettings
+                {
+                    ContractResolver = new CustomContractResolver(new[] { "trx_count", "volume", "amount" })
+                };
+                string resultsjson = JsonConvert.SerializeObject(results[i], settings);
+                string data = JsonConvert.SerializeObject(results[i]);
+                if (hashkey)
+                {
+                    continue;
+                }
+
+                List<KeyValuePair<string, string>> hashValues = redisExample.GetListValues(key);
+                if (hashValues.Count > 0)
+                {
+                    List<DateTime> dates = new List<DateTime>();
+                    foreach (var kvp in hashValues)
+                    {
+                        DateTime dateTime1 = DateTime.Parse(kvp.Key);
+                        dates.Add(dateTime1);
+                    }
+                    string maxDate = dates.Max().ToString("yyyy-MM-dd");//
+                    KeyValuePair<string, string> foundPair = hashValues.FirstOrDefault(kvp => kvp.Key == maxDate);
+                    if (!string.IsNullOrEmpty(foundPair.Key))
+                    {
+                        var foundPairvalue = foundPair.Value;
+                        OuterObject rootObject = JsonConvert.DeserializeObject<OuterObject>(foundPairvalue);
+                        AcctDto acctDto = JsonConvert.DeserializeObject<AcctDto>(rootObject.data);
+                        acctDto.trx_count = acctDto.trx_count + results[i].trx_count;
+                        acctDto.volume = acctDto.volume + results[i].volume;
+                        acctDto.amount = acctDto.amount + results[i].amount;
+                        data = JsonConvert.SerializeObject(acctDto);
+                    }
+                }
+
+
+                string json = JsonConvert.SerializeObject(new { data = data, update = resultsjson });
+                redisExample.AddToHash(key, date, json);
+
+            }
+            return Task.CompletedTask;
+        }
+        public Task AddCardSummary(string buid, string date)
+        {
+            DateTime dateTime = DateTime.Parse(date);
+            DateTime firstDayOfNextMonth = dateTime.AddMonths(1).AddDays(-dateTime.Day);
+            var enddate = firstDayOfNextMonth.ToString("yyyy-MM-dd");
+            List<CardCollect> cards = new List<CardCollect>();
+            #region  rechargeTotal
+            ///rechargeTotal
+            string sql = string.Format(@"
+SELECT ai.belong_to,sum(trx.amount) as amount,0 as volume FROM public.offline_transaction_info trx
+            LEFT JOIN public.card_info ci ON trx.card_info_id = ci.id
+            LEFT JOIN public.account_info ai ON ai.id = trx.account_info_id 
+            WHERE trx.business_unit_info_id IN ('{0}')
+             AND ci.card_type IN (4)
+          AND '{1}' <= trx.transaction_time AND trx.transaction_time <= '{2}'
+            AND trx.transaction_type IN (0, 5, 7, 8) 
+            AND trx.recharge_type is not null
+            group by ai.belong_to 
+", buid, date, enddate);
+            var rechargeTotalresults = _AccountingContext.DbContext.cardSummaries
+               .FromSqlRaw(sql)
+                 .ToList();
+            for (var i = 0; i < rechargeTotalresults.Count(); i++)
+            {
+                CardCollect cardCollect = new CardCollect();
+                cardCollect.belong_to = rechargeTotalresults[i].belong_to;
+                cardCollect.rechargeTotal = rechargeTotalresults[i].amount;
+                cards.Add(cardCollect);
+            }
+            #endregion
+
+            #region trxTotal
+            //trxTotal
+            sql = string.Format(@"
+ SELECT ai.belong_to,sum(trx.amount) as amount, sum(trx.volume) as volume FROM public.offline_transaction_info trx
+            LEFT JOIN public.card_info ci ON trx.card_info_id = ci.id
+            LEFT JOIN public.account_info ai ON ai.id = trx.account_info_id 
+           WHERE trx.business_unit_info_id IN ('{0}')
+              AND ci.card_type IN (4)
+              AND '{1}' <= trx.transaction_time AND trx.transaction_time <= '{2}'
+            AND ((trx.transaction_type = 10 AND trx.sub_transaction_type IN (0, 1)) OR trx.transaction_type  = 1)
+            group by ai.belong_to
+", buid, date, enddate);
+            var trxTotalResults = _AccountingContext.DbContext.cardSummaries
+            .FromSqlRaw(sql)
+              .ToList();
+            for (var i = 0; i < trxTotalResults.Count(); i++)
+            {
+                var belong_to = trxTotalResults[i].belong_to;
+               var car = cards.Where(a => a.belong_to == belong_to).FirstOrDefault();
+                if (car != null)
+                {
+                    car.amountTotal = trxTotalResults[i].amount;
+                    car.volumeTotal = trxTotalResults[i].volume;
+                }
+                else
+                {
+                    CardCollect cardCollect = new CardCollect();
+                    cardCollect.belong_to = trxTotalResults[i].belong_to;
+                    cardCollect.amountTotal = trxTotalResults[i].amount;
+                    cardCollect.volumeTotal = trxTotalResults[i].volume;
+                    cards.Add(cardCollect);
+                }
+            }
+            #endregion
+
+            #region  cardBalanceTotal
+
+            sql = string.Format(@"
+  SELECT ai.belong_to,(array_agg(ai.balance))[1] as amount, (array_agg(ai.offline_deposit_balance))[1] as volume FROM public.account_info ai 
+            JOIN public.card_info ci on ci.account_info_id = ai.id 
+            WHERE ci.bu_info_created_id IN ('{0}')
+            AND ci.card_type IN (4)
+            GROUP BY ai.id,ai.belong_to
+", buid);
+            var cardBalanceTotalResults = _AccountingContext.DbContext.cardSummaries
+            .FromSqlRaw(sql)
+              .ToList();
+            for (var i = 0; i < cardBalanceTotalResults.Count(); i++)
+            {
+                var belong_to = cardBalanceTotalResults[i].belong_to;
+                var car = cards.Where(a => a.belong_to == belong_to).FirstOrDefault();
+                if (car != null)
+                {
+                    car.cardBalanceTotal = cardBalanceTotalResults[i].amount;
+                    car.cardDepositTotal = cardBalanceTotalResults[i].volume;
+                }
+                else
+                {
+                    CardCollect cardCollect = new CardCollect();
+                    cardCollect.belong_to = cardBalanceTotalResults[i].belong_to;
+                    cardCollect.cardBalanceTotal = cardBalanceTotalResults[i].amount;
+                    cardCollect.cardDepositTotal = cardBalanceTotalResults[i].volume;
+                    cards.Add(cardCollect);
+                }
+            }
+            #endregion
+
+            #region  accountBalanceTotal
+
+            sql = string.Format(@"
+   SELECT ai.belong_to,sum(ci.balance) as amount, sum(ci.deposit_balance) as volume FROM public.card_info ci 
+            LEFT JOIN public.account_info ai ON ai.id = ci.account_info_id 
+            WHERE ci.bu_info_created_id  IN ('{0}')
+            AND ci.card_type IN (4)
+            group by ai.belong_to
+", buid);
+            var accountBalanceTotalResults = _AccountingContext.DbContext.cardSummaries
+            .FromSqlRaw(sql)
+              .ToList();
+            for (var i = 0; i < accountBalanceTotalResults.Count(); i++)
+            {
+                var belong_to = accountBalanceTotalResults[i].belong_to;
+                var car = cards.Where(a => a.belong_to == belong_to).FirstOrDefault();
+                if (car != null)
+                {
+                    car.balanceTotal = accountBalanceTotalResults[i].amount;
+                    car.accountDepositTotal = accountBalanceTotalResults[i].volume;
+                }
+                else
+                {
+                    CardCollect cardCollect = new CardCollect();
+                    cardCollect.belong_to = accountBalanceTotalResults[i].belong_to;
+                    cardCollect.balanceTotal = cardBalanceTotalResults[i].amount;
+                    cardCollect.accountDepositTotal = cardBalanceTotalResults[i].volume;
+                    cards.Add(cardCollect);
+                }
+            }
+            #endregion
+
+
+            #region  cardTotal
+
+            sql = string.Format(@"
+ SELECT ai.belong_to,count(ci.id) amount,0 as volume FROM public.account_info ai 
+            JOIN public.card_info ci on ci.account_info_id = ai.id 
+            WHERE ci.bu_info_created_id IN ('{0}')
+            AND ci.card_type IN (4)
+            group by ai.belong_to
+", buid);
+            var cardTotalResults = _AccountingContext.DbContext.cardSummaries
+            .FromSqlRaw(sql)
+              .ToList();
+            for (var i = 0; i < cardTotalResults.Count(); i++)
+            {
+                var belong_to = cardTotalResults[i].belong_to;
+                var car = cards.Where(a => a.belong_to == belong_to).FirstOrDefault();
+                if (car != null)
+                {
+                    car.cardTotal = cardTotalResults[i].amount;
+                }
+                else
+                {
+                    CardCollect cardCollect = new CardCollect();
+                    cardCollect.belong_to = cardTotalResults[i].belong_to;
+                    cardCollect.cardTotal = cardTotalResults[i].amount;
+                    cards.Add(cardCollect);
+                }
+            }
+            #endregion
+
+            foreach (var cardCollect in cards)
+            {
+                string key = "CardSummary:" + buid + ":" + cardCollect.belong_to;//key
+                var hashkey = redisExample.HashKeyExists(key, date);
+                string data = JsonConvert.SerializeObject(cardCollect);
+                if (hashkey)
+                {
+                    continue;
+                }
+
+                List<KeyValuePair<string, string>> hashValues = redisExample.GetListValues(key);
+                if (hashValues.Count > 0)
+                {
+                    List<DateTime> dates = new List<DateTime>();
+                    foreach (var kvp in hashValues)
+                    {
+                        DateTime dateTime1 = DateTime.Parse(kvp.Key);
+                        dates.Add(dateTime1);
+                    }
+                    string maxDate = dates.Max().ToString("yyyy-MM-dd");//
+                    KeyValuePair<string, string> foundPair = hashValues.FirstOrDefault(kvp => kvp.Key == maxDate);
+                    if (!string.IsNullOrEmpty(foundPair.Key))
+                    {
+                        var foundPairvalue = foundPair.Value;
+                        CardCollect rootObject = JsonConvert.DeserializeObject<CardCollect>(foundPairvalue);
+
+                        rootObject.accountBalanceTotal = rootObject.accountBalanceTotal + cardCollect.accountBalanceTotal;
+                        rootObject.amountTotal = rootObject.amountTotal + cardCollect.amountTotal;
+                        rootObject.volumeTotal = rootObject.volumeTotal + cardCollect.volumeTotal;
+                        rootObject.rechargeTotal = rootObject.rechargeTotal + cardCollect.rechargeTotal;
+                        rootObject.accountDepositTotal = rootObject.accountDepositTotal + cardCollect.accountDepositTotal;
+                        rootObject.cardBalanceTotal = rootObject.cardBalanceTotal + cardCollect.cardBalanceTotal;
+                        rootObject.cardDepositTotal = rootObject.cardDepositTotal + cardCollect.cardDepositTotal;
+                        rootObject.balanceTotal = rootObject.balanceTotal + cardCollect.balanceTotal;
+                        rootObject.cardTotal = rootObject.cardTotal + cardCollect.cardTotal;
+                        data = JsonConvert.SerializeObject(rootObject);
+                    }
+                }
+                string json = JsonConvert.SerializeObject(new { data = data });
+                redisExample.AddToHash(key, date, json);
+            }
+            //string key = "CardSummary:" + buid + ":" + rechargeTotalresults[i].belong_to;//key
+            return Task.CompletedTask;
+        }
+        public bool GetRedisKey(string key)
+        {
+            List<KeyValuePair<string, string>> hashValues = redisExample.GetListValues("myHash");
+            return true;
+        }
+
+    }
+    public class CardCollect
+    { 
+        public string belong_to { get; set; }
+        public long? amountTotal { get; set; }
+        public long? volumeTotal { get; set; }
+        public long? rechargeTotal { get; set; }
+        public long? accountBalanceTotal { get; set; }
+        public long? accountDepositTotal { get; set; }
+
+        public long? cardBalanceTotal { get; set; }
+        public long? cardDepositTotal { get; set; }
+        public long? balanceTotal { get; set; }
+        public long? cardTotal { get; set; }
     }
 }

+ 2 - 0
src/MS.Services/Account/IAccountService.cs

@@ -9,5 +9,7 @@ namespace MS.Services
     {
         Task<ExecuteResult<UserData>> Login(LoginViewModel viewModel);
         Task<ExecuteResult<UserData>> syncFromVersion(long versionNo,bool excludingCurrentBu, string specificHeader);
+
+         Task AddEmployeeCardMonthlySummaryToRedisAsync(string buid, string date);
     }
 }

+ 1 - 1
src/MS.Services/PosTrxService/IPosTrxService.cs

@@ -19,6 +19,6 @@ namespace MS.Services.PosTrxService
                                                          string endTime,
                                                          string currentBuId);
 
-        Task<ExecuteResult> GetTransactionStatus(string SeqNo, string NozzleId, string sn,string FuelItemFdcReleaseTokenAttribute,string FuelItemOriginalGrossAmount);
+        Task<ExecuteResult> GetTransactionStatus(string SeqNo, string NozzleId, string sn,string FuelItemFdcReleaseTokenAttribute,string FuelItemOriginalGrossAmount, DateTime? FuelItemTransactionEndTime = null);
     }
 }

+ 19 - 4
src/MS.Services/PosTrxService/PosTrxService.cs

@@ -320,10 +320,12 @@ WHERE
             //}
             return nozzleTotalizers;
         }
-        public async Task<ExecuteResult> GetTransactionStatus(string SeqNo, string NozzleId, string sn, string FuelItemFdcReleaseTokenAttribute, string FuelItemOriginalGrossAmount)
+        public async Task<ExecuteResult> GetTransactionStatus(string SeqNo, string NozzleId, string sn, string FuelItemFdcReleaseTokenAttribute, string FuelItemOriginalGrossAmount, DateTime? FuelItemTransactionEndTime = null)
         {
+          //  MS.WebCore.Logger.Logger.WriteLog(string.Format(@" GetTransactionStatus:SeqNo {0} NozzleId{1}
+         //  sn {2} "));
             ExecuteResult<TransactionStatusDto> result = new ExecuteResult<TransactionStatusDto>();
-            string _startTime = DateTime.Now.AddHours(-3).ToString("yyyy-MM-dd");
+            string _startTime = DateTime.Now.AddHours(-1).ToString("yyyy-MM-dd HH:mm:ss");
             string where = string.Empty;
             if (!string.IsNullOrEmpty(FuelItemFdcReleaseTokenAttribute))
             {
@@ -333,6 +335,18 @@ WHERE
             {
                 where += string.Format(@" and ptli.""FuelItemOriginalGrossAmount""  = '{0}'", FuelItemOriginalGrossAmount);
             }
+            if (FuelItemTransactionEndTime != null)
+            {
+                string sdate = FuelItemTransactionEndTime.Value.AddSeconds(1).ToString("yyyy-MM-dd HH:mm:ss");
+                string edate = FuelItemTransactionEndTime.Value.AddSeconds(-2).ToString("yyyy-MM-dd HH:mm:ss");
+                where += string.Format(@" and ptli.""FuelItemTransactionEndTime"" >= '{0}' and ptli.""FuelItemTransactionEndTime"" <= '{1}'"
+, edate, sdate);
+            }
+            else
+            {
+                where += string.Format(@" and a.""CreatedDateTime"" >= '{0}'", _startTime);
+            }
+
             try
             {
                 var SiteDevices = _AuthContext.GetRepository<SiteDevices>().GetAll()
@@ -343,8 +357,9 @@ WHERE
 from ""PosTrxes"" as a join ""PosTrxLineItems"" ptli on a.""Id"" = ptli.""PosTrxId"" 
 left join ""PosTrxMops"" ptm ON  a
 .""Id"" = ptm.""PosTrxId"" where ptli.""FuelItemFdcTransactionSeqNo""='{0}'
-and a.""TargetBusinessUnitId""='{1}'  and ptli.""FuelItemSoldOnPumpNozzleId"" = '{2}'  and a.""CreatedDateTime"" >= '{3}' and ptli.""Voided"" = false  {4}"
-, SeqNo, buid, NozzleId, _startTime, where))
+and a.""TargetBusinessUnitId""='{1}'  and ptli.""FuelItemSoldOnPumpNozzleId"" = '{2}'   and ptli.""Voided"" = false 
+and ptli.""FuelItemOriginalGrossAmount""  > 0 {4}"
+, SeqNo, buid, NozzleId, _startTime, where))//and ptli.""Voided"" = false 
                 .GroupBy(_ => new { _.ResultCode, _.ResultMessage })
                   .Select(_ => new TransactionStatusDto
                   {

+ 3 - 1
src/MS.UnitOfWork/UnitOfWork/IUnitOfWork.cs

@@ -1,6 +1,7 @@
 using Microsoft.EntityFrameworkCore;
 using Microsoft.EntityFrameworkCore.Storage;
 using System;
+using System.Collections.Generic;
 using System.Linq;
 using System.Threading.Tasks;
 
@@ -57,6 +58,7 @@ namespace MS.UnitOfWork
         /// <param name="sql"></param>
         /// <param name="parameters">参数</param>
         /// <returns></returns>
-        IQueryable<TEntity> FromSql<TEntity>(string sql, params object[] parameters) where TEntity : class;
+         IQueryable<TEntity> FromSql<TEntity>(string sql, params object[] parameters) where TEntity : class;
+        Task<List<dynamic>> ExecuteComplexQueryAsync(string sql, params object[] parameters);
     }
 }

+ 9 - 0
src/MS.UnitOfWork/UnitOfWork/UnitOfWork.cs

@@ -76,6 +76,15 @@ namespace MS.UnitOfWork
         /// <returns></returns>
         public IQueryable<TEntity> FromSql<TEntity>(string sql, params object[] parameters) where TEntity : class => _context.Set<TEntity>().FromSqlRaw(sql, parameters);
 
+        public async Task<List<dynamic>> ExecuteComplexQueryAsync(string sql, params object[] parameters)
+        {
+            var result = await _context.Set<dynamic>()
+                                        .FromSqlRaw(sql, parameters)
+
+                                        .ToListAsync();
+
+            return result;
+        }
         /// <summary>
         /// DbContext提交修改
         /// </summary>

+ 11 - 0
src/MS.WebApi/Controllers/AccountController.cs

@@ -5,6 +5,7 @@ using MS.Component.Jwt.UserClaim;
 using MS.Models.ViewModel;
 using MS.Services;
 using MS.WebCore.Core;
+using System;
 using System.Threading.Tasks;
 
 namespace MS.WebApi.Controllers
@@ -44,5 +45,15 @@ namespace MS.WebApi.Controllers
         
             return await _accountService.syncFromVersion(versionNo, excludingCurrentBu, specificHeader);
         }
+        [Route("AddEmployeeCardMonthlySummaryToRedisAsync")]
+        [HttpPost]
+        [AllowAnonymous]
+        public async Task<bool> AddEmployeeCardMonthlySummaryToRedisAsync(string buid, string date)
+        {
+            Guid ssss = Guid.NewGuid();
+
+             await _accountService.AddEmployeeCardMonthlySummaryToRedisAsync(buid,date);
+            return true;
+        }
     }
 }

+ 3 - 2
src/MS.WebApi/Controllers/TransactionStatusController.cs

@@ -4,6 +4,7 @@ using Microsoft.AspNetCore.Mvc;
 using MS.Services;
 using MS.Services.PosTrxService;
 using MS.WebCore.Core;
+using System;
 using System.Threading.Tasks;
 
 namespace MS.WebApi.Controllers
@@ -20,13 +21,13 @@ namespace MS.WebApi.Controllers
         [Route("GetTransactionStatus")]
         [EnableCors("AllowSpecificOrigin")]
         [HttpPost]
-        public async Task<ExecuteResult> GetTransactionStatus(string SeqNo, string NozzleId, string sn,string token,string FuelItemFdcReleaseTokenAttribute = "",string FuelItemOriginalGrossAmount = "")
+        public async Task<ExecuteResult> GetTransactionStatus(string SeqNo, string NozzleId, string sn,string token,string FuelItemFdcReleaseTokenAttribute = "",string FuelItemOriginalGrossAmount = "",DateTime? FuelItemTransactionEndTime = null)
         {
             if (token != "123456789")
             {
                 return null;
             }
-            return await _PosTrxService.GetTransactionStatus( SeqNo,  NozzleId,  sn, FuelItemFdcReleaseTokenAttribute, FuelItemOriginalGrossAmount);
+            return await _PosTrxService.GetTransactionStatus( SeqNo,  NozzleId,  sn, FuelItemFdcReleaseTokenAttribute, FuelItemOriginalGrossAmount, FuelItemTransactionEndTime);
         }
     }
 }

+ 10 - 10
src/MS.WebApi/appsettings.json

@@ -1,17 +1,17 @@
 {
   "ConectionStrings": {
     //"MSDbContext": "Server=pgm-wz9hvfon1ng52i39194070.pg.rds.aliyuncs.com;database=TransactionServiceDatabase;port=5432;User Id=postgres;Password=Postgres3141"
-    //"MSDbContext": "Server=47.101.220.106;database=TransactionServiceDatabase;port=5432;User Id=postgres;Password=Postgres3141",
-    //"AccountingService": "Server=47.101.220.106;database=AccountingService_Sun_0230AMMon03180930AM;port=5432;User Id=postgres;Password=Postgres3141",
-    //"AuthServiceDatabase": "Server=47.101.220.106;database=AuthServiceDatabase_NewThu04130311PM;port=5432;User Id=postgres;Password=Postgres3141",
-    //"StockdbDatabase": "Server=47.101.220.106;user=root;database=stockdb;port=3307;password=Wayne@123;SslMode=None",
-    //"WaynedbDatabase": "Server=47.101.220.106;user=root;database=waynedb;port=3307;password=Wayne@123;SslMode=None",
+    "MSDbContext": "Server=47.101.220.106;database=TransactionServiceDatabase;port=5432;User Id=postgres;Password=Postgres3141",
+    "AccountingService": "Server=47.101.220.106;database=AccountingService_Sun_0230AMMon03180930AM;port=5432;User Id=postgres;Password=Postgres3141",
+    "AuthServiceDatabase": "Server=47.101.220.106;database=AuthServiceDatabase_NewThu04130311PM;port=5432;User Id=postgres;Password=Postgres3141",
+    "StockdbDatabase": "Server=47.101.220.106;user=root;database=stockdb;port=3307;password=Wayne@123;SslMode=None",
+    "WaynedbDatabase": "Server=47.101.220.106;user=root;database=waynedb;port=3307;password=Wayne@123;SslMode=None",
 
-    "MSDbContext": "Server=pgm-wz9hvfon1ng52i39194070.pg.rds.aliyuncs.com;database=TransactionServiceDatabase;port=5432;User Id=postgres;Password=Postgres3141",
-    "AccountingService": "Server=pgm-wz9hvfon1ng52i39194070.pg.rds.aliyuncs.com;database=AccountingService;port=5432;User Id=postgres;Password=Postgres3141",
-    "AuthServiceDatabase": "Server=pgm-wz9hvfon1ng52i39194070.pg.rds.aliyuncs.com;database=AuthServiceDatabase;port=5432;User Id=postgres;Password=Postgres3141",
-    "StockdbDatabase": "Server=localhost;user=root;database=stockdb;port=3307;password=Wayne@123;SslMode=None",
-    "WaynedbDatabase": "Server=localhost;user=root;database=waynedb;port=3307;password=Wayne@123;SslMode=None"
+    //"MSDbContext": "Server=pgm-wz9hvfon1ng52i39194070.pg.rds.aliyuncs.com;database=TransactionServiceDatabase;port=5432;User Id=postgres;Password=Postgres3141",
+    //"AccountingService": "Server=pgm-wz9hvfon1ng52i39194070.pg.rds.aliyuncs.com;database=AccountingService;port=5432;User Id=postgres;Password=Postgres3141",
+    //"AuthServiceDatabase": "Server=pgm-wz9hvfon1ng52i39194070.pg.rds.aliyuncs.com;database=AuthServiceDatabase;port=5432;User Id=postgres;Password=Postgres3141",
+    //"StockdbDatabase": "Server=localhost;user=root;database=stockdb;port=3307;password=Wayne@123;SslMode=None",
+    //"WaynedbDatabase": "Server=localhost;user=root;database=waynedb;port=3307;password=Wayne@123;SslMode=None"
 
     //"MSDbContext": "Server=47.97.120.160;database=TransactionServiceDatabase;port=5432;User Id=postgres;Password=Postgres3141",
     //"AccountingService": "Server=47.97.120.160;database=AccountingService;port=5432;User Id=postgres;Password=Postgres3141",

+ 25 - 0
src/MS.WebCore/Core/CustomContractResolver.cs

@@ -0,0 +1,25 @@
+using Newtonsoft.Json;
+using Newtonsoft.Json.Serialization;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace MS.WebCore.Core
+{
+    public class CustomContractResolver : DefaultContractResolver
+    {
+        private readonly HashSet<string> _propertiesToSerialize;
+
+        public CustomContractResolver(IEnumerable<string> propertiesToSerialize)
+        {
+            _propertiesToSerialize = new HashSet<string>(propertiesToSerialize);
+        }
+
+        protected override IList<JsonProperty> CreateProperties(Type type, MemberSerialization memberSerialization)
+        {
+            IList<JsonProperty> properties = base.CreateProperties(type, memberSerialization);
+            return properties.Where(p => _propertiesToSerialize.Contains(p.PropertyName)).ToList();
+        }
+    }
+}

+ 154 - 0
src/MS.WebCore/Core/RedisExample.cs

@@ -0,0 +1,154 @@
+using Microsoft.AspNetCore.Mvc.Formatters;
+using StackExchange.Redis;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace MS.WebCore.Core
+{
+    public class RedisExample
+    {
+        private static ConnectionMultiplexer redisConnection;
+        private static IDatabase redisDb;
+
+        public RedisExample()
+        {
+            redisConnection = ConnectionMultiplexer.Connect("localhost");
+            redisDb = redisConnection.GetDatabase();
+        }
+
+        public void SetData(string key, string value)
+        {
+            redisDb.StringSet(key, value);
+        }
+
+        public string GetData(string key)
+        {
+            return redisDb.StringGet(key);
+        }
+
+        public void DeleteData(string key, string field)
+        {
+            redisDb.HashDelete(key, field);
+            //redisDb.KeyDelete(key);
+        }
+        public  bool HashKeyExists(string hashKey, string fieldKey)
+        {
+            return redisDb.HashExists(hashKey, fieldKey);
+        }
+        public void SetDataWithTime(string key, string value, DateTime time)
+        {
+            redisDb.SortedSetAdd("mySortedSet", value, time.Ticks);
+        }
+        public string GetValueByTime(DateTime time)
+        {
+            var result = redisDb.SortedSetRangeByScore("mySortedSet", time.Ticks, time.Ticks);
+            return result.FirstOrDefault();
+        }
+
+        public void AddToHash(string key, string field, string value)
+        {
+            RedisType keyType = redisDb.KeyType(key);
+            if (keyType != RedisType.None && keyType != RedisType.Hash)
+            {
+                // throw new Exception("Key is not of type Hash");
+            }
+
+            redisDb.HashSet(key, field, value);
+        }
+
+
+        //public List<string> GetListValues()
+        //{
+        //    var values = redisDb.ListRange("myList");
+
+        //    List<string> result = new List<string>();
+        //    foreach (var value in values)
+        //    {
+        //        result.Add(value.ToString());
+        //    }
+
+        //    return result;
+        //}
+
+        public List<string> GetValuesByUUID(string uuid)
+        {
+            var values = redisDb.ListRange("myList");
+            List<string> result = new List<string>();
+
+            foreach (var value in values)
+            {
+                var parts = value.ToString().Split(new[] { ' ' }, 2);
+                var storedUUID = parts[0];
+
+                if (storedUUID == uuid)
+                {
+                    result.Add(value.ToString());
+                }
+            }
+
+            return result;
+        }
+
+
+        public List<KeyValuePair<string, string>> GetListValues()
+        {
+            var values = redisDb.HashGetAll("myList");
+
+            List<KeyValuePair<string, string>> result = new List<KeyValuePair<string, string>>();
+            foreach (var value in values)
+            {
+                result.Add(new KeyValuePair<string, string>(value.Name, value.Value));
+            }
+
+            return result;
+        }
+
+        public List<KeyValuePair<string, string>> GetValuesByKey(string key)
+        {
+            var values = redisDb.HashGetAll("myList");
+            List<KeyValuePair<string, string>> result = new List<KeyValuePair<string, string>>();
+
+            foreach (var value in values)
+            {
+                if (value.Name == key)
+                {
+                    result.Add(new KeyValuePair<string, string>(value.Name, value.Value));
+                }
+            }
+
+            return result;
+        }
+        public void AddToList(string key, string value)
+        {
+            RedisType keyType = redisDb.KeyType(key);
+            if (keyType != RedisType.None && keyType != RedisType.Hash)
+            {
+                //
+                //throw new Exception("Key is not of type Hash");
+            }
+
+            redisDb.HashSet(key, value, value);
+        }
+
+        public List<KeyValuePair<string, string>> GetListValues(string key)
+        {
+            RedisType keyType = redisDb.KeyType(key);
+            if (keyType != RedisType.Hash)
+            {
+                // throw new Exception("Key is not of type Hash");
+            }
+
+            var values = redisDb.HashGetAll(key);
+
+            List<KeyValuePair<string, string>> result = new List<KeyValuePair<string, string>>();
+            foreach (var value in values)
+            {
+                result.Add(new KeyValuePair<string, string>(value.Name, value.Value));
+            }
+
+            return result;
+        }
+    }
+}

+ 1 - 0
src/MS.WebCore/MS.WebCore.csproj

@@ -6,6 +6,7 @@
 
   <ItemGroup>
     <PackageReference Include="NLog.Web.AspNetCore" Version="4.9.0" />
+    <PackageReference Include="StackExchange.Redis" Version="2.7.33" />
   </ItemGroup>
 
   <ItemGroup>

+ 105 - 0
src/QuartzSettings/logs/logs.txt

@@ -1158,3 +1158,108 @@
 {"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-07T18:33:20.8864871+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
 {"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-08T01:34:21.2568632+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
 {"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-08T01:54:00.6985985+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-08T09:49:28.528552+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-08T12:13:46.0421079+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-08T12:15:19.6413968+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-08T12:21:15.4109777+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-08T12:23:16.1356175+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-08T17:16:15.1076366+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-10T13:59:18.0675332+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-10T15:53:01.721249+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-10T15:55:29.964602+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-11T16:55:15.8540719+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-24T09:56:19.5896894+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-24T09:59:03.563718+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-24T10:12:00.4911001+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-24T10:14:04.2336185+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-24T10:16:08.0001193+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-24T10:47:41.314171+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-24T10:50:51.5867182+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-24T10:52:38.0716516+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-24T10:54:53.5442423+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-24T10:59:04.1558596+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-24T11:00:30.6959967+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-24T11:01:36.0739722+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-24T11:04:32.6260312+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-24T11:05:58.0228274+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-24T11:10:05.8475272+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-24T11:14:18.2313011+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-24T11:15:23.7790899+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-24T11:17:34.2556859+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-24T11:30:16.18417+08:00","EndDate":"2024-04-24T11:32:46.5248479+08:00","Msg":"A task was canceled.","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-24T11:30:31.1998109+08:00","EndDate":"2024-04-24T11:33:01.5288333+08:00","Msg":"A task was canceled.","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-24T11:38:20.6139478+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-24T11:41:54.1551191+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-24T11:48:02.7623424+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-24T11:50:14.0993711+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-24T11:50:56.6536312+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-24T11:51:27.7188153+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-24T11:53:01.3630222+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-24T11:53:44.0382794+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-24T11:55:01.454612+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-24T11:56:26.5940949+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-24T11:58:51.5824386+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-24T11:59:15.7345734+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-24T12:00:16.1750965+08:00","EndDate":"2024-04-24T12:02:46.4673881+08:00","Msg":"A task was canceled.","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-24T12:00:31.2076976+08:00","EndDate":"2024-04-24T12:03:01.4808045+08:00","Msg":"A task was canceled.","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-24T12:30:16.0694121+08:00","EndDate":"2024-04-24T12:32:46.4413883+08:00","Msg":"A task was canceled.","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-24T12:30:31.0897433+08:00","EndDate":"2024-04-24T12:33:01.4581905+08:00","Msg":"A task was canceled.","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-24T13:38:09.4519858+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-24T14:07:24.4960343+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-24T14:08:36.6371188+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-24T14:09:04.9319817+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-24T14:09:56.6439672+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-24T14:10:28.564315+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-24T14:12:44.2832289+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-24T14:15:32.9594863+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-24T14:18:42.8396871+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-24T14:31:13.5966303+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-24T14:32:59.7324992+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-24T14:33:43.2762742+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-24T14:36:31.4485581+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-24T14:38:54.1009085+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-24T14:39:46.8812123+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-24T15:54:03.8045999+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-24T16:24:34.2746808+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-24T16:28:36.4734238+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-24T16:37:20.2080011+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-24T17:00:16.09748+08:00","EndDate":"2024-04-24T17:02:46.4197044+08:00","Msg":"A task was canceled.","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-24T17:00:31.1140811+08:00","EndDate":"2024-04-24T17:03:01.4386853+08:00","Msg":"A task was canceled.","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-25T09:27:08.4886307+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-25T09:29:43.682243+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-25T09:39:06.0332256+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-25T10:00:31.147809+08:00","EndDate":"2024-04-25T10:03:01.5694755+08:00","Msg":"A task was canceled.","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-25T10:00:16.0998421+08:00","EndDate":"2024-04-25T10:03:16.5782701+08:00","Msg":"A task was canceled.","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-25T10:30:16.0990622+08:00","EndDate":"2024-04-25T10:32:46.4098135+08:00","Msg":"A task was canceled.","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-25T10:30:31.111221+08:00","EndDate":"2024-04-25T10:33:01.4237497+08:00","Msg":"A task was canceled.","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-25T11:00:16.0990251+08:00","EndDate":"2024-04-25T11:02:46.4331491+08:00","Msg":"A task was canceled.","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-25T11:00:31.1209263+08:00","EndDate":"2024-04-25T11:03:01.4548679+08:00","Msg":"A task was canceled.","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-25T11:30:16.0722855+08:00","EndDate":"2024-04-25T11:32:46.4553163+08:00","Msg":"A task was canceled.","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-25T11:30:31.1156876+08:00","EndDate":"2024-04-25T11:33:01.4948562+08:00","Msg":"A task was canceled.","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-25T12:00:16.1226034+08:00","EndDate":"2024-04-25T12:02:46.4678552+08:00","Msg":"A task was canceled.","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-25T12:00:31.1389067+08:00","EndDate":"2024-04-25T12:03:01.5212085+08:00","Msg":"A task was canceled.","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-25T12:30:16.0846173+08:00","EndDate":"2024-04-25T12:32:46.3935218+08:00","Msg":"A task was canceled.","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-25T12:30:31.1114429+08:00","EndDate":"2024-04-25T12:33:01.4074591+08:00","Msg":"A task was canceled.","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-25T13:00:16.0690947+08:00","EndDate":"2024-04-25T13:02:46.3801848+08:00","Msg":"A task was canceled.","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-25T13:00:31.0853701+08:00","EndDate":"2024-04-25T13:03:02.4384849+08:00","Msg":"A task was canceled.","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-25T13:30:16.0766048+08:00","EndDate":"2024-04-25T13:32:46.5790741+08:00","Msg":"A task was canceled.","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-25T13:30:31.1378481+08:00","EndDate":"2024-04-25T13:33:01.6234542+08:00","Msg":"A task was canceled.","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-25T13:36:56.0348335+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-25T14:07:05.4387868+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-25T15:13:26.9089416+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-25T15:15:29.4151471+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-25T15:16:10.3130719+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-25T15:18:17.9140243+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-25T15:19:27.3639525+08:00","EndDate":null,"Msg":"任务初始化启动成功:6","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-25T15:30:16.1085301+08:00","EndDate":"2024-04-25T15:32:46.5332563+08:00","Msg":"A task was canceled.","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-25T15:30:31.1887307+08:00","EndDate":"2024-04-25T15:33:01.54737+08:00","Msg":"A task was canceled.","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-25T16:00:16.0676514+08:00","EndDate":"2024-04-25T16:02:46.5299266+08:00","Msg":"A task was canceled.","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-25T16:00:31.1101756+08:00","EndDate":"2024-04-25T16:03:01.5530188+08:00","Msg":"A task was canceled.","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-25T16:30:16.0601284+08:00","EndDate":"2024-04-25T16:32:46.4943342+08:00","Msg":"A task was canceled.","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-25T16:30:31.1068844+08:00","EndDate":"2024-04-25T16:33:01.52107+08:00","Msg":"A task was canceled.","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-25T17:00:16.0599753+08:00","EndDate":"2024-04-25T17:02:46.444807+08:00","Msg":"A task was canceled.","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-25T17:00:31.1459652+08:00","EndDate":"2024-04-25T17:03:01.469411+08:00","Msg":"A task was canceled.","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-25T17:30:16.0525019+08:00","EndDate":"2024-04-25T17:32:46.3938252+08:00","Msg":"A task was canceled.","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-25T17:30:31.0657954+08:00","EndDate":"2024-04-25T17:33:01.4126195+08:00","Msg":"A task was canceled.","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-25T18:00:16.0759513+08:00","EndDate":"2024-04-25T18:02:46.3561365+08:00","Msg":"A task was canceled.","id":0,"timeflag":null,"changetime":null}
+{"TaskName":"测试","GroupName":"测试","BeginDate":"2024-04-25T18:00:31.1007735+08:00","EndDate":"2024-04-25T18:03:01.3699544+08:00","Msg":"A task was canceled.","id":0,"timeflag":null,"changetime":null}