admin/addon/fenxiao/api/controller/Fenxiao.php

367 lines
16 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
/**
* B2B商城系统 - 团队十年电商经验汇集巨献!
* =========================================================
* Copy right 2023-2046 四川正今科技有限公司, 保留所有权利。
* ----------------------------------------------
* 官方网址: https://www.viewsphp.com
* =========================================================
*/
namespace addon\fenxiao\api\controller;
use addon\fenxiao\model\Config;
use addon\fenxiao\model\Fenxiao as FenxiaoModel;
use addon\fenxiao\model\FenxiaoLevel;
use addon\fenxiao\model\FenxiaoOrder as FenxiaoOrderModel;
use addon\fenxiao\model\Poster;
use addon\fenxiao\model\PosterTemplate as PosterTemplateModel;
use app\api\controller\BaseApi;
use app\model\member\Member;
use Carbon\Carbon;
use think\facade\Db;
/**
* 分销相关信息
*/
class Fenxiao extends BaseApi
{
/**
* 获取分销商信息
*/
public function detail()
{
$token = $this->checkToken();
if ($token[ 'code' ] < 0) return $this->response($token);
$condition = [
[ 'f.member_id', '=', $this->member_id ]
];
$model = new FenxiaoModel();
$info = $model->getFenxiaoDetailInfo($condition);
if (empty($info[ 'data' ])) {
$res = $model->autoBecomeFenxiao($this->member_id, $this->site_id);
if (isset($res[ 'code' ]) && $res[ 'code' ] >= 0) {
$info = $model->getFenxiaoDetailInfo($condition);
}
} else {
$member = new Member();
$info[ 'data' ][ 'one_child_num' ] = $member->getMemberCount([ [ 'fenxiao_id', '=', $info[ 'data' ][ 'fenxiao_id' ] ], [ 'is_fenxiao', '=', 0 ] ])[ 'data' ];
$condition_result = $model->geFenxiaoNextLevel($this->member_id, $this->site_id);
$info[ 'data' ][ 'condition' ] = $condition_result[ 'data' ];
}
if (!empty($info[ 'data' ])) {
$fenxiao_order_model = new FenxiaoOrderModel();
// 今日收入
$compare_today = Carbon::today()->timestamp;
$compare_tomorrow = Carbon::tomorrow()->timestamp;
$commission = 0;
$one_commission = $fenxiao_order_model->getFenxiaoOrderInfo([ [ 'one_fenxiao_id', '=', $info[ 'data' ][ 'fenxiao_id' ] ], [ 'create_time', 'between', [ $compare_today, $compare_tomorrow ] ], [ 'is_settlement', '=', 1 ] ], 'sum(one_commission) as commission');
$two_commission = $fenxiao_order_model->getFenxiaoOrderInfo([ [ 'two_fenxiao_id', '=', $info[ 'data' ][ 'fenxiao_id' ] ], [ 'create_time', 'between', [ $compare_today, $compare_tomorrow ] ], [ 'is_settlement', '=', 1 ] ], 'sum(two_commission) as commission');
$three_commission = $fenxiao_order_model->getFenxiaoOrderInfo([ [ 'three_fenxiao_id', '=', $info[ 'data' ][ 'fenxiao_id' ] ], [ 'create_time', 'between', [ $compare_today, $compare_tomorrow ] ], [ 'is_settlement', '=', 1 ] ], 'sum(three_commission) as commission');
if (!empty($one_commission[ 'data' ][ 'commission' ])) $commission += $one_commission[ 'data' ][ 'commission' ];
if (!empty($two_commission[ 'data' ][ 'commission' ])) $commission += $two_commission[ 'data' ][ 'commission' ];
if (!empty($three_commission[ 'data' ][ 'commission' ])) $commission += $three_commission[ 'data' ][ 'commission' ];
$info[ 'data' ][ 'today_commission' ] = $commission;
// 总销售额
$fenxiao_order_info = $fenxiao_order_model->getFenxiaoOrderInfoNew([ [ 'fo.one_fenxiao_id|fo.two_fenxiao_id|fo.three_fenxiao_id', '=', $info[ 'data' ][ 'fenxiao_id' ] ], [ "", 'exp', Db::raw("fo.is_refund=0 or (o.order_status=10 and fo.is_refund=1) ") ] ], 'sum(fo.real_goods_money) as real_goods_money');
$fenxiao_order_info = $fenxiao_order_info[ 'data' ];
if (empty($fenxiao_order_info[ 'real_goods_money' ])) {
$fenxiao_order_info[ 'real_goods_money' ] = 0;
}
$info[ 'data' ][ 'today_order_money' ] = $fenxiao_order_info[ 'real_goods_money' ];
$info[ 'data' ][ 'in_progress_money' ] = 0;
$one_in_progress_commission = $fenxiao_order_model->getFenxiaoOrderInfo([ [ 'one_fenxiao_id', '=', $info[ 'data' ][ 'fenxiao_id' ] ], [ 'is_settlement', '=', 0 ], [ 'is_refund', '=', 0 ] ], 'sum(one_commission) as commission');
$two_in_progress_commission = $fenxiao_order_model->getFenxiaoOrderInfo([ [ 'two_fenxiao_id', '=', $info[ 'data' ][ 'fenxiao_id' ] ], [ 'is_settlement', '=', 0 ], [ 'is_refund', '=', 0 ] ], 'sum(two_commission) as commission');
$three_in_progress_commission = $fenxiao_order_model->getFenxiaoOrderInfo([ [ 'three_fenxiao_id', '=', $info[ 'data' ][ 'fenxiao_id' ] ], [ 'is_settlement', '=', 0 ], [ 'is_refund', '=', 0 ] ], 'sum(three_commission) as commission');
if (!empty($one_in_progress_commission[ 'data' ][ 'commission' ])) $info[ 'data' ][ 'in_progress_money' ] += $one_in_progress_commission[ 'data' ][ 'commission' ];
if (!empty($two_in_progress_commission[ 'data' ][ 'commission' ])) $info[ 'data' ][ 'in_progress_money' ] += $two_in_progress_commission[ 'data' ][ 'commission' ];
if (!empty($three_in_progress_commission[ 'data' ][ 'commission' ])) $info[ 'data' ][ 'in_progress_money' ] += $three_in_progress_commission[ 'data' ][ 'commission' ];
}
return $this->response($info);
}
/**
* 获取推荐人分销商信息
*/
public function sourceInfo()
{
$token = $this->checkToken();
if ($token[ 'code' ] < 0) return $this->response($token);
$member = new Member();
$member_info = $member->getMemberInfo([ [ 'member_id', '=', $this->member_id ] ], 'fenxiao_id');
$fenxiao_id = $member_info[ 'data' ][ 'fenxiao_id' ] ?? 0;
if (empty($fenxiao_id)) {
return $this->response($this->error('', 'REQUEST_SOURCE_MEMBER'));
}
$condition = [
[ 'fenxiao_id', '=', $fenxiao_id ]
];
$model = new FenxiaoModel();
$info = $model->getFenxiaoInfo($condition, 'fenxiao_name');
return $this->response($info);
}
/**
* 获取模板id
* @return false|string
*/
public function posterTemplateIds()
{
$token = $this->checkToken();
if ($token[ 'code' ] < 0) return $this->response($token);
$condition = [
[ 'site_id', '=', $this->site_id ],
[ 'template_type', '=', 'fenxiao' ],
[ 'template_status', '=', 1 ],
];
$condition[] = [ 'template_type', '=', 'fenxiao' ];
$poster_template_model = new PosterTemplateModel();
$list = $poster_template_model->getPosterTemplateList($condition, 'template_id', 'template_id asc')[ 'data' ];
$id_arr = array_column($list, 'template_id');
if (empty($id_arr)) $id_arr = [ 'default' ];
return $this->response($this->success($id_arr));
}
/**
* 分销海报
* @return \app\api\controller\false|string
*/
public function poster()
{
$token = $this->checkToken();
if ($token[ 'code' ] < 0) return $this->response($token);
$qrcode_param = isset($this->params[ 'qrcode_param' ]) ? $this->params[ 'qrcode_param' ] : '';//二维码
if (empty($qrcode_param)) {
return $this->response($this->error('', 'REQUEST_QRCODE_PARAM'));
}
$qrcode_param = json_decode($qrcode_param, true);
$qrcode_param[ 'source_member' ] = $this->member_id;
$poster = new Poster();
$param = $this->params;
$param[ 'qrcode_param' ] = $qrcode_param;
$res = $poster->getFenxiaoPoster($param);
return $this->response($res);
}
/**
* 分销商等级信息
*/
public function level()
{
$token = $this->checkToken();
if ($token[ 'code' ] < 0) return $this->response($token);
$level = $this->params[ 'level' ] ?? 0;
$condition = [
[ 'level_id', '=', $level ]
];
$model = new FenxiaoLevel();
$info = $model->getLevelInfo($condition);
return $this->response($info);
}
/**
* 分销商我的团队
*/
public function team()
{
$token = $this->checkToken();
if ($token[ 'code' ] < 0) return $this->response($token);
$page = $this->params[ 'page' ] ?? 1;
$page_size = $this->params[ 'page_size' ] ?? PAGE_LIST_ROWS;
$level = $this->params[ 'level' ] ?? 1;
$is_pay = $this->params[ 'is_pay' ] ?? 0;
$model = new FenxiaoModel();
$fenxiao_info = $model->getFenxiaoInfo([ [ 'member_id', '=', $this->member_id ] ], 'fenxiao_id');
if (empty($fenxiao_info[ 'data' ])) return $this->response($this->error('', 'MEMBER_NOT_IS_FENXIAO'));
$list = $model->getFenxiaoTeam($level, $fenxiao_info[ 'data' ][ 'fenxiao_id' ], $page, $page_size, $is_pay);
return $this->response($list);
}
/**
* 查询我的团队的数量
*/
public function teamNum()
{
$token = $this->checkToken();
if ($token[ 'code' ] < 0) return $this->response($token);
$model = new FenxiaoModel();
$fenxiao_info = $model->getFenxiaoInfo([ [ 'member_id', '=', $this->member_id ] ], 'fenxiao_id');
if (empty($fenxiao_info[ 'data' ])) return $this->response($this->error('', 'MEMBER_NOT_IS_FENXIAO'));
$data = $model->getFenxiaoTeamNum($fenxiao_info[ 'data' ][ 'fenxiao_id' ], $this->site_id);
return $this->response($data);
}
/**
* 获取下级分销商订单
* @return false|string
*/
public function getOrder()
{
$token = $this->checkToken();
if ($token[ 'code' ] < 0) return $this->response($token);
$model = new FenxiaoModel();
$fenxiao_info = $model->getFenxiaoInfo([ [ 'member_id', '=', $this->member_id ] ], 'fenxiao_id');
if (empty($fenxiao_info[ 'data' ])) return $this->response($this->error('', 'MEMBER_NOT_IS_FENXIAO'));
$fenxiao_info = $fenxiao_info[ 'data' ];
$page = $this->params[ 'page' ] ?? 1;
$page_size = $this->params[ 'page_size' ] ?? PAGE_LIST_ROWS;
$fenxiao_id = $this->params[ 'fenxiao_id' ] ?? 0;
$sub_member_id = $this->params[ 'sub_member_id' ] ?? 0;
if (!empty($fenxiao_id)) {
$sub_fenxiao_info = $model->getFenxiaoInfo([ [ 'fenxiao_id', '=', $fenxiao_id ] ], 'fenxiao_id,member_id')[ 'data' ];
if (empty($sub_fenxiao_info)) return $this->response($this->error('', 'MEMBER_NOT_IS_FENXIAO'));
$condition = [
[ '', 'exp', Db::raw("( (fo.one_fenxiao_id = {$fenxiao_info['fenxiao_id']} AND fo.two_fenxiao_id = {$fenxiao_id}) OR (fo.two_fenxiao_id = {$fenxiao_info['fenxiao_id']} AND fo.three_fenxiao_id = {$fenxiao_id})) OR fo.member_id = {$sub_fenxiao_info['member_id']}") ]
];
} elseif (!empty($sub_member_id)) {
$is_sub_member = model('member')->getCount([ [ 'member_id', '=', $sub_member_id ], [ 'fenxiao_id', '=', $fenxiao_info[ 'fenxiao_id' ] ] ]);
if (!$is_sub_member) return $this->response($this->error('', 'NOT_EXIST_FENXIAO_RELATION'));
$condition = [
[ 'fo.one_fenxiao_id', '=', $fenxiao_info[ 'fenxiao_id' ] ],
[ 'fo.member_id', '=', $sub_member_id ]
];
}
$order_model = new FenxiaoOrderModel();
$list = $order_model->getFenxiaoOrderPageList($condition, $page, $page_size, 'fo.fenxiao_order_id desc');
if (!empty($list[ 'data' ][ 'list' ])) {
foreach ($list[ 'data' ][ 'list' ] as $k => $item) {
if ($item[ 'one_fenxiao_id' ] == $fenxiao_info[ 'fenxiao_id' ]) {
$list[ 'data' ][ 'list' ][ $k ][ 'commission' ] = $item[ 'one_commission' ];
$list[ 'data' ][ 'list' ][ $k ][ 'commission_level' ] = 1;
} elseif ($item[ 'two_fenxiao_id' ] == $fenxiao_info[ 'fenxiao_id' ]) {
$list[ 'data' ][ 'list' ][ $k ][ 'commission' ] = $item[ 'two_commission' ];
$list[ 'data' ][ 'list' ][ $k ][ 'commission_level' ] = 2;
} elseif ($item[ 'three_fenxiao_id' ] == $fenxiao_info[ 'fenxiao_id' ]) {
$list[ 'data' ][ 'list' ][ $k ][ 'commission' ] = $item[ 'three_commission' ];
$list[ 'data' ][ 'list' ][ $k ][ 'commission_level' ] = 3;
}
$list[ 'data' ][ 'list' ][ $k ] = array_diff_key($list[ 'data' ][ 'list' ][ $k ], [ 'one_fenxiao_id' => '', 'one_rate' => '', 'one_commission' => '', 'one_fenxiao_name' => '', 'two_fenxiao_id' => '', 'two_rate' => '', 'two_commission' => '', 'two_fenxiao_name' => '', 'three_fenxiao_id' => '', 'three_rate' => '', 'three_commission' => '', 'three_fenxiao_name' => '' ]);
}
}
return $this->response($list);
}
/**
* 排行榜
*/
public function rankingList()
{
$token = $this->checkToken();
if ($token[ 'code' ] < 0) return $this->response($token);
$type = $this->params[ 'type' ] ?? 'profit'; // 排行榜 profit按受益 invited_num按邀请人数
$page = $this->params[ 'page' ] ?? 1;
$page_size = $this->params[ 'page_size' ] ?? PAGE_LIST_ROWS;
$model = new FenxiaoModel();
$condition = [
[ 'f.site_id', '=', $this->site_id ],
[ 'f.is_delete', '=', 0 ]
];
$order = $type == 'profit' ? 'f.total_commission desc' : Db::raw('(f.one_child_num + f.one_child_fenxiao_num) desc');
$field = 'f.total_commission, (f.one_child_num + f.one_child_fenxiao_num) as child_num, m.nickname,m.headimg';
$data = $model->getFenxiaoPageLists($condition, $page, $page_size, $order, $field, 'f', [ [ 'member m', 'm.member_id = f.member_id', 'inner' ] ]);
return $this->response($data);
}
/**
* 获取排名
* @return false|string
*/
public function ranking()
{
$token = $this->checkToken();
if ($token[ 'code' ] < 0) return $this->response($token);
$type = $this->params[ 'type' ] ?? 'invited_num'; // 排行榜 profit按受益 invited_num按邀请人数
$model = new FenxiaoModel();
$fenxiao_info = $model->getFenxiaoInfo([ [ 'member_id', '=', $this->member_id ] ], 'fenxiao_id')[ 'data' ];
if (empty($fenxiao_info)) return $this->response($this->error('', 'MEMBER_NOT_IS_FENXIAO'));
$order = $type == 'profit' ? 'total_commission' : '(one_child_num + one_child_fenxiao_num)';
$data = $model->getFenxiaoRanking($this->site_id, $fenxiao_info[ 'fenxiao_id' ], $order);
return $this->response($data);
}
/**
* 子级分销商
*/
public function childFenxiao()
{
$token = $this->checkToken();
if ($token[ 'code' ] < 0) return $this->response($token);
$page = $this->params[ 'page' ] ?? 1;
$page_size = $this->params[ 'page_size' ] ?? PAGE_LIST_ROWS;
$model = new FenxiaoModel();
$fenxiao_info = $model->getFenxiaoInfo([ [ 'member_id', '=', $this->member_id ] ], 'fenxiao_id')[ 'data' ];
if (empty($fenxiao_info)) return $this->response($this->error('', 'MEMBER_NOT_IS_FENXIAO'));
$parent_fenxiao_id = [ $fenxiao_info[ 'fenxiao_id' ] ]; // 上级分销商id集合
// 查询分销基础配置
$config_model = new Config();
$fenxiao_basic_config = $config_model->getFenxiaoBasicsConfig($this->site_id)[ 'data' ][ 'value' ];
$level = $fenxiao_basic_config[ 'level' ];
if ($level == 2) {
// 二级分销商id集合
$one_level_fenxiao = model('fenxiao')->getColumn([ [ 'parent', '=', $fenxiao_info[ 'fenxiao_id' ] ] ], 'fenxiao_id');
if (!empty($one_level_fenxiao)) {
$parent_fenxiao_id = array_merge($parent_fenxiao_id, $one_level_fenxiao);
}
}
$condition = [
[ 'f.site_id', '=', $this->site_id ],
[ 'f.parent', 'in', $parent_fenxiao_id ],
[ 'm.is_delete', '=', 0 ]
];
$field = 'm.nickname,m.headimg,m.member_id,m.order_num,m.order_money,f.fenxiao_id,f.audit_time,f.level_name,m.is_fenxiao,m.bind_fenxiao_time,f.one_child_num,f.one_child_fenxiao_num';
$join = [ [ 'member m', 'm.member_id = f.member_id', 'inner' ] ];
$res = $model->getFenxiaoPageLists($condition, $page, $page_size, 'f.audit_time desc', $field, 'f', $join);
return $this->response($res);
}
}