GetHaoDaFTPInfoService.cs 48 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Data;
  5. using System.Threading;
  6. using Library;
  7. using System.Net;
  8. using System.IO;
  9. using MySystem.SpModels;
  10. namespace MySystem
  11. {
  12. /// <summary>
  13. /// 获取好哒ftp数据
  14. /// </summary>
  15. public class GetHaoDaFTPInfoService
  16. {
  17. public readonly static GetHaoDaFTPInfoService Instance = new GetHaoDaFTPInfoService();
  18. private GetHaoDaFTPInfoService()
  19. { }
  20. // 47.108.253.46
  21. // 用户名:hdftp
  22. // 密:haodatradeftp2024
  23. // 目录:/haoda-trade
  24. public string ftpServerAddress = "ftp://47.108.253.46";
  25. public string ftpUser = "hdftp";
  26. public string ftpPassword = "haodatradeftp2024";
  27. public void Start()
  28. {
  29. //每天凌晨执行获取好哒FTP昨日交易数据
  30. Thread th2 = new Thread(GetDepositDataReady);
  31. th2.IsBackground = true;
  32. th2.Start();
  33. }
  34. /// <summary>
  35. /// 获取好哒FTP昨日交易数据
  36. /// </summary>
  37. public void GetDepositDataReady()
  38. {
  39. while (true)
  40. {
  41. if (DateTime.Now > DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd") + " 10:02:00") && DateTime.Now.Hour < 22)
  42. {
  43. string check = function.ReadInstance("/GetFTPDepositYesterday/check" + DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd") + ".txt");
  44. if (string.IsNullOrEmpty(check))
  45. {
  46. function.WritePage("/GetFTPDepositYesterday/", "check" + DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd") + ".txt", DateTime.Now.ToString());
  47. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "----start", "监控头一天数据");
  48. SaveDepositData(DateTime.Now.AddDays(-1).ToString("yyyyMMdd"), true);
  49. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "----end\n\n\n\n", "监控头一天数据");
  50. Thread.Sleep(2000);
  51. // GetDepositData();
  52. // Thread.Sleep(60000);
  53. SaveTradeData(DateTime.Now.AddDays(-1).ToString("yyyyMMdd"), true);
  54. }
  55. }
  56. Thread.Sleep(900000);
  57. }
  58. }
  59. public void Start2()
  60. {
  61. //每天凌晨执行获取好哒FTP昨日交易数据
  62. Thread th2 = new Thread(GetDepositDataReady2);
  63. th2.IsBackground = true;
  64. th2.Start();
  65. }
  66. /// <summary>
  67. /// 获取好哒FTP昨日交易数据
  68. /// </summary>
  69. public void GetDepositDataReady2()
  70. {
  71. while (true)
  72. {
  73. if (DateTime.Now > DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd") + " 10:20:00"))
  74. {
  75. SaveDepositData("d_" + DateTime.Now.ToString("yyyyMMdd"));
  76. Thread.Sleep(2000);
  77. GetDepositData();
  78. }
  79. SaveTradeData(DateTime.Now.ToString("yyyyMMdd"));
  80. Thread.Sleep(180000);
  81. }
  82. }
  83. public void StartListen()
  84. {
  85. //每天凌晨执行获取好哒FTP昨日交易数据
  86. Thread th2 = new Thread(start: ListenDepositDataReady);
  87. th2.IsBackground = true;
  88. th2.Start();
  89. }
  90. /// <summary>
  91. /// 获取好哒FTP昨日交易数据
  92. /// </summary>
  93. public void ListenDepositDataReady()
  94. {
  95. while (true)
  96. {
  97. string content = RedisDbconn.Instance.RPop<string>("ListenDepositDataQueue2");
  98. if (!string.IsNullOrEmpty(content))
  99. {
  100. SaveDepositData(content);
  101. Thread.Sleep(2000);
  102. GetDepositData();
  103. Thread.Sleep(2000);
  104. }
  105. else
  106. {
  107. Thread.Sleep(60000);
  108. }
  109. }
  110. }
  111. public void SaveDepositData(string Date, bool IsRedis = false)
  112. {
  113. // 要下载的文件路径
  114. string filePath = "/haoda-deposit/deposit_" + Date + ".csv";
  115. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "----" + filePath, "监控头一天数据");
  116. try
  117. {
  118. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "----ok", "监控头一天数据");
  119. // 创建FtpWebRequest对象
  120. FtpWebRequest request = (FtpWebRequest)WebRequest.Create(ftpServerAddress + filePath);
  121. request.Method = WebRequestMethods.Ftp.DownloadFile;
  122. request.Credentials = new NetworkCredential(ftpUser, ftpPassword);
  123. // 使用WebResponse获取响应
  124. FtpWebResponse response = (FtpWebResponse)request.GetResponse();
  125. // 打开数据流
  126. Stream responseStream = response.GetResponseStream();
  127. StreamReader reader = new StreamReader(responseStream);
  128. // 读取数据
  129. string fileContents = reader.ReadToEnd();
  130. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "----ready", "监控头一天数据");
  131. if (!string.IsNullOrEmpty(fileContents))
  132. {
  133. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "----have content", "监控头一天数据");
  134. MpMainModels2.WebCMSEntities db = new MpMainModels2.WebCMSEntities();
  135. List<string> SnNos = db.HdDepositTmp.Select(m => m.SnNo).ToList();
  136. List<string> ChkSnNos = new List<string>();
  137. var DataInfo = fileContents.TrimEnd('\n').Split('\n', 2);
  138. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "----count:" + DataInfo.Length, "监控头一天数据");
  139. if (DataInfo.Length > 1)
  140. {
  141. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "----have record", "监控头一天数据");
  142. int index = 0;
  143. var DataList = DataInfo[1].Split('\n');
  144. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "----record count:" + DataList.Length, "监控头一天数据");
  145. foreach (var DataListItem in DataList)
  146. {
  147. if(IsRedis)
  148. {
  149. var DataListInfo = DataListItem.Split(',');
  150. string ActDate = DataListInfo[3]; //激活时间
  151. if(ActDate == DateTime.Now.AddDays(-1).ToString("yyyyMMdd"))
  152. {
  153. function.WriteLog(DataListItem, "监控头一天数据");
  154. }
  155. RedisDbconn.Instance.AddList("ListenDepositDataByOneQueue", DataListItem);
  156. }
  157. else
  158. {
  159. SaveDepositDataOneReady(db, DataListItem);
  160. index += 1;
  161. if(index % 200 == 0 && index > 0)
  162. {
  163. index = 0;
  164. db.SaveChanges();
  165. }
  166. }
  167. }
  168. if(!IsRedis)
  169. {
  170. index = 0;
  171. db.SaveChanges();
  172. }
  173. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "----read data end", "监控头一天数据");
  174. }
  175. db.Dispose();
  176. }
  177. // 关闭响应
  178. reader.Dispose();
  179. responseStream.Dispose();
  180. response.Close();
  181. }
  182. catch (WebException ex)
  183. {
  184. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "----err", "监控头一天数据");
  185. function.WriteLog(DateTime.Now.ToString() + ":" + ex.ToString(), "获取好哒FTP押金数据异常");
  186. }
  187. }
  188. public void GetDepositData()
  189. {
  190. try
  191. {
  192. WebCMSEntities db = new WebCMSEntities();
  193. MpMainModels2.WebCMSEntities mpdb2 = new MpMainModels2.WebCMSEntities();
  194. JavaProductModels.WebCMSEntities javauserdb = new JavaProductModels.WebCMSEntities();
  195. List<MpMainModels2.HdDepositTmp> deposits = mpdb2.HdDepositTmp.Where(m => m.Status == 0).ToList();
  196. if (deposits.Count > 0)
  197. {
  198. foreach (var deposit in deposits)
  199. {
  200. string SnNo = deposit.SnNo; //sn
  201. string MerNo = deposit.MerNo; //商户编号
  202. string PosKind = deposit.DeviceKind; //机具型号
  203. string ActDate = deposit.ActDate; //激活时间
  204. string Deposit = deposit.DepositAmount.ToString(); //押金金额
  205. string PrizeAmt = deposit.PrizeAmount.ToString(); //奖励金额
  206. string PrizeDate = deposit.PrizeDate; //奖励发放时间
  207. string Name = deposit.SendMan; //发放人姓名
  208. string MerName = deposit.MerName; //商户名称
  209. string PassDate = deposit.PassDate; //审核通过时期
  210. string MerKind = deposit.MerKind; //商户类型
  211. string DepositActCode = deposit.DepositActCode; //商户类型
  212. string PrizeKind = deposit.PrizeKind; //奖励类型
  213. string ProductType = "0";
  214. if (PosKind == "好哒语音王Y512") ProductType = "18";
  215. if (PosKind == "4G收款王M820") ProductType = "19";
  216. if (PosKind == "4G收款王M826") ProductType = "20";
  217. if (PosKind == "好哒S312" || PosKind == "S305") ProductType = "21";
  218. if (PosKind == "好哒扫码通M837") ProductType = "29";
  219. if (PosKind == "好哒语音王Y518") ProductType = "36";
  220. if (!db.ActivateRecord.Any(m => m.SnNo == SnNo && m.MerNo == MerNo))
  221. {
  222. MpMainModels2.MerchantAddInfo meradd = mpdb2.MerchantAddInfo.FirstOrDefault(m => m.MchtNo == MerNo) ?? new MpMainModels2.MerchantAddInfo();
  223. MpMainModels2.MerchantInfo merchant = mpdb2.MerchantInfo.FirstOrDefault(m => m.Id == meradd.Id) ?? new MpMainModels2.MerchantInfo();
  224. if (!string.IsNullOrEmpty(meradd.CertMerchantName)) MerName = meradd.CertMerchantName;
  225. string ActDateString = ActDate.Substring(0, 4) + "-" + ActDate.Substring(4, 2) + "-" + ActDate.Substring(6, 2);
  226. BindRecord mer = db.BindRecord.Add(new BindRecord()
  227. {
  228. CreateDate = DateTime.Now,
  229. UpdateTime = DateTime.Now, //机具绑定、解绑时间
  230. CreateTime = DateTime.Now, //商户操作时间
  231. MerSnNo = SnNo, //序列号
  232. MerNo = MerNo, //商户编号
  233. MerName = MerName,
  234. SeoTitle = PrizeAmt,
  235. SeoKeyword = ActDateString,
  236. ProductType = ProductType,
  237. Field1 = Deposit,
  238. Field2 = PrizeDate,
  239. Field3 = Name,
  240. Field4 = PassDate,
  241. Field5 = MerKind,
  242. Status = 1,
  243. QueryCount = merchant.UserId,
  244. }).Entity;
  245. db.Merchants.Add(new Merchants()
  246. {
  247. SnNo = SnNo,
  248. CreateTime = DateTime.Now,
  249. UpdateTime = DateTime.Now,
  250. AgentName = Name,
  251. MerRealName = Name,
  252. MerNo = MerNo,
  253. MerName = MerName,
  254. ProductType = ProductType,
  255. Status = 1,
  256. QueryCount = merchant.UserId,
  257. });
  258. db.SaveChanges();
  259. Thread.Sleep(1000);
  260. ActivateRecord act = db.ActivateRecord.Add(new ActivateRecord()
  261. {
  262. SnNo = SnNo,
  263. CreateDate = DateTime.Now,
  264. SeoTitle = Deposit,
  265. ActivateDate = DateTime.Now,
  266. AgentNo = MerNo,
  267. MerRealName = Name,
  268. MerNo = MerNo,
  269. MerName = MerName,
  270. ProductType = ProductType,
  271. ChannelSerial = DateTime.Now.ToString("yyyyMMddHHmmssfff") + function.get_Random(8),
  272. Status = 1,
  273. Field1 = PassDate,
  274. Field2 = MerKind,
  275. Field3 = PrizeAmt,
  276. Field4 = DepositActCode,
  277. Field5 = ActDateString,
  278. QueryCount = merchant.UserId,
  279. SeoKeyword = PrizeKind,
  280. }).Entity;
  281. db.SaveChanges();
  282. //推送MQ给创业帮
  283. var merchantAddInfo = mpdb2.MerchantAddInfo.FirstOrDefault(m => m.MchtNo == MerNo) ?? new MpMainModels2.MerchantAddInfo();
  284. if (merchantAddInfo.BrandId == 1 && !string.IsNullOrEmpty(merchantAddInfo.CybMakerCode))
  285. {
  286. SortedList<string, string> obj = new SortedList<string, string>();
  287. obj.Add("create_time", ActDateString);
  288. obj.Add("sn", SnNo);
  289. obj.Add("deposit", Deposit);
  290. obj.Add("subject_type", merchantAddInfo.SubjectType);
  291. obj.Add("merch_no", merchantAddInfo.MchtNo);
  292. obj.Add("maker_code", merchantAddInfo.CybMakerCode);
  293. PushHelper.Instance.Do(obj, "cashNotify");
  294. // PosPushDataNewHelper.Bind(mer, PosKind);
  295. // PosPushDataNewHelper.Deposit(act);
  296. }
  297. }
  298. else if (PosKind == "好哒语音王Y518" || PosKind == "好哒扫码通M837")
  299. {
  300. function.WriteLog(DateTime.Now.ToString() + "--" + Newtonsoft.Json.JsonConvert.SerializeObject(deposit), "音响和碰一碰激活数据入库日志");
  301. ActivateRecord act = db.ActivateRecord.Add(new ActivateRecord()
  302. {
  303. SnNo = SnNo,
  304. CreateDate = DateTime.Now,
  305. SeoTitle = Deposit,
  306. ActivateDate = DateTime.Now,
  307. AgentNo = MerNo,
  308. MerRealName = Name,
  309. MerNo = MerNo,
  310. MerName = Name,
  311. ProductType = ProductType,
  312. ChannelSerial = DateTime.Now.ToString("yyyyMMddHHmmssfff") + function.get_Random(8),
  313. Status = 1,
  314. Field1 = PassDate,
  315. Field2 = MerKind,
  316. Field3 = PrizeAmt,
  317. Field4 = DepositActCode,
  318. SeoKeyword = PrizeKind,
  319. }).Entity;
  320. db.SaveChanges();
  321. }
  322. // if ((PrizeKind == "830_21" || PrizeKind == "830_22" || PrizeKind == "833_01" || PrizeKind == "833_02" || PrizeKind == "995_21" || PrizeKind == "995_22" || PrizeKind == "995") && !string.IsNullOrEmpty(PrizeAmt) && decimal.Parse(function.CheckInt(PrizeAmt)) > 0)
  323. // {
  324. // JavaProductModels.KxsMachine pos = javauserdb.KxsMachine.FirstOrDefault(m => m.PosSn == SnNo && m.UserId > 0);
  325. // if(pos != null)
  326. // {
  327. // Dictionary<string, object> prizeData = new Dictionary<string, object>();
  328. // prizeData.Add("brand_id", 36);
  329. // prizeData.Add("ext_field", PrizeKind);
  330. // prizeData.Add("pos_sn", SnNo);
  331. // prizeData.Add("user_id", pos.UserId);
  332. // prizeData.Add("prize", PrizeAmt);
  333. // string req = Newtonsoft.Json.JsonConvert.SerializeObject(prizeData);
  334. // if(PrizeKind == "833_01" || PrizeKind == "833_02")
  335. // {
  336. // string ids = PrizeKind == "833_01" ? "81" : "82";
  337. // function.GetWebRequest("http://logic-executor-api.kexiaoshuang.com/noauth/prize/pushbyone?n=QUEUE_KXS_HAODA_PRIZE_CONFIG_DIVISION&m=" + req + "&ids=" + ids + ",83");
  338. // }
  339. // else
  340. // {
  341. // RedisDbconn.Instance.AddList("HaoDaPrizeDataQueue", req);
  342. // }
  343. // }
  344. // }
  345. MpMainModels2.HdDepositTmp edit = mpdb2.HdDepositTmp.FirstOrDefault(m => m.SnNo == SnNo);
  346. if (edit != null)
  347. {
  348. edit.Status = 1;
  349. mpdb2.SaveChanges();
  350. }
  351. }
  352. }
  353. db.Dispose();
  354. mpdb2.Dispose();
  355. javauserdb.Dispose();
  356. }
  357. catch (WebException ex)
  358. {
  359. function.WriteLog(DateTime.Now.ToString() + ":" + ex.ToString(), "获取好哒FTP文件数据异常");
  360. }
  361. }
  362. public void StartTrade()
  363. {
  364. //每天凌晨执行获取好哒FTP昨日交易数据
  365. Thread th2 = new Thread(GetTradeDataReady);
  366. th2.IsBackground = true;
  367. th2.Start();
  368. }
  369. /// <summary>
  370. /// 获取好哒FTP昨日交易数据
  371. /// </summary>
  372. public void GetTradeDataReady()
  373. {
  374. while (true)
  375. {
  376. if (DateTime.Now.Hour > 10 && DateTime.Now.Hour < 22)
  377. {
  378. string check = function.ReadInstance("/GetFTPTradeYesterday/check" + DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd") + ".txt");
  379. if (string.IsNullOrEmpty(check))
  380. {
  381. function.WritePage("/GetFTPTradeYesterday/", "check" + DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd") + ".txt", DateTime.Now.ToString());
  382. SaveTradeData(DateTime.Now.AddDays(-1).ToString("yyyyMMdd"));
  383. Thread.Sleep(600000);
  384. }
  385. }
  386. else
  387. {
  388. Thread.Sleep(1800000);
  389. }
  390. }
  391. }
  392. public void StartTradeListen()
  393. {
  394. //每天凌晨执行获取好哒FTP昨日交易数据
  395. Thread th2 = new Thread(ListenTradeDataReady);
  396. th2.IsBackground = true;
  397. th2.Start();
  398. }
  399. /// <summary>
  400. /// 获取好哒FTP昨日交易数据
  401. /// </summary>
  402. public void ListenTradeDataReady()
  403. {
  404. while (true)
  405. {
  406. string content = RedisDbconn.Instance.RPop<string>("ListenTradeDataQueue");
  407. if (!string.IsNullOrEmpty(content))
  408. {
  409. SaveTradeData(content, true);
  410. Thread.Sleep(2000);
  411. }
  412. else
  413. {
  414. Thread.Sleep(60000);
  415. }
  416. }
  417. }
  418. public void SaveTradeData(string Date, bool IsRedis = false)
  419. {
  420. // 要下载的文件路径
  421. string filePath = "/haoda-trade/" + Date + ".csv";
  422. function.WriteLog(DateTime.Now.ToString() + ":" + Date + ":" + filePath, "好哒交易数据入库2");
  423. try
  424. {
  425. // 创建FtpWebRequest对象
  426. FtpWebRequest request = (FtpWebRequest)WebRequest.Create(ftpServerAddress + filePath);
  427. request.Method = WebRequestMethods.Ftp.DownloadFile;
  428. request.Credentials = new NetworkCredential(ftpUser, ftpPassword);
  429. // 使用WebResponse获取响应
  430. FtpWebResponse response = (FtpWebResponse)request.GetResponse();
  431. // 打开数据流
  432. Stream responseStream = response.GetResponseStream();
  433. StreamReader reader = new StreamReader(responseStream);
  434. // 读取数据
  435. string fileContents = reader.ReadToEnd();
  436. if (!string.IsNullOrEmpty(fileContents))
  437. {
  438. MpMainModels2.WebCMSEntities db = new MpMainModels2.WebCMSEntities();
  439. var DataInfo = fileContents.TrimEnd('\n').Split('\n', 2);
  440. if (DataInfo.Length > 1)
  441. {
  442. var DataList = DataInfo[1].Split('\n');
  443. function.WriteLog("数量:" + Date + ":" + DataList.Length, "好哒交易数据入库2");
  444. int index = 0;
  445. foreach (var DataListItem in DataList)
  446. {
  447. if(IsRedis)
  448. {
  449. RedisDbconn.Instance.AddList("ListenTradeDataByOneQueue", DataListItem);
  450. }
  451. else
  452. {
  453. if(SaveTradeDataOneReady(db, DataListItem))
  454. {
  455. index += 1;
  456. }
  457. if(index % 200 == 0 && index > 0)
  458. {
  459. index = 0;
  460. db.SaveChanges();
  461. }
  462. }
  463. }
  464. if(!IsRedis)
  465. {
  466. index = 0;
  467. db.SaveChanges();
  468. }
  469. }
  470. db.Dispose();
  471. }
  472. // 关闭响应
  473. reader.Dispose();
  474. responseStream.Dispose();
  475. response.Close();
  476. }
  477. catch (WebException ex)
  478. {
  479. function.WriteLog(DateTime.Now.ToString() + ":" + ex.ToString(), "获取好哒FTP文件交易数据入库异常");
  480. }
  481. }
  482. public void StartTradeListenBridge()
  483. {
  484. Thread th2 = new Thread(ListenTradeDataBridgeReady);
  485. th2.IsBackground = true;
  486. th2.Start();
  487. }
  488. public void ListenTradeDataBridgeReady()
  489. {
  490. while (true)
  491. {
  492. string content = RedisDbconn.Instance.RPop<string>("cache:ListenTradeDataByOneQueue");
  493. if (!string.IsNullOrEmpty(content))
  494. {
  495. RedisDbconn.Instance.AddList("ListenTradeDataByOneQueue", content);
  496. }
  497. else
  498. {
  499. Thread.Sleep(10000);
  500. }
  501. }
  502. }
  503. public void StartTradeListenByOne()
  504. {
  505. Thread th2 = new Thread(ListenTradeDataByOneReady);
  506. th2.IsBackground = true;
  507. th2.Start();
  508. }
  509. /// <summary>
  510. /// 获取好哒FTP昨日交易数据
  511. /// </summary>
  512. public void ListenTradeDataByOneReady()
  513. {
  514. int index = 0;
  515. MpMainModels2.WebCMSEntities db = new MpMainModels2.WebCMSEntities();
  516. bool dbConn = true;
  517. while (true)
  518. {
  519. string content = RedisDbconn.Instance.RPop<string>("ListenTradeDataByOneQueue");
  520. if (!string.IsNullOrEmpty(content))
  521. {
  522. if(!dbConn)
  523. {
  524. db = new MpMainModels2.WebCMSEntities();
  525. dbConn = true;
  526. }
  527. if(SaveTradeDataOneReady(db, content))
  528. {
  529. index += 1;
  530. }
  531. if(index % 200 == 0 && index > 0)
  532. {
  533. index = 0;
  534. db.SaveChanges();
  535. }
  536. }
  537. else
  538. {
  539. index = 0;
  540. if(dbConn)
  541. {
  542. db.SaveChanges();
  543. db.Dispose();
  544. dbConn = false;
  545. }
  546. }
  547. }
  548. }
  549. public bool SaveTradeDataOneReady(MpMainModels2.WebCMSEntities db, string content)
  550. {
  551. bool result = false;
  552. try
  553. {
  554. var DataListInfo = content.Split(',');
  555. var MerchantNo = ""; // 商户号
  556. var BaseNo = ""; // 设备号
  557. var DeviceKind = ""; // 终端类型
  558. var OrderNo = ""; // 订单号
  559. var PayWay = ""; // 支付方式(微信 支付宝)
  560. var TradeType = ""; // 交易类型
  561. var TradeAmount = ""; // 交易金额
  562. var TradeFee = ""; // 交易手续费
  563. var TradeDate = ""; // 交易时间
  564. var TradeCycle = ""; // 结算周期
  565. MerchantNo = DataListInfo[0];
  566. BaseNo = DataListInfo[1];
  567. DeviceKind = DataListInfo[2];
  568. OrderNo = DataListInfo[3];
  569. PayWay = DataListInfo[4];
  570. TradeType = DataListInfo[5];
  571. TradeAmount = DataListInfo[6];
  572. TradeFee = DataListInfo[7];
  573. TradeDate = DataListInfo[8];
  574. TradeCycle = DataListInfo[9];
  575. if(!db.HdOrderTmp.Any(m => m.OrderNo == OrderNo))
  576. {
  577. function.WriteLog(DateTime.Now.ToString() + ":" + OrderNo, "好哒交易数据入库new");
  578. db.HdOrderTmp.Add(new MpMainModels2.HdOrderTmp()
  579. {
  580. OrderNo = OrderNo,
  581. SettleDuration = TradeCycle,
  582. TradeTime = TradeDate,
  583. TradeFee = decimal.Parse(function.CheckNum(TradeFee)),
  584. TradeAmount = decimal.Parse(function.CheckNum(TradeAmount)),
  585. TradeType = TradeType,
  586. PayMode = PayWay,
  587. DeviceKind = DeviceKind,
  588. SnNo = BaseNo,
  589. MerNo = MerchantNo,
  590. });
  591. result = true;
  592. }
  593. }
  594. catch(Exception ex)
  595. {
  596. function.WriteLog(DateTime.Now.ToString() + ":" + ex.ToString(), "好哒交易数据入库new异常");
  597. }
  598. return result;
  599. }
  600. public void StartDepositListenBridge()
  601. {
  602. Thread th2 = new Thread(ListenDepositDataBridgeReady);
  603. th2.IsBackground = true;
  604. th2.Start();
  605. }
  606. public void ListenDepositDataBridgeReady()
  607. {
  608. while (true)
  609. {
  610. string content = RedisDbconn.Instance.RPop<string>("cache:ListenDepositDataByOneQueue");
  611. if (!string.IsNullOrEmpty(content))
  612. {
  613. RedisDbconn.Instance.AddList("ListenDepositDataByOneQueue", content);
  614. }
  615. else
  616. {
  617. Thread.Sleep(10000);
  618. }
  619. }
  620. }
  621. public void StartDepositListenByOne()
  622. {
  623. //每天凌晨执行获取好哒FTP昨日交易数据
  624. Thread th2 = new Thread(ListenDepositDataByOneReady);
  625. th2.IsBackground = true;
  626. th2.Start();
  627. }
  628. /// <summary>
  629. /// 获取好哒FTP昨日交易数据
  630. /// </summary>
  631. public void ListenDepositDataByOneReady()
  632. {
  633. int index = 0;
  634. MpMainModels2.WebCMSEntities db = new MpMainModels2.WebCMSEntities();
  635. bool dbConn = true;
  636. while (true)
  637. {
  638. string content = RedisDbconn.Instance.RPop<string>("ListenDepositDataByOneQueue");
  639. if (!string.IsNullOrEmpty(content))
  640. {
  641. if(!dbConn)
  642. {
  643. db = new MpMainModels2.WebCMSEntities();
  644. dbConn = true;
  645. }
  646. SaveDepositDataOneReady(db, content);
  647. index += 1;
  648. if(index % 200 == 0 && index > 0)
  649. {
  650. index = 0;
  651. db.SaveChanges();
  652. }
  653. }
  654. else
  655. {
  656. index = 0;
  657. if(dbConn)
  658. {
  659. db.SaveChanges();
  660. db.Dispose();
  661. dbConn = false;
  662. }
  663. Thread.Sleep(5000);
  664. }
  665. }
  666. }
  667. public void SaveDepositDataOneReady(MpMainModels2.WebCMSEntities db, string content)
  668. {
  669. try
  670. {
  671. var DataListInfo = content.Split(',');
  672. string SnNo = DataListInfo[0]; //sn
  673. string MerNo = DataListInfo[1]; //商户编号
  674. string PosKind = DataListInfo[2]; //机具型号
  675. string ActDate = DataListInfo[3]; //激活时间
  676. string Deposit = DataListInfo[4]; //押金金额
  677. string PrizeAmt = "0"; //奖励金额
  678. string PrizeDate = "None"; //奖励发放时间
  679. string Name = ""; //发放人姓名
  680. string MerName = ""; //商户名称
  681. string PassDate = ""; //审核通过时期
  682. string MerKind = ""; //商户类型
  683. string DepositActCode = ""; //押金活动编号
  684. string PrizeKind = ""; //奖励类型
  685. if(DataListInfo.Length > 9)
  686. {
  687. PrizeAmt = DataListInfo[5]; //奖励金额
  688. PrizeDate = DataListInfo[6]; //奖励发放时间
  689. Name = DataListInfo[7]; //发放人姓名
  690. MerName = DataListInfo[8]; //商户名称
  691. PassDate = DataListInfo[9]; //审核通过时期
  692. if (DataListInfo.Length > 10) MerKind = DataListInfo[10]; //商户类型
  693. if (DataListInfo.Length > 11) DepositActCode = DataListInfo[11]; //押金活动编号
  694. if (DataListInfo.Length > 12) PrizeKind = DataListInfo[12]; //奖励类型
  695. }
  696. else
  697. {
  698. MerName = DataListInfo[5]; //商户名称
  699. PassDate = DataListInfo[6]; //审核通过时期
  700. if (DataListInfo.Length > 6) MerKind = DataListInfo[7]; //商户类型
  701. if (DataListInfo.Length > 7) DepositActCode = DataListInfo[8]; //押金活动编号
  702. }
  703. if(!db.HdDepositTmp.Any(m => m.SnNo == SnNo))
  704. {
  705. function.WriteLog(DateTime.Now.ToString() + ":" + SnNo, "好哒押金数据入库new");
  706. if(MerKind == "待定")
  707. {
  708. MpMainModels2.MerchantAddInfo addInfo = db.MerchantAddInfo.FirstOrDefault(m => m.MchtNo == MerNo) ?? new MpMainModels2.MerchantAddInfo();
  709. if(addInfo.SubjectType == "SUBJECT_TYPE_ENTERPRISE" || addInfo.SubjectType == "SUBJECT_TYPE_INDIVIDUAL")
  710. {
  711. MerKind = "000002";
  712. }
  713. else
  714. {
  715. MerKind = "000001";
  716. }
  717. }
  718. db.HdDepositTmp.Add(new MpMainModels2.HdDepositTmp()
  719. {
  720. SnNo = SnNo,
  721. MerKind = MerKind,
  722. PassDate = PassDate,
  723. MerName = MerName,
  724. SendMan = Name,
  725. PrizeDate = PrizeDate,
  726. PrizeAmount = decimal.Parse(function.CheckNum(PrizeAmt)),
  727. DepositAmount = decimal.Parse(function.CheckNum(Deposit)),
  728. ActDate = ActDate,
  729. DeviceKind = PosKind,
  730. DepositActCode = DepositActCode,
  731. PrizeKind = PrizeKind,
  732. MerNo = MerNo,
  733. CreateTime = DateTime.Now,
  734. UpdateTime = DateTime.Now
  735. });
  736. }
  737. else
  738. {
  739. MpMainModels2.HdDepositTmp edit = db.HdDepositTmp.FirstOrDefault(m => m.SnNo == SnNo);
  740. if (edit != null)
  741. {
  742. decimal PAmount = decimal.Parse(function.CheckNum(PrizeAmt));
  743. if((edit.PrizeAmount == 0 && PAmount > 0) || edit.MerNo != MerNo || (edit.PrizeKind != PrizeKind && edit.PrizeAmount != PAmount))
  744. {
  745. edit.Status = 0;
  746. edit.MerKind = MerKind;
  747. edit.PassDate = PassDate;
  748. edit.MerName = MerName;
  749. edit.SendMan = Name;
  750. edit.PrizeDate = PrizeDate;
  751. edit.PrizeAmount = PAmount;
  752. edit.DepositAmount = decimal.Parse(function.CheckNum(Deposit));
  753. edit.ActDate = ActDate;
  754. edit.DeviceKind = PosKind;
  755. edit.DepositActCode = DepositActCode;
  756. edit.PrizeKind = PrizeKind;
  757. edit.MerNo = MerNo;
  758. edit.UpdateTime = DateTime.Now;
  759. }
  760. if(ActDate == DateTime.Now.AddDays(-1).ToString("yyyyMMdd"))
  761. {
  762. function.WriteLog(content + "-update", "监控头一天数据");
  763. }
  764. }
  765. if(ActDate == DateTime.Now.AddDays(-1).ToString("yyyyMMdd"))
  766. {
  767. function.WriteLog(content + "-update-end", "监控头一天数据");
  768. }
  769. }
  770. }
  771. catch(Exception ex)
  772. {
  773. function.WriteLog(DateTime.Now.ToString() + ":" + ex.ToString(), "好哒押金数据入库new异常");
  774. }
  775. }
  776. public void StartGetTradeData()
  777. {
  778. //每天凌晨执行获取好哒FTP昨日交易数据
  779. Thread th2 = new Thread(ListenGetTradeData);
  780. th2.IsBackground = true;
  781. th2.Start();
  782. }
  783. /// <summary>
  784. /// 获取好哒FTP昨日交易数据
  785. /// </summary>
  786. public void ListenGetTradeData()
  787. {
  788. while (true)
  789. {
  790. // if(DateTime.Now.Hour < 9)
  791. // {
  792. GetTradeData();
  793. // Thread.Sleep(2000);
  794. // }
  795. // else
  796. // {
  797. Thread.Sleep(10000);
  798. // }
  799. }
  800. }
  801. public void GetTradeData()
  802. {
  803. try
  804. {
  805. MpMainModels2.WebCMSEntities db = new MpMainModels2.WebCMSEntities();
  806. JavaProductModels.WebCMSEntities javadb = new JavaProductModels.WebCMSEntities();
  807. string today = DateTime.Now.ToString("yyyyMMdd");
  808. string beforeyesterday = DateTime.Now.AddDays(-2).ToString("yyyyMMdd");
  809. string yesterday = DateTime.Now.AddDays(-1).ToString("yyyyMMdd");
  810. List<MpMainModels2.HdOrderTmp> orders = db.HdOrderTmp.Where(m => (m.TradeTime.StartsWith(beforeyesterday) || m.TradeTime.StartsWith(yesterday) || m.TradeTime.StartsWith(today)) && m.Status == 0).Take(200).ToList();
  811. if (orders.Count > 0)
  812. {
  813. foreach (var order in orders)
  814. {
  815. var MerchantNo = order.MerNo; // 商户号
  816. var BaseNo = order.SnNo; // 设备号
  817. var DeviceKind = order.DeviceKind; // 终端类型
  818. var OrderNo = order.OrderNo; // 订单号
  819. var PayWay = order.PayMode; // 支付方式(微信 支付宝)
  820. var TradeType = order.TradeType; // 交易类型
  821. var TradeAmount = order.TradeAmount; // 交易金额
  822. var TradeFee = order.TradeFee; // 交易手续费
  823. var TradeDate = order.TradeTime; // 交易时间
  824. var TradeCycle = order.SettleDuration; // 结算周期
  825. 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);
  826. function.WriteLog("OrderNo:" + OrderNo, "获取好哒FTP文件交易数据");
  827. function.WriteLog("MerchantNo:" + MerchantNo, "获取好哒FTP文件交易数据");
  828. var PayMode = 0;
  829. if (PayWay.Contains("支付宝")) PayMode = 1;
  830. if (PayWay.Contains("微信")) PayMode = 2;
  831. var merchantAddInfo = db.MerchantAddInfo.FirstOrDefault(m => m.MchtNo == MerchantNo) ?? new MpMainModels2.MerchantAddInfo();
  832. if (merchantAddInfo.Id > 0)
  833. {
  834. function.WriteLog("找到商户", "获取好哒FTP文件交易数据");
  835. var merchantInfo = db.MerchantInfo.FirstOrDefault(m => m.Id == merchantAddInfo.Id) ?? new MpMainModels2.MerchantInfo();
  836. if (merchantInfo.IsAct == 0)
  837. {
  838. merchantInfo.IsAct = 1;
  839. }
  840. function.WriteLog("订单号不存在,开始入库", "获取好哒FTP文件交易数据");
  841. var query = db.ConsumerOrders.FirstOrDefault(m => m.OrderNo == OrderNo);
  842. if (query == null)
  843. {
  844. decimal FeeRate = decimal.Parse(function.CheckNum(merchantAddInfo.FeeRate)) * 100;
  845. query = db.ConsumerOrders.Add(new MpMainModels2.ConsumerOrders()
  846. {
  847. Status = 1,
  848. CreateDate = DateTime.Parse(TradeDate),
  849. UpdateDate = DateTime.Parse(TradeDate),
  850. SnNo = BaseNo,
  851. PayMoney = TradeAmount,
  852. PayMode = PayMode,
  853. SeoTitle = OrderNo,
  854. OrderNo = OrderNo,
  855. MerchantId = merchantAddInfo.Id,
  856. UserId = merchantInfo.UserId,
  857. SeoKeyword = merchantAddInfo.CybMakerCode,
  858. Sort = (int)FeeRate,
  859. TradePayNo = MerchantNo,
  860. }).Entity;
  861. }
  862. MpMainModels2.HdOrderTmp edit = db.HdOrderTmp.FirstOrDefault(m => m.OrderNo == OrderNo);
  863. if (edit != null)
  864. {
  865. edit.Status = 1;
  866. }
  867. db.SaveChanges();
  868. function.WriteLog("入库完毕", "获取好哒FTP文件交易数据");
  869. //推送MQ给创业帮
  870. if (merchantAddInfo.BrandId == 1)
  871. {
  872. if (!string.IsNullOrEmpty(merchantAddInfo.CybMakerCode))
  873. {
  874. SortedList<string, string> obj = new SortedList<string, string>();
  875. obj.Add("create_time", TradeDate);
  876. obj.Add("sn", BaseNo);
  877. obj.Add("pay_money", TradeAmount.ToString());
  878. obj.Add("pay_mode", PayMode.ToString());
  879. obj.Add("order_no", OrderNo);
  880. obj.Add("merch_no", merchantAddInfo.MchtNo);
  881. obj.Add("maker_code", merchantAddInfo.CybMakerCode);
  882. PushHelper.Instance.Do(obj);
  883. }
  884. OrderMessageHelper.SendOrderMsg(query);
  885. }
  886. if (DeviceKind.Contains("好哒设备"))
  887. {
  888. JavaProductModels.KxsMachine pos = javadb.KxsMachine.FirstOrDefault(m => m.PosSn == BaseNo) ?? new JavaProductModels.KxsMachine();
  889. if(pos.BrandId == 18) DeviceKind = "好哒语音王";
  890. if(pos.BrandId == 19) DeviceKind = "收款王M820";
  891. if(pos.BrandId == 20) DeviceKind = "收款王M826";
  892. if(pos.BrandId == 21) DeviceKind = "S312";
  893. if(pos.BrandId == 29) DeviceKind = "好哒扫码通";
  894. if(pos.BrandId == 20) DeviceKind = "好哒二维码";
  895. }
  896. PosPushDataNewHelper.Trade(query, DeviceKind);
  897. if (DeviceKind.Contains("好哒二维码"))
  898. {
  899. if (!db.HdQrCodeTmp.Any(m => m.SnNo == BaseNo && m.MerNo == MerchantNo))
  900. {
  901. db.HdQrCodeTmp.Add(new MpMainModels2.HdQrCodeTmp()
  902. {
  903. SnNo = BaseNo,
  904. MerNo = MerchantNo,
  905. });
  906. db.SaveChanges();
  907. // PosPushDataNewHelper.Bind(new SpModels.BindRecord()
  908. // {
  909. // MerSnNo = BaseNo,
  910. // MerNo = MerchantNo,
  911. // MerName = merchantAddInfo.CertMerchantName,
  912. // CreateTime = DateTime.Parse(TradeDate),
  913. // QueryCount = merchantInfo.UserId,
  914. // }, "好哒二维码");
  915. }
  916. }
  917. if(TradeAmount >= 2)
  918. {
  919. //小蓝环奖励
  920. bool PrizeFlag = db.HdBlueCircleTmp.Any(m => m.MchtNo == MerchantNo && m.PrizeFlag == 0);
  921. if(!PrizeFlag)
  922. {
  923. MpMainModels2.HdBlueCircleTmp blueCircleTmp = db.HdBlueCircleTmp.FirstOrDefault(m => m.SnNo == BaseNo && m.PrizeFlag == 0);
  924. if(blueCircleTmp != null)
  925. {
  926. string BindDateDetail = blueCircleTmp.BindDateDetail;
  927. DateTime BindTime = DateTime.Parse(BindDateDetail.Substring(0, 4) + "-" + BindDateDetail.Substring(4, 2) + "-" + BindDateDetail.Substring(6, 2) + " " + BindDateDetail.Substring(8, 2) + ":" + BindDateDetail.Substring(10, 2) + ":" + BindDateDetail.Substring(12, 2));
  928. if(BindTime > DateTime.Now.AddDays(-30))
  929. {
  930. blueCircleTmp.PrizeFlag = 1;
  931. db.SaveChanges();
  932. MpMainModels2.MerchantAddInfo addInfo = db.MerchantAddInfo.FirstOrDefault(m => m.MchtNo == MerchantNo) ?? new MpMainModels2.MerchantAddInfo();
  933. MpMainModels2.MerchantInfo merchant = db.MerchantInfo.FirstOrDefault(m => m.Id == addInfo.Id) ?? new MpMainModels2.MerchantInfo();
  934. RedisDbconn.Instance.AddList("HaoDaPrizeDataQueue", "{\"brand_id\":201,\"ext_field\":\"xlh\",\"pos_sn\":\"" + BaseNo + "\",\"user_id\":" + merchant.UserId + "}");
  935. }
  936. }
  937. }
  938. //点餐码奖励
  939. // MpMainModels2.HdOrderCodeTmp orderCodeTmp = db.HdOrderCodeTmp.FirstOrDefault(m => m.Sn == BaseNo && m.PrizeFlag == 0);
  940. // if(orderCodeTmp != null)
  941. // {
  942. // MpMainModels2.HdPrizeFlag flag = db.HdPrizeFlag.FirstOrDefault(m => m.MchtNo == orderCodeTmp.MchtNo) ?? new MpMainModels2.HdPrizeFlag();
  943. // DateTime BindTime = orderCodeTmp.CreateTime.Value;
  944. // if(BindTime > DateTime.Now.AddDays(-30) && flag.OrderCodePrize <= 10)
  945. // {
  946. // orderCodeTmp.PrizeFlag = 1;
  947. // flag.OrderCodePrize += 1;
  948. // db.SaveChanges();
  949. // }
  950. // }
  951. }
  952. }
  953. else
  954. {
  955. MpMainModels2.HdOrderTmp edit = db.HdOrderTmp.FirstOrDefault(m => m.OrderNo == OrderNo);
  956. if (edit != null)
  957. {
  958. edit.Status = -1;
  959. }
  960. db.SaveChanges();
  961. }
  962. Thread.Sleep(100);
  963. }
  964. }
  965. db.Dispose();
  966. javadb.Dispose();
  967. }
  968. catch (WebException ex)
  969. {
  970. function.WriteLog(DateTime.Now.ToString() + ":" + ex.ToString(), "获取好哒FTP文件交易数据异常");
  971. }
  972. }
  973. }
  974. }