DuGuYang 2 лет назад
Родитель
Сommit
d50ddd9d80
2 измененных файлов с 391 добавлено и 18 удалено
  1. 373 0
      AppStart/Helper/ImportHelper/WithdrawalResultsService.cs
  2. 18 18
      Startup.cs

+ 373 - 0
AppStart/Helper/ImportHelper/WithdrawalResultsService.cs

@@ -0,0 +1,373 @@
+using System;
+using System.Threading;
+using System.Linq;
+using System.Data;
+using Library;
+using MySystem.Models;
+using System.Collections.Generic;
+
+/// <summary>
+/// 提现结果导入
+/// </summary>
+namespace MySystem
+{
+    public class WithdrawalResultsService
+    {
+        public readonly static WithdrawalResultsService Instance = new WithdrawalResultsService();
+        private WithdrawalResultsService()
+        {
+        }
+
+        public void Start()//启动
+        {
+            Thread thread = new Thread(ImportPostDo);
+            thread.IsBackground = true;
+            thread.Start();
+        }
+
+        public void ImportPostDo()
+        {
+            while (true)
+            {
+                try
+                {
+                    string data = RedisDbconn.Instance.RPop<string>("WithdrawalResultsQueue");
+                    if (!string.IsNullOrEmpty(data))
+                    {
+                        string[] dataList = data.Split("#cut#");
+                        string _ExcelPath = dataList[0];
+                        string _Kind = dataList[1];
+                        string checkKey = dataList[2];
+                        string Operator = dataList[3]; // 操作人
+                        int SuccessCount = 0;
+                        int DoCount = 0;
+                        string FullExcelPath = function.getPath(_ExcelPath);
+                        FullExcelPath = FullExcelPath.Replace("//", "/");
+                        DataTable list = new PublicFunction().ExcelToDataTable(FullExcelPath);
+                        int TotalCount = list.Rows.Count;
+                        while (DoCount < list.Rows.Count)
+                        {
+                            WebCMSEntities db = new WebCMSEntities();
+                            //导入结算金额
+                            if (_Kind == "1")
+                            {
+                                var tran = db.Database.BeginTransaction();
+                                try
+                                {
+                                    int Size = 100;
+                                    if (list.Rows.Count - DoCount < 100)
+                                    {
+                                        Size = list.Rows.Count - DoCount;
+                                    }
+                                    Dictionary<string, int> storeData = new Dictionary<string, int>();
+                                    for (int i = DoCount; i < DoCount + Size; i++)
+                                    {
+                                        DataRow dr = list.Rows[i];
+                                        string MakerCode = dr[0].ToString(); //创客编号
+                                        string SettleAmount = dr[2].ToString(); //提现结算金额(元)
+                                        UserForMakerCode UserCode = db.UserForMakerCode.FirstOrDefault(m => m.MakerCode == MakerCode);
+                                        if (UserCode.UserId > 0)
+                                        {
+                                            var user = db.Users.FirstOrDefault(m => m.Id == UserCode.UserId) ?? new Users();
+                                            if (user.Id > 0)
+                                            {
+                                                user.SettleAmount = decimal.Parse(function.CheckInt(SettleAmount));
+                                            }
+                                            else
+                                            {
+                                                RedisDbconn.Instance.AddList("ErrList" + checkKey, "未找到" + MakerCode + "创客信息");
+                                            }
+                                        }
+                                        else
+                                        {
+                                            RedisDbconn.Instance.AddList("ErrList" + checkKey, "未找到" + MakerCode + "编号关联信息");
+                                        }
+                                    }
+                                    DoCount += Size;
+                                    db.SaveChanges();
+                                    tran.Commit();
+                                    if (DoCount >= list.Rows.Count)
+                                    {
+                                        RedisDbconn.Instance.Set("BatchEditUserAmountCheckImport:" + checkKey, "success|" + SuccessCount);
+                                        RedisDbconn.Instance.SetExpire("BatchEditUserAmountCheckImport:" + checkKey, 60000);
+                                    }
+                                }
+                                catch (Exception ex)
+                                {
+                                    DoCount = list.Rows.Count;
+                                    function.WriteLog(ex.ToString(), "导入结算金额");
+                                    tran.Rollback();
+                                    ErrorMsg msg = new ErrorMsg()
+                                    {
+                                        Time = DateTime.Now,
+                                        ErrorContent = ex.ToString(),
+                                    };
+                                    function.WriteLog(Newtonsoft.Json.JsonConvert.SerializeObject(msg), "导入结算金额Excel文件异常");
+                                }
+                                tran.Dispose();
+                            }
+                            //导入冻结金额
+                            if (_Kind == "2")
+                            {
+                                var tran = db.Database.BeginTransaction();
+                                try
+                                {
+                                    int Size = 100;
+                                    if (list.Rows.Count - DoCount < 100)
+                                    {
+                                        Size = list.Rows.Count - DoCount;
+                                    }
+                                    Dictionary<string, int> storeData = new Dictionary<string, int>();
+                                    for (int i = DoCount; i < DoCount + Size; i++)
+                                    {
+                                        DataRow dr = list.Rows[i];
+                                        string MakerCode = dr[0].ToString(); //创客编号
+                                        string CashFreezeAmt = dr[2].ToString(); //提现结算金额(元)
+                                        UserForMakerCode UserCode = db.UserForMakerCode.FirstOrDefault(m => m.MakerCode == MakerCode);
+                                        if (UserCode.UserId > 0)
+                                        {
+                                            var user = db.Users.FirstOrDefault(m => m.Id == UserCode.UserId) ?? new Users();
+                                            if (user.Id > 0)
+                                            {
+                                                user.CashFreezeAmt = decimal.Parse(function.CheckInt(CashFreezeAmt));
+                                            }
+                                            else
+                                            {
+                                                RedisDbconn.Instance.AddList("ErrList" + checkKey, "未找到" + MakerCode + "创客信息");
+                                            }
+                                        }
+                                        else
+                                        {
+                                            RedisDbconn.Instance.AddList("ErrList" + checkKey, "未找到" + MakerCode + "编号关联信息");
+                                        }
+                                    }
+                                    DoCount += Size;
+                                    db.SaveChanges();
+                                    tran.Commit();
+                                    if (DoCount >= list.Rows.Count)
+                                    {
+                                        RedisDbconn.Instance.Set("BatchEditUserAmountCheckImport:" + checkKey, "success|" + SuccessCount);
+                                        RedisDbconn.Instance.SetExpire("BatchEditUserAmountCheckImport:" + checkKey, 60000);
+                                    }
+                                }
+                                catch (Exception ex)
+                                {
+                                    DoCount = list.Rows.Count;
+                                    function.WriteLog(ex.ToString(), "导入冻结金额");
+                                    tran.Rollback();
+                                    ErrorMsg msg = new ErrorMsg()
+                                    {
+                                        Time = DateTime.Now,
+                                        ErrorContent = ex.ToString(),
+                                    };
+                                    function.WriteLog(Newtonsoft.Json.JsonConvert.SerializeObject(msg), "导入冻结金额Excel文件异常");
+                                }
+                                tran.Dispose();
+                            }
+                            //导入风控数据
+                            if (_Kind == "3")
+                            {
+                                var tran = db.Database.BeginTransaction();
+                                try
+                                {
+                                    int Size = 100;
+                                    if (list.Rows.Count - DoCount < 100)
+                                    {
+                                        Size = list.Rows.Count - DoCount;
+                                    }
+                                    Dictionary<string, int> storeData = new Dictionary<string, int>();
+                                    for (int i = DoCount; i < DoCount + Size; i++)
+                                    {
+                                        DataRow dr = list.Rows[i];
+                                        string MakerCode = dr[0].ToString(); //创客编号
+                                        string RiskFlag = dr[2].ToString(); //风控标记(0 否 1 是)
+                                        string RiskNote = dr[3].ToString(); //风控备注
+                                        UserForMakerCode UserCode = db.UserForMakerCode.FirstOrDefault(m => m.MakerCode == MakerCode);
+                                        if (UserCode.UserId > 0)
+                                        {
+                                            var user = db.Users.FirstOrDefault(m => m.Id == UserCode.UserId) ?? new Users();
+                                            if (user.Id > 0)
+                                            {
+                                                user.RiskFlag = ulong.Parse(function.CheckInt(RiskFlag));
+                                                user.RiskRemark = RiskNote;
+                                            }
+                                            else
+                                            {
+                                                RedisDbconn.Instance.AddList("ErrList" + checkKey, "未找到" + MakerCode + "创客信息");
+                                            }
+                                        }
+                                        else
+                                        {
+                                            RedisDbconn.Instance.AddList("ErrList" + checkKey, "未找到" + MakerCode + "编号关联信息");
+                                        }
+                                    }
+                                    DoCount += Size;
+                                    db.SaveChanges();
+                                    tran.Commit();
+                                    if (DoCount >= list.Rows.Count)
+                                    {
+                                        RedisDbconn.Instance.Set("BatchEditUserAmountCheckImport:" + checkKey, "success|" + SuccessCount);
+                                        RedisDbconn.Instance.SetExpire("BatchEditUserAmountCheckImport:" + checkKey, 60000);
+                                    }
+                                }
+                                catch (Exception ex)
+                                {
+                                    DoCount = list.Rows.Count;
+                                    function.WriteLog(ex.ToString(), "导入风控数据");
+                                    tran.Rollback();
+                                    ErrorMsg msg = new ErrorMsg()
+                                    {
+                                        Time = DateTime.Now,
+                                        ErrorContent = ex.ToString(),
+                                    };
+                                    function.WriteLog(Newtonsoft.Json.JsonConvert.SerializeObject(msg), "导入风控数据Excel文件异常");
+                                }
+                                tran.Dispose();
+                            }
+                            //批量修改账户金额
+                            if (_Kind == "4")
+                            {
+                                var tran = db.Database.BeginTransaction();
+                                try
+                                {
+                                    int Size = 100;
+                                    if (list.Rows.Count - DoCount < 100)
+                                    {
+                                        Size = list.Rows.Count - DoCount;
+                                    }
+                                    Dictionary<string, int> storeData = new Dictionary<string, int>();
+                                    for (int i = DoCount; i < DoCount + Size; i++)
+                                    {
+                                        DataRow dr = list.Rows[i];
+                                        string MakerCode = dr[0].ToString(); //创客编号
+                                        string RealName = dr[1].ToString(); //创客姓名
+                                        string OperationAmt = dr[2].ToString();//操作金额
+                                        string OperationType = dr[3].ToString();//操作类型(1-冻结 2-解冻 3-扣减 4-增加)
+                                        UserForMakerCode UserCode = db.UserForMakerCode.FirstOrDefault(m => m.MakerCode == MakerCode);
+                                        if (UserCode.UserId > 0)
+                                        {
+                                            var user = db.Users.FirstOrDefault(m => m.Id == UserCode.UserId && m.RealName == RealName) ?? new Users();
+                                            if (user.Id > 0)
+                                            {
+                                                UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == user.Id) ?? new UserAccount();
+                                                if (account.Id > 0)
+                                                {
+                                                    decimal BeforeTotalAmount = account.TotalAmount; //变更前总金额
+                                                    decimal BeforeFreezeAmount = account.FreezeAmount; //变更前冻结金额
+                                                    decimal BeforeBalanceAmount = account.BalanceAmount; //变更前余额
+                                                    int ChangeType = 0;
+                                                    if (OperationType == "1" && Convert.ToDecimal(OperationAmt) <= account.BalanceAmount)
+                                                    {
+                                                        account.BalanceAmount -= Convert.ToDecimal(OperationAmt);
+                                                        account.FreezeAmount += Convert.ToDecimal(OperationAmt);
+                                                        ChangeType = 61;
+                                                    }
+                                                    else if (OperationType == "1" && Convert.ToDecimal(OperationAmt) > account.BalanceAmount)
+                                                    {
+                                                        RedisDbconn.Instance.AddList("ErrList" + checkKey, "以下操作失败" + user.MakerCode + ',' + user.RealName + "冻结金额大于余额");
+                                                    }
+                                                    else if (OperationType == "2" && Convert.ToDecimal(OperationAmt) <= account.FreezeAmount)
+                                                    {
+                                                        account.BalanceAmount += Convert.ToDecimal(OperationAmt);
+                                                        account.FreezeAmount -= Convert.ToDecimal(OperationAmt);
+                                                        ChangeType = 62;
+                                                    }
+                                                    else if (OperationType == "2" && Convert.ToDecimal(OperationAmt) > account.FreezeAmount)
+                                                    {
+                                                        RedisDbconn.Instance.AddList("ErrList" + checkKey, "以下操作失败" + user.MakerCode + ',' + user.RealName + "解冻金额大于冻结金额");
+                                                    }
+                                                    else if (OperationType == "3" && Convert.ToDecimal(OperationAmt) <= account.BalanceAmount)
+                                                    {
+                                                        account.TotalAmount -= Convert.ToDecimal(OperationAmt);
+                                                        account.BalanceAmount -= Convert.ToDecimal(OperationAmt);
+                                                        ChangeType = 63;
+                                                    }
+                                                    else if (OperationType == "3" && Convert.ToDecimal(OperationAmt) > account.BalanceAmount)
+                                                    {
+                                                        RedisDbconn.Instance.AddList("ErrList" + checkKey, "以下操作失败" + user.MakerCode + ',' + user.RealName + "扣减金额大于余额");
+                                                    }
+                                                    else if (OperationType == "4")
+                                                    {
+                                                        account.TotalAmount += Convert.ToDecimal(OperationAmt);
+                                                        account.BalanceAmount += Convert.ToDecimal(OperationAmt);
+                                                        ChangeType = 64;
+                                                    }
+                                                    decimal AfterTotalAmount = account.TotalAmount; //变更后总金额
+                                                    decimal AfterFreezeAmount = account.FreezeAmount; //变更后冻结金额
+                                                    decimal AfterBalanceAmount = account.BalanceAmount; //变更后余额
+                                                    UserAccountRecord userAccountRecord = db.UserAccountRecord.Add(new UserAccountRecord()
+                                                    {
+                                                        CreateDate = DateTime.Now,
+                                                        UpdateDate = DateTime.Now,
+                                                        UserId = user.Id, //创客
+                                                        ChangeType = ChangeType, //变动类型
+                                                        ChangeAmount = Convert.ToDecimal(OperationAmt), //变更金额
+                                                        BeforeTotalAmount = BeforeTotalAmount, //变更前总金额
+                                                        AfterTotalAmount = AfterTotalAmount, //变更后总金额
+                                                        BeforeFreezeAmount = BeforeFreezeAmount, //变更前冻结金额
+                                                        AfterFreezeAmount = AfterFreezeAmount, //变更后冻结金额
+                                                        BeforeBalanceAmount = BeforeBalanceAmount, //变更前余额
+                                                        AfterBalanceAmount = AfterBalanceAmount, //变更后余额
+                                                        Remark = dr[4].ToString(),
+                                                    }).Entity;
+                                                    db.SaveChanges();
+                                                    function.WriteLog(DateTime.Now.ToString() + "\n" + user.Id.ToString(), "批量修改账户金额");
+                                                }
+                                                else
+                                                {
+                                                    account = db.UserAccount.Add(new UserAccount()
+                                                    {
+                                                        Id = user.Id,
+                                                        UserId = user.Id,
+                                                    }).Entity;
+                                                    db.SaveChanges();
+                                                }
+                                            }
+                                            else
+                                            {
+                                                RedisDbconn.Instance.AddList("ErrList" + checkKey, "未找到" + MakerCode + "创客信息");
+                                            }
+                                        }
+                                        else
+                                        {
+                                            RedisDbconn.Instance.AddList("ErrList" + checkKey, "未找到" + MakerCode + "编号关联信息");
+                                        }
+                                    }
+                                    DoCount += Size;
+                                    db.SaveChanges();
+                                    tran.Commit();
+                                    if (DoCount >= list.Rows.Count)
+                                    {
+                                        RedisDbconn.Instance.Set("BatchEditUserAmountCheckImport:" + checkKey, "success|" + SuccessCount);
+                                        RedisDbconn.Instance.SetExpire("BatchEditUserAmountCheckImport:" + checkKey, 60000);
+                                    }
+                                }
+                                catch (Exception ex)
+                                {
+                                    DoCount = list.Rows.Count;
+                                    function.WriteLog(ex.ToString(), "批量修改账户金额");
+                                    tran.Rollback();
+                                    ErrorMsg msg = new ErrorMsg()
+                                    {
+                                        Time = DateTime.Now,
+                                        ErrorContent = ex.ToString(),
+                                    };
+                                    function.WriteLog(Newtonsoft.Json.JsonConvert.SerializeObject(msg), "批量修改账户金额Excel文件异常");
+                                }
+                                tran.Dispose();
+                            }
+                        }
+                    }
+                    else
+                    {
+                        Thread.Sleep(50000);
+                    }
+                }
+                catch (Exception ex)
+                {
+                    function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "后台导入Excel文件队列异常");
+                }
+            }
+        }
+    }
+}

+ 18 - 18
Startup.cs

@@ -104,7 +104,7 @@ namespace MySystem
                 Env = "Develop";
                 Env = "Develop";
                 app.UseDeveloperExceptionPage();
                 app.UseDeveloperExceptionPage();
             }
             }
-            else 
+            else
             {
             {
                 Env = "Production";
                 Env = "Production";
                 app.UseHsts();
                 app.UseHsts();
@@ -132,29 +132,29 @@ namespace MySystem
                     name: "default",
                     name: "default",
                     pattern: "{controller=Home}/{action=Index}/{Id?}");
                     pattern: "{controller=Home}/{action=Index}/{Id?}");
             });
             });
-            
+
             initMainServer(Env);
             initMainServer(Env);
             initBsServer();
             initBsServer();
             initCashServer();
             initCashServer();
             initSpServer();
             initSpServer();
             initOperateServer();
             initOperateServer();
 
 
-            if(Env == "Develop")
-            {
-            }
-            if(Env == "Production")
-            {
-                ResetUserTradeService.Instance.Start();
-                ResetMerchantTradeService.Instance.Start();
-                SycnProfitServiceV3.Instance.Start();
-                SycnHelpProfitService.Instance.Start();
-                ExcelHelper.Instance.Start();
-                OpExcelHelper.Instance.Start();
-                SycnUserMachineCountHelper.Instance.Start(); //重置创客机具数量
+            // if(Env == "Develop")
+            // {
+            // }
+            // if(Env == "Production")
+            // {
+            //     ResetUserTradeService.Instance.Start();
+            //     ResetMerchantTradeService.Instance.Start();
+            //     SycnProfitServiceV3.Instance.Start();
+            //     SycnHelpProfitService.Instance.Start();
+            //     ExcelHelper.Instance.Start();
+            //     OpExcelHelper.Instance.Start();
+            //     SycnUserMachineCountHelper.Instance.Start(); //重置创客机具数量
 
 
-                TestHelper.Instance.Start(); //生成兑换券
-                BatchEditUserAmountService.Instance.Start(); //创客信息相关数据导入
-            }
+            //     TestHelper.Instance.Start(); //生成兑换券
+            // }
+            BatchEditUserAmountService.Instance.Start(); //创客信息相关数据导入
         }
         }
 
 
 
 
@@ -168,7 +168,7 @@ namespace MySystem
         private void initMainServer(string Env)
         private void initMainServer(string Env)
         {
         {
             string dbName = "KxsMainServer";
             string dbName = "KxsMainServer";
-            if(Env == "Production")
+            if (Env == "Production")
             {
             {
                 dbName = "KxsProfitServer";
                 dbName = "KxsProfitServer";
             }
             }