From b38c91e5cce54e1114ec5968c722c1a1c57bd21a Mon Sep 17 00:00:00 2001
From: 移动系统liao <liaoxujun@qq.com>
Date: 星期五, 21 六月 2024 13:27:00 +0800
Subject: [PATCH] 完成派送订单佣金写入余额逻辑

---
 CoreCms.Net.Model/Entities/Order/CoreCmsOrderPartial.cs                                 |    8 +
 CoreCms.Net.Model/Entities/Order/CoreCmsOrder.cs                                        |    2 
 CoreCms.Net.RedisMQ/OrderAgentOrDistributionSubscribe.cs                                |    1 
 .gitignore                                                                              |    1 
 CoreCms.Net.Model/Entities/Bill/CoreCmsBillAftersales.cs                                |    2 
 CoreCms.Net.Model/Entities/baifenbingfa/DistributionSend/DistributionSendOder.cs        |   16 ++
 CoreCms.Net.Model/Entities/baifenbingfa/DistributionSend/DistributionSendOderPartial.cs |   13 ++
 CoreCms.Net.Services/baifenbingfa/DistributorDeliveryServices.cs                        |  186 ++++++++++++++++++++++++++++---
 CoreCms.Net.Utility/Helper/UserHelper.cs                                                |    3 
 CoreCms.Net.Configuration/SystemSettingConstVars.cs                                     |   11 +
 CoreCms.Net.Model/Entities/Distribution/CoreCmsDistributionOrder.cs                     |    3 
 CoreCms.Net.Configuration/SystemSettingDictionary.cs                                    |    2 
 CoreCms.Net.Services/Distribution/CoreCmsDistributionOrderServices.cs                   |   18 +++
 CoreCms.Net.Configuration/GlobalEnumVars.cs                                             |    9 +
 CoreCms.Net.Model/Entities/Bill/CoreCmsBillDelivery.cs                                  |    6 +
 CoreCms.Net.RedisMQ/OrderFinishCommandSubscribe.cs                                      |    8 +
 CoreCms.Net.Web.Admin/wwwroot/views/distribution/distributor/achievement.html           |    2 
 CoreCms.Net.RedisMQ/DistributionSendOderMQ.cs                                           |   51 +++++++-
 CoreCms.Net.IServices/baifenbingfa/IDistributorDeliveryServices.cs                      |    9 +
 CoreCms.Net.Web.Admin/wwwroot/views/distribution/setting/index.html                     |    7 +
 20 files changed, 323 insertions(+), 35 deletions(-)

diff --git a/.gitignore b/.gitignore
index 8ff8e38..06522ef 100644
--- a/.gitignore
+++ b/.gitignore
@@ -63,3 +63,4 @@
 CoreCms.Net.Web.WebApi/appsettings.json
 CoreCms.Net.Web.WebApi/CoreCms.Net.Web.WebApi.xml
 CoreCms.Net.Uni-App/bin/
+鏁版嵁搴�/
diff --git a/CoreCms.Net.Configuration/GlobalEnumVars.cs b/CoreCms.Net.Configuration/GlobalEnumVars.cs
index 0276fcf..acba533 100644
--- a/CoreCms.Net.Configuration/GlobalEnumVars.cs
+++ b/CoreCms.Net.Configuration/GlobalEnumVars.cs
@@ -246,7 +246,14 @@
             /// 璁㈠崟
             /// </summary>
             [Description("璁㈠崟")]
-            GoodsOder = 11,
+            GoodsOder = 12,
+
+
+            /// <summary>
+            /// 缁忛攢閰嶉�佷剑閲�
+            /// </summary>
+            [Description("缁忛攢閰嶉�佷剑閲�")]
+            DistributionDelivery = 13,
         }
         /// <summary>
         /// 鐢ㄦ埛绉垎鍙樺姩鏉ユ簮绫诲瀷
diff --git a/CoreCms.Net.Configuration/SystemSettingConstVars.cs b/CoreCms.Net.Configuration/SystemSettingConstVars.cs
index 2190b8d..ee93d70 100644
--- a/CoreCms.Net.Configuration/SystemSettingConstVars.cs
+++ b/CoreCms.Net.Configuration/SystemSettingConstVars.cs
@@ -939,9 +939,14 @@
         /// </summary>
         public static readonly string DictionaryUserGroupKey = "dictionaryUserGroupKey";
 
-       /// <summary>
-       /// 涓氱哗濂栧姳  寮�鍏�
-       /// </summary>
+        /// <summary>
+        /// 缁忛攢鍟嗗彂璐у鍔辫缃�
+        /// </summary>
+        public static readonly string DictionaryDeliverFees = "dictionaryDeliverFees";
+
+        /// <summary>
+        /// 涓氱哗濂栧姳  寮�鍏�
+        /// </summary>
         public static readonly string DictionaryAchievementOnOff = "dictionaryAchievementOnOff";
 
         /// <summary>
diff --git a/CoreCms.Net.Configuration/SystemSettingDictionary.cs b/CoreCms.Net.Configuration/SystemSettingDictionary.cs
index 578fa8e..f738936 100644
--- a/CoreCms.Net.Configuration/SystemSettingDictionary.cs
+++ b/CoreCms.Net.Configuration/SystemSettingDictionary.cs
@@ -274,6 +274,8 @@
             //銆�++++++++++++++++++++++++++++++++++++鐧惧垎鍏垫硶澧炲姞++++++++++++++++
             //缁忛攢鍟嗙敤鎴风粍缁戝畾key 鏈夊氨缁戝畾锛屾棤鍒欎笉缁戝畾
             di.Add(SystemSettingConstVars.DictionaryUserGroupKey, new DictionaryKeyValues() { sKey = "缁忛攢鍟嗗叧鑱旂敤鎴风粍KEY", sValue = "DictionaryUserGroupKey" });
+            //缁忛攢鍟嗛厤閫佸鍔�
+            di.Add(SystemSettingConstVars.DictionaryDeliverFees, new DictionaryKeyValues() { sKey = "缁忛攢鍟嗛厤閫佸鍔�", sValue = "5" });
             //涓氱哗寮�鍏�
             di.Add(SystemSettingConstVars.DictionaryAchievementOnOff, new DictionaryKeyValues() { sKey = "鏄惁寮�鍚笟缁╁鍔�", sValue = "1" });
             //涓氱哗濂栧姳鎶�鏈洜瀛�
diff --git a/CoreCms.Net.IServices/baifenbingfa/IDistributorDeliveryServices.cs b/CoreCms.Net.IServices/baifenbingfa/IDistributorDeliveryServices.cs
index 9f96c8a..7a17b17 100644
--- a/CoreCms.Net.IServices/baifenbingfa/IDistributorDeliveryServices.cs
+++ b/CoreCms.Net.IServices/baifenbingfa/IDistributorDeliveryServices.cs
@@ -42,6 +42,15 @@
         /// <param name="CancelledDec">鍙栨秷鍘熷洜</param>
         /// <returns></returns>
         Task<WebApiCallBack> SetDeliveryAccepted(sendDistributionAcceptType acceptType,string DeliveryID,string CancelledDec= null);
+
+        /// <summary>
+        /// 瀹屾垚璁㈠崟锛岄厤閫佽鍗曞皢鍒嗛厤鍒扮敤鎴蜂綑棰�
+        /// </summary>
+        /// <param name="orderId"></param>
+        /// <returns></returns>
+         Task<WebApiCallBack> FinishOrder(string orderId);
+
+
     }
 
 
diff --git a/CoreCms.Net.Model/Entities/Bill/CoreCmsBillAftersales.cs b/CoreCms.Net.Model/Entities/Bill/CoreCmsBillAftersales.cs
index a53398e..613f40e 100644
--- a/CoreCms.Net.Model/Entities/Bill/CoreCmsBillAftersales.cs
+++ b/CoreCms.Net.Model/Entities/Bill/CoreCmsBillAftersales.cs
@@ -13,7 +13,7 @@
 namespace CoreCms.Net.Model.Entities
 {
     /// <summary>
-    /// 閫�璐у崟琛�
+    /// 鍞悗鍗曡〃
     /// </summary>
     [SugarTable("CoreCmsBillAftersales",TableDescription = "閫�璐у崟琛�")]
     public partial class CoreCmsBillAftersales
diff --git a/CoreCms.Net.Model/Entities/Bill/CoreCmsBillDelivery.cs b/CoreCms.Net.Model/Entities/Bill/CoreCmsBillDelivery.cs
index 19e0f63..ee418d3 100644
--- a/CoreCms.Net.Model/Entities/Bill/CoreCmsBillDelivery.cs
+++ b/CoreCms.Net.Model/Entities/Bill/CoreCmsBillDelivery.cs
@@ -283,6 +283,12 @@
         [Description("绛夊緟纭鎺ュ彈")]
         NoAccted,
 
+        /// <summary>
+        /// 濂栧姳纭
+        /// </summary>
+        [Description("濂栧姳纭")]
+        OderFreeComplete,
+
 
 
     }
diff --git a/CoreCms.Net.Model/Entities/Distribution/CoreCmsDistributionOrder.cs b/CoreCms.Net.Model/Entities/Distribution/CoreCmsDistributionOrder.cs
index 1d141c0..dba6ee2 100644
--- a/CoreCms.Net.Model/Entities/Distribution/CoreCmsDistributionOrder.cs
+++ b/CoreCms.Net.Model/Entities/Distribution/CoreCmsDistributionOrder.cs
@@ -8,6 +8,7 @@
  *        Description: 鏆傛棤
 ***********************************************************************/ 
 using SqlSugar;
+using System;
 using System.ComponentModel.DataAnnotations;
 
 namespace CoreCms.Net.Model.Entities
@@ -25,6 +26,8 @@
         {
         }
 
+
+      
         /// <summary>
         /// 搴忓垪
         /// </summary>
diff --git a/CoreCms.Net.Model/Entities/Order/CoreCmsOrder.cs b/CoreCms.Net.Model/Entities/Order/CoreCmsOrder.cs
index d9e1bd7..5ffc8d4 100644
--- a/CoreCms.Net.Model/Entities/Order/CoreCmsOrder.cs
+++ b/CoreCms.Net.Model/Entities/Order/CoreCmsOrder.cs
@@ -221,7 +221,7 @@
         
 		
         /// <summary>
-        /// 鍞悗鐘舵��
+        /// 鏀惰揣鐘舵��
         /// </summary>
         [Display(Name = "鍞悗鐘舵��")]
 		
diff --git a/CoreCms.Net.Model/Entities/Order/CoreCmsOrderPartial.cs b/CoreCms.Net.Model/Entities/Order/CoreCmsOrderPartial.cs
index 58219d8..782736a 100644
--- a/CoreCms.Net.Model/Entities/Order/CoreCmsOrderPartial.cs
+++ b/CoreCms.Net.Model/Entities/Order/CoreCmsOrderPartial.cs
@@ -64,9 +64,17 @@
         ///     鍞悗鍗�
         /// </summary>
         [SugarColumn(IsIgnore = true)]
+        
         public List<CoreCmsBillAftersales> aftersalesItem { get; set; }
 
         /// <summary>
+        /// 瀵艰埅杩斿洖
+        /// </summary>
+        [Navigate(NavigateType.OneToMany, nameof(CoreCmsBillAftersales.orderId), nameof(orderId))]
+        public List<CoreCmsBillAftersales> aftersalesItem1 { get; set; }
+
+
+        /// <summary>
         ///     鍙戣揣鍗�
         /// </summary>
         [SugarColumn(IsIgnore = true)]
diff --git a/CoreCms.Net.Model/Entities/baifenbingfa/DistributionSend/DistributionSendOder.cs b/CoreCms.Net.Model/Entities/baifenbingfa/DistributionSend/DistributionSendOder.cs
index 13e4497..ff12ccb 100644
--- a/CoreCms.Net.Model/Entities/baifenbingfa/DistributionSend/DistributionSendOder.cs
+++ b/CoreCms.Net.Model/Entities/baifenbingfa/DistributionSend/DistributionSendOder.cs
@@ -6,6 +6,7 @@
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
+using static SKIT.FlurlHttpClient.Wechat.Api.Models.CgibinExpressDeliveryOpenMessageGetDeliveryListResponse.Types;
 
 namespace CoreCms.Net.Model.Entities.baifenbingfa.DistributionSendOder
 {
@@ -14,8 +15,10 @@
     /// </summary>
     [SugarTable(TableDescription = "渚涘簲鍟嗗彂璐ч厤鍙戣褰�")]
     [SqlCodeFirst]
-    public class DistributionSendOder: BFBaseModel
+    public partial class DistributionSendOder: BFBaseModel
     {
+
+
         /// <summary>
         /// ID
         /// </summary>
@@ -61,11 +64,22 @@
         /// </summary>
         [SugarColumn(ColumnDescription = "閰嶉�佸崟Id")]
         public string deliveryID { get; set; }
+        /// <summary>
+        /// 閰嶉�佽垂鐢�
+        /// </summary>
+        [SugarColumn(ColumnDescription = "閰嶉�佽垂鐢�",DefaultValue ="0")]
+        public decimal amount { get; set; }= 0;
 
         /// <summary>
         /// 閰嶉�佺姸鎬�
         /// </summary>
         [SugarColumn(ColumnDescription = "閰嶉�佺姸鎬�",IsNullable =true)]
         public sendDistributionAcceptType? sendDistributionAccept { get; set; }
+
+        /// <summary>
+        /// 搴旇仒鑱屽姟
+        /// </summary>
+        [Navigate(NavigateType.OneToOne, nameof(deliveryID))]
+        public CoreCmsBillDelivery delivery { get; set; }
     }
 }
diff --git a/CoreCms.Net.Model/Entities/baifenbingfa/DistributionSend/DistributionSendOderPartial.cs b/CoreCms.Net.Model/Entities/baifenbingfa/DistributionSend/DistributionSendOderPartial.cs
new file mode 100644
index 0000000..c6d709d
--- /dev/null
+++ b/CoreCms.Net.Model/Entities/baifenbingfa/DistributionSend/DistributionSendOderPartial.cs
@@ -0,0 +1,13 @@
+锘縰sing CoreCms.Net.Model.Entities.baifenbingfa.jon;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using static SKIT.FlurlHttpClient.Wechat.Api.Models.CgibinExpressDeliveryOpenMessageGetDeliveryListResponse.Types;
+
+namespace CoreCms.Net.Model.Entities.baifenbingfa.DistributionSend
+{
+
+}
diff --git a/CoreCms.Net.RedisMQ/DistributionSendOderMQ.cs b/CoreCms.Net.RedisMQ/DistributionSendOderMQ.cs
index 18c7b9b..bc0b898 100644
--- a/CoreCms.Net.RedisMQ/DistributionSendOderMQ.cs
+++ b/CoreCms.Net.RedisMQ/DistributionSendOderMQ.cs
@@ -4,9 +4,12 @@
 using CoreCms.Net.IServices;
 using CoreCms.Net.Loging;
 using CoreCms.Net.Model.Entities.baifenbingfa.DistributionSendOder;
+using CoreCms.Net.Utility.Extensions;
+using CoreCms.Net.Utility.Helper;
 using InitQ.Abstractions;
 using InitQ.Attributes;
 using Newtonsoft.Json;
+using StackExchange.Redis;
 using System;
 using System.Collections.Generic;
 using System.Linq;
@@ -21,10 +24,13 @@
     public class DistributionSendOderMQ: IRedisSubscribe
     {
         private readonly IUnitOfWork _unitOfWork;
-        public DistributionSendOderMQ(IUnitOfWork unitOfWork)
+        private readonly ICoreCmsUserBalanceServices _userBalanceServices;
+        private readonly ICoreCmsSettingServices _coreCmsSettingServices; //娉ㄥ叆鏈嶅姟
+        public DistributionSendOderMQ(IUnitOfWork unitOfWork, ICoreCmsUserBalanceServices userBalanceServices, ICoreCmsSettingServices coreCmsSettingServices)
         {
-            _unitOfWork= unitOfWork;
-
+            _unitOfWork = unitOfWork;
+            _userBalanceServices = userBalanceServices;
+            _coreCmsSettingServices = coreCmsSettingServices;
         }
 
         /// <summary>
@@ -42,7 +48,10 @@
             }
             Param.createTime = DateTime.Now;
             Param.createBy = "绯荤粺闃熷垪";
-           
+            var allConfigs = await _coreCmsSettingServices.GetConfigDictionaries();//鑾峰彇鎵�鏈夐厤缃�
+                                                                            //绛涢�夐厤缃�
+            var DictionaryDeliverFees = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.DictionaryDeliverFees).ObjectToDecimal(0);
+            Param.amount = DictionaryDeliverFees;
             await _unitOfWork.GetDbClient().Insertable(Param).ExecuteCommandAsync();
 
         }
@@ -61,14 +70,42 @@
                 NLogUtil.WriteAll(NLog.LogLevel.Error, LogType.RedisMessageQueue, "ActiveDistributionSendOder 淇敼鐘舵�� 澶勭悊澶辫触", $"杞崲妯″瀷澶辫触===銆� {message}");
                 return;
             }
+            DistributionSendOder oder = null;
+            if (Param.SendOderActive == Model.Entities.sendDistributionAcceptType.OderFreeComplete)
+                 oder=await   _unitOfWork.GetDbClient().Queryable<DistributionSendOder>().Includes(x=>x.delivery).Where(x => x.deliveryID == Param.deliveryID ).FirstAsync();
+            else
 
-          var oder=await   _unitOfWork.GetDbClient().Queryable<DistributionSendOder>().Where(x => x.deliveryID == Param.deliveryID && x.userID == Param.userID).FirstAsync();
+                oder = await _unitOfWork.GetDbClient().Queryable<DistributionSendOder>().Includes(x => x.delivery).Where(x => x.deliveryID == Param.deliveryID && x.userID == Param.userID).FirstAsync();
             oder.upDataTime = DateTime.Now;
             oder.upDataBy = "ActiveDistributionSendOder 闃熷垪";
             oder.description = Param.Dec;
             oder.sendDistributionAccept= Param.SendOderActive;
-         
-            await _unitOfWork.GetDbClient().Updateable(oder).ExecuteCommandAsync();
+            _unitOfWork.BeginTran();
+            try
+            {
+                if (Param.SendOderActive == Model.Entities.sendDistributionAcceptType.OderFreeComplete) {
+                    if (oder.userID != null && oder.delivery?.orderId != null)
+                    {
+                        //閽辨尓鍒颁細鍛樹綑棰濋噷闈�
+                        var result = await _userBalanceServices.Change(oder.userID ?? 0, (int)GlobalEnumVars.UserBalanceSourceTypes.DistributionDelivery,
+                          oder.amount, oder.delivery.orderId);
+                    }
+                    else
+                        NLogUtil.WriteAll(NLog.LogLevel.Error, LogType.Order, "缁忛攢鍟嗗彂璐х粨绠楀け璐�", $"DistributionSendOder ID={oder.id}  璇ヨ鍗曠殑鐢ㄦ埛ID鎴栬�呮槸deliveryID鎴栬�呮槸CoreCmsBillDelivery 涓殑 oderId");
+
+
+                }
+                await _unitOfWork.GetDbClient().Updateable(oder).ExecuteCommandAsync();
+
+                _unitOfWork.CommitTran();
+            }
+            catch (Exception  )
+            {
+                _unitOfWork.RollbackTran();
+                throw;
+            }
+           
+          
 
         }
 
diff --git a/CoreCms.Net.RedisMQ/OrderAgentOrDistributionSubscribe.cs b/CoreCms.Net.RedisMQ/OrderAgentOrDistributionSubscribe.cs
index 3d0309c..74357e5 100644
--- a/CoreCms.Net.RedisMQ/OrderAgentOrDistributionSubscribe.cs
+++ b/CoreCms.Net.RedisMQ/OrderAgentOrDistributionSubscribe.cs
@@ -150,7 +150,6 @@
                                         iData.name = !string.IsNullOrEmpty(user.nickName) ? user.nickName : user.mobile;
                                         iData.verifyStatus = (int)GlobalEnumVars.DistributionVerifyStatus.VerifyYes;
                                         iData.verifyTime = DateTime.Now;
-
                                         await _distributionServices.AddData(iData, order.userId);
                                     }
                                 }
diff --git a/CoreCms.Net.RedisMQ/OrderFinishCommandSubscribe.cs b/CoreCms.Net.RedisMQ/OrderFinishCommandSubscribe.cs
index 6961144..d73b545 100644
--- a/CoreCms.Net.RedisMQ/OrderFinishCommandSubscribe.cs
+++ b/CoreCms.Net.RedisMQ/OrderFinishCommandSubscribe.cs
@@ -2,6 +2,7 @@
 using System.Threading.Tasks;
 using CoreCms.Net.Configuration;
 using CoreCms.Net.IServices;
+using CoreCms.Net.IServices.baifenbingfa;
 using CoreCms.Net.Loging;
 using CoreCms.Net.Model.Entities;
 using CoreCms.Net.Utility.Extensions;
@@ -27,9 +28,11 @@
         private readonly ICoreCmsSettingServices _settingServices;
         private readonly ICoreCmsUserServices _userServices;
         private readonly ICoreCmsAgentOrderServices _agentOrderServices;
+        private readonly IDistributorDeliveryServices _distributorDeliveryServices;
 
 
-        public OrderFinishCommandSubscribe(ICoreCmsBillPaymentsServices billPaymentsServices, ICoreCmsDistributionOrderServices distributionOrderServices, ICoreCmsDistributionServices distributionServices, ICoreCmsSettingServices settingServices, ICoreCmsUserServices userServices, ICoreCmsAgentOrderServices agentOrderServices)
+        public OrderFinishCommandSubscribe(ICoreCmsBillPaymentsServices billPaymentsServices, ICoreCmsDistributionOrderServices distributionOrderServices, ICoreCmsDistributionServices distributionServices, ICoreCmsSettingServices settingServices, ICoreCmsUserServices userServices, ICoreCmsAgentOrderServices agentOrderServices,
+            IDistributorDeliveryServices distributorDeliveryServices)
         {
             _billPaymentsServices = billPaymentsServices;
             _distributionOrderServices = distributionOrderServices;
@@ -37,6 +40,7 @@
             _settingServices = settingServices;
             _userServices = userServices;
             _agentOrderServices = agentOrderServices;
+            _distributorDeliveryServices= distributorDeliveryServices;
         }
 
         /// <summary>
@@ -63,6 +67,8 @@
                     await _agentOrderServices.FinishOrder(msg);
                     //閭�璇疯姹傛ā寮忎笅杩涜鍒嗕剑锛屼細妫�娴嬫槸鍚﹀紑鍚簡涓夌骇鍒嗛攢鍜屼唬鐞嗘ā寮忋��
                     await _userServices.InviteCommission(msg);
+                    //澶勭悊缁忛攢鍟嗗彂璐ф敹鐩婂垎閰嶈褰曞埌浣欓鍐�
+                    await _distributorDeliveryServices.FinishOrder(msg);
                     NLogUtil.WriteAll(NLog.LogLevel.Info, LogType.RedisMessageQueue, "璁㈠崟瀹岀粨缁撲剑", "璁㈠崟缂栧彿鑾峰彇姝e父锛�" + msg);
                 }
 
diff --git a/CoreCms.Net.Services/Distribution/CoreCmsDistributionOrderServices.cs b/CoreCms.Net.Services/Distribution/CoreCmsDistributionOrderServices.cs
index 6a44513..62d428f 100644
--- a/CoreCms.Net.Services/Distribution/CoreCmsDistributionOrderServices.cs
+++ b/CoreCms.Net.Services/Distribution/CoreCmsDistributionOrderServices.cs
@@ -392,6 +392,24 @@
         }
 
 
+
+        /// <summary>
+        /// 缁忛攢涓婇厤閫佽垂缁撶畻涓撶敤
+        /// </summary>
+        /// <param name="list"></param>
+        /// <returns></returns>
+        private async IAsyncEnumerable<WebApiCallBack> ChangeForEachForDistributionDelivery(List<CoreCmsDistributionOrder> list)
+        {
+            foreach (var item in list)
+            {
+                //閽辨尓鍒颁細鍛樹綑棰濋噷闈�
+                var result = await _balanceServices.Change(item.userId, (int)GlobalEnumVars.UserBalanceSourceTypes.DistributionDelivery,
+                    item.amount, item.orderId);
+
+                yield return result;
+            }
+        }
+
         #endregion
 
         #region 浣滃簾璁㈠崟
diff --git a/CoreCms.Net.Services/baifenbingfa/DistributorDeliveryServices.cs b/CoreCms.Net.Services/baifenbingfa/DistributorDeliveryServices.cs
index 3406cd0..c88065d 100644
--- a/CoreCms.Net.Services/baifenbingfa/DistributorDeliveryServices.cs
+++ b/CoreCms.Net.Services/baifenbingfa/DistributorDeliveryServices.cs
@@ -21,6 +21,11 @@
 using CoreCms.Net.DTO;
 using static SKIT.FlurlHttpClient.Wechat.Api.Models.CgibinExpressDeliveryOpenMessageGetDeliveryListResponse.Types;
 
+using CoreCms.Net.Loging;
+using CoreCms.Net.Model.Entities.baifenbingfa.DistributionSendOder;
+using StackExchange.Redis;
+using Microsoft.Extensions.Logging;
+
 namespace CoreCms.Net.Services.baifenbingfa
 {
     /// <summary>
@@ -39,7 +44,9 @@
         private readonly IRedisOperationRepository _redisOperationRepository;
        private readonly  IHttpContextUser _user;
 
+
         public readonly ICoreCmsDistributionServices _coreCmsDistributionServices;
+        private readonly ICoreCmsOrderServices _orderServices;
 
         public DistributorDeliveryServices(
             IUnitOfWork unitOfWork,
@@ -51,7 +58,8 @@
             , ICoreCmsSettingServices settingServices
             , IRedisOperationRepository redisOperationRepository
             , IHttpContextUser user
-            ,ICoreCmsDistributionServices coreCmsDistributionServices )
+            ,ICoreCmsDistributionServices coreCmsDistributionServices
+            ,ICoreCmsOrderServices orderServices)
         {
             this._dal = dal;
             base.BaseDal = dal;
@@ -64,6 +72,7 @@
             _redisOperationRepository = redisOperationRepository;
             _user = user;
             _coreCmsDistributionServices = coreCmsDistributionServices;
+            _orderServices = orderServices;
         }
 
         public async Task<(List< CoreCmsBillDelivery>,int )> GetDeliveryList(GetDeliveryListPost Param)
@@ -77,7 +86,42 @@
             }
             if (Param.distributionAcceptStatus != null)
             {
-                where= where.And(x => x.sendDistributionAccept == Param.distributionAcceptStatus);
+                switch (Param.distributionAcceptStatus)
+                {
+                    case sendDistributionAcceptType.Accepted:
+                        ///杩涜涓紝鍞悗绌�
+                        where = where.And(x => x.sendDistributionAccept == sendDistributionAcceptType.Accepted
+                        && x.order.status == (int)GlobalEnumVars.OrderStatus.Normal && !x.order.aftersalesItem1.Any()&& x.order.confirmStatus != (int)GlobalEnumVars.OrderConfirmStatus.ConfirmReceipt);
+                        //where = where.And(x => x.sendDistributionAccept == Param.distributionAcceptStatus);
+                        break;
+                    case sendDistributionAcceptType.NoAccted:
+                        ///鏈‘璁ゆ帴鍙楃殑锛屼笉鑳藉敭鍚庣┖
+                        where = where.And(x => x.sendDistributionAccept == sendDistributionAcceptType.NoAccted
+                        && x.order.status == (int)GlobalEnumVars.OrderStatus.Normal && !x.order.aftersalesItem1.Any());
+                        //where = where.And(x => x.sendDistributionAccept == Param.distributionAcceptStatus);
+                        break;
+                    
+                    case sendDistributionAcceptType.OderFreeComplete:
+
+                        where = where.And(x => x.sendDistributionAccept == sendDistributionAcceptType.Accepted
+                      && x.order.status == (int)GlobalEnumVars.OrderStatus.Complete && !x.order.aftersalesItem1.Any());
+                        //where = where.And(x => x.sendDistributionAccept == Param.distributionAcceptStatus);
+                        break;
+                    case sendDistributionAcceptType.Cancelled:
+
+                        where = where.And(x =>( x.sendDistributionAccept == sendDistributionAcceptType.Cancelled
+                 ||  x.order.status == (int)GlobalEnumVars.OrderStatus.Cancel || x.order.aftersalesItem1.Any()));
+                        //where = where.And(x => x.sendDistributionAccept == Param.distributionAcceptStatus);
+                        break;
+                    case sendDistributionAcceptType.Delivered:
+                        where = where.And(x => x.sendDistributionAccept == sendDistributionAcceptType.Delivered
+                 || x.order.confirmStatus == (int)GlobalEnumVars.OrderConfirmStatus.ConfirmReceipt );
+                        //where = where.And(x => x.sendDistributionAccept == Param.distributionAcceptStatus);
+                        break;
+                    default:
+                        break;
+                }
+                //where= where.And(x => x.sendDistributionAccept == Param.distributionAcceptStatus);
             }
             where= where.And(x => x.sendDistributionUserID == _user.ID);
             //蹇呴』鏄嚭浜庡彂璐х姸鎬�
@@ -85,20 +129,63 @@
             //蹇呴』鏄湁鏁堢姸鎬�
             //where= where.And(x => x.order.status == (int)GlobalEnumVars.OrderStatus.Normal);
             RefAsync<int> totl = 0;
-            var list = await _unitOfWork.GetDbClient().Queryable<CoreCmsBillDelivery>().Includes(x => x.order, order => order.Orderitems, ite => ite.productInfo).Select(x => new CoreCmsBillDelivery
-            {
-                sendDistributionAccept = x.sendDistributionAccept == sendDistributionAcceptType.NoAccted ?
-                //鐢ㄦ埛娌℃湁鍚屾剰浣嗘槸璁㈠崟宸茬粡鍙栨秷浜� 闇�瑕佽祴鍊� 鍙栨秷鐘舵��
-                (x.order.status== (int)GlobalEnumVars.OrderStatus.Normal ? sendDistributionAcceptType.NoAccted: sendDistributionAcceptType.Cancelled ):
-                (
-                  x.sendDistributionAccept== sendDistributionAcceptType.Accepted?
-                  //鐢ㄦ埛宸茬粡鍚屾剰浜�
-                  (x.order.confirmStatus == (int)GlobalEnumVars.OrderConfirmStatus.ConfirmReceipt? sendDistributionAcceptType.Delivered: sendDistributionAcceptType.Accepted)
-                  : x.order.status==(int )GlobalEnumVars.OrderStatus.Cancel? sendDistributionAcceptType.Cancelled: x.sendDistributionAccept
-                ),
-                  order=x.order,
-            },true).MergeTable()
-                .Where(where).OrderByDescending(x => x.createTime)
+            var list = await _unitOfWork.GetDbClient().Queryable<CoreCmsBillDelivery>()
+                .Includes(x => x.order, order => order.Orderitems, ite => ite.productInfo)
+                .Includes(x => x.order, Order => Order.aftersalesItem1)
+                .Where(where)
+                .Select(x => new CoreCmsBillDelivery
+                {
+                    
+                    order = x.order,
+                }, true)
+                 .MergeTable()
+                //.Mapper(x => x.order.billAftersalesId = SqlFunc.Subqueryable<CoreCmsBillAftersales>().Where(core => core.orderId == x.orderId).Select(core => core.aftersalesId))
+                .Mapper(
+                x =>
+                {
+                    switch (x.sendDistributionAccept)
+                    {
+                        case sendDistributionAcceptType.Accepted:
+                           
+                             if (x.order.status == (int)GlobalEnumVars.OrderStatus.Cancel)
+                                x.sendDistributionAccept = sendDistributionAcceptType.Cancelled;                          
+                             else
+                              if (x.order.status == (int)GlobalEnumVars.OrderStatus.Complete && !x.order.aftersalesItem1.Any())
+                                x.sendDistributionAccept = sendDistributionAcceptType.OderFreeComplete;
+                            if (x.order.status == (int)GlobalEnumVars.OrderStatus.Complete && x.order.aftersalesItem1.Any())
+                                x.sendDistributionAccept = sendDistributionAcceptType.Cancelled;
+
+                            else if (x.order.status == (int)GlobalEnumVars.OrderStatus.Normal && x.order.aftersalesItem1.Any())
+                                x.sendDistributionAccept = sendDistributionAcceptType.Cancelled;
+                            else
+                             if (x.order.confirmStatus == (int)GlobalEnumVars.OrderConfirmStatus.ConfirmReceipt)
+                                x.sendDistributionAccept = sendDistributionAcceptType.Delivered;
+                            else
+                                x.sendDistributionAccept = x.sendDistributionAccept;
+                            break;
+                        case sendDistributionAcceptType.NoAccted:
+                            ///鏈‘璁ゆ帴鍙楃殑锛屼笉鑳藉敭鍚庣┖
+                           if(x.order.status== (int)GlobalEnumVars.OrderStatus.Complete||x.order.status== (int)GlobalEnumVars.OrderStatus.Cancel|| x.order.aftersalesItem1.Any())
+                                x.sendDistributionAccept= sendDistributionAcceptType.Cancelled;
+                            else
+                                x.sendDistributionAccept = x.sendDistributionAccept;
+                            break;
+
+                        case sendDistributionAcceptType.OderFreeComplete:
+
+                          //姘歌繙涓嶄細鍒拌繖
+                            break;
+                        case sendDistributionAcceptType.Cancelled:
+                            //涓嶉渶瑕佸鐞�
+                       
+                            break;
+                        default:
+                            break;
+                    }
+                }
+                )
+
+                .OrderByDescending(x => x.createTime)
                 .ToPageListAsync(Param.page, Param.limit, totl);
              var listdata=  new PageList<CoreCmsBillDelivery>(list, Param.page, Param.limit, totl);
 
@@ -108,16 +195,31 @@
 
         public async Task<int> GetNoAcceptedDeliveryCount()
         {
-           return  await _dal.GetCountAsync(x => x.sendDistributionUserID == _user.ID && x.sendDistributionAccept ==  sendDistributionAcceptType.NoAccted);
+           var lista=  await _unitOfWork.GetDbClient().Queryable<CoreCmsBillDelivery>().Includes(x => x.order,ord=>ord.aftersalesItem1)             
+               .Where(x => x.sendDistributionUserID == _user.ID && x.sendDistributionAccept == sendDistributionAcceptType.NoAccted
+           && x.order.status != (int)GlobalEnumVars.OrderStatus.Complete ).ToListAsync();
+
+            return lista.Where(x=>(x.order.aftersalesItem1==null|| x.order.aftersalesItem1.Count()==0)).Count();//鍒犻�夊嚭娌℃湁鍞悗鐢宠鐨勮鍗�
+
+
         }
 
         public async Task<bool> GetShowDelivery()
         {
             return (await _coreCmsDistributionServices.GetCountAsync(x => x.userId == _user.ID && x.verifyStatus == (int)GlobalEnumVars.DistributionVerifyStatus.VerifyYes&&x.profession=="鏍″洯浠g悊", isDataCache: true, cacheTimes: 60)>0);
         }
-        public async Task<WebApiCallBack> SetDeliveryAccepted(sendDistributionAcceptType acceptType, string DeliveryID, string CancelledDec = null)
+        public async Task<WebApiCallBack> SetDeliveryAccepted(sendDistributionAcceptType acceptType,   string DeliveryID, string CancelledDec = null)
         {
+
             WebApiCallBack ret = new WebApiCallBack();
+
+            if (acceptType == sendDistributionAcceptType.OderFreeComplete)
+            {
+                //鍙湁鍦ㄥ畬鎴愯鍗曚腑璁剧疆璇ョ姸鎬侊紝璇ョ姸鎬佷細瀵归厤鍞敹鐩婅繘琛屾彁鍙栨暣鍚�
+                ret.status = false;
+                ret.msg = "鐘舵�佽缃敊璇�";
+                return ret;
+            }
             var data = await _dal.QueryByIdAsync(DeliveryID);
             if (data == null)
             {
@@ -213,5 +315,53 @@
                 throw;
             }
         }
+
+        public async Task<WebApiCallBack> FinishOrder(string orderId)
+        {
+
+
+            var jm = new WebApiCallBack();
+
+            var order = await _orderServices.QueryByClauseAsync(p =>
+                p.orderId == orderId && p.status == (int)GlobalEnumVars.OrderStatus.Complete);
+            if (order == null)
+            {
+                jm.msg = "璁㈠崟鏌ヨ澶辫触";
+                return jm;
+            }
+          var distributionSendOder =  await  _unitOfWork.GetDbClient().Queryable<DistributionSendOder>().Includes(x=>x.delivery)
+                .Where(x=>x.delivery.orderId==order.orderId&&(x.sendDistributionAccept== sendDistributionAcceptType.Accepted|| x.sendDistributionAccept== sendDistributionAcceptType.Shipped||x.sendDistributionAccept== sendDistributionAcceptType.Delivered))
+                .ToListAsync();
+          if(  distributionSendOder.Count==1)
+            {
+                //婊¤冻鎵�鏈夋潯浠跺紑濮嬪垎閰嶉�昏緫
+                var mQ = new ActiveDistributionSendOderMQ
+                {
+               
+                    SendOderActive = sendDistributionAcceptType.OderFreeComplete,
+                    deliveryID = distributionSendOder[0].deliveryID,
+                    userID = order.userId
+                };
+
+                await _redisOperationRepository.ListLeftPushAsync(RedisMessageQueueKey.ActiveDistributionSendOderMQ, JsonConvert.SerializeObject(mQ));
+                jm.status = true;
+
+            }
+          else if( distributionSendOder.Count>1)
+            {
+               jm.status= false;
+                jm.msg = "鍙戠幇澶氫釜閰嶉�佽鍗曪紝闇�瑕佹墜鍔ㄦ帓鏌�";
+                NLogUtil.WriteAll(NLog.LogLevel.Error, LogType.Order, "澶勭悊缁忛攢鍟嗛厤閫佹敹鐩婃椂閿欒", $"璁㈠崟ID{orderId} 鍙戠幇澶氫釜婊¤冻缁忛攢鍟嗘淳閫佸崟锛屾斁寮冨鐞�,闇�鎺掓煡");
+             
+            }
+          jm.status = true;
+          return jm;
+
+             //if (order.shipStatus is (int)GlobalEnumVars.OrderShipStatus.No or (int)GlobalEnumVars.OrderShipStatus.PartialYes)
+             //   {
+             //       return jm;
+             //   }
+
+        }
     }
 }
diff --git a/CoreCms.Net.Utility/Helper/UserHelper.cs b/CoreCms.Net.Utility/Helper/UserHelper.cs
index 0838e45..cf96e49 100644
--- a/CoreCms.Net.Utility/Helper/UserHelper.cs
+++ b/CoreCms.Net.Utility/Helper/UserHelper.cs
@@ -64,6 +64,9 @@
                     break;
                 case (int)GlobalEnumVars.UserBalanceSourceTypes.CheckIn:
                     str += "鏃ュ巻绛惧埌濂栧姳" + money + "鍏�";
+                    break;                 
+                case (int)GlobalEnumVars.UserBalanceSourceTypes.DistributionDelivery:
+                    str += "閰嶉�佷剑閲�" + money + "鍏�";
                     break;
             }
             //::todo    杩欓噷杩樺彲浠ュ仛涓�浜涘叾浠栫殑鏍¢獙
diff --git a/CoreCms.Net.Web.Admin/wwwroot/views/distribution/distributor/achievement.html b/CoreCms.Net.Web.Admin/wwwroot/views/distribution/distributor/achievement.html
index fbb21a5..c966b68 100644
--- a/CoreCms.Net.Web.Admin/wwwroot/views/distribution/distributor/achievement.html
+++ b/CoreCms.Net.Web.Admin/wwwroot/views/distribution/distributor/achievement.html
@@ -44,7 +44,7 @@
 <script>
     var debug = layui.setter.debug;
     layui.data.done = function (d) {
-        //锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷禄锟饺★拷涌诟锟街碉拷锟斤拷锟�
+   //
         if (debug) { console.log(d.params.data); }
 
         layui.use(['admin', 'form', 'coreHelper'], function () {
diff --git a/CoreCms.Net.Web.Admin/wwwroot/views/distribution/setting/index.html b/CoreCms.Net.Web.Admin/wwwroot/views/distribution/setting/index.html
index b3ad65f..211aeb2 100644
--- a/CoreCms.Net.Web.Admin/wwwroot/views/distribution/setting/index.html
+++ b/CoreCms.Net.Web.Admin/wwwroot/views/distribution/setting/index.html
@@ -70,6 +70,13 @@
                                             <div class="layui-form-mid layui-word-aux">*闈炲繀瑕佷笉淇敼*</div>
                                         </div>
                                         <div class="layui-form-item">
+                                            <label class="layui-form-label">{{d.data.configs['dictionaryDeliverFees']['sKey']}}锛�</label>
+                                            <div class="layui-input-inline ">
+                                                <input type="text" name="dictionaryDeliverFees" lay-verify="title|number" value="{{d.data.configs['dictionaryDeliverFees']['sValue']}}" autocomplete="off" placeholder="" class="layui-input">
+                                            </div>
+                                            <div class="layui-form-mid layui-word-aux">鍏�</div>
+                                        </div>
+                                        <div class="layui-form-item">
                                             <label class="layui-form-label">{{d.data.configs['dictionaryAchievementOnOff']['sKey']}}锛�</label>
                                             <div class="layui-input-inline layui-inline-7">
                                                 <input type="radio" lay-filter="dictionaryAchievementOnOff" name="dictionaryAchievementOnOff" value="1" title="寮�鍚�" {{d.data.configs['dictionaryAchievementOnOff']['sValue']==="1" ? 'checked':''}}>

--
Gitblit v1.9.1