Browse Source

增加微信支付宝回调处理,消费统计处理,订单返现处理服务程序

lichunlei 3 năm trước cách đây
mục cha
commit
58b7370555

+ 1 - 1
AppStart/Alipay/AlipayFunction.cs

@@ -88,7 +88,7 @@ namespace MySystem
             // FileItem AppDemo = new FileItem(BusinessLicensePicPath);
             // request.AppDemo = AppDemo;
             List<string> WebSites = new List<string>();
-            WebSites.Add("www.kexiaoshuang.com");
+            WebSites.Add("http://www.kexiaoshuang.com/");
             request.WebSites = WebSites;
             request.AlipayLifeName = "客小爽";
             request.WechatOfficialAccountName = "客小爽";

+ 5 - 0
AppStart/Helper/AlipayPayBackService.cs

@@ -61,6 +61,11 @@ namespace MySystem
                         {
                             order.Status = 1;
                             order.UpdateDate = DateTime.Now;
+                            db.SaveChanges();
+                            TendisDbconn.Instance.AddList("ConsumerOrdersStat", order.Id);
+                            TendisDbconn.Instance.AddList("ConsumerOrders:Divi:List", order.Id.ToString());
+                            TendisDbconn.Instance.AddList("ConsumerOrders:Divi:" + order.MerchantId, order);
+                            // ConsumerOrdersStatService.Instance.Stat(order);
                         }
                     }
                     db.Dispose();

+ 11 - 8
AppStart/Helper/CheckAlipaySignService.cs

@@ -51,20 +51,23 @@ namespace MySystem
                         }
                         else if (dic["alipay_open_agent_order_query_response"]["order_status"].ToString() == "MERCHANT_CONFIRM_SUCCESS")
                         {
-                            PxcModels.MerchantAddInfo merchantadd = db.MerchantAddInfo.FirstOrDefault(m => m.Id == sign.MerchantAddInfoId && m.QueryCount == 1);
+                            PxcModels.MerchantAddInfo merchantadd = db.MerchantAddInfo.FirstOrDefault(m => m.Id == sign.MerchantAddInfoId && m.QueryCount < 2);
                             if (merchantadd != null)
                             {
                                 merchantadd.QueryCount = 2;
                                 db.SaveChanges();
                                 BothdisDbconn.Instance.Set("MerchantAddInfo:" + sign.MerchantAddInfoId, merchantadd);
-                                PxcModels.MerchantInfo merchant = db.MerchantInfo.FirstOrDefault(m => m.Id == sign.MerchantAddInfoId);
-                                List<PxcModels.MerchantInfo> merchants = RedisDbconn.Instance.GetList<PxcModels.MerchantInfo>("TmpMerchantInfo:" + merchant.UserId, 1, 1000000);
-                                PxcModels.MerchantInfo check = merchants.FirstOrDefault(m => m.Id == sign.MerchantAddInfoId);
-                                if (check != null)
+                                if (merchantadd.Status == 2 && merchantadd.QueryCount == 2)
                                 {
-                                    merchants.Remove(check);
-                                    RedisDbconn.Instance.Clear("TmpMerchantInfo:" + merchant.UserId);
-                                    RedisDbconn.Instance.AddList("TmpMerchantInfo:" + merchant.UserId, merchants.ToArray());
+                                    PxcModels.MerchantInfo merchant = db.MerchantInfo.FirstOrDefault(m => m.Id == sign.MerchantAddInfoId);
+                                    List<PxcModels.MerchantInfo> merchants = RedisDbconn.Instance.GetList<PxcModels.MerchantInfo>("TmpMerchantInfo:" + merchant.UserId, 1, 1000000);
+                                    PxcModels.MerchantInfo check = merchants.FirstOrDefault(m => m.Id == sign.MerchantAddInfoId);
+                                    if (check != null)
+                                    {
+                                        merchants.Remove(check);
+                                        RedisDbconn.Instance.Clear("TmpMerchantInfo:" + merchant.UserId);
+                                        RedisDbconn.Instance.AddList("TmpMerchantInfo:" + merchant.UserId, merchants.ToArray());
+                                    }
                                 }
                                 deletes.Add(sign);
                             }

+ 24 - 8
AppStart/Helper/CheckWeChatSignService.cs

@@ -27,12 +27,10 @@ namespace MySystem
                     if (dic["applyment_state"].ToString() == "APPLYMENT_STATE_TO_BE_SIGNED")
                     {
                         string sign_url = dic["sign_url"].ToString();
-                        string sub_mchid = dic["sub_mchid"].ToString();
                         PxcModels.MerchantAddInfo merchantadd = db.MerchantAddInfo.FirstOrDefault(m => m.Id == sign.MerchantAddInfoId && m.Status == 0);
                         if (merchantadd != null)
                         {
                             merchantadd.Status = 1;
-                            merchantadd.SubMchid = sub_mchid;
                             string SignUrlList = function.CheckNull(merchantadd.SeoKeyword);
                             if (string.IsNullOrEmpty(SignUrlList))
                             {
@@ -65,13 +63,16 @@ namespace MySystem
                                 merchant.Status = 2;
                             }
                             db.SaveChanges();
-                            List<MerchantInfo> merchants = RedisDbconn.Instance.GetList<MerchantInfo>("TmpMerchantInfo:" + merchant.UserId, 1, 1000000);
-                            MerchantInfo check = merchants.FirstOrDefault(m => m.Id == sign.MerchantAddInfoId);
-                            if (check != null)
+                            if (merchantadd.Status == 2 && merchantadd.QueryCount == 2)
                             {
-                                merchants.Remove(check);
-                                RedisDbconn.Instance.Clear("TmpMerchantInfo:" + merchant.UserId);
-                                RedisDbconn.Instance.AddList("TmpMerchantInfo:" + merchant.UserId, merchants.ToArray());
+                                List<MerchantInfo> merchants = RedisDbconn.Instance.GetList<MerchantInfo>("TmpMerchantInfo:" + merchant.UserId, 1, 1000000);
+                                MerchantInfo check = merchants.FirstOrDefault(m => m.Id == sign.MerchantAddInfoId);
+                                if (check != null)
+                                {
+                                    merchants.Remove(check);
+                                    RedisDbconn.Instance.Clear("TmpMerchantInfo:" + merchant.UserId);
+                                    RedisDbconn.Instance.AddList("TmpMerchantInfo:" + merchant.UserId, merchants.ToArray());
+                                }
                             }
                             deletes.Add(sign);
                         }
@@ -104,6 +105,21 @@ namespace MySystem
                             deletes.Add(sign);
                         }
                     }
+                    else
+                    {
+                        string sub_mchid = "";
+                        if (dic.ContainsKey("sub_mchid"))
+                        {
+                            sub_mchid = dic["sub_mchid"].ToString();
+                            PxcModels.MerchantAddInfo merchantadd = db.MerchantAddInfo.FirstOrDefault(m => m.Id == sign.MerchantAddInfoId);
+                            if (merchantadd != null)
+                            {
+                                merchantadd.SubMchid = sub_mchid;
+                                db.SaveChanges();
+                                BothdisDbconn.Instance.Set("MerchantAddInfo:" + sign.MerchantAddInfoId, merchantadd);
+                            }
+                        }
+                    }
                 }
                 if (deletes.Count > 0)
                 {

+ 146 - 0
AppStart/Helper/ConsumerOrdersStatService.cs

@@ -0,0 +1,146 @@
+using System;
+using System.Collections.Generic;
+using Library;
+using LitJson;
+using System.Linq;
+using MySystem.PxcModels;
+
+namespace MySystem
+{
+    public class ConsumerOrdersStatService
+    {
+        public readonly static ConsumerOrdersStatService Instance = new ConsumerOrdersStatService();
+        private ConsumerOrdersStatService()
+        { }
+
+        public void Start(JobMqMsg jobInfo)
+        {
+            string content = "";
+            try
+            {
+                dosomething();
+                string Msg = "success";
+                jobInfo.Status = Msg == "success" ? 1 : 0;
+                jobInfo.Msg = Msg == "success" ? "执行完成" : Msg;
+                RabbitMQClient.Instance.SendMsg(Newtonsoft.Json.JsonConvert.SerializeObject(jobInfo), "PublicBack");
+            }
+            catch (Exception ex)
+            {
+                if (!string.IsNullOrEmpty(content))
+                {
+                    Dictionary<string, string> data = new Dictionary<string, string>();
+                    data.Add("ErrTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
+                    data.Add("ErrMsg", ex.ToString());
+                    TendisDbconn.Instance.AddList("public_err", data);
+                }
+                else
+                {
+                    TendisDbconn.Instance.AddList("public_service", DateTime.Now.ToString() + ":" + ex.ToString());
+                }
+            }
+        }
+
+        public void dosomething()
+        {
+            bool op = true;
+            while (op)
+            {
+                int OrderId = TendisDbconn.Instance.RPop<int>("ConsumerOrdersStat");
+                if (OrderId > 0)
+                {
+                    WebCMSEntities db = new WebCMSEntities();
+                    using (var tran = db.Database.BeginTransaction())
+                    {
+                        try
+                        {
+                            ConsumerOrders order = db.ConsumerOrders.FirstOrDefault(m => m.Id == OrderId);
+                            if (order != null)
+                            {
+                                order.PayMoney = order.PayMoney * 10000M;
+                                string TradeMonth = order.UpdateDate.Value.ToString("yyyyMM");
+                                MerchantInfo merchant = db.MerchantInfo.FirstOrDefault(m => m.Id == order.MerchantId);
+                                if (merchant != null)
+                                {
+                                    BothdisDbconn.Instance.AddNumber("TotalAmount:" + merchant.UserId + ":" + TradeMonth, order.PayMoney);
+                                    // 微信/支付宝
+                                    if (order.PayMode == 1)
+                                    {
+                                        BothdisDbconn.Instance.AddInt("TotalOrder:Alipay:" + merchant.UserId + ":" + TradeMonth);
+                                    }
+                                    else
+                                    {
+                                        BothdisDbconn.Instance.AddInt("TotalOrder:WeChat:" + merchant.UserId + ":" + TradeMonth);
+                                    }
+                                    // 活动、非活动
+                                    if (order.IsAct == 1)
+                                    {
+                                        BothdisDbconn.Instance.AddNumber("TotalAmount:Active:" + merchant.UserId + ":" + TradeMonth, order.PayMoney);
+                                    }
+                                    else
+                                    {
+                                        BothdisDbconn.Instance.AddNumber("TotalAmount:UnActive:" + merchant.UserId + ":" + TradeMonth, order.PayMoney);
+                                    }
+                                    // 遍历上级,累加团队数据
+                                    int UserId = merchant.UserId;
+                                    int Level = 0;
+                                    while (UserId > 0)
+                                    {
+                                        Level += 1;
+                                        Users user = db.Users.FirstOrDefault(m => m.Id == UserId);
+                                        if (user != null)
+                                        {
+                                            if (Level >= 1)
+                                            {
+                                                BothdisDbconn.Instance.AddNumber("TeamTotalAmount:" + merchant.UserId + ":" + TradeMonth, order.PayMoney);
+                                                // 微信/支付宝
+                                                if (order.PayMode == 1)
+                                                {
+                                                    BothdisDbconn.Instance.AddInt("TeamTotalOrder:Alipay:" + merchant.UserId + ":" + TradeMonth);
+                                                }
+                                                else
+                                                {
+                                                    BothdisDbconn.Instance.AddInt("TeamTotalOrder:WeChat:" + merchant.UserId + ":" + TradeMonth);
+                                                }
+                                                // 活动、非活动
+                                                if (order.IsAct == 1)
+                                                {
+                                                    BothdisDbconn.Instance.AddNumber("TeamTotalAmount:Active:" + merchant.UserId + ":" + TradeMonth, order.PayMoney);
+                                                }
+                                                else
+                                                {
+                                                    BothdisDbconn.Instance.AddNumber("TeamTotalAmount:UnActive:" + merchant.UserId + ":" + TradeMonth, order.PayMoney);
+                                                }
+                                            }
+                                            UserId = user.ParentUserId;
+                                        }
+                                        else
+                                        {
+                                            UserId = 0;
+                                        }
+                                    }
+
+                                    // 判断激活商户,从绑定音箱码开始,30天内,活动交易额满1000为激活
+                                    if (merchant.BindStatus == 1 && merchant.BindDate > DateTime.Now.AddDays(-30))
+                                    { 
+                                        
+                                    }
+                                }
+                                tran.Commit();
+                            }
+                        }
+                        catch (Exception ex)
+                        {
+                            tran.Rollback();
+                            TendisDbconn.Instance.AddList("public_service", DateTime.Now.ToString() + ":" + ex.ToString());
+                        }
+                    }
+                    db.Dispose();
+                }
+                else
+                {
+                    op = false;
+                }
+            }
+        }
+    }
+}

+ 61 - 36
AppStart/Helper/Profit/ProfitHelper.cs

@@ -2,7 +2,7 @@
 using System.Collections.Generic;
 using System.Linq;
 using System.Data;
-using MySystem.Models;
+using MySystem.PxcModels;
 using Library;
 using System.Threading;
 using Microsoft.Extensions.Hosting;
@@ -40,15 +40,20 @@ namespace MySystem
             {
                 try
                 {
-                    string orderidstring = TendisDbconn.Instance.Get<string>("ConsumerOrders:Divi:List");
+                    string orderidstring = TendisDbconn.Instance.LPop<string>("ConsumerOrders:Divi:List");
                     if (!string.IsNullOrEmpty(orderidstring))
                     {
                         int OrderId = int.Parse(function.CheckInt(orderidstring));
                         WebCMSEntities db = new WebCMSEntities();
+
                         ConsumerOrders order = db.ConsumerOrders.FirstOrDefault(m => m.Id == OrderId);
                         if (order != null)
                         {
-                            decimal PayMoney = order.PayMoney;
+                            decimal PayMoney = order.PayMoney * 10000M;
+                            if (OrderId == 81)
+                            { 
+                                PayMoney = order.PayMoney * 5000M;
+                            }
                             int MerchantId = order.MerchantId;
                             MerchantInfo merchant = db.MerchantInfo.FirstOrDefault(m => m.Id == MerchantId);
                             if (merchant != null)
@@ -62,7 +67,7 @@ namespace MySystem
                                 int IsAll = set.IsAll; //是否收全额
                                 if (IsAll == 0 && PayMoney >= MinPayMoney && GetPercent < 1)
                                 {
-                                    List<CustomTagSet> customTagSets = RedisDbconn.Instance.GetList<CustomTagSet>("CustomTagSet", 1, 1000); //获取公用配置参数集和 // TODO: 后台配置
+                                    List<CustomTagSet> customTagSets = TendisDbconn.Instance.GetList<CustomTagSet>("CustomTagSet", 1, 1000); //获取公用配置参数集和
                                     //获取参数
                                     CustomTagSet profitPercentSet = customTagSets.FirstOrDefault(m => m.Tags == "CusumerProfitPercent") ?? new CustomTagSet();
                                     decimal profitPercent = decimal.Parse(function.CheckNum(profitPercentSet.Contents)); //基于收款金额的总分润比例;
@@ -70,54 +75,75 @@ namespace MySystem
                                     decimal cusumerFeePercent = decimal.Parse(function.CheckNum(cusumerFeePercentSet.Contents)); //费率;
                                     CustomTagSet minProfitSet = customTagSets.FirstOrDefault(m => m.Tags == "MinProfit") ?? new CustomTagSet();
                                     decimal minProfit = decimal.Parse(function.CheckNum(minProfitSet.Contents)); //最小分润值;
-                                    decimal DiviMoney = PayMoney * (1 - GetPercent - cusumerFeePercent - (1 - GetPercent) * profitPercent);
+                                    decimal DiviMoney = PayMoney * (1 - GetPercent - cusumerFeePercent - profitPercent);
                                     if (DiviMoney > 0)
                                     {
                                         DiviMoney = DiviMoney / DiviPersons;
+                                        //付款人获取退款返现
+                                        decimal GetMoney = order.MaxDivi - order.CurDivi;
+                                        if (GetMoney >= DiviMoney)
+                                        {
+                                            GetMoney = DiviMoney;
+                                        }
+                                        if (GetMoney > minProfit)
+                                        {
+                                            order.CurDivi += GetMoney;
+                                            db.ConsumerProfit.Add(new ConsumerProfit()
+                                            {
+                                                CreateDate = DateTime.Now,
+                                                ConsumerId = order.ConsumerId,
+                                                MerchantId = order.MerchantId,
+                                                OrderId = OrderId,
+                                                GetMoney = GetMoney,
+                                            });
+                                        }
                                         List<int> deletes = new List<int>();
-                                        List<ConsumerOrders> orders = TendisDbconn.Instance.GetList<ConsumerOrders>("ConsumerOrders:Divi:" + MerchantId).OrderByDescending(m => m.Id).Take(DiviPersons).ToList();
-                                        foreach (ConsumerOrders suborder in orders)
+                                        long CurDiviPersons = DiviPersons;
+                                        long CurQueueCount = TendisDbconn.Instance.Count("ConsumerOrders:Divi:" + MerchantId);
+                                        if (CurDiviPersons > CurQueueCount)
                                         {
-                                            if (suborder.CurDivi < suborder.MaxDivi)
+                                            CurDiviPersons = CurQueueCount;
+                                        }
+                                        CurDiviPersons = CurDiviPersons - 1;
+                                        while (CurDiviPersons > 0)
+                                        {
+                                            ConsumerOrders suborder = TendisDbconn.Instance.RPop<ConsumerOrders>("ConsumerOrders:Divi:" + MerchantId);
+                                            if (suborder != null)
                                             {
-                                                decimal GetMoney = suborder.MaxDivi - suborder.CurDivi;
-                                                if (GetMoney >= DiviMoney)
-                                                {
-                                                    GetMoney = DiviMoney;
-                                                }
-                                                if (GetMoney > minProfit)
+                                                if (suborder.CurDivi < suborder.MaxDivi)
                                                 {
-                                                    suborder.CurDivi += GetMoney;
-                                                    int ConsumerId = suborder.ConsumerId;
-                                                    db.ConsumerProfit.Add(new ConsumerProfit()
+                                                    GetMoney = suborder.MaxDivi - suborder.CurDivi;
+                                                    if (GetMoney >= DiviMoney)
                                                     {
-                                                        ConsumerId = suborder.ConsumerId,
-                                                        MerchantId = suborder.MerchantId,
-                                                        OrderId = OrderId,
-                                                        GetMoney = GetMoney,
-                                                    });
-                                                    if (suborder.CurDivi >= suborder.MaxDivi)
+                                                        GetMoney = DiviMoney;
+                                                    }
+                                                    if (GetMoney > minProfit)
                                                     {
-                                                        deletes.Add(suborder.Id);
+                                                        suborder.CurDivi += GetMoney;
+                                                        db.ConsumerProfit.Add(new ConsumerProfit()
+                                                        {
+                                                            CreateDate = DateTime.Now,
+                                                            ConsumerId = suborder.ConsumerId,
+                                                            MerchantId = suborder.MerchantId,
+                                                            OrderId = OrderId,
+                                                            GetMoney = GetMoney,
+                                                        });
+                                                        if (suborder.CurDivi < suborder.MaxDivi)
+                                                        {
+                                                            TendisDbconn.Instance.AddList("ConsumerOrders:Divi:" + MerchantId, suborder);
+                                                        }
                                                     }
                                                 }
                                             }
+                                            CurDiviPersons -= 1;
                                         }
                                         db.SaveChanges();
-                                        foreach (int orderid in deletes)
-                                        {
-                                            ConsumerOrders deleteOrder = orders.FirstOrDefault(m => m.Id == orderid);
-                                            orders.Remove(deleteOrder);
-                                        }
-                                        TendisDbconn.Instance.Clear("ConsumerOrders:Divi:" + MerchantId);
-                                        TendisDbconn.Instance.AddList("ConsumerOrders:Divi:" + MerchantId, orders.ToArray());
-                                        // FIXME: 从头部pop,从尾部add,没有中间出局的情况,出局直接弹出(不追加)
 
                                         //创客分润
-                                        DoProfit(db, order);
+                                        // DoProfit(db, order);
 
                                         //代理商分润
-                                        AgentProfit(db, order);
+                                        // AgentProfit(db, order);
                                     }
                                 }
                             }
@@ -275,7 +301,6 @@ namespace MySystem
                     else if (trade_record.Sort == 14) OtherCondition = " and (Type=1 or Type=3)";
                     else if (trade_record.Sort == 6 || trade_record.Sort == 7 || trade_record.Sort == 18) OtherCondition = "";
                     else if (trade_record.Sort == 29) OtherCondition = " and Type=2";
-                    Models.WebCMSEntities dbv2 = new Models.WebCMSEntities();
                     PosMachines machine = dbnew.PosMachines.FirstOrDefault(m => m.PosSn == trade_record.SnNo) ?? new PosMachines();
                     if (machine.ActivationState == 0)
                     {
@@ -300,7 +325,7 @@ namespace MySystem
                         UserNav = buyuser.ParentNav,
                         UserLevel = buyuser.UserLevel,
                     });
-                    List<ProfitResult> list = StartActiveProft(dbv2, machine, trade_record.SnNo, trade_record.Sort, Users, new ActiveCheckData()
+                    List<ProfitResult> list = StartActiveProft(dbnew, machine, trade_record.SnNo, trade_record.Sort, Users, new ActiveCheckData()
                     {
                         TableName = "TransactionRecord",
                         StatField = "Money",

+ 8 - 2
AppStart/Helper/WeChatPayBackService.cs

@@ -23,7 +23,7 @@ namespace MySystem
             try
             {
                 dosomething();
-                string Msg = "success";                
+                string Msg = "success";
                 jobInfo.Status = Msg == "success" ? 1 : 0;
                 jobInfo.Msg = Msg == "success" ? "执行完成" : Msg;
                 RabbitMQClient.Instance.SendMsg(Newtonsoft.Json.JsonConvert.SerializeObject(jobInfo), "PublicBack");
@@ -44,7 +44,7 @@ namespace MySystem
             }
         }
 
-        private void dosomething()
+        public void dosomething()
         {
             bool op = true;
             while (op)
@@ -60,6 +60,7 @@ namespace MySystem
                             JsonData resource = jsonObj["resource"];
                             //开始解密
                             string WxPayResourceDecryptModel = AesGcmDecrypt(resource["associated_data"].ToString(), resource["nonce"].ToString(), resource["ciphertext"].ToString());
+                            // {\"sp_mchid\":\"1613112281\",\"sub_mchid\":\"1622024882\",\"sp_appid\":\"wxe2c051b3e46c0f6f\",\"out_trade_no\":\"2022022621562926396898863\",\"transaction_id\":\"4200001412202202267619496496\",\"trade_type\":\"JSAPI\",\"trade_state\":\"SUCCESS\",\"trade_state_desc\":\"支付成功\",\"bank_type\":\"OTHERS\",\"attach\":\"\",\"success_time\":\"2022-02-26T21:56:42+08:00\",\"payer\":{\"sp_openid\":\"omawy5W6jb0pgPfuKUVs6K3bEhzk\",\"sub_openid\":\"\"},\"amount\":{\"total\":1,\"payer_total\":1,\"currency\":\"CNY\",\"payer_currency\":\"CNY\"}}
                             JsonData orderObj = JsonMapper.ToObject(WxPayResourceDecryptModel);
                             string OrderNo = orderObj["out_trade_no"].ToString();
                             WebCMSEntities db = new WebCMSEntities();
@@ -71,6 +72,11 @@ namespace MySystem
                                 {
                                     order.Status = 1;
                                     order.UpdateDate = DateTime.Now;
+                                    db.SaveChanges();
+                                    TendisDbconn.Instance.AddList("ConsumerOrdersStat", order.Id);
+                                    TendisDbconn.Instance.AddList("ConsumerOrders:Divi:List", order.Id.ToString());
+                                    TendisDbconn.Instance.AddList("ConsumerOrders:Divi:" + order.MerchantId, order);
+                                    // ConsumerOrdersStatService.Instance.Stat(order);
                                 }
                             }
                             db.Dispose();

+ 16 - 0
AppStart/RabbitMQClient.cs

@@ -84,11 +84,26 @@ namespace MySystem
                     JobMqMsg job = Newtonsoft.Json.JsonConvert.DeserializeObject<JobMqMsg>(MsgContent);
                     CheckAlipaySignService.Instance.Start(job);
                 }
+                else if (QueueName == "WeChatPayBack")
+                {
+                    JobMqMsg job = Newtonsoft.Json.JsonConvert.DeserializeObject<JobMqMsg>(MsgContent);
+                    WeChatPayBackService.Instance.Start(job);
+                }
+                else if (QueueName == "AlipayPayBack")
+                {
+                    JobMqMsg job = Newtonsoft.Json.JsonConvert.DeserializeObject<JobMqMsg>(MsgContent);
+                    AlipayPayBackService.Instance.Start(job);
+                }
                 else if (QueueName == "ConsumerOrdersDiviList")
                 { 
                     JobMqMsg job = Newtonsoft.Json.JsonConvert.DeserializeObject<JobMqMsg>(MsgContent);
                     ReceiveProfitService.Instance.Start(job);
                 }
+                else if (QueueName == "ConsumerOrdersStat")
+                {
+                    JobMqMsg job = Newtonsoft.Json.JsonConvert.DeserializeObject<JobMqMsg>(MsgContent);
+                    ConsumerOrdersStatService.Instance.Start(job);
+                }
                 else if (QueueName == "MerchantConfirmList")
                 {
                     MerchantConfirmService.Instance.Start(MsgContent);
@@ -130,6 +145,7 @@ namespace MySystem
                     JobMqMsg job = Newtonsoft.Json.JsonConvert.DeserializeObject<JobMqMsg>(MsgContent);
                     FluxService.Instance.Start(job);
                 }
+                // TODO: 需要等待回复jobserver成功才能清除
                 channel.BasicAck(e.DeliveryTag, true); //收到回复后,RabbitMQ会直接在队列中删除这条消息
             };
             channel.BasicConsume(QueueName, false, consumer);

+ 4 - 0
AppStart/TendisDbconn.cs

@@ -96,6 +96,10 @@ namespace MySystem
         {
             return csredis.RPop<T>(key);
         }
+        public T LPop<T>(string key)
+        {
+            return csredis.LPop<T>(key);
+        }
         #endregion
 
         #region 添加集合对象

+ 6 - 1
AppStart/WeChatFunction.cs

@@ -159,7 +159,12 @@ namespace MySystem
             //结算规则
             Dictionary<string, object> settlement_info = new Dictionary<string, object>();
             settlement_info.Add("settlement_id", info.SettlementId); //入驻结算规则ID
-            settlement_info.Add("qualification_type", info.QualificationType); //所属行业
+            string QualificationType = function.CheckNull(info.QualificationType);
+            if (QualificationType.Contains(","))
+            {
+                QualificationType = QualificationType.Split(',')[0];
+            }
+            settlement_info.Add("qualification_type", QualificationType); //所属行业
             if (!string.IsNullOrEmpty(info.Qualifications))
             {
                 List<string> Qualifications = new List<string>();

+ 20 - 7
Controllers/HomeController.cs

@@ -23,13 +23,6 @@ namespace MySystem.Controllers
 
         public IActionResult Index()
         {
-            // string data = "{\"Id\":\"6\",\"Sort\":\"0\",\"QueryCount\":\"0\",\"Status\":\"0\",\"CreateDate\":\"\",\"UpdateDate\":\"\",\"SeoTitle\":\"\",\"SeoKeyword\":\"\",\"SeoDescription\":\"\",\"AgentNo\":\"\",\"SnNo\":\"00005702830310395949\",\"UpdateTime\":\"\",\"CreateTime\":\"01/06/2022 19:46:12\",\"Remark\":\"商户入驻\",\"City\":\"成都市\",\"Province\":\"四川省\",\"ProductType\":\"6\",\"MerStatus\":\"\",\"MerAuditDate\":\"\",\"MerRegDate\":\"01/06/2022 19:46:12\",\"MerIdcardNo\":\"624369198812120369\",\"MerMobile\":\"13584849565\",\"MerRealName\":\"唐明皇\",\"AgentName\":\"\",\"MerName\":\"测试商户\",\"MerNo\":\"5678679878\"}";
-            // string data = "{\"Id\":\"8\",\"Sort\":\"0\",\"QueryCount\":\"0\",\"Status\":\"0\",\"CreateDate\":\"\",\"UpdateDate\":\"\",\"SeoTitle\":\"\",\"SeoKeyword\":\"\",\"SeoDescription\":\"\",\"ProductType\":\"6\",\"AgentNo\":\"\",\"Remark\":\"机具激活\",\"BizEnterName\":\"\",\"BizEnterNo\":\"\",\"MerIdcardNo\":\"624369198812120369\",\"MerRealName\":\"唐明皇\",\"ActivateDate\":\"01/07/2022 17:03:39\",\"ActivateStatus\":\"1\",\"AssessMonthCount\":\"1\",\"AssessMonth\":\"202201\",\"MerRegDate\":\"01/07/2022 17:03:39\",\"SnNo\":\"00005702830310395949\",\"MerMobile\":\"13584849565\",\"MerName\":\"测试商户\",\"MerNo\":\"5678679878\"}";
-            // string data = "{\"Id\":\"2\",\"Sort\":\"0\",\"QueryCount\":\"0\",\"Status\":\"0\",\"CreateDate\":\"\",\"UpdateDate\":\"\",\"SeoTitle\":\"\",\"SeoKeyword\":\"\",\"SeoDescription\":\"\",\"AgentNo\":\"\",\"ProductType\":\"6\",\"Remark\":\"刷卡交易\",\"SettleMethod\":\"\",\"SettleFee\":\"0.00\",\"BankCardNo\":\"\",\"ReceiptType\":\"KuaiPOS\",\"IsStoreCashier\":\"2\",\"DigAmt\":\"298.00\",\"DigAmtFlag\":\"1\",\"MerMobile\":\"13584849565\",\"DeviceType\":\"1\",\"TradeSnNo\":\"00005702830310395949\",\"BankCardType\":\"0001\",\"SerEntryMode\":\"021\",\"TradeType\":\"1\",\"TradeTime\":\"174840\",\"TradeDate\":\"20220107\",\"ErrorMsg\":\"\",\"ErrorCode\":\"00\",\"TradeStatus\":\"1\",\"DiscountRateFlag\":\"1\",\"BankAuthCode\":\"46498763614\",\"TradeReferNo\":\"T0000002343445654656\",\"TradeAmount\":\"8000.00\",\"MerName\":\"测试商户\",\"TradeSerialNo\":\"T0000002343445654656\",\"MerNo\":\"5678679878\"}";
-            // string data = "{\"Id\":\"2\",\"Sort\":\"0\",\"QueryCount\":\"0\",\"Status\":\"0\",\"CreateDate\":\"\",\"UpdateDate\":\"\",\"SeoTitle\":\"\",\"SeoKeyword\":\"\",\"SeoDescription\":\"\",\"AgentNo\":\"\",\"ProductType\":\"6\",\"DeviceNetwork\":\"4G\",\"TerminalNo\":\"554569879797\",\"InputModel\":\"\",\"KqTradeSeq\":\"\",\"BillType\":\"1\",\"SourceType\":\"1\",\"BizEnterName\":\"\",\"BizEnterNo\":\"\",\"SmallDouble\":\"1\",\"SettleFee\":\"1.00\",\"SettleMethod\":\"1\",\"FeeAmount\":\"10.00\",\"BankCardNo\":\"3565978645364\",\"DigAmt\":\"298.00\",\"DigAmtFlag\":\"1\",\"TradeSnNo\":\"00005702830310395949\",\"BankCardType\":\"0001\",\"TradeTime\":\"103914\",\"TradeDate\":\"20220108\",\"TradeStatus\":\"1\",\"TradeAmount\":\"8000.00\",\"MerName\":\"测试商户\",\"TradeSerialNo\":\"T0000002343445654656\",\"MerNo\":\"5678679878\"}";
-            // string data = "{\"Id\":\"1\",\"Sort\":\"0\",\"QueryCount\":\"0\",\"Status\":\"0\",\"CreateDate\":\"\",\"UpdateDate\":\"\",\"SeoTitle\":\"\",\"SeoKeyword\":\"\",\"SeoDescription\":\"\",\"UpdateTime\":\"01/08/2022 14:11:23\",\"CreateTime\":\"01/08/2022 14:11:23\",\"Remark\":\"商户在网达标\",\"NewFlag\":\"1\",\"MerStdStatus\":\"1\",\"MerStdDate\":\"01/08/2022 14:11:23\",\"MerStdStage\":\"1\",\"ActName\":\"测试活动\",\"ActNo\":\"1\",\"MerSnNo\":\"00005702830310395949\",\"MerBindDate\":\"01/08/2022 14:11:23\",\"ProductType\":\"6\",\"MerName\":\"测试商户\",\"AgentName\":\"快闪刷\",\"MerNo\":\"5678679878\"}";
-            // Dictionary<string, string> dic = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, string>>(data);
-            // ProfitHelper.Instance.StartListenStandardDo(dic);
             return View();
         }
 
@@ -62,6 +55,26 @@ namespace MySystem.Controllers
             return "ok";
         }
 
+        public string test()
+        {
+            PxcModels.WebCMSEntities db = new PxcModels.WebCMSEntities();
+            PxcModels.ConsumerOrders order = db.ConsumerOrders.FirstOrDefault(m => m.Id == 80);
+            if (order != null)
+            {
+                TendisDbconn.Instance.AddList("ConsumerOrders:Divi:List", order.Id.ToString());
+                TendisDbconn.Instance.AddList("ConsumerOrders:Divi:" + order.MerchantId, order);
+            }
+            order = db.ConsumerOrders.FirstOrDefault(m => m.Id == 81);
+            if (order != null)
+            {
+                TendisDbconn.Instance.AddList("ConsumerOrders:Divi:List", order.Id.ToString());
+                TendisDbconn.Instance.AddList("ConsumerOrders:Divi:" + order.MerchantId, order);
+            }
+            ProfitHelper.Instance.StartListenTradeDo();
+            db.Dispose();
+            return "ok";
+        }
+
         public string userqrcode(int uid)
         {
             WebCMSEntities db = new WebCMSEntities();

+ 11 - 0
Models/ConsumerOrderForNo.cs

@@ -0,0 +1,11 @@
+using System;
+using System.Collections.Generic;
+
+namespace MySystem.Models
+{
+    public partial class ConsumerOrderForNo
+    {
+        public string OrderNo { get; set; }
+        public int OrderIds { get; set; }
+    }
+}

+ 1 - 0
Models/ConsumerOrders.cs

@@ -26,5 +26,6 @@ namespace MySystem.Models
         public int MerchantId { get; set; }
         public decimal CurDivi { get; set; }
         public decimal MaxDivi { get; set; }
+        public ulong IsAct { get; set; }
     }
 }

+ 2 - 0
Models/MerchantInfo.cs

@@ -34,5 +34,7 @@ namespace MySystem.Models
         public DateTime? LastAddConsumerDate { get; set; }
         public string ParentUserNav { get; set; }
         public int UserId { get; set; }
+        public DateTime? BindDate { get; set; }
+        public int BindStatus { get; set; }
     }
 }

+ 11 - 0
Models/OpenBankCityTable.cs

@@ -0,0 +1,11 @@
+using System;
+using System.Collections.Generic;
+
+namespace MySystem.Models
+{
+    public partial class OpenBankCityTable
+    {
+        public string CityName { get; set; }
+        public string Code { get; set; }
+    }
+}

+ 11 - 0
Models/OpenBankTable.cs

@@ -0,0 +1,11 @@
+using System;
+using System.Collections.Generic;
+
+namespace MySystem.Models
+{
+    public partial class OpenBankTable
+    {
+        public string BankName { get; set; }
+        public string BankCode { get; set; }
+    }
+}

+ 56 - 0
Models/WebCMSEntities.cs

@@ -28,6 +28,7 @@ namespace MySystem.Models
         public virtual DbSet<BankInfo> BankInfo { get; set; }
         public virtual DbSet<Col> Col { get; set; }
         public virtual DbSet<ConsumerOpenIds> ConsumerOpenIds { get; set; }
+        public virtual DbSet<ConsumerOrderForNo> ConsumerOrderForNo { get; set; }
         public virtual DbSet<ConsumerOrders> ConsumerOrders { get; set; }
         public virtual DbSet<ConsumerProfit> ConsumerProfit { get; set; }
         public virtual DbSet<Consumers> Consumers { get; set; }
@@ -76,6 +77,8 @@ namespace MySystem.Models
         public virtual DbSet<MsgSms> MsgSms { get; set; }
         public virtual DbSet<MsgSmsSet> MsgSmsSet { get; set; }
         public virtual DbSet<MsgTemplate> MsgTemplate { get; set; }
+        public virtual DbSet<OpenBankCityTable> OpenBankCityTable { get; set; }
+        public virtual DbSet<OpenBankTable> OpenBankTable { get; set; }
         public virtual DbSet<OpenReward> OpenReward { get; set; }
         public virtual DbSet<OpenRewardDetail> OpenRewardDetail { get; set; }
         public virtual DbSet<OpenSnSnapshot> OpenSnSnapshot { get; set; }
@@ -1140,6 +1143,19 @@ namespace MySystem.Models
                 entity.Property(e => e.ConsumerId).HasColumnType("int(11)");
             });
 
+            modelBuilder.Entity<ConsumerOrderForNo>(entity =>
+            {
+                entity.HasKey(e => e.OrderNo)
+                    .HasName("PRIMARY");
+
+                entity.Property(e => e.OrderNo)
+                    .HasColumnType("varchar(50)")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
+                entity.Property(e => e.OrderIds).HasColumnType("int(11)");
+            });
+
             modelBuilder.Entity<ConsumerOrders>(entity =>
             {
                 entity.Property(e => e.Id).HasColumnType("int(11)");
@@ -1155,6 +1171,10 @@ namespace MySystem.Models
 
                 entity.Property(e => e.CurDivi).HasColumnType("decimal(18,2)");
 
+                entity.Property(e => e.IsAct)
+                    .HasColumnType("bit(1)")
+                    .HasDefaultValueSql("b'0'");
+
                 entity.Property(e => e.MaxDivi).HasColumnType("decimal(18,2)");
 
                 entity.Property(e => e.MerchantId).HasColumnType("int(11)");
@@ -3868,6 +3888,10 @@ namespace MySystem.Models
                     .HasCharSet("utf8")
                     .HasCollation("utf8_general_ci");
 
+                entity.Property(e => e.BindDate).HasColumnType("datetime");
+
+                entity.Property(e => e.BindStatus).HasColumnType("int(11)");
+
                 entity.Property(e => e.CreateDate).HasColumnType("datetime");
 
                 entity.Property(e => e.CreateMan)
@@ -4963,6 +4987,38 @@ namespace MySystem.Models
                 entity.Property(e => e.Version).HasColumnType("int(11)");
             });
 
+            modelBuilder.Entity<OpenBankCityTable>(entity =>
+            {
+                entity.HasKey(e => e.CityName)
+                    .HasName("PRIMARY");
+
+                entity.Property(e => e.CityName)
+                    .HasColumnType("varchar(100)")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
+                entity.Property(e => e.Code)
+                    .HasColumnType("varchar(20)")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+            });
+
+            modelBuilder.Entity<OpenBankTable>(entity =>
+            {
+                entity.HasKey(e => e.BankName)
+                    .HasName("PRIMARY");
+
+                entity.Property(e => e.BankName)
+                    .HasColumnType("varchar(200)")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
+                entity.Property(e => e.BankCode)
+                    .HasColumnType("varchar(50)")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+            });
+
             modelBuilder.Entity<OpenReward>(entity =>
             {
                 entity.Property(e => e.Id).HasColumnType("int(11)");

+ 1 - 0
PxcModels/ConsumerOrders.cs

@@ -26,5 +26,6 @@ namespace MySystem.PxcModels
         public string OrderNo { get; set; }
         public int ConsumerId { get; set; }
         public int MerchantId { get; set; }
+        public ulong IsAct { get; set; }
     }
 }

+ 2 - 0
PxcModels/MerchantInfo.cs

@@ -34,5 +34,7 @@ namespace MySystem.PxcModels
         public string Areas { get; set; }
         public string Mobile { get; set; }
         public string Name { get; set; }
+        public DateTime? BindDate { get; set; }
+        public int BindStatus { get; set; }
     }
 }

+ 8 - 0
PxcModels/WebCMSEntities.cs

@@ -1183,6 +1183,10 @@ namespace MySystem.PxcModels
 
                 entity.Property(e => e.CurDivi).HasColumnType("decimal(18,2)");
 
+                entity.Property(e => e.IsAct)
+                    .HasColumnType("bit(1)")
+                    .HasDefaultValueSql("b'0'");
+
                 entity.Property(e => e.MaxDivi).HasColumnType("decimal(18,2)");
 
                 entity.Property(e => e.MerchantId).HasColumnType("int(11)");
@@ -3908,6 +3912,10 @@ namespace MySystem.PxcModels
                     .HasCharSet("utf8")
                     .HasCollation("utf8_general_ci");
 
+                entity.Property(e => e.BindDate).HasColumnType("datetime");
+
+                entity.Property(e => e.BindStatus).HasColumnType("int(11)");
+
                 entity.Property(e => e.CreateDate).HasColumnType("datetime");
 
                 entity.Property(e => e.CreateMan)

+ 9 - 8
Startup.cs

@@ -213,14 +213,15 @@ namespace MySystem
 
 
 
-            RabbitMQClient.Instance.StartReceive("MerchantConfirmList");
-            RabbitMQClient.Instance.StartReceive("MakeReferenceQrCode");
-            RabbitMQClient.Instance.StartReceive("CheckWeChatSign");
-            RabbitMQClient.Instance.StartReceive("CheckAlipaySign");
-            RabbitMQClient.Instance.StartReceive("PublicMainServer");
-            RabbitMQClient.Instance.StartReceive("DeleteMySqlData");
-            RabbitMQClient.Instance.StartReceive("WeChatPayBack");
-            RabbitMQClient.Instance.StartReceive("AlipayPayBack");
+            // RabbitMQClient.Instance.StartReceive("MerchantConfirmList");
+            // RabbitMQClient.Instance.StartReceive("MakeReferenceQrCode");
+            // RabbitMQClient.Instance.StartReceive("CheckWeChatSign");
+            // RabbitMQClient.Instance.StartReceive("CheckAlipaySign");
+            // RabbitMQClient.Instance.StartReceive("PublicMainServer");
+            // RabbitMQClient.Instance.StartReceive("DeleteMySqlData");
+            // RabbitMQClient.Instance.StartReceive("WeChatPayBack");
+            // RabbitMQClient.Instance.StartReceive("AlipayPayBack");
+            // RabbitMQClient.Instance.StartReceive("ConsumerOrdersStat");
 
 
 

BIN
bin/Debug/netcoreapp3.0/MySystem.dll


BIN
bin/Debug/netcoreapp3.0/MySystem.pdb


+ 20 - 0
bin/Debug/netcoreapp3.0/log/Global全局异常处理日志/2022/2/26/content.log

@@ -0,0 +1,20 @@
+02/26/2022 22:06:14
+Unable to read data from the transport connection: Operation timed out.
+   at CSRedis.CSRedisClient.GetAndExecute[T](RedisClientPool pool, Func`2 handler, Int32 jump, Int32 errtimes)
+   at CSRedis.CSRedisClient.ExecuteScalar[T](String key, Func`3 hander)
+   at CSRedis.CSRedisClient.RPop[T](String key)
+   at MySystem.TendisDbconn.RPop[T](String key) in /Users/Shared/Previously Relocated Items/Security/MyDisk/我的/项目/myprogram_vs2019/KeXiaoShuang/MainServer/AppStart/TendisDbconn.cs:line 97
+   at MySystem.WeChatPayBackService.dosomething() in /Users/Shared/Previously Relocated Items/Security/MyDisk/我的/项目/myprogram_vs2019/KeXiaoShuang/MainServer/AppStart/Helper/WeChatPayBackService.cs:line 52
+   at MySystem.Controllers.HomeController.test() in /Users/Shared/Previously Relocated Items/Security/MyDisk/我的/项目/myprogram_vs2019/KeXiaoShuang/MainServer/Controllers/HomeController.cs:line 60
+   at lambda_method(Closure , Object , Object[] )
+   at Microsoft.Extensions.Internal.ObjectMethodExecutor.Execute(Object target, Object[] parameters)
+   at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.SyncObjectResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments)
+   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeActionMethodAsync()
+   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
+   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeNextActionFilterAsync()
+--- End of stack trace from previous location where exception was thrown ---
+   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Rethrow(ActionExecutedContextSealed context)
+   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
+   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeInnerFilterAsync()
+--- End of stack trace from previous location where exception was thrown ---
+   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeNextExceptionFilterAsync>g__Awaited|25_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)

BIN
bin/release/netcoreapp3.0/MySystem.dll


BIN
bin/release/netcoreapp3.0/MySystem.pdb


BIN
bin/release/netcoreapp3.0/publish/MySystem.dll


BIN
bin/release/netcoreapp3.0/publish/MySystem.pdb


BIN
obj/Debug/netcoreapp3.0/MySystem.dll


BIN
obj/Debug/netcoreapp3.0/MySystem.pdb


BIN
obj/release/netcoreapp3.0/MySystem.dll


BIN
obj/release/netcoreapp3.0/MySystem.pdb