| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480 |
- <?php
- namespace addons\DoubleCopy\api\modules\v1\controllers;
- use addons\DoubleCopy\common\enums\DoubleCopyEnum;
- use addons\DoubleCopy\common\models\DoubleCopyCommission;
- use addons\DoubleCopy\common\models\DoubleCopyLevel;
- use addons\DoubleCopy\common\models\DoubleCopyLevelSetting;
- use addons\DoubleCopy\common\models\DoubleCopyUser;
- use common\enums\StatusEnum;
- use common\helpers\ArrayHelper;
- use common\models\common\CapitalLog;
- use common\models\mall\MallAddons;
- use common\models\statistics\UserTeamStatistics;
- use common\models\user\User;
- use common\models\user\UserPartitionRelationship;
- use Yii;
- use api\controllers\OnAuthController;
- use common\enums\AddonsEnum;
- use common\models\common\Addons;
- use common\models\goods\Goods;
- use yii\helpers\Json;
- /**
- * 默认控制器
- *
- * Class DefaultController
- * @package addons\DoubleCopy\api\modules\v1\controllers
- */
- class DefaultController extends OnAuthController
- {
- public $modelClass = '';
- /**
- * 不用进行登录验证的方法
- *
- * 例如: ['index', 'update', 'create', 'view', 'delete']
- * 默认全部需要验证
- *
- * @var array
- */
- protected $authOptional = ['index','upgrade-goods-list','get-user'];
- /**
- * 首页
- *
- * @return string
- */
- public function actionIndex()
- {
- return 'Hello world';
- }
- /**
- * 链动用户信息
- * @Author: lun
- * @DateTime: 2022/5/16 0016 16:48
- * @Copyright: copyright (c) 2021 广东七件事集团
- * @return mixed|void
- */
- public function actionInfo()
- {
- if (Yii::$app->request->isPost) {
- $data['user_id'] = $this->user_id;
- $data['nickname'] = $this->user->nickname ?? '';
- $data['avatar_url'] = $this->user->avatar_url ?? '';
- $addons = Addons::findOne(['name' => AddonsEnum::ADDONS_NAME_DOUBLE_COPY]);
- $addons_title = $addons ? $addons->title : '二二复制';
- $data['addons_title'] = $addons_title;
- // 查询用户信息
- $select = 'user_id,level,commission,frozen_commission,frozen_fund,is_thaw,thaw_percent';
- $user = DoubleCopyUser::find()->select($select)->where(['user_id' => $this->user_id])->asArray()->one();
- if (empty($user)) return $this->error('您并无参与该应用活动', compact('addons_title'));
- // 获取为结算佣金
- CapitalLog::$capitalType = 'commission_frozen';
- $frozen_commission = CapitalLog::find()->where(['user_id' => $this->user_id, 'from_type' => DoubleCopyEnum::ADDONS_NAME, 'status' => StatusEnum::DISABLED])->sum("change_num");
- if (MallAddons::isInstall($this->mall_id, AddonsEnum::ADDONS_NAME_DOUBLE_COPY_COMMITMENT_AWARD)) {
- $frozen_commission = CapitalLog::find()->where([
- 'user_id' => $this->user_id,
- 'from_type' => [
- 'or',
- DoubleCopyEnum::ADDONS_NAME,
- AddonsEnum::ADDONS_NAME_DOUBLE_COPY_COMMITMENT_AWARD
- ],
- 'status' => StatusEnum::DISABLED
- ])->sum("change_num");
- }
- // 头部数据
- $data['level'] = $user['level'];// 用户等级
- $data['commission'] = $user['commission'];// 已结算佣金
- $data['frozen_commission'] = $frozen_commission ?: 0;// 未结算佣金
- $data['frozen_fund'] = $user['frozen_fund'];// 冻结基金
- $data['is_thaw'] = $user['is_thaw'];// 是否已达标[0:否,1:是]
- $data['is_show_target'] = $user['level'] == DoubleCopyEnum::LEVEL_AGENT ? 0 : 1;// 是否显示已达标[0:否,1:是]
- // 获取等级名称
- $level_arr = DoubleCopyLevel::find()->where(['mall_id' => $this->mall_id,'status' => StatusEnum::ENABLED])->indexBy('level')->asArray()->all();
- $data['level_name'] = $level_arr[$user['level']]['name'] ?: '默认等级';// 等级名称
- $data['open_ladder'] = $level_arr[$user['level']]['open_ladder'] ?? 0;
- // 获取资金分类
- $capital_arr = DoubleCopyEnum::getApiCapitalMap($this->mall_id);
- //需要安装二二复制贡献补贴奖插件
- if (MallAddons::isInstall($this->mall_id, AddonsEnum::ADDONS_NAME_DOUBLE_COPY_COMMITMENT_AWARD)) {
- $is_enable = Yii::$app->services->setting->addons->get($this->mall_id, AddonsEnum::ADDONS_NAME_DOUBLE_COPY_COMMITMENT_AWARD, 'basic.is_enable');
- if (!empty($is_enable)) {
- $capital_arr['capital_type'][] = [
- 'name' => 'contribution_price',
- 'title' => '贡献补贴奖',
- ];
- }
- }
- $data['capital_type'] = $capital_arr['capital_type'];
- $data['freeze_fund_name'] = $capital_arr['freeze_fund_name'] ?? '冻结基金';
- $agent_name = $level_arr[DoubleCopyEnum::LEVEL_AGENT]['name'];// 代理等级名称
- $boss_name = $level_arr[DoubleCopyEnum::LEVEL_BOSS]['name'];// 老板等级名称
- // 解冻条件
- $checked_condition_values = Json::decode($level_arr[DoubleCopyEnum::LEVEL_BOSS]['checked_condition_values'], true);
- $help_num = $checked_condition_values[0]['value']['val0'] ?? 0;// 缺多少个升级
- $help_num = intval($help_num);
- $level = DoubleCopyLevelSetting::find()->select("freeze_fund_prize,freeze_fund_num,is_thaw,first_level,push_num,second_level")->where(['mall_id' => $this->mall_id, 'level' => DoubleCopyEnum::LEVEL_BOSS, 'status' => StatusEnum::ENABLED])->asArray()->one();
- $text = "团队收益冻结".floatval($level['freeze_fund_prize'])."%,助力升级{$help_num}个{$agent_name}成为{$boss_name}并且团队{$agent_name}达到{$level['freeze_fund_num']}个";
- $user_level = DoubleCopyLevelSetting::find()->select("freeze_fund_prize,freeze_fund_num,is_thaw,first_level,push_num,second_level")->where(['mall_id' => $this->mall_id, 'level' => $user['level'], 'status' => StatusEnum::ENABLED])->asArray()->one();
- // 检查达标数据
- $title = '';
- $thaw_num = $help_count = 0;
- $extra = [
- 'is_thaw' => false,
- 'first_num' => false,
- 'second_num' => false,
- 'count' => 0,
- 'title' => '',
- 'text' => '1号,2号晋升大于等于'.$level_arr[$user_level['first_level']]['name'].',并且直接推荐了'.$user_level['push_num'].'个大于等于'.$level_arr[$user_level['second_level']]['name'].'即可解冻全部',
- ];
- if ($user['level'] > DoubleCopyEnum::LEVEL_AGENT) {
- $thaw_num = DoubleCopyLevelSetting::find()->select('freeze_fund_num')->where(['mall_id' => $this->mall_id, 'level' => $user['level'], 'status' => StatusEnum::ENABLED])->scalar();
- if ($thaw_num) {
- $thaw_data = DoubleCopyUser::getForzenUser($this->user_id, $thaw_num);
- if ($thaw_data['has_data']) {
- $title = '差'.$thaw_data['boss_num'].'个'.$boss_name.'差'.$thaw_data['agent_num'].'个'.$agent_name.'解冻';
- $help_count = $thaw_data['help_count'];
- } else {
- $title = '差'.$help_num.'个'.$boss_name.'差'.$level['freeze_fund_num'].'个'.$agent_name.'解冻';
- }
- }
- //是否勾选额外解冻资金条件
- if ($level['is_thaw'] == 1) {
- $extra['is_thaw'] = true;
- //获取直推用户数据
- $children_info = DoubleCopyUser::lists([
- 'where' => [
- ['mall_id' => $this->mall_id],
- ['pid' => $this->user_id],
- ['status' => StatusEnum::ENABLED],
- // ['>=', 'level', $level['first_level']],
- // ['pos' => [1,2]]
- ],
- 'select' => 'id,pos,status,level',
- ]);
- foreach ($children_info as $ck => $cv) {
- switch ($cv['pos']) {//判断一二号位是否符合达标
- case 1:
- if ($cv['level'] >= $user_level['first_level']) $extra['first_num'] = true;
- break;
- case 2:
- if ($cv['level'] >= $user_level['first_level']) $extra['second_num'] = true;
- break;
- }
- //累计直推符合条件人数
- if ($cv['level'] >= $user_level['second_level']) {
- $extra['count'] += 1;
- }
- }
- $num = $user_level['push_num'] - $extra['count'];
- if ($num < 0) $num = 0;
- $extra['count'] = $num;
- $extra['title'] = '还需数量'.$num.'个';
-
- }
- }
- // 基础配置
- $config = Yii::$app->services->setting->addons->get($this->mall_id, DoubleCopyEnum::ADDONS_NAME, 'basic');
- $data['is_send_second'] = empty($config['is_send_second']) ? 1 : $config['is_send_second'];// 是否显示平台补贴1=显示,2=隐藏
- $data['show_achievement'] = $config['show_achievement'] ?? 0;// 是否显示业绩0=不显示,1=显示
- $data['pool_name'] = $config['pool_name'] ?? '分红池';// 分红池名称设置
- // 获取1、2市场业绩
- $market = DoubleCopyUser::find()->select('pos,achievement')->where(['pid' => $this->user_id, 'status' => StatusEnum::ENABLED])->andWhere(['<=','pos',2])->indexBy('pos')->asArray()->all();
- $data['market1'] = $market[1]['achievement'] ?? 0;// 第一市场业绩
- $data['market2'] = $market[2]['achievement'] ?? 0;// 第二市场业绩
- if (!empty($level_arr[$user['level']]['open_ladder']) && $level_arr[$user['level']]['ladder_setting']) {
- $ladder_setting = ArrayHelper::arraySort(json_decode($level_arr[$user['level']]['ladder_setting'], true), 'thaw_percent', 'desc');
- foreach ($ladder_setting as $item) {
- if ($user['thaw_percent'] >= $item['thaw_percent']) {
- $thaw_show_contents = $item['show_contents'];
- break;
- }
- }
- }
- $data['thaw_show_contents'] = $thaw_show_contents ?? '';// 显示的内容
- $total_num = $thaw_num + $help_num;
- $data['frozen_info'] = [
- 'count' => $help_count,// 已助力总数
- 'freeze_fund_num' => $total_num,// 需解冻数量
- 'explain' => $text,// 说明
- 'title' => $title,
- 'extra' => $extra,
- ];
- //冻结资金清零时间是否显示
- $data['frozen_fund_clear_time_show'] = $config['frozen_fund_clear_time_show'] ?? 0;
- $data['frozen_fund_clear_time'] = '';
- if($data['frozen_fund_clear_time_show'] == 1){
- $frozen_fund_clear_date = $config['frozen_fund_clear_date'] ?? 0;
- $frozen_fund_clear_time = $config['frozen_fund_clear_time'] ?? '';
- if($frozen_fund_clear_date && $frozen_fund_clear_time){
- $data['frozen_fund_clear_time'] = '每月'.$frozen_fund_clear_date.'日'.$frozen_fund_clear_time;
- }
- }
- return $this->success('获取成功', $data);
- }
- }
- /**
- * 获取分佣列表
- * @Author: lun
- * @DateTime: 2022/5/16 0016 17:09
- * @Copyright: copyright (c) 2021 广东七件事集团
- * @return mixed|void
- */
- public function actionCommission()
- {
- if (Yii::$app->request->isGet) {
- $post = Yii::$app->request->get();
- // 检查提交的参数
- $res = Yii::$app->services->validate->validate($post,[
- [['page','limit'], 'integer'],
- [['capital_type'], 'required'],
- [['capital_type'], 'string'],
- ]);
- if($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
- // 查询推荐内容
- $where[] = ['=', 'mall_id', $this->mall_id];
- $where[] = ['=', 'user_id', $this->user_id];
- $where[] = ['=', 'capital_type', $post['capital_type']];
- $where[] = ['=', 'status', StatusEnum::ENABLED];
- $order = 'id desc,created_at desc';
- $select = 'user_id,buy_uid,goods_name,pic_url,price,order_no,money,capital_type,settlement_type,created_at,reward_currency';
- $with = ['buyuser'];
- $params = array('where' => $where, 'order' => $order, 'select' => $select, 'with' => $with);
- $list = DoubleCopyCommission::listPage($params);
- $configs = Yii::$app->services->setting->addons->get($this->mall_id, DoubleCopyEnum::ADDONS_NAME, 'basic');
- $is_hidden_mobile = $configs['is_hidden_mobile'] ?? 0;
- // 根据配置是否隐藏手机号
- $is_hidden_mobile && $list['list'] = array_map(function ($item) {
- $mobile = $item['buyuser']['mobile'] ?? '';
- $item['buyuser']['mobile'] = substr_replace($mobile, '****', 3, 4);
- return $item;
- }, $list['list']);
- $score_name = \Yii::$app->services->setting->mall->get($this->mall_id, 'score.score_name') ?? '积分';
- $money_msg = [
- 'commission' => '元',
- 'score' => $score_name
- ];
- foreach($list['list'] as $key => $value){
- $value['money_msg'] = $money_msg[$value['reward_currency']] ?? '元';
- $list['list'][$key] = $value;
- }
- return $this->success('获取成功', $list);
- }
- }
- /**
- * 我的客户
- * @Author: lun
- * @DateTime: 2022/5/16 0016 17:42
- * @Copyright: copyright (c) 2021 广东七件事集团
- */
- public function actionMyClient(){
- if (Yii::$app->request->isPost) {
- $post = Yii::$app->request->post();
- // 检查提交的参数
- $res = Yii::$app->services->validate->validate($post,[
- [['page','limit'], 'integer'],
- [['deep'], 'integer'],
- [['deep'], 'default', 'value' => 1],
- ]);
- if($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
- // 获取用户信息
- $user = [];
- if ($this->user->parent_id) {
- $user = User::find()->where(['id' => $this->user->parent_id])->asArray()->one();
- // 获取用户等级
- $dcuser = DoubleCopyUser::find()->select('level')->where(['user_id' => $user['id'], 'status' => StatusEnum::ENABLED])->asArray()->one();
- // 获取等级名称
- $level_name = DoubleCopyLevel::getLevelNameByLevel($this->mall_id, $dcuser['level']);
- }
- $data['user_id'] = !empty($user['id']) ? $user['id'] : 0;
- $data['nickname'] = !empty($user['nickname']) ? $user['nickname'] : '平台';
- $data['avatar_url'] = !empty($user['avatar_url']) ? $user['avatar_url'] : '';
- $data['level_name'] = !empty($level_name) ? $level_name : '-';
- $list = [];
- // 获取关系链用户
- list($tree, $parent_deep) = UserPartitionRelationship::getTree($this->user_id);
- $where[] = ['deep' => $post['deep'] + $parent_deep];
- $select = 'user_id';
- $limit = empty($post['limit']) ? 11 : $post['limit'] + 1;
- $relation = DoubleCopyUser::batchGetTeamData($post['page'], $limit, $tree, compact('where', 'select'));
- if (!empty($relation)) {
- $user_ids = array_slice(array_column($relation, 'user_id'), 0 , $limit - 1);// 获取用户id
- // 是否隐藏手机号码
- $configs = Yii::$app->services->setting->addons->get($this->mall_id, DoubleCopyEnum::ADDONS_NAME, 'basic');
- $is_hidden_mobile = $configs['is_hidden_mobile'] ?? 0;
- // 根据用户id批量获取用户信息
- $users = User::find()->select("id,nickname,mobile,avatar_url")->where(['id' => $user_ids])->indexBy('id')->asArray()->all();
- // 根据配置是否隐藏手机号
- $is_hidden_mobile && $users = array_map(function ($user) {
- $user['mobile'] = substr_replace($user['mobile'], '****', 3, 4);
- return $user;
- }, $users);
- // 获取用户等级
- $dcuser = DoubleCopyUser::find()->select('user_id,level')->where(['user_id' => $user_ids, 'status' => StatusEnum::ENABLED])->indexBy('user_id')->asArray()->all();
- // 获取等级
- $level = DoubleCopyLevel::getLevelMap($this->mall_id, 2);
- // 获取推荐用户数据
- $team = UserTeamStatistics::find()->select('user_id,user_direct_total,user_indirect_total')->where(['user_id' => $user_ids, 'status' => StatusEnum::ENABLED])->indexBy('user_id')->asArray()->all();
- foreach ($user_ids as $uid) {
- $list[] = [
- 'user' => $users[$uid],
- 'level_name' => empty($dcuser[$uid]) ? '-' : $level[$dcuser[$uid]['level']],// 等级名称
- 'direct_num' => $team[$uid]['user_direct_total'] ?: 0,// 我的客户
- 'indirect_num' => $team[$uid]['user_indirect_total'] ?: 0,// 我的粉丝
- ];
- }
- }
- $data['list'] = $list;
- $data['page'] = $post['page'];
- $data['page_count'] = count($relation) > ($limit - 1) ? $post['page'] + 1 : $post['page'];
- return $this->success('获取成功', $data);
- }
- }
- /**
- * 等级权益
- * @Author: lun
- * @DateTime: 2022/5/16 0016 17:35
- * @Copyright: copyright (c) 2021 广东七件事集团
- */
- public function actionRights()
- {
- if (Yii::$app->request->isGet) {
- // 获取用户信息
- $data = $this->getUserInfo($this->mall_id, $this->user);
- // 获取等级
- $where[] = ['=', 'mall_id', $this->mall_id];
- $where[] = ['=', 'status', StatusEnum::ENABLED];
- $order = 'level asc';
- $select = 'level,name,explain';
- $params = compact('where','order','select');
- $list = DoubleCopyLevel::lists($params);
- $data['list'] = $list;
- $this->success('获取成功', $data);
- }
- }
- /**
- * 获取用户基本信息
- * @Author: lun
- * @DateTime: 2022/5/16 0016 17:49
- * @Copyright: copyright (c) 2021 广东七件事集团
- * @param $mall_id
- * @param $user
- * @return mixed
- */
- private function getUserInfo($mall_id, $user)
- {
- $data['user_id'] = $user->id ?: 0;
- $data['nickname'] = $user->nickname ?: '平台';
- $data['avatar_url'] = $user->avatar_url ?: '';
- $data['parent_id'] = $user->parent_id ?: 0;
- if (!empty($user->id)) {
- // 获取用户等级
- $dcuser = DoubleCopyUser::find()->select('level')->where(['user_id' => $user->id])->asArray()->one();
- // 获取等级名称
- $level_name = DoubleCopyLevel::getLevelNameByLevel($mall_id, $dcuser['level']);
- }
- $data['level_name'] = $level_name ?: '默认等级';// 等级名称
- return $data;
- }
- public function actionUpgradeGoodsList(){
- $params = \Yii::$app->request->get();
- $res = \Yii::$app->services->validate->validate($params, [
- [['limit', 'page','keyword'], 'safe']
- ]);
- if ($res === false) return $this->error(\Yii::$app->services->validate->getErrorMessage());
- $where[] = ['g.mall_id' => $this->mall_id];
- $where[] = ['g.status' => [StatusEnum::ENABLED]];
- $where[] = ['g.is_on_sale' => 1];
- $where[] = ['g.is_show' => 1];
- if (isset($params['keyword'])) {
- $where[] = ['like', 'g.goods_name', trim($params['keyword'])];
- }
- $goods_ids = [];
- $level_list = DoubleCopyLevel::lists(['where'=>[['mall_id'=>$this->mall_id],['status'=>StatusEnum::ENABLED],['is_auto_upgrade'=>1],['upgrade_type_goods'=>1]]]);
- if(!empty($level_list)){
- foreach($level_list as $level){
- $goods_list = json_decode($level['goods_list'], true);
- if(!empty($goods_list)){
- $goods_ids = array_column($goods_list,'id');
- }
- }
- }
- $where[] = ['g.id'=>$goods_ids];
- $params['where'] = $where;
- $params['alias'] = 'g';
- $params['select'] = 'g.id,g.goods_name,g.cover_pic,g.price,g.original_price';
- $goods_list = Goods::listPage($params);
- return $this->success('操作成功', $goods_list);
- }
- /**
- * 获取用户
- * @Author: lun
- * @DateTime: 2022/5/16 0016 17:49
- * @Copyright: copyright (c) 2021 广东七件事集团
- * @param $mall_id
- * @param $user
- * @return mixed
- */
- public function actionGetUser()
- {
- // 基础配置
- $config = Yii::$app->services->setting->addons->get($this->mall_id, DoubleCopyEnum::ADDONS_NAME, 'basic');
- $data['is_enable_login'] = $config['is_enable_login'] ?? 0;
- $data['is_dcuser'] = 0;
- if(!empty($data['is_enable_login']) && !empty($this->user_id)){
- $dcuser = DoubleCopyUser::find()->where(['user_id' => $this->user_id])->select('id')->one();
- if(!empty($dcuser)){
- $data['is_dcuser'] = 1;
- }
- }
- return $this->success('操作成功', $data);
- }
- }
|