model = new VipModel(); // 确保模型指向 member_vips 表 } /** * 静态入口 * @return static|null */ public static function make() { if (!self::$instance) { self::$instance = (new static()); } return self::$instance; } /** * 获取VIP列表 * @param $params * @param int $pageSize * @return array */ public function getDataList($params, $pageSize = 15) { $query = $this->getQuery($params); $model = clone $query; $counts = [ 'count' => $model->count('id'), 'total' => $model->sum('price'), ]; $list = $query->select(['*']) ->orderBy('create_time', 'desc') ->orderBy('id', 'desc') ->paginate($pageSize > 0 ? $pageSize : 9999999); $list = $list ? $list->toArray() : []; if ($list) { foreach ($list['data'] as &$item) { // 格式化时间 $item['create_time'] = $item['create_time'] ? datetime($item['create_time'], 'Y-m-d H.i.s') : ''; // 格式化状态 $item['status_text'] = $item['status'] == 1 ? '有效' : '无效'; // 处理套餐类型 $item['type_text'] = $this->getVipTypeText($item['type']); } } return [ 'pageSize' => $pageSize, 'total' => isset($list['total']) ? $list['total'] : 0, 'counts' => $counts, 'list' => isset($list['data']) ? $list['data'] : [] ]; } /** * 获取VIP套餐类型描述 * @param $type * @return string */ private function getVipTypeText($type) { $typeArr = [ 1 => '单招VIP', 2 => '对口VIP', 3 => '专升本VIP', ]; return isset($typeArr[$type]) ? $typeArr[$type] : '未知类型'; } /** * 查询VIP * @param $params * @return \Illuminate\Database\Eloquent\Builder */ public function getQuery($params) { $where = ['mark' => 1]; $status = isset($params['status']) ? $params['status'] : 0; $type = isset($params['type']) ? $params['type'] : 0; if ($status > 0) { $where['status'] = $status; } if ($type > 0) { $where['type'] = $type; } return $this->model->where($where) ->where(function ($query) use ($params) { $keyword = isset($params['keyword']) ? $params['keyword'] : ''; if ($keyword) { $query->where('name', 'like', "%{$keyword}%"); } // 处理VIP的日期区间 $date = isset($params['date']) ? $params['date'] : []; $start = isset($date[0]) ? $date[0] : ''; $end = isset($date[1]) ? $date[1] : ''; if ($start) { $query->where('create_time', '>=', strtotime($start)); } if ($end) { $query->where('create_time', '<=', strtotime($end)); } }); } /** * 添加或编辑VIP套餐 * @return array */ public function edit() { $data = request()->all(); // 确保所有必填字段都存在 $data = [ 'name' => $data['name'] ?? '', 'type' => $data['type'] ?? 1, 'price' => $data['price'] ?? 0, 'original_price' => $data['original_price'] ?? 0, 'day' => $data['day'] ?? 0, 'status' => $data['status'] ?? 1, 'remark' => $data['remark'] ?? '', ]; return parent::edit($data); } /** * 用户选项 * @return array */ public function options() { // 获取参数 $param = request()->all(); // 用户ID $keyword = getter($param, "keyword"); $datas = $this->model ->where(function ($query) { $query->where(['status' => 1, 'mark' => 1]); }) ->where(function ($query) use ($keyword) { if ($keyword) { $query->where('name', 'like', "%{$keyword}%"); } }) ->select(['id', 'name', 'type']) ->get(); return $datas ? $datas->toArray() : []; } // 批量设置VIP接口 public function batchSet($userIds, $vipIds) { if (empty($userIds) || empty($vipIds)) { return ['code' => 1, 'msg' => '缺少必要参数']; } try { // 获取VIP套餐信息 $vips = VipModel::whereIn('id', $vipIds)->get(); // 如果没有找到相关的VIP套餐,返回错误 if ($vips->isEmpty()) { return ['code' => 1, 'msg' => '没有找到相关的VIP套餐']; } // 遍历每个用户,更新其VIP状态 foreach ($userIds as $userId) { // 获取用户信息 $user = $this->model->find($userId); if (!$user) { continue; // 如果用户不存在,则跳过 } // 遍历每个VIP套餐并为用户添加VIP信息 foreach ($vips as $vip) { // 根据不同的VIP类型更新用户的VIP状态 if ($vip->type == 1) { // 职高VIP $user->is_zg_vip = 1; // 设置为职高VIP $user->zg_vip_expired = $vip->expiry_date; } elseif ($vip->type == 2) { // 专升本VIP $user->is_zsb_vip = 1; // 设置为专升本VIP $user->zsb_vip_expired = $vip->expiry_date; } elseif ($vip->type == 3) { // 视频VIP $user->is_video_vip = 1; // 设置为视频VIP $user->video_vip_expired = $vip->expiry_date; } // 更新会员等级 $user->member_level = isset($vip->level) ? $vip->level : $user->member_level; } // 保存用户更新 $user->update_time = time(); $user->save(); } return ['code' => 0, 'msg' => '批量设置VIP成功']; } catch (\Exception $e) { return ['code' => 1, 'msg' => '批量设置VIP失败:' . $e->getMessage()]; } } /** * 删除七天之前标记软删除的数据 */ public function delete() { // 设置日志标题 ActionLogModel::setRecord(session('userId'), ['type' => 1, 'title' => "删除VIP套餐信息", 'content' => json_encode(request()->post(), 256), 'module' => 'admin']); ActionLogModel::record(); $this->model->where('mark', 0)->where('update_time', '<=', time() - 7 * 86400)->delete(); return parent::delete(); } }