user->level; $enable_goods_deduct = 0;// 商品是否参与了渠道分红 //渠道分红,开启了内购-商品抵扣后,不再享受会员价 if (MallAddons::isInstall($mall_id, AddonsEnum::ADDONS_NAME_AGENT)){ $setting = \Yii::$app->services->setting->addons->get($mall_id, AddonsEnum::ADDONS_NAME_AGENT, 'basic'); $agent = Agent::findOne(['user_id'=>$form['user_id'],'status'=>StatusEnum::ENABLED]); if (!empty($agent)&&!empty($setting['is_self_buy']) && !empty($setting['enable_goods_deduct'])) $enable_goods_deduct = 1; } if (empty($extra['user_level_model'])) { $user_level_model = UserLevel::getOne([['level' => $user_level],['mall_id' => $mall_id],['status'=>StatusEnum::ENABLED]], true); if(empty($user_level_model)) return $item; } else { $user_level_model = $extra['user_level_model']; } $discount = $user_level_model['discount'] ?? 10; if (empty($extra['goods_arr'])) { $goods_arr = self::getGoodListArr($group_order_goods); $extra['goods_arr'] = $goods_arr; } else { $goods_arr = $extra['goods_arr']; } if (empty($extra['total_deduct_money'])) { $total_deduct_money = 0; $extra['total_deduct_money'] = $total_deduct_money; } else { $total_deduct_money = $extra['total_deduct_money']; } $total_deduct_goods_price = 0; foreach ($item['goods'] as &$row) { $cha = 0; // 检测商品是否参与了渠道分红 if ($enable_goods_deduct) { $item_setting = AgentCommissionItemSetting::find()->select('item_id,is_participate,is_self_buy_alone,is_self_buy,enable_goods_deduct')->where(['item_id' => $row['goods_id'], 'status' => StatusEnum::ENABLED])->asArray()->one(); if (empty($item_setting) || !empty($item_setting['is_participate'])) continue; //独立设置内购 if(!empty($item_setting['is_self_buy_alone'])){ if (empty($item_setting['is_self_buy']) || empty($item_setting['enable_goods_deduct'])) continue; } } if (isset($goods_arr[$row['goods_id']]) && $goods_arr[$row['goods_id']]['extra']['is_member_price'] == 1) { //单独设置会员价 $member_price_setting = Json::decode($goods_arr[$row['goods_id']]['extra']['member_price_setting']); if(!empty($form['sku'][$row['goods_id']]['goods']['is_attr'])){ //多规格 if (isset($member_price_setting['level' . $user_level])){ $differences_money = 0; // 循环差额 foreach ($row['goods_details'] as &$v) { if (isset($member_price_setting['level' . $user_level][$v['sign_id']])){ $member_price = $member_price_setting['level' . $user_level][$v['sign_id']]; if($v['price']>$member_price){ if($member_price=='')$member_price = 0; $cha = ($v['price'] - $member_price) * $v['num'];//差额 $cha = bcadd($cha, 0, 2); $differences_money = bcadd($differences_money, $cha, 2); $v['goods_price'] = bcsub($v['goods_price'], $cha, 2); $v['marketing']['member_price_deduct'] = $cha; $v['marketing']['pay_money'] = $v['goods_price']; } } } if ($differences_money>0) { $cha = bcadd(0, $differences_money, 2); $total_deduct_money = bcadd($total_deduct_money, $cha, 2); $total_deduct_goods_price = bcadd($total_deduct_goods_price, $cha, 2); } } }else{ //默认规格 if (!empty($member_price_setting[$user_level])){ foreach ($row['goods_details'] as &$v) { if($v['price']>$member_price_setting[$user_level]) { $cha = 0; if(!empty($member_price_setting[$user_level])){ if($member_price_setting[$user_level]=='')$member_price_setting[$user_level] = 0; $cha = ($v['price'] - $member_price_setting[$user_level]) * $v['num'];//差额 } $cha = bcadd(0, $cha, 2); $total_deduct_money = bcadd($total_deduct_money, $cha, 2); $total_deduct_goods_price = bcadd($total_deduct_goods_price, $cha, 2); $v['goods_price'] = bcsub($v['goods_price'], $cha, 2); $v['marketing']['member_price_deduct'] = $cha; $v['marketing']['pay_money'] = $v['goods_price']; } } } } } else { //全局设置会员价 if($goods_arr[$row['goods_id']]['extra']['is_member_price']==0){ foreach ($row['goods_details'] as &$v) { $member_price = bcdiv(bcmul($v['price'], $discount, 2), 10, 2); if($v['price']>$member_price) { $cha = ($v['price'] - $member_price) * $v['num'];//差额 $cha = bcadd(0, $cha, 2); $total_deduct_money = bcadd($total_deduct_money, $cha, 2); $total_deduct_goods_price = bcadd($total_deduct_goods_price, $cha, 2); $v['goods_price'] = bcsub($v['goods_price'], $cha, 2); $v['marketing']['member_price_deduct'] = $cha; $v['marketing']['pay_money'] = $v['goods_price']; } } } } $row['goods_price'] = bcsub($row['goods_price'], $cha, 2) ?? 0; } $total_deduct_money = bcadd(0, $total_deduct_money, 2); $item['mch_order_info']['goods_price'] = bcsub($item['mch_order_info']['goods_price'],$total_deduct_money,2); $form['group_order_goods'] = $group_order_goods; $form['total_pay_money'] = bcsub($form['total_pay_money'],$total_deduct_money,2); $prev_member_price = $form->marketing['deduct']['member_price']['money'] ?? 0; if ($total_deduct_money>0) $form->marketing['deduct']['member_price'] = ['name' => '会员优惠', 'money' => -bcsub($total_deduct_money, $prev_member_price, 2)]; return $item; } catch (Exception $e) { self::setStaticError('会员价计算错误:' . $e->getMessage()); return false; } } /** * @param $group_order_goods * @return array */ public static function getGoodListArr($group_order_goods) { $gid_arr = []; array_map(function ($item) use (&$gid_arr) { array_map(function ($row) use (&$gid_arr) { $gid_arr[] = $row['goods_id']; }, $item['goods']); }, $group_order_goods); if (empty($gid_arr)) return []; $params = [ 'where' => [['id' => $gid_arr]], 'with' => ['extra'], ]; $goods_list = Goods::lists($params); $arr = []; array_map(function ($arg) use (&$arr) { $arr[$arg['id']] = $arg; }, $goods_list); return $arr; } }