using System; using System.Threading; using System.Linq; using System.Data; using Library; using MySystem.Models; using System.Collections.Generic; /// /// 小分仓临时额度提现结果导入 /// namespace MySystem { public class PreWithdrawalResultsService { public readonly static PreWithdrawalResultsService Instance = new PreWithdrawalResultsService(); private PreWithdrawalResultsService() { } public void Start()//启动 { Thread thread = new Thread(ImportPostDo); thread.IsBackground = true; thread.Start(); } public void ImportPostDo() { while (true) { try { string data = RedisDbconn.Instance.RPop("PreWithdrawalResultsQueue"); 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.PreAmountRecord.FirstOrDefault(m => m.Id == id) ?? new PreAmountRecord(); 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.PreTempAmount += Info.UseAmount;//退还卡充值临额 userAccount.ValidPreAmount += 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("PreWithdrawalResultsCheckImport:" + checkKey, "success|" + SuccessCount); RedisDbconn.Instance.SetExpire("PreWithdrawalResultsCheckImport:" + 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文件队列异常"); } } } } }