basic_conf; if ($this->name == 'score' || $this->name == 'digital') { $config_arr['regional_equal_prize'] = $config_arr['regional_equal_prize_' . $this->name] ?? 0; $config_arr['province_equal_prize'] = $config_arr['province_equal_prize_' . $this->name] ?? 0; $config_arr['city_equal_prize'] = $config_arr['city_equal_prize_' . $this->name] ?? 0; $config_arr['district_equal_prize'] = $config_arr['district_equal_prize_' . $this->name] ?? 0; $config_arr['town_equal_prize'] = $config_arr['town_equal_prize_' . $this->name] ?? 0; $config_arr['community_equal_prize'] = $config_arr['community_equal_prize_' . $this->name] ?? 0; $config_arr['regional_team_prize'] = $config_arr['regional_team_prize_' . $this->name] ?? 0; $config_arr['province_team_prize'] = $config_arr['province_team_prize_' . $this->name] ?? 0; $config_arr['city_team_prize'] = $config_arr['city_team_prize_' . $this->name] ?? 0; $config_arr['district_team_prize'] = $config_arr['district_team_prize_' . $this->name] ?? 0; $config_arr['town_team_prize'] = $config_arr['town_team_prize_' . $this->name] ?? 0; $config_arr['community_team_prize'] = $config_arr['community_team_prize_' . $this->name] ?? 0; } $name = $this->name; $config_arr['is_percent_team'] = $config_arr['is_percent_equal'] = 0;//默认百分比 $config_arr['commission_type'] = $name;//默认佣金 $where = [['item_id' => $this->order_detail['goods_id'], 'item_type' => 'goods', 'commission_type' => $name, 'status' => StatusEnum::ENABLED]]; $select = 'id,mall_id,is_enable,item_id,item_type,commission_type,is_percent_team,is_percent_equal,status'; $with = ['detail' => function ($query) { $query->select('id,mall_id,area_commission_item_setting_id,level,agent_team_prize,agent_equal_prize,status'); }]; $agent_goods_setting = AreaCommissionItemSetting::getOne($where, true, $with, false, $select); if (!empty($agent_goods_setting)) { if ($agent_goods_setting['commission_type'] == $name && $agent_goods_setting['is_enable']) { foreach ($agent_goods_setting['detail'] as $val) { switch ($val['level']) { case AreaEnum::PROVINCE: $config_arr['province_team_prize'] = $val['agent_team_prize']; $config_arr['province_equal_prize'] = $val['agent_equal_prize']; break; case AreaEnum::CITY: $config_arr['city_team_prize'] = $val['agent_team_prize']; $config_arr['city_equal_prize'] = $val['agent_equal_prize']; break; case AreaEnum::DISTRICT: $config_arr['district_team_prize'] = $val['agent_team_prize']; $config_arr['district_equal_prize'] = $val['agent_equal_prize']; break; case AreaEnum::TOWN: // 没有镇级别的情况下 那么镇级别无需奖励 $config_arr['town_team_prize'] = $val['agent_team_prize']; $config_arr['town_equal_prize'] = $val['agent_equal_prize']; break; case AreaEnum::COMMUNITY: $config_arr['community_team_prize'] = $val['agent_team_prize']; $config_arr['community_equal_prize'] = $val['agent_equal_prize']; break; case AreaEnum::REGIONAL: $config_arr['regional_team_prize'] = $val['agent_team_prize']; $config_arr['regional_equal_prize'] = $val['agent_equal_prize']; break; } } $config_arr['is_enable'] = $agent_goods_setting['is_enable']; $config_arr['is_percent_team'] = $agent_goods_setting['is_percent_team']; $config_arr['is_percent_equal'] = $agent_goods_setting['is_percent_equal']; $config_arr['commission_type'] = $agent_goods_setting['commission_type']; } } return $config_arr; } /** * @desc:奖励规则 * @Author: hua * @Date: 2021/10/28 * @Time: 16:08 * @Copyright: copyright (c) 2021 广东七件事集团 * @return array */ public function getRules() { $area_compute_type = 1; if (!empty($this->basic_conf['area_compute_type'])) { $area_compute_type = $this->basic_conf['area_compute_type']; } $multiple = $this->order_detail['num'] ?? 1; $money = $this->order_detail['goods_price']; switch ($area_compute_type) { case 1: //实际支付金额 $money = $this->order_detail['goods_price'] ?? 0; $adjust_money = $this->order_detail['adjust_money']??0; $money = (($money+$adjust_money)/$multiple); break; case 2: //商品售价 $money = $this->order_detail['original_goods_price'] ?? 0; $money = ($money/$multiple); break; case 3: ///商品利润 $goods_price = $this->order_detail['goods_price'] ?? 0; $cost_price = $this->order_detail['cost_price'] ?? 0; $adjust_money = $this->order_detail['adjust_money'] ?? 0; $money = ($goods_price/$multiple) - $cost_price + $adjust_money/$multiple; if($money<0) $money= 0; break; } $extension = ['source_table' => $this->source_table, 'source_table_id' => $this->order_detail['id'], 'from_type' => AddonsEnum::ADDONS_NAME_AREA]; $this->extension = $extension; return ['money' => $money, 'multiple' => $multiple, 'extension' => $extension]; } /** * @desc:获取投入资金队列的数据 * @Author: hua * @Date: 2021/11/18 * @Time: 15:46 * @Copyright: copyright (c) 2021 广东七件事集团 * @param $team_prize_list * @param $equal_prize_list * @return array */ public function getInsertWalletData($team_prize_list, $equal_prize_list) { $level = 0; $levels = array_column($team_prize_list, 'level'); if (!empty($levels)) { $level = $levels[0]; } $extension = $this->extension; $capital_type1 = AreaEnum::TEAM_PRIZE; if ($this->name == 'score') $capital_type1 = UserWalletEnum::AREA_SCORE; $team_reward_arr = $this->packData($capital_type1, $this->basic_conf['compute_type'], $team_prize_list, $extension, $level); $equal_reward_arr = $this->packData(AreaEnum::EQUAL_PRIZE, $this->basic_conf['compute_type'], $equal_prize_list, $extension, $level); return array_merge($team_reward_arr, $equal_reward_arr); } public function packData($capital_type, $compute_type, $prize_list, $extension, $level) { $type_map = AreaEnum::getTypeMap(); $insert_wallet = []; $is_frozen = true; $goods_id = $this->order_detail['goods_id']; $goods = Goods::findOne(['id' => $goods_id]); if (isset($goods)&&$goods['goods_type'] == GoodsTypeEnum::GoodsTypeVirtual) { //虚拟商品,支付后-直接订单完成,所以直接结算 $is_frozen = false; } else { if ($compute_type == AreaEnum::ORDER_PAY) $is_frozen = false; if ($compute_type == AreaEnum::ORDER_FINISH) $is_frozen = true; } $from_type = $extension['from_type'] ?? AddonsEnum::ADDONS_NAME_AREA; foreach ($prize_list as $item) { $user_id = $item['user_id']; if (!empty($deduct_prize_list[$user_id]['deduct_money'])) $item['price'] -= $deduct_prize_list[$user_id]['deduct_money']; $item['price'] = bcmul($item['price'], 1, 2); if ($item['price'] > 0) { $prize_name = $type_map[$capital_type] ?? '未知资金类型'; $prize_name_source = AreaEnum::getLevelMap($level, $this->mall_id); $desc = '用户(' . $user_id . '),获得订单(' . $this->order_detail['order_id'] . ')奖励,奖励类型:' . $prize_name . '[' . $prize_name_source . ']'; if(isset($item['equal_prize_deep']))$desc .= '平' . $item['equal_prize_deep']; $desc .= ',金额:' . $item['price']; // echo $desc.PHP_EOL; $insert_wallet [] = ['mall_id' => $this->mall_id, 'user_id' => $user_id, 'is_frozen' => $is_frozen, 'wallet_type' => $this->name, 'money' => $item['price'], 'desc' => $desc, 'source_table' => $extension['source_table'] ?? '', 'source_table_id' => $extension['source_table_id'] ?? '', 'from_type' => $from_type, 'capital_type' => $capital_type, 'order_no' => $this->order_detail['order_no'], 'contributor_name' => $this->order_detail['goods_name'], 'contributor_id' => $this->user_id, 'contributor_money' => $this->order_detail['goods_price'], 'extra1'=>$item['equal_area_agent']??[], ]; } } return $insert_wallet; } public function computeServiceCharge($order) { $platform_ratio= 0; $is_update = false; // 门店 $store_settings = StoreSettings::getOne([['store_id' => $order['store_id']]]); $basic = \Yii::$app->services->setting->addons->get($order['mall_id'], AddonsEnum::ADDONS_NAME_STORE, 'basic'); $alone_setting = StoreGoodsExtra::find()->where([ 'status' => StatusEnum::ENABLED, 'store_id' => $order['store_id'], 'mall_id' => $order['mall_id'], 'goods_id' => $order['goods_id'] ]) ->asArray() ->one(); $alone_service_fee_setting = json_decode($alone_setting['service_fee_setting'], true); $price = $order['goods_price']; if ($alone_service_fee_setting && $alone_service_fee_setting['is_alone'] == 1) { //商品独立配置 $platform_ratio = $alone_service_fee_setting['service_fee_ratio']; $is_update = true; } else if (isset($store_settings['store_service_fee'])) { //门店独立配置 if (!empty($store_settings['store_service_fee'])) { $platform_ratio = $store_settings['store_service_ratio'] ?? 0; $is_update = true; } $service_fee_settle_type = $store_settings['store_service_fee_settle_type'] ?? 1; } else { //公共配置 if (!empty($basic['service_fee'])) { $platform_ratio = $basic['service_fee_type'] == 1 ? $basic['max_platform_ratio'] : ($basic['platform_ratio'] ?? 0); $is_update = true; } $service_fee_settle_type = $basic['service_fee_settle_type'] ?? 1; } if($service_fee_settle_type == 2){ $price = $order['original_goods_price']; }elseif($service_fee_settle_type == 3){ $price = $order['cost_price']; } return bcdiv($price * $platform_ratio,100,2); } }