From 05d32271f646149609d8b42016e11cf95d8d5a84 Mon Sep 17 00:00:00 2001
From: liaoxujun@qq.com <liaoxujun@qq.com>
Date: 星期三, 10 四月 2024 11:18:05 +0800
Subject: [PATCH]  修改供应商价格显示

---
 CoreCms.Net.Services/Distribution/CoreCmsDistributionServices.cs |  155 +++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 137 insertions(+), 18 deletions(-)

diff --git a/CoreCms.Net.Services/Distribution/CoreCmsDistributionServices.cs b/CoreCms.Net.Services/Distribution/CoreCmsDistributionServices.cs
index b1c1e9b..9d0198c 100644
--- a/CoreCms.Net.Services/Distribution/CoreCmsDistributionServices.cs
+++ b/CoreCms.Net.Services/Distribution/CoreCmsDistributionServices.cs
@@ -1,10 +1,10 @@
 /***********************************************************************
- *            Project: CoreCms
- *        ProjectName: 鏍稿績鍐呭绠$悊绯荤粺                                
- *                Web: https://www.corecms.net                      
- *             Author: 澶х伆鐏�                                          
- *              Email: jianweie@163.com                                
- *         CreateTime: 2021/1/31 21:45:10
+ *            Project: baifenBinfa
+ *        ProjectName: 鐧惧垎鍏垫硶绠$悊绯荤粺                               
+ *                Web: http://chuanyin.com                     
+ *             Author:                                        
+ *              Email:                               
+ *         CreateTime: 202403/02   
  *        Description: 鏆傛棤
  ***********************************************************************/
 
@@ -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.Distribution;
 using CoreCms.Net.Model.ViewModels.Basics;
 using CoreCms.Net.Model.ViewModels.DTO.Distribution;
 using CoreCms.Net.Model.ViewModels.UI;
@@ -27,13 +29,15 @@
 using Newtonsoft.Json;
 using Newtonsoft.Json.Linq;
 using NPOI.SS.Formula.Functions;
+using Org.BouncyCastle.Asn1.Cmp;
 using SqlSugar;
+using static CoreCms.Net.Configuration.GlobalEnumVars;
 
 
 namespace CoreCms.Net.Services
 {
     /// <summary>
-    /// 鍒嗛攢鍟嗚〃 鎺ュ彛瀹炵幇
+    /// 缁忛攢鍟嗚〃 鎺ュ彛瀹炵幇
     /// </summary>
     public class CoreCmsDistributionServices : BaseServices<CoreCmsDistribution>, ICoreCmsDistributionServices
     {
@@ -48,7 +52,10 @@
         private readonly ICoreCmsOrderRepository _orderRepository;
         private readonly ICoreCmsSettingServices _settingServices;
         private readonly IUnitOfWork _unitOfWork;
-        public CoreCmsDistributionServices(IUnitOfWork unitOfWork, ICoreCmsDistributionRepository dal, ICoreCmsDistributionOrderRepository distributionOrderRepository, ICoreCmsUserRepository userRepository, ICoreCmsGoodsRepository goodsRepository, ICoreCmsUserGradeRepository userGradeRepository, ICoreCmsSettingServices settingServices, ICoreCmsOrderRepository orderRepository, ICoreCmsDistributionGradeRepository distributionGradeRepository, ICoreCmsDistributionResultRepository distributionResultRepository, ICoreCmsDistributionConditionServices coreCmsDistributionConditionServices)
+        private readonly ICoreCmsUserBalanceServices _userBalanceServices;
+        private readonly IBfbfComAPIService _bfbfComAPIService;
+
+        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) 
         {
             this._dal = dal;
             _distributionOrderRepository = distributionOrderRepository;
@@ -62,11 +69,15 @@
             _coreCmsDistributionConditionServices = coreCmsDistributionConditionServices;
             base.BaseDal = dal;
             _unitOfWork = unitOfWork;
+            _userBalanceServices = userBalanceServices;
+            _bfbfComAPIService = bfbfComAPIService;
+          
+
         }
 
-        #region 鑾峰彇鍒嗛攢鍟嗕俊鎭�
+        #region 鑾峰彇缁忛攢鍟嗕俊鎭�
         /// <summary>
-        /// 鑾峰彇鍒嗛攢鍟嗕俊鎭�
+        /// 鑾峰彇缁忛攢鍟嗕俊鎭�
         /// </summary>
         /// <param name="userId">鐢ㄦ埛id</param>
         /// <param name="checkStatus">鏄惁妫�鏌ユ弧瓒虫潯浠�</param>
@@ -262,14 +273,14 @@
         }
         #endregion
 
-        #region 妫�鏌ユ槸鍚﹀彲浠ユ垚涓哄垎閿�鍟�
-        //妫�鏌ユ槸鍚﹀彲浠ユ垚涓哄垎閿�鍟�
+        #region 妫�鏌ユ槸鍚﹀彲浠ユ垚涓虹粡閿�鍟�
+        //妫�鏌ユ槸鍚﹀彲浠ユ垚涓虹粡閿�鍟�
         public async Task CheckCondition(Dictionary<string, DictionaryKeyValues> allConfigs, CoreCmsDistribution info, int userId = 0)
         {
             //鍒ゆ柇娑堣垂
             info.ConditionStatus = false;//鏉′欢鐘舵��
             info.ConditionProgress = 0;
-            //鑾峰彇鎴愪负鍒嗛攢鍟嗘潯浠�
+            //鑾峰彇鎴愪负缁忛攢鍟嗘潯浠�
             //var DistributionType = CommonHelper.GetConfigDictionary(allConfigs, GlobalSettingConstVars.DistributionType).ObjectToInt(0);
             var distributionMoney = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.DistributionMoney).ObjectToInt(0);
             //鏀粯閲戦
@@ -305,7 +316,7 @@
                         }
                         else
                         {
-                            info.ConditionMsg = "鎮ㄧ殑鏉′欢鏈弧瓒筹紝璇蜂换鎰忚喘涔颁竴浠跺晢鍝佸嵆鍙垚涓哄垎閿�鍟嗐��";
+                            info.ConditionMsg = "鎮ㄧ殑鏉′欢鏈弧瓒筹紝璇蜂换鎰忚喘涔颁竴浠跺晢鍝佸嵆鍙垚涓虹粡閿�鍟嗐��";
                         }
                     }
                     else if (distributionGoods is > 0 and 3) //璐拱鎸囧畾鍟嗗搧
@@ -324,11 +335,11 @@
                             var goodsInfo = await _goodsRepository.QueryByIdAsync(distributionGoodsId);
                             if (goodsInfo != null)
                             {
-                                info.ConditionMsg = "鎮ㄧ殑鏉′欢鏈弧瓒筹紝璇疯喘涔版寚瀹氱殑銆�" + goodsInfo.name + "銆戝晢鍝佸嵆鍙垚涓哄垎閿�鍟嗐��";
+                                info.ConditionMsg = "鎮ㄧ殑鏉′欢鏈弧瓒筹紝璇疯喘涔版寚瀹氱殑銆�" + goodsInfo.name + "銆戝晢鍝佸嵆鍙垚涓虹粡閿�鍟嗐��";
                             }
                             else
                             {
-                                info.ConditionMsg = "鎮ㄧ殑鏉′欢鏈弧瓒筹紝璇疯喘涔版寚瀹氱殑鍟嗗搧鍗冲彲鎴愪负鍒嗛攢鍟嗐��";
+                                info.ConditionMsg = "鎮ㄧ殑鏉′欢鏈弧瓒筹紝璇疯喘涔版寚瀹氱殑鍟嗗搧鍗冲彲鎴愪负缁忛攢鍟嗐��";
 
                             }
                         }
@@ -405,11 +416,17 @@
         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)
             {
-                jm.msg = "涓嶆槸鍒嗛攢鍟嗙殑锛屼笉杩斿埄";
+                jm.msg = "涓嶆槸缁忛攢鍟嗙殑锛屼笉杩斿埄";
                 return jm;
             }
             var allConfigs = await _settingServices.GetConfigDictionaries();
@@ -477,7 +494,7 @@
             var info = await _dal.QueryByClauseAsync(p => p.userId == userId);
             if (info is { gradeId: > 0 })
             {
-                //鎵句笅鏈夋病鏈夊彲浠ュ崌绾х殑鍒嗛攢鍟嗙瓑绾э紙涓�娆″彧鍗囦竴绾э級
+                //鎵句笅鏈夋病鏈夊彲浠ュ崌绾х殑缁忛攢鍟嗙瓑绾э紙涓�娆″彧鍗囦竴绾э級
                 var grade = await _distributionGradeRepository.QueryByClauseAsync(p => p.sortId > info.gradeId && p.isAutoUpGrade == true, p => p.sortId, OrderByType.Asc, true);
                 if (grade == null) return jm;
                 {
@@ -624,8 +641,110 @@
         {
             return await _dal.QueryPageAsync(predicate, orderByExpression, orderByType, pageIndex, pageSize, blUseNoLock);
         }
+
+
         #endregion
 
+        public async Task<(decimal,DateTime?, DateTime?)> AchievementTotal(int UserId)
+        {
+         var StartTime=   await  _unitOfWork.GetDbClient()
+                .Queryable<DistributionAchievement>()
+                .Where(x=>x.userID == UserId&&x.isdelete==false)
+                .Select(x=>x.endTime)
+                .OrderByDescending(x=>x)
+                .FirstAsync();
+            if (StartTime == null)
+                ///鏈�澶氱粺璁′袱骞村唴鐨勪笟缁�
+                StartTime = DateTime.Now.AddYears(-2);
+            else
+                StartTime= StartTime.Value.AddSeconds(1);
+            var endTime = DateTime.Now;
+            //payStatus = (int)GlobalEnumVars.OrderPayStatus.Refunded,
+            //        status = (int)GlobalEnumVars.OrderStatus.Complete
+            //var result = await _balanceServices.Change(item.userId, (int)GlobalEnumVars.UserBalanceSourceTypes.Distribution,
+            //       item.amount, item.orderId);
+            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.updateTime > StartTime
+            && x.updateTime < endTime
+            ).SumAsync(x => x.orderAmount);
 
+            var orderToler= await _unitOfWork.GetDbClient().Queryable<DistributionAchievementOrder>().Where(x => x.userID == UserId            
+              && x.createTime > StartTime
+              && x.createTime < endTime).SumAsync(x => x.achievementTotal);
+            total = total + orderToler;
+            if (total==0)
+                return (total,null, null);
+            else
+            return (total, StartTime, endTime);
+        }
+
+        public async Task<decimal> AchievementBonus(decimal AttributeTotal)
+        {
+          
+            var allConfigs =  await _settingServices.GetConfigDictionaries();
+            var key = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.DictionaryAchievementSet).ObjectToInt(0);
+            return AttributeTotal *(decimal)key / 100;
+        }
+
+        public async Task<bool> SettledAchievement(int UserId)
+        {
+            //闈炰緵搴斿晢锛屽仠姝�
+            var da = await _dal.GetCountAsync(x => x.userId == UserId && x.verifyStatus == (int)GlobalEnumVars.DistributionVerifyStatus.VerifyYes, isDataCache: true, cacheTimes: 1);
+            if (da == 0)
+                return true;
+            var att = await AchievementTotal(UserId);
+            if(att.Item1>0)
+            {
+                DistributionAchievement oder = new DistributionAchievement
+                {
+                    achievementTotals = att.Item1,
+                    achievementBonus = await AchievementBonus(att.Item1),
+                     createBy="绯荤粺缁撶畻",
+                      createTime=DateTime.Now,
+                       startTime=att.Item2,
+                    endTime = att.Item3,
+                     userID = UserId
+
+                };
+                //寤虹珛缁撶畻鍗�
+             var id=    await _unitOfWork.GetDbClient().Insertable(oder).ExecuteCommandIdentityIntoEntityAsync();
+              var a=  await _userBalanceServices.Change(UserId, (int )UserBalanceSourceTypes.DistributionAchievement,
+                    oder.achievementBonus,id.ToString());
+                if(a.code!=0)
+                {
+                    NLogUtil.WriteAll(NLog.LogLevel.Fatal, LogType.DataBase, "缁忛攢鍟嗕笟缁╂彁鎴愬啓鍏ヤ綑棰濆け璐�", a.msg);
+                    return false;
+                }
+                return true;
+            }
+            return true;
+        }
+
+      
+        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;
+            DistributionAchievementOrder oder = new DistributionAchievementOrder
+            {
+                achievementTotal = Parma.Money,
+                createBy = "缁忛攢鍟嗕笟缁╁啓鍏�",
+                createTime = DateTime.Now,
+                orderId = Parma.OderId,
+                userID = Parma.UserID,
+                 orderType=(int ) Parma.SourceTypes
+                
+
+
+
+            };
+
+          return   await  _unitOfWork.GetDbClient().Updateable(oder).ExecuteCommandAsync()>0;
+             
+        }
     }
 }

--
Gitblit v1.9.1