From b81db11bfc1b441ab9e786948d9c2330777408f8 Mon Sep 17 00:00:00 2001 From: zhoujinhua Date: Tue, 21 Oct 2025 11:35:57 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E9=85=8D=E7=BD=AE=E4=B8=AD?= =?UTF-8?q?=E5=BF=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 34 +- docs/API接口说明-参数配置中心.md | 383 ++++++++++++++++++ .../controller/AppParamsCenterController.java | 228 +++++++++++ .../corewing/app/dto/CreateParamRequest.java | 41 ++ .../corewing/app/dto/UpdateParamRequest.java | 48 +++ .../corewing/app/entity/AppParamsCenter.java | 74 ++++ .../app/mapper/AppParamsCenterMapper.java | 13 + .../app/service/AppParamsCenterService.java | 74 ++++ .../impl/AppParamsCenterServiceImpl.java | 77 ++++ src/main/resources/db/app_params_center.sql | 14 + .../resources/i18n/messages_en_US.properties | 13 + .../resources/i18n/messages_zh_CN.properties | 13 + 12 files changed, 995 insertions(+), 17 deletions(-) create mode 100644 docs/API接口说明-参数配置中心.md create mode 100644 src/main/java/com/corewing/app/controller/AppParamsCenterController.java create mode 100644 src/main/java/com/corewing/app/dto/CreateParamRequest.java create mode 100644 src/main/java/com/corewing/app/dto/UpdateParamRequest.java create mode 100644 src/main/java/com/corewing/app/entity/AppParamsCenter.java create mode 100644 src/main/java/com/corewing/app/mapper/AppParamsCenterMapper.java create mode 100644 src/main/java/com/corewing/app/service/AppParamsCenterService.java create mode 100644 src/main/java/com/corewing/app/service/impl/AppParamsCenterServiceImpl.java create mode 100644 src/main/resources/db/app_params_center.sql diff --git a/build.gradle b/build.gradle index 119f58d..4e9d5f4 100644 --- a/build.gradle +++ b/build.gradle @@ -24,23 +24,23 @@ dependencyManagement { } } dependencies { - implementation 'org.springframework.boot:spring-boot-starter-data-jdbc' - implementation 'org.springframework.boot:spring-boot-starter-data-redis' - implementation 'org.springframework.boot:spring-boot-starter-jdbc' - implementation 'org.springframework.boot:spring-boot-starter-web' - implementation 'org.springframework.boot:spring-boot-starter-validation' - implementation 'org.springframework.boot:spring-boot-starter-mail' - implementation 'com.baomidou:mybatis-plus-boot-starter' - implementation 'com.baomidou:mybatis-plus-generator' - implementation("com.baomidou:mybatis-plus-jsqlparser") - implementation 'cn.dev33:sa-token-spring-boot-starter:1.44.0' - implementation 'com.alibaba:druid-spring-boot-starter:1.2.27' - implementation 'org.lionsoul:ip2region:2.7.0' - compileOnly 'org.projectlombok:lombok' - developmentOnly 'org.springframework.boot:spring-boot-devtools' - runtimeOnly 'com.mysql:mysql-connector-j' - annotationProcessor 'org.projectlombok:lombok' - testImplementation 'org.springframework.boot:spring-boot-starter-test' + implementation 'org.springframework.boot:spring-boot-starter-data-jdbc' // Spring Data JDBC + implementation 'org.springframework.boot:spring-boot-starter-data-redis' // Redis 缓存 + implementation 'org.springframework.boot:spring-boot-starter-jdbc' // JDBC 支持 + implementation 'org.springframework.boot:spring-boot-starter-web' // Web MVC + implementation 'org.springframework.boot:spring-boot-starter-validation' // 参数校验 + implementation 'org.springframework.boot:spring-boot-starter-mail' // 邮件发送 + implementation 'com.baomidou:mybatis-plus-boot-starter' // MyBatis Plus + implementation 'com.baomidou:mybatis-plus-generator' // 代码生成器 + implementation("com.baomidou:mybatis-plus-jsqlparser") // SQL 解析器 + implementation 'cn.dev33:sa-token-spring-boot-starter:1.44.0' // 权限认证 + implementation 'com.alibaba:druid-spring-boot-starter:1.2.27' // 数据库连接池 + implementation 'org.lionsoul:ip2region:2.7.0' // IP 归属地 + compileOnly 'org.projectlombok:lombok' // Lombok + developmentOnly 'org.springframework.boot:spring-boot-devtools' // 热重载 + runtimeOnly 'com.mysql:mysql-connector-j' // MySQL 驱动 + annotationProcessor 'org.projectlombok:lombok' // Lombok 注解处理 + testImplementation 'org.springframework.boot:spring-boot-starter-test' // 测试框架 } tasks.named('test') { diff --git a/docs/API接口说明-参数配置中心.md b/docs/API接口说明-参数配置中心.md new file mode 100644 index 0000000..113b0a8 --- /dev/null +++ b/docs/API接口说明-参数配置中心.md @@ -0,0 +1,383 @@ +# API 接口说明 - 参数配置中心 + +## 参数配置中心相关接口 + +### 1. 创建参数配置 + +**接口地址:** `POST /params` + +**请求头:** +``` +Authorization: your-token(必填) +``` + +**请求参数:** +```json +{ + "paramName": "默认参数配置", // 参数名称(必填) + "fcModel": "Pixhawk 4", // 飞控型号(必填) + "fcType": "PX4", // 飞控类型(必填) + "paramVersion": "1.0.0", // 参数版本(必填) + "paramDetail": "参数详细配置内容..." // 参数详情(可选) +} +``` + +**响应示例:** +```json +{ + "code": 200, + "message": "参数创建成功", + "data": null +} +``` + +--- + +### 2. 更新参数配置 + +**接口地址:** `PUT /params` + +**请求头:** +``` +Authorization: your-token(必填) +``` + +**请求参数:** +```json +{ + "id": 1, // 参数ID(必填) + "paramName": "更新后的参数配置", // 参数名称(必填) + "fcModel": "Pixhawk 6X", // 飞控型号(必填) + "fcType": "PX4", // 飞控类型(必填) + "paramVersion": "1.0.1", // 参数版本(必填) + "paramDetail": "更新后的参数详情..." // 参数详情(可选) +} +``` + +**响应示例:** +```json +{ + "code": 200, + "message": "参数更新成功", + "data": null +} +``` + +**说明:** +- 只能更新自己创建的参数配置 + +--- + +### 3. 删除参数配置 + +**接口地址:** `DELETE /params/{id}` + +**请求头:** +``` +Authorization: your-token(必填) +``` + +**响应示例:** +```json +{ + "code": 200, + "message": "参数删除成功", + "data": null +} +``` + +**说明:** +- 只能删除自己创建的参数配置 + +--- + +### 4. 根据ID查询参数配置 + +**接口地址:** `GET /params/{id}` + +**请求头:** +``` +Authorization: your-token(必填) +``` + +**响应示例:** +```json +{ + "code": 200, + "message": "success", + "data": { + "id": 1, + "userId": 1, + "paramName": "默认参数配置", + "fcModel": "Pixhawk 4", + "fcType": "PX4", + "paramVersion": "1.0.0", + "paramDetail": "参数详细配置内容...", + "downloadCount": 10, + "createTime": "2025-01-01T12:00:00", + "updateTime": "2025-01-01T12:00:00" + } +} +``` + +**说明:** +- 只能查询自己创建的参数配置 + +--- + +### 5. 查询所有参数列表(公开) + +**接口地址:** `GET /params/all/list` + +**请求头:** +``` +无需认证 +``` + +**请求参数:** +``` +fcModel: 飞控型号(可选,用于筛选) +``` + +**请求示例:** +``` +GET /params/all/list +GET /params/all/list?fcModel=Pixhawk%204 +``` + +**响应示例:** +```json +{ + "code": 200, + "message": "success", + "data": [ + { + "id": 1, + "userId": 1, + "paramName": "默认参数配置", + "fcModel": "Pixhawk 4", + "fcType": "PX4", + "paramVersion": "1.0.0", + "paramDetail": "参数详细配置内容...", + "downloadCount": 10, + "createTime": "2025-01-01T12:00:00", + "updateTime": "2025-01-01T12:00:00" + } + ] +} +``` + +**说明:** +- 返回所有用户创建的参数配置 +- 支持按飞控型号过滤 +- 按更新时间倒序排序 +- 不需要登录 + +--- + +### 6. 分页查询所有参数列表(公开) + +**接口地址:** `GET /params/all/page` + +**请求头:** +``` +无需认证 +``` + +**请求参数:** +``` +current: 当前页码(默认1) +size: 每页数量(默认10) +fcModel: 飞控型号(可选,用于筛选) +``` + +**请求示例:** +``` +GET /params/all/page?current=1&size=10 +GET /params/all/page?current=1&size=10&fcModel=Pixhawk%204 +``` + +**响应示例:** +```json +{ + "code": 200, + "message": "success", + "data": { + "records": [ + { + "id": 1, + "userId": 1, + "paramName": "默认参数配置", + "fcModel": "Pixhawk 4", + "fcType": "PX4", + "paramVersion": "1.0.0", + "paramDetail": "参数详细配置内容...", + "downloadCount": 10, + "createTime": "2025-01-01T12:00:00", + "updateTime": "2025-01-01T12:00:00" + } + ], + "total": 50, + "size": 10, + "current": 1, + "pages": 5 + } +} +``` + +**说明:** +- 返回所有用户创建的参数配置 +- 支持分页和飞控型号过滤 +- 按更新时间倒序排序 +- 不需要登录 + +--- + +### 7. 查询我的参数列表 + +**接口地址:** `GET /params/my/list` + +**请求头:** +``` +Authorization: your-token(必填) +``` + +**请求参数:** +``` +fcModel: 飞控型号(可选,用于筛选) +``` + +**请求示例:** +``` +GET /params/my/list +GET /params/my/list?fcModel=Pixhawk%204 +``` + +**响应示例:** +```json +{ + "code": 200, + "message": "success", + "data": [ + { + "id": 1, + "userId": 1, + "paramName": "默认参数配置", + "fcModel": "Pixhawk 4", + "fcType": "PX4", + "paramVersion": "1.0.0", + "paramDetail": "参数详细配置内容...", + "downloadCount": 10, + "createTime": "2025-01-01T12:00:00", + "updateTime": "2025-01-01T12:00:00" + } + ] +} +``` + +**说明:** +- 返回当前用户创建的所有参数配置 +- 支持按飞控型号过滤 +- 按更新时间倒序排序 + +--- + +### 8. 分页查询我的参数列表 + +**接口地址:** `GET /params/my/page` + +**请求头:** +``` +Authorization: your-token(必填) +``` + +**请求参数:** +``` +current: 当前页码(默认1) +size: 每页数量(默认10) +fcModel: 飞控型号(可选,用于筛选) +``` + +**请求示例:** +``` +GET /params/my/page?current=1&size=10 +GET /params/my/page?current=1&size=10&fcModel=Pixhawk%204 +``` + +**响应示例:** +```json +{ + "code": 200, + "message": "success", + "data": { + "records": [ + { + "id": 1, + "userId": 1, + "paramName": "默认参数配置", + "fcModel": "Pixhawk 4", + "fcType": "PX4", + "paramVersion": "1.0.0", + "paramDetail": "参数详细配置内容...", + "downloadCount": 10, + "createTime": "2025-01-01T12:00:00", + "updateTime": "2025-01-01T12:00:00" + } + ], + "total": 50, + "size": 10, + "current": 1, + "pages": 5 + } +} +``` + +**说明:** +- 返回当前用户创建的参数配置 +- 支持分页和飞控型号过滤 +- 按更新时间倒序排序 + +--- + +### 9. 下载 + +**接口地址:** `POST /params/{id}/download` + +**请求头:** +``` +无需认证 +``` + +**响应示例:** +```json +{ + "code": 200, + "message": "下载成功", + "data": null +} +``` + + +--- + +## 错误码说明 + +| 错误码 | 说明 | +|--------|------| +| 200 | 成功 | +| 500 | 失败 | + +**常见错误消息:** + +| 消息 | 说明 | +|------|------| +| 参数创建成功 | 创建参数配置成功 | +| 参数创建失败 | 创建参数配置失败 | +| 参数更新成功 | 更新参数配置成功 | +| 参数更新失败 | 更新参数配置失败 | +| 参数删除成功 | 删除参数配置成功 | +| 参数删除失败 | 删除参数配置失败 | +| 参数不存在 | 根据ID未找到参数配置 | +| 无权限操作该参数 | 只能操作自己创建的参数配置 | +| 下载成功 | 下载次数增加成功 | +| 下载失败 | 下载次数增加失败 | diff --git a/src/main/java/com/corewing/app/controller/AppParamsCenterController.java b/src/main/java/com/corewing/app/controller/AppParamsCenterController.java new file mode 100644 index 0000000..1074487 --- /dev/null +++ b/src/main/java/com/corewing/app/controller/AppParamsCenterController.java @@ -0,0 +1,228 @@ +package com.corewing.app.controller; + +import cn.dev33.satoken.stp.StpUtil; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.corewing.app.common.Result; +import com.corewing.app.dto.CreateParamRequest; +import com.corewing.app.dto.UpdateParamRequest; +import com.corewing.app.entity.AppParamsCenter; +import com.corewing.app.service.AppParamsCenterService; +import com.corewing.app.util.I18nUtil; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.List; + +/** + * 参数配置中心 Controller + */ +@RestController +@RequestMapping("/params") +public class AppParamsCenterController { + + private final AppParamsCenterService paramsService; + + public AppParamsCenterController(AppParamsCenterService paramsService) { + this.paramsService = paramsService; + } + + /** + * 创建参数配置 + */ + @PostMapping + public Result create(@Valid @RequestBody CreateParamRequest request) { + try { + Long userId = StpUtil.getLoginIdAsLong(); + + AppParamsCenter params = new AppParamsCenter(); + params.setUserId(userId); + params.setParamName(request.getParamName()); + params.setFcModel(request.getFcModel()); + params.setFcType(request.getFcType()); + params.setParamVersion(request.getParamVersion()); + params.setParamDetail(request.getParamDetail()); + params.setDownloadCount(0); // 初始化下载次数为0 + + boolean success = paramsService.save(params); + if (success) { + return Result.success(I18nUtil.getMessage("params.create.success")); + } + return Result.error(I18nUtil.getMessage("params.create.failed")); + } catch (Exception e) { + return Result.error(e.getMessage()); + } + } + + /** + * 更新参数配置 + */ + @PutMapping + public Result update(@Valid @RequestBody UpdateParamRequest request) { + try { + Long userId = StpUtil.getLoginIdAsLong(); + + // 先查询参数是否存在且属于当前用户 + AppParamsCenter existingParam = paramsService.getById(request.getId()); + if (existingParam == null) { + return Result.error(I18nUtil.getMessage("params.not.found")); + } + if (!existingParam.getUserId().equals(userId)) { + return Result.error(I18nUtil.getMessage("params.no.permission")); + } + + AppParamsCenter params = new AppParamsCenter(); + params.setId(request.getId()); + params.setParamName(request.getParamName()); + params.setFcModel(request.getFcModel()); + params.setFcType(request.getFcType()); + params.setParamVersion(request.getParamVersion()); + params.setParamDetail(request.getParamDetail()); + + boolean success = paramsService.updateById(params); + if (success) { + return Result.success(I18nUtil.getMessage("params.update.success")); + } + return Result.error(I18nUtil.getMessage("params.update.failed")); + } catch (Exception e) { + return Result.error(e.getMessage()); + } + } + + /** + * 删除参数配置 + */ + @DeleteMapping("/{id}") + public Result delete(@PathVariable Long id) { + try { + Long userId = StpUtil.getLoginIdAsLong(); + + // 先查询参数是否存在且属于当前用户 + AppParamsCenter existingParam = paramsService.getById(id); + if (existingParam == null) { + return Result.error(I18nUtil.getMessage("params.not.found")); + } + if (!existingParam.getUserId().equals(userId)) { + return Result.error(I18nUtil.getMessage("params.no.permission")); + } + + boolean success = paramsService.removeById(id); + if (success) { + return Result.success(I18nUtil.getMessage("params.delete.success")); + } + return Result.error(I18nUtil.getMessage("params.delete.failed")); + } catch (Exception e) { + return Result.error(e.getMessage()); + } + } + + /** + * 根据ID查询参数配置 + */ + @GetMapping("/{id}") + public Result getById(@PathVariable Long id) { + try { + Long userId = StpUtil.getLoginIdAsLong(); + + AppParamsCenter params = paramsService.getById(id); + if (params == null) { + return Result.error(I18nUtil.getMessage("params.not.found")); + } + if (!params.getUserId().equals(userId)) { + return Result.error(I18nUtil.getMessage("params.no.permission")); + } + + return Result.success(params); + } catch (Exception e) { + return Result.error(e.getMessage()); + } + } + + /** + * 查询所有参数列表(公开接口,支持飞控型号过滤) + */ + @GetMapping("/all/list") + public Result> listAll(@RequestParam(required = false) String fcModel) { + try { + List list = paramsService.listAllByFcModel(fcModel); + return Result.success(list); + } catch (Exception e) { + return Result.error(e.getMessage()); + } + } + + /** + * 查询当前用户的参数列表(支持飞控型号过滤) + */ + @GetMapping("/my/list") + public Result> listMy(@RequestParam(required = false) String fcModel) { + try { + Long userId = StpUtil.getLoginIdAsLong(); + List list = paramsService.listByUserIdAndFcModel(userId, fcModel); + return Result.success(list); + } catch (Exception e) { + return Result.error(e.getMessage()); + } + } + + /** + * 分页查询所有参数列表(公开接口,支持飞控型号过滤) + */ + @GetMapping("/all/page") + public Result> pageAll( + @RequestParam(defaultValue = "1") Long current, + @RequestParam(defaultValue = "10") Long size, + @RequestParam(required = false) String fcModel) { + try { + Page page = new Page<>(current, size); + IPage result = paramsService.pageAllByFcModel(fcModel, page); + return Result.success(result); + } catch (Exception e) { + return Result.error(e.getMessage()); + } + } + + /** + * 分页查询当前用户的参数列表(支持飞控型号过滤) + */ + @GetMapping("/my/page") + public Result> pageMy( + @RequestParam(defaultValue = "1") Long current, + @RequestParam(defaultValue = "10") Long size, + @RequestParam(required = false) String fcModel) { + try { + Long userId = StpUtil.getLoginIdAsLong(); + Page page = new Page<>(current, size); + IPage result = paramsService.pageByUserIdAndFcModel(userId, fcModel, page); + return Result.success(result); + } catch (Exception e) { + return Result.error(e.getMessage()); + } + } + + /** + * 增加下载次数 + */ + @PostMapping("/{id}/download") + public Result incrementDownloadCount(@PathVariable Long id) { + try { + AppParamsCenter params = paramsService.getById(id); + if (params == null) { + return Result.error(I18nUtil.getMessage("params.not.found")); + } + + // 增加下载次数 + AppParamsCenter updateParams = new AppParamsCenter(); + updateParams.setId(id); + updateParams.setDownloadCount(params.getDownloadCount() + 1); + + boolean success = paramsService.updateById(updateParams); + if (success) { + return Result.success(I18nUtil.getMessage("params.download.success")); + } + return Result.error(I18nUtil.getMessage("params.download.failed")); + } catch (Exception e) { + return Result.error(e.getMessage()); + } + } +} diff --git a/src/main/java/com/corewing/app/dto/CreateParamRequest.java b/src/main/java/com/corewing/app/dto/CreateParamRequest.java new file mode 100644 index 0000000..305e7d1 --- /dev/null +++ b/src/main/java/com/corewing/app/dto/CreateParamRequest.java @@ -0,0 +1,41 @@ +package com.corewing.app.dto; + +import lombok.Data; + +import javax.validation.constraints.NotBlank; + +/** + * 创建参数配置请求 + */ +@Data +public class CreateParamRequest { + + /** + * 参数名称 + */ + @NotBlank(message = "参数名称不能为空") + private String paramName; + + /** + * 飞控型号 + */ + @NotBlank(message = "飞控型号不能为空") + private String fcModel; + + /** + * 飞控类型 + */ + @NotBlank(message = "飞控类型不能为空") + private String fcType; + + /** + * 参数版本 + */ + @NotBlank(message = "参数版本不能为空") + private String paramVersion; + + /** + * 参数详情 + */ + private String paramDetail; +} diff --git a/src/main/java/com/corewing/app/dto/UpdateParamRequest.java b/src/main/java/com/corewing/app/dto/UpdateParamRequest.java new file mode 100644 index 0000000..7fdc26d --- /dev/null +++ b/src/main/java/com/corewing/app/dto/UpdateParamRequest.java @@ -0,0 +1,48 @@ +package com.corewing.app.dto; + +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +/** + * 更新参数配置请求 + */ +@Data +public class UpdateParamRequest { + + /** + * 参数ID + */ + @NotNull(message = "参数ID不能为空") + private Long id; + + /** + * 参数名称 + */ + @NotBlank(message = "参数名称不能为空") + private String paramName; + + /** + * 飞控型号 + */ + @NotBlank(message = "飞控型号不能为空") + private String fcModel; + + /** + * 飞控类型 + */ + @NotBlank(message = "飞控类型不能为空") + private String fcType; + + /** + * 参数版本 + */ + @NotBlank(message = "参数版本不能为空") + private String paramVersion; + + /** + * 参数详情 + */ + private String paramDetail; +} diff --git a/src/main/java/com/corewing/app/entity/AppParamsCenter.java b/src/main/java/com/corewing/app/entity/AppParamsCenter.java new file mode 100644 index 0000000..7767e8c --- /dev/null +++ b/src/main/java/com/corewing/app/entity/AppParamsCenter.java @@ -0,0 +1,74 @@ +package com.corewing.app.entity; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * 参数配置中心实体类 + */ +@Data +@TableName("app_params_center") +public class AppParamsCenter implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 用户ID + */ + private Long userId; + + /** + * 参数名称 + */ + private String paramName; + + /** + * 飞控型号 + */ + private String fcModel; + + /** + * 飞控类型 + */ + private String fcType; + + /** + * 参数版本 + */ + private String paramVersion; + + /** + * 参数详情 + */ + private String paramDetail; + + /** + * 下载次数 + */ + private Integer downloadCount; + + /** + * 创建时间 + */ + @TableField(fill = FieldFill.INSERT) + private LocalDateTime createTime; + + /** + * 更新时间 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private LocalDateTime updateTime; +} diff --git a/src/main/java/com/corewing/app/mapper/AppParamsCenterMapper.java b/src/main/java/com/corewing/app/mapper/AppParamsCenterMapper.java new file mode 100644 index 0000000..0ba1d09 --- /dev/null +++ b/src/main/java/com/corewing/app/mapper/AppParamsCenterMapper.java @@ -0,0 +1,13 @@ +package com.corewing.app.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.corewing.app.entity.AppParamsCenter; +import org.apache.ibatis.annotations.Mapper; + +/** + * 参数配置中心 Mapper 接口 + */ +@Mapper +public interface AppParamsCenterMapper extends BaseMapper { + +} diff --git a/src/main/java/com/corewing/app/service/AppParamsCenterService.java b/src/main/java/com/corewing/app/service/AppParamsCenterService.java new file mode 100644 index 0000000..7e9db5d --- /dev/null +++ b/src/main/java/com/corewing/app/service/AppParamsCenterService.java @@ -0,0 +1,74 @@ +package com.corewing.app.service; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.corewing.app.entity.AppParamsCenter; + +import java.util.List; + +/** + * 参数配置中心 Service 接口 + */ +public interface AppParamsCenterService extends IService { + + /** + * 根据用户ID查询参数列表 + * + * @param userId 用户ID + * @return 参数列表 + */ + List listByUserId(Long userId); + + /** + * 根据用户ID和飞控型号查询参数列表 + * + * @param userId 用户ID + * @param fcModel 飞控型号 + * @return 参数列表 + */ + List listByUserIdAndFcModel(Long userId, String fcModel); + + /** + * 分页查询用户的参数列表 + * + * @param userId 用户ID + * @param page 分页对象 + * @return 分页结果 + */ + IPage pageByUserId(Long userId, Page page); + + /** + * 分页查询用户的参数列表(支持飞控型号过滤) + * + * @param userId 用户ID + * @param fcModel 飞控型号(可选) + * @param page 分页对象 + * @return 分页结果 + */ + IPage pageByUserIdAndFcModel(Long userId, String fcModel, Page page); + + /** + * 查询所有参数列表 + * + * @return 参数列表 + */ + List listAll(); + + /** + * 根据飞控型号查询所有参数列表 + * + * @param fcModel 飞控型号 + * @return 参数列表 + */ + List listAllByFcModel(String fcModel); + + /** + * 分页查询所有参数列表(支持飞控型号过滤) + * + * @param fcModel 飞控型号(可选) + * @param page 分页对象 + * @return 分页结果 + */ + IPage pageAllByFcModel(String fcModel, Page page); +} diff --git a/src/main/java/com/corewing/app/service/impl/AppParamsCenterServiceImpl.java b/src/main/java/com/corewing/app/service/impl/AppParamsCenterServiceImpl.java new file mode 100644 index 0000000..5659ac6 --- /dev/null +++ b/src/main/java/com/corewing/app/service/impl/AppParamsCenterServiceImpl.java @@ -0,0 +1,77 @@ +package com.corewing.app.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.corewing.app.entity.AppParamsCenter; +import com.corewing.app.mapper.AppParamsCenterMapper; +import com.corewing.app.service.AppParamsCenterService; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import java.util.List; + +/** + * 参数配置中心 Service 实现类 + */ +@Service +public class AppParamsCenterServiceImpl extends ServiceImpl implements AppParamsCenterService { + + @Override + public List listByUserId(Long userId) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(AppParamsCenter::getUserId, userId) + .orderByDesc(AppParamsCenter::getUpdateTime); + return this.list(wrapper); + } + + @Override + public List listByUserIdAndFcModel(Long userId, String fcModel) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(AppParamsCenter::getUserId, userId) + .eq(StringUtils.hasText(fcModel), AppParamsCenter::getFcModel, fcModel) + .orderByDesc(AppParamsCenter::getUpdateTime); + return this.list(wrapper); + } + + @Override + public IPage pageByUserId(Long userId, Page page) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(AppParamsCenter::getUserId, userId) + .orderByDesc(AppParamsCenter::getUpdateTime); + return this.page(page, wrapper); + } + + @Override + public IPage pageByUserIdAndFcModel(Long userId, String fcModel, Page page) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(AppParamsCenter::getUserId, userId) + .eq(StringUtils.hasText(fcModel), AppParamsCenter::getFcModel, fcModel) + .orderByDesc(AppParamsCenter::getUpdateTime); + return this.page(page, wrapper); + } + + @Override + public List listAll() { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.orderByDesc(AppParamsCenter::getUpdateTime); + return this.list(wrapper); + } + + @Override + public List listAllByFcModel(String fcModel) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(StringUtils.hasText(fcModel), AppParamsCenter::getFcModel, fcModel) + .orderByDesc(AppParamsCenter::getUpdateTime); + return this.list(wrapper); + } + + @Override + public IPage pageAllByFcModel(String fcModel, Page page) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(StringUtils.hasText(fcModel), AppParamsCenter::getFcModel, fcModel) + .orderByDesc(AppParamsCenter::getUpdateTime); + return this.page(page, wrapper); + } +} diff --git a/src/main/resources/db/app_params_center.sql b/src/main/resources/db/app_params_center.sql new file mode 100644 index 0000000..2b35307 --- /dev/null +++ b/src/main/resources/db/app_params_center.sql @@ -0,0 +1,14 @@ +CREATE TABLE `app_params_center` ( + `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID', + `user_id` BIGINT NOT NULL COMMENT '用户ID', + `param_name` VARCHAR(100) NOT NULL COMMENT '参数名称', + `fc_model` VARCHAR(50) NOT NULL COMMENT '飞控型号', + `fc_type` VARCHAR(50) NOT NULL COMMENT '飞控类型', + `param_version` VARCHAR(20) NOT NULL COMMENT '参数版本', + `param_detail` TEXT COMMENT '参数详情', + `download_count` INT NOT NULL DEFAULT 0 COMMENT '下载次数', + `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + PRIMARY KEY (`id`), + INDEX `idx_user_id` (`user_id`) COMMENT '用户ID索引' +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='参数配置中心表'; diff --git a/src/main/resources/i18n/messages_en_US.properties b/src/main/resources/i18n/messages_en_US.properties index a6648ce..8f655b1 100644 --- a/src/main/resources/i18n/messages_en_US.properties +++ b/src/main/resources/i18n/messages_en_US.properties @@ -116,3 +116,16 @@ dingtalk.send.message=Sending DingTalk message: {0} dingtalk.push.success=DingTalk message pushed successfully, response: {0} dingtalk.push.failed=DingTalk message push failed, HTTP status code: {0}, response: {1} dingtalk.push.exception=DingTalk message push exception: {0} + +# ==================== Parameters Center Module ==================== +# Parameters Center Controller +params.create.success=Parameter created successfully +params.create.failed=Failed to create parameter +params.update.success=Parameter updated successfully +params.update.failed=Failed to update parameter +params.delete.success=Parameter deleted successfully +params.delete.failed=Failed to delete parameter +params.not.found=Parameter not found +params.no.permission=No permission to operate this parameter +params.download.success=Download successful +params.download.failed=Download failed diff --git a/src/main/resources/i18n/messages_zh_CN.properties b/src/main/resources/i18n/messages_zh_CN.properties index a3fc2f6..8dd8fb5 100644 --- a/src/main/resources/i18n/messages_zh_CN.properties +++ b/src/main/resources/i18n/messages_zh_CN.properties @@ -116,3 +116,16 @@ dingtalk.send.message=发送钉钉消息: {0} dingtalk.push.success=钉钉消息推送成功, 响应: {0} dingtalk.push.failed=钉钉消息推送失败, HTTP 状态码: {0}, 响应: {1} dingtalk.push.exception=钉钉消息推送异常: {0} + +# ==================== 参数配置中心模块 ==================== +# 参数配置Controller +params.create.success=参数创建成功 +params.create.failed=参数创建失败 +params.update.success=参数更新成功 +params.update.failed=参数更新失败 +params.delete.success=参数删除成功 +params.delete.failed=参数删除失败 +params.not.found=参数不存在 +params.no.permission=无权限操作该参数 +params.download.success=下载成功 +params.download.failed=下载失败