From 0e4a870f88948873268bd4c2020172632b9efbcd Mon Sep 17 00:00:00 2001 From: "zhangf@suq.cn" Date: Thu, 18 Dec 2025 14:18:43 +0800 Subject: [PATCH] =?UTF-8?q?feat(admin):=20=E6=96=B0=E5=A2=9E=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E5=A5=97=E9=A4=90=E7=AE=A1=E7=90=86=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加用户套餐控制器及路由配置 - 实现用户当前套餐查询接口 - 实现管理员分配套餐接口 - 增加用户套餐模型时间格式化方法 - 创建套餐服务层处理业务逻辑 - 添加套餐参数验证规则 --- app/controller/admin/UserPackageController.php | 32 +++++++++++ app/model/user/UserPackage.php | 4 ++ app/route/admin.php | 13 ++++- app/service/admin/UserPackageService.php | 75 ++++++++++++++++++++++++++ app/validate/UserPackageValidate.php | 27 ++++++++++ 5 files changed, 150 insertions(+), 1 deletion(-) create mode 100644 app/controller/admin/UserPackageController.php create mode 100644 app/service/admin/UserPackageService.php create mode 100644 app/validate/UserPackageValidate.php diff --git a/app/controller/admin/UserPackageController.php b/app/controller/admin/UserPackageController.php new file mode 100644 index 0000000..f23a7e1 --- /dev/null +++ b/app/controller/admin/UserPackageController.php @@ -0,0 +1,32 @@ +readData($id)); + } + + public function give(UserPackageService $service): Response + { + $params = requestOnly([ + 'uid' => '', + 'package_id' => '', + 'package_name' => '', + 'package_level' => '', + 'point' => '', + 'end_time' => '', + ]); + validate(UserPackageValidate::class)->check($params, 'update'); + return success($service->updateData(ArrayUtils::filterNotEmpty($params))); + } + +} \ No newline at end of file diff --git a/app/model/user/UserPackage.php b/app/model/user/UserPackage.php index c8f2070..0b9e0bf 100644 --- a/app/model/user/UserPackage.php +++ b/app/model/user/UserPackage.php @@ -30,4 +30,8 @@ class UserPackage extends BaseModel */ public $timestamps = true; + public function getEndTimeAttr($value): string + { + return date('Y-m-d H:i:s', $value); + } } \ No newline at end of file diff --git a/app/route/admin.php b/app/route/admin.php index b9a3d84..27462f4 100644 --- a/app/route/admin.php +++ b/app/route/admin.php @@ -5,6 +5,7 @@ use app\controller\admin\OnlineMediasConfigController; use app\controller\admin\OnlineMediasController; use app\controller\admin\PackageController; use app\controller\admin\PointDeductConfigController; +use app\controller\admin\UserPackageController; use plugin\piadmin\app\middleware\AdminAuthorizationMiddleware; use plugin\piadmin\app\middleware\PermissionsMiddleware; use Webman\Route; @@ -22,6 +23,16 @@ Route::group('/service/v1', function () { //需要登录 Route::group('/service/v1', function () { + //用户定制功能 + Route::group('/user', function () { + Route::group('/package', function () { + //用户当前套餐 + Route::get('/read', [UserPackageController::class, 'read'])->setParams(['perm' => ['userCurrentPackage']]); + //分配套餐 + Route::post('/give', [UserPackageController::class, 'give'])->setParams(['perm' => ['userPackageGive']]); + }); + }); + //媒介圈 Route::group('/meijiequan', function () { Route::get('/syncResource', [ApiController::class, 'syncResource'])->setParams(['perm' => ['meijiequanSyncResource']]); @@ -38,7 +49,7 @@ Route::group('/service/v1', function () { //媒体圈媒体数据 Route::group('/medias', function () { - //网媒 + //网媒model_id-1 自媒体model_id-2 Route::get('/online', [OnlineMediasController::class, 'index']); }); diff --git a/app/service/admin/UserPackageService.php b/app/service/admin/UserPackageService.php new file mode 100644 index 0000000..e94748d --- /dev/null +++ b/app/service/admin/UserPackageService.php @@ -0,0 +1,75 @@ +dao = $dao; + $this->userPointLogDao = app()->make(UserPointLogDao::class); + } + + + /** + * 修改信息 + * @param array $params + * @return array + */ + public function updateData(array $params): array + { + // 落库 + Db::startTrans(); + try { + $params['end_time'] = strtotime($params['end_time']); + $this->dao->update(['uid' => $params['uid']], $params); + //记录日志 + $this->userPointLogDao->save([ + 'uid' => $params['uid'], + 'type' => 3, + 'point' => $params['point'], + 'desc' => '管理员调整权益点数', + 'code' => 'userPackageGive', + 'balance' => $params['point'] + ]); + Db::commit(); + } catch (\Exception $exception) { + Db::rollback(); + throw new ApiException($exception->getMessage()); + } + return $params; + } + + + /** + * 获取信息 + * @param mixed $id + * @return array + */ + public function readData(mixed $id): array + { + $package = $this->dao->get(['uid' => $id]); + if (empty($package)) { + $package = $this->dao->save([ + 'uid' => $id, + 'package_id' => 0, + 'package_name' => '', + 'package_level' => '', + 'point' => 0, + 'end_time' => 0, + ]); + } + return $package->toArray(); + } + +} \ No newline at end of file diff --git a/app/validate/UserPackageValidate.php b/app/validate/UserPackageValidate.php new file mode 100644 index 0000000..5abd74e --- /dev/null +++ b/app/validate/UserPackageValidate.php @@ -0,0 +1,27 @@ + [ + 'uid' => 'require', + 'package_id' => 'require', + 'package_name' => 'require', + 'package_level' => 'require', + 'point' => 'require', + 'end_time' => 'require', + ], + ]; + protected $message = [ + 'uid.require' => '用户ID不能为空', + 'package_id.require' => '套餐ID不能为空', + 'package_name.require' => '套餐名称不能为空', + 'package_level.require' => '套餐等级不能为空', + 'point.require' => '可得积分不能为空', + 'end_time.require' => '权益到期时间不能为空', + ]; +} \ No newline at end of file