소스 검색

增加售后换新,机具数据同步队列

lichunlei 3 년 전
부모
커밋
df797b024f

+ 8 - 6
AppStart/Helper/Profit/ProfitHelper.cs

@@ -2049,20 +2049,22 @@ namespace MySystem
                     机具激活90天内,机具所属创客获得万10置顶
                     若创客为商户型创客,则机具UserId的创客获得万4分润
 
-                    select u.MakerCode,u.RealName,u.UserLevel,(case when ProfitType=1 then '直营' else '团队' end) as DirectFlag,
+                    //查分润
+                    select u.MakerCode,u.RealName,u.UserLevel,p.PosSn,(case when ProfitType=1 then '直营' else '团队' end) as DirectFlag,
                     k.Name,CreditTradeAmt,CreditTradeProfit,DebitTradeAmt,DebitTradeProfit,QrCreditTradeAmt,QrCreditTradeProfit from (
-                    select UserId,ProfitType,BrandId,
+                    select UserId,ProfitType,BrandId,MerchantId,
                     sum(CreditTradeAmt) as CreditTradeAmt,
                     sum(CreditTradeProfit) as CreditTradeProfit,
                     sum(DebitNonCapTradeAmt+DebitCapTradeAmt) as DebitTradeAmt,
                     sum(DebitNonTradeCapProfit+DebitTradeCapProfit) as DebitTradeProfit,
                     sum(QrCreditTradeAmt) as QrCreditTradeAmt,
                     sum(QrCreditTradeProfit) as QrCreditTradeProfit
-                    from ProfitRewardRecord 
-                    GROUP BY UserId,ProfitType,BrandId
-                    ) tb left join Users u on tb.UserId=u.Id LEFT JOIN KqProducts k ON k.Id=tb.BrandId
-
+                    from ProfitRewardRecord where MerchantId>0
+                    GROUP BY UserId,ProfitType,BrandId,MerchantId
+                    ) tb left join Users u on tb.UserId=u.Id LEFT JOIN KqProducts k ON k.Id=tb.BrandId left join PosMachinesTwo p on tb.MerchantId=p.BindMerchantId
+                    ORDER BY p.PosSn,u.MakerCode
 
+                    //查补贴
                     select u.MakerCode,u.RealName,u.UserLevel,m.KqMerNo,m.MerchantName,(case when SubsidyType=1 then '直营' else '团队' end) as DirectFlag,
                     k.Name,CreditTradeAmt,SubsidyProfit from (
                     select SubsidyUserId,MerchantId,BrandId,SubsidyType,

+ 1 - 1
AppStart/Helper/StatService.cs

@@ -211,7 +211,7 @@ namespace MySystem
                 content += "\"TradeAmount\":\"" + TradeAmount + "\"";
                 content += "}";
                 RedisDbconn.Instance.AddList("TradeStatQueue", content);    
-                RedisDbconn.Instance.AddList("TradeStatQueue2", content);              
+                // RedisDbconn.Instance.AddList("TradeStatQueue2", content);
             }
         }
 

+ 11 - 0
AppStart/Tables/MyMakerItem.cs

@@ -0,0 +1,11 @@
+using System;
+using System.Collections.Generic;
+namespace MySystem
+{
+    public class MyMakerItem
+    {
+        public int UserId { get; set; }
+        public string RealName { get; set; }
+        public int UserLevel { get; set; }
+    }
+}

+ 103 - 0
AppStart/Timer/ChangePosTimer.cs

@@ -0,0 +1,103 @@
+using System;
+using System.Collections.Generic;
+using System.Threading;
+using System.Threading.Tasks;
+using System.Linq;
+using Microsoft.Extensions.Hosting;
+using MySystem;
+using MySystem.PxcModels;
+using LitJson;
+using Library;
+
+public class ChangePosTimer
+{
+    public readonly static ChangePosTimer Instance = new ChangePosTimer();
+    private ChangePosTimer()
+    {
+    }
+    
+    public void Start()
+    {
+        Thread th = new Thread(DoWorks);
+        th.IsBackground = true;
+        th.Start();
+    }
+
+    private void DoWorks()
+    {
+        while (true)
+        {
+            string content = RedisDbconn.Instance.RPop<string>("ChangePosTimerQueue");
+            if (!string.IsNullOrEmpty(content))
+            {
+                JsonData jsonObj = JsonMapper.ToObject(content);
+                string OldSnNum = jsonObj["OldSn"].ToString();
+                string NewSnNum = jsonObj["NewSn"].ToString();
+                string MerNo = jsonObj["MerNo"].ToString();
+                WebCMSEntities db = new WebCMSEntities();
+                MachineForSnNo oldForSnNo = db.MachineForSnNo.FirstOrDefault(m => m.SnNo == OldSnNum) ?? new MachineForSnNo();
+                MachineForSnNo newForSnNo = db.MachineForSnNo.FirstOrDefault(m => m.SnNo == NewSnNum) ?? new MachineForSnNo();
+                PosMachinesTwo oldpos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == oldForSnNo.SnId);
+                if (oldpos == null)
+                {
+                    return;
+                }
+                if (oldpos.BindingState != 1)
+                {
+                    return;
+                }
+                PosMachinesTwo newpos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == newForSnNo.SnId);
+                if (oldpos == null)
+                {
+                    return;
+                }
+                KqProducts oldPosBrand = db.KqProducts.FirstOrDefault(m => m.Id == oldpos.BrandId) ?? new KqProducts();
+                KqProducts newPosBrand = db.KqProducts.FirstOrDefault(m => m.Id == newpos.BrandId) ?? new KqProducts();
+                PosMerchantInfo merchant = new PosMerchantInfo();
+                if (!string.IsNullOrEmpty(MerNo))
+                {
+                    merchant = db.PosMerchantInfo.FirstOrDefault(m => m.KqMerNo == MerNo) ?? new PosMerchantInfo();
+                }
+                else
+                {
+                    merchant = db.PosMerchantInfo.FirstOrDefault(m => m.Id == oldpos.BindMerchantId) ?? new PosMerchantInfo();
+                }
+                newpos.BindMerchantId = merchant.Id;
+                newpos.BuyUserId = oldpos.BuyUserId;
+                newpos.UserId = oldpos.UserId;
+                newpos.RecycEndDate = oldpos.RecycEndDate;
+                newpos.ScanQrTrade = oldpos.ScanQrTrade;
+                newpos.DebitCardTrade = oldpos.DebitCardTrade;
+                newpos.CreditTrade = oldpos.CreditTrade;
+                newpos.PosSnType = oldpos.PosSnType;
+                newpos.TransferTime = oldpos.TransferTime;
+                newpos.IsPurchase = oldpos.IsPurchase;
+                newpos.BindingState = oldpos.BindingState;
+                newpos.ActivationState = oldpos.ActivationState;
+                newpos.BindingTime = oldpos.BindingTime;
+                newpos.ActivationTime = oldpos.ActivationTime;
+                bool checkActReward = db.ActiveReward.Any(m => m.KqMerNo == merchant.KqMerNo);
+                if (!checkActReward)
+                {
+                    newpos.SeoKeyword = oldpos.SeoKeyword;
+                }
+                oldpos.UserId = 0;
+                MachineForMerNo forMerNo = db.MachineForMerNo.FirstOrDefault(m => m.MerNo == merchant.KqMerNo);
+                if (forMerNo != null)
+                {
+                    forMerNo.SnId = newpos.Id;
+                }
+                merchant.KqSnNo = NewSnNum;
+                RedisDbconn.Instance.Clear("PosMachinesTwo:" + oldpos.Id);
+                RedisDbconn.Instance.Clear("PosMachinesTwo:" + newpos.Id);
+                RedisDbconn.Instance.Clear("PosMerchantInfo:" + merchant.Id);
+                db.SaveChanges();
+                db.Dispose();
+            }
+            else
+            {
+                Thread.Sleep(5000);
+            }
+        }
+    }
+}

+ 151 - 0
Controllers/HomeController.cs

@@ -493,6 +493,157 @@ namespace MySystem.Controllers
         //     return "finish";
         // }
 
+        //交易不到1000的机具,顶级姓名-代理姓名-客户姓名-客户电话-开机日期-SN // TODO:做到BS后台导出,按绑定时间查
+        public IActionResult PosTable()
+        {
+            WebCMSEntities db = new WebCMSEntities();
+            List<PosMachinesTwo> poses = db.PosMachinesTwo.Where(m => m.CreditTrade < 1000 && m.BindingState == 1).ToList();
+            List<Dictionary<string, string>> list = new List<Dictionary<string, string>>();
+            foreach (PosMachinesTwo pos in poses)
+            {
+                PosMerchantInfo merchant = db.PosMerchantInfo.FirstOrDefault(m => m.Id == pos.BindMerchantId) ?? new PosMerchantInfo();
+                Users user = db.Users.FirstOrDefault(m => m.Id == pos.UserId) ?? new Users();
+                Users puser = db.Users.FirstOrDefault(m => m.Id == user.ParentUserId) ?? new Users();
+                Dictionary<string, string> item = new Dictionary<string, string>();
+                string TopRealName = "";
+                string TopMakerCode = "";
+                string TopMobile = "";
+                string ParentNav = user.ParentNav;
+                if (!string.IsNullOrEmpty(ParentNav))
+                {
+                    string[] navlist = ParentNav.Trim(',').Replace(",,", ",").Split(',');
+                    if (navlist.Length > 1)
+                    {
+                        int TopId = int.Parse(function.CheckInt(navlist[1]));
+                        Users tuser = db.Users.FirstOrDefault(m => m.Id == TopId) ?? new Users();
+                        TopRealName = tuser.RealName;
+                        TopMakerCode = tuser.MakerCode;
+                        TopMobile = tuser.Mobile;
+                    }
+                }
+                item.Add("TopRealName", TopRealName); //顶级姓名
+                item.Add("TopMakerCode", TopMakerCode); //顶级编号
+                item.Add("TopMobile", TopMobile); //顶级手机号
+                item.Add("UpRealName", puser.RealName); //上级姓名
+                item.Add("UpMakerCode", puser.MakerCode); //上级编号
+                item.Add("UpMobile", puser.Mobile); //上级手机号
+                item.Add("RealName", user.RealName); //代理姓名
+                item.Add("MakerCode", user.MakerCode); //代理编号
+                item.Add("MerchantName", merchant.MerchantName); //客户姓名
+                item.Add("MerchantMobile", merchant.MerchantMobile); //客户电话
+                item.Add("OpenTime", pos.BindingTime == null ? "" : pos.BindingTime.Value.ToString("yyyy-MM-dd HH:mm:ss")); //开机日期
+                item.Add("Sn", pos.PosSn); //SN
+                list.Add(item);
+            }
+            db.Dispose();
+            ViewBag.list = list;
+            return View();
+        }
+
+        public string resetall(int k = 0, int b = 1)
+        {
+            DataTable dt = dbconn.dtable("select Id from Users where AuthFlag=1");
+            foreach (DataRow dr in dt.Rows)
+            {
+                if (k == 1)
+                {
+                    reset(int.Parse(dr["Id"].ToString()));
+                }
+                else if (k == 2)
+                {
+                    resetpos(int.Parse(dr["Id"].ToString()), b);
+                }
+            }
+            return "ok";
+        }
+        public string reset(int uid)
+        {
+            WebCMSEntities db = new WebCMSEntities();
+            List<Users> users = db.Users.Where(m => m.ParentUserId == uid).OrderByDescending(m => m.AuthDate).ToList();
+            RedisDbconn.Instance.Clear("MyMakerList:" + uid);
+            RedisDbconn.Instance.Clear("MyMakerForNotAuth:" + uid);
+            RedisDbconn.Instance.Clear("TotalUser:" + uid + "*");
+            RedisDbconn.Instance.Clear("TotalUser:Auth:" + uid);
+            foreach (Users user in users)
+            {
+                RedisDbconn.Instance.AddInt("TotalUser:" + uid);
+                RedisDbconn.Instance.AddInt("TotalUser:" + uid + ":" + user.CreateDate.Value.ToString("yyyyMM"));
+                RedisDbconn.Instance.AddInt("TotalUser:" + uid + ":" + user.CreateDate.Value.ToString("yyyyMMdd"));
+                if (user.AuthFlag == 1)
+                {
+                    RedisDbconn.Instance.AddList("MyMakerList:" + uid, new MyMakerItem()
+                    {
+                        UserId = user.Id,
+                        RealName = user.RealName,
+                        UserLevel = user.UserLevel,
+                    });
+                    RedisDbconn.Instance.AddInt("TotalUser:Auth:" + uid);
+                }
+                else
+                { 
+                    RedisDbconn.Instance.AddList("MyMakerForNotAuth:" + uid, new MyMakerItem()
+                    {
+                        UserId = user.Id,
+                        RealName = user.RealName,
+                        UserLevel = user.UserLevel,
+                    });
+                    RedisDbconn.Instance.AddInt("TotalUser:NoAuth:" + uid);
+                }
+                RedisDbconn.Instance.Set("Users:" + user.Id, user);
+            }
+            db.Dispose();
+            return "finish";
+        }
+
+        public string resetpos(int uid, int kind)
+        { 
+            WebCMSEntities db = new WebCMSEntities();
+            string IdBrand = uid + "_" + kind;
+            UserMachineData machineData = db.UserMachineData.FirstOrDefault(m => m.IdBrand == IdBrand);
+            if (machineData == null)
+            {
+                machineData = db.UserMachineData.Add(new UserMachineData()
+                {
+                    IdBrand = IdBrand
+                }).Entity;
+                db.SaveChanges();
+            }
+            machineData.BindCount = db.PosMachinesTwo.Count(m => m.UserId == uid && m.BrandId == kind && m.BindingState == 1);
+            machineData.UnBindCount = db.PosMachinesTwo.Count(m => m.UserId == uid && m.BrandId == kind && m.BindingState == 0);
+            machineData.TotalMachineCount = machineData.BindCount + machineData.UnBindCount;
+            db.SaveChanges();
+            RedisDbconn.Instance.Set("UserMachineData:" + IdBrand, machineData);
+            RedisDbconn.Instance.SetExpire("UserMachineData:" + IdBrand, function.get_Random(1800, 5400));
+            db.Dispose();
+            return "finish";
+        }
+
+        // 更新分仓库存
+        public string resetstorestock()
+        {
+            WebCMSEntities db = new WebCMSEntities();
+            DataTable dt = dbconn.dtable("select s.Id,LaveNum,count(p.Id) as CurLaveNum from StoreHouse s left join PosMachinesTwo p on s.Id=p.StoreId and s.BrandId=p.BrandId and p.UserId=0 group by s.Id HAVING LaveNum!=count(p.Id)");
+            foreach (DataRow dr in dt.Rows)
+            {
+                int Id = int.Parse(function.CheckInt(dr["Id"].ToString()));
+                int CurLaveNum = int.Parse(function.CheckInt(dr["CurLaveNum"].ToString()));
+                StoreHouse store = db.StoreHouse.FirstOrDefault(m => m.Id == Id);
+                if (store != null)
+                {
+                    store.LaveNum = CurLaveNum;
+                    db.SaveChanges();
+                    RedisDbconn.Instance.Set("StoreHouse:" + Id, store);
+                }
+            }
+            db.Dispose();
+            return "ok";
+        }
+
+        public string chkpwd(string pwd)
+        {
+            return function.MD532(pwd);
+        }
+
         public string test()
         {
             StatService.Instance.testStatTrade("2022-04-04");

+ 1 - 1
Startup.cs

@@ -218,7 +218,7 @@ namespace MySystem
 
             // ActiveRewardTimer.Instance.Start(); //实时处理激活记录
             // TradeStatTimer.Instance.Start(); //交易统计
-            TradeStatTimer2.Instance.Start(); //交易统计
+            // TradeStatTimer2.Instance.Start(); //交易统计
             // ProfitHelper.Instance.StatProfit("202203");
 
             //当前必须打开的

+ 4 - 4
appsettings.json

@@ -17,10 +17,10 @@
     "Host": "http://localhost:5047/",
     "SourceHost": "http://bs.kexiaoshuang.com/",
     "Database": "KxsMainServer",
-    "SqlConnStr": "server=localhost;port=3306;user=KxsMainServer;password=Rw2imhXQQt5ODWIF;database=KxsMainServer;charset=utf8;",
-    "Pxc1SqlConnStr": "server=localhost;port=3306;user=KxsMainServer;password=Rw2imhXQQt5ODWIF;database=KxsMainServer;charset=utf8;",
-    "SpSqlConnStr": "server=localhost;port=3306;user=KxsSpServer;password=jJ9qKsvwWgQA9xWG;database=KxsSpServer;charset=utf8;",
-    "RedisConnStr": "localhost:6379,password=,DefaultDatabase=15,poolsize=500,preheat=50,asyncPipeline=true",
+    "SqlConnStr": "server=47.108.231.170;port=3306;user=KxsMainServer;password=Rw2imhXQQt5ODWIF;database=KxsMainServer;charset=utf8;",
+    "Pxc1SqlConnStr": "server=47.108.231.170;port=3306;user=KxsMainServer;password=Rw2imhXQQt5ODWIF;database=KxsMainServer;charset=utf8;",
+    "SpSqlConnStr": "server=47.108.229.115;port=3306;user=KxsSpServer;password=jJ9qKsvwWgQA9xWG;database=KxsSpServer;charset=utf8;",
+    "RedisConnStr": "47.108.207.184:6379,password=skb@redis2022,DefaultDatabase=0,poolsize=500,preheat=50,asyncPipeline=true",
     "TendisConnStr": "47.108.207.184:51002,password=HDlNs1ZpG5iR9D9I,DefaultDatabase=0,poolsize=500,preheat=50,asyncPipeline=true",
     "IOSAppVersion": "1.0.0",
     "AndroidAppVersion": "1.0.0",

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


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


+ 4 - 4
bin/Debug/netcoreapp3.0/appsettings.json

@@ -17,10 +17,10 @@
     "Host": "http://localhost:5047/",
     "SourceHost": "http://bs.kexiaoshuang.com/",
     "Database": "KxsMainServer",
-    "SqlConnStr": "server=localhost;port=3306;user=KxsMainServer;password=Rw2imhXQQt5ODWIF;database=KxsMainServer;charset=utf8;",
-    "Pxc1SqlConnStr": "server=localhost;port=3306;user=KxsMainServer;password=Rw2imhXQQt5ODWIF;database=KxsMainServer;charset=utf8;",
-    "SpSqlConnStr": "server=localhost;port=3306;user=KxsSpServer;password=jJ9qKsvwWgQA9xWG;database=KxsSpServer;charset=utf8;",
-    "RedisConnStr": "localhost:6379,password=,DefaultDatabase=15,poolsize=500,preheat=50,asyncPipeline=true",
+    "SqlConnStr": "server=47.108.231.170;port=3306;user=KxsMainServer;password=Rw2imhXQQt5ODWIF;database=KxsMainServer;charset=utf8;",
+    "Pxc1SqlConnStr": "server=47.108.231.170;port=3306;user=KxsMainServer;password=Rw2imhXQQt5ODWIF;database=KxsMainServer;charset=utf8;",
+    "SpSqlConnStr": "server=47.108.229.115;port=3306;user=KxsSpServer;password=jJ9qKsvwWgQA9xWG;database=KxsSpServer;charset=utf8;",
+    "RedisConnStr": "47.108.207.184:6379,password=skb@redis2022,DefaultDatabase=0,poolsize=500,preheat=50,asyncPipeline=true",
     "TendisConnStr": "47.108.207.184:51002,password=HDlNs1ZpG5iR9D9I,DefaultDatabase=0,poolsize=500,preheat=50,asyncPipeline=true",
     "IOSAppVersion": "1.0.0",
     "AndroidAppVersion": "1.0.0",

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


BIN
bin/release/netcoreapp3.0/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