using System;
using System.Threading;
using System.Linq;
using System.Data;
using Library;
using MySystem.Models;
using System.Collections.Generic;
///
/// 分仓临时额度提现结果导入
///
namespace MySystem
{
public class StoreHouseWithdrawalResultsService
{
public readonly static StoreHouseWithdrawalResultsService Instance = new StoreHouseWithdrawalResultsService();
private StoreHouseWithdrawalResultsService()
{
}
public void Start()//启动
{
Thread thread = new Thread(ImportPostDo);
thread.IsBackground = true;
thread.Start();
}
public void ImportPostDo()
{
while (true)
{
try
{
string data = RedisDbconn.Instance.RPop("StoreHouseWithdrawalResultsQueue");
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 Id = dr[0].ToString();
string IsOk = dr[11].ToString();
var id = int.Parse(Id);
var Info = db.StoreHouseAmountRecord.FirstOrDefault(m => m.Id == id) ?? new StoreHouseAmountRecord();
if (Info.Id > 0)
{
if (IsOk == "是") Info.Status = 1;
if (IsOk == "否")
{
Info.Status = -1;
var userAccount = db.UserAccount.FirstOrDefault(m => m.Id == Info.UserId) ?? new UserAccount();
if (userAccount.Id > 0)
{
userAccount.TempAmount += Info.UseAmount;//退还卡充值临额
userAccount.ValidAmount += Info.UseAmount;//退还可用额度
}
}
SuccessCount += 1;
}
else
{
RedisDbconn.Instance.AddList("ErrList" + checkKey, "未找到记录为Id" + Id + "相关信息");
}
}
DoCount += Size;
db.SaveChanges();
tran.Commit();
if (DoCount >= list.Rows.Count)
{
RedisDbconn.Instance.Set("StoreHouseWithdrawalResultsCheckImport:" + checkKey, "success|" + SuccessCount);
RedisDbconn.Instance.SetExpire("StoreHouseWithdrawalResultsCheckImport:" + 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文件队列异常");
}
}
}
}
}