using System; using System.Threading; using System.Linq; using System.Data; using Library; using MySystem.Models; using System.Collections.Generic; using LitJson; /// /// 广电卡交易数据导入 /// 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(); // Thread thread1 = new Thread(SIMActDo); // 通过接口获取广电卡激活数据 // thread1.IsBackground = true; // thread1.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(); SpModels.WebCMSEntities spdb = new SpModels.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 OrderNo = dr["订单编码"].ToString(); string CreateDate = dr["订单创建时间"].ToString(); string PhoneNumber = dr["选择号码"].ToString(); string HasFirstCharge = dr["是否有首充"].ToString(); string FirstChargeAmount = dr["首充金额(元)"].ToString(); string Province = dr["号码归属省份"].ToString(); string City = dr["号码归属地市"].ToString(); string ProductName = dr["商品名称"].ToString(); string ActiveName = dr["促销活动名称"].ToString(); string ProductType = dr["商品类型名称"].ToString(); string ActualAmount = dr["实付金额(元)"].ToString(); string OrderStatus = dr["订单状态"].ToString(); string ActStatus = dr["激活状态名称"].ToString(); string ActDate = dr["激活时间"].ToString(); string WorkNo = dr["BOSS员工工号"].ToString(); string AccountName = dr["账号姓名"].ToString(); string SimNo = dr["SIM卡号"].ToString(); // PosMerchantInfo checkMer = db.PosMerchantInfo.FirstOrDefault(m => m.KqMerNo == PhoneNumber && m.Field5 == ActStatus); // if (checkMer == null) // { string json = "{"; json += "\"OrderNo\":\"" + OrderNo + "\","; json += "\"CreateDate\":\"" + CreateDate + "\","; json += "\"PhoneNumber\":\"" + PhoneNumber + "\","; json += "\"HasFirstCharge\":\"" + HasFirstCharge + "\","; json += "\"FirstChargeAmount\":\"" + FirstChargeAmount + "\","; json += "\"Province\":\"" + Province + "\","; json += "\"City\":\"" + City + "\","; json += "\"ProductName\":\"" + ProductName + "\","; json += "\"ActiveName\":\"" + ActiveName + "\","; json += "\"ProductType\":\"" + ProductType + "\","; json += "\"ActualAmount\":\"" + ActualAmount + "\","; json += "\"OrderStatus\":\"" + OrderStatus + "\","; json += "\"ActStatus\":\"" + ActStatus + "\","; json += "\"ActDate\":\"" + ActDate + "\","; json += "\"WorkNo\":\"" + WorkNo + "\","; json += "\"AccountName\":\"" + AccountName + "\","; json += "\"SimNo\":\"" + SimNo + "\""; json += "}"; spdb.BindRecord.Add(new SpModels.BindRecord() { CreateDate = DateTime.Parse(CreateDate), UpdateTime = DateTime.Parse(CreateDate), //机具绑定、解绑时间 CreateTime = DateTime.Parse(CreateDate), //商户操作时间 MerNewSnNo = PhoneNumber, //商户手机号 MerSnNo = SimNo, //序列号 MerName = AccountName, //商户名称 MerNo = PhoneNumber, //商户编号 Remark = ProductType, Field1 = Province, Field2 = ActiveName, Field3 = ProductName, Field4 = WorkNo, Field5 = ActStatus, SeoTitle = ActualAmount, SeoKeyword = ActDate, SeoDescription = json, ProductType = "14", Status = 1, }); spdb.Merchants.Add(new SpModels.Merchants() { SnNo = SimNo, CreateTime = DateTime.Parse(CreateDate), UpdateTime = DateTime.Parse(CreateDate), AgentName = AccountName, MerRealName = AccountName, MerMobile = PhoneNumber, MerNo = PhoneNumber, MerName = AccountName, ProductType = "14", Status = 1, }); SuccessCount += 1; } DoCount += Size; spdb.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(); } //导交易 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 Mobile = dr["用户手机号"].ToString(); string SimNo = dr["SIM卡号"].ToString(); string CreateMonth = dr["入网月份"].ToString(); string SettleMonth = dr["结算月份"].ToString(); string SettleTime = dr["结算账期"].ToString(); string SettleSpace = dr["结算场景"].ToString(); string BusinessType = dr["业务类型"].ToString(); string Province = dr["用户省份"].ToString(); string City = dr["用户地市"].ToString(); string Team = dr["团队归属"].ToString(); string WorkName = dr["行销宝姓名"].ToString(); string WorkNo = dr["行销宝工号"].ToString(); string ProductName = dr["商品名称"].ToString(); string TotalAmount = dr["账单总金额"].ToString(); string InAmount = dr["套内金额"].ToString(); string OutAmount = dr["套外金额"].ToString(); string UserStatus = dr["用户状态"].ToString(); string ChannelCode = dr["渠道编码"].ToString(); string ChannelName = dr["渠道名称"].ToString(); string OrderCreateTime = dr["订单创建时间"].ToString(); string OrderStatus = dr["订单状态"].ToString(); string ActTime = dr["激活时间"].ToString(); string SourceProductName = dr["原订单商品名称"].ToString(); string ProductType = dr["商品类型名称"].ToString(); string ActivityName = dr["促销活动名称"].ToString(); string Percent = dr["分成比例"].ToString(); string OrgDivi = dr["机构分成"].ToString(); string json = "{"; json += "\"Mobile\":\"" + Mobile + "\","; json += "\"SimNo\":\"" + SimNo + "\","; json += "\"CreateMonth\":\"" + CreateMonth + "\","; json += "\"SettleMonth\":\"" + SettleMonth + "\","; json += "\"SettleTime\":\"" + SettleTime + "\","; json += "\"SettleSpace\":\"" + SettleSpace + "\","; json += "\"BusinessType\":\"" + BusinessType + "\","; json += "\"Province\":\"" + Province + "\","; json += "\"City\":\"" + City + "\","; json += "\"Team\":\"" + Team + "\","; json += "\"WorkName\":\"" + WorkName + "\","; json += "\"WorkNo\":\"" + WorkNo + "\","; json += "\"ProductName\":\"" + ProductName + "\","; json += "\"TotalAmount\":\"" + TotalAmount + "\","; json += "\"InAmount\":\"" + InAmount + "\","; json += "\"OutAmount\":\"" + OutAmount + "\","; json += "\"UserStatus\":\"" + UserStatus + "\","; json += "\"ChannelCode\":\"" + ChannelCode + "\","; json += "\"ChannelName\":\"" + ChannelName + "\","; json += "\"OrderCreateTime\":\"" + OrderCreateTime + "\","; json += "\"OrderStatus\":\"" + OrderStatus + "\","; json += "\"ActTime\":\"" + ActTime + "\","; json += "\"SourceProductName\":\"" + SourceProductName + "\","; json += "\"ProductType\":\"" + ProductType + "\","; json += "\"ActivityName\":\"" + ActivityName + "\","; json += "\"Percent\":\"" + Percent + "\","; json += "\"OrgDivi\":\"" + OrgDivi + "\""; json += "}"; bool op = true; string OrderNo = DateTime.Now.ToString("yyyyMMddHHmmssfff") + function.get_Random(8); decimal TotalAmountNum = decimal.Parse(function.CheckNum(numberString: TotalAmount)); DateTime CreateDate = DateTime.Parse(OrderCreateTime); string CheckDate = DateTime.Now.AddMonths(-3).ToString("yyyyMM"); if (int.Parse(CreateMonth) >= int.Parse(CheckDate)) op = false; if (OrderStatus == "待激活") op = false; if (UserStatus.Contains("注销") || UserStatus.Contains("欠费")) { op = false; SimposMerchantInfo checkSimMer = db.SimposMerchantInfo.FirstOrDefault(m => m.KqMerNo == Mobile && m.KqSnNo == SimNo); if (checkSimMer != null) { checkSimMer.Status = -1; if (UserStatus.Contains("欠费") && checkSimMer.Status != -1) { checkSimMer.Status = -2; } db.SaveChanges(); } PosMerchantInfo checkMer = db.PosMerchantInfo.FirstOrDefault(m => m.KqMerNo == Mobile && m.KqSnNo == SimNo); if (checkMer != null) { checkMer.Status = -1; if (UserStatus.Contains("欠费") && checkMer.Status != -1) { checkMer.Status = -2; } db.SaveChanges(); } PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.PosSn == SimNo); if (pos != null) { pos.Status = -1; if (UserStatus.Contains("欠费") && pos.Status != -1) { pos.Status = -2; } db.SaveChanges(); } } if (UserStatus.Contains("正常")) { SimposMerchantInfo checkSimMer = db.SimposMerchantInfo.FirstOrDefault(m => m.KqMerNo == Mobile && m.KqSnNo == SimNo); if (checkSimMer != null) { if (checkSimMer.Status == -2) checkSimMer.Status = 0; db.SaveChanges(); } PosMerchantInfo checkMer = db.PosMerchantInfo.FirstOrDefault(m => m.KqMerNo == Mobile && m.KqSnNo == SimNo); if (checkMer != null) { if (checkMer.Status == -2) checkMer.Status = 1; db.SaveChanges(); } PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.PosSn == SimNo); if (pos != null && pos.Status < 0) { if (pos.Status == -2) { pos.Status = 0; } db.SaveChanges(); } } if (TotalAmountNum > 0 && op) { spdb.TradeRecord.Add(new SpModels.TradeRecord() { CreateDate = DateTime.Parse(DateTime.Now.AddMonths(-1).ToString("yyyy-MM-20 HH:mm:ss")), //创建时间 TradeSerialNo = OrderNo, //订单编号 AgentNo = WorkName + WorkNo, //一级服务商编号 MerNo = Mobile, //商户编 TradeSnNo = SimNo, //sim卡号 ChannelSerial = OrderNo, //请求号 TradeAmount = TotalAmountNum, //账单总金额 TradeStatus = OrderStatus, //订单状态 TradeDate = CreateMonth, TradeTime = CreateDate.ToString("yyyyMMdd"), BankCardType = "01", TradeType = "01", ProductType = "14", Status = 1, Field1 = ProductName, Field2 = SourceProductName, Field3 = ProductType, Field4 = BusinessType, SeoDescription = json, }); spdb.SaveChanges(); } } DoCount += Size; db.SaveChanges(); tran.Commit(); if (DoCount >= list.Rows.Count) { RedisDbconn.Instance.Set("SIMPosMerchantTradeCheckImport:" + checkKey, "success|"); 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文件队列异常"); } } } /// /// 通过接口获取广电卡激活数据 /// public void SIMActDo() { while (true) { if (DateTime.Now.Hour > 2 && DateTime.Now.Hour < 19) { try { var time = DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd"); string check = function.ReadInstance("/GetSIMActInfo/check" + time + ".txt"); if (string.IsNullOrEmpty(check)) { function.WritePage("/InstallmentDeduction/", "check" + DateTime.Now.ToString("yyyy-MM-20") + ".txt", DateTime.Now.ToString("HH:mm:ss")); var result = RadioCardHelper.Instance.QueryCardOrderInfo(time, time, "1", "99999"); JsonData jsonObj = JsonMapper.ToObject(result); if (jsonObj["resultCode"].ToString() == "1") { SpModels.WebCMSEntities spdb = new SpModels.WebCMSEntities(); var data = jsonObj["data"]["records"]; for (int i = 0; i < data.Count; i++) { var iccId = data["iccId"].ToString(); var bindRecord = spdb.BindRecord.FirstOrDefault(m => m.MerSnNo == iccId) ?? new SpModels.BindRecord(); var merchants = spdb.Merchants.FirstOrDefault(m => m.SnNo == iccId) ?? new SpModels.Merchants(); if (bindRecord.Id == 0 && merchants.Id == 0) { // {"orderNo":"B20240311214052744568","orderCreateTime":"03/11/2024 21:40:53","phoneNo":"19288438825","firstCharge":"否","initialChargeAmount":"0.00","province":"贵州省","city":"毕节市","productName":"双百套餐","promotionName":null,"productTypeName":"基础套餐","paidInAmount":"100.00","orderStatus":"已完成","activationStatusName":"已激活","activationTime":"03/11/2024 21:51:47","jobId":"VCH010198795","iccId":"89861500232320197354"} SIMActInfo sIMActInfo = new SIMActInfo(); sIMActInfo.OrderNo = data["orderNo"].ToString(); //订单编码 sIMActInfo.CreateDate = data["orderCreateTime"].ToString(); //订单创建时间 sIMActInfo.PhoneNumber = data["phoneNo"].ToString(); //选择号码 sIMActInfo.HasFirstCharge = data["firstCharge"].ToString(); //是否有首充 sIMActInfo.FirstChargeAmount = data["initialChargeAmount"].ToString(); //首充金额(元) sIMActInfo.Province = data["province"].ToString(); //号码归属省份 sIMActInfo.City = data["city"].ToString(); //号码归属地市 sIMActInfo.ProductName = data["productName"].ToString(); //商品名称 sIMActInfo.ActiveName = data["promotionName"].ToString(); //促销活动名称 sIMActInfo.ProductType = data["productTypeName"].ToString(); //商品类型名称 sIMActInfo.ActualAmount = data["paidInAmount"].ToString(); //实付金额(元) sIMActInfo.OrderStatus = data["orderStatus"].ToString(); //订单状态 sIMActInfo.ActStatus = data["activationStatusName"].ToString(); //激活状态名称 sIMActInfo.ActDate = data["activationTime"].ToString(); //激活时间 sIMActInfo.WorkNo = data["jobId"].ToString(); //BOSS员工工号 // sIMActInfo.AccountName = data[""].ToString(); //账号姓名 sIMActInfo.AccountName = ""; //账号姓名 sIMActInfo.SimNo = iccId; //SIM卡号 AddSIMSpInfo(sIMActInfo); } } } } } catch (Exception ex) { function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "获取广电卡激活信息队列异常"); } } Thread.Sleep(600000); } } /// /// 添加广电卡激活数据 /// /// public void AddSIMSpInfo(SIMActInfo sIMActInfo) { SpModels.WebCMSEntities spdb = new SpModels.WebCMSEntities(); string json = "{"; json += "\"OrderNo\":\"" + sIMActInfo.OrderNo + "\","; json += "\"CreateDate\":\"" + sIMActInfo.CreateDate + "\","; json += "\"PhoneNumber\":\"" + sIMActInfo.PhoneNumber + "\","; json += "\"HasFirstCharge\":\"" + sIMActInfo.HasFirstCharge + "\","; json += "\"FirstChargeAmount\":\"" + sIMActInfo.FirstChargeAmount + "\","; json += "\"Province\":\"" + sIMActInfo.Province + "\","; json += "\"City\":\"" + sIMActInfo.City + "\","; json += "\"ProductName\":\"" + sIMActInfo.ProductName + "\","; json += "\"ActiveName\":\"" + sIMActInfo.ActiveName + "\","; json += "\"ProductType\":\"" + sIMActInfo.ProductType + "\","; json += "\"ActualAmount\":\"" + sIMActInfo.ActualAmount + "\","; json += "\"OrderStatus\":\"" + sIMActInfo.OrderStatus + "\","; json += "\"ActStatus\":\"" + sIMActInfo.ActStatus + "\","; json += "\"ActDate\":\"" + sIMActInfo.ActDate + "\","; json += "\"WorkNo\":\"" + sIMActInfo.WorkNo + "\","; json += "\"AccountName\":\"" + sIMActInfo.AccountName + "\","; json += "\"SimNo\":\"" + sIMActInfo.SimNo + "\""; json += "}"; spdb.BindRecord.Add(new SpModels.BindRecord() { CreateDate = DateTime.Parse(sIMActInfo.CreateDate), UpdateTime = DateTime.Parse(sIMActInfo.CreateDate), //机具绑定、解绑时间 CreateTime = DateTime.Parse(sIMActInfo.CreateDate), //商户操作时间 MerNewSnNo = sIMActInfo.PhoneNumber, //商户手机号 MerSnNo = sIMActInfo.SimNo, //序列号 MerName = sIMActInfo.AccountName, //商户名称 MerNo = sIMActInfo.PhoneNumber, //商户编号 Remark = sIMActInfo.ProductType, Field1 = sIMActInfo.Province, Field2 = sIMActInfo.ActiveName, Field3 = sIMActInfo.ProductName, Field4 = sIMActInfo.WorkNo, Field5 = sIMActInfo.ActStatus, SeoTitle = sIMActInfo.ActualAmount, SeoKeyword = sIMActInfo.ActDate, SeoDescription = json, ProductType = "14", Status = 1, }); spdb.Merchants.Add(new SpModels.Merchants() { SnNo = sIMActInfo.SimNo, CreateTime = DateTime.Parse(sIMActInfo.CreateDate), UpdateTime = DateTime.Parse(sIMActInfo.CreateDate), AgentName = sIMActInfo.AccountName, MerRealName = sIMActInfo.AccountName, MerMobile = sIMActInfo.PhoneNumber, MerNo = sIMActInfo.PhoneNumber, MerName = sIMActInfo.AccountName, ProductType = "14", Status = 1, }); spdb.SaveChanges(); } } }