425 lines
18 KiB
PHP
425 lines
18 KiB
PHP
<?php
|
||
|
||
|
||
namespace Yunshop\TeamDividend\admin;
|
||
|
||
|
||
use app\common\components\BaseController;
|
||
use app\common\exceptions\AppException;
|
||
use app\common\exceptions\ShopException;
|
||
use app\common\helpers\PaginationHelper;
|
||
use app\common\helpers\Url;
|
||
use app\common\models\Member;
|
||
use app\common\models\Order;
|
||
use Illuminate\Support\Facades\DB;
|
||
use Yunshop\TeamDividend\admin\models\TeamDividendAgencyModel;
|
||
use Yunshop\TeamDividend\jobs\NewUpgrateJob;
|
||
use Yunshop\TeamDividend\models\CodeRecordModel;
|
||
use Yunshop\TeamDividend\models\Log;
|
||
use Yunshop\TeamDividend\models\OrderModel;
|
||
|
||
use Yunshop\TeamDividend\models\TeamDividendLevelModel;
|
||
use Yunshop\TeamDividend\models\TeamDividendLevelUpgrade;
|
||
use Yunshop\TeamDividend\models\Uplog;
|
||
use Yunshop\TeamDividend\services\GetAgentsService;
|
||
use Yunshop\TeamDividend\services\ReturnConfig;
|
||
use Yunshop\TeamDividend\services\UpgradeService;
|
||
use Yunshop\TeamDividend\services\FundPoolAwardService;
|
||
use app\common\services\ExportService;
|
||
use Yunshop\TeamDividend\services\upgrate\UplogService;
|
||
|
||
class TeamAgencyController extends BaseController
|
||
{
|
||
private $pageSize = 20;
|
||
|
||
|
||
public function setBlack()
|
||
{
|
||
$this->validate(['id' => 'required|integer|min:1'], null, [], ['id' => '经销商ID']);
|
||
if (!$agent = TeamDividendAgencyModel::uniacid()->find(request()->id)) {
|
||
return $this->errorJson('经销商不存在');
|
||
}
|
||
if (!TeamDividendAgencyModel::setBlack($agent, request()->is_black ? 1 : 0)) {
|
||
return $this->message('修改失败','','error');
|
||
}
|
||
return $this->message('修改成功');
|
||
}
|
||
|
||
public function index()
|
||
{
|
||
$parames = \YunShop::request();
|
||
$uid = $parames->get('uid');
|
||
|
||
$title = '经销商';
|
||
|
||
if (strpos($parames['searchtime'], '×') !== FALSE) {
|
||
$search_time = explode('×', $parames['searchtime']);
|
||
|
||
if (!empty($search_time)) {
|
||
$parames['searchtime'] = $search_time[0];
|
||
|
||
$start_time = explode('=', $search_time[1]);
|
||
$end_time = explode('=', $search_time[2]);
|
||
|
||
$parames->times = [
|
||
'start' => $start_time[1],
|
||
'end' => $end_time[1]
|
||
];
|
||
}
|
||
}
|
||
|
||
$list = TeamDividendAgencyModel::searchAgency($parames);
|
||
$list->with(['hasManyMemberChildren'=>function ($query) {
|
||
return $query->select('yz_member.member_id','yz_member.parent_id')->join('yz_team_dividend_agency',function ($join) {
|
||
$join->on('yz_team_dividend_agency.uid','=','yz_member.member_id')->whereNull('yz_team_dividend_agency.deleted_at');
|
||
});
|
||
}]);
|
||
if($uid){
|
||
$list = $list->where('yz_member.parent_id',$uid);
|
||
$title = '下级经销商';
|
||
}
|
||
$list = $list->paginate($this->pageSize);
|
||
$list = $list->toArray();
|
||
$pager = PaginationHelper::show($list['total'], $list['current_page'], $this->pageSize);
|
||
$starttime = $endtime = time();
|
||
if (isset($parames['searchtime']) && ($parames['searchtime'] == 1 || $parames['searchtime'] == 2)) {
|
||
if ($parames['times']['start'] != '请选择' && $parames['times']['end'] != '请选择') {
|
||
$starttime = strtotime($parames['times']['start']);
|
||
$endtime = strtotime($parames['times']['end']);
|
||
}
|
||
}
|
||
$level = TeamDividendLevelModel::getList()->get();
|
||
// 获取所有经销商的排名信息
|
||
$rankList = TeamDividendLevelModel::getRanking();
|
||
// 获取每个经销商的赠送名额
|
||
$uidS = array_column($list['data'],'uid');
|
||
$quotaInfo = Uplog::uniacid()
|
||
->select([DB::raw("sum(give_limit) as total_quota"),'uid'])
|
||
->whereIn('uid',$uidS)
|
||
->orderBy('created_at','ASC')
|
||
->groupBy('uid')
|
||
->get()
|
||
->toArray();
|
||
$quotaInfo = array_column($quotaInfo,'total_quota','uid');
|
||
// 已使用
|
||
$useQuota = TeamDividendAgencyModel::uniacid()
|
||
->select([DB::raw("count(id) as total_use_quota"),'give_uid'])
|
||
->whereIn('give_uid',$uidS)
|
||
->groupBy('uid')
|
||
->get()
|
||
->toArray();
|
||
$useQuota = array_column($useQuota,'total_use_quota','give_uid');
|
||
foreach ($list['data'] as $key => $item) {
|
||
$list['data'][$key]['total'] = count($item['has_many_member_children']);
|
||
// 剩余名额处理
|
||
$list['data'][$key]['total_quota'] = (int)$quotaInfo[$item['uid']];
|
||
$list['data'][$key]['surplus_quota'] = (int)$quotaInfo[$item['uid']] - (int)$useQuota[$item['uid']];
|
||
$list['data'][$key]['use_quota'] = (int)$useQuota[$item['uid']];
|
||
// 排名处理
|
||
$list['data'][$key]['rank_list'] = array_filter(array_map(function($rankInfo) use ($item){
|
||
$rankSort = (string)$rankInfo['up_log'][$item['uid']];
|
||
if($rankSort === '0' || $rankSort) {
|
||
return [
|
||
'id' => $rankInfo['id'],
|
||
'level_name' => $rankInfo['level_name'],
|
||
'ranking' => ((int)$rankInfo['up_log'][$item['uid']] + 1),
|
||
];
|
||
}
|
||
return [];
|
||
},$rankList));
|
||
}
|
||
|
||
return view('Yunshop\TeamDividend::admin.team-agency', [
|
||
'list' => $list,
|
||
'endtime' => $endtime,
|
||
'starttime' => $starttime,
|
||
'total' => $list['total'],
|
||
'pager' => $pager,
|
||
'title' => $title,
|
||
'level' => $level,
|
||
'request' => \YunShop::request(),
|
||
])->render();
|
||
}
|
||
|
||
/**
|
||
* @return mixed|string
|
||
* @throws AppException
|
||
* @throws \Throwable
|
||
*/
|
||
public function add()
|
||
{
|
||
$level_list = TeamDividendLevelModel::getList()->get();
|
||
if (\Request::getMethod() == 'POST') {
|
||
$agentData = \YunShop::request()->team;
|
||
$agentData['uniacid'] = \YunShop::app()->uniacid;
|
||
$agentData['upgrade_at'] = time();
|
||
if((int)$agentData['level'] <= 0) return $this->message('添加失败,请选择代理等级!', '', 'error');
|
||
// 其他验证
|
||
$agency_model = new TeamDividendAgencyModel();
|
||
$agency_model->fill($agentData);
|
||
$validator = $agency_model->validator();
|
||
if ($validator->fails()) {
|
||
$this->error($validator->messages());
|
||
} else {
|
||
if ($agency_model->save()) {
|
||
// 升级后等级
|
||
$c_level = TeamDividendLevelModel::with(['hasOneUpgradeSet'])->find($agentData['level']);
|
||
// 升级前等级
|
||
$o_level = NULL;
|
||
// 升级日志
|
||
Uplog::addLog($agency_model, $o_level, $c_level);
|
||
//签合同
|
||
$data=[
|
||
'member_id'=>$agentData['uid'],
|
||
'created_at' => time(),
|
||
];
|
||
event(new \app\common\events\plugin\TeamDividendEvent($data));
|
||
//激活码
|
||
$upgrade_set = (new UpgradeService())->getUpgradeById($agentData['level']);
|
||
|
||
if ($upgrade_set) {
|
||
$set = \Setting::get('plugin.team_dividend');
|
||
if ($set['is_activation_code'] && $upgrade_set[0]->code_num) {
|
||
$level_list = TeamDividendLevelModel::getList()->get();
|
||
$code_num = unserialize($upgrade_set[0]->code_num);
|
||
foreach($level_list as $key => $level) {
|
||
if($code_num['level_'.$level->id]) {
|
||
(new UpgradeService())->senCode($agentData['uid'], $code_num['level_'.$level->id], $level->id, $level->level_name);
|
||
}
|
||
}
|
||
\Log::debug('激活码');
|
||
}
|
||
}
|
||
(new UpgradeService())->becomeAgencyNotify($agentData['uid']);
|
||
//直推奖 todo 直推奖不用了
|
||
// (new UpgradeService())->sendBonus($agentData['uid']);
|
||
// \Log::debug('直推奖');
|
||
|
||
return $this->message('经销商操作成功', yzWebUrl('plugin.team-dividend.admin.team-agency'));
|
||
}
|
||
}
|
||
}
|
||
|
||
return view('Yunshop\TeamDividend::admin.team-agency-add', [
|
||
'level' => $level_list
|
||
])->render();
|
||
}
|
||
|
||
public function searchAgency()
|
||
{
|
||
$keyword = \YunShop::request()->keyword;
|
||
|
||
$member = Member::getMemberInfoByNickName($keyword);
|
||
|
||
return view('Yunshop\TeamDividend::admin.query', [
|
||
'members' => $member
|
||
])->render();
|
||
}
|
||
|
||
public function export()
|
||
{
|
||
$file_name = date('Ymdhis', time()) . '';
|
||
|
||
$parames = \YunShop::request();
|
||
|
||
if (strpos($parames['searchtime'], '×') !== FALSE) {
|
||
$search_time = explode('×', $parames['searchtime']);
|
||
|
||
if (!empty($search_time)) {
|
||
$parames['searchtime'] = $search_time[0];
|
||
|
||
$start_time = explode('=', $search_time[1]);
|
||
$end_time = explode('=', $search_time[2]);
|
||
|
||
$parames->times = [
|
||
'start' => $start_time[1],
|
||
'end' => $end_time[1]
|
||
];
|
||
}
|
||
}
|
||
|
||
// $list = TeamDividendAgencyModel::searchAgency($parames)->get()->toArray();
|
||
|
||
$list = TeamDividendAgencyModel::searchAgency($parames);
|
||
$uid = $parames->get('uid');
|
||
if($uid){
|
||
$list = $list->where('yz_team_dividend_agency.parent_id',$uid);
|
||
}
|
||
$export_page = request()->export_page ? request()->export_page : 1;
|
||
$export_model = new ExportService($list, $export_page);
|
||
|
||
$list = $list->get()->toArray();
|
||
|
||
$childe = TeamDividendAgencyModel::getChildNumByPrantId();
|
||
foreach ($list as $key => $item) {
|
||
foreach ($childe as $c_item ) {
|
||
if ($c_item['parent_id'] == $item['uid']) {
|
||
$list[$key]['total'] = $c_item['total'];
|
||
}
|
||
}
|
||
}
|
||
$export_data[0] = ['ID', '会员', '推荐人会员ID', '成为代理时间', '推荐人姓名', '推荐人手机号', '经销商', '手机号','等级', '一级(直系)总经销商人数', '分红比例', '已结算分红', '未结算分红', '累计结算分红','团队业绩','团队商品销量'];
|
||
foreach ($list as $key => $item) {
|
||
if (!empty($item['status'])) {
|
||
$status = '已使用';
|
||
} else {
|
||
$status = '未使用';
|
||
}
|
||
if($item['has_many_team_dividend'][0]['status'] == 1)
|
||
$item['dividend_final'] = $item['has_many_team_dividend'][0]['total_amount'];
|
||
elseif($item['has_many_team_dividend'][1]['status'] == 1)
|
||
$item['dividend_final'] = $item['has_many_team_dividend'][1]['total_amount'];
|
||
elseif($item['has_many_team_dividend'][2]['status'] == 1)
|
||
$item['dividend_final'] = $item['has_many_team_dividend'][2]['total_amount'];
|
||
else
|
||
$item['dividend_final'] = 0;
|
||
|
||
if($item['has_many_team_dividend'][0]['status'] === 0)
|
||
$item['dividend_open'] = $item['has_many_team_dividend'][0]['total_amount'];
|
||
elseif($item['has_many_team_dividend'][1]['status'] === 0)
|
||
$item['dividend_open'] = $item['has_many_team_dividend'][1]['total_amount'];
|
||
elseif($item['has_many_team_dividend'][2]['status'] === 0)
|
||
$item['dividend_open'] = $item['has_many_team_dividend'][2]['total_amount'];
|
||
else
|
||
$item['dividend_open'] = 0;
|
||
|
||
$item['dividend_total'] = $item['has_many_team_dividend'][2]['total_amount'] + $item['has_many_team_dividend'][1]['total_amount'] + $item['has_many_team_dividend'][0]['total_amount']?:0;
|
||
$export_data[$key + 1] = [
|
||
$item['id'],
|
||
$item['has_one_member']['uid'],
|
||
$item['to_parent']['uid'] ?? 0,
|
||
$item['created_at'],
|
||
$item['to_parent']['realname'] ?? '',
|
||
$item['to_parent']['mobile'] ?? 0,
|
||
$item['has_one_member']['username'],
|
||
$item['has_one_member']['mobile'],
|
||
$item['has_one_level']['level_name'],
|
||
$item['total'],
|
||
$item['has_one_level']['dividend_ratio'],
|
||
$item['dividend_final'],
|
||
$item['dividend_open'],
|
||
$item['dividend_total'],
|
||
$item['team_order_price'],
|
||
$item['team_goods_total']];
|
||
}
|
||
$export_model->export($file_name, $export_data, 'plugin.team-dividend.admin.team-agency.index', 'direct_export');
|
||
|
||
// \Excel::create($file_name, function ($excel) use ($export_data) {
|
||
// // Set the title
|
||
// $excel->setTitle('Office 2005 XLSX Document');
|
||
//
|
||
// // Chain the setters
|
||
// $excel->setCreator('')
|
||
// ->setLastModifiedBy("")
|
||
// ->setSubject("Office 2005 XLSX Test Document")
|
||
// ->setDescription("Test document for Office 2005 XLSX, generated using PHP classes.")
|
||
// ->setKeywords("office 2005 openxml php")
|
||
// ->setCategory("report file");
|
||
//
|
||
// $excel->sheet('info', function ($sheet) use ($export_data) {
|
||
// $sheet->rows($export_data);
|
||
// });
|
||
//
|
||
//
|
||
// })->export('xls');
|
||
}
|
||
public function daletedAgency()
|
||
{
|
||
|
||
$id = \YunShop::request()->id;
|
||
$agency = TeamDividendAgencyModel::find($id);
|
||
if(!$agency) {
|
||
return $this->message('无此经销商或已经删除','','error');
|
||
}
|
||
$uid= TeamDividendAgencyModel::getuid($id);
|
||
$result = TeamDividendAgencyModel::daletedAgency($id);
|
||
$code_id=CodeRecordModel::daletedCode($uid['uid']);
|
||
return $this->message('删除成功',Url::absoluteWeb('plugin.team-dividend.admin.team-agency'));
|
||
}
|
||
|
||
public function change()
|
||
{
|
||
$id = \YunShop::request()->id;
|
||
$levelId = \YunShop::request()->value;
|
||
$agency = TeamDividendAgencyModel::find($id);
|
||
$levelInfo = TeamDividendLevelModel::find($levelId);
|
||
// 等级类型:0=普通等级,1=文创等级
|
||
if((int)$levelInfo->level_type == 1){
|
||
$level = $agency->cultural_level_id;
|
||
$agency->cultural_level_id = $levelId;
|
||
$agency->cultural_upgrade_at = time();
|
||
}else{
|
||
$level = $agency->level;
|
||
$agency->level = \YunShop::request()->value;
|
||
$agency->upgrade_at = time();
|
||
}
|
||
|
||
|
||
if ($agency->save()) {
|
||
// 升级后等级
|
||
$c_level = TeamDividendLevelModel::with(['hasOneUpgradeSet'])->find($agency->level);
|
||
// 升级前等级
|
||
$o_level = TeamDividendLevelModel::with(['hasOneUpgradeSet'])->find($level);
|
||
|
||
// 升级日志
|
||
Uplog::addLog($agency, $o_level, $c_level);
|
||
|
||
if ($c_level->level_weight > $o_level->level_weight) {
|
||
//激活码
|
||
$upgrade_set = (new UpgradeService())->getUpgradeById($agency->level);
|
||
|
||
if ($upgrade_set) {
|
||
$set = \Setting::get('plugin.team_dividend');
|
||
if ($set['is_activation_code'] && $upgrade_set[0]->code_num) {
|
||
$level_list = TeamDividendLevelModel::getList()->get();
|
||
$code_num = (is_array($upgrade_set[0]->code_num) ? $upgrade_set[0]->code_num : unserialize($upgrade_set[0]->code_num)) ?: [];
|
||
foreach($level_list as $key => $level) {
|
||
if($code_num['level_'.$level->id]) {
|
||
(new UpgradeService())->senCode($agency->uid, $code_num['level_'.$level->id], $level->id, $level->level_name);
|
||
}
|
||
}
|
||
\Log::debug('激活码');
|
||
}
|
||
}
|
||
|
||
//代理商升级通知
|
||
(new UpgradeService())->agencyUpgradeNotify($agency->uid, $o_level->level_name, $o_level->dividend_ratio_name, $agency->level);
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
|
||
public function test(){
|
||
|
||
//因为model偶尔会出现status异常的问题,所以重新查询一遍
|
||
// $model = Order::with('hasManyOrderGoods')->find(84);
|
||
// $set = \Setting::get('plugin.team_dividend');
|
||
// (new NewUpgrateJob($model->uid, $set, $model->uniacid, TeamDividendLevelUpgrade::ORDER_PAY, $model))->handle();
|
||
|
||
// $order = Order::find(87);
|
||
// $TeamReturnService = ReturnConfig::getClass();
|
||
// if (app('plugins')->isEnabled('team-sideways')) debug('经销商订单创建终止:team-sideways');
|
||
// $set = $order->getSetting('plugin.team_dividend');
|
||
// if (!$set['is_team_dividend']) debug('是否开启经销商插件');
|
||
// $buyMember = $order->belongsToMember;
|
||
// $agents = GetAgentsService::index($set, $order->uid, $order->create_time);
|
||
// foreach ($order->hasManyOrderGoods as $order_goods) {
|
||
// // 普通经销商提成处理
|
||
// $TeamReturnService->setData($order, $set, $buyMember, $order_goods, $agents);
|
||
// $TeamReturnService->handle();
|
||
// $this->totalDividend += $TeamReturnService->totalDividend;
|
||
// // 文创津贴(补贴)处理
|
||
// $TeamReturnService->setData($order, $set, $buyMember, $order_goods, $agents,1);
|
||
// $TeamReturnService->handle();
|
||
// $this->totalDividend += $TeamReturnService->totalDividend;
|
||
// }
|
||
// debug(['总分红金额(包括津贴和补贴)'=>$this->totalDividend]);
|
||
|
||
debug("结束");
|
||
}
|
||
|
||
|
||
|
||
|
||
} |