Bladeren bron

增加退款执行服务程序、退款计算服务程序
增加统计激活商户数
增加生成邀请二维码背景图,并合成成功
退款返现算法加事务处理

lichunlei 3 jaren geleden
bovenliggende
commit
1d03c6bb45

+ 98 - 0
AppStart/Helper/ConsumerOrdersReturnDoService.cs

@@ -0,0 +1,98 @@
+using System;
+using System.Collections.Generic;
+using Library;
+using LitJson;
+using System.Linq;
+using MySystem.PxcModels;
+
+namespace MySystem
+{
+    public class ConsumerOrdersReturnDoService
+    {
+        public readonly static ConsumerOrdersReturnDoService Instance = new ConsumerOrdersReturnDoService();
+        private ConsumerOrdersReturnDoService()
+        { }
+
+        public void Start(JobMqMsg jobInfo)
+        {
+            string content = "";
+            try
+            {
+                DoRefund();
+                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());
+                }
+            }
+        }
+
+        private void DoRefund()
+        {
+            bool op = true;
+            while (op)
+            {
+                RefundItem item = TendisDbconn.Instance.RPop<RefundItem>("ConsumerOrdersStat");
+                if (item != null)
+                {
+                    bool success = false;
+                    WebCMSEntities db = new WebCMSEntities();
+                    if (item.PayMode == 1)
+                    {
+                        string resultString = new AlipayFunction().Refund(item.TradeNo, item.RefundMoney.ToString("f2"), "202202BB4fc8c2c03c914f2f87b6c678a77d7C03");
+                        JsonData jsonObj = JsonMapper.ToObject(resultString);
+                        if (jsonObj["alipay_trade_refund_response"]["code"].ToString() == "10000")
+                        { 
+                            success = true;
+                        }
+                    }
+                    else if (item.PayMode == 2)
+                    {
+                        string AppId = "wxe2c051b3e46c0f6f";
+                        string MchId = "1613112281";
+                        MerchantAddInfo merchantAdd = db.MerchantAddInfo.FirstOrDefault(m => m.Id == item.MerchantId) ?? new MerchantAddInfo();
+                        MerchantInfo merchant = db.MerchantInfo.FirstOrDefault(m => m.Id == item.MerchantId) ?? new MerchantInfo();
+                        string SubMchId = merchantAdd.SubMchid;
+                        string Description = merchant.Name;
+                        string RefundNo = DateTime.Now.ToString("yyyyMMddHHmmssfff") + function.get_Random(8);
+                        Dictionary<string, string> dic = new WeChatFunction().Refund(AppId, MchId, SubMchId, item.RefundMoney, item.TotalMoney, item.TradeNo, RefundNo);
+                        if (dic.ContainsKey("status"))
+                        {
+                            if (dic["status"] == "SUCCESS")
+                            {
+                                success = true;
+                            }
+                        }
+                    }
+                    if (success)
+                    {
+                        ConsumerOrders order = db.ConsumerOrders.FirstOrDefault(m => m.Id == item.ProfitId);
+                        if (order != null)
+                        {
+                            order.Status = 1;
+                            db.SaveChanges();
+                        }
+                    }
+                    db.Dispose();
+                }
+                else
+                {
+                    op = false;
+                }
+            }
+        }
+    }
+}

+ 43 - 0
AppStart/Helper/ConsumerOrdersReturnStatService.cs

@@ -0,0 +1,43 @@
+using System;
+using System.Collections.Generic;
+using Library;
+using LitJson;
+using System.Linq;
+using MySystem.PxcModels;
+
+namespace MySystem
+{
+    public class ConsumerOrdersReturnStatService
+    {
+        public readonly static ConsumerOrdersReturnStatService Instance = new ConsumerOrdersReturnStatService();
+        private ConsumerOrdersReturnStatService()
+        { }
+
+        public void Start(JobMqMsg jobInfo)
+        {
+            string content = "";
+            try
+            {
+                ProfitHelper.Instance.StartListenTradeDo();
+                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());
+                }
+            }
+        }
+    }
+}

+ 13 - 3
AppStart/Helper/ConsumerOrdersStatService.cs

@@ -61,6 +61,13 @@ namespace MySystem
                                 MerchantInfo merchant = db.MerchantInfo.FirstOrDefault(m => m.Id == order.MerchantId);
                                 if (merchant != null)
                                 {
+                                    merchant.LastConsumeDate = order.UpdateDate;
+                                    merchant.TotalConsumeCount += 1;
+                                    merchant.TotalOrder += 1;
+                                    db.SaveChanges();
+
+                                    BothdisDbconn.Instance.AddNumber("TotalAmount:" + merchant.UserId, order.PayMoney);
+                                    decimal TotalAmount = BothdisDbconn.Instance.Get<decimal>("TotalAmount:" + merchant.UserId);
                                     BothdisDbconn.Instance.AddNumber("TotalAmount:" + merchant.UserId + ":" + TradeMonth, order.PayMoney);
                                     // 微信/支付宝
                                     if (order.PayMode == 1)
@@ -120,9 +127,12 @@ namespace MySystem
                                     }
 
                                     // 判断激活商户,从绑定音箱码开始,30天内,活动交易额满1000为激活
-                                    if (merchant.BindStatus == 1 && merchant.BindDate > DateTime.Now.AddDays(-30))
-                                    { 
-                                        
+                                    if (merchant.BindStatus == 1 && merchant.BindDate > DateTime.Now.AddDays(-30) && TotalAmount >= 1000)
+                                    {
+                                        merchant.ActivationStatus = 1;
+                                        merchant.ActivationDate = DateTime.Now;
+                                        db.SaveChanges();
+                                        BothdisDbconn.Instance.AddInt("TotalActMerchant:" + merchant.UserId + ":" + DateTime.Now.ToString("yyyyMM"));
                                     }
                                 }
                                 tran.Commit();

+ 78 - 2
AppStart/Helper/MakeReferenceQrCodeService.cs

@@ -1,9 +1,11 @@
 using System;
 using System.Collections.Generic;
 using System.Linq;
-using MySystem.Models;
+using MySystem.PxcModels;
 using Library;
 using LitJson;
+using System.Drawing.Imaging;
+using System.Drawing;
 
 namespace MySystem
 {
@@ -25,7 +27,11 @@ namespace MySystem
                     if (user != null)
                     { 
                         string path = function.CreateQRCode2(ConfigurationManager.AppSettings["SourceHost"].ToString() + "p/user-inviteregist-1?Id=" + user.Id, function.MD5_16(user.Id.ToString() + "8745"), "/bsserver_com/static/ReferenceQrCode/");
-                        user.ReferenceQrCode = path.Replace("//", "/").Replace("bsserver_com/", "");
+                        path = path.Replace("//", "/");
+                        string resultpath = "/bsserver_com/static/ReferenceQrCode/" + function.MD5_16(user.Id.ToString() + "8745") + "Pic.png";
+                        MakeQRCode(function.getPath("/static/QrCodeBg.png"), function.getPath(path), function.getPath(resultpath), user);
+                        resultpath = resultpath.Replace("bsserver_com/", "");
+                        user.ReferenceQrCode = resultpath;
                         db.SaveChanges();
                         PxcModels.WebCMSEntities pxcdb = new PxcModels.WebCMSEntities();
                         PxcModels.Users tmpuser = pxcdb.Users.FirstOrDefault(m => m.Id == UserId);
@@ -50,5 +56,75 @@ namespace MySystem
                 TendisDbconn.Instance.AddList("public_service", DateTime.Now.ToString() + ":" + ex.ToString());
             }
         }
+
+        public void MakeQRCode(string sourcepath, string qrcode, string resultpath, Users us)
+        {
+            System.Drawing.Image image = System.Drawing.Image.FromFile(sourcepath);
+            System.Drawing.Image qrcodepic = System.Drawing.Image.FromFile(qrcode);
+            //获取图片宽高
+            int Width = image.Width;
+            int Height = image.Height;
+            //创建一个位图文件
+            Bitmap BitmapResult = new Bitmap(Width, Height, PixelFormat.Format24bppRgb);
+            //在位图文件上填充一个矩形框
+            Graphics Grp = Graphics.FromImage(BitmapResult);
+            System.Drawing.Rectangle Rec = new System.Drawing.Rectangle(0, 0, Width, Height);
+            //定义一个白色的画刷
+            SolidBrush mySolidBrush = new SolidBrush(System.Drawing.Color.White);
+            //Grp.Clear(Color.White);
+            //将矩形框填充为白色
+            // Grp.FillRectangle(mySolidBrush, Rec);
+            //向矩形框内填充Img
+
+            Grp.DrawImage(image, 0, 0, Rec, GraphicsUnit.Pixel);
+            Grp.DrawImage(qrcodepic, 340, 605, 326, 326);
+
+            //写字
+            Font f = new Font("PingFang SC", 34);
+            Font f2 = new Font("PingFang SC", 30);
+            Brush b = new SolidBrush(Color.FromArgb(255, Color.White));
+            Brush b2 = new SolidBrush(Color.FromArgb(255, Color.White));
+            StringFormat sf = new StringFormat();
+            sf.LineAlignment = StringAlignment.Center;
+            sf.Alignment = StringAlignment.Center;
+            Grp.DrawString(us.RealName, f, b, new RectangleF()
+            {
+                X = 0,
+                Y = 980,
+                Width = Width,
+                Height = 50,
+            }, sf);
+            Grp.DrawString("推荐码:" + us.MakerCode, f2, b2, new RectangleF()
+            {
+                X = 0,
+                Y = 1060,
+                Width = Width,
+                Height = 50,
+            }, sf);
+            //返回位图文件
+            ImageCodecInfo jpgEncoder = GetEncoder(ImageFormat.Png);
+            System.Drawing.Imaging.Encoder myEncoder = System.Drawing.Imaging.Encoder.Quality;
+            EncoderParameters myEncoderParameters = new EncoderParameters(1);
+            EncoderParameter myEncoderParameter = new EncoderParameter(myEncoder, 50L);//这里的50L用来设置保存时的图片质量
+            myEncoderParameters.Param[0] = myEncoderParameter;
+            BitmapResult.Save(resultpath, jpgEncoder, myEncoderParameters);
+            image.Dispose();
+            qrcodepic.Dispose();
+            Grp.Dispose();
+            BitmapResult.Dispose();
+        }
+
+        private ImageCodecInfo GetEncoder(ImageFormat format)
+        {
+            ImageCodecInfo[] codecs = ImageCodecInfo.GetImageDecoders();
+            foreach (ImageCodecInfo codec in codecs)
+            {
+                if (codec.FormatID == format.Guid)
+                {
+                    return codec;
+                }
+            }
+            return null;
+        }
     }
 }

+ 114 - 96
AppStart/Helper/Profit/ProfitHelper.cs

@@ -31,134 +31,152 @@ namespace MySystem
         }
         #endregion
 
-        #region 消费队列
+        #region 消费队列(执行消费退款金额的统计)
         public void StartListenTradeDo()
         {
-            // TODO: 增加事务处理
             bool op = true;
             while (op)
             {
-                try
+                string orderidstring = TendisDbconn.Instance.LPop<string>("ConsumerOrders:Divi:List");
+                if (!string.IsNullOrEmpty(orderidstring))
                 {
-                    string orderidstring = TendisDbconn.Instance.LPop<string>("ConsumerOrders:Divi:List");
-                    if (!string.IsNullOrEmpty(orderidstring))
+                    int OrderId = int.Parse(function.CheckInt(orderidstring));
+                    WebCMSEntities db = new WebCMSEntities();
+                    using (var tran = db.Database.BeginTransaction())
                     {
-                        int OrderId = int.Parse(function.CheckInt(orderidstring));
-                        WebCMSEntities db = new WebCMSEntities();
-
-                        ConsumerOrders order = db.ConsumerOrders.FirstOrDefault(m => m.Id == OrderId);
-                        if (order != null)
+                        try
                         {
-                            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)
+                            ConsumerOrders order = db.ConsumerOrders.FirstOrDefault(m => m.Id == OrderId);
+                            if (order != null)
                             {
-                                MerchantParamSet set = Newtonsoft.Json.JsonConvert.DeserializeObject<MerchantParamSet>(order.SeoDescription);
-                                int DiviPersons = set.DiviPersons; //单笔订单分红人数
-                                decimal DiviPercent = set.DiviPercent; //单人最大分红比例
-                                int ProfitDays = set.ProfitDays; //分红期限(天)
-                                decimal GetPercent = set.GetPercent; //商家实收比例
-                                decimal MinPayMoney = set.MinPayMoney; //订单参与门槛
-                                int IsAll = set.IsAll; //是否收全额
-                                if (IsAll == 0 && PayMoney >= MinPayMoney && GetPercent < 1)
+                                decimal PayMoney = order.PayMoney * 10000M;
+                                int MerchantId = order.MerchantId;
+                                MerchantInfo merchant = db.MerchantInfo.FirstOrDefault(m => m.Id == MerchantId);
+                                if (merchant != null)
                                 {
-                                    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)); //基于收款金额的总分润比例;
-                                    CustomTagSet cusumerFeePercentSet = customTagSets.FirstOrDefault(m => m.Tags == "CusumerFeePercent") ?? new CustomTagSet();
-                                    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 - profitPercent);
-                                    if (DiviMoney > 0)
+                                    MerchantParamSet set = Newtonsoft.Json.JsonConvert.DeserializeObject<MerchantParamSet>(order.SeoDescription);
+                                    int DiviPersons = set.DiviPersons; //单笔订单分红人数
+                                    decimal DiviPercent = set.DiviPercent; //单人最大分红比例
+                                    int ProfitDays = set.ProfitDays; //分红期限(天)
+                                    decimal GetPercent = set.GetPercent; //商家实收比例
+                                    decimal MinPayMoney = set.MinPayMoney; //订单参与门槛
+                                    int IsAll = set.IsAll; //是否收全额
+                                    if (IsAll == 0 && PayMoney >= MinPayMoney && GetPercent < 1)
                                     {
-                                        DiviMoney = DiviMoney / DiviPersons;
-                                        //付款人获取退款返现
-                                        decimal GetMoney = order.MaxDivi - order.CurDivi;
-                                        if (GetMoney >= DiviMoney)
-                                        {
-                                            GetMoney = DiviMoney;
-                                        }
-                                        if (GetMoney > minProfit)
+                                        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)); //基于收款金额的总分润比例;
+                                        CustomTagSet cusumerFeePercentSet = customTagSets.FirstOrDefault(m => m.Tags == "CusumerFeePercent") ?? new CustomTagSet();
+                                        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 - profitPercent);
+                                        if (DiviMoney > 0)
                                         {
-                                            order.CurDivi += GetMoney;
-                                            db.ConsumerProfit.Add(new ConsumerProfit()
+                                            DiviMoney = DiviMoney / DiviPersons;
+                                            //付款人获取退款返现
+                                            decimal GetMoney = order.MaxDivi - order.CurDivi;
+                                            if (GetMoney >= DiviMoney)
                                             {
-                                                CreateDate = DateTime.Now,
-                                                ConsumerId = order.ConsumerId,
-                                                MerchantId = order.MerchantId,
-                                                OrderId = OrderId,
-                                                GetMoney = GetMoney,
-                                            });
-                                        }
-                                        List<int> deletes = new List<int>();
-                                        long CurDiviPersons = DiviPersons;
-                                        long CurQueueCount = TendisDbconn.Instance.Count("ConsumerOrders:Divi:" + MerchantId);
-                                        if (CurDiviPersons > CurQueueCount)
-                                        {
-                                            CurDiviPersons = CurQueueCount;
-                                        }
-                                        CurDiviPersons = CurDiviPersons - 1;
-                                        while (CurDiviPersons > 0)
-                                        {
-                                            ConsumerOrders suborder = TendisDbconn.Instance.RPop<ConsumerOrders>("ConsumerOrders:Divi:" + MerchantId);
-                                            if (suborder != null)
+                                                GetMoney = DiviMoney;
+                                            }
+                                            if (GetMoney > minProfit)
                                             {
-                                                if (suborder.CurDivi < suborder.MaxDivi)
+                                                order.CurDivi += GetMoney;
+                                                ConsumerProfit cprofit = db.ConsumerProfit.Add(new ConsumerProfit()
                                                 {
-                                                    GetMoney = suborder.MaxDivi - suborder.CurDivi;
-                                                    if (GetMoney >= DiviMoney)
-                                                    {
-                                                        GetMoney = DiviMoney;
-                                                    }
-                                                    if (GetMoney > minProfit)
+                                                    CreateDate = DateTime.Now,
+                                                    ConsumerId = order.ConsumerId,
+                                                    MerchantId = order.MerchantId,
+                                                    OrderId = OrderId,
+                                                    GetMoney = GetMoney,
+                                                }).Entity;
+                                                db.SaveChanges();
+                                                TendisDbconn.Instance.AddList("ConsumerOrdersStat", new RefundItem()
+                                                {
+                                                    ProfitId = cprofit.Id,
+                                                    TradeNo = order.OrderNo,
+                                                    RefundMoney = GetMoney,
+                                                    TotalMoney = order.PayMoney,
+                                                    PayMode = order.PayMode,
+                                                    MerchantId = order.MerchantId,
+                                                });
+                                            }
+                                            List<int> deletes = new List<int>();
+                                            long CurDiviPersons = DiviPersons;
+                                            long CurQueueCount = TendisDbconn.Instance.Count("ConsumerOrders:Divi:" + MerchantId);
+                                            if (CurDiviPersons > CurQueueCount)
+                                            {
+                                                CurDiviPersons = CurQueueCount;
+                                            }
+                                            CurDiviPersons = CurDiviPersons - 1;
+                                            while (CurDiviPersons > 0)
+                                            {
+                                                ConsumerOrders suborder = TendisDbconn.Instance.RPop<ConsumerOrders>("ConsumerOrders:Divi:" + MerchantId);
+                                                if (suborder != null)
+                                                {
+                                                    if (suborder.CurDivi < suborder.MaxDivi)
                                                     {
-                                                        suborder.CurDivi += GetMoney;
-                                                        db.ConsumerProfit.Add(new ConsumerProfit()
+                                                        GetMoney = suborder.MaxDivi - suborder.CurDivi;
+                                                        if (GetMoney >= DiviMoney)
                                                         {
-                                                            CreateDate = DateTime.Now,
-                                                            ConsumerId = suborder.ConsumerId,
-                                                            MerchantId = suborder.MerchantId,
-                                                            OrderId = OrderId,
-                                                            GetMoney = GetMoney,
-                                                        });
-                                                        if (suborder.CurDivi < suborder.MaxDivi)
+                                                            GetMoney = DiviMoney;
+                                                        }
+                                                        if (GetMoney > minProfit)
                                                         {
-                                                            TendisDbconn.Instance.AddList("ConsumerOrders:Divi:" + MerchantId, suborder);
+                                                            suborder.CurDivi += GetMoney;
+                                                            ConsumerProfit cprofit = db.ConsumerProfit.Add(new ConsumerProfit()
+                                                            {
+                                                                CreateDate = DateTime.Now,
+                                                                ConsumerId = suborder.ConsumerId,
+                                                                MerchantId = suborder.MerchantId,
+                                                                OrderId = OrderId,
+                                                                GetMoney = GetMoney,
+                                                            }).Entity;
+                                                            db.SaveChanges();
+                                                            TendisDbconn.Instance.AddList("ConsumerOrdersStat", new RefundItem()
+                                                            {
+                                                                ProfitId = cprofit.Id,
+                                                                TradeNo = order.OrderNo,
+                                                                RefundMoney = GetMoney,
+                                                                TotalMoney = order.PayMoney,
+                                                                PayMode = order.PayMode,
+                                                                MerchantId = order.MerchantId,
+                                                            });
+                                                            if (suborder.CurDivi < suborder.MaxDivi)
+                                                            {
+                                                                TendisDbconn.Instance.AddList("ConsumerOrders:Divi:" + MerchantId, suborder);
+                                                            }
                                                         }
                                                     }
                                                 }
+                                                CurDiviPersons -= 1;
                                             }
-                                            CurDiviPersons -= 1;
-                                        }
-                                        db.SaveChanges();
 
-                                        //创客分润
-                                        // DoProfit(db, order);
+                                            //创客分润
+                                            // DoProfit(db, order);
 
-                                        //代理商分润
-                                        // AgentProfit(db, order);
+                                            //代理商分润
+                                            // AgentProfit(db, order);
+                                        }
                                     }
                                 }
                             }
+                            tran.Commit();
+                        }
+                        catch (Exception ex)
+                        {
+                            op = false;
+                            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + ":" + ex.ToString(), "自定义分润程序监听队列异常");
+                            tran.Rollback();
                         }
-                        db.Dispose();
-                    }
-                    else
-                    {
-                        op = false;
                     }
+                    db.Dispose();
                 }
-                catch (Exception ex)
+                else
                 {
                     op = false;
-                    function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + ":" + ex.ToString(), "自定义分润程序监听队列异常");
                 }
             }
         }

+ 39 - 29
AppStart/RabbitMQClient.cs

@@ -104,6 +104,16 @@ namespace MySystem
                     JobMqMsg job = Newtonsoft.Json.JsonConvert.DeserializeObject<JobMqMsg>(MsgContent);
                     ConsumerOrdersStatService.Instance.Start(job);
                 }
+                else if (QueueName == "ConsumerOrdersReturnDo")
+                {
+                    JobMqMsg job = Newtonsoft.Json.JsonConvert.DeserializeObject<JobMqMsg>(MsgContent);
+                    ConsumerOrdersReturnDoService.Instance.Start(job);
+                }
+                else if (QueueName == "ConsumerOrdersReturnStat")
+                {
+                    JobMqMsg job = Newtonsoft.Json.JsonConvert.DeserializeObject<JobMqMsg>(MsgContent);
+                    ConsumerOrdersReturnStatService.Instance.Start(job);
+                }
                 else if (QueueName == "MerchantConfirmList")
                 {
                     MerchantConfirmService.Instance.Start(MsgContent);
@@ -116,35 +126,35 @@ namespace MySystem
                 {
                     DeleteMySqlDataService.Instance.Start(MsgContent);
                 }
-                else if (QueueName == "SycnTableData")
-                {
-                    JobMqMsg job = Newtonsoft.Json.JsonConvert.DeserializeObject<JobMqMsg>(MsgContent);
-                    if (job.BrandInfo.DataType == 1)
-                    {
-                        //同步激活
-                        SycnActiveRewardService.Instance.Start(job);
-                    }
-                    else if (job.BrandInfo.DataType == 2)
-                    {
-                        //同步交易
-                        SycnTradeRecordService.Instance.Start(job);
-                    }
-                    else if (job.BrandInfo.DataType == 8)
-                    {
-                        //同步商户
-                        SycnMerchantInfoService.Instance.Start(job);
-                    }
-                }
-                else if (QueueName == "ProfitForEverMonth")
-                {
-                    JobMqMsg job = Newtonsoft.Json.JsonConvert.DeserializeObject<JobMqMsg>(MsgContent);
-                    ProfitService.Instance.Start(job);
-                }
-                else if (QueueName == "FluxPrize")
-                {
-                    JobMqMsg job = Newtonsoft.Json.JsonConvert.DeserializeObject<JobMqMsg>(MsgContent);
-                    FluxService.Instance.Start(job);
-                }
+                // else if (QueueName == "SycnTableData")
+                // {
+                //     JobMqMsg job = Newtonsoft.Json.JsonConvert.DeserializeObject<JobMqMsg>(MsgContent);
+                //     if (job.BrandInfo.DataType == 1)
+                //     {
+                //         //同步激活
+                //         SycnActiveRewardService.Instance.Start(job);
+                //     }
+                //     else if (job.BrandInfo.DataType == 2)
+                //     {
+                //         //同步交易
+                //         SycnTradeRecordService.Instance.Start(job);
+                //     }
+                //     else if (job.BrandInfo.DataType == 8)
+                //     {
+                //         //同步商户
+                //         SycnMerchantInfoService.Instance.Start(job);
+                //     }
+                // }
+                // else if (QueueName == "ProfitForEverMonth")
+                // {
+                //     JobMqMsg job = Newtonsoft.Json.JsonConvert.DeserializeObject<JobMqMsg>(MsgContent);
+                //     ProfitService.Instance.Start(job);
+                // }
+                // else if (QueueName == "FluxPrize")
+                // {
+                //     JobMqMsg job = Newtonsoft.Json.JsonConvert.DeserializeObject<JobMqMsg>(MsgContent);
+                //     FluxService.Instance.Start(job);
+                // }
                 // TODO: 需要等待回复jobserver成功才能清除
                 channel.BasicAck(e.DeliveryTag, true); //收到回复后,RabbitMQ会直接在队列中删除这条消息
             };

+ 14 - 0
AppStart/Tables/RefundItem.cs

@@ -0,0 +1,14 @@
+using System;
+using System.Collections.Generic;
+namespace MySystem
+{
+    public class RefundItem
+    {
+        public int ProfitId { get; set; }
+        public string TradeNo { get; set; }
+        public decimal RefundMoney { get; set; }
+        public decimal TotalMoney { get; set; }
+        public int PayMode { get; set; }
+        public int MerchantId { get; set; }
+    }
+}

+ 49 - 0
AppStart/WeChatFunction.cs

@@ -248,6 +248,55 @@ namespace MySystem
             return return_result;
         }
         #endregion
+        
+        #region 服务商平台申请退款API
+
+        public Dictionary<string, string> Refund(string AppId, string MchId, string SubMchId, decimal RefundMoney, decimal TotalMoney, string OrderNo, string RefundNo)
+        {
+            Dictionary<string, string> return_result = new Dictionary<string, string>();
+            int refund = (int)(RefundMoney * 100);
+            int amount = (int)(TotalMoney * 100);
+            //具体请求参数
+            SortedList<string, object> par = new SortedList<string, object>();
+            par.Add("sub_mchid", SubMchId); //子商户号
+            par.Add("out_trade_no", OrderNo); //商户订单号
+            par.Add("out_refund_no", RefundNo); //商户退款单号
+            Dictionary<string, object> amountDic = new Dictionary<string, object>();
+            amountDic.Add("refund", refund); //退款金额
+            amountDic.Add("total", amount); //原订单金额
+            amountDic.Add("currency", "CNY"); //退款币种
+            par.Add("amount", amountDic); //金额信息
+
+            string req = Newtonsoft.Json.JsonConvert.SerializeObject(par);
+            function.WriteLog(req, "服务商平台申请退款API");
+            try
+            {
+                string merchantId = MchId;   //商户号
+                string serialNo = "61D99F7218B487788E35D6C4E3ED398E0979D3F6";  //证书编号                
+                string result = postJson("https://api.mch.weixin.qq.com/v3/refund/domestic/refunds", req, prikey, merchantId, serialNo);
+                function.WriteLog(result, "服务商平台申请退款API");
+                JsonData jsonObj = JsonMapper.ToObject(result);
+                return_result.Add("refund_id", jsonObj["refund_id"].ToString()); //微信支付退款单号
+                return_result.Add("channel", jsonObj["channel"].ToString()); //退款渠道
+                return_result.Add("user_received_account", jsonObj["user_received_account"].ToString()); //退款入账账户
+                return_result.Add("status", jsonObj["status"].ToString()); //退款状态
+                return_result.Add("payer_total", jsonObj["amount"]["payer_total"].ToString()); //用户支付金额
+                return_result.Add("payer_refund", jsonObj["amount"]["payer_refund"].ToString()); //用户退款金额
+                return_result.Add("settlement_refund", jsonObj["amount"]["settlement_refund"].ToString()); //应结退款金额
+                return_result.Add("settlement_total", jsonObj["amount"]["settlement_total"].ToString()); //应结订单金额
+                return_result.Add("discount_refund", jsonObj["amount"]["discount_refund"].ToString()); //优惠退款金额
+            }
+            catch (Exception ex)
+            {
+                function.WriteLog(DateTime.Now.ToString() + "\r\n" + ex.ToString(), "服务商平台申请退款API异常");
+            }
+            return return_result;
+        }
+        #endregion
+
+
+
+
 
         #region 敏感信息加密
 

+ 19 - 13
Controllers/HomeController.cs

@@ -58,19 +58,25 @@ namespace MySystem.Controllers
         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();
+            // 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();
+
+            // PxcModels.Users user = db.Users.First(m => m.Id == 16) ?? new PxcModels.Users();
+            // string path = function.CreateQRCode2(ConfigurationManager.AppSettings["SourceHost"].ToString() + "p/user-inviteregist-1?Id=" + user.Id, function.MD5_16(user.Id.ToString() + "8745"), "/bsserver_com/static/ReferenceQrCode/");
+            // path = path.Replace("//", "/");
+            // string resultpath = "/bsserver_com/static/ReferenceQrCode/" + function.MD5_16(user.Id.ToString() + "8745") + "Pic.png";
+            // MakeReferenceQrCodeService.Instance.MakeQRCode(function.getPath("/bsserver_com/static/QrCodeBg.png"), function.getPath(path), function.getPath(resultpath), user);
             db.Dispose();
             return "ok";
         }

+ 2 - 0
Models/MerchantInfo.cs

@@ -36,5 +36,7 @@ namespace MySystem.Models
         public int UserId { get; set; }
         public DateTime? BindDate { get; set; }
         public int BindStatus { get; set; }
+        public DateTime? ActivationDate { get; set; }
+        public int ActivationStatus { get; set; }
     }
 }

+ 4 - 0
Models/WebCMSEntities.cs

@@ -3878,6 +3878,10 @@ namespace MySystem.Models
             {
                 entity.Property(e => e.Id).HasColumnType("int(11)");
 
+                entity.Property(e => e.ActivationDate).HasColumnType("datetime");
+
+                entity.Property(e => e.ActivationStatus).HasColumnType("int(11)");
+
                 entity.Property(e => e.Address)
                     .HasColumnType("varchar(100)")
                     .HasCharSet("utf8")

+ 2 - 0
PxcModels/MerchantInfo.cs

@@ -36,5 +36,7 @@ namespace MySystem.PxcModels
         public string Name { get; set; }
         public DateTime? BindDate { get; set; }
         public int BindStatus { get; set; }
+        public DateTime? ActivationDate { get; set; }
+        public int ActivationStatus { get; set; }
     }
 }

+ 1 - 0
PxcModels/RightDic.cs

@@ -14,5 +14,6 @@ namespace MySystem.PxcModels
         public ulong MainMenu { get; set; }
         public ulong MainStat { get; set; }
         public ulong MainDataList { get; set; }
+        public string OtherRight { get; set; }
     }
 }

+ 9 - 0
PxcModels/WebCMSEntities.cs

@@ -3902,6 +3902,10 @@ namespace MySystem.PxcModels
             {
                 entity.Property(e => e.Id).HasColumnType("int(11)");
 
+                entity.Property(e => e.ActivationDate).HasColumnType("datetime");
+
+                entity.Property(e => e.ActivationStatus).HasColumnType("int(11)");
+
                 entity.Property(e => e.Address)
                     .HasColumnType("varchar(100)")
                     .HasCharSet("utf8")
@@ -8457,6 +8461,11 @@ namespace MySystem.PxcModels
                     .HasCharSet("utf8")
                     .HasCollation("utf8_general_ci");
 
+                entity.Property(e => e.OtherRight)
+                    .HasColumnType("varchar(500)")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
                 entity.Property(e => e.RightLevel).HasColumnType("int(11)");
 
                 entity.Property(e => e.Sort).HasColumnType("int(11)");

+ 10 - 8
Startup.cs

@@ -213,14 +213,16 @@ 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("ConsumerOrdersReturnDo");
+            RabbitMQClient.Instance.StartReceive("ConsumerOrdersReturnStat");
             // RabbitMQClient.Instance.StartReceive("ConsumerOrdersStat");
 
 

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


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


BIN
bin/Debug/netcoreapp3.0/bsserver_com/static/QrCodeBg.png


BIN
bin/Debug/netcoreapp3.0/bsserver_com/static/ReferenceQrCode/24335203f7b67dd8.png


BIN
bin/Debug/netcoreapp3.0/bsserver_com/static/ReferenceQrCode/24335203f7b67dd8Pic.png


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