WyOrderJob.cs 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. using Quartz;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. using Utils;
  8. using Sugar.Enties;
  9. using WxPayAPI;
  10. namespace PMS.NetCore.Service
  11. {
  12. /// <summary>
  13. /// 物业缴费订单定时处理任务
  14. /// </summary>
  15. public class WyOrderJob : IJob
  16. {
  17. public Task Execute(IJobExecutionContext context)
  18. {
  19. return Task.Run(() =>
  20. {
  21. try
  22. {
  23. NlogHelper.quartzLogger.Info("开始物业缴费订单定时处理任务");
  24. var manager = new fdc_pm_meterrecordManager();
  25. //遍历最近5天未支付的订单
  26. var list = manager.Db.Queryable<Order>().Where(m => m.Status == 0 && m.AddTime > DateTime.Now.AddDays(-5)).ToList();
  27. foreach (var order in list)
  28. {
  29. orderQuery(order.OrderNo);
  30. }
  31. }
  32. catch (Exception ero)
  33. {
  34. NlogHelper.quartzLogger.Error(ero, "物业缴费订单定时处理任务执行出错");
  35. throw;
  36. }
  37. });
  38. }
  39. /// <summary>
  40. /// 向微信支付发起订单查询请求,根据查询结果,插入缴费记录,及更新order订单表的状态
  41. /// </summary>
  42. /// <param name="out_trade_no">订单号</param>
  43. /// <returns></returns>
  44. private string orderQuery(string out_trade_no)
  45. {
  46. WxPayData data = new WxPayData();
  47. data.SetValue("out_trade_no", out_trade_no);
  48. WxPayData result = WxPayApi.OrderQuery(data);//提交订单查询请求给API,接收返回数据
  49. if (result.GetValue("return_code") == null || result.GetValue("result_code") == null || result.GetValue("trade_state") == null)
  50. {
  51. NlogHelper.quartzLogger.Debug("return_code...null");
  52. return "";
  53. }
  54. if (result.GetValue("return_code").ToString() != "SUCCESS" || result.GetValue("result_code").ToString() != "SUCCESS" || result.GetValue("trade_state").ToString() != "SUCCESS")
  55. {
  56. NlogHelper.quartzLogger.Debug("return_code...不成功");
  57. return "";
  58. }
  59. var manager = new fdc_pm_meterrecordManager();
  60. manager.Db.BeginTran();
  61. var order = manager.Db.Queryable<Order>().First(m => m.OrderNo == out_trade_no);
  62. #region 扫码支付订单处理
  63. if (order == null)
  64. {
  65. manager.Db.RollbackTran();
  66. return "";
  67. }
  68. try
  69. {
  70. string revfarecode="";
  71. var res = manager.InsertPayWithNoTran(order.Farerowid, order.Money.ToString(), order.Ownername, order.Hname, ref revfarecode);
  72. if(res!="success")
  73. {
  74. manager.Db.RollbackTran();
  75. return "";
  76. }
  77. else
  78. {
  79. order.Status = 1;
  80. order.Revfarecode = revfarecode;
  81. //更新订单状态为已支付 更新生成的已缴费主键到order表
  82. manager.Db.Updateable<Order>().UpdateColumns(it => new { it.Status, it.Revfarecode }).ExecuteCommand();
  83. }
  84. manager.Db.CommitTran();
  85. return "SUCCESS";
  86. }
  87. catch (Exception ex)
  88. {
  89. manager.Db.RollbackTran();
  90. NlogHelper.quartzLogger.Error(ex,$"{out_trade_no}订单缴费和更新订单状态出错");
  91. //throw;
  92. }
  93. #endregion
  94. return "";
  95. }
  96. }
  97. }