RidingCardActivityHandler.php 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. <?php
  2. namespace App\Handlers\Activities;
  3. use App\Models\CardRidingUseLog;
  4. use App\Models\CardRidingUserBags;
  5. use App\Models\Order;
  6. use App\Repositories\CardRidingUseLogRepository;
  7. use App\Repositories\CardRidingUserBagsRepository;
  8. use App\Repositories\OrderRepository;
  9. /**
  10. * 骑行卡优惠
  11. * Class RidingCardActivityHandler
  12. * @package App\Handlers\Activities
  13. */
  14. class RidingCardActivityHandler
  15. {
  16. protected $cardRidingUserBagsRepository = null;
  17. protected $cardRidingUseLogRepository = null;
  18. protected $orderRepository = null;
  19. public function __construct(CardRidingUserBagsRepository $cardRidingUserBagsRepository, CardRidingUseLogRepository $cardRidingUseLogRepository, OrderRepository $orderRepository)
  20. {
  21. $this->cardRidingUserBagsRepository = $cardRidingUserBagsRepository;
  22. $this->cardRidingUseLogRepository = $cardRidingUseLogRepository;
  23. $this->orderRepository = $orderRepository;
  24. }
  25. public function main(&$order)
  26. {
  27. if ($order->time_money <= 0) return false;
  28. //已优惠不能在同时享受
  29. if ((int)$order->is_riding_card == Order::RIDING_CARD_OK) return false;
  30. $cardRiding = $this->cardRidingUserBagsRepository->isExist($order->user_id, $order->start_use_bike_time);
  31. if (empty($cardRiding)) return false;
  32. $cardLogs = $this->cardRidingUseLogRepository->isUseThisCardByOrderId($order->id);
  33. if ($cardLogs) return false;
  34. $discount_time_money = $cardRiding->deduction_money;
  35. if (bccomp($order->time_money, $cardRiding->deduction_money, 2) < 0) {
  36. $discount_time_money = $order->time_money;
  37. }
  38. //调整订单
  39. $order->preferential_money = $discount_time_money;
  40. $order->card_preferential_money = $discount_time_money;
  41. $order->order_money = bcsub($order->order_money, $order->preferential_money, 2);
  42. $order->pay_money = $order->order_money;
  43. $order->is_riding_card = Order::RIDING_CARD_OK;
  44. //优惠方式
  45. if($order->preferential_type == 0){
  46. $order->preferential_type = arr2str([Order::PREFERENTIAL_CARD_RIDING],'-');
  47. }else{
  48. $arr = str2arr($order->preferential_type,'-');
  49. $order->preferential_type = arr2str(array_merge($arr,[Order::PREFERENTIAL_CARD_RIDING]),'-');
  50. }
  51. if($order->pay_money == 0){
  52. $order->pay_type = Order::PAY_TYPE_ACCOUNT;
  53. }
  54. if ((int)$cardRiding->is_limit_times === CardRidingUserBags::LIMIT_TIMES_YES) {
  55. $cardRiding->can_ridding_times -= 1;
  56. if ($cardRiding->can_ridding_times <= 0) {
  57. // 如果没次数了 直接使其失效
  58. $cardRiding->status = CardRidingUserBags::STATUS_NO;
  59. }
  60. $cardRiding->save();
  61. }
  62. CardRidingUseLog::logs($cardRiding->id, $order->id, $order->preferential_money);
  63. }
  64. }