Explorar o código

增加补分账队列

lcl hai 1 ano
pai
achega
1e80012de9

+ 1 - 0
Models/Main/ConsumerOrders.cs

@@ -31,5 +31,6 @@ namespace MySystem.Models.Main
         public decimal MerchantActualAmount { get; set; }
         public int DivideFlag { get; set; }
         public DateTime? DivideDate { get; set; }
+        public string DivideLog { get; set; }
     }
 }

+ 1 - 1
Models/Main/MerchantInfo.cs

@@ -45,8 +45,8 @@ namespace MySystem.Models.Main
         public decimal AllocationAmount { get; set; }
         public decimal ActMaxAmount { get; set; }
         public decimal ActCurrentAmount { get; set; }
+        public int IsAct { get; set; }
         public int ExamineStatus { get; set; }
         public int Months { get; set; }
-        public int IsAct { get; set; }
     }
 }

+ 6 - 0
Models/Main/WebCMSEntities.cs

@@ -2265,6 +2265,12 @@ namespace MySystem.Models.Main
                     .HasColumnType("int(11)")
                     .HasComment("分账标记");
 
+                entity.Property(e => e.DivideLog)
+                    .HasColumnType("mediumtext")
+                    .HasComment("分账结果日志")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
                 entity.Property(e => e.IsAct)
                     .HasColumnType("bit(1)")
                     .HasDefaultValueSql("b'0'");

+ 1 - 0
Startup.cs

@@ -155,6 +155,7 @@ namespace MySystem
                 HaoDaAuthQueryHelper.Instance.Start(); //查询实名认证状态
                 WeChatPayBackService.Instance.Start(); //支付回调
                 WeChatPayBackService.Instance.StartProfitShare(); //分账队列
+                WeChatPayBackService.Instance.StartDivi(); //补分账
                 ProfitHelper.Instance.StartListenTrade(); //返现队列-支付宝
                 ProfitHelper.Instance.StartListenWxTrade(); //返现队列-微信
 

+ 71 - 0
Util/HaoDa/WeChatPayBackService.cs

@@ -162,6 +162,7 @@ namespace MySystem
                                     servicefee = servicefee * 100;
                                     string seviceAmount = servicefee.ToString("f0"); //服务费
                                     string result = HaoDaHelper.Instance.OrderDivideAccounts(OrderDivideAccountsUtil.AddValue(applyNo, mchtNo, orderNo, acctNo, sacctNo, acctType, amount.ToString().Split('.')[0], seviceAmount));
+                                    order.DivideLog = "请求分账日志:" + result;
                                     if(result.Contains("\"resultCode\":\"0\"") && (result.Contains("分账金额不足") || result.Contains("不存在")))
                                     {
                                         Status = 1;
@@ -197,5 +198,75 @@ namespace MySystem
                 Thread.Sleep(2000);
             }
         }
+
+
+
+
+
+
+
+
+        //触发分账接口
+        public void StartDivi()
+        {
+            Thread th = new Thread(ListenDivi);
+            th.IsBackground = true;
+            th.Start();
+        }
+
+        public void ListenDivi()
+        {
+            bool op = true;
+            while (op)
+            {
+                string content = RedisDbconn.Instance.RPop<string>("AddHdDiviQueue");
+                if (!string.IsNullOrEmpty(content))
+                {
+                    try
+                    {
+                        int id = int.Parse(function.CheckInt(content));
+                        WebCMSEntities db = new WebCMSEntities();
+                        ConsumerOrders order = db.ConsumerOrders.FirstOrDefault(m => m.Id == id);
+                        if (order != null)
+                        {
+                            MerchantInfo merchant = db.MerchantInfo.FirstOrDefault(m => m.Id == order.MerchantId) ?? new MerchantInfo();
+                            MerchantParamSet set = db.MerchantParamSet.FirstOrDefault(m => m.Id == order.MerchantId) ?? new MerchantParamSet();
+                            if (order.IsAct == 1 && order.PayMoney >= set.MinPayMoney)
+                            {
+                                MerchantAddInfo merchantAdd = db.MerchantAddInfo.FirstOrDefault(m => m.Id == order.MerchantId) ?? new MerchantAddInfo();
+                                //发起分账
+                                decimal fee = order.PayMoney;
+                                string applyNo = "FZ" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + function.get_Random(8); //批次号
+                                string mchtNo = merchantAdd.OutMchtNo; //慧掌柜商户号
+                                string orderNo = order.SeoTitle; //交易订单号(好哒平台订单号,G开头)
+                                string acctNo = AppConfig.Haoda.AcctNo; //账户号,分账接收方账户号
+                                string sacctNo = merchantAdd.MchtNo; //账户号,收款商户号
+                                string acctType = "0"; //账户类型(0:商户收款账户(大B),1:分账接收方账户(小B))
+                                decimal hdfee = 0.0038M * order.PayMoney;
+                                hdfee = decimal.Parse(hdfee.ToString("f2"));
+                                decimal servicefee = 0.01M * order.PayMoney;
+                                servicefee = decimal.Parse(servicefee.ToString("f2"));
+                                decimal amount = order.PayMoney - hdfee - servicefee;
+                                amount = amount * 100; //金额(分)
+                                servicefee = servicefee * 100;
+                                string seviceAmount = servicefee.ToString("f0"); //服务费
+                                string result = HaoDaHelper.Instance.OrderDivideAccounts(OrderDivideAccountsUtil.AddValue(applyNo, mchtNo, orderNo, acctNo, sacctNo, acctType, amount.ToString().Split('.')[0], seviceAmount));
+                                order.DivideLog = "请求分账日志:" + result;
+                                db.SaveChanges();
+                            }
+                        }
+                        db.Dispose();
+                    }
+                    catch (Exception ex)
+                    {
+                        LogHelper.Instance.WriteLog(DateTime.Now.ToString() + ":" + ex.ToString(), "补分账异常");
+                    }
+                }
+                else
+                {
+                    Thread.Sleep(2000);
+                }
+            }
+        }
     }
 }