BasePurchase.php 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. <?php
  2. namespace addons\Sudoku\common\logic\order\purchase;
  3. use addons\GroupBuy\common\models\GroupBuyOrder;
  4. use addons\Sudoku\common\enums\SudokuEnum;
  5. use common\enums\AppEnum;
  6. use common\enums\StatusEnum;
  7. use addons\Sudoku\common\logic\order\OrderFormLogic;
  8. use common\helpers\ArrayHelper;
  9. use common\models\mall\Mall;
  10. use common\models\user\UserAddress;
  11. use common\traits\ErrorTrait;
  12. use Exception;
  13. use yii\helpers\Json;
  14. // 支付方式接口
  15. abstract class BasePurchase
  16. {
  17. use ErrorTrait;
  18. public $isNewRecord = false; // 是否是新增操作
  19. /**
  20. * @desc:
  21. * @Author: hua
  22. * @Date: 2021/12/15
  23. * @Time: 9:56
  24. * @Copyright: copyright (c) 2021 广东七件事集团
  25. * @param OrderFormLogic $form
  26. * @return mixed
  27. */
  28. abstract public function execute(OrderFormLogic $form);
  29. /**
  30. * 获取下单类型
  31. * @Author bing
  32. * @DateTime 2021-09-23 09:48:45
  33. * @return string
  34. * @copyright: Copyright (c) 2020 广东七件事集团
  35. */
  36. abstract public static function getType(): string;
  37. public function afterExecute(OrderFormLogic $form, string $type){
  38. try{
  39. // 重组默认商品信息
  40. $default_goods = ArrayHelper::arrayKey($form['default_goods'], 'id');
  41. $order_goods = $form['order_goods'];
  42. $group_order_goods = [];
  43. $mch_order = [];
  44. $data = is_array($form->data)?$form->data:Json::decode($form->data,true);
  45. // 产品按照商户重新归类组别
  46. foreach ($order_goods as $item) {
  47. if(!isset($group_order_goods[$item['mch_id']])){
  48. $group_order_goods[$item['mch_id']]['mch_order_info']['mch_id'] = $item['mch_id'];
  49. if($item['mch_id'] == 0){
  50. // 平台
  51. $mall = Mall::getOne([['id'=>$item['mall_id']]],true,[],false,'name');
  52. if(empty($mall)) throw new Exception('商城不存在');
  53. $group_order_goods[$item['mch_id']]['mch_order_info']['mch_name'] = $mall['name'];
  54. }else{
  55. // 查询商户信息
  56. }
  57. // 主订单信息
  58. $group_order_goods[$item['mch_id']]['mch_order_info']['user_id'] = $item['user_id'];
  59. $group_order_goods[$item['mch_id']]['mch_order_info']['mall_id'] = $item['mall_id'];
  60. $group_order_goods[$item['mch_id']]['mch_order_info']['address_id'] = $form->address_id;
  61. $group_order_goods[$item['mch_id']]['mch_order_info']['province'] = $form->address_default['province_id'];
  62. $group_order_goods[$item['mch_id']]['mch_order_info']['city'] = $form->address_default['city_id'];
  63. $group_order_goods[$item['mch_id']]['mch_order_info']['area'] = $form->address_default['district_id'];
  64. $group_order_goods[$item['mch_id']]['mch_order_info']['mobile'] = $form->address_default['mobile'];
  65. $group_order_goods[$item['mch_id']]['mch_order_info']['receiver_name'] = $form->address_default['name'];
  66. $group_order_goods[$item['mch_id']]['mch_order_info']['address'] = $form->address_default['detail'];
  67. $region_name = $form->address_default['province'].' '.$form->address_default['city'].' '.$form->address_default['district'].' '.$form->address_default['town'].' '.$form->address_default['detail'];
  68. $group_order_goods[$item['mch_id']]['mch_order_info']['region_name'] = $region_name;
  69. $group_order_goods[$item['mch_id']]['mch_order_info']['remark'] = $form->remark?$form->remark:" ";
  70. $group_order_goods[$item['mch_id']]['mch_order_info']['original_goods_price'] = $item['original_goods_price'];
  71. $group_order_goods[$item['mch_id']]['mch_order_info']['goods_price'] = $item['goods_price'];
  72. $group_order_goods[$item['mch_id']]['mch_order_info']['shipping_money'] = $item['shipping_money'];
  73. $group_order_goods[$item['mch_id']]['mch_order_info']['pay_money'] = $item['goods_price'];
  74. $group_order_goods[$item['mch_id']]['mch_order_info']['marketing_type'] = SudokuEnum::ADDONS_NAME;
  75. $group_order_goods[$item['mch_id']]['mch_order_info']['marketing_id'] = $form->id;
  76. }else{
  77. $group_order_goods[$item['mch_id']]['mch_order_info']['original_goods_price'] += $item['original_goods_price'];
  78. $group_order_goods[$item['mch_id']]['mch_order_info']['goods_price'] += $item['goods_price'];
  79. $group_order_goods[$item['mch_id']]['mch_order_info']['pay_money'] += $item['goods_price'];
  80. }
  81. if (!isset($group_order_goods[$item['mch_id']]['goods'][$item['goods_id']])) {
  82. $group_order_goods[$item['mch_id']]['goods'][$item['goods_id']]['goods_id'] = $item['goods_id'];
  83. $group_order_goods[$item['mch_id']]['goods'][$item['goods_id']]['goods_price'] = 0;
  84. $group_order_goods[$item['mch_id']]['goods'][$item['goods_id']]['num'] = 0;
  85. $group_order_goods[$item['mch_id']]['goods'][$item['goods_id']]['goods_name'] = $item['goods_name'];
  86. $group_order_goods[$item['mch_id']]['goods'][$item['goods_id']]['goods_details'] = [];
  87. }
  88. $group_order_goods[$item['mch_id']]['goods'][$item['goods_id']]['goods_price'] += $item['goods_price'];
  89. $group_order_goods[$item['mch_id']]['goods'][$item['goods_id']]['original_goods_price'] += $item['original_goods_price'];
  90. $group_order_goods[$item['mch_id']]['goods'][$item['goods_id']]['num'] += $item['num'];
  91. $group_order_goods[$item['mch_id']]['goods'][$item['goods_id']]['goods_details'][] = $item;
  92. }
  93. // 写入组别
  94. $form['group_order_goods'] = $group_order_goods;
  95. $form['address_id'] = $form->address_id;
  96. return $form;
  97. }catch(Exception $e){
  98. $this->setError($e->getMessage());
  99. return false;
  100. }
  101. }
  102. /**
  103. * @desc:校验收货地址
  104. * @Author: hua
  105. * @Date: 2021/11/23
  106. * @Time: 10:49
  107. * @Copyright: copyright (c) 2021 广东七件事集团
  108. * @param $action
  109. * @param $data
  110. * @param $user_id
  111. * @throws Exception
  112. */
  113. public function checkAddress($action, $data, $user_id)
  114. {
  115. if ($action == AppEnum::ACTION_CREATE) {
  116. if (empty($data['address_id'])) throw new Exception('收货地址不能为空');
  117. $res = UserAddress::findOne(['id' => $data['address_id'], 'status' => StatusEnum::ENABLED, 'user_id' => $user_id]);
  118. if (empty($res)) throw new Exception('收货地址无效');
  119. }
  120. }
  121. }