RefundLog.php 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. <?php
  2. namespace App\Models;
  3. use Carbon\Carbon;
  4. use Illuminate\Support\Facades\Log;
  5. class RefundLog extends Model
  6. {
  7. protected $guarded = [];
  8. const NO_TAG = 'T';
  9. const STATUS_OK = 1;
  10. const STATUS_PAUSE = 0;
  11. public static $statusMaps = [
  12. self::STATUS_OK => '正常',
  13. self::STATUS_PAUSE => '暂停'
  14. ];
  15. const PAY_STATUS_OK = 1;
  16. const PAY_STATUS_NO = 0;
  17. const PAY_STATUS_ERROR = 2;
  18. const PAY_STATUS_WAIT = 3;
  19. const PAY_STATUS_ALIPAYMINI_PAY = 4;
  20. public static $payStatusMaps = [
  21. self::PAY_STATUS_NO => '已支付',
  22. self::PAY_STATUS_OK => '未支付',
  23. self::PAY_STATUS_ERROR => '退款异常',
  24. self::PAY_STATUS_WAIT => '退款排队中',
  25. self::PAY_STATUS_ALIPAYMINI_PAY => '退款方式错误',
  26. ];
  27. const PAY_TYPE_WECHAT = 1;
  28. const PAY_TYPE_ALIPAYMINI = 2;
  29. const PAY_TYPE_ALIPAYMINI_CREDIT = 3;
  30. public static $payTypeMaps = [
  31. self::PAY_TYPE_WECHAT => '微信支付',
  32. self::PAY_TYPE_ALIPAYMINI => '支付宝小程序支付',
  33. self::PAY_TYPE_ALIPAYMINI_CREDIT => '支付宝免押金支付',
  34. ];
  35. const REFUND_OK = 1;
  36. const REFUND_NO = 0;
  37. public static $refundMaps = [
  38. self::REFUND_OK => '已退款',
  39. self::REFUND_NO => '未退款'
  40. ];
  41. const TYPE_USER = 0;
  42. const TYPE_USER_SPEED = 1;
  43. const TYPE_ADMIN = 2;
  44. public static $typeMaps = [
  45. self::TYPE_USER => '用户发起一般退款',
  46. self::TYPE_USER_SPEED => '用户发起加速退款',
  47. self::TYPE_ADMIN => '后台发起退款'
  48. ];
  49. const CHECK_STATUS_OK = 1;
  50. const CHECK_STATUS_NO = 0;
  51. public static $checkStatusMaps = [
  52. self::CHECK_STATUS_NO => '审核通过',
  53. self::CHECK_STATUS_OK => '审核未通过'
  54. ];
  55. const TRADE_STATE_SUCCESS = 'SUCCESS';
  56. const TRADE_STATE_REFUNDCLOSE = 'REFUNDCLOSE';
  57. const TRADE_STATE_PROCESSING = 'PROCESSING';
  58. const TRADE_STATE_CHANGE = 'CHANGE';
  59. public static $tradeStateMaps = [
  60. self::TRADE_STATE_SUCCESS => '退款成功',
  61. self::TRADE_STATE_REFUNDCLOSE => '退款关闭',
  62. self::TRADE_STATE_PROCESSING => '退款处理中',
  63. self::TRADE_STATE_CHANGE => '退款异常',
  64. ];
  65. public function deposit()
  66. {
  67. return $this->belongsTo(DepositOrder::class, 'deposit_id');
  68. }
  69. /**
  70. * 生成订单号
  71. * @return bool|string
  72. * User: Mead
  73. */
  74. public static function makeNo($tag = null)
  75. {
  76. // 订单流水号前缀
  77. $prefix = $tag . self::NO_TAG . date('YmdHis');
  78. for ($i = 0; $i < 10; $i++) {
  79. // 随机生成 6 位的数字
  80. $no = $prefix . str_pad(random_int(0, 999999), 6, '0', STR_PAD_LEFT);
  81. // 判断是否已经存在
  82. if (!static::query()->where('no', $no)->exists()) {
  83. return $no;
  84. }
  85. }
  86. Log::warning('find order no failed');
  87. return false;
  88. }
  89. /**
  90. * 退款成功回调
  91. * @return bool
  92. */
  93. public function refund_order_callback()
  94. {
  95. DepositOrder::where('id', $this->attributes['deposit_id'])->update([
  96. 'is_refund' => DepositOrder::REFUND_OK
  97. ]);
  98. $user_id = $this->attributes['user_id'];
  99. $user = User::find($user_id);
  100. $re = CouponsUserBag::query()->where('user_id', $user_id)->where('coupon_type', CouponsUserBag::COUPON_TYPE_DEPOSIT_FREE)->where('valid_end_time', '<=', Carbon::now()->toDateTimeString())->where('status', CouponsUserBag::STATUS_OK)->exists();
  101. if ($re) {
  102. //是否有免押金劵
  103. User::where('id', $user_id)->update([
  104. 'deposit_money' => 0,
  105. 'is_deposit' => User::DEPOSIT_OK,
  106. 'deposit_type' => User::DEPOSIT_COUPON
  107. ]);
  108. } else {
  109. $deposit_expire_time = Carbon::parse($user->deposit_expire_time);
  110. if (Carbon::now()->gte($deposit_expire_time)) {
  111. // 免押金卡已经过期
  112. User::where('id', $user_id)->update([
  113. 'deposit_money' => 0,
  114. 'is_deposit' => User::DEPOSIT_NO,
  115. 'deposit_type' => User::DEPOSIT_TYPE_NO
  116. ]);
  117. } else {
  118. // 免押金卡未过期
  119. User::where('id', $user_id)->update([
  120. 'deposit_money' => 0,
  121. 'is_deposit' => User::DEPOSIT_OK,
  122. 'deposit_type' => User::DEPOSIT_CARD
  123. ]);
  124. }
  125. }
  126. // // 修改用户押金状态
  127. // User::where('id', $this->attributes['user_id'])->update([
  128. // 'deposit_money' => 0,
  129. // 'is_deposit' => User::DEPOSIT_NO
  130. // ]);
  131. return true;
  132. }
  133. }