using System; using System.Collections.Generic; using System.Linq; using System.Security.Cryptography; using System.Threading; using Library; using LitJson; using MySystem; using MySystem.Models; public class CheckWifiData { public readonly static CheckWifiData Instance = new CheckWifiData(); private CheckWifiData() { } public void Start() { Thread th = new Thread(DoWorks); th.IsBackground = true; th.Start(); Thread th2 = new Thread(DoWorks2); th2.IsBackground = true; th2.Start(); Thread th3 = new Thread(NewWifi); th3.IsBackground = true; th3.Start(); } public void DoWorks() { while (true) { string content = RedisDbconn.Instance.RPop("yc_device"); if (!string.IsNullOrEmpty(content)) { try { string[] dataList = content.Replace("\r", "").Replace("\n", "").Split(new string[] { "#cut#" }, StringSplitOptions.None); string Kind = dataList[0]; JsonData jsonObj = JsonMapper.ToObject(dataList[1]); string sign = jsonObj["sign"].ToString(); string brhNo = jsonObj["brhNo"].ToString(); //机构号 string timestamp = jsonObj["timestamp"].ToString(); //时间戳。签名用参数 string dataString = jsonObj["data"].ToString(); dataString = dataString.Replace("null", "\"\""); JsonData data = JsonMapper.ToObject(dataString); WebCMSEntities db = new WebCMSEntities(); for (int i = 0; i < data.Count; i++) { JsonData dataItem = data[i]; string status = dataItem["status"].ToString(); //状态 0:可用 1:待充值 2:待激活 3:冻结中 string iccid = dataItem["iccid"].ToString(); //设备 id string sim = dataItem["sim"].ToString(); //设备号 string activeTime = dataItem["activeTime"] != null ? dataItem["activeTime"].ToString() : ""; //激活时间,格式:yyyy-MM-dd HH:mm:ss string expiredTime = dataItem["expiredTime"] != null ? dataItem[prop_name: "expiredTime"].ToString() : ""; //生效日期,格式:yyyy-MM-dd HH:mm:ss string isRealName = dataItem["isRealName"].ToString(); //实名状态 0-否 1-是 string mobile = dataItem["mobile"] != null ? dataItem["mobile"].ToString() : ""; //用户手机号 // Dictionary obj = new Dictionary(); // obj.Add("brhNo", brhNo); // obj.Add("iccid", iccid); // obj.Add("sim", sim); // obj.Add("status", status); // obj.Add("activeTime", activeTime); // obj.Add("expiredTime", expiredTime); // obj.Add("isRealName", isRealName); string model = ""; if(Kind == "init") { model = dataItem["model"].ToString(); //设备型号 // obj.Add("model", model); } // obj.Add("mobile", mobile); // string dataString = dataList[0] + "#cut#" + Newtonsoft.Json.JsonConvert.SerializeObject(obj); // RedisDbconn.Instance.AddList("kxs_bind_list_23", dataString); if(status == "0" && !db.BindRecord.Any(m => m.MerSnNo == sim)) { db.BindRecord.Add(new BindRecord() { MerName = mobile, MerNewSnNo = mobile, MerNo = mobile, Field3 = model, Field2 = isRealName, CreateTime = DateTime.Now, UpdateTime = DateTime.Now, UpdateDate = DateTime.Parse(expiredTime), CreateDate = DateTime.Parse(activeTime), Field1 = iccid, MerSnNo = sim, ProductType = "23", //产品类型 Status = 1, }); db.Merchants.Add(new Merchants() { UpdateDate = DateTime.Parse(expiredTime), CreateDate = DateTime.Parse(activeTime), MerNo = mobile, //商户编号 MerName = mobile, //商户名称 AgentName = brhNo, //机构名称 ProductType = "23", //产品类型 Remark = "商户入库", //注释 CreateTime = DateTime.Now, //创建时间 UpdateTime = DateTime.Now, //更新时间 SnNo = sim, //SN号 MerMobile = mobile, Status = 1, }); db.SaveChanges(); } } db.Dispose(); } catch(Exception ex) { function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "接收云长WIFI设备绑定异常"); } } else { Thread.Sleep(5000); } } } public void DoWorks2() { while (true) { string content = RedisDbconn.Instance.RPop("yc_order"); if (!string.IsNullOrEmpty(content)) { try { string[] dataList = content.Replace("\r", "").Replace("\n", "").Split(new string[] { "#cut#" }, StringSplitOptions.None); string Kind = dataList[0]; string JsonString = dataList[1]; JsonData jsonObj = JsonMapper.ToObject(JsonString); string sign = jsonObj["sign"].ToString(); string brhNo = jsonObj["brhNo"].ToString(); //机构号 string timestamp = jsonObj["timestamp"].ToString(); //时间戳。签名用参数 string dataString = jsonObj["data"].ToString(); dataString = dataString.Replace("null", "\"\""); JsonData data = JsonMapper.ToObject(dataString); WebCMSEntities db = new WebCMSEntities(); for (int i = 0; i < data.Count; i++) { JsonData dataItem = data[i]; string status = dataItem["status"].ToString(); //订单状态,未支付_1 完成_2 线上退款_3 线下退款_4 APP 退款_5 上 游失败_6 原路退回_7 标记打款_8 退款_9 if(Kind == "init") { string orderNo = dataItem["orderNo"].ToString(); //订单编号 string mobile = dataItem["mobile"].ToString(); //用户手机号 string iccid = dataItem["iccid"].ToString(); //设备 id string sim = dataItem["sim"].ToString(); //设备号 string userName = dataItem["userName"].ToString(); //所属客户 string packageName = dataItem["packageName"].ToString(); //套餐名称 string realTotalAmount = dataItem["realTotalAmount"] != null ? dataItem["realTotalAmount"].ToString() : "0"; //实付金额,单位分 string orderAmount = dataItem["orderAmount"] != null ? dataItem["orderAmount"].ToString() : "0"; //订单金额,单位分 string refundMoney = dataItem["refundMoney"] != null ? dataItem["refundMoney"].ToString() : "0"; //退款金额,单位分 string orderType = dataItem["orderType"].ToString(); //订单类型"首次充值_1","续费_2","接口首次_3","接口续费_4","批量充值_5","自带套餐_6","赠送套餐_7","花呗充值_8" string payCategory = dataItem["payCategory"].ToString(); //充值类型"微信充值_1", "接口充值 _2"," 余 额 充 值_3", "批量充值_4","赠送套 餐 _5"," 支 付 宝 充 值_7","APP 兑换_8","APP 订购_9","自带套餐_10","自带套餐(激活前)_11","设备余额_12" string payAppid = dataItem["payAppid"].ToString(); //商户号 string outTradeNo = dataItem["outTradeNo"].ToString(); //交易单号 string createTime = dataItem["createTime"].ToString(); //充值时间,格式:yyyy-MM-dd HH:mm:ss string refundTime = dataItem["refundTime"] != null ? dataItem["refundTime"].ToString() : ""; //退款时间,格式:yyyy-MM-dd HH:mm:ss string beginTime = dataItem["beginTime"].ToString(); string endTime = dataItem["endTime"].ToString(); // Dictionary obj = new Dictionary(); // obj.Add("brhNo", brhNo); // obj.Add("orderNo", orderNo); // obj.Add("mobile", mobile); // obj.Add("iccid", iccid); // obj.Add("sim", sim); // obj.Add("userName", userName); // obj.Add("packageName", packageName); // obj.Add("realTotalAmount", realTotalAmount); // obj.Add("orderAmount", orderAmount); // obj.Add("refundMoney", refundMoney); // obj.Add("orderType", orderType); // obj.Add("payCategory", payCategory); // obj.Add("payAppid", payAppid); // obj.Add("outTradeNo", outTradeNo); // obj.Add("createTime", createTime); // obj.Add("refundTime", refundTime); // obj.Add("status", status); // string dataString = dataList[0] + "#cut#" + Newtonsoft.Json.JsonConvert.SerializeObject(obj); // RedisDbconn.Instance.AddList("kxs_trade_list_23", dataString); int months = MonthDifference(DateTime.Parse(beginTime), DateTime.Parse(endTime).AddSeconds(1)); db.TradeRecord.Add(new TradeRecord() { CreateDate = DateTime.Now, UpdateDate = DateTime.Now, Field3 = packageName, Field2 = refundMoney, Field1 = orderAmount, TradeType = orderType, Field4 = refundTime, BankCardNo = iccid, BankCardType = payCategory, TradeStatus = status, AgentNo = brhNo, TradeAmount = decimal.Parse(realTotalAmount), Field5 = createTime, TradeSerialNo = orderNo, MerNo = mobile, TradeSnNo = sim, ProductType = "23", Status = status == "2" ? 1 : 0, QueryCount = months, }); db.SaveChanges(); } else if(Kind == "change") { //change#cut#{"brhNo":"YCJG10010003","data":"[{\"orderNo\":\"695580\",\"status\":2,\"refundMoney\":null,\"operatorName\":null,\"refundTime\":null}]","sign":"e449LqlIeA2Lc2CBXi0ehsc6+P5y4TBwrxe6+Na8V7EwnUalFkOBDCevG9BaNntLqZrC9meuuWTFiEURQ9tJtcbC0mK0f2g2C8yx8ZwuURfP8MB6XshjLKIGstWRNZromstaOM4Mbz+1sc3i54SJ+x1Kr5Is7BqDjPRSUwEDlQI=","timestamp":1722240000} string orderNo = dataItem["orderNo"].ToString(); //订单编号 if(status == "2") { TradeRecord edit = db.TradeRecord.FirstOrDefault(m => m.TradeSerialNo == orderNo && m.Status == 0); if(edit != null) { edit.Status = 1; db.SaveChanges(); } } if(status == "3" || status == "4" || status == "5" || status == "7") { RedisDbconn.Instance.AddList("WifiRefundQueue", orderNo); } // Dictionary obj = new Dictionary(); // obj.Add("brhNo", brhNo); // obj.Add("orderNo", orderNo); // obj.Add("status", status); // string dataString = dataList[0] + "#cut#" + Newtonsoft.Json.JsonConvert.SerializeObject(obj); // RedisDbconn.Instance.AddList("kxs_trade_list_23", dataString); } } db.Dispose(); } catch(Exception ex) { function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "接收云长WIFI设备交易异常"); } } else { Thread.Sleep(5000); } } } public void NewWifi() { while (true) { string data = RedisDbconn.Instance.RPop("wifi_data_list"); if (!string.IsNullOrEmpty(data)) { try { string[] dataList = data.Split(new string[] { "#cut#" }, StringSplitOptions.None); string Kind = dataList[0]; JsonData jsonObj = JsonMapper.ToObject(dataList[1]); string content = jsonObj["content"].ToString(); content = Decrypt(content); jsonObj = JsonMapper.ToObject(content); WebCMSEntities db = new WebCMSEntities(); if(Kind == "bind") { string sn = jsonObj["sn"].ToString(); //设备号 string mchNo = jsonObj["mchNo"].ToString(); //商户号 string bindTime = jsonObj["bindTime"].ToString(); //绑定时间 string snType = jsonObj["snType"].ToString(); //设备类型 UFI=0 MIFI=1 CPE=2 能量塔=3 string notifyType = jsonObj["notifyType"].ToString(); //通知类型 1绑定 0解绑 db.BindRecord.Add(new BindRecord() { MerName = mchNo, MerNewSnNo = mchNo, MerNo = mchNo, Field3 = snType, CreateTime = DateTime.Now, UpdateTime = DateTime.Now, UpdateDate = DateTime.Parse(bindTime), CreateDate = DateTime.Parse(bindTime), Field1 = notifyType == "1" ? "绑定" : "解绑", MerSnNo = sn, ProductType = "23", //产品类型 Status = 1, Field2 = "v2", }); db.Merchants.Add(new Merchants() { UpdateDate = DateTime.Parse(bindTime), CreateDate = DateTime.Parse(bindTime), MerNo = mchNo, //商户编号 MerName = mchNo, //商户名称 ProductType = "23", //产品类型 Remark = "商户入库", //注释 CreateTime = DateTime.Now, //创建时间 UpdateTime = DateTime.Now, //更新时间 SnNo = sn, //SN号 MerMobile = mchNo, Field1 = "v2", Field2 = notifyType == "1" ? "绑定" : "解绑", Status = 1, }); db.SaveChanges(); } else if(Kind == "trade") { //{"sn": "217F8972461", "mchNo": "19218587888", "snType": 1, "orderSn": "CA1838166424084348928", "cashFlag": 1, "tradeAmt": "120.00", "tradeTime": "2024-09-23 18:44:08", "isFirstRecharge": 0} string sn = jsonObj["sn"].ToString(); //设备号 string orderSn = jsonObj["orderSn"].ToString(); //订单号 string mchNo = jsonObj["mchNo"].ToString(); //商户号 string snType = jsonObj["snType"].ToString(); //设备类型 UFI=0 MIFI=1 CPE=2 能量塔=3 string tradeAmt = jsonObj["tradeAmt"].ToString(); //交易金额(元) string duration = content.Contains("\"duration\"") ? jsonObj[prop_name: "duration"].ToString() : "0"; //设备套餐时长 string unit = content.Contains("\"unit\"") ? jsonObj["unit"].ToString() : "0"; //套餐单位 0:按天 1:按月 string isFirstRecharge = content.Contains("\"isFirstRecharge\"") ? jsonObj["isFirstRecharge"].ToString() : "0"; //是否首充 0否 1是 string cashFlag = jsonObj["cashFlag"].ToString(); //押金标识 0否 1是 string tradeTime = jsonObj["tradeTime"].ToString(); //交易时间 db.TradeRecord.Add(new TradeRecord() { CreateDate = DateTime.Now, UpdateDate = DateTime.Now, Field1 = snType, Field2 = duration, Field3 = unit, Field4 = isFirstRecharge, SerEntryMode = cashFlag, BankCardNo = sn, TradeStatus = "2", TradeAmount = decimal.Parse(tradeAmt), Field5 = tradeTime, TradeSerialNo = orderSn, MerNo = mchNo, TradeSnNo = sn, ProductType = "23", Status = 1, SeoTitle = "v2", }); db.SaveChanges(); } db.Dispose(); } catch(Exception ex) { function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "接收来量吧WIFI设备交易异常"); } } else { Thread.Sleep(5000); } } } string prikey = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCPs8Mn9EtUNqz9eg+Zv9Hu4gwjKgqma+Ud5A+LpiMQFK83fQX1zmg9oGtaXL11guQBJT9pui3vBn4cZXkadOd03x22lxDd18hBmEWBA8b2MTC4u2gZ7jKGjMBurDZ4Uit8yk2Ls8Qe6Jzf7f2cdTwzw6JrLGyZ6jx+Xl7zHcylvY6YHio8t1zW/ZuP2PuY6XWXL/1gbChhxUIs/LhZbHzPazvnjqxM7ioZkLU0Of3W0keO6AcJo01DGqUHZ/l9FsZU/8697o1W3IyhQ9PDTg9mVWS46hIMhd70nNpCTlDKn6iiv2H0GtZ1FbczX7uoTXI9oqP2uU1qahk10CdbeLW1AgMBAAECggEADnMnBpd8E6XD02E4vF8bfwff7JFHrOBgk5bhMUutbuqFi/DYbpUoyjmdUeLNckmNH8hdDgaYo9ZlS/mwKcbjl07wL/IU0hnmmyHyqzxz/0GHAqxllWXsUrdIilhqycKJeOzmy0tyRyFg1OubeuYW/aWIaXp4GSoClzpqFcxDTc8RE7rSn5JxwfBug9p1dNrv0/RfeXSecJ2puqWO3w6+sJxCyMt7/SmIa5sczc9ehSDYhWH0Zs5FBwfhfpyxECyQWeHoIM6I+AkJqjbNRBKT5TCho66Ie5H/PwHVJ0GxhEyc7xKn+/9ZA+5AAYCrlqDzZyqQQUDK8cDyjZfLFx6fAQKBgQDRpnAD+jRE6wJ1fSBEPUe8J3x7IxlFR2K4k6XXj+hNHdqDP/Oo1lssj64U4eeXHyvbe9bJVbVvJ28jM1cSsGHmcQMj3bHLWhWHlwOYqIc9FZgGB9T//NyMhVUsSUhZ4LPPA5eJOJeDCnKPPwevK2Iaj1iopeO2+DQPffPNYyRPlQKBgQCveN7tX3NFH9944iATS8RZX2C1reXjIf6wH3dLg5ttLJhH9Une//RvKPEjlnPL7sJnyt8jGiXQOma6Xr3cHztDjdCdaEC6lZmoiUL4aN1amUjz7cET2BeJjtv9fRG+bk5RSCemcHyuvALMmLeRwm8cAfdWnNsEv+ikshkUyZHFoQKBgQC8SmtYZyMCsr8mnhaYsyD2T9BxF3jey9pSQ+kyzUCp4iIatxkzjjGct/51Kt9AzvIo0fR6Jswo5JXgW3/cfSWwPdfAIqBILsQfXvYP6Wxs5DQBVo9qycObQTTZ7YdZkYJsbqFu0LDjNELnfIh+PsyBZjUOYs89yXWYZFrPIDfAcQKBgHZDVqxRapUqGCmW7dtTc3Bw0fNg0tG0db0qV/KzLqv0JGZLMZB0nb/VrkA4BK9rqebeWmmEE/w1gEsX04pqGj07dWDBhO68KSXn7RUTSCzppruQgFLpj2OMv0QnaTAZk/tAUEjjA4WY/aH7Q62fh9culA7yBMM8vIVT64eRGwhBAoGAc5vyY2in0OCwDVApi5IO+ilorfHMKWSVub1oG/9R85V21n9Ux6SWkLCs+tTY80VvQzfjrWS/vAkaOV9usfuJL7cotroyUgxFp8+I5bPdgThD0uP2078n92huoacVp49eKL+WGGmHBl1aSz9YJguQ0neaTxJUlEuAokfMO6dhHro="; public string Decrypt(string data) { var toDecryptArray = Convert.FromBase64String(data); var rsa2 = RSA.Create(); rsa2.ImportPkcs8PrivateKey(Convert.FromBase64String(prikey), out _); var ContentArray = rsa2.Decrypt(toDecryptArray, RSAEncryptionPadding.Pkcs1); string result = System.Text.Encoding.UTF8.GetString(ContentArray); return result; } public int MonthDifference(DateTime start, DateTime end) { int yearsDifference = end.Year - start.Year; int monthsDifference = end.Month - start.Month; // 如果结束年份比开始年份大1,则月份差减去1 if (end.AddYears(-yearsDifference) < start) { monthsDifference--; } return yearsDifference * 12 + monthsDifference; } }