data)?$form->data:Json::decode($form->data,true); $mall_id_arr = array_column($order_goods,'mall_id'); //多商户 if (MallAddons::isInstall($mall_id_arr[0], AddonsEnum::ADDONS_NAME_MCH)){ $mch_ids = array_column($order_goods,'mch_id'); $mch_list = Mch::lists(['where'=>[['id' =>$mch_ids]],'select'=>'id,store_name as name,expire_time','index'=>'id'], true); if($mch_list){ $mch_arr = array_column($mch_list,'name','id'); } } $mall_list = Mall::lists(['where'=>[['id' =>$mall_id_arr]],'select'=>'id,name'], true); $mall_arr = array_column($mall_list,'name','id'); // if ($this->checkMarketingType($data) == false) throw new Exception('营销类型有误'); $extra_info = ''; $marketing_id = 0; $marketing_type = ''; $order_source = ''; if(!empty($data['marketing_id'])) $marketing_id = $data['marketing_id']; if(!empty($data['order_source'])) $order_source = $data['order_source']; if(!empty($data['marketing_type'])) $marketing_type = $data['marketing_type']; if(!empty($data['extra_info'])) $extra_info = json_encode($data['extra_info']); $supply_chain = []; // 产品按照商户重新归类组别 foreach ($order_goods as $item) { if(!isset($group_order_goods[$item['mch_id']])){ \Yii::error("goods_id {$item['goods_id']} -> {$item['goods_attr_id']} -> " . var_export($item, true)); $group_order_goods[$item['mch_id']]['mch_order_info']['mch_id'] = $item['mch_id']; if(is_string($item['mch_id']) || $item['mch_id'] == 0){ // 平台 if(empty($mall_arr[$item['mall_id']]))throw new Exception('商城不存在'); if (!empty($form->process_extra_data['supply_chain'][$item['goods_id']])) { // 包含供应链商品 $t_supply_chain_name = $form->process_extra_data['supply_chain'][$item['goods_id']]; if (empty($supply_chain[$t_supply_chain_name])) { $supply_chain[$t_supply_chain_name] = $this->getSupplyMallName($item['mall_id'], $t_supply_chain_name, $mall_arr[$item['mall_id']]); // 获取供应链指定名称 } $group_order_goods[$item['mch_id']]['mch_order_info']['mch_name'] = $supply_chain[$t_supply_chain_name]; $item['mch_id'] = $t_supply_chain_name; } else { $group_order_goods[$item['mch_id']]['mch_order_info']['mch_name'] = $mall_arr[$item['mall_id']]; } }else{ // 查询商户信息 if(!empty($mch_arr[$item['mch_id']])){ if(!empty($mch_list[$item['mch_id']]['expire_time'])&&$mch_list[$item['mch_id']]['expire_time']<=time()){ throw new Exception('商户:'.$mch_arr[$item['mch_id']].'已过期'); } $group_order_goods[$item['mch_id']]['mch_order_info']['mch_name'] = $mch_arr[$item['mch_id']]; }else{ $group_order_goods[$item['mch_id']]['mch_order_info']['mch_name'] = $mall_arr[$item['mall_id']]; } $marketing_id =$item['mch_id']; $marketing_type ='Mch'; } // 主订单信息 $group_order_goods[$item['mch_id']]['mch_order_info']['user_id'] = $item['user_id']; $group_order_goods[$item['mch_id']]['mch_order_info']['mall_id'] = $item['mall_id']; $group_order_goods[$item['mch_id']]['mch_order_info']['address_id'] = 0; $group_order_goods[$item['mch_id']]['mch_order_info']['order_source'] = $order_source; $group_order_goods[$item['mch_id']]['mch_order_info']['remark'] = $data['remark'][$item['mch_id']]??''; $group_order_goods[$item['mch_id']]['mch_order_info']['original_goods_price'] = $item['original_goods_price'] ?? 0; $group_order_goods[$item['mch_id']]['mch_order_info']['goods_price'] = $item['goods_price']; $group_order_goods[$item['mch_id']]['mch_order_info']['pay_money'] = $item['goods_price']; $group_order_goods[$item['mch_id']]['mch_order_info']['marketing_type'] = $data['marketing_type'] ?? ''; $group_order_goods[$item['mch_id']]['mch_order_info']['marketing_id'] = $data['marketing_id'] ?? 0; $group_order_goods[$item['mch_id']]['mch_order_info']['shipping_type'] = $data['shipping_type'] ?? ShippingTypeEnum::LOGISTICS; $group_order_goods[$item['mch_id']]['mch_order_info']['goods_subtype'] = $item['goods_subtype'] ?? 0; }else{ $group_order_goods[$item['mch_id']]['mch_order_info']['original_goods_price'] += $item['original_goods_price'] ?? 0; $group_order_goods[$item['mch_id']]['mch_order_info']['goods_price'] += $item['goods_price']; $group_order_goods[$item['mch_id']]['mch_order_info']['pay_money'] += $item['goods_price']; $group_order_goods[$item['mch_id']]['mch_order_info']['marketing_type'] = $data['marketing_type'] ?? ''; } if (!isset($group_order_goods[$item['mch_id']]['goods'][$item['goods_id']])) { $group_order_goods[$item['mch_id']]['goods'][$item['goods_id']]['goods_id'] = $item['goods_id']; $group_order_goods[$item['mch_id']]['goods'][$item['goods_id']]['goods_price'] = 0; $group_order_goods[$item['mch_id']]['goods'][$item['goods_id']]['num'] = 0; $group_order_goods[$item['mch_id']]['goods'][$item['goods_id']]['goods_name'] = $item['goods_name']; $group_order_goods[$item['mch_id']]['goods'][$item['goods_id']]['goods_details'] = []; $group_order_goods[$item['mch_id']]['goods'][$item['goods_id']]['original_goods_price'] = 0; $group_order_goods[$item['mch_id']]['goods'][$item['goods_id']]['symptom_list'] = json_decode($form['sku'][$item['goods_id']]['goods']['extra']['symptom_list'] ?? '', true) ?: []; } $group_order_goods[$item['mch_id']]['mch_order_info']['marketing_id'] = $marketing_id; $group_order_goods[$item['mch_id']]['mch_order_info']['marketing_type'] = $marketing_type; $group_order_goods[$item['mch_id']]['mch_order_info']['extra_info'] = $extra_info; $group_order_goods[$item['mch_id']]['mch_order_info']['is_virtual'] = $form->is_virtual; $group_order_goods[$item['mch_id']]['goods'][$item['goods_id']]['goods_price'] += $item['goods_price']; $group_order_goods[$item['mch_id']]['goods'][$item['goods_id']]['original_goods_price'] += $item['original_goods_price']; $group_order_goods[$item['mch_id']]['goods'][$item['goods_id']]['num'] += $item['num']; if($order_source === OrderSourceEnum::SOURCE_RESERVE){ // 预约订单单独处理 $group_order_goods[$item['mch_id']]['mch_order_info']['order_source'] = OrderSourceEnum::SOURCE_RESERVE; // dd($form->sku[$item['goods_id']]); $item['unit'] = $form->sku[$item['goods_id']]['goods']['unit']; $info = $form->sku[$item['goods_id']]; $reserve = $info['reserve'] ? ArrayHelper::toArray($info['reserve']) : []; unset($info['reserve'],$info['goods']); $reserve['sku'] = $info; $group_order_goods[$item['mch_id']]['goods'][$item['goods_id']]['reserve'] = $reserve; } $group_order_goods[$item['mch_id']]['goods'][$item['goods_id']]['goods_details'][] = $item; } // 写入组别 $form['group_order_goods'] = $group_order_goods; $form['address_id'] = $data['address_id']; return $form; }catch(Exception $e){ $this->setError($e->getMessage()); return false; } } /** * @desc:校验收货地址 * @Author: hua * @Date: 2021/11/23 * @Time: 10:49 * @Copyright: copyright (c) 2021 广东七件事集团 * @param $action * @param $data * @param $user_id * @throws Exception */ public function checkAddress($action,$data,$user_id){ if($action==AppEnum::ACTION_CREATE&&(empty($data['shipping_type'])||$data['shipping_type']!=ShippingTypeEnum::PICKUP)) { if (empty($data['address_id'])) throw new Exception('收货地址不能为空'); $res = UserAddress::findOne(['id' => $data['address_id'], 'status' => StatusEnum::ENABLED, 'user_id' => $user_id]); if (empty($res)) throw new Exception('收货地址无效'); // $orderConfig = \Yii::$app->services->setting->mall->get($data['mall_id'], 'order'); // if ($orderConfig['is_town'] && !$res['town']) throw new Exception('收货地址缺少镇乡'); } } /** * 检测营销活动类型 * @Author: lun * @DateTime: 2022/1/10 0010 10:26 * @Copyright: copyright (c) 2021 广东七件事集团 * @param $data * @return bool */ public function checkMarketingType($data) { if (!empty($data['marketing_type'])) { $addons_arr = AddonsEnum::getAddonsNameMap(); if (empty($addons_arr[$data['marketing_type']])) return false; } return true; } protected function getSupplyMallName(int $mall_id, string $addons_name, string $default) { $service = "\addons\\$addons_name\common\service\SettingService"; if (!class_exists($service)) $service = "\addons\\$addons_name\common\services\SettingService"; if (!class_exists($service)) throw new Exception("非法操作"); $service = new $service(['mall_id' => $mall_id]); $config = $service->getSetting(); if (empty($config['is_enable_shopping_cart_settle'])) throw new Exception("暂不支持购物车计算"); return !empty($config['shopping_cart_mall_name']) ? $config['shopping_cart_mall_name'] : $default; } }