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"), true);
}
}
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(180000);
}
}
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)
{
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))
{
index += 1;
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 % 50 == 0)
{
db.SaveChanges();
}
}
else
{
MpMainModels2.HdDepositTmp edit = db.HdDepositTmp.FirstOrDefault(m => m.SnNo == SnNo);
if (edit != null)
{
edit.Status = 0;
edit.MerKind = MerKind;
edit.PassDate = PassDate;
edit.MerName = MerName;
edit.SendMan = Name;
edit.PrizeDate = PrizeDate;
edit.PrizeAmount = decimal.Parse(function.CheckNum(PrizeAmt));
edit.DepositAmount = decimal.Parse(function.CheckNum(Deposit));
edit.ActDate = ActDate;
edit.DeviceKind = PosKind;
edit.DepositActCode = DepositActCode;
edit.MerNo = MerNo;
if (index % 50 == 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, true);
Thread.Sleep(2000);
}
else
{
Thread.Sleep(60000);
}
}
}
public void SaveTradeData(string Date, bool IsRedis = false)
{
// 要下载的文件路径
string filePath = "/haoda-trade/" + Date + ".csv";
function.WriteLog(DateTime.Now.ToString() + ":" + Date + ":" + filePath, "好哒交易数据入库2");
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();
var DataInfo = fileContents.TrimEnd('\n').Split('\n', 2);
if (DataInfo.Length > 1)
{
var DataList = DataInfo[1].Split('\n');
function.WriteLog("数量:" + Date + ":" + DataList.Length, "好哒交易数据入库2");
int index = 0;
foreach (var DataListItem in DataList)
{
if(IsRedis)
{
RedisDbconn.Instance.AddList("ListenTradeDataByOneQueue", DataListItem);
}
else
{
if(SaveTradeDataOneReady(db, DataListItem))
{
index += 1;
}
if(index % 200 == 0 && index > 0)
{
index = 0;
db.SaveChanges();
}
}
}
if(!IsRedis)
{
index = 0;
db.SaveChanges();
}
}
db.Dispose();
}
// 关闭响应
reader.Dispose();
responseStream.Dispose();
response.Close();
}
catch (WebException ex)
{
function.WriteLog(DateTime.Now.ToString() + ":" + ex.ToString(), "获取好哒FTP文件交易数据入库异常");
}
}
public void StartTradeListenByOne()
{
//每天凌晨执行获取好哒FTP昨日交易数据
Thread th2 = new Thread(ListenTradeDataByOneReady);
th2.IsBackground = true;
th2.Start();
}
///
/// 获取好哒FTP昨日交易数据
///
public void ListenTradeDataByOneReady()
{
int index = 0;
MpMainModels2.WebCMSEntities db = new MpMainModels2.WebCMSEntities();
bool dbConn = true;
while (true)
{
string content = RedisDbconn.Instance.RPop("ListenTradeDataByOneQueue");
if (!string.IsNullOrEmpty(content))
{
if(!dbConn)
{
db = new MpMainModels2.WebCMSEntities();
dbConn = true;
}
if(SaveTradeDataOneReady(db, content))
{
index += 1;
}
if(index % 200 == 0 && index > 0)
{
index = 0;
db.SaveChanges();
}
}
else
{
index = 0;
if(dbConn)
{
db.SaveChanges();
db.Dispose();
dbConn = false;
}
}
}
}
public bool SaveTradeDataOneReady(MpMainModels2.WebCMSEntities db, string content)
{
bool result = false;
try
{
var DataListInfo = content.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(!db.HdOrderTmp.Any(m => m.OrderNo == OrderNo))
{
function.WriteLog(DateTime.Now.ToString() + ":" + OrderNo, "好哒交易数据入库new");
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,
});
result = true;
}
}
catch(Exception ex)
{
function.WriteLog(DateTime.Now.ToString() + ":" + ex.ToString(), "好哒交易数据入库new异常");
}
return result;
}
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文件交易数据异常");
}
}
}
}