model = new AgentModel(); } /** * 查看 */ public function index() { if (!$this->request->isAjax()) { return $this->view->fetch(); } $list = $this->model->sheepFilter()->with(['user.parent_user', 'level_info', 'level_status_info', 'upgrade_level'])->paginate($this->request->param('list_rows', 10)); $this->success('分销商列表', null, $list); } /** * 详情 * * @param $id */ public function detail($id) { if (!$this->request->isAjax()) { return $this->view->fetch(); } $detail = $this->model->with(['user.parent_user', 'level_info', 'level_status_info', 'upgrade_level'])->where('user_id', $id)->find(); if (!$detail) { $this->error(__('No Results were found')); } $amounts = \addons\shopro\service\partner\PartnerConfig::push3Amounts(); $seq = intval($detail->direct_order_seq ?? 0); $next = $amounts[$seq % count($amounts)] ?? 398; $last = intval($detail->last_self_order_time ?? 0); $days = \addons\shopro\service\partner\PartnerConfig::activeDays(); $ago = $last ? intval(floor((time() - $last) / 86400)) : null; $identityInfo = \addons\shopro\service\partner\IdentityService::build($detail); $isPartner = !empty($identityInfo['is_partner']); $detail->is_partner = $isPartner ? 1 : 0; $detail->next_push3_amount = number_format((float) $next, 2, '.', ''); $detail->next_push3_text = '第 ' . ($seq + 1) . ' 单将返 ' . $detail->next_push3_amount; $detail->last_self_order_text = $last ? date('Y-m-d H:i:s', $last) : '从未下单'; // 业务核心规范:合伙股东仅是会员专属进阶身份,普通会员与品酒师免自购考核 if (!$isPartner) { $detail->active_status_text = '免自购考核 (基础会员/品酒师)'; } else { $detail->active_status_text = !empty($detail->active_30d) ? '正常领取' : ('已暂停' . ($ago !== null ? '(距今 ' . $ago . ' 天)' : '')); } $totalCash = \app\admin\model\shopro\partner\Reward::where('user_id', $id) ->where('status', 1) ->where('amount', '>', 0) ->sum('amount'); $push3Cash = \app\admin\model\shopro\partner\Reward::where('user_id', $id) ->where('status', 1) ->where('amount', '>', 0) ->where('reward_type', 'push3') ->sum('amount'); $partnerExclusiveCash = \app\admin\model\shopro\partner\Reward::where('user_id', $id) ->where('status', 1) ->where('amount', '>', 0) ->where('reward_type', '<>', 'push3') ->sum('amount'); $detail->income_total_cash = number_format((float) $totalCash, 2, '.', ''); $detail->push3_cash_income = number_format((float) $push3Cash, 2, '.', ''); $detail->partner_exclusive_cash = number_format((float) $partnerExclusiveCash, 2, '.', ''); $detail->partner_cash_income = $detail->income_total_cash; $detail->partner_mode = \addons\shopro\service\partner\PartnerConfig::isPartnerMode() ? 1 : 0; $rate = (new \addons\shopro\service\partner\RateService())->currentRate(); $detail->madow_value = \addons\shopro\service\partner\IdentityService::formatMoney((float) ($detail->madow ?? 0) * (float) $rate); $this->success('分销商详情', null, $detail); } /** * 团队 * * @param $id */ public function team($id) { if (!$this->request->isAjax()) { return $this->view->fetch(); } $detail = $this->model->with(['user.parent_user', 'level_info'])->where('user_id', $id)->find(); if (!$detail) { $this->error(__('No Results were found')); } $detail->agent_team = AgentModel::hasWhere('user', function ($query) use ($detail) { return $query->where('parent_user_id', $detail->user_id); })->with(['user', 'level_info'])->select(); $this->success('分销商详情', null, $detail); } // 选择分销商 public function select() { if (!$this->request->isAjax()) { return $this->view->fetch(); } $data = $this->model->sheepFilter()->with(['user', 'level_info', 'level_status_info', 'upgrade_level']) ->paginate($this->request->param('list_rows', 10)); $this->success('选择分销商', null, $data); } /** * 编辑 * * @param $id */ public function edit($id = null) { $params = $this->request->only(['status', 'upgrade_lock', 'level_status', 'level', 'apply_info', 'is_venue', 'is_county', 'county_code']); $result = Db::transaction(function () use ($id, $params) { $row = $this->model->with(['user', 'level_info', 'level_status_info', 'upgrade_level'])->where('user_id', $id)->find(); if (!$row) { $this->error('未找到该分销商'); } foreach ($params as $field => $value) { switch ($field) { case 'status': // 修改状态 return $this->changeStatus($row, $value); break; case 'level_status': // 审核等级 return $this->changeLevelStatus($row, $value); break; case 'level': // 修改等级 return $this->changeLevel($row, $value); break; case 'is_venue': case 'is_county': case 'county_code': $result = $row->save([$field => $value]); if ($result) { LogModel::add($row->user_id, 'agent', ['type' => 'identity', 'field' => $field, 'value' => $value]); } return $result; default: return $row->save([$field => $value]); } } }); if ($result) { $this->success('更新成功', null, $result); } else { $this->error('更新失败'); } } /** * 开通 / 调整身份(弹窗一次提交) */ public function identity($id = null) { if (!$this->auth->check('shopro/commission/agent/edit')) { $this->error(__('You have no permission')); } $params = $this->request->only(['level', 'is_venue', 'is_county', 'county_code', 'upgrade_lock', 'remark']); if ($id === null || $id === '') { $this->error('请选择用户'); } $level = intval($params['level'] ?? 0); if ($level < 1 || $level > 7) { $this->error('请选择品酒师或创客等级'); } $isVenue = intval($params['is_venue'] ?? 0) ? 1 : 0; $isCounty = intval($params['is_county'] ?? 0) ? 1 : 0; $countyCode = trim((string) ($params['county_code'] ?? '')); if ($isCounty && $countyCode === '') { $this->error('开通区县代理时请选择区县'); } if (!$isCounty) { $countyCode = ''; } $upgradeLock = array_key_exists('upgrade_lock', $params) ? intval($params['upgrade_lock']) : null; $remark = trim((string) ($params['remark'] ?? '')); $result = Db::transaction(function () use ($id, $level, $isVenue, $isCounty, $countyCode, $upgradeLock, $remark) { $service = new AgentService(intval($id)); if (!$service->user) { $this->error('未找到该用户'); } if (!$service->agent) { $service->createNewAgent('user'); $service = new AgentService(intval($id)); } $row = $service->agent; if (!$row) { $this->error('未能生成分销身份'); } $before = \addons\shopro\service\partner\IdentityService::build($row); $levelModel = LevelModel::find($level); if (!$levelModel) { $this->error('未找到该等级'); } $save = [ 'level' => $level, 'is_venue' => $isVenue, 'is_county' => $isCounty, 'county_code' => $countyCode, ]; if ($upgradeLock !== null) { $save['upgrade_lock'] = $upgradeLock ? 1 : 0; } $row->save($save); $after = \addons\shopro\service\partner\IdentityService::build($row); $logRemark = $remark !== '' ? $remark : sprintf('将「%s」从 %s 调整为 %s。已入账收益不追溯。', $service->user->nickname ?: $id, $before['identity_text'] ?: '未开通', $after['identity_text'] ?: '-'); LogModel::add($row->user_id, 'agent', [ 'type' => 'identity', 'field' => 'bundle', 'value' => $after['identity_text'], 'before' => $before['identity_text'], ], null, $logRemark); LogModel::add($row->user_id, 'agent', ['type' => 'level', 'level' => $levelModel]); (new AgentService($row->user_id))->createAsyncAgentUpgrade(); return [ 'identity_text' => $after['identity_text'], 'level' => $level, 'is_venue' => $isVenue, 'is_county' => $isCounty, 'county_code' => $countyCode, ]; }); $this->success('身份已更新', null, $result); } // 修改状态 private function changeStatus($row, $value) { $result = $row->save(['status' => $value]); if ($result) { LogModel::add($row->user_id, 'agent', ['type' => 'status', 'value' => $value]); (new AgentService($row->user_id))->createAsyncAgentUpgrade(); } return $result; } // 审核等级 private function changeLevelStatus($row, $value) { if ($row->level_status == 0 && $value > 0) { $this->error('非法操作'); } if ($value == 0) { // 拒绝操作 return $row->save(['level_status' => 0]); } else { // 同意操作 if ($row->upgrade_level) { $result = $row->save(['level_status' => 0, 'level' => $row->upgrade_level->level]); if ($result) { LogModel::add($row->user_id, 'agent', ['type' => 'level', 'level' => $row->upgrade_level]); (new AgentService($row->user_id))->createAsyncAgentUpgrade(); } return $result; } } return false; } // 修改等级 private function changeLevel($row, $value) { $level = LevelModel::find($value); if ($level) { $result = $row->save(['level' => $level->level]); if ($result) { LogModel::add($row->user_id, 'agent', ['type' => 'level', 'level' => $level]); (new AgentService($row->user_id))->createAsyncAgentUpgrade(); } return $result; } else { $this->error('未找到该等级'); } } // 更换推荐人 public function changeParentUser($id) { $userAgent = new AgentService($id); if (!$userAgent->user) { $this->error('未找到该用户'); } $parentUserId = $this->request->param('parent_user_id', 0); // 更换推荐人检查 if ($parentUserId != 0) { $parentAgent = new AgentService($parentUserId); if (!$parentAgent->isAgentAvaliable()) { $this->error('选中用户暂未成为分销商,不能成为推荐人'); } if (!$this->checkChangeParentAgent($id, $parentUserId)) { $this->error('不能绑定该上级'); } LogModel::add($parentUserId, 'share', ['user' => $userAgent->user]); if ($userAgent->isAgentAvaliable()) { LogModel::add($id, 'bind', ['user' => $parentAgent->user ?? NULL]); } } $lastParentUserId = $userAgent->user->parent_user_id; $userAgent->user->parent_user_id = $parentUserId; $userAgent->user->save(); if ($lastParentUserId > 0) { $userAgent->createAsyncAgentUpgrade($lastParentUserId); } if ($parentUserId > 0) { $userAgent->createAsyncAgentUpgrade($parentUserId); } $this->success('绑定成功'); } // 递归往上找推荐人,防止出现推荐循环 private function checkChangeParentAgent($userId, $parentUserId) { if ($userId == $parentUserId) { $this->error('推荐人不能是本人'); } if ($parentUserId == 0) { return true; } $parentAgent = UserModel::find($parentUserId); if ($parentAgent) { if ($parentAgent->parent_user_id == $userId) { $this->error("已选中分销商的上级团队中已存在该用户"); } if ($parentAgent->parent_user_id == 0) { return true; } else { return $this->checkChangeParentAgent($userId, $parentAgent->parent_user_id); } } return false; } }