CheckAlipaySignService.cs 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using MySystem.Models;
  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 = TendisDbconn.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 SignUrlList = function.CheckNull(merchantadd.SeoKeyword);
  36. if (string.IsNullOrEmpty(SignUrlList))
  37. {
  38. SignUrlList = "Alipay:" + sign_url + ";";
  39. }
  40. else
  41. {
  42. SignUrlList = "Alipay:" + sign_url+ ";" + SignUrlList;
  43. }
  44. merchantadd.SeoKeyword = SignUrlList;
  45. merchantadd.SeoTitle = dic["alipay_open_agent_order_query_response"]["merchant_pid"].ToString();
  46. db.SaveChanges();
  47. BothdisDbconn.Instance.Set("MerchantAddInfo:" + sign.MerchantAddInfoId, merchantadd);
  48. }
  49. }
  50. else if (dic["alipay_open_agent_order_query_response"]["order_status"].ToString() == "MERCHANT_CONFIRM_SUCCESS")
  51. {
  52. PxcModels.MerchantAddInfo merchantadd = db.MerchantAddInfo.FirstOrDefault(m => m.Id == sign.MerchantAddInfoId && m.QueryCount < 2);
  53. if (merchantadd != null)
  54. {
  55. merchantadd.QueryCount = 2;
  56. db.SaveChanges();
  57. BothdisDbconn.Instance.Set("MerchantAddInfo:" + sign.MerchantAddInfoId, merchantadd);
  58. if (merchantadd.Status == 2 && merchantadd.QueryCount == 2)
  59. {
  60. PxcModels.MerchantInfo merchant = db.MerchantInfo.FirstOrDefault(m => m.Id == sign.MerchantAddInfoId);
  61. List<PxcModels.MerchantInfo> merchants = RedisDbconn.Instance.GetList<PxcModels.MerchantInfo>("TmpMerchantInfo:" + merchant.UserId, 1, 1000000);
  62. PxcModels.MerchantInfo check = merchants.FirstOrDefault(m => m.Id == sign.MerchantAddInfoId);
  63. if (check != null)
  64. {
  65. merchants.Remove(check);
  66. RedisDbconn.Instance.Clear("TmpMerchantInfo:" + merchant.UserId);
  67. RedisDbconn.Instance.AddList("TmpMerchantInfo:" + merchant.UserId, merchants.ToArray());
  68. }
  69. }
  70. deletes.Add(sign);
  71. }
  72. }
  73. else if (dic["alipay_open_agent_order_query_response"]["order_status"].ToString() == "MERCHANT_APPLY_ORDER_CANCELED")
  74. {
  75. PxcModels.MerchantAddInfo merchantadd = db.MerchantAddInfo.FirstOrDefault(m => m.Id == sign.MerchantAddInfoId);
  76. if (merchantadd != null)
  77. {
  78. string Season = function.CheckNull(merchantadd.SeoDescription);
  79. if (string.IsNullOrEmpty(Season))
  80. {
  81. Season = "Alipay:" + dic["alipay_open_agent_order_query_response"]["reject_reason"].ToString() + ";";
  82. }
  83. else
  84. {
  85. Season = Regex.Replace(Season, "Alipay:.*?;", "");
  86. Season += "Alipay:" + dic["alipay_open_agent_order_query_response"]["reject_reason"].ToString() + ";";
  87. }
  88. merchantadd.SeoDescription = Season;
  89. merchantadd.QueryCount = -1;
  90. db.SaveChanges();
  91. BothdisDbconn.Instance.Set("MerchantAddInfo:" + sign.MerchantAddInfoId, merchantadd);
  92. PxcModels.MerchantInfo merchant = db.MerchantInfo.FirstOrDefault(m => m.Id == sign.MerchantAddInfoId);
  93. if (merchant != null)
  94. {
  95. merchant.Status = -1;
  96. BothdisDbconn.Instance.Set("MerchantInfo:" + sign.MerchantAddInfoId, merchant);
  97. }
  98. deletes.Add(sign);
  99. }
  100. }
  101. }
  102. }
  103. if (deletes.Count > 0)
  104. {
  105. foreach (MerchantSign delete in deletes)
  106. {
  107. signs.Remove(delete);
  108. }
  109. TendisDbconn.Instance.Clear("AliaySignList");
  110. TendisDbconn.Instance.AddList("AliaySignList", signs.ToArray());
  111. }
  112. jobInfo.Status = 1;
  113. jobInfo.Msg = "执行完成";
  114. RabbitMQClient.Instance.SendMsg(Newtonsoft.Json.JsonConvert.SerializeObject(jobInfo), "PublicBack");
  115. }
  116. catch (Exception ex)
  117. {
  118. TendisDbconn.Instance.AddList("public:merchant:signerr", DateTime.Now.ToString() + ":" + ex.ToString());
  119. }
  120. }
  121. }
  122. }