using System; using System.Threading; using System.Linq; using System.Data; using Library; using MySystem.Models; using System.Collections.Generic; /// /// 广电卡交易数据导入 /// namespace MySystem { public class SIMPosMerchantTradeService { public readonly static SIMPosMerchantTradeService Instance = new SIMPosMerchantTradeService(); private SIMPosMerchantTradeService() { } public void Start()//启动 { Thread thread = new Thread(ImportPostDo); thread.IsBackground = true; thread.Start(); } public void ImportPostDo() { while (true) { try { string data = RedisDbconn.Instance.RPop("SIMPosMerchantTradeQueue"); 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 PosSn = dr[0].ToString().Replace("机具SN:", "");// 退押机具Sn string Statuss = dr[1].ToString(); // 结果 string SeoDescription = dr[2].ToString();// 备注 int Status = 0; if (Statuss == "SUCCESS")//成功 { Status = 1; } if (Statuss == "FAIL")//失败 { Status = 2; } var pos = db.PosMachinesTwo.FirstOrDefault(m => m.PosSn == PosSn) ?? new PosMachinesTwo(); var merchantDepositReturns = db.MerchantDepositReturns.FirstOrDefault(m => m.MerchantId == pos.BindMerchantId && m.Status == 0) ?? new MerchantDepositReturns(); if (merchantDepositReturns.Id == 0) { RedisDbconn.Instance.AddList("ErrList" + checkKey, "以下操作失败,机具" + PosSn + ',' + "对应的退押订单" + merchantDepositReturns.SeoKeyword + "该订单未找到或不符合规则"); } else { //失败 if (Status == 2) { var posm = db.PosMerchantInfo.FirstOrDefault(m => m.Id == merchantDepositReturns.MerchantId) ?? new PosMerchantInfo(); posm.StandardStatus = 101; } merchantDepositReturns.Status = Status; merchantDepositReturns.UpdateDate = DateTime.Now; merchantDepositReturns.SeoDescription = SeoDescription; merchantDepositReturns.SeoTitle = Operator; SuccessCount += 1; } } DoCount += Size; db.SaveChanges(); tran.Commit(); if (DoCount >= list.Rows.Count) { RedisDbconn.Instance.Set("SIMPosMerchantTradeCheckImport:" + checkKey, "success|" + SuccessCount); RedisDbconn.Instance.SetExpire("SIMPosMerchantTradeCheckImport:" + 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文件队列异常"); } } } } }