GetHaoDaFTPInfoService.cs 49 KB

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