services->setting->mall->get($mall_id, 'order.is_score_deduct_status'); if (!$is_score_setting_status) return $item; // 获取配置名称 $score_name = \Yii::$app->services->setting->mall->get($mall_id, 'score.score_name'); // 获取设置抵扣选项 $score_deduct_value_list = \Yii::$app->services->setting->mall->get($mall_id, 'order.score_deduct_value_list'); if ($score_deduct_value_list) $score_deduct_value_list = json_decode($score_deduct_value_list, true); if (!$score_deduct_value_list) return $item; // 获取抵扣比率 $score_setting_ratio = \Yii::$app->services->setting->mall->get($mall_id, 'score.score_deduct_ratio'); $score_deduct_status = \Yii::$app->services->setting->mall->get($mall_id, 'score.score_deduct_status'); if (!$score_deduct_status) $score_setting_ratio = 1; // 当积分抵扣关闭时 积分抵扣比率默认为1 // 判断是否有积分抵扣 $is_score = $form->marketing['deduct']['score']; if ($is_score) return $item; $is_distributor = $form->marketing['deduct']['agent_deduct']; $is_member_price = $form->marketing['deduct']['member_price']; // 判断用户是否是积分抵扣或者经销商抵扣 if (!$is_distributor && !$is_member_price) return $item; if (in_array('distributor', $score_deduct_value_list) && $is_distributor) {// 经销商内购商品抵扣 // 检查是否安装经销商内购插件 if (!MallAddons::isInstall($mall_id, AddonsEnum::ADDONS_NAME_AGENT)) return $item; $member_price = abs($is_distributor['money']); $des_string = 'agent_deduct'; } elseif (in_array('member', $score_deduct_value_list) && $is_member_price) {// 用户折扣抵扣 // 因为用户价前面设置了负号所以此处转为正数 $member_price = abs($is_member_price['money']); $des_string = 'member'; } else { return $item; } // 获取用户总积分 $where[] = ['user_id' => $form['user_id'], 'mall_id' => $mall_id]; $user_score = UserWallet::getOne($where, false, [], false, 'score'); $can_use_score = $user_score->score; // 根据会员折扣扣除对于积分(积分 = 会员价 * 折扣比率) $deduct_score = bcmul($member_price, $score_setting_ratio, 2); // 判断是否订单提交时访问 if ($form['action'] == AppEnum::ACTION_CREATE) { // 订单生成访问 if ($deduct_score > $can_use_score) { throw new \Exception($score_name . '不足无法购买'); } } foreach ($item['goods'] as &$goods) { foreach ($goods['goods_details'] as $k => &$detail) { $detail['marketing']['deduct_score'] = $deduct_score; // 积分扣减详情 $detail['marketing']['deduct_currency'] = json_encode(['offset' => ['score' => $deduct_score, 'score_deduct_ratio' => $score_setting_ratio, 'desc' => $des_string]]); } } $item['mch_order_info']['score'] = $deduct_score; $item['mch_order_info']['score_money'] = $member_price; $form->marketing['deduct']['offset'] = [ 'name' => $score_name . '抵扣', 'money' => -($deduct_score), ]; return $item; } }