using System; using System.Collections.Generic; using System.Linq; using System.Data; using System.Threading; using Library; using System.Net; using System.IO; using MySystem.SpModels; namespace MySystem { /// /// 获取好哒ftp数据 /// public class GetHaoDaFTPInfoService { public readonly static GetHaoDaFTPInfoService Instance = new GetHaoDaFTPInfoService(); private GetHaoDaFTPInfoService() { } // 47.108.253.46 // 用户名:hdftp // 密:haodatradeftp2024 // 目录:/haoda-trade public string ftpServerAddress = "ftp://47.108.253.46"; public string ftpUser = "hdftp"; public string ftpPassword = "haodatradeftp2024"; public void Start() { //每天凌晨执行获取好哒FTP昨日交易数据 Thread th2 = new Thread(GetDepositDataReady); th2.IsBackground = true; th2.Start(); } /// /// 获取好哒FTP昨日交易数据 /// public void GetDepositDataReady() { while (true) { if (DateTime.Now.Hour > 10 && DateTime.Now.Hour < 22) { string check = function.ReadInstance("/GetFTPDepositYesterday/check" + DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd") + ".txt"); if (string.IsNullOrEmpty(check)) { function.WritePage("/GetFTPDepositYesterday/", "check" + DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd") + ".txt", DateTime.Now.ToString()); SaveDepositData(DateTime.Now.AddDays(-1).ToString("yyyyMMdd")); Thread.Sleep(2000); GetDepositData(); Thread.Sleep(60000); SaveTradeData(DateTime.Now.AddDays(-1).ToString("yyyyMMdd")); } } Thread.Sleep(1800000); } } public void Start2() { //每天凌晨执行获取好哒FTP昨日交易数据 Thread th2 = new Thread(GetDepositDataReady2); th2.IsBackground = true; th2.Start(); } /// /// 获取好哒FTP昨日交易数据 /// public void GetDepositDataReady2() { while (true) { if (DateTime.Now > DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd") + " 10:05:00")) { SaveDepositData("d_" + DateTime.Now.ToString("yyyyMMdd")); Thread.Sleep(2000); GetDepositData(); } SaveTradeData(DateTime.Now.ToString("yyyyMMdd")); Thread.Sleep(1800000); } } public void StartListen() { //每天凌晨执行获取好哒FTP昨日交易数据 Thread th2 = new Thread(ListenDepositDataReady); th2.IsBackground = true; th2.Start(); } /// /// 获取好哒FTP昨日交易数据 /// public void ListenDepositDataReady() { while (true) { string content = RedisDbconn.Instance.RPop("ListenDepositDataQueue2"); if (!string.IsNullOrEmpty(content)) { SaveDepositData(content); Thread.Sleep(2000); GetDepositData(); Thread.Sleep(2000); } else { Thread.Sleep(60000); } } } public void SaveDepositData(string Date) { // 要下载的文件路径 string filePath = "/haoda-deposit/deposit_" + Date + ".csv"; try { // 创建FtpWebRequest对象 FtpWebRequest request = (FtpWebRequest)WebRequest.Create(ftpServerAddress + filePath); request.Method = WebRequestMethods.Ftp.DownloadFile; request.Credentials = new NetworkCredential(ftpUser, ftpPassword); // 使用WebResponse获取响应 FtpWebResponse response = (FtpWebResponse)request.GetResponse(); // 打开数据流 Stream responseStream = response.GetResponseStream(); StreamReader reader = new StreamReader(responseStream); // 读取数据 string fileContents = reader.ReadToEnd(); if (!string.IsNullOrEmpty(fileContents)) { MpMainModels2.WebCMSEntities db = new MpMainModels2.WebCMSEntities(); List SnNos = db.HdDepositTmp.Select(m => m.SnNo).ToList(); List ChkSnNos = new List(); var DataInfo = fileContents.TrimEnd('\n').Split('\n', 2); if(DataInfo.Length > 1) { int index = 0; var DataList = DataInfo[1].Split('\n'); foreach (var DataListItem in DataList) { index += 1; var DataListInfo = DataListItem.Split(','); string SnNo = DataListInfo[0]; //sn string MerNo = DataListInfo[1]; //商户编号 string PosKind = DataListInfo[2]; //机具型号 string ActDate = DataListInfo[3]; //激活时间 string Deposit = DataListInfo[4]; //押金金额 string PrizeAmt = "0"; //奖励金额 string PrizeDate = "None"; //奖励发放时间 string Name = ""; //发放人姓名 string MerName = ""; //商户名称 string PassDate = ""; //审核通过时期 string MerKind = ""; //商户类型 string DepositActCode = ""; //押金活动编号 if(Date.StartsWith("d_")) { MerName = DataListInfo[5]; //商户名称 PassDate = DataListInfo[6]; //审核通过时期 MerKind = DataListInfo[7]; //商户类型 DepositActCode = DataListInfo[8]; //押金活动编号 } else { PrizeAmt = DataListInfo[5]; //奖励金额 PrizeDate = DataListInfo[6]; //奖励发放时间 Name = DataListInfo[7]; //发放人姓名 MerName = DataListInfo[8]; //商户名称 PassDate = DataListInfo[9]; //审核通过时期 if(DataListInfo.Length > 10) MerKind = DataListInfo[10]; //商户类型 if(DataListInfo.Length > 11) DepositActCode = DataListInfo[11]; //押金活动编号 } if(!SnNos.Contains(SnNo) && !ChkSnNos.Contains(SnNo)) { function.WriteLog(DateTime.Now.ToString() + ":" + SnNo, "好哒押金数据入库"); ChkSnNos.Add(SnNo); db.HdDepositTmp.Add(new MpMainModels2.HdDepositTmp() { SnNo = SnNo, MerKind = MerKind, PassDate = PassDate, MerName = MerName, SendMan = Name, PrizeDate = PrizeDate, PrizeAmount = decimal.Parse(function.CheckNum(PrizeAmt)), DepositAmount = decimal.Parse(function.CheckNum(Deposit)), ActDate = ActDate, DeviceKind = PosKind, DepositActCode = DepositActCode, MerNo = MerNo, }); if(index % 200 == 0) { db.SaveChanges(); } } } db.SaveChanges(); } db.Dispose(); } // 关闭响应 reader.Dispose(); responseStream.Dispose(); response.Close(); } catch (WebException ex) { function.WriteLog(DateTime.Now.ToString() + ":" + ex.ToString(), "获取好哒FTP文件数据异常"); } } public void GetDepositData() { try { WebCMSEntities db = new WebCMSEntities(); MpMainModels2.WebCMSEntities mpdb2 = new MpMainModels2.WebCMSEntities(); List deposits = mpdb2.HdDepositTmp.Where(m => m.Status == 0).ToList(); if(deposits.Count > 0) { foreach (var deposit in deposits) { string SnNo = deposit.SnNo; //sn string MerNo = deposit.MerNo; //商户编号 string PosKind = deposit.DeviceKind; //机具型号 string ActDate = deposit.ActDate; //激活时间 string Deposit = deposit.DepositAmount.ToString(); //押金金额 string PrizeAmt = deposit.PrizeAmount.ToString(); //奖励金额 string PrizeDate = deposit.PrizeDate; //奖励发放时间 string Name = deposit.SendMan; //发放人姓名 string MerName = deposit.MerName; //商户名称 string PassDate = deposit.PassDate; //审核通过时期 string MerKind = deposit.MerKind; //商户类型 string DepositActCode = deposit.DepositActCode; //商户类型 if(!db.ActivateRecord.Any(m => m.SnNo == SnNo && m.MerNo == MerNo)) { MpMainModels2.MerchantAddInfo meradd = mpdb2.MerchantAddInfo.FirstOrDefault(m => m.MchtNo == MerNo) ?? new MpMainModels2.MerchantAddInfo(); MpMainModels2.MerchantInfo merchant = mpdb2.MerchantInfo.FirstOrDefault(m => m.Id == meradd.Id) ?? new MpMainModels2.MerchantInfo(); if(!string.IsNullOrEmpty(meradd.CertMerchantName)) MerName = meradd.CertMerchantName; string ActDateString = ActDate.Substring(0, 4) + "-" + ActDate.Substring(4, 2) + "-" + ActDate.Substring(6, 2); string ProductType = "0"; if(PosKind == "好哒语音王Y512") ProductType = "18"; if(PosKind == "4G收款王M820") ProductType = "19"; if(PosKind == "4G收款王M826") ProductType = "20"; if(PosKind == "好哒S312") ProductType = "21"; if(PosKind == "好哒扫码通M837") ProductType = "29"; BindRecord mer = db.BindRecord.Add(new BindRecord() { CreateDate = DateTime.Now, UpdateTime = DateTime.Now, //机具绑定、解绑时间 CreateTime = DateTime.Now, //商户操作时间 MerSnNo = SnNo, //序列号 MerNo = MerNo, //商户编号 MerName = MerName, SeoTitle = PrizeAmt, SeoKeyword = ActDateString, ProductType = ProductType, Field1 = Deposit, Field2 = PrizeDate, Field3 = Name, Field4 = PassDate, Field5 = MerKind, Status = 1, QueryCount = merchant.UserId, }).Entity; db.Merchants.Add(new Merchants() { SnNo = SnNo, CreateTime = DateTime.Now, UpdateTime = DateTime.Now, AgentName = Name, MerRealName = Name, MerNo = MerNo, MerName = Name, ProductType = ProductType, Status = 1, QueryCount = merchant.UserId, }); db.SaveChanges(); Thread.Sleep(1000); ActivateRecord act = db.ActivateRecord.Add(new ActivateRecord() { SnNo = SnNo, CreateDate = DateTime.Now, SeoTitle = Deposit, ActivateDate = DateTime.Now, AgentNo = MerNo, MerRealName = Name, MerNo = MerNo, MerName = Name, ProductType = ProductType, ChannelSerial = DateTime.Now.ToString("yyyyMMddHHmmssfff") + function.get_Random(8), Status = 1, Field1 = PassDate, Field2 = MerKind, Field3 = ActDateString, Field4 = DepositActCode, QueryCount = merchant.UserId, }).Entity; db.SaveChanges(); //推送MQ给创业帮 var merchantAddInfo = mpdb2.MerchantAddInfo.FirstOrDefault(m => m.MchtNo == MerNo) ?? new MpMainModels2.MerchantAddInfo(); if (merchantAddInfo.BrandId == 1 && !string.IsNullOrEmpty(merchantAddInfo.CybMakerCode)) { SortedList obj = new SortedList(); obj.Add("create_time", ActDateString); obj.Add("sn", SnNo); obj.Add("deposit", Deposit); obj.Add("subject_type", merchantAddInfo.SubjectType); obj.Add("merch_no", merchantAddInfo.MchtNo); obj.Add("maker_code", merchantAddInfo.CybMakerCode); PushHelper.Instance.Do(obj, "cashNotify"); // PosPushDataNewHelper.Bind(mer, PosKind); // PosPushDataNewHelper.Deposit(act); } } MpMainModels2.HdDepositTmp edit = mpdb2.HdDepositTmp.FirstOrDefault(m => m.SnNo == SnNo); if(edit != null) { edit.Status = 1; mpdb2.SaveChanges(); } } } db.Dispose(); mpdb2.Dispose(); } catch (WebException ex) { function.WriteLog(DateTime.Now.ToString() + ":" + ex.ToString(), "获取好哒FTP文件数据异常"); } } public void StartTrade() { //每天凌晨执行获取好哒FTP昨日交易数据 Thread th2 = new Thread(GetTradeDataReady); th2.IsBackground = true; th2.Start(); } /// /// 获取好哒FTP昨日交易数据 /// public void GetTradeDataReady() { while (true) { if (DateTime.Now.Hour > 10 && DateTime.Now.Hour < 22) { string check = function.ReadInstance("/GetFTPTradeYesterday/check" + DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd") + ".txt"); if (string.IsNullOrEmpty(check)) { function.WritePage("/GetFTPTradeYesterday/", "check" + DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd") + ".txt", DateTime.Now.ToString()); SaveTradeData(DateTime.Now.AddDays(-1).ToString("yyyyMMdd")); Thread.Sleep(600000); } } else { Thread.Sleep(1800000); } } } public void StartTradeListen() { //每天凌晨执行获取好哒FTP昨日交易数据 Thread th2 = new Thread(ListenTradeDataReady); th2.IsBackground = true; th2.Start(); } /// /// 获取好哒FTP昨日交易数据 /// public void ListenTradeDataReady() { while (true) { string content = RedisDbconn.Instance.RPop("ListenTradeDataQueue"); if (!string.IsNullOrEmpty(content)) { SaveTradeData(content); Thread.Sleep(2000); } else { Thread.Sleep(60000); } } } public void SaveTradeData(string Date) { // 要下载的文件路径 string filePath = "/haoda-trade/" + Date + ".csv"; function.WriteLog(DateTime.Now.ToString() + ":" + filePath, "获取好哒FTP文件交易数据"); try { // 创建FtpWebRequest对象 FtpWebRequest request = (FtpWebRequest)WebRequest.Create(ftpServerAddress + filePath); request.Method = WebRequestMethods.Ftp.DownloadFile; request.Credentials = new NetworkCredential(ftpUser, ftpPassword); // 使用WebResponse获取响应 FtpWebResponse response = (FtpWebResponse)request.GetResponse(); // 打开数据流 Stream responseStream = response.GetResponseStream(); StreamReader reader = new StreamReader(responseStream); // 读取数据 string fileContents = reader.ReadToEnd(); if (!string.IsNullOrEmpty(fileContents)) { MpMainModels2.WebCMSEntities db = new MpMainModels2.WebCMSEntities(); List orderNos = db.HdOrderTmp.Select(m => m.OrderNo).ToList(); List chkOrderNos = new List(); var DataInfo = fileContents.TrimEnd('\n').Split('\n', 2); if(DataInfo.Length > 1) { var DataList = DataInfo[1].Split('\n'); int index = 0; foreach (var DataListItem in DataList) { index += 1; var DataListInfo = DataListItem.Split(','); var MerchantNo = ""; // 商户号 var BaseNo = ""; // 设备号 var DeviceKind = ""; // 终端类型 var OrderNo = ""; // 订单号 var PayWay = ""; // 支付方式(微信 支付宝) var TradeType = ""; // 交易类型 var TradeAmount = ""; // 交易金额 var TradeFee = ""; // 交易手续费 var TradeDate = ""; // 交易时间 var TradeCycle = ""; // 结算周期 MerchantNo = DataListInfo[0]; BaseNo = DataListInfo[1]; DeviceKind = DataListInfo[2]; OrderNo = DataListInfo[3]; PayWay = DataListInfo[4]; TradeType = DataListInfo[5]; TradeAmount = DataListInfo[6]; TradeFee = DataListInfo[7]; TradeDate = DataListInfo[8]; TradeCycle = DataListInfo[9]; if(!orderNos.Contains(OrderNo) && !chkOrderNos.Contains(OrderNo)) { function.WriteLog(DateTime.Now.ToString() + ":" + OrderNo, "好哒交易数据入库"); chkOrderNos.Add(OrderNo); db.HdOrderTmp.Add(new MpMainModels2.HdOrderTmp() { OrderNo = OrderNo, SettleDuration = TradeCycle, TradeTime = TradeDate, TradeFee = decimal.Parse(function.CheckNum(TradeFee)), TradeAmount = decimal.Parse(function.CheckNum(TradeAmount)), TradeType = TradeType, PayMode = PayWay, DeviceKind = DeviceKind, SnNo = BaseNo, MerNo = MerchantNo, }); if(index % 200 == 0) { db.SaveChanges(); } } } db.SaveChanges(); } db.Dispose(); } // 关闭响应 reader.Dispose(); responseStream.Dispose(); response.Close(); } catch (WebException ex) { function.WriteLog(DateTime.Now.ToString() + ":" + ex.ToString(), "获取好哒FTP文件交易数据入库异常"); } } public void StartGetTradeData() { //每天凌晨执行获取好哒FTP昨日交易数据 Thread th2 = new Thread(ListenGetTradeData); th2.IsBackground = true; th2.Start(); } /// /// 获取好哒FTP昨日交易数据 /// public void ListenGetTradeData() { while (true) { // if(DateTime.Now.Hour < 9) // { GetTradeData(); // Thread.Sleep(2000); // } // else // { Thread.Sleep(10000); // } } } public void GetTradeData() { try { MpMainModels2.WebCMSEntities db = new MpMainModels2.WebCMSEntities(); List orders = db.HdOrderTmp.Where(m => m.Status == 0).Take(200).ToList(); if(orders.Count > 0) { foreach (var order in orders) { var MerchantNo = order.MerNo; // 商户号 var BaseNo = order.SnNo; // 设备号 var DeviceKind = order.DeviceKind; // 终端类型 var OrderNo = order.OrderNo; // 订单号 var PayWay = order.PayMode; // 支付方式(微信 支付宝) var TradeType = order.TradeType; // 交易类型 var TradeAmount = order.TradeAmount; // 交易金额 var TradeFee = order.TradeFee; // 交易手续费 var TradeDate = order.TradeTime; // 交易时间 var TradeCycle = order.SettleDuration; // 结算周期 TradeDate = TradeDate.Substring(0, 4) + "-" + TradeDate.Substring(4, 2) + "-" + TradeDate.Substring(6, 2) + " " + TradeDate.Substring(8, 2) + ":" + TradeDate.Substring(10, 2) + ":" + TradeDate.Substring(12, 2); function.WriteLog("OrderNo:" + OrderNo, "获取好哒FTP文件交易数据"); function.WriteLog("MerchantNo:" + MerchantNo, "获取好哒FTP文件交易数据"); var PayMode = 0; if (PayWay.Contains("支付宝")) PayMode = 1; if (PayWay.Contains("微信")) PayMode = 2; var merchantAddInfo = db.MerchantAddInfo.FirstOrDefault(m => m.MchtNo == MerchantNo) ?? new MpMainModels2.MerchantAddInfo(); if (merchantAddInfo.Id > 0) { function.WriteLog("找到商户", "获取好哒FTP文件交易数据"); var merchantInfo = db.MerchantInfo.FirstOrDefault(m => m.Id == merchantAddInfo.Id) ?? new MpMainModels2.MerchantInfo(); if(merchantInfo.IsAct == 0) { merchantInfo.IsAct = 1; } function.WriteLog("订单号不存在,开始入库", "获取好哒FTP文件交易数据"); var query = db.ConsumerOrders.FirstOrDefault(m => m.OrderNo == OrderNo); if(query == null) { decimal FeeRate = decimal.Parse(function.CheckNum(merchantAddInfo.FeeRate)) * 100; query = db.ConsumerOrders.Add(new MpMainModels2.ConsumerOrders() { Status = 1, CreateDate = DateTime.Parse(TradeDate), UpdateDate = DateTime.Parse(TradeDate), SnNo = BaseNo, PayMoney = TradeAmount, PayMode = PayMode, SeoTitle = OrderNo, OrderNo = OrderNo, MerchantId = merchantAddInfo.Id, UserId = merchantInfo.UserId, SeoKeyword = merchantAddInfo.CybMakerCode, Sort = (int)FeeRate, TradePayNo = MerchantNo, }).Entity; } MpMainModels2.HdOrderTmp edit = db.HdOrderTmp.FirstOrDefault(m => m.OrderNo == OrderNo); if(edit != null) { edit.Status = 1; } db.SaveChanges(); function.WriteLog("入库完毕", "获取好哒FTP文件交易数据"); //推送MQ给创业帮 if (merchantAddInfo.BrandId == 1) { if(!string.IsNullOrEmpty(merchantAddInfo.CybMakerCode)) { SortedList obj = new SortedList(); obj.Add("create_time", TradeDate); obj.Add("sn", BaseNo); obj.Add("pay_money", TradeAmount.ToString()); obj.Add("pay_mode", PayMode.ToString()); obj.Add("order_no", OrderNo); obj.Add("merch_no", merchantAddInfo.MchtNo); obj.Add("maker_code", merchantAddInfo.CybMakerCode); PushHelper.Instance.Do(obj); } OrderMessageHelper.SendOrderMsg(query); } PosPushDataNewHelper.Trade(query, DeviceKind); if(DeviceKind.Contains("好哒二维码")) { if(!db.HdQrCodeTmp.Any(m => m.SnNo == BaseNo && m.MerNo == MerchantNo)) { db.HdQrCodeTmp.Add(new MpMainModels2.HdQrCodeTmp() { SnNo = BaseNo, MerNo = MerchantNo, }); db.SaveChanges(); // PosPushDataNewHelper.Bind(new SpModels.BindRecord() // { // MerSnNo = BaseNo, // MerNo = MerchantNo, // MerName = merchantAddInfo.CertMerchantName, // CreateTime = DateTime.Parse(TradeDate), // QueryCount = merchantInfo.UserId, // }, "好哒二维码"); } } } else { MpMainModels2.HdOrderTmp edit = db.HdOrderTmp.FirstOrDefault(m => m.OrderNo == OrderNo); if(edit != null) { edit.Status = -1; } db.SaveChanges(); } Thread.Sleep(100); } } db.Dispose(); } catch (WebException ex) { function.WriteLog(DateTime.Now.ToString() + ":" + ex.ToString(), "获取好哒FTP文件交易数据异常"); } } } }