request->isAjax) { if (Yii::$app->request->isGet) { $configs = []; // 基础设置 $configs['basic'] = Yii::$app->services->setting->addons->get($this->mall_id, HiGoEnum::ADDONS_NAME, 'basic'); $configs['basic']['airdrop_years_config'] = isset($configs['basic']['airdrop_years_config']) ? json_decode($configs['basic']['airdrop_years_config'], true) : []; $configs['recharge'] = Yii::$app->services->setting->addons->get($this->mall_id, HiGoEnum::ADDONS_NAME, 'recharge'); $configs['protocol'] = Yii::$app->services->setting->addons->get($this->mall_id, HiGoEnum::ADDONS_NAME, 'protocol'); $configs['recharge']['price_ladder'] = isset($configs['recharge']['price_ladder']) ? json_decode($configs['recharge']['price_ladder'], true) : []; // $configs['merchant'] = Yii::$app->services->setting->addons->get($this->mall_id, HiGoEnum::ADDONS_NAME, 'merchant'); // $configs['merchant']['goods_market'] = isset($configs['merchant']['goods_market']) ? json_decode($configs['merchant']['goods_market'], true) : []; $configs['marketing'] = Yii::$app->services->setting->addons->get($this->mall_id, HiGoEnum::ADDONS_NAME, 'marketing') ?? []; // unset($configs['marketing']['cash_service_fee']); // unset($configs['marketing']['cash_status']); // unset($configs['marketing']['cash_type']); $configs['cashier'] = Yii::$app->services->setting->addons->get($this->mall_id, HiGoEnum::ADDONS_NAME, 'cashier'); if(!empty($configs['marketing']['active_goods_list']) ){ $configs['marketing']['active_goods_list'] = json_decode($configs['marketing']['active_goods_list'],true); } if(!empty($configs['marketing']['goods_list']) ){ $configs['marketing']['goods_list'] = json_decode($configs['marketing']['goods_list'],true); } $configs['basic']['platform_account_user'] = isset($configs['basic']['platform_account_user']) ? json_decode($configs['basic']['platform_account_user'], true) : []; $configs['basic']['hi_bei_transfer_fee_platform'] = isset($configs['basic']['hi_bei_transfer_fee_platform']) ? json_decode($configs['basic']['hi_bei_transfer_fee_platform'], true) : []; $configs['protocol'] = Yii::$app->services->setting->addons->get($this->mall_id, HiGoEnum::ADDONS_NAME, 'protocol'); $configs['mode'] = Yii::$app->services->setting->addons->get($this->mall_id, HiGoEnum::ADDONS_NAME, 'mode'); $configs['mode']['enable'] = $configs['mode']['enable'] ?? 0; $mode_distribution = $this->getModeDistribution($this->mall_id, isset($configs['mode']['distribution']) ? json_decode($configs['mode']['distribution'], true) : []); $configs['mode']['distribution'] = $mode_distribution['distribution']; $configs['mode']['is_install_distribution'] = $mode_distribution['is_install_distribution']; $mode_agent = $this->getModeAgent($this->mall_id, isset($configs['mode']['agent']) ? json_decode($configs['mode']['agent'], true) : []); $configs['mode']['agent'] = $mode_agent['agent']; $configs['mode']['is_install_agent'] = $mode_agent['is_install_agent']; $mode_area = $this->getModeArea($this->mall_id, isset($configs['mode']['area']) ? json_decode($configs['mode']['area'], true) : []); $configs['mode']['area'] = $mode_area['area']; $configs['mode']['is_install_area'] = $mode_area['is_install_area']; $mode_business_bonus = $this->getModeBusinessBonus($this->mall_id, isset($configs['mode']['businessBonus']) ? json_decode($configs['mode']['businessBonus'], true) : []); $configs['mode']['businessBonus'] = $mode_business_bonus['businessBonus']; $configs['mode']['is_install_business_bonus'] = $mode_business_bonus['is_install_business_bonus']; $default_withdraw_way = WithdrawWayEnum::getDefaultWithDrawWayMap(WithdrawWayEnum::WITHDRAW_TYPE_2); $extension_withdraw_way = GlobalInvoke::exec(GlobalInvoke::INVOKE_GET_WITHDRAW_EXTENSION_WAY, $this->mall_id); $all_withdraw = array_merge($default_withdraw_way, $extension_withdraw_way, WithdrawWay::getExtensionWithdrawWay()); $configs['withdraw'] = Yii::$app->services->setting->addons->get($this->mall_id, HiGoEnum::ADDONS_NAME, 'withdraw'); $configs['withdraw'] = $this->jsonDecodeFields($configs['withdraw'], ['cash_type', 'cash_status', 'cash_service_fee']); $configs['withdraw']['cash_type']['extra'] = $this->handleWithdrawWay($all_withdraw); $configs['basic']['hi_bei_name'] = empty($configs['basic']['hi_bei_name']) ? "嗨呗" : $configs['basic']['hi_bei_name']; // 嗨贝设置,自定义名称未填写默认显示"嗨呗" return $this->success('success', compact('configs')); } else { $post = Yii::$app->request->post(); unset($post['_csrf']); $post['mode']['distribution'] = json_encode($post['mode']['distribution']); $post['mode']['agent'] = json_encode($post['mode']['agent']); $post['mode']['area'] = json_encode($post['mode']['area']); $post['mode']['businessBonus'] = json_encode($post['mode']['businessBonus']); $post['recharge']['price_ladder'] = !empty($post['recharge']['price_ladder']) ? json_encode($post['recharge']['price_ladder']) : json_encode([]); $post['basic']['platform_account_user'] = json_encode($post['basic']['platform_account_user']); $post['withdraw'] = $this->jsonEncodeFields($post['withdraw'], ['cash_status', 'cash_type', 'cash_service_fee']); Yii::$app->services->setting->addons->set($this->mall_id, HiGoEnum::ADDONS_NAME, $post); return $this->success('保存成功'); } } return $this->render('index', []); } protected function handleWithdrawWay($data) { foreach ($data as $k => $item) { if (!is_array($item)) continue; $data[$k] = isset($item['name']) ? $item['name'] : ''; } return $data; } protected function jsonEncodeFields(&$data, $fields) { if (empty($data)) return []; foreach ($fields as $field) { if (!isset($data[$field])) continue; $data[$field] = json_encode($data[$field]); } return $data; } protected function jsonDecodeFields(&$data, $fields) { if (empty($data)) return []; foreach ($fields as $field) { if (!isset($data[$field])) continue; $tmp_data = json_decode($data[$field], true); $data[$field] = $tmp_data; } return $data; } protected function getBasicData() { return [ 'hiBei' => [ 'enable' => 0, 'remaining_part_ratio' => 0, 'type' => 0, 'level_setting' => [] ], 'hiValue' => [ 'enable' => 0, 'remaining_part_ratio' => 0, 'type' => 0, 'level_setting' => [] ] ]; } /** * @Note: 这些方法看上去确实是有点烦躁,这么长,这么多的重复操作, * 不想改了,不想写的太抽象了,本地run起来要紧,再到线上run起来,再有其他币种再写的抽象点,概括点, * 只要去前端页面去看看需要的数据结构, * 相信你肯定会恍然大悟,这个方法is so easy * @Author: qi * @DateTime 2022-11-24 17:07:25 * @param integer $mall_id * @param null|array $basic * @return mixed */ protected function getModeAgent($mall_id, $basic) { $is_install_agent = 0; $agent = $this->getBasicData(); if (MallAddons::isInstall($mall_id, AddonsEnum::ADDONS_NAME_AGENT)) { $is_install_agent = 1; $level = AgentLevel::find()->where(['mall_id' => $mall_id, 'status' => 1]) ->select('id, level, name, mall_id') ->asArray() ->all(); $hi_bei_level_setting = isset($basic['hiBei']['level_setting']) ? $basic['hiBei']['level_setting'] : []; $hi_bei_level_setting && $hi_bei_level_setting = array_column($hi_bei_level_setting, null, 'level'); $hi_value_level_setting = isset($basic['hiValue']['level_setting']) ? $basic['hiValue']['level_setting'] : []; $hi_value_level_setting && $hi_value_level_setting = array_column($hi_value_level_setting, null, 'level'); $hi_bei_level = $level; $hi_value_level = $level; foreach ($hi_bei_level as &$v) { $v['type'] = isset($hi_bei_level_setting[$v['level']]) ? $hi_bei_level_setting[$v['level']]['type'] : 0; $v['agent_equal_prize'] = isset($hi_bei_level_setting[$v['level']]) ? $hi_bei_level_setting[$v['level']]['agent_equal_prize'] : 0; $v['agent_extra_prize'] = isset($hi_bei_level_setting[$v['level']]) ? $hi_bei_level_setting[$v['level']]['agent_extra_prize'] : 0; $v['agent_over_prize'] = isset($hi_bei_level_setting[$v['level']]) ? $hi_bei_level_setting[$v['level']]['agent_over_prize'] : 0; $v['agent_team_prize'] = isset($hi_bei_level_setting[$v['level']]) ? $hi_bei_level_setting[$v['level']]['agent_team_prize'] : 0; } unset($v); foreach ($hi_value_level as &$v) { $v['type'] = isset($hi_value_level_setting[$v['level']]) ? $hi_value_level_setting[$v['level']]['type'] : 0; $v['agent_equal_prize'] = isset($hi_value_level_setting[$v['level']]) ? $hi_value_level_setting[$v['level']]['agent_equal_prize'] : 0; $v['agent_extra_prize'] = isset($hi_value_level_setting[$v['level']]) ? $hi_value_level_setting[$v['level']]['agent_extra_prize'] : 0; $v['agent_over_prize'] = isset($hi_value_level_setting[$v['level']]) ? $hi_value_level_setting[$v['level']]['agent_over_prize'] : 0; $v['agent_team_prize'] = isset($hi_value_level_setting[$v['level']]) ? $hi_value_level_setting[$v['level']]['agent_team_prize'] : 0; } unset($v); $agent['hiBei']['level_setting'] = $hi_bei_level; $agent['hiBei']['enable'] = isset($basic['hiBei']) ? $basic['hiBei']['enable'] : 0; $agent['hiValue']['level_setting'] = $hi_value_level; $agent['hiValue']['enable'] = isset($basic['hiValue']) ? $basic['hiValue']['enable'] : 0; $agent['hiBei']['remaining_part_ratio'] = isset($basic['hiBei']) ? $basic['hiBei']['remaining_part_ratio'] : 0; $agent['hiValue']['remaining_part_ratio'] = isset($basic['hiValue']) ? $basic['hiValue']['remaining_part_ratio'] : 0; } return compact('is_install_agent', 'agent'); } protected function getModeDistribution($mall_id, $basic) { $is_install_distribution = 0; $distribution = $this->getBasicData(); if (MallAddons::isInstall($mall_id, AddonsEnum::ADDONS_NAME_DISTRIBUTION)) { $is_install_distribution = 1; $level = DistributionLevel::find()->where(['mall_id' => $mall_id, 'status' => 1])->select('id, name, mall_id, level') ->asArray()->all(); $level = $level ?? []; $configs = Yii::$app->services->setting->addons->get($this->mall_id, AddonsEnum::ADDONS_NAME_DISTRIBUTION, 'basic'); $configs = $configs ?? []; $level_type = $configs['level'] ?? 0; $level_arr = [0, 1, 2, 3, 4]; $init_level = [[ 'id' => 0, 'level' => 0, 'name' => '默认等级', 'mall_id' => $mall_id ]]; array_walk($init_level, function ($item) use (&$level) { array_unshift($level, $item); }); $hi_bei_level_setting = []; $hi_value_level_setting = []; if($basic['hiBei'] && $basic['hiBei']['level_setting']){ $hi_bei_level_setting = $basic['hiBei'] ? array_column($basic['hiBei']['level_setting'], null, 'level') : []; } if($basic['hiValue'] && $basic['hiValue']['level_setting']){ $hi_value_level_setting = $basic['hiValue'] ? array_column($basic['hiValue']['level_setting'], null, 'level') : []; } $hi_bei_level = $level; $hi_value_level = $level; foreach ($hi_bei_level as &$item) { if (in_array($level_type, $level_arr)) { $item['is_show'] = $level_arr[$level_type]; } else { $item['is_show'] = 0; } $item['first_level'] = isset($hi_bei_level_setting[$item['level']]) ? $hi_bei_level_setting[$item['level']]['first_level'] : 0; $item['second_level'] = isset($hi_bei_level_setting[$item['level']]) ? $hi_bei_level_setting[$item['level']]['second_level'] : 0; $item['third_level'] = isset($hi_bei_level_setting[$item['level']]) ? $hi_bei_level_setting[$item['level']]['third_level'] : 0; $item['type'] = isset($hi_bei_level_setting[$item['level']]) ? $hi_bei_level_setting[$item['level']]['type'] : 0; } unset($item); foreach ($hi_value_level as &$v) { if (in_array($level_type, $level_arr)) { $v['is_show'] = $level_arr[$level_type]; } else { $v['is_show'] = 0; } $v['first_level'] = isset($hi_value_level_setting[$v['level']]) ? $hi_value_level_setting[$v['level']]['first_level'] : 0; $v['second_level'] = isset($hi_value_level_setting[$v['level']]) ? $hi_value_level_setting[$v['level']]['second_level'] : 0; $v['third_level'] = isset($hi_value_level_setting[$v['level']]) ? $hi_value_level_setting[$v['level']]['third_level'] : 0; $v['type'] = isset($hi_value_level_setting[$v['level']]) ? $hi_value_level_setting[$v['level']]['type'] : 0; } unset($v); $distribution['hiBei']['level_setting'] = $hi_bei_level; $distribution['hiBei']['enable'] = $basic['hiBei'] ? $basic['hiBei']['enable'] : 0; $distribution['hiValue']['level_setting'] = $hi_value_level; $distribution['hiValue']['enable'] = $basic['hiValue'] ? $basic['hiValue']['enable'] : 0; $distribution['hiBei']['remaining_part_ratio'] = isset($basic['hiBei']) ? $basic['hiBei']['remaining_part_ratio'] : 0; $distribution['hiValue']['remaining_part_ratio'] = isset($basic['hiValue']) ? $basic['hiValue']['remaining_part_ratio'] : 0; } return compact('is_install_distribution', 'distribution'); } protected function getModeArea($mall_id, $basic) { $is_install_area = 0; $area = $this->getBasicData(); if (MallAddons::isInstall($mall_id, AddonsEnum::ADDONS_NAME_AREA)) { $is_install_area = 1; $basic_level = $this->getAreaBasicLevel(); $regional_arr = $basic_level['regional_arr']; $province_arr = $basic_level['province_arr']; $city_arr = $basic_level['city_arr']; $district_arr = $basic_level['district_arr']; $town_arr = $basic_level['town_arr']; $community_arr = $basic_level['community_arr']; $level_arr = [$regional_arr, $province_arr, $city_arr, $district_arr, $town_arr, $community_arr]; $hi_bei_level = $basic['hiBei'] ?? []; $hi_bei_level = $hi_bei_level['level_setting'] ?? []; if(!empty($hi_bei_level)){ $hi_bei_level = array_column($hi_bei_level, null, 'setting_type'); } $hi_value_level = $basic['hiValue'] ?? []; $hi_value_level = $hi_value_level['level_setting'] ?? []; if(!empty($hi_value_level)){ $hi_value_level = array_column($hi_value_level, null, 'setting_type'); } $area['hiBei']['level_setting'][] = [ 'type' => isset($hi_bei_level['normal']) ? $hi_bei_level['normal']['type'] : 0, 'setting_type' => 'normal', 'title' => '嗨贝配置', 'level' => (isset($hi_bei_level['normal']) && !empty($hi_bei_level['normal'])) ? $hi_bei_level['normal']['level'] : $level_arr ]; $area['hiBei']['level_setting'][] = [ 'type' => isset($hi_bei_level['same_level']) ? $hi_bei_level['same_level']['type'] : 0, 'setting_type' => 'same_level', 'title' => '嗨贝平级奖配置', 'level' => (isset($hi_bei_level['same_level']) && !empty($hi_bei_level['same_level'])) ? $hi_bei_level['same_level']['level'] : $level_arr ]; $area['hiValue']['level_setting'][] = [ 'type' => isset($hi_value_level['normal']) ? $hi_value_level['normal']['type'] : 0, 'setting_type' => 'normal', 'title' => '嗨值配置', 'level' => (isset($hi_value_level['normal']) && !empty($hi_value_level['normal'])) ? $hi_value_level['normal']['level'] : $level_arr ]; $area['hiValue']['level_setting'][] = [ 'type' => isset($hi_value_level['same_level']) ? $hi_value_level['same_level']['type'] : 0, 'setting_type' => 'same_level', 'title' => '嗨值平级奖配置', 'level' => (isset($hi_value_level['same_level']) && !empty($hi_value_level['same_level'])) ? $hi_value_level['same_level']['level'] : $level_arr ]; $area['hiBei']['enable'] = isset($basic['hiBei']) ? $basic['hiBei']['enable'] : 0; $area['hiValue']['enable'] = isset($basic['hiValue']) ? $basic['hiValue']['enable'] : 0; $area['hiBei']['remaining_part_ratio'] = isset($basic['hiBei']) ? $basic['hiBei']['remaining_part_ratio'] : 0; $area['hiValue']['remaining_part_ratio'] = isset($basic['hiValue']) ? $basic['hiValue']['remaining_part_ratio'] : 0; } return compact('is_install_area', 'area'); } protected function getModeBusinessBonus($mall_id, $basic) { $is_install_business_bonus = 0; $businessBonus = $this->getBasicData(); if (MallAddons::isInstall($mall_id, AddonsEnum::ADDONS_NAME_BUSINESS_BONUS)) { $is_install_business_bonus = 1; $level = BusinessBonusLevel::find()->where(['mall_id' => $mall_id, 'status' => 1]) ->select('id, level_name AS name') ->asArray() ->all(); $configs = $configs ?? []; foreach ($level as &$item) { $item['type'] = 0; $item['value'] = 0; } unset($item); $businessBonus['hiBei']['level_setting'] = $level; $businessBonus['hiValue']['level_setting'] = $level; } if ($basic) { $businessBonus = array_merge($businessBonus, $basic); } return compact('is_install_business_bonus', 'businessBonus'); } protected function getAreaBasicLevel() { $province_arr = [ 'level' => 1, 'name' => '省代', 'value' => 0 ]; $city_arr = [ 'level' => 2, 'name' => '市代', 'value' => 0 ]; $district_arr = [ 'level' => 3, 'name' => '区代', 'value' => 0 ]; $town_arr = [ 'level' => 4, 'name' => '镇代', 'value' => 0 ]; $community_arr = [ 'level' => 5, 'name' => '小区代', 'value' => 0 ]; $regional_arr = [ 'level' => 6, 'name' => '大区代', 'value' => 0 ]; return compact('province_arr', 'city_arr', 'district_arr', 'town_arr', 'community_arr', 'regional_arr'); } private function checkModeSetting($mode_setting) { $hi_value_radio_setting = []; $hi_bei_radio_setting = []; if(isset($mode_setting['distribution']) && !empty($mode_setting['distribution'])){ $first_level = []; $second_level = []; $third_level = []; foreach($mode_setting['distribution'] as $key => $dis){ if($dis['enable'] && !$dis['type']){ foreach($dis['level_setting'] as $dis_level){ if(!$dis_level['type']){ $first_level[$key][] = $dis_level['first_level']; $second_level[$key][] = $dis_level['second_level']; $third_level[$key][] = $dis_level['third_level']; } } } } $hi_value_radio_setting[] = $first_level['hiValue'] ? max($first_level['hiValue']) : 0; $hi_value_radio_setting[] = $second_level['hiValue'] ? max($second_level['hiValue']) : 0; $hi_value_radio_setting[] = $third_level['hiValue'] ? max($third_level['hiValue']) : 0; $hi_bei_radio_setting[] = $first_level['hiBei'] ? max($first_level['hiBei']) : 0; $hi_bei_radio_setting[] = $second_level['hiBei'] ? max($second_level['hiBei']) : 0; $hi_bei_radio_setting[] = $third_level['hiBei'] ? max($third_level['hiBei']) : 0; } if(isset($mode_setting['agent']) && !empty($mode_setting['agent'])){ $agent_equal_prize = []; $agent_extra_prize = []; $agent_over_prize = []; $agent_team_prize = []; foreach($mode_setting['agent'] as $key => $agent){ if($agent['enable']){ foreach($agent['level_setting'] as $agent_level){ if(!$agent_level['type']){ $agent_equal_prize[$key][] = $agent_level['agent_equal_prize']; $agent_extra_prize[$key][] = $agent_level['agent_extra_prize']; $agent_over_prize[$key][] = $agent_level['agent_over_prize']; $agent_team_prize[$key][] = $agent_level['agent_team_prize']; } } $radio = $key == 'hiValue' ? $hi_value_radio_setting : $hi_bei_radio_setting; $radio[] = $agent_equal_prize[$key] ? max($agent_equal_prize[$key]) : 0; $radio[] = $agent_extra_prize[$key] ? max($agent_extra_prize[$key]) : 0; $radio[] = $agent_over_prize[$key] ? max($agent_over_prize[$key]) : 0; $radio[] = $agent_team_prize[$key] ? max($agent_team_prize[$key]) : 0; if($key == 'hiValue'){ $hi_value_radio_setting = $radio; }else{ $hi_bei_radio_setting = $radio; } } } } if(isset($mode_setting['area']) && !empty($mode_setting['area'])) { foreach ($mode_setting['area'] as $key => $area) { if ($area['enable'] && !$area['type']) { foreach ($area['level_setting'] as $area_level) { } } } } print_r($hi_bei_radio_setting); print_r($hi_value_radio_setting); exit; } }