Browse Source

商户达标奖励

lcl 1 năm trước cách đây
mục cha
commit
5d5cb10ad6
2 tập tin đã thay đổi với 236 bổ sung0 xóa
  1. 3 0
      Startup.cs
  2. 233 0
      Util/HaoDa/MerchantStandardService.cs

+ 3 - 0
Startup.cs

@@ -161,6 +161,9 @@ namespace MySystem
                 ActiveRewardService.Instance.StartOpenReward();
                 ActiveRewardService.Instance.StartLeaderReward();
                 ActiveRewardService.Instance.StartOperateReward();
+                
+                MerchantStandardService.Instance.Start(); //商户缴纳服务费次月活动交易额大于等于1W,奖励进件创客50元
+                MerchantStandardService.Instance.StartThree(); //商户缴纳服务费次月起连续不间断三个月,每月活动交易额大于1W,奖励进件创客100元
             }
         }
 

+ 233 - 0
Util/HaoDa/MerchantStandardService.cs

@@ -0,0 +1,233 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Data;
+using System.Threading;
+using MySystem.Models.Main;
+using Library;
+using LitJson;
+
+namespace MySystem
+{
+    public class MerchantStandardService
+    {
+        public readonly static MerchantStandardService Instance = new MerchantStandardService();
+        private MerchantStandardService()
+        { }
+
+
+        public void Start()
+        {
+            Thread th = new Thread(Listen);
+            th.IsBackground = true;
+            th.Start();
+        }
+        
+        private void Listen()
+        { 
+            while (true)
+            {
+                try
+                {
+                    DoSomething();
+                }
+                catch(Exception ex)
+                {
+                    function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "商户达标奖异常");
+                }
+                Thread.Sleep(600000);
+            }
+        }
+
+        public void DoSomething()
+        { 
+            WebCMSEntities db = new WebCMSEntities();
+            DateTime start = DateTime.Parse(DateTime.Now.AddMonths(-1).ToString("yyyy-MM") + "-01 00:00:00");
+            DateTime end = DateTime.Parse(DateTime.Now.ToString("yyyy-MM") + "-01 00:00:00");
+            string month = DateTime.Now.ToString("yyyyMM");
+            var orders = db.MerchantDepositOrder.Where(m => m.Status > 0 && m.Version == 0 && m.UpdateDate >= start && m.UpdateDate < end);
+            foreach(var order in orders)
+            {
+                decimal TradeMoney = 0;
+                bool has = db.MerchantAmountSummay.Any(m => m.MerchantId == order.MerchantId && m.TradeMonth == month);
+                if(has)
+                {
+                    TradeMoney = db.MerchantAmountSummay.Where(m => m.MerchantId == order.MerchantId && m.TradeMonth == month).Sum(m => m.TradeAmount);
+                }
+                if(TradeMoney >= 10000)
+                {
+                    RedisDbconn.Instance.AddList("StandardProfitQueue2", "{\"MerchantId\":\"" + order.MerchantId + "\",\"Prize\":\"50\"}");
+                    MerchantDepositOrder edit = db.MerchantDepositOrder.FirstOrDefault(m => m.Id == order.Id);
+                    if(edit != null)
+                    {
+                        edit.Version = 1;
+                    }
+                }
+                db.SaveChanges();
+            }
+            db.Dispose();
+        }
+
+
+
+
+
+        public void StartThree()
+        {
+            Thread th = new Thread(ListenThree);
+            th.IsBackground = true;
+            th.Start();
+        }
+        
+        private void ListenThree()
+        { 
+            while (true)
+            {
+                try
+                {
+                    DoSomethingThree();
+                }
+                catch(Exception ex)
+                {
+                    function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "商户连续3月达标奖异常");
+                }
+                Thread.Sleep(605000);
+            }
+        }
+
+        public void DoSomethingThree()
+        { 
+            WebCMSEntities db = new WebCMSEntities();
+            DateTime start = DateTime.Parse(DateTime.Now.AddMonths(-3).ToString("yyyy-MM") + "-01 00:00:00");
+            DateTime end = DateTime.Parse(DateTime.Now.ToString("yyyy-MM") + "-01 00:00:00");
+            string month = DateTime.Now.AddMonths(-2).ToString("yyyyMM");
+            string month2 = DateTime.Now.AddMonths(-1).ToString("yyyyMM");
+            string month3 = DateTime.Now.ToString("yyyyMM");
+            var orders = db.MerchantDepositOrder.Where(m => m.Status > 0 && m.Version == 1 && m.UpdateDate >= start && m.UpdateDate < end);
+            foreach(var order in orders)
+            {
+                decimal TradeMoney = 0, TradeMoney2 = 0, TradeMoney3 = 0;
+                bool has = db.MerchantAmountSummay.Any(m => m.MerchantId == order.MerchantId && m.TradeMonth == month);
+                if(has)
+                {
+                    TradeMoney = db.MerchantAmountSummay.Where(m => m.MerchantId == order.MerchantId && m.TradeMonth == month).Sum(m => m.TradeAmount);
+                }
+                has = db.MerchantAmountSummay.Any(m => m.MerchantId == order.MerchantId && m.TradeMonth == month2);
+                if(has)
+                {
+                    TradeMoney2 = db.MerchantAmountSummay.Where(m => m.MerchantId == order.MerchantId && m.TradeMonth == month2).Sum(m => m.TradeAmount);
+                }
+                has = db.MerchantAmountSummay.Any(m => m.MerchantId == order.MerchantId && m.TradeMonth == month3);
+                if(has)
+                {
+                    TradeMoney3 = db.MerchantAmountSummay.Where(m => m.MerchantId == order.MerchantId && m.TradeMonth == month3).Sum(m => m.TradeAmount);
+                }
+                if(TradeMoney >= 10000 && TradeMoney2 >= 10000 && TradeMoney3 >= 10000)
+                {
+                    RedisDbconn.Instance.AddList("StandardProfitQueue2", "{\"MerchantId\":\"" + order.MerchantId + "\",\"Prize\":\"100\"}");
+                    MerchantDepositOrder edit = db.MerchantDepositOrder.FirstOrDefault(m => m.Id == order.Id);
+                    if(edit != null)
+                    {
+                        edit.Version = 2;
+                    }
+                }
+                db.SaveChanges();
+            }
+            db.Dispose();
+        }
+
+
+
+
+
+        #region 达标奖励队列
+        public void StartActive()
+        { 
+            Thread th = new Thread(StartListenActive);
+            th.IsBackground = true;
+            th.Start();
+        }
+        public void StartListenActive()
+        {
+            while (true)
+            {
+                string content = RedisDbconn.Instance.RPop<string>("StandardProfitQueue2");
+                if (!string.IsNullOrEmpty(content))
+                {
+                    StartListenActiveDo(content);
+                }
+                else
+                {
+                    Thread.Sleep(60000);
+                }
+            }
+        }
+        public void StartListenActiveDo(string content)
+        { 
+            try
+            {
+                JsonData jsonObj = JsonMapper.ToObject(content);
+                int MerchantId = int.Parse(jsonObj["MerchantId"].ToString());
+                decimal Prize = decimal.Parse(jsonObj["Prize"].ToString());
+                Models.KxsMain.WebCMSEntities kxsdb = new Models.KxsMain.WebCMSEntities();
+                WebCMSEntities db = new WebCMSEntities();
+                MerchantInfo merchant = db.MerchantInfo.FirstOrDefault(m => m.Id == MerchantId) ?? new MerchantInfo();                
+                string IdBrand = merchant.UserId + "_0";
+                UserMachineData userData = db.UserMachineData.FirstOrDefault(m => m.IdBrand == IdBrand);
+                if (userData == null)
+                {
+                    userData = db.UserMachineData.Add(new UserMachineData()
+                    {
+                        IdBrand = IdBrand,
+                    }).Entity;
+                    db.SaveChanges();
+                }
+                userData.OtherProfit += Prize;
+                db.SaveChanges();
+
+                int GetUserId = merchant.UserId;
+                Models.KxsMain.UserAccount account = kxsdb.UserAccount.FirstOrDefault(m => m.Id == GetUserId);
+                if (account == null)
+                {
+                    account = kxsdb.UserAccount.Add(new Models.KxsMain.UserAccount()
+                    {
+                        Id = GetUserId,
+                        UserId = GetUserId,
+                    }).Entity;
+                    kxsdb.SaveChanges();
+                }
+                decimal BeforeTotalAmount = account.TotalAmount; //变更前总金额
+                decimal BeforeFreezeAmount = account.FreezeAmount; //变更前冻结金额
+                decimal BeforeBalanceAmount = account.BalanceAmount; //变更前余额
+                account.BalanceAmount += Prize;
+                account.TotalAmount += Prize;
+                decimal AfterTotalAmount = account.TotalAmount; //变更后总金额
+                decimal AfterFreezeAmount = account.FreezeAmount; //变更后冻结金额
+                decimal AfterBalanceAmount = account.BalanceAmount; //变更后余额
+                Models.KxsMain.UserAccountRecord userAccountRecord = kxsdb.UserAccountRecord.Add(new Models.KxsMain.UserAccountRecord()
+                {
+                    CreateDate = DateTime.Now,
+                    UpdateDate = DateTime.Now,
+                    UserId = GetUserId, //创客
+                    ChangeType = 315, //变动类型
+                    ChangeAmount = Prize, //变更金额
+                    BeforeTotalAmount = BeforeTotalAmount, //变更前总金额
+                    AfterTotalAmount = AfterTotalAmount, //变更后总金额
+                    BeforeFreezeAmount = BeforeFreezeAmount, //变更前冻结金额
+                    AfterFreezeAmount = AfterFreezeAmount, //变更后冻结金额
+                    BeforeBalanceAmount = BeforeBalanceAmount, //变更前余额
+                    AfterBalanceAmount = AfterBalanceAmount, //变更后余额
+                }).Entity;
+                kxsdb.SaveChanges();
+                kxsdb.Dispose();
+                db.Dispose();
+            }
+            catch (Exception ex)
+            {
+                LogHelper.Instance.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + ":" + ex.ToString(), "达标奖励服务异常");
+            }
+        }
+        #endregion
+
+    }
+}