| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383 |
- 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 BatchEditUserAmountService
- {
- public readonly static BatchEditUserAmountService Instance = new BatchEditUserAmountService();
- private BatchEditUserAmountService()
- {
- }
- 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>("BatchEditUserAmountQueue");
- 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 RealName = dr[1].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)
- {
- SuccessCount += 1;
- user.SettleAmount = decimal.Parse(function.CheckInt(SettleAmount));
- }
- else
- {
- RedisDbconn.Instance.AddList("ErrList" + checkKey, "未找到" + MakerCode + " " + RealName + "创客信息");
- }
- }
- 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 RealName = dr[1].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)
- {
- SuccessCount += 1;
- user.CashFreezeAmt = decimal.Parse(function.CheckInt(CashFreezeAmt));
- }
- else
- {
- RedisDbconn.Instance.AddList("ErrList" + checkKey, "未找到" + MakerCode + " " + RealName + "创客信息");
- }
- }
- 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 RealName = dr[1].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 && m.RealName == RealName) ?? new Users();
- if (user.Id > 0)
- {
- SuccessCount += 1;
- user.RiskFlag = ulong.Parse(function.CheckInt(RiskFlag));
- user.RiskRemark = RiskNote;
- }
- else
- {
- RedisDbconn.Instance.AddList("ErrList" + checkKey, "未找到" + MakerCode + " " + RealName + "创客信息");
- }
- }
- 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)
- {
- account = db.UserAccount.Add(new UserAccount()
- {
- Id = user.Id,
- UserId = user.Id,
- }).Entity;
- db.SaveChanges();
- }
- 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)
- {
- RedisDbconn.Instance.AddList("ErrList" + checkKey, "以下操作失败" + user.MakerCode + ',' + user.RealName + "冻结金额大于余额");
- }
- if (OperationType == "2" && Convert.ToDecimal(OperationAmt) > account.FreezeAmount)
- {
- RedisDbconn.Instance.AddList("ErrList" + checkKey, "以下操作失败" + user.MakerCode + ',' + user.RealName + "解冻金额大于冻结金额");
- }
- if (OperationType == "3" && Convert.ToDecimal(OperationAmt) > account.BalanceAmount)
- {
- RedisDbconn.Instance.AddList("ErrList" + checkKey, "以下操作失败" + user.MakerCode + ',' + user.RealName + "扣减金额大于余额");
- }
- if ((OperationType == "1" && Convert.ToDecimal(OperationAmt) <= account.BalanceAmount) || (OperationType == "2" && Convert.ToDecimal(OperationAmt) <= account.FreezeAmount) || (OperationType == "3" && Convert.ToDecimal(OperationAmt) <= account.BalanceAmount) || (OperationType == "4"))
- {
- if (OperationType == "1" && Convert.ToDecimal(OperationAmt) <= account.BalanceAmount)
- {
- account.BalanceAmount -= Convert.ToDecimal(OperationAmt);
- account.FreezeAmount += Convert.ToDecimal(OperationAmt);
- ChangeType = 61;
- }
- if (OperationType == "2" && Convert.ToDecimal(OperationAmt) <= account.FreezeAmount)
- {
- account.BalanceAmount += Convert.ToDecimal(OperationAmt);
- account.FreezeAmount -= Convert.ToDecimal(OperationAmt);
- ChangeType = 62;
- }
- if (OperationType == "3" && Convert.ToDecimal(OperationAmt) <= account.BalanceAmount)
- {
- account.TotalAmount -= Convert.ToDecimal(OperationAmt);
- account.BalanceAmount -= Convert.ToDecimal(OperationAmt);
- ChangeType = 63;
- }
- 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();
- SuccessCount += 1;
- function.WriteLog(DateTime.Now.ToString() + "\n" + user.Id.ToString(), "批量修改账户金额");
- }
- }
- }
- else
- {
- RedisDbconn.Instance.AddList("ErrList" + checkKey, "未找到" + MakerCode + " " + RealName + "创客信息");
- }
- }
- 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(5000);
- }
- }
- catch (Exception ex)
- {
- function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "后台导入Excel文件队列异常");
- }
- }
- }
- }
- }
|