WifiWithholdBackService.cs 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. using System;
  2. using System.Collections.Generic;
  3. using Library;
  4. using LitJson;
  5. using System.Linq;
  6. using System.Data;
  7. using System.Threading;
  8. using MySystem.PxcModels;
  9. namespace MySystem
  10. {
  11. public class WifiWithholdBackService
  12. {
  13. public readonly static WifiWithholdBackService Instance = new WifiWithholdBackService();
  14. private WifiWithholdBackService()
  15. { }
  16. public void Start()
  17. {
  18. Thread th = new Thread(StartDo);
  19. th.IsBackground = true;
  20. th.Start();
  21. }
  22. public void StartDo()
  23. {
  24. while (true)
  25. {
  26. try
  27. {
  28. string content = RedisDbconn.Instance.RPop<string>("WifiWithholdBackQueue");
  29. if(!string.IsNullOrEmpty(content))
  30. {
  31. function.WriteLog("content:" + content, "Wifi预扣款激活处理");
  32. JsonData jsonObj = JsonMapper.ToObject(content);
  33. int UserId = int.Parse(function.CheckInt(jsonObj["UserId"].ToString()));
  34. string SnNo = jsonObj["SnNo"].ToString();
  35. WebCMSEntities db = new WebCMSEntities();
  36. decimal ChargeAmount = 0;
  37. bool doBack = true; //是否减少账户预扣总额
  38. ToChargeBackRecord back = db.ToChargeBackRecord.FirstOrDefault(m => m.UserId == UserId && m.Field1 == SnNo && (m.Remark == "WIFI超时未激活扣款" || m.Remark.Contains(SnNo)) && m.LockFlag == 0);
  39. if(back != null)
  40. {
  41. back.LockFlag = 1;
  42. db.SaveChanges();
  43. function.WriteLog("预扣款数据:" + Newtonsoft.Json.JsonConvert.SerializeObject(back), "Wifi预扣款激活处理");
  44. ChargeAmount = back.ChargeAmount;
  45. function.WriteLog("预扣款是否已扣:" + back.Status, "Wifi预扣款激活处理");
  46. if(back.Status == 1)
  47. {
  48. Utils.Instance.OpAccount(back.UserId, ChargeAmount, 134, false);
  49. doBack = false;
  50. }
  51. db.ToChargeBackRecord.Remove(back);
  52. back.LockFlag = 0;
  53. db.SaveChanges();
  54. }
  55. db.Dispose();
  56. //减少账户预扣总额
  57. function.WriteLog("是否减少账户预扣总额:" + doBack, "Wifi预扣款激活处理");
  58. if(doBack)
  59. {
  60. Utils.Instance.ToChargeAmount(UserId, -ChargeAmount);
  61. function.WriteLog("减少账户预扣总额:" + ChargeAmount, "Wifi预扣款激活处理");
  62. }
  63. Thread.Sleep(500);
  64. }
  65. else
  66. {
  67. Thread.Sleep(30000);
  68. }
  69. }
  70. catch (Exception ex)
  71. {
  72. function.WriteLog(DateTime.Now.ToString() + "\r\n" + ex.ToString(), "Wifi预扣款激活处理异常");
  73. Thread.Sleep(300000);
  74. }
  75. }
  76. }
  77. }
  78. }