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 GetHaoDaTouchPrizeService { public readonly static GetHaoDaTouchPrizeService Instance = new GetHaoDaTouchPrizeService(); private GetHaoDaTouchPrizeService() { } public void Start() { //每天凌晨执行获取好哒FTP昨日交易数据 Thread th = new Thread(GetTouchRewardBindDataReady); th.IsBackground = true; th.Start(); } /// /// 获取好哒FTP昨日交易数据 /// public void GetTouchRewardBindDataReady() { while (true) { if (DateTime.Now > DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd") + " 10:05:00")) { SaveTouchRewardData(DateTime.Now.AddDays(-1).ToString("yyyyMMdd")); } Thread.Sleep(180000); } } public void StartListen() { //每天凌晨执行获取好哒FTP昨日交易数据 Thread th2 = new Thread(ListenTouchRewardBindDataReady); th2.IsBackground = true; th2.Start(); } /// /// 获取好哒FTP昨日交易数据 /// public void ListenTouchRewardBindDataReady() { while (true) { string content = RedisDbconn.Instance.RPop("ListenTouchRewardBindDataQueue"); if (!string.IsNullOrEmpty(content)) { SaveTouchRewardData(content); Thread.Sleep(2000); } else { Thread.Sleep(60000); } } } public void SaveTouchRewardData(string Date, bool IsRedis = false) { // 要下载的文件路径 string filePath = "/haoda-deposit/pyp_reward_" + Date + ".csv"; try { // 创建FtpWebRequest对象 FtpWebRequest request = (FtpWebRequest)WebRequest.Create(GetHaoDaFTPInfoService.Instance.ftpServerAddress + filePath); request.Method = WebRequestMethods.Ftp.DownloadFile; request.Credentials = new NetworkCredential(GetHaoDaFTPInfoService.Instance.ftpUser, GetHaoDaFTPInfoService.Instance.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(); JavaProductModels.WebCMSEntities javauserdb = new JavaProductModels.WebCMSEntities(); List SnNos = db.HdTouchRewardTmp.Select(m => m.SnNo).ToList(); List ChkSnNos = new List(); var DataInfo = fileContents.TrimEnd('\n').Split('\n', 2); if (DataInfo.Length > 1) { var DataList = DataInfo[1].Split('\n'); foreach (var DataListItem in DataList) { if(IsRedis) { RedisDbconn.Instance.AddList("ListenTouchRewardBindDataByOneQueue", DataListItem); } else { SaveTouchRewardDataOneReady(db, javauserdb, DataListItem); } } } db.Dispose(); javauserdb.Dispose(); } // 关闭响应 reader.Dispose(); responseStream.Dispose(); response.Close(); } catch (WebException ex) { function.WriteLog(DateTime.Now.ToString() + ":" + ex.ToString(), "获取好哒FTP文件数据异常"); } } public void StartTouchRewardBindListenBridge() { Thread th2 = new Thread(ListenTouchRewardBindDataBridgeReady); th2.IsBackground = true; th2.Start(); } public void ListenTouchRewardBindDataBridgeReady() { while (true) { string content = RedisDbconn.Instance.RPop("cache:ListenTouchRewardBindDataByOneQueue"); if (!string.IsNullOrEmpty(content)) { RedisDbconn.Instance.AddList("ListenTouchRewardBindDataByOneQueue", content); } else { Thread.Sleep(10000); } } } public void StartTouchRewardBindListenByOne() { //每天凌晨执行获取好哒FTP昨日交易数据 Thread th2 = new Thread(ListenTouchRewardBindDataByOneReady); th2.IsBackground = true; th2.Start(); } /// /// 获取好哒FTP昨日交易数据 /// public void ListenTouchRewardBindDataByOneReady() { int index = 0; MpMainModels2.WebCMSEntities db = new MpMainModels2.WebCMSEntities(); JavaProductModels.WebCMSEntities javauserdb = new JavaProductModels.WebCMSEntities(); bool dbConn = true; while (true) { string content = RedisDbconn.Instance.RPop("ListenTouchRewardBindDataByOneQueue"); if (!string.IsNullOrEmpty(content)) { if(!dbConn) { db = new MpMainModels2.WebCMSEntities(); javauserdb = new JavaProductModels.WebCMSEntities(); dbConn = true; } SaveTouchRewardDataOneReady(db, javauserdb, content); index += 1; if(index % 20 == 0 && index > 0) { index = 0; db.SaveChanges(); } } else { index = 0; if(dbConn) { db.SaveChanges(); db.Dispose(); javauserdb.Dispose(); dbConn = false; } } } } public void SaveTouchRewardDataOneReady(MpMainModels2.WebCMSEntities db, JavaProductModels.WebCMSEntities javauserdb, string content) { try { var DataListInfo = content.Split(','); string sn_no = DataListInfo[0]; //SN号 string light_up_time = DataListInfo[1]; //点亮时间 string reward = DataListInfo[2]; //奖励 string effective_date = DataListInfo[3]; //生效日期 string acct_nm = DataListInfo[4]; //活动名称 string bonus_type = DataListInfo[5]; //奖励类型 bool op = db.HdTouchRewardTmp.Any(m => m.SnNo == sn_no && m.BonusType == bonus_type); if(!op) { function.WriteLog(DateTime.Now.ToString() + ":add:" + sn_no, "好哒碰一碰奖励"); db.HdTouchRewardTmp.Add(new MpMainModels2.HdTouchRewardTmp() { SnNo = sn_no, LightUpTime = DateTime.Parse(light_up_time), Reward = decimal.Parse(reward), EffectiveDate = effective_date, AcctNm = acct_nm, BonusType = bonus_type, Status = 1, }); JavaProductModels.KxsMachine pos = javauserdb.KxsMachine.FirstOrDefault(m => m.PosSn == sn_no && m.UserId > 0); if(pos != null) { RedisDbconn.Instance.AddList("HaoDaPrizeDataQueue", "{\"brand_id\":29,\"ext_field\":\"" + bonus_type + "\",\"pos_sn\":\"" + sn_no + "\",\"user_id\":" + pos.UserId + "}"); } } db.SaveChanges(); } catch(Exception ex) { function.WriteLog(DateTime.Now.ToString() + ":" + ex.ToString(), "好哒碰一碰奖励异常"); } } } }