using System;
using System.Threading;
using System.Linq;
using System.Data;
using Library;
using MySystem.Models;
using System.Collections.Generic;
///
/// 创客信息相关数据导入
///
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("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 storeData = new Dictionary();
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 storeData = new Dictionary();
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 storeData = new Dictionary();
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 storeData = new Dictionary();
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文件队列异常");
}
}
}
}
}