CheckWifiData.cs 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Security.Cryptography;
  5. using System.Threading;
  6. using Library;
  7. using LitJson;
  8. using MySystem;
  9. using MySystem.Models;
  10. public class CheckWifiData
  11. {
  12. public readonly static CheckWifiData Instance = new CheckWifiData();
  13. private CheckWifiData()
  14. { }
  15. public void Start()
  16. {
  17. Thread th = new Thread(DoWorks);
  18. th.IsBackground = true;
  19. th.Start();
  20. Thread th2 = new Thread(DoWorks2);
  21. th2.IsBackground = true;
  22. th2.Start();
  23. Thread th3 = new Thread(NewWifi);
  24. th3.IsBackground = true;
  25. th3.Start();
  26. }
  27. public void DoWorks()
  28. {
  29. while (true)
  30. {
  31. string content = RedisDbconn.Instance.RPop<string>("yc_device");
  32. if (!string.IsNullOrEmpty(content))
  33. {
  34. try
  35. {
  36. string[] dataList = content.Replace("\r", "").Replace("\n", "").Split(new string[] { "#cut#" }, StringSplitOptions.None);
  37. string Kind = dataList[0];
  38. JsonData jsonObj = JsonMapper.ToObject(dataList[1]);
  39. string sign = jsonObj["sign"].ToString();
  40. string brhNo = jsonObj["brhNo"].ToString(); //机构号
  41. string timestamp = jsonObj["timestamp"].ToString(); //时间戳。签名用参数
  42. string dataString = jsonObj["data"].ToString();
  43. dataString = dataString.Replace("null", "\"\"");
  44. JsonData data = JsonMapper.ToObject(dataString);
  45. WebCMSEntities db = new WebCMSEntities();
  46. for (int i = 0; i < data.Count; i++)
  47. {
  48. JsonData dataItem = data[i];
  49. string status = dataItem["status"].ToString(); //状态 0:可用 1:待充值 2:待激活 3:冻结中
  50. string iccid = dataItem["iccid"].ToString(); //设备 id
  51. string sim = dataItem["sim"].ToString(); //设备号
  52. string activeTime = dataItem["activeTime"] != null ? dataItem["activeTime"].ToString() : ""; //激活时间,格式:yyyy-MM-dd HH:mm:ss
  53. string expiredTime = dataItem["expiredTime"] != null ? dataItem[prop_name: "expiredTime"].ToString() : ""; //生效日期,格式:yyyy-MM-dd HH:mm:ss
  54. string isRealName = dataItem["isRealName"].ToString(); //实名状态 0-否 1-是
  55. string mobile = dataItem["mobile"] != null ? dataItem["mobile"].ToString() : ""; //用户手机号
  56. // Dictionary<string, string> obj = new Dictionary<string, string>();
  57. // obj.Add("brhNo", brhNo);
  58. // obj.Add("iccid", iccid);
  59. // obj.Add("sim", sim);
  60. // obj.Add("status", status);
  61. // obj.Add("activeTime", activeTime);
  62. // obj.Add("expiredTime", expiredTime);
  63. // obj.Add("isRealName", isRealName);
  64. string model = "";
  65. if(Kind == "init")
  66. {
  67. model = dataItem["model"].ToString(); //设备型号
  68. // obj.Add("model", model);
  69. }
  70. // obj.Add("mobile", mobile);
  71. // string dataString = dataList[0] + "#cut#" + Newtonsoft.Json.JsonConvert.SerializeObject(obj);
  72. // RedisDbconn.Instance.AddList("kxs_bind_list_23", dataString);
  73. if(status == "0" && !db.BindRecord.Any(m => m.MerSnNo == sim))
  74. {
  75. db.BindRecord.Add(new BindRecord()
  76. {
  77. MerName = mobile,
  78. MerNewSnNo = mobile,
  79. MerNo = mobile,
  80. Field3 = model,
  81. Field2 = isRealName,
  82. CreateTime = DateTime.Now,
  83. UpdateTime = DateTime.Now,
  84. UpdateDate = DateTime.Parse(expiredTime),
  85. CreateDate = DateTime.Parse(activeTime),
  86. Field1 = iccid,
  87. MerSnNo = sim,
  88. ProductType = "23", //产品类型
  89. Status = 1,
  90. });
  91. db.Merchants.Add(new Merchants()
  92. {
  93. UpdateDate = DateTime.Parse(expiredTime),
  94. CreateDate = DateTime.Parse(activeTime),
  95. MerNo = mobile, //商户编号
  96. MerName = mobile, //商户名称
  97. AgentName = brhNo, //机构名称
  98. ProductType = "23", //产品类型
  99. Remark = "商户入库", //注释
  100. CreateTime = DateTime.Now, //创建时间
  101. UpdateTime = DateTime.Now, //更新时间
  102. SnNo = sim, //SN号
  103. MerMobile = mobile,
  104. Status = 1,
  105. });
  106. db.SaveChanges();
  107. }
  108. }
  109. db.Dispose();
  110. }
  111. catch(Exception ex)
  112. {
  113. function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "接收云长WIFI设备绑定异常");
  114. }
  115. }
  116. else
  117. {
  118. Thread.Sleep(5000);
  119. }
  120. }
  121. }
  122. public void DoWorks2()
  123. {
  124. while (true)
  125. {
  126. string content = RedisDbconn.Instance.RPop<string>("yc_order");
  127. if (!string.IsNullOrEmpty(content))
  128. {
  129. try
  130. {
  131. string[] dataList = content.Replace("\r", "").Replace("\n", "").Split(new string[] { "#cut#" }, StringSplitOptions.None);
  132. string Kind = dataList[0];
  133. string JsonString = dataList[1];
  134. JsonData jsonObj = JsonMapper.ToObject(JsonString);
  135. string sign = jsonObj["sign"].ToString();
  136. string brhNo = jsonObj["brhNo"].ToString(); //机构号
  137. string timestamp = jsonObj["timestamp"].ToString(); //时间戳。签名用参数
  138. string dataString = jsonObj["data"].ToString();
  139. dataString = dataString.Replace("null", "\"\"");
  140. JsonData data = JsonMapper.ToObject(dataString);
  141. WebCMSEntities db = new WebCMSEntities();
  142. for (int i = 0; i < data.Count; i++)
  143. {
  144. JsonData dataItem = data[i];
  145. string status = dataItem["status"].ToString(); //订单状态,未支付_1 完成_2 线上退款_3 线下退款_4 APP 退款_5 上 游失败_6 原路退回_7 标记打款_8 退款_9
  146. if(Kind == "init")
  147. {
  148. string orderNo = dataItem["orderNo"].ToString(); //订单编号
  149. string mobile = dataItem["mobile"].ToString(); //用户手机号
  150. string iccid = dataItem["iccid"].ToString(); //设备 id
  151. string sim = dataItem["sim"].ToString(); //设备号
  152. string userName = dataItem["userName"].ToString(); //所属客户
  153. string packageName = dataItem["packageName"].ToString(); //套餐名称
  154. string realTotalAmount = dataItem["realTotalAmount"] != null ? dataItem["realTotalAmount"].ToString() : "0"; //实付金额,单位分
  155. string orderAmount = dataItem["orderAmount"] != null ? dataItem["orderAmount"].ToString() : "0"; //订单金额,单位分
  156. string refundMoney = dataItem["refundMoney"] != null ? dataItem["refundMoney"].ToString() : "0"; //退款金额,单位分
  157. string orderType = dataItem["orderType"].ToString(); //订单类型"首次充值_1","续费_2","接口首次_3","接口续费_4","批量充值_5","自带套餐_6","赠送套餐_7","花呗充值_8"
  158. string payCategory = dataItem["payCategory"].ToString(); //充值类型"微信充值_1", "接口充值 _2"," 余 额 充 值_3", "批量充值_4","赠送套 餐 _5"," 支 付 宝 充 值_7","APP 兑换_8","APP 订购_9","自带套餐_10","自带套餐(激活前)_11","设备余额_12"
  159. string payAppid = dataItem["payAppid"].ToString(); //商户号
  160. string outTradeNo = dataItem["outTradeNo"].ToString(); //交易单号
  161. string createTime = dataItem["createTime"].ToString(); //充值时间,格式:yyyy-MM-dd HH:mm:ss
  162. string refundTime = dataItem["refundTime"] != null ? dataItem["refundTime"].ToString() : ""; //退款时间,格式:yyyy-MM-dd HH:mm:ss
  163. string beginTime = dataItem["beginTime"].ToString();
  164. string endTime = dataItem["endTime"].ToString();
  165. // Dictionary<string, string> obj = new Dictionary<string, string>();
  166. // obj.Add("brhNo", brhNo);
  167. // obj.Add("orderNo", orderNo);
  168. // obj.Add("mobile", mobile);
  169. // obj.Add("iccid", iccid);
  170. // obj.Add("sim", sim);
  171. // obj.Add("userName", userName);
  172. // obj.Add("packageName", packageName);
  173. // obj.Add("realTotalAmount", realTotalAmount);
  174. // obj.Add("orderAmount", orderAmount);
  175. // obj.Add("refundMoney", refundMoney);
  176. // obj.Add("orderType", orderType);
  177. // obj.Add("payCategory", payCategory);
  178. // obj.Add("payAppid", payAppid);
  179. // obj.Add("outTradeNo", outTradeNo);
  180. // obj.Add("createTime", createTime);
  181. // obj.Add("refundTime", refundTime);
  182. // obj.Add("status", status);
  183. // string dataString = dataList[0] + "#cut#" + Newtonsoft.Json.JsonConvert.SerializeObject(obj);
  184. // RedisDbconn.Instance.AddList("kxs_trade_list_23", dataString);
  185. int months = MonthDifference(DateTime.Parse(beginTime), DateTime.Parse(endTime).AddSeconds(1));
  186. db.TradeRecord.Add(new TradeRecord()
  187. {
  188. CreateDate = DateTime.Now,
  189. UpdateDate = DateTime.Now,
  190. Field3 = packageName,
  191. Field2 = refundMoney,
  192. Field1 = orderAmount,
  193. TradeType = orderType,
  194. Field4 = refundTime,
  195. BankCardNo = iccid,
  196. BankCardType = payCategory,
  197. TradeStatus = status,
  198. AgentNo = brhNo,
  199. TradeAmount = decimal.Parse(realTotalAmount),
  200. Field5 = createTime,
  201. TradeSerialNo = orderNo,
  202. MerNo = mobile,
  203. TradeSnNo = sim,
  204. ProductType = "23",
  205. Status = status == "2" ? 1 : 0,
  206. QueryCount = months,
  207. });
  208. db.SaveChanges();
  209. }
  210. else if(Kind == "change")
  211. {
  212. //change#cut#{"brhNo":"YCJG10010003","data":"[{\"orderNo\":\"695580\",\"status\":2,\"refundMoney\":null,\"operatorName\":null,\"refundTime\":null}]","sign":"e449LqlIeA2Lc2CBXi0ehsc6+P5y4TBwrxe6+Na8V7EwnUalFkOBDCevG9BaNntLqZrC9meuuWTFiEURQ9tJtcbC0mK0f2g2C8yx8ZwuURfP8MB6XshjLKIGstWRNZromstaOM4Mbz+1sc3i54SJ+x1Kr5Is7BqDjPRSUwEDlQI=","timestamp":1722240000}
  213. string orderNo = dataItem["orderNo"].ToString(); //订单编号
  214. if(status == "2")
  215. {
  216. TradeRecord edit = db.TradeRecord.FirstOrDefault(m => m.TradeSerialNo == orderNo && m.Status == 0);
  217. if(edit != null)
  218. {
  219. edit.Status = 1;
  220. db.SaveChanges();
  221. }
  222. }
  223. if(status == "3" || status == "4" || status == "5" || status == "7")
  224. {
  225. RedisDbconn.Instance.AddList("WifiRefundQueue", orderNo);
  226. }
  227. // Dictionary<string, string> obj = new Dictionary<string, string>();
  228. // obj.Add("brhNo", brhNo);
  229. // obj.Add("orderNo", orderNo);
  230. // obj.Add("status", status);
  231. // string dataString = dataList[0] + "#cut#" + Newtonsoft.Json.JsonConvert.SerializeObject(obj);
  232. // RedisDbconn.Instance.AddList("kxs_trade_list_23", dataString);
  233. }
  234. }
  235. db.Dispose();
  236. }
  237. catch(Exception ex)
  238. {
  239. function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "接收云长WIFI设备交易异常");
  240. }
  241. }
  242. else
  243. {
  244. Thread.Sleep(5000);
  245. }
  246. }
  247. }
  248. public void NewWifi()
  249. {
  250. while (true)
  251. {
  252. string data = RedisDbconn.Instance.RPop<string>("wifi_data_list");
  253. if (!string.IsNullOrEmpty(data))
  254. {
  255. try
  256. {
  257. string[] dataList = data.Split(new string[] { "#cut#" }, StringSplitOptions.None);
  258. string Kind = dataList[0];
  259. JsonData jsonObj = JsonMapper.ToObject(dataList[1]);
  260. string content = jsonObj["content"].ToString();
  261. content = Decrypt(content);
  262. jsonObj = JsonMapper.ToObject(content);
  263. WebCMSEntities db = new WebCMSEntities();
  264. if(Kind == "bind")
  265. {
  266. string sn = jsonObj["sn"].ToString(); //设备号
  267. string mchNo = jsonObj["mchNo"].ToString(); //商户号
  268. string bindTime = jsonObj["bindTime"].ToString(); //绑定时间
  269. string snType = jsonObj["snType"].ToString(); //设备类型 UFI=0 MIFI=1 CPE=2 能量塔=3
  270. string notifyType = jsonObj["notifyType"].ToString(); //通知类型 1绑定 0解绑
  271. db.BindRecord.Add(new BindRecord()
  272. {
  273. MerName = mchNo,
  274. MerNewSnNo = mchNo,
  275. MerNo = mchNo,
  276. Field3 = snType,
  277. CreateTime = DateTime.Now,
  278. UpdateTime = DateTime.Now,
  279. UpdateDate = DateTime.Parse(bindTime),
  280. CreateDate = DateTime.Parse(bindTime),
  281. Field1 = notifyType == "1" ? "绑定" : "解绑",
  282. MerSnNo = sn,
  283. ProductType = "23", //产品类型
  284. Status = 1,
  285. Field2 = "v2",
  286. });
  287. db.Merchants.Add(new Merchants()
  288. {
  289. UpdateDate = DateTime.Parse(bindTime),
  290. CreateDate = DateTime.Parse(bindTime),
  291. MerNo = mchNo, //商户编号
  292. MerName = mchNo, //商户名称
  293. ProductType = "23", //产品类型
  294. Remark = "商户入库", //注释
  295. CreateTime = DateTime.Now, //创建时间
  296. UpdateTime = DateTime.Now, //更新时间
  297. SnNo = sn, //SN号
  298. MerMobile = mchNo,
  299. Field1 = "v2",
  300. Field2 = notifyType == "1" ? "绑定" : "解绑",
  301. Status = 1,
  302. });
  303. db.SaveChanges();
  304. }
  305. else if(Kind == "trade")
  306. {
  307. //{"sn": "217F8972461", "mchNo": "19218587888", "snType": 1, "orderSn": "CA1838166424084348928", "cashFlag": 1, "tradeAmt": "120.00", "tradeTime": "2024-09-23 18:44:08", "isFirstRecharge": 0}
  308. string sn = jsonObj["sn"].ToString(); //设备号
  309. string orderSn = jsonObj["orderSn"].ToString(); //订单号
  310. string mchNo = jsonObj["mchNo"].ToString(); //商户号
  311. string snType = jsonObj["snType"].ToString(); //设备类型 UFI=0 MIFI=1 CPE=2 能量塔=3
  312. string tradeAmt = jsonObj["tradeAmt"].ToString(); //交易金额(元)
  313. string duration = content.Contains("\"duration\"") ? jsonObj[prop_name: "duration"].ToString() : "0"; //设备套餐时长
  314. string unit = content.Contains("\"unit\"") ? jsonObj["unit"].ToString() : "0"; //套餐单位 0:按天 1:按月
  315. string isFirstRecharge = content.Contains("\"isFirstRecharge\"") ? jsonObj["isFirstRecharge"].ToString() : "0"; //是否首充 0否 1是
  316. string cashFlag = jsonObj["cashFlag"].ToString(); //押金标识 0否 1是
  317. string tradeTime = jsonObj["tradeTime"].ToString(); //交易时间
  318. db.TradeRecord.Add(new TradeRecord()
  319. {
  320. CreateDate = DateTime.Now,
  321. UpdateDate = DateTime.Now,
  322. Field1 = snType,
  323. Field2 = duration,
  324. Field3 = unit,
  325. Field4 = isFirstRecharge,
  326. SerEntryMode = cashFlag,
  327. BankCardNo = sn,
  328. TradeStatus = "2",
  329. TradeAmount = decimal.Parse(tradeAmt),
  330. Field5 = tradeTime,
  331. TradeSerialNo = orderSn,
  332. MerNo = mchNo,
  333. TradeSnNo = sn,
  334. ProductType = "23",
  335. Status = 1,
  336. SeoTitle = "v2",
  337. });
  338. db.SaveChanges();
  339. }
  340. db.Dispose();
  341. }
  342. catch(Exception ex)
  343. {
  344. function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "接收来量吧WIFI设备交易异常");
  345. }
  346. }
  347. else
  348. {
  349. Thread.Sleep(5000);
  350. }
  351. }
  352. }
  353. 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=";
  354. public string Decrypt(string data)
  355. {
  356. var toDecryptArray = Convert.FromBase64String(data);
  357. var rsa2 = RSA.Create();
  358. rsa2.ImportPkcs8PrivateKey(Convert.FromBase64String(prikey), out _);
  359. var ContentArray = rsa2.Decrypt(toDecryptArray, RSAEncryptionPadding.Pkcs1);
  360. string result = System.Text.Encoding.UTF8.GetString(ContentArray);
  361. return result;
  362. }
  363. public int MonthDifference(DateTime start, DateTime end)
  364. {
  365. int yearsDifference = end.Year - start.Year;
  366. int monthsDifference = end.Month - start.Month;
  367. // 如果结束年份比开始年份大1,则月份差减去1
  368. if (end.AddYears(-yearsDifference) < start)
  369. {
  370. monthsDifference--;
  371. }
  372. return yearsDifference * 12 + monthsDifference;
  373. }
  374. }