PayDetailService.php 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. <?php
  2. namespace app\admin\service\order;
  3. use app\model\PayDetail;
  4. use support\Db;
  5. class PayDetailService
  6. {
  7. public static function checkPaying()
  8. {
  9. Db::beginTransaction();
  10. try {
  11. $timeUnix = strtotime("-30 minutes");
  12. $payDetails = PayDetail::where('pay_status', 'WAITING')
  13. ->where('pay_addtimes', '<', $timeUnix)
  14. ->get();
  15. foreach ($payDetails as $payDetail) {
  16. // 订单主表
  17. PayDetail::where('pay_id', $payDetail->pay_id)->update([
  18. 'pay_status' => 'CANCEL',
  19. ]);
  20. }
  21. Db::commit();
  22. } catch (\Exception $e) {
  23. Db::rollBack();
  24. }
  25. }
  26. /**
  27. * @Desc 搜索指定时间的付款订单ID
  28. * @Author Gorden
  29. * @Date 2024/10/24 15:12
  30. *
  31. * @param $timeStart
  32. * @param $timeEnd
  33. * @return array
  34. */
  35. public static function getPayOrderId($timeStart, $timeEnd)
  36. {
  37. $payDetails = PayDetail::whereRaw('CAST(UNIX_TIMESTAMP(pay_paytimes) as SIGNED) > ? ', [$timeStart])
  38. ->whereRaw('CAST(UNIX_TIMESTAMP(pay_paytimes) as SIGNED) < ? ', [$timeEnd])
  39. ->where('pay_status', 'SUCCESS')
  40. ->select('join_pay_object_json')
  41. ->get()
  42. ->toArray();
  43. $orderIds = [];
  44. foreach ($payDetails as $detail) {
  45. if (!empty($detail['join_pay_object_json']) && is_json($detail['join_pay_object_json'])) {
  46. $payObjectJson = json_decode($detail['join_pay_object_json'], true);
  47. if (!empty($payObjectJson['order_id']) && !in_array($payObjectJson['order_id'], $orderIds)) {
  48. $orderIds[] = $payObjectJson['order_id'];
  49. }
  50. }
  51. }
  52. return $orderIds;
  53. }
  54. /**
  55. * @Desc 获取支付方式
  56. * @Author Gorden
  57. * @Date 2024/10/24 16:12
  58. *
  59. * @param $groupId
  60. * @param $orderId
  61. * @return array
  62. */
  63. public static function getPayWay($groupId, $orderId)
  64. {
  65. $payDetails = PayDetail::where('join_pay_order_id', $groupId)
  66. ->whereJsonContains('join_pay_object_json->order_id', $orderId)
  67. ->where('pay_category', '<>', 'REFUND')
  68. ->where('pay_status', 'SUCCESS')
  69. ->select('pay_id', 'pay_category', 'pay_prepayid', 'pay_paytimes', 'pay_status', 'pay_amount', 'pay_extend_json')
  70. ->get()
  71. ->toArray();
  72. $data = [];
  73. if (count($payDetails) > 1) {
  74. $data['payWay'] = "组合支付";
  75. }
  76. foreach ($payDetails as $detail) {
  77. $data['pay_paytimes'] = $detail['pay_paytimes'];
  78. $data['pay_status'] = $detail['pay_status'];
  79. $data['pay_amount'] = $detail['pay_amount'];
  80. $data['pay_category'] = $detail['pay_category'];
  81. $payWay = '';
  82. if (in_array($detail['pay_prepayid'], ['WXPAY', 'ALIPAY', 'OFFLINE_WXPAY', 'OFFLINE_ALIPAY', 'MONEY', 'OFFLINE'])) {
  83. $payWay = $detail['pay_prepayid'];
  84. } else {
  85. $prepayid = explode('-', $detail['pay_prepayid']);
  86. if (!empty($prepayid[1]) && in_array($prepayid[1], ['CASH', 'WELFARE', 'QRCODE', 'NONE'])) {
  87. $payWay = $prepayid[1];
  88. }
  89. }
  90. if (empty($payWay)){
  91. $data['payWay'] = '';
  92. }
  93. $payWay = OrderService::$payWay[$payWay];
  94. if (!empty($data['payWay']) && $data['payWay'] == '组合支付') {
  95. $data['payWayDesc'] = $payWay . '(¥' . $detail['pay_amount'] . '),';
  96. } else {
  97. $data['payWay'] = $payWay;
  98. }
  99. }
  100. return $data;
  101. }
  102. }