新增配置中心
Some checks failed
CI Build and Test / build (push) Has been cancelled
Deploy to Server / build-and-deploy (push) Has been cancelled

This commit is contained in:
2025-10-21 11:35:57 +08:00
parent 928bb078f0
commit b81db11bfc
12 changed files with 995 additions and 17 deletions

View File

@@ -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') {

View File

@@ -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未找到参数配置 |
| 无权限操作该参数 | 只能操作自己创建的参数配置 |
| 下载成功 | 下载次数增加成功 |
| 下载失败 | 下载次数增加失败 |

View File

@@ -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<String> 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<String> 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<String> 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<AppParamsCenter> 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<List<AppParamsCenter>> listAll(@RequestParam(required = false) String fcModel) {
try {
List<AppParamsCenter> list = paramsService.listAllByFcModel(fcModel);
return Result.success(list);
} catch (Exception e) {
return Result.error(e.getMessage());
}
}
/**
* 查询当前用户的参数列表(支持飞控型号过滤)
*/
@GetMapping("/my/list")
public Result<List<AppParamsCenter>> listMy(@RequestParam(required = false) String fcModel) {
try {
Long userId = StpUtil.getLoginIdAsLong();
List<AppParamsCenter> list = paramsService.listByUserIdAndFcModel(userId, fcModel);
return Result.success(list);
} catch (Exception e) {
return Result.error(e.getMessage());
}
}
/**
* 分页查询所有参数列表(公开接口,支持飞控型号过滤)
*/
@GetMapping("/all/page")
public Result<IPage<AppParamsCenter>> pageAll(
@RequestParam(defaultValue = "1") Long current,
@RequestParam(defaultValue = "10") Long size,
@RequestParam(required = false) String fcModel) {
try {
Page<AppParamsCenter> page = new Page<>(current, size);
IPage<AppParamsCenter> result = paramsService.pageAllByFcModel(fcModel, page);
return Result.success(result);
} catch (Exception e) {
return Result.error(e.getMessage());
}
}
/**
* 分页查询当前用户的参数列表(支持飞控型号过滤)
*/
@GetMapping("/my/page")
public Result<IPage<AppParamsCenter>> pageMy(
@RequestParam(defaultValue = "1") Long current,
@RequestParam(defaultValue = "10") Long size,
@RequestParam(required = false) String fcModel) {
try {
Long userId = StpUtil.getLoginIdAsLong();
Page<AppParamsCenter> page = new Page<>(current, size);
IPage<AppParamsCenter> result = paramsService.pageByUserIdAndFcModel(userId, fcModel, page);
return Result.success(result);
} catch (Exception e) {
return Result.error(e.getMessage());
}
}
/**
* 增加下载次数
*/
@PostMapping("/{id}/download")
public Result<String> 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());
}
}
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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<AppParamsCenter> {
}

View File

@@ -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<AppParamsCenter> {
/**
* 根据用户ID查询参数列表
*
* @param userId 用户ID
* @return 参数列表
*/
List<AppParamsCenter> listByUserId(Long userId);
/**
* 根据用户ID和飞控型号查询参数列表
*
* @param userId 用户ID
* @param fcModel 飞控型号
* @return 参数列表
*/
List<AppParamsCenter> listByUserIdAndFcModel(Long userId, String fcModel);
/**
* 分页查询用户的参数列表
*
* @param userId 用户ID
* @param page 分页对象
* @return 分页结果
*/
IPage<AppParamsCenter> pageByUserId(Long userId, Page<AppParamsCenter> page);
/**
* 分页查询用户的参数列表(支持飞控型号过滤)
*
* @param userId 用户ID
* @param fcModel 飞控型号(可选)
* @param page 分页对象
* @return 分页结果
*/
IPage<AppParamsCenter> pageByUserIdAndFcModel(Long userId, String fcModel, Page<AppParamsCenter> page);
/**
* 查询所有参数列表
*
* @return 参数列表
*/
List<AppParamsCenter> listAll();
/**
* 根据飞控型号查询所有参数列表
*
* @param fcModel 飞控型号
* @return 参数列表
*/
List<AppParamsCenter> listAllByFcModel(String fcModel);
/**
* 分页查询所有参数列表(支持飞控型号过滤)
*
* @param fcModel 飞控型号(可选)
* @param page 分页对象
* @return 分页结果
*/
IPage<AppParamsCenter> pageAllByFcModel(String fcModel, Page<AppParamsCenter> page);
}

View File

@@ -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<AppParamsCenterMapper, AppParamsCenter> implements AppParamsCenterService {
@Override
public List<AppParamsCenter> listByUserId(Long userId) {
LambdaQueryWrapper<AppParamsCenter> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(AppParamsCenter::getUserId, userId)
.orderByDesc(AppParamsCenter::getUpdateTime);
return this.list(wrapper);
}
@Override
public List<AppParamsCenter> listByUserIdAndFcModel(Long userId, String fcModel) {
LambdaQueryWrapper<AppParamsCenter> 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<AppParamsCenter> pageByUserId(Long userId, Page<AppParamsCenter> page) {
LambdaQueryWrapper<AppParamsCenter> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(AppParamsCenter::getUserId, userId)
.orderByDesc(AppParamsCenter::getUpdateTime);
return this.page(page, wrapper);
}
@Override
public IPage<AppParamsCenter> pageByUserIdAndFcModel(Long userId, String fcModel, Page<AppParamsCenter> page) {
LambdaQueryWrapper<AppParamsCenter> 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<AppParamsCenter> listAll() {
LambdaQueryWrapper<AppParamsCenter> wrapper = new LambdaQueryWrapper<>();
wrapper.orderByDesc(AppParamsCenter::getUpdateTime);
return this.list(wrapper);
}
@Override
public List<AppParamsCenter> listAllByFcModel(String fcModel) {
LambdaQueryWrapper<AppParamsCenter> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(StringUtils.hasText(fcModel), AppParamsCenter::getFcModel, fcModel)
.orderByDesc(AppParamsCenter::getUpdateTime);
return this.list(wrapper);
}
@Override
public IPage<AppParamsCenter> pageAllByFcModel(String fcModel, Page<AppParamsCenter> page) {
LambdaQueryWrapper<AppParamsCenter> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(StringUtils.hasText(fcModel), AppParamsCenter::getFcModel, fcModel)
.orderByDesc(AppParamsCenter::getUpdateTime);
return this.page(page, wrapper);
}
}

View File

@@ -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='参数配置中心表';

View File

@@ -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

View File

@@ -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=下载失败