PayDetailService.php 4.5 KB

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