| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- <?php
- namespace addons\UpgradeGift\common\logic\order\purchase;
- use common\enums\AppEnum;
- use common\enums\GoodsTypeEnum;
- use common\enums\StatusEnum;
- use common\helpers\ArrayHelper;
- use common\helpers\BcHelper;
- use common\models\goods\GoodsAttr;
- use common\models\order\OrderDetail;
- use common\models\user\User;
- use common\models\user\UserSignAgreement;
- use Yii;
- use yii\helpers\Json;
- use Exception;
- // 购物车付款订单处理
- class CartPurchase extends BasePurchase {
- /**
- * 执行
- * @Author bing
- * @DateTime 2021-09-23 09:46:41
- * @copyright: Copyright (c) 2020 广东七件事集团
- * @param $form
- * @return
- */
- public function execute($form){
- $form->data = $data = is_array($form->data)?$form->data:Json::decode($form->data,true);
- $attr_ids = $data['attr_ids'];
- $redis = Yii::$app->redis;
- $result = $redis->hmget('cart_'.$form->user_id,...$attr_ids);
- $user = User::getOne([['id'=>$form->user_id,'mall_id'=>$form->mall_id]]);
- if(empty($user)) throw new Exception('下单用户不存在');
- $carts = array_map(function ($val){
- return $val?json_decode($val,true):[];
- },$result);
- $attr_id_arr = array_column($carts,'attr_id');
- if(empty($attr_id_arr)) throw new Exception('购物车为空');
- $num_arr = array_column($carts,'num','attr_id');
- $params['where'] = [['=','status',StatusEnum::ENABLED],['id'=>$attr_id_arr]];
- $params['with'] = ['goods','goods.extra'];
- $sku_arr = GoodsAttr::lists($params,true);
- $goods_type = [];
- foreach ($sku_arr as $sku){
- if(empty($sku['goods']['is_on_sale'])) throw new Exception('商品' . $sku['goods']['goods_name'] . '已下架! ');
- if(!in_array($sku['goods']['goods_type'],$goods_type)) $goods_type[] =$sku['goods']['goods_type'];
- }
- if(count($goods_type)>1) throw new Exception('不同类型的商品不能一起下单');
- if(!empty($goods_type)&&in_array($goods_type[0],[GoodsTypeEnum::GoodsTypePhysical])) {
- $data['mall_id'] = $form->mall_id;
- $this->checkAddress($form['action'],$data,$form->user_id);
- $form['is_address'] = 1;
- }
- $form['is_virtual'] = 0;
- if(!empty($goods_type)&&in_array($goods_type[0],[GoodsTypeEnum::GoodsTypeVirtual])) {
- $form['is_virtual'] = 1;
- }
- $tmp_order_goods = [];
- foreach ($sku_arr as $sku){
- if(empty($sku) || empty($sku['goods'])) throw new Exception('该下单的产品不存在或者已经删除');
- if(empty($num_arr[$sku['id']])) throw new Exception('请设置正确的下单数量');
- $buy_num = $num_arr[$sku['id']];
- if ($buy_num > $sku['stock']) throw new Exception('商品' . $sku['goods']['goods_name'] . '库存不足! ');
- $mch_id = $sku['goods']['mch_id'];
- // if ($form->action == AppEnum::ACTION_PREVIEW) {
- // 记录所属供应链
- if (empty($form->process_extra_data['supply_chain'][$sku['goods_id']])) {
- $form->process_extra_data['supply_chain'][$sku['goods_id']] = $sku['goods']['goods_source'];
- }
- if (!empty($sku['goods']['goods_source'])) $mch_id = $sku['goods']['goods_source'];
- // }
- $order_goods = new OrderDetail();
- $order_goods = $order_goods->loadDefaultValues();
- $order_goods->goods_id = $sku['goods_id'];
- $order_goods->goods_name = $sku['goods']['goods_name'];
- $order_goods->goods_attr_id = $sku['id'];
- $order_goods->sign_id = $sku['sign_id'];
- $order_goods->goods_attr_name = $sku['name'];
- $order_goods->num = $buy_num;
- $order_goods->cost_price = $sku['cost_price'];
- $order_goods->price = $sku['price'];
- $order_goods->goods_price = BcHelper::mul($order_goods->num, $order_goods->price);
- $order_goods->original_goods_price = $order_goods->goods_price;
- $order_goods->pic_url = !empty($sku['pic_url']) ? $sku['pic_url'] : $sku['goods']['cover_pic'];
- $order_goods->user_id = $form->user_id;
- $order_goods->mch_id = $mch_id;
- $order_goods->mall_id = $form->mall_id;
- $order_goods->is_virtual = $form->is_virtual;
- // 默认数据带下单数量方便计算
- $goods = $sku['goods'];
- $goods['number'] = $buy_num;
- $form->order_goods[] = $tmp_order_goods =ArrayHelper::toArray($order_goods);
- $form->sku[$sku['goods_id']] = $sku;
- $form->user = $user;
-
- }
- if (!empty($form->process_extra_data['supply_chain'])) {
- $t_supply_chain = array_unique(array_values($form->process_extra_data['supply_chain']));
- if (count($t_supply_chain) > 2) throw new Exception("单次只能选择一个供应链的商品");
- }
- // 签署升级协判断 0不需要签署,1需要签署
- $is_sign_agreement = UserSignAgreement::checkIsNeedSign($user['level'], array_column($tmp_order_goods, 'goods_id'), $form->mall_id, $form->user_id);
- $form->is_sign_agreement = $is_sign_agreement;
- return $form;
- }
- /**
- * 获取下单类型
- * @Author bing
- * @DateTime 2021-09-23 09:48:45
- * @copyright: Copyright (c) 2020 广东七件事集团
- * @return string
- */
- public static function getType(): string{
- return 'cart';
- }
- }
|