AfterOrderDeductiblePointService.php 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * Author: 芸众商城 www.yunzshop.com
  5. * Date: 2017/4/12
  6. * Time: 上午11:17
  7. */
  8. namespace app\frontend\modules\finance\services;
  9. use app\common\events\order\AfterOrderCreatedEvent;
  10. use app\common\facades\Setting;
  11. use app\common\models\Order;
  12. use app\common\services\finance\PointService;
  13. use Illuminate\Support\Facades\Log;
  14. class AfterOrderDeductiblePointService
  15. {
  16. private $order_model;
  17. private $point_set;
  18. private $preGenerateOrder;
  19. public static function isChecked($deduction_ids, $id = 'point')
  20. {
  21. if (!is_array($deduction_ids)) {
  22. $deduction_ids = json_decode($deduction_ids, true);
  23. if (!is_array($deduction_ids)) {
  24. $deduction_ids = explode(',', $deduction_ids);
  25. }
  26. }
  27. Log::info("订单积分:积分计算开始");
  28. return in_array($id, $deduction_ids);
  29. }
  30. public function deductiblePoint(AfterOrderCreatedEvent $event)
  31. {
  32. $this->order_model = Order::find($event->getOrderModel()->id);
  33. $this->preGenerateOrder = $event->getOrderModel();
  34. $this->point_set = Setting::get('point.set');
  35. Log::info("订单{$event->getOrderModel()->id}:积分计算开始");
  36. $this->calculationPoint();
  37. }
  38. private function calculationPoint()
  39. {
  40. if (!$this->isDeductible()) {
  41. return;
  42. }
  43. $this->addPointLog();
  44. }
  45. private function isDeductible()
  46. {
  47. $deduction_ids = $this->preGenerateOrder->getParams('deduction_ids');
  48. if (!self::isChecked($deduction_ids,'point')) {
  49. Log::info("订单{$this->order_model->id}:积分抵扣未选中");
  50. return false;
  51. }
  52. return true;
  53. }
  54. private function getPointData()
  55. {
  56. Log::info("订单{$this->order_model->id}:积分计算");
  57. $point_service = new CalculationPointService($this->order_model, $this->order_model->uid);
  58. $data = [
  59. 'point_income_type' => -1,
  60. 'point_mode' => 6,
  61. 'member_id' => $this->order_model->uid,
  62. 'point' => -$point_service->point,
  63. 'remark' => '订单[' . $this->order_model->order_sn . ']抵扣[' . $point_service->point_money . ']元'
  64. ];
  65. Log::info("订单{$this->order_model->id}:日志",$data);
  66. return $data;
  67. }
  68. private function addPointLog()
  69. {
  70. $point_service = new PointService($this->getPointData());
  71. $point_service->changePoint();
  72. }
  73. }