CheckAlipaySignService.cs 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using MySystem.PxcModels;
  5. using Library;
  6. using LitJson;
  7. using System.Text.RegularExpressions;
  8. namespace MySystem
  9. {
  10. public class CheckAlipaySignService
  11. {
  12. public readonly static CheckAlipaySignService Instance = new CheckAlipaySignService();
  13. private CheckAlipaySignService()
  14. { }
  15. public void Start(JobMqMsg jobInfo)
  16. {
  17. try
  18. {
  19. PxcModels.WebCMSEntities db = new PxcModels.WebCMSEntities();
  20. List<MerchantSign> deletes = new List<MerchantSign>();
  21. List<MerchantSign> signs = RedisDbconn.Instance.GetList<MerchantSign>("AlipaySignList", 1, 10000000); // TODO: 换成mysql存储遍历
  22. foreach (MerchantSign sign in signs)
  23. {
  24. string content = new AlipayFunction().QuerySignStatus(sign.BusinessCode);
  25. JsonData dic = JsonMapper.ToObject(content);
  26. if (dic["alipay_open_agent_order_query_response"]["code"].ToString() == "10000")
  27. {
  28. if (dic["alipay_open_agent_order_query_response"]["order_status"].ToString() == "MERCHANT_CONFIRM")
  29. {
  30. string sign_url = dic["alipay_open_agent_order_query_response"]["confirm_url"].ToString();
  31. PxcModels.MerchantAddInfo merchantadd = db.MerchantAddInfo.FirstOrDefault(m => m.Id == sign.MerchantAddInfoId && m.QueryCount == 0);
  32. if (merchantadd != null)
  33. {
  34. merchantadd.QueryCount = 1;
  35. string confirm_url = "/static/alipay_confirm_url/";
  36. string fileName = function.MD5_16(Guid.NewGuid().ToString());
  37. function.CreateQRCode2(sign_url, fileName, "/bsserver_com" + confirm_url);
  38. string SignUrlList = function.CheckNull(merchantadd.SeoKeyword);
  39. if (string.IsNullOrEmpty(SignUrlList))
  40. {
  41. SignUrlList = "Alipay:" + confirm_url + ";";
  42. }
  43. else
  44. {
  45. SignUrlList = "Alipay:" + confirm_url+ ";" + SignUrlList;
  46. }
  47. merchantadd.SeoKeyword = SignUrlList;
  48. merchantadd.SeoTitle = dic["alipay_open_agent_order_query_response"]["merchant_pid"].ToString();
  49. db.SaveChanges();
  50. RedisDbconn.Instance.Set("MerchantAddInfo:" + sign.MerchantAddInfoId, merchantadd);
  51. }
  52. }
  53. else if (dic["alipay_open_agent_order_query_response"]["order_status"].ToString() == "MERCHANT_CONFIRM_SUCCESS")
  54. {
  55. PxcModels.MerchantAddInfo merchantadd = db.MerchantAddInfo.FirstOrDefault(m => m.Id == sign.MerchantAddInfoId && m.QueryCount < 2);
  56. if (merchantadd != null)
  57. {
  58. merchantadd.QueryCount = 2;
  59. db.SaveChanges();
  60. RedisDbconn.Instance.Set("MerchantAddInfo:" + sign.MerchantAddInfoId, merchantadd);
  61. if (merchantadd.Status == 2 && merchantadd.QueryCount == 2)
  62. {
  63. PxcModels.MerchantInfo merchant = db.MerchantInfo.FirstOrDefault(m => m.Id == sign.MerchantAddInfoId);
  64. List<PxcModels.MerchantInfo> merchants = RedisDbconn.Instance.GetList<PxcModels.MerchantInfo>("TmpMerchantInfo:" + merchant.UserId, 1, 1000000);
  65. PxcModels.MerchantInfo check = merchants.FirstOrDefault(m => m.Id == sign.MerchantAddInfoId);
  66. if (check != null)
  67. {
  68. merchants.Remove(check);
  69. RedisDbconn.Instance.Clear("TmpMerchantInfo:" + merchant.UserId);
  70. RedisDbconn.Instance.AddList("TmpMerchantInfo:" + merchant.UserId, merchants.ToArray());
  71. }
  72. }
  73. deletes.Add(sign);
  74. }
  75. }
  76. else if (dic["alipay_open_agent_order_query_response"]["order_status"].ToString() == "MERCHANT_APPLY_ORDER_CANCELED")
  77. {
  78. PxcModels.MerchantAddInfo merchantadd = db.MerchantAddInfo.FirstOrDefault(m => m.Id == sign.MerchantAddInfoId);
  79. if (merchantadd != null)
  80. {
  81. string Season = function.CheckNull(merchantadd.SeoDescription);
  82. if (string.IsNullOrEmpty(Season))
  83. {
  84. Season = "Alipay:" + dic["alipay_open_agent_order_query_response"]["reject_reason"].ToString() + ";";
  85. }
  86. else
  87. {
  88. Season = Regex.Replace(Season, "Alipay:.*?;", "");
  89. Season += "Alipay:" + dic["alipay_open_agent_order_query_response"]["reject_reason"].ToString() + ";";
  90. }
  91. merchantadd.SeoDescription = Season;
  92. merchantadd.QueryCount = -1;
  93. db.SaveChanges();
  94. RedisDbconn.Instance.Set("MerchantAddInfo:" + sign.MerchantAddInfoId, merchantadd);
  95. PxcModels.MerchantInfo merchant = db.MerchantInfo.FirstOrDefault(m => m.Id == sign.MerchantAddInfoId);
  96. if (merchant != null)
  97. {
  98. merchant.Status = -1;
  99. RedisDbconn.Instance.Set("MerchantInfo:" + sign.MerchantAddInfoId, merchant);
  100. }
  101. deletes.Add(sign);
  102. }
  103. }
  104. }
  105. }
  106. if (deletes.Count > 0)
  107. {
  108. foreach (MerchantSign delete in deletes)
  109. {
  110. signs.Remove(delete);
  111. }
  112. RedisDbconn.Instance.Clear("AliaySignList");
  113. RedisDbconn.Instance.AddList("AliaySignList", signs.ToArray());
  114. }
  115. // jobInfo.Status = 1;
  116. // jobInfo.Msg = "执行完成";
  117. // RabbitMQClient.Instance.SendMsg(Newtonsoft.Json.JsonConvert.SerializeObject(jobInfo), "PublicBack");
  118. }
  119. catch (Exception ex)
  120. {
  121. function.WriteLog(DateTime.Now.ToString() + ":" + ex.ToString(), "public:merchant:signerr");
  122. }
  123. }
  124. }
  125. }