From 557c2711a3e103ebc3d0492344eca9730d5e92b2 Mon Sep 17 00:00:00 2001
From: 移动系统liao <liaoxujun@qq.com>
Date: 星期一, 17 二月 2025 10:47:47 +0800
Subject: [PATCH] 增加司机配送单超时处理任务,防止一直不停手机定位信息,

---
 CoreCms.Net.Services/Distribution/CoreCmsDistributionServices.cs |  161 ++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 158 insertions(+), 3 deletions(-)

diff --git a/CoreCms.Net.Services/Distribution/CoreCmsDistributionServices.cs b/CoreCms.Net.Services/Distribution/CoreCmsDistributionServices.cs
index 4d4ecc8..004e030 100644
--- a/CoreCms.Net.Services/Distribution/CoreCmsDistributionServices.cs
+++ b/CoreCms.Net.Services/Distribution/CoreCmsDistributionServices.cs
@@ -17,8 +17,10 @@
 using CoreCms.Net.IRepository;
 using CoreCms.Net.IRepository.UnitOfWork;
 using CoreCms.Net.IServices;
+using CoreCms.Net.IServices.baifenbingfa;
 using CoreCms.Net.Loging;
 using CoreCms.Net.Model.Entities;
+using CoreCms.Net.Model.Entities.baifenbingfa.apply;
 using CoreCms.Net.Model.Entities.Distribution;
 using CoreCms.Net.Model.ViewModels.Basics;
 using CoreCms.Net.Model.ViewModels.DTO.Distribution;
@@ -52,8 +54,13 @@
         private readonly ICoreCmsSettingServices _settingServices;
         private readonly IUnitOfWork _unitOfWork;
         private readonly ICoreCmsUserBalanceServices _userBalanceServices;
+        private readonly ICoreCmsUserServices _coreCmsUserServices;
+        private readonly IBfbfComAPIService _bfbfComAPIService;
+ 
+     
 
-        public CoreCmsDistributionServices(IUnitOfWork unitOfWork, ICoreCmsDistributionRepository dal, ICoreCmsDistributionOrderRepository distributionOrderRepository, ICoreCmsUserRepository userRepository, ICoreCmsGoodsRepository goodsRepository, ICoreCmsUserGradeRepository userGradeRepository, ICoreCmsSettingServices settingServices, ICoreCmsOrderRepository orderRepository, ICoreCmsDistributionGradeRepository distributionGradeRepository, ICoreCmsDistributionResultRepository distributionResultRepository, ICoreCmsDistributionConditionServices coreCmsDistributionConditionServices, ICoreCmsUserBalanceServices userBalanceServices) 
+        public CoreCmsDistributionServices(IBfbfComAPIService bfbfComAPIService, IUnitOfWork unitOfWork, ICoreCmsDistributionRepository dal, ICoreCmsDistributionOrderRepository distributionOrderRepository, ICoreCmsUserRepository userRepository, ICoreCmsGoodsRepository goodsRepository, ICoreCmsUserGradeRepository userGradeRepository, ICoreCmsSettingServices settingServices, ICoreCmsOrderRepository orderRepository, ICoreCmsDistributionGradeRepository distributionGradeRepository, ICoreCmsDistributionResultRepository distributionResultRepository, ICoreCmsDistributionConditionServices coreCmsDistributionConditionServices, ICoreCmsUserBalanceServices userBalanceServices
+              , ICoreCmsUserServices coreCmsUserServices) 
         {
             this._dal = dal;
             _distributionOrderRepository = distributionOrderRepository;
@@ -68,6 +75,10 @@
             base.BaseDal = dal;
             _unitOfWork = unitOfWork;
             _userBalanceServices = userBalanceServices;
+            _coreCmsUserServices = coreCmsUserServices;
+
+
+            _bfbfComAPIService = bfbfComAPIService;
           
 
         }
@@ -92,6 +103,20 @@
                 info.TotalSettlementAmount = await _distributionOrderRepository.GetSumAsync(
                     p => p.isSettlement != (int)GlobalEnumVars.DistributionOrderSettlementStatus.SettlementCancel && p.userId == userId,
                     p => p.amount);
+                var lisdata = await _unitOfWork.GetDbClient().Queryable<CoreCmsDistributionOrder>().Where(x=>x.userId == userId&&x.isSettlement== (int)GlobalEnumVars.DistributionOrderSettlementStatus.SettlementNo)
+                    .Select(x=>new CoreCmsDistributionOrder
+                    {
+                         amount = x.amount,
+                        OderState= SqlFunc.Subqueryable<CoreCmsOrder>().Where(c=>c.orderId==x.orderId).Select(c=>c.confirmStatus),
+
+                    }).WithCache(10).ToListAsync();
+                //鍙閲戦
+                info.DistributionKeLingTotals = lisdata.Where(x=>x.OderState== (int)GlobalEnumVars.OrderConfirmStatus.ConfirmReceipt
+                || x.OderState == (int)GlobalEnumVars.OrderShipStatus.Yes).Sum(x=>x.amount);
+
+                //搴旈閲戦
+                info.DistributionYingLingTotals = lisdata.Where(x => x.OderState == (int)GlobalEnumVars.OrderConfirmStatus.ReceiptNotConfirmed
+                || x.OderState == (int)GlobalEnumVars.OrderShipStatus.Yes).Sum(x => x.amount); ;
                 //宸茬粨绠楅噾棰�
                 info.SettlementAmount = await _distributionOrderRepository.GetSumAsync(
                     p => p.isSettlement == (int)GlobalEnumVars.DistributionOrderSettlementStatus.SettlementYes && p.userId == userId,
@@ -413,6 +438,12 @@
         public async Task<WebApiCallBack> GetGradeAndCommission(int userId)
         {
             var jm = new WebApiCallBack();
+            //鐧惧垎鍏垫硶鍒ゆ柇鏄惁鏄粡閿�鍟�
+             if(!await _bfbfComAPIService.IsDictionary(userId))
+            {
+                jm.msg = "涓嶆槸缁忛攢鍟嗙殑锛屼笉杩斿埄";
+                return jm;
+            }
 
             var info = await _dal.QueryByClauseAsync(p => p.userId == userId);
             if (info == null)
@@ -713,14 +744,113 @@
             return true;
         }
 
-      
+
+
+        public async Task<bool> SettledAllAchievement()
+        {
+           
+
+            //鏌ヨ鐢ㄦ埛  
+            var coreCmsUsers = await _userRepository.QueryListByClauseAsync(x => x.isDelete == false && x.status == 1);
+
+            foreach(var coreCmsUser in coreCmsUsers)
+            {  //闈炰緵搴斿晢锛屽仠姝�
+                var da = await _dal.GetCountAsync(x => x.userId == coreCmsUser.id && x.verifyStatus == (int)GlobalEnumVars.DistributionVerifyStatus.VerifyYes, isDataCache: true, cacheTimes: 1);
+                if (da == 0)
+                    continue;
+
+                //鏌ヨ鏄惁宸茬粡璁$畻杩囦簡
+                DateTime StartTime = new DateTime(DateTime.Now.AddYears(-1).Year, 1, 1);
+                DateTime endTime = new DateTime(DateTime.Now.Year, 1, 1).AddDays(-1);
+                var total = _unitOfWork.GetDbClient().Queryable<DistributionAchievement>().Where(x =>
+          x.isdelete == false
+          && x.userID == coreCmsUser.id
+          && x.startTime == StartTime
+          && x.endTime == endTime
+          ).ToList();
+                if (total != null && total.Count > 0)
+                    continue;
+
+                var att = await AchievementTotalAll(coreCmsUser.id);
+                if (att.Item1 > 0)
+                {
+                    DistributionAchievement oder = new DistributionAchievement
+                    {
+                        achievementTotals = att.Item1,
+                        achievementBonus = await AchievementBonuscount(att.Item1),
+                        createBy = "绯荤粺缁撶畻",
+                        createTime = DateTime.Now,
+                        startTime = att.Item2,
+                        endTime = att.Item3,
+                        userID = coreCmsUser.id
+
+                    };
+                    //寤虹珛缁撶畻鍗�
+                    var id = await _unitOfWork.GetDbClient().Insertable(oder).ExecuteCommandIdentityIntoEntityAsync();
+                    if (oder.achievementBonus > 0)
+                    {
+                        var jm = await _coreCmsUserServices.UpdateBalance(coreCmsUser.id, oder.achievementBonus, "缁忛攢鍟嗘帹骞胯垂鐢ㄥ啓鍏ヤ綑棰�");
+                        if (jm.code != 0)
+                        {
+                            NLogUtil.WriteAll(NLog.LogLevel.Fatal, LogType.DataBase, "缁忛攢鍟嗘帹骞胯垂鐢ㄥ啓鍏ヤ綑棰濆け璐�", jm.msg);
+                            return false;
+                        }
+                    }
+                   
+                    return true;
+                }
+
+            }
+
+
+          
+            return true;
+        }
+
+
+
+
+        public async Task<(decimal, DateTime?, DateTime?)> AchievementTotalAll(int UserId)
+        {
+
+
+            DateTime StartTime = new DateTime(DateTime.Now.AddYears(-1).Year, 1, 1);
+            DateTime endTime = new DateTime(DateTime.Now.Year, 1, 1);
+
+
+            var total = await _unitOfWork.GetDbClient().Queryable<CoreCmsOrder>().Where(x => x.status == (int)GlobalEnumVars.OrderStatus.Complete
+            && (x.payStatus != (int)GlobalEnumVars.OrderPayStatus.No || x.payStatus != (int)GlobalEnumVars.OrderPayStatus.Refunded)
+            && x.isdel == false
+            && x.userId == UserId
+            && x.updateTime > StartTime
+            && x.updateTime < endTime
+            ).SumAsync(x => x.orderAmount);
+
+            return (total, StartTime, endTime.AddDays(-1));
+        }
+
+
+        public async Task<decimal> AchievementBonuscount(decimal AttributeTotal)
+        {
+
+            var allConfigs = await _settingServices.GetConfigDictionaries();
+            var tuiGuangFeiYong = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.DictionaryTuiGuangFeiYong).ObjectToInt(0);
+            var yeJiMenKan = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.DictionaryYeJiMenKan).ObjectToInt(0);
+            if(AttributeTotal <= yeJiMenKan)
+            {
+                return 0;
+            }
+            return (AttributeTotal - (decimal)yeJiMenKan) * (decimal)tuiGuangFeiYong / 100;
+        }
+
+
         public async Task<bool> CreateDistributionAchievementOrder(CreateDAOrderInParam Parma)
         {
            //闈炰緵搴斿晢锛屽仠姝�
          var da=  await  _dal.GetCountAsync(x=>x.userId== Parma.UserID && x.verifyStatus== (int)GlobalEnumVars.DistributionVerifyStatus.VerifyYes,isDataCache:true,cacheTimes:1);
             if (da == 0)
                 return true;
-            var oder = new DistributionAchievementOrder
+            DistributionAchievementOrder oder = new DistributionAchievementOrder
             {
                 achievementTotal = Parma.Money,
                 createBy = "缁忛攢鍟嗕笟缁╁啓鍏�",
@@ -737,5 +867,30 @@
           return   await  _unitOfWork.GetDbClient().Updateable(oder).ExecuteCommandAsync()>0;
              
         }
+
+        /// <summary>
+        ///     鑾峰彇缁忛攢鍟嗘帹骞胯垂
+        /// </summary>
+        /// <returns></returns>
+        public  List<DistributionRankingDTO> QueryAchievement(int UserId)
+        {
+            var totals = _unitOfWork.GetDbClient().Queryable<DistributionAchievement>().Where(x =>
+        x.isdelete == false
+        && x.userID == UserId
+        ).OrderByDescending(x=>x.startTime).ToList();
+
+            var distributionRankingDTOs = new List<DistributionRankingDTO>();
+            foreach(var distributionAchievement in totals)
+            {
+                var distributionRankingDTO = new DistributionRankingDTO();
+                distributionRankingDTO.startTime = distributionAchievement.startTime.HasValue ? distributionAchievement.startTime.Value.ToString("yyyy-MM-dd") : "";
+                distributionRankingDTO.endTime = distributionAchievement.endTime.HasValue ? distributionAchievement.endTime.Value.ToString("yyyy-MM-dd") : "";
+                distributionRankingDTO.achievementTotals = distributionAchievement.achievementTotals.ToString("F2");
+                distributionRankingDTO.achievementBonus = distributionAchievement.achievementBonus.ToString("F2");
+                distributionRankingDTOs.Add(distributionRankingDTO);
+            }
+
+            return distributionRankingDTOs;
+        }
     }
 }

--
Gitblit v1.9.1