NewCustomerEvent.php 4.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. <?php
  2. namespace app\event\order;
  3. use app\admin\service\coupon\CouponDetailService;
  4. use app\model\Coupon;
  5. use app\model\CouponDetail;
  6. use app\model\Goods;
  7. use app\model\Member;
  8. use app\model\MemberAccount;
  9. use app\model\SysSerial;
  10. use support\exception\BusinessException;
  11. use support\Log;
  12. class NewCustomerEvent
  13. {
  14. public function grant($params)
  15. {
  16. // 余额账户
  17. $memberAccount = MemberAccount::where('join_account_member_id', $params['member_id'])->where('member_account_classify', 'CASH')->first();
  18. // 分期付款
  19. if (isset($params['order_amount_paid']) && $params['order_amount_paid'] > 0) {
  20. $params['order_amount_pay'] = $params['order_amount_paid'] + $params['order_amount_pay'];
  21. }
  22. //发放优惠券
  23. $goods = Goods::where('goods_id', $params['join_sheet_goods_id'])->select('goods_attribute_json')->first();
  24. if (!empty($goods) && !empty($goods->goods_attribute_json)) {
  25. $goodsAttributeJson = json_decode($goods->goods_attribute_json, true);
  26. if (isset($goodsAttributeJson['account'])) {
  27. $memberAccount->member_account_income = $memberAccount->member_account_income + $goodsAttributeJson['account']['amount'];
  28. $memberAccount->member_account_surplus = $memberAccount->member_account_surplus + $goodsAttributeJson['account']['amount'];
  29. $memberAccount->save();
  30. }
  31. if (!empty($goodsAttributeJson['coupon'])) {
  32. foreach ($goodsAttributeJson['coupon'] as $key => $coupon) {
  33. $couponModel = Coupon::where('coupon_id', $key)->select('coupon_id', 'coupon_validdate_day', 'coupon_validdate_end', 'coupon_is_period', 'coupon_number')->first();
  34. if (empty($couponModel)) {
  35. continue;
  36. }
  37. // 券是否过期
  38. if (!empty($couponModel->coupon_validdate_end) && strtotime($couponModel->coupon_validdate_end) < time()) {
  39. continue;
  40. }
  41. // 发周期券
  42. if ($couponModel->coupon_is_period == 'Y') {
  43. if (CouponDetail::where('join_coupon_detail_member_id', $params['member_id'])->where('join_detail_coupon_id', $couponModel->coupon_id)->exists()) {
  44. continue;
  45. }
  46. // TODO 发券逻辑
  47. continue;
  48. }
  49. $couponResidue = 'all';
  50. if ($couponModel->coupon_number != 0) {
  51. $couponResidue = CouponDetail::where('join_detail_coupon_id', $key)->whereIn('coupon_detail_status', ['INIT', 'PENDING'])->count();
  52. // 超出优惠券设置的数量
  53. if ($couponResidue < $coupon['num']) {
  54. continue;
  55. }
  56. }
  57. $endDate = '';
  58. if (!empty($couponModel->coupon_validdate_end)) {
  59. $endDate = $couponModel->coupon_validdate_end;
  60. } elseif ($couponModel->coupon_validdate_day > 0) {
  61. $endDate = date('Y-m-d H:i:s', time() + ($couponModel->coupon_validdate_day * 24 * 3600) - 1);
  62. }
  63. // 发券参数
  64. $couponSendParams = [
  65. 'gettype' => 'COMBINE',
  66. 'coupon_id' => $key,
  67. 'chooseCouponNbr' => $coupon['num'],
  68. 'member_id' => $params['member_id'],
  69. 'coupon_detail_gain_datetime' => date('Y-m-d H:i:s'),
  70. 'coupon_detail_deadline_datetime' => $endDate,
  71. ];
  72. if ($couponResidue != 'all' && $couponResidue - $coupon['num'] >= 0) {
  73. CouponDetailService::customSendCouponHave($couponSendParams);
  74. } else {
  75. for ($i = 0; $i < $coupon['num']; $i++) {
  76. CouponDetailService::customSendCoupon($couponSendParams);
  77. }
  78. }
  79. }
  80. }
  81. }
  82. }
  83. }