CouponsUserBag.php 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. <?php
  2. namespace App\Models;
  3. use App\Utils\Admin;
  4. use Carbon\Carbon;
  5. class CouponsUserBag extends Model
  6. {
  7. //
  8. protected $table = "coupons_user_bags";
  9. protected $guarded = [];
  10. const TYPE_ADMIN_GIVE = 1;
  11. const TYPE_INVITE_NEW_GIVE = 2;
  12. const TYPE_NEW_USER_GIVE = 3;
  13. public static $typeMaps = [
  14. self::TYPE_ADMIN_GIVE => '后台管理员赠送',
  15. self::TYPE_INVITE_NEW_GIVE => '邀请新用户赠送',
  16. self::TYPE_NEW_USER_GIVE => '新用户赠送',
  17. ];
  18. const COUPON_TYPE_MAN_JIAN = 1;
  19. const COUPON_TYPE_WU_MEN_KAN = 2;
  20. const COUPON_TYPE_ZHE_KOU = 3;
  21. const COUPON_TYPE_DEPOSIT_FREE = 4;
  22. public static $couponTypeMaps = [
  23. self::COUPON_TYPE_MAN_JIAN => '满减优惠',
  24. self::COUPON_TYPE_WU_MEN_KAN => '无门槛优惠',
  25. self::COUPON_TYPE_ZHE_KOU => '折扣优惠',
  26. self::COUPON_TYPE_DEPOSIT_FREE => '免押金劵',
  27. ];
  28. const STATUS_OK = 1;
  29. const STATUS_NO = 0;
  30. const STATUS_USED = 2;
  31. public static $statusMaps = [
  32. self::STATUS_OK => '启用',
  33. self::STATUS_NO => '停用',
  34. self::STATUS_USED => '已使用',
  35. ];
  36. const VALID_TYPE_ABSOLUTELY = 1;
  37. const VALID_TYPE_RELATIVE = 2;
  38. const VALID_TYPE_FOR_EVER = 3;
  39. public static $validTypeMaps = [
  40. self::VALID_TYPE_ABSOLUTELY => '绝对时效',
  41. self::VALID_TYPE_RELATIVE => '相对时效',
  42. self::VALID_TYPE_FOR_EVER => '永久',
  43. ];
  44. const ORDER_TYPE_NORMAL = 1;
  45. const ORDER_TYPE_RENT = 2;
  46. const ORDER_TYPE_ALL = 3;
  47. public static $orderTypeMaps = [
  48. self::ORDER_TYPE_NORMAL => '仅普通订单可用',
  49. self::ORDER_TYPE_RENT => '仅日租订单可用',
  50. self::ORDER_TYPE_ALL => '所有订单可用',
  51. ];
  52. public function getCouponsDataAttribute($value)
  53. {
  54. return json_decode($value, true);
  55. }
  56. public function setCouponsDataAttribute($value)
  57. {
  58. $this->attributes['coupons_data'] = json_encode($value);
  59. }
  60. public function users()
  61. {
  62. return $this->belongsTo(User::class, 'user_id', 'id');
  63. }
  64. public function coupons()
  65. {
  66. return $this->belongsTo(Coupon::class, 'coupon_id', 'id');
  67. }
  68. public static function useCoupon($order_id, $id)
  69. {
  70. $couponUsers = self::query()->find($id);
  71. $couponUsers->status = self::STATUS_USED;
  72. $couponUsers->order_id = $order_id;
  73. $couponUsers->save();
  74. Coupon::couponUsed($couponUsers->coupon_id);
  75. }
  76. /**
  77. * 赠送优惠劵
  78. * Author: Mead
  79. */
  80. public static function addCoupon($coupon, $user, $num = 1)
  81. {
  82. $valid_end_time = $coupon->valid_end_time;
  83. switch ((int)$coupon->valid_type) {
  84. case CouponsUserBag::VALID_TYPE_ABSOLUTELY:
  85. break;
  86. case CouponsUserBag::VALID_TYPE_RELATIVE:
  87. $valid_end_time = Carbon::parse($coupon->valid_start_time)->addDays($coupon->valid_days)->toDateTimeString();
  88. break;
  89. case CouponsUserBag::VALID_TYPE_FOR_EVER:
  90. $valid_end_time = Carbon::parse($coupon->valid_start_time)->addYears(10)->toDateTimeString();
  91. break;
  92. }
  93. for ($i = 1; $i <= $num; $i++) {
  94. $data = [
  95. 'coupon_id' => $coupon->id,
  96. 'type' => CouponsUserBag::TYPE_ADMIN_GIVE,
  97. 'user_id' => $user->id,
  98. 'coupons_data' => $coupon->toArray(),
  99. 'status' => CouponsUserBag::STATUS_OK,
  100. 'coupon_type' => $coupon->type,
  101. 'valid_type' => $coupon->valid_type,
  102. 'valid_start_time' => $coupon->valid_start_time,
  103. 'valid_end_time' => $valid_end_time,
  104. 'valid_days' => $coupon->valid_days,
  105. 'grant_start_at' => $coupon->grant_start_at,
  106. 'grant_end_at' => $coupon->grant_end_at,
  107. 'give_admin_id' => 0,
  108. 'order_type' => $coupon->order_type,
  109. 'merchant_id' => $user->merchant_id
  110. ];
  111. CouponsUserBag::create($data);
  112. }
  113. if ((int)$coupon->type === self::COUPON_TYPE_DEPOSIT_FREE) {
  114. //免押金卡
  115. User::query()->where('id', $user->id)->update(['is_coupon_deposit_free' => User::IS_COUPON_DEPOSIT_FREE_OK]);
  116. }
  117. return true;
  118. }
  119. }