request->isAjax) { return $this->render('/setting/index'); } $is_install_distribution = MallAddons::isInstall($this->mall_id, AddonsEnum::ADDONS_NAME_DISTRIBUTION); $is_install_agent = MallAddons::isInstall($this->mall_id, AddonsEnum::ADDONS_NAME_AGENT); $is_install_boss = MallAddons::isInstall($this->mall_id, AddonsEnum::ADDONS_NAME_BOSS); $is_install_area = MallAddons::isInstall($this->mall_id, AddonsEnum::ADDONS_NAME_AREA); if (\Yii::$app->request->isGet) { $web_url = \Yii::$app->services->setting->mall->get($this->mall_id, 'basic.web_url'); if (empty($web_url)) { $h5_domain = 'https://h5.qijianshirjcs.com/'; $mall_sign = ''; } else { $url_info = explode('?', $web_url); $h5_domain = $url_info[0]; $mall_sign = substr($url_info[1], mb_strlen('sign=')); } $basic = \Yii::$app->services->setting->addons->get($this->mall_id, MchEnum::ADDONS_NAME, 'basic'); $cashier = \Yii::$app->services->setting->addons->get($this->mall_id, MchEnum::ADDONS_NAME, 'cashier'); $enter = \Yii::$app->services->setting->addons->get($this->mall_id, MchEnum::ADDONS_NAME, 'enter'); $mode = \Yii::$app->services->setting->addons->get($this->mall_id, MchEnum::ADDONS_NAME, 'mode'); if (!empty($enter['goods_ids'])) { $goods_ids = json_decode($enter['goods_ids'], true); $goods = Goods::find() ->select('id,goods_name,cover_pic') ->where(['mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED, 'id' => $goods_ids]) ->asArray() ->all(); } else { $goods_ids = $goods = []; } if (empty($enter)) { $enter = null; } else { $enter['goods_ids'] = $goods_ids; $enter['goods_list'] = $goods; } if (empty($basic)) { $basic = null; } else { $basic['is_distribution_enable'] = $is_install_distribution; $basic['is_agent_enable'] = $is_install_agent; $basic['is_boss_enable'] = $is_install_boss; $basic['is_area_enable'] = $is_install_area; } /* cashier */ /* ---------- 会员等级相关配置处理 start ------ */ $member_levels = UserLevel::find() ->select('level,name as level_name') ->where(['mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED]) ->asArray() ->all(); if (empty($member_levels)) { $member_levels = []; } if (!empty($cashier['members'])) { $setting_members = json_decode($cashier['members'], true); $mem_levels = array_column($setting_members, 'level'); $mem_level_discount_map = array_column($setting_members, 'discount', 'level'); } else { $mem_levels = []; $mem_level_discount_map = []; } foreach ($member_levels as &$mlevel) { if (!in_array($mlevel['level'], $mem_levels)) { $mlevel['discount'] = 0; } else { $mlevel['discount'] = floatval($mem_level_discount_map[$mlevel['level']] ?? 0); } } // dd($member_levels); /* ---------- 会员等级相关配置处理 end ------ */ /* 模式相关设置 */ /* 分销模式设置 ---- start ------ */ $currency_arr = ['commission' => '佣金', 'score' => '积分']; $mode['distribution_currency'] = $currency_arr; $currency = array_keys($currency_arr); // $addons_currency_arr = GlobalInvoke::exec(GlobalInvoke::INVOKE_COMMISSION_TYPE, $this->mall_id, ['mall_id' => $this->mall_id]); $addons_currency_arr = []; $addons_currency = []; $all_addons_currency = []; foreach ($addons_currency_arr as $v) { $mode['distribution_currency'] = array_merge($mode['distribution_currency'], array_column($v, 'label', 'name')); $temp_currency = array_column($v, 'name'); $currency = array_merge($currency, $temp_currency); $addons_currency = array_merge($addons_currency, $temp_currency); $all_addons_currency = array_merge($all_addons_currency, array_column($v, 'label', 'name')); } $mode['agent_currency'] = $mode['distribution_currency']; $mode['is_distribution_enable'] = 0; if ($is_install_distribution) { $mode['is_distribution_enable'] = 1; $distribution_levels = DistributionLevel::find() ->select('level,name as level_name') ->where(['mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED]) ->asArray() ->all(); $init_data = ['level' => 0, 'level_name' => '默认等级']; if (empty($distribution_levels)) { $distribution_levels = [$init_data]; } else { array_unshift($distribution_levels, $init_data); } if (!empty($mode['Distribution'])) { // $mode_distribution_settings = json_decode($mode['Distribution'], true); // $dst_commission_details = $dst_score_details = []; // foreach ($mode_distribution_settings['commission']['detail'] as $detail) { // $dst_commission_details[$detail['level']] = $detail; // } // foreach ($mode_distribution_settings['score']['detail'] as $detail) { // $dst_score_details[$detail['level']] = $detail; // } // $dst_commission_level_settings = $dst_score_level_settings = []; // foreach ($distribution_levels as &$dlevel) { // if (empty($dst_commission_details[$dlevel['level']])) { // $arr = [ // 'level' => $dlevel['level'], // 'level_name' => $dlevel['level_name'], // 'first_prize' => 0, // 'second_prize' => 0, // 'third_prize' => 0 // ]; // $dst_commission_level_settings[] = $arr; // } else { // $dst_commission_details[$dlevel['level']]['level_name'] = $dlevel['level_name']; // $dst_commission_level_settings[] = $dst_commission_details[$dlevel['level']]; // } // if (empty($dst_score_details[$dlevel['level']])) { // $arr = [ // 'level' => $dlevel['level'], // 'level_name' => $dlevel['level_name'], // 'first_prize' => 0, // 'second_prize' => 0, // 'third_prize' => 0 // ]; // $dst_score_level_settings[] = $arr; // } else { // $dst_score_level_settings[] = $dst_score_details[$dlevel['level']]; // } // } // if (!empty($dst_commission_level_settings)) { // $mode_distribution_settings['commission']['detail'] = $dst_commission_level_settings; // } // if (!empty($mode_distribution_settings)) { // $mode_distribution_settings['score']['detail'] = $dst_score_level_settings; // } // $mode['Distribution'] = $mode_distribution_settings; // $mode['Distribution'] = $this->getAddonsData($mode[AddonsEnum::ADDONS_NAME_DISTRIBUTION] ?? '', $distribution_levels, $currency, AddonsEnum::ADDONS_NAME_DISTRIBUTION, 1, [], ['is_enable' => 0, 'is_percent' => 0]); } else { // $mode_distribution_settings = []; // $mode_distribution_settings['commission'] = ['is_enable' => 0, 'is_percent' => 0]; // $mode_distribution_settings['score'] = ['is_enable' => 0, 'is_percent' => 0]; // foreach ($distribution_levels as $item) { // $mode_distribution_settings['commission']['detail'][] = [ // "first_prize" => 0, // "second_prize" => 0, // "third_prize" => 0, // "level" => $item['level'], // "level_name" => $item['level_name'], // ]; // $mode_distribution_settings['score']['detail'][] = [ // "first_prize" => 0, // "second_prize" => 0, // "third_prize" => 0, // "level" => $item['level'], // "level_name" => $item['level_name'], // ]; // } // $mode['Distribution'] = $mode_distribution_settings; } $mode['Distribution'] = $this->getAddonsData($mode[AddonsEnum::ADDONS_NAME_DISTRIBUTION] ?? '', $distribution_levels, $currency, AddonsEnum::ADDONS_NAME_DISTRIBUTION, 1, [], ['is_enable' => 0, 'is_percent' => 0]); } else { } /* 分销模式设置 ---- end ------ */ /* 经销模式设置 ---- start ------ */ $mode['is_agent_enable'] = 0; if ($is_install_agent) { $mode['is_agent_enable'] = 1; $agent_levels = AgentLevel::find() ->select('level,name as level_name') ->where(['mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED]) ->asArray() ->all(); if (empty($agent_levels)) { $agent_levels = []; } if (!empty($mode['Agent'])) { // $mode_agent_settings = json_decode($mode['Agent'], true); // $ag_commission_details = $ag_score_details = []; // if (!empty($mode_agent_settings['commission']['detail'])) { // foreach ($mode_agent_settings['commission']['detail'] as $detail) { // $ag_commission_details[$detail['level']] = $detail; // } // } // if (!empty($mode_agent_settings['score']['detail'])) { // foreach ($mode_agent_settings['score']['detail'] as $detail) { // $ag_score_details[$detail['level']] = $detail; // } // } // $ag_commission_level_settings = $ag_score_level_settings = []; // foreach ($agent_levels as &$alevel) { // if (empty($ag_commission_details[$alevel['level']])) { // $arr = [ // 'level' => $alevel['level'], // 'level_name' => $alevel['level_name'], // 'agent_team_prize' => 0, // 'agent_equal_prize' => 0, // 'agent_over_prize' => 0, // 'agent_extra_prize' => 0, // ]; // $ag_commission_level_settings[] = $arr; // } else { // $ag_commission_details[$alevel['level']]['level_name'] = $alevel['level_name']; // $ag_commission_level_settings[] = $ag_commission_details[$alevel['level']]; // } // if (empty($ag_score_details[$alevel['level']])) { // $arr = [ // 'level' => $alevel['level'], // 'level_name' => $alevel['level_name'], // 'agent_team_prize' => 0, // 'agent_equal_prize' => 0, // 'agent_over_prize' => 0, // 'agent_extra_prize' => 0, // ]; // $ag_score_level_settings[] = $arr; // } else { // $ag_score_level_settings[] = $ag_score_details[$alevel['level']]; // } // } // if (!empty($ag_commission_level_settings)) { // $mode_agent_settings['commission']['detail'] = $ag_commission_level_settings; // } // if (!empty($mode_agent_settings)) { // $mode_agent_settings['score']['detail'] = $ag_score_level_settings; // } // $mode['Agent'] = $mode_agent_settings; } else { // $mode_agent_settings = []; // $mode_agent_settings['commission'] = [ // "is_enable" => 1, // "is_percent_equal" => 0, // "is_percent_extra" => 0, // "is_percent_over" => 0, // "is_percent_team" => 0, // ]; // $mode_agent_settings['score'] = [ // "is_enable" => 1, // "is_percent_equal" => 0, // "is_percent_extra" => 0, // "is_percent_over" => 0, // "is_percent_team" => 0, // ]; // foreach ($agent_levels as $item) { // $mode_agent_settings['commission']['detail'][] = [ // "agent_equal_prize" => 0, // "agent_extra_prize" => 0, // "agent_over_prize" => 0, // "agent_team_prize" => 0, // "level" => $item['level'], // "level_name" => $item['level_name'], // ]; // $mode_agent_settings['score']['detail'][] = [ // "agent_equal_prize" => 0, // "agent_extra_prize" => 0, // "agent_over_prize" => 0, // "agent_team_prize" => 0, // "level" => $item['level'], // "level_name" => $item['level_name'], // ]; // } // $mode['Agent'] = $mode_agent_settings; } $mode['Agent'] = $this->getAddonsData($mode[AddonsEnum::ADDONS_NAME_AGENT] ?? '', $agent_levels, $currency, AddonsEnum::ADDONS_NAME_AGENT, 1, [], ['remaining_ratio' => 0, 'is_enable' => 0, 'is_percent_over' => 0, 'is_percent_equal' => 0, 'is_percent_team' => 0, 'is_percent_extra' => 0]); } else { } /* 经销模式设置 ---- end ------ */ /* 股东分红模式设置 ---- start ------ */ $area_currency_arr = ['detail' => '佣金']; $mode['area_currency'] = array_merge($area_currency_arr, $all_addons_currency); $area_currency = array_keys($area_currency_arr); $area_currency = array_merge($area_currency, $addons_currency); if ($is_install_area) { $mode['is_area_enable'] = 1; $area_levels = [ 6 => ['level' => 6, 'level_name' => '大区代'], 1 => ['level' => 1, 'level_name' => '省代'], 2 => ['level' => 2, 'level_name' => '市代'], 3 => ['level' => 3, 'level_name' => '区代'], 4 => ['level' => 4, 'level_name' => '镇代'], 5 => ['level' => 5, 'level_name' => '小区代'] ]; if (!empty($mode['Area'])) { // $mode_area_settings = json_decode($mode['Area'], true); // $area_details = []; // foreach ($mode_area_settings['detail'] as $detail) { // $area_details[$detail['level']] = $detail; // } // $area_level_settings = []; // foreach ($area_levels as $arlevel) { // if (empty($area_details[$arlevel['level']])) { // $arr = [ // 'level' => $arlevel['level'], // 'level_name' => $arlevel['level_name'], // 'prize' => 0, // 'equal_prize' => 0, // ]; // $area_level_settings[] = $arr; // } else { // $area_details[$arlevel['level']]['level_name'] = $arlevel['level_name']; // $area_level_settings[] = $area_details[$arlevel['level']]; // } // } // if (!empty($area_level_settings)) { // $mode_area_settings['detail'] = $area_level_settings; // } // $mode['Area'] = $mode_area_settings; } else { // $area_level_settings = []; // foreach ($area_levels as $arlevel) { // $arr = [ // 'level' => $arlevel['level'], // 'level_name' => $arlevel['level_name'], // 'prize' => 0, // 'equal_prize' => 0, // ]; // $area_level_settings[] = $arr; // } // $mode['Area'] = [ // 'is_enable' => 0, // 'is_extra' => 0, // 'detail' => $area_level_settings, // ]; } $mode['Area'] = $this->getAddonsData($mode[AddonsEnum::ADDONS_NAME_AREA] ?? '', $area_levels, $area_currency, AddonsEnum::ADDONS_NAME_AREA, 0, ['remaining_ratio']); } else { $mode['is_area_enable'] = 0; $mode['Area'] = []; } $boss_currency_arr = ['commission' => '佣金', 'digital' => '数字币']; $mode['boss_currency'] = array_merge($boss_currency_arr, $all_addons_currency); $boss_currency = array_keys($boss_currency_arr); $boss_currency = array_merge($boss_currency, $addons_currency); if ($is_install_boss) { $mode['is_boss_enable'] = 1; $boss_levels = AddonsBossLevel::find() ->select('level,name as level_name') ->where(['mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED]) ->orderBy('level asc') ->asArray() ->all() ?: []; $mode['Boss'] = $this->getAddonsData($mode[AddonsEnum::ADDONS_NAME_BOSS] ?? '', $boss_levels, $boss_currency, AddonsEnum::ADDONS_NAME_BOSS, 1); } else { $mode['is_boss_enable'] = 0; $mode['Boss'] = []; } //货款设置 $basic['payment_settle_info'] = json_decode($basic['payment_settle_info'],true) ?? []; $basic['payment_settle'] = array_column($basic['payment_settle_info'],'type'); $payment_settle_info = [ ['type' => 'settle_judge_yes','value' => 0], ['type' => 'settle_judge_no','value' => 0] ]; if(!empty($payment_settle_info) && !empty($basic['payment_settle_info'])){ foreach($payment_settle_info as &$info){ foreach($basic['payment_settle_info'] as $item){ if($item['type'] == $info['type']){ $info['value'] = $item['value']; } } } } $basic['payment_settle_info'] = $payment_settle_info; $settings = [ 'basic' => $basic, 'cashier' => $cashier, 'enter' => $enter, 'mode' => $mode, ]; $group = \Yii::$app->request->get('group'); if (!empty($group)) { $settings = $settings[$group] ?? []; } $settings['h5_domain'] = $h5_domain; $settings['mall_sign'] = $mall_sign; $settings['basic']['o2o_url'] = 'plugins/Mch/store/storeindex'; return $this->success('success', $settings); } else { $post = \Yii::$app->request->post(); // dd($post); $group = $post['group'] ?? ''; unset($post['_csrf'], $post['group']); if (empty($group)) { return $this->error('参数错误'); } $rules = [ 'basic' => [ [['o2o_url', 'goods_auth', 'service_fee', 'settle_type', 'platform_ratio', 'risk_management', 'risk_management_ratio', 'settle_scene', 'store_distribution_status', 'store_agent_status', 'store_area_status', 'store_boss_status'], 'required'], [['o2o_url'], 'string', 'max' => 255], [['goods_auth', 'settle_type', 'risk_management', 'settle_scene', 'store_distribution_status', 'store_agent_status', 'store_area_status', 'store_boss_status'], 'integer'], [['service_fee', 'platform_ratio', 'risk_management_ratio'], 'number', 'min' => 0, 'max' => 100, 'message' => '比例取值在 0 ~ 100 之间'], [['payment_settle_info','payment_settle','balance_cash_service_fee'],'safe'], ], 'cashier' => [ [['service_fee_ratio', 'member_status', 'members', 'is_distribution', 'distribution_settingRecruit s', 'is_agent', 'agent_settings'], 'required'], [['member_status', 'is_distribution', 'is_agent'], 'integer'], [['service_fee_ratio'], 'number', 'min' => 0, 'max' => 100, 'message' => '比例取值在 0 ~ 100 之间'], ], 'enter' => [ [[ 'is_enable', 'time_status', 'expired_days', 'store_audit', 'upload_license_image', 'mode', // 'recruit_title', 'recruit_content', // 'recruit_btn_text', 'dow_center_agreement', 'goods_ids' ], 'required'], [['is_enable', 'time_status', 'expired_days', 'store_audit', 'upload_license_image', 'mode'], 'integer'], [['recruit_title', 'recruit_content', 'recruit_btn_text', 'dow_center_agreement'], 'string'], [['goods_ids'], 'safe'], ], 'mode' => [ [['is_enable_mode'], 'required'], [['is_enable_mode', 'enable_agent_goods_deduct'], 'integer'], [['Distribution', 'Agent', 'Area', 'Boss'], 'safe'], ], ]; $res = \Yii::$app->services->validate->validate($post[$group], $rules[$group]); if ($res === false) return $this->error(\Yii::$app->services->validate->getErrorMessage()); if ('basic' == $group) { $post[$group]['o2o_url'] = trim($post[$group]['o2o_url']); $post[$group]['o2o_url'] = trim($post[$group]['o2o_url']); if (!empty($post[$group]['payment_settle'])) { foreach($post[$group]['payment_settle_info'] as $key => $item){ if(!in_array($item['type'],$post[$group]['payment_settle'])){ unset($post[$group]['payment_settle_info'][$key]); } } }else{ $post[$group]['payment_settle_info'] = []; } unset($post[$group]['payment_settle']); } elseif ('enter' == $group) { if (empty($post[$group]['goods_ids'])) { $post[$group]['goods_ids'] = ''; } else { $post[$group]['goods_ids'] = json_encode($post[$group]['goods_ids']); } } // dd($post); \Yii::$app->services->setting->addons->set($this->mall_id, MchEnum::ADDONS_NAME, $post); return $this->success('保存成功'); } } /** * @Description: 处理插件模式数据 * @Author: qi * @DateTime 2022-11-10 09:59:45 * @param string $init_data * @param array $level_data * @param array $currencys * @param string $addons_name * @param integer $level * @param array $append_fields * @param array $base_fields * @return array */ protected function getAddonsData($init_data, $level_data, $currencys, $addons_name, $level = 1, $append_fields = [], $base_fields = []) { $settings = []; $container_arr = []; if (!empty($init_data)) { // 已存储的数据 $settings = json_decode($init_data, true); if($currencys){ foreach ($currencys as $currency) { if (!isset($settings[$currency])) continue; $currency_detail = $level == 1 ? $settings[$currency]['detail'] : $settings[$currency]; if(!$currency_detail) continue; foreach ($currency_detail as $detail) { // 币种对应的等级数据 if (!isset($detail['level'])) { continue; } $container_arr[$currency . '_' . $detail['level']] = $detail; } } } } else { foreach ($currencys as $currency) { $settings[$currency]['is_enable'] = 0; } } $method_name = 'get' . $addons_name . 'InitData'; foreach ($currencys as $item) { $level_settings = []; // 不存在该等级数据就初始化,存在该等级则更新等级名称 foreach ($level_data as $dlevel) { if (!isset($container_arr[$item . '_' . $dlevel['level']])) { $arr = [ 'level' => $dlevel['level'], 'level_name' => $dlevel['level_name'], ]; $arr = array_merge($arr, $this->$method_name()); $level_settings[] = $arr; } else { // 更新对应等级名称 $container_arr[$item . '_' . $dlevel['level']]['level_name'] = $dlevel['level_name']; $level_settings[] = $container_arr[$item . '_' . $dlevel['level']]; } } if (!empty($level_settings)) { if (!isset($settings[$item])) { $settings[$item] = $base_fields; } if ($level == 1) { $settings[$item]['detail'] = $level_settings; } else { $settings[$item] = $level_settings; } } } foreach ($currencys as $v) { foreach ($append_fields as $field) { if (isset($settings[$v . '_' . $field])) continue; $settings[$v . '_' . $field] = 0; } } unset($container_arr); return $settings; } protected function getDistributionInitData() { return [ 'first_prize' => 0, 'second_prize' => 0, 'third_prize' => 0, 'is_percent' => 0, 'remaining_ratio' => 0 ]; } protected function getAgentInitData() { return [ 'agent_team_prize' => 0, 'agent_equal_prize' => 0, 'agent_over_prize' => 0, 'agent_extra_prize' => 0, ]; } protected function getAreaInitData() { return [ 'prize' => 0, 'equal_prize' => 0, ]; } protected function getBossInitData() { return [ 'prize' => 0, 'is_extra' => 0, 'extra_prize' => 0 ]; } }