where('create_time', '>=', $startTime) ->where('create_time', '<', $startTime + 86400); } return $this->where('is_delete', '=', '0')->count(); } /** * 获取用户列表 * @param string $nickName 昵称 * @param int $gender 性别 * @param int $grade 会员等级 * @return \think\Paginator * @throws \think\exception\DbException */ public function getList($nickName = '', $gender = -1, $grade = null) { // 检索:微信昵称 !empty($nickName) && $this->where('nickName', 'like', "%$nickName%"); // 检索:性别 if ($gender !== '' && $gender > -1) { $this->where('gender', '=', (int)$gender); } // 检索:会员等级 $grade > 0 && $this->where('grade_id', '=', (int)$grade); // 获取用户列表 return $this->with(['grade']) ->where('is_delete', '=', '0') ->order(['create_time' => 'desc']) ->paginate(15, false, [ 'query' => \request()->request() ]); } /** * 删除用户 * @return bool|mixed */ public function setDelete() { // 判断是否为分销商 if (DealerUserModel::isDealerUser($this['user_id'])) { $this->error = '当前用户为分销商,不可删除'; return false; } return $this->transaction(function () { // 删除用户推荐关系 (new DealerUserModel)->onDeleteReferee($this['user_id']); // 标记为已删除 return $this->save(['is_delete' => 1]); }); } /** * 用户充值 * @param string $storeUserName 当前操作人用户名 * @param int $source 充值类型 * @param array $data post数据 * @return bool */ public function recharge($storeUserName, $source, $data) { if ($source == 0) { return $this->rechargeToBalance($storeUserName, $data['balance']); } elseif ($source == 1) { return $this->rechargeToPoints($storeUserName, $data['points']); } return false; } /** * 用户充值:余额 * @param $storeUserName * @param $data * @return bool */ private function rechargeToBalance($storeUserName, $data) { if (!isset($data['money']) || $data['money'] === '' || $data['money'] < 0) { $this->error = '请输入正确的金额'; return false; } // 判断充值方式,计算最终金额 if ($data['mode'] === 'inc') { $diffMoney = $data['money']; } elseif ($data['mode'] === 'dec') { $diffMoney = -$data['money']; } else { $diffMoney = helper::bcsub($data['money'], $this['balance']); } // 更新记录 $this->transaction(function () use ($storeUserName, $data, $diffMoney) { // 更新账户余额 $this->setInc('balance', $diffMoney); // 新增余额变动记录 BalanceLogModel::add(SceneEnum::ADMIN, [ 'user_id' => $this['user_id'], 'money' => $diffMoney, 'remark' => $data['remark'], ], [$storeUserName]); }); return true; } /** * 用户充值:积分 * @param $storeUserName * @param $data * @return bool */ private function rechargeToPoints($storeUserName, $data) { if (!isset($data['value']) || $data['value'] === '' || $data['value'] < 0) { $this->error = '请输入正确的积分数量'; return false; } // 判断充值方式,计算最终积分 if ($data['mode'] === 'inc') { $diffMoney = $data['value']; } elseif ($data['mode'] === 'dec') { $diffMoney = -$data['value']; } else { $diffMoney = $data['value'] - $this['points']; } // 更新记录 $this->transaction(function () use ($storeUserName, $data, $diffMoney) { // 更新账户积分 $this->setInc('points', $diffMoney); // 新增积分变动记录 PointsLogModel::add([ 'user_id' => $this['user_id'], 'value' => $diffMoney, 'describe' => "后台管理员 [{$storeUserName}] 操作", 'remark' => $data['remark'], ]); }); return true; } /** * 修改用户等级 * @param $data * @return mixed */ public function updateGrade($data) { // 变更前的等级id $oldGradeId = $this['grade_id']; return $this->transaction(function () use ($oldGradeId, $data) { // 更新用户的等级 $status = $this->save(['grade_id' => $data['grade_id']]); // 新增用户等级修改记录 if ($status) { (new GradeLogModel)->record([ 'user_id' => $this['user_id'], 'old_grade_id' => $oldGradeId, 'new_grade_id' => $data['grade_id'], 'change_type' => ChangeTypeEnum::ADMIN_USER, 'remark' => $data['remark'] ]); } return $status !== false; }); } /** * 消减用户的实际消费金额 * @param $userId * @param $expendMoney * @return int|true * @throws \think\Exception */ public function setDecUserExpend($userId, $expendMoney) { return $this->where(['user_id' => $userId])->setDec('expend_money', $expendMoney); } }