Browse Source

fix:简单增加验证

tags/freeze
白凤吉 3 months ago
parent
commit
0264d5c88a
  1. 1
      build.gradle
  2. 3
      src/main/java/com/iflytop/gd/app/controller/AuthController.java
  3. 3
      src/main/java/com/iflytop/gd/app/controller/CmdController.java
  4. 3
      src/main/java/com/iflytop/gd/app/controller/ContainerController.java
  5. 22
      src/main/java/com/iflytop/gd/app/controller/CraftsController.java
  6. 5
      src/main/java/com/iflytop/gd/app/controller/OresController.java
  7. 5
      src/main/java/com/iflytop/gd/app/controller/SolutionsController.java
  8. 6
      src/main/java/com/iflytop/gd/app/controller/UserController.java
  9. 2
      src/main/java/com/iflytop/gd/app/model/dto/PauseCraftsDto.java
  10. 2
      src/main/java/com/iflytop/gd/app/model/dto/ResumeCraftsDto.java
  11. 3
      src/main/java/com/iflytop/gd/app/model/dto/StartCraftsDTO.java
  12. 2
      src/main/java/com/iflytop/gd/app/model/dto/StopCraftsDto.java
  13. 1
      src/main/java/com/iflytop/gd/app/model/entity/Container.java
  14. 1
      src/main/java/com/iflytop/gd/app/model/entity/Crafts.java
  15. 36
      src/main/java/com/iflytop/gd/common/handler/GlobalExceptionHandler.java
  16. 2
      src/main/java/com/iflytop/gd/infrastructure/repository/entity/User.java

1
build.gradle

@ -36,6 +36,7 @@ dependencies {
implementation 'org.springframework.boot:spring-boot-starter-websocket:3.4.2'
implementation 'org.springframework.statemachine:spring-statemachine-core:4.0.0'
implementation 'org.xerial:sqlite-jdbc:3.48.0.0'
implementation 'org.springframework.boot:spring-boot-starter-validation:3.4.5'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'

3
src/main/java/com/iflytop/gd/app/controller/AuthController.java

@ -9,6 +9,7 @@ import com.iflytop.gd.infrastructure.repository.entity.User;
import com.iflytop.gd.infrastructure.repository.service.UserService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
@ -29,7 +30,7 @@ public class AuthController {
@Operation(summary = "账号密码登录")
@PostMapping("/login")
public Result<User> login(@RequestBody LoginDTO loginDTO) {
public Result<User> login(@Valid @RequestBody LoginDTO loginDTO) {
User user = userService.getOne(new LambdaQueryWrapper<>(User.class).eq(User::getUsername, loginDTO.getUsername()));
if (user != null && !Objects.equals(user.getDeleted(), Deleted.ENABLE) && user.getPassword().equals(loginDTO.getPassword())) {
userService.setCurrentUser(user);

3
src/main/java/com/iflytop/gd/app/controller/CmdController.java

@ -7,6 +7,7 @@ import com.iflytop.gd.app.service.exceptions.UnSupportCommandException;
import com.iflytop.gd.common.result.Result;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PostMapping;
@ -24,7 +25,7 @@ public class CmdController {
@Operation(summary = "前端统一调用一个接口")
@PostMapping
public Result<?> controlMethod(@RequestBody CmdDTO cmdDTO) {
public Result<?> controlMethod(@Valid @RequestBody CmdDTO cmdDTO) {
String commandName = cmdDTO.getCommand();
try {
CommandHandler commandHandler = registry.getCommandHandler(commandName);

3
src/main/java/com/iflytop/gd/app/controller/ContainerController.java

@ -5,6 +5,7 @@ import com.iflytop.gd.app.service.ContainerService;
import com.iflytop.gd.common.result.Result;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
@ -27,7 +28,7 @@ public class ContainerController {
@Operation(summary = "更新容器配置")
@PutMapping("")
public Result<Boolean> updateContainer(@RequestBody Container container) {
public Result<Boolean> updateContainer(@Valid @RequestBody Container container) {
return Result.success(containerService.updateById(container));
}
}

22
src/main/java/com/iflytop/gd/app/controller/CraftsController.java

@ -11,30 +11,38 @@ import com.iflytop.gd.common.result.ResultCode;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@Tag(name = "工艺管理")
@RestController
@RequestMapping("/api/crafts")
@RequiredArgsConstructor
@Slf4j
@Validated
public class CraftsController {
private final CraftsService craftsService;
@Operation(summary = "根据矿石id获取工艺列表")
@GetMapping("/list/{oresId}")
public Result<List<Crafts>> getAllCrafts(@Parameter(description = "矿石ID") @PathVariable Long oresId) {
public Result<List<Crafts>> getAllCrafts(@NotNull(message = "矿石ID 不能为空")
@Min(value = 1, message = "矿石ID 必须大于等于 1")
@Parameter(description = "矿石ID") @PathVariable Long oresId) {
List<Crafts> craftList = craftsService.selectAllByOresId(oresId);
return Result.success(craftList);
}
@Operation(summary = "添加新工艺")
@PostMapping("")
public Result<String> addCrafts(@RequestBody Crafts crafts) {
public Result<String> addCrafts(@Valid @RequestBody Crafts crafts) {
Crafts existingCrafts = craftsService.findByName(crafts.getName());
if (existingCrafts == null) {
boolean isSuccess = craftsService.addCrafts(crafts);
@ -49,7 +57,7 @@ public class CraftsController {
@Operation(summary = "更新工艺")
@PutMapping("")
public Result<String> updateCrafts(@RequestBody Crafts crafts) {
public Result<String> updateCrafts(@Valid @RequestBody Crafts crafts) {
boolean isSuccess = craftsService.updateCrafts(crafts);
if (isSuccess) {
return Result.success();
@ -69,7 +77,7 @@ public class CraftsController {
@Operation(summary = "开始执行工艺")
@PostMapping("/start")
public Result<String> startCrafts(@RequestBody StartCraftsDTO startCraftsDTO) {
public Result<String> startCrafts(@Valid @RequestBody StartCraftsDTO startCraftsDTO) {
boolean isSuccess = craftsService.startCrafts(startCraftsDTO.getCraftId(), startCraftsDTO.getHeatId());
if (isSuccess) {
return Result.success();
@ -79,21 +87,21 @@ public class CraftsController {
@Operation(summary = "暂停执行工艺")
@PostMapping("/pause")
public Result<String> pauseCrafts(@RequestBody PauseCraftsDto pauseCraftsDto) {
public Result<String> pauseCrafts(@Valid @RequestBody PauseCraftsDto pauseCraftsDto) {
craftsService.pauseCrafts(pauseCraftsDto.getHeatId());
return Result.success();
}
@Operation(summary = "恢复执行工艺")
@PostMapping("/resume")
public Result<String> resumeCrafts(@RequestBody ResumeCraftsDto resumeCraftsDto) {
public Result<String> resumeCrafts(@Valid @RequestBody ResumeCraftsDto resumeCraftsDto) {
craftsService.resumeCrafts(resumeCraftsDto.getHeatId());
return Result.success();
}
@Operation(summary = "停止执行工艺")
@PostMapping("/stop")
public Result<String> stopCrafts(@RequestBody StopCraftsDto stopCraftsDto) {
public Result<String> stopCrafts(@Valid @RequestBody StopCraftsDto stopCraftsDto) {
boolean isSuccess = craftsService.stopCrafts(stopCraftsDto.getHeatId());
if (isSuccess) {
return Result.success();

5
src/main/java/com/iflytop/gd/app/controller/OresController.java

@ -11,6 +11,7 @@ import com.iflytop.gd.common.result.ResultCode;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
@ -32,7 +33,7 @@ public class OresController {
@Operation(summary = "添加新矿石")
@PostMapping("")
public Result<String> addOres(@RequestBody Ores ores) {
public Result<String> addOres(@Valid @RequestBody Ores ores) {
Ores existingOres = oresService.findByName(ores.getName());
if (existingOres == null) {
boolean isSuccess = oresService.addOres(ores);
@ -47,7 +48,7 @@ public class OresController {
@Operation(summary = "更新矿石")
@PutMapping("")
public Result<String> updateOres(@RequestBody Ores ores) {
public Result<String> updateOres(@Valid @RequestBody Ores ores) {
Ores existingOres = oresService.findByName(ores.getName());
if (existingOres == null) {
boolean isSuccess = oresService.updateOres(ores);

5
src/main/java/com/iflytop/gd/app/controller/SolutionsController.java

@ -11,6 +11,7 @@ import com.iflytop.gd.infrastructure.repository.base.BasePageQuery;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
@ -32,7 +33,7 @@ public class SolutionsController {
@Operation(summary = "添加新溶液")
@PostMapping("")
public Result<String> addSolutions(@RequestBody Solutions solutions) {
public Result<String> addSolutions(@Valid @RequestBody Solutions solutions) {
Solutions existingSolutions = solutionsService.findByName(solutions.getName());
if (existingSolutions == null) {
boolean isSuccess = solutionsService.addSolutions(solutions);
@ -47,7 +48,7 @@ public class SolutionsController {
@Operation(summary = "更新溶液")
@PutMapping("")
public Result<String> updateSolutions(@RequestBody Solutions solutions) {
public Result<String> updateSolutions(@Valid @RequestBody Solutions solutions) {
Solutions existingSolutions = solutionsService.findByName(solutions.getName());
if (existingSolutions == null) {
boolean isSuccess = solutionsService.updateSolutions(solutions);

6
src/main/java/com/iflytop/gd/app/controller/UserController.java

@ -12,6 +12,7 @@ import com.iflytop.gd.infrastructure.repository.service.UserService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
@ -34,9 +35,10 @@ public class UserController {
@Operation(summary = "添加新用户")
@PostMapping("")
public Result<String> addUser(@RequestBody User user) {
public Result<String> addUser(@Valid @RequestBody User user) {
User existingUser = userService.getOne(new LambdaQueryWrapper<User>().eq(User::getUsername, user.getUsername()));
if (existingUser == null) {
user.setFixedUser(null);
boolean isSuccess = userService.save(user);
if (isSuccess) {
return Result.success();
@ -49,7 +51,7 @@ public class UserController {
@Operation(summary = "更新用户信息")
@PutMapping("")
public Result<String> updateUser(@RequestBody User user) {
public Result<String> updateUser(@Valid @RequestBody User user) {
boolean isSuccess = userService.updateById(user);
if (isSuccess) {
return Result.success();

2
src/main/java/com/iflytop/gd/app/model/dto/PauseCraftsDto.java

@ -1,11 +1,13 @@
package com.iflytop.gd.app.model.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;
@Schema(description = "暂停执行工艺")
@Data
public class PauseCraftsDto {
@NotBlank
@Schema(description = "加热区id")
private String heatId;
}

2
src/main/java/com/iflytop/gd/app/model/dto/ResumeCraftsDto.java

@ -1,11 +1,13 @@
package com.iflytop.gd.app.model.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;
@Schema(description = "恢复执行工艺")
@Data
public class ResumeCraftsDto {
@NotBlank
@Schema(description = "加热区id")
private String heatId;
}

3
src/main/java/com/iflytop/gd/app/model/dto/StartCraftsDTO.java

@ -1,13 +1,16 @@
package com.iflytop.gd.app.model.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;
@Schema(description = "开始工艺")
@Data
public class StartCraftsDTO {
@NotBlank
@Schema(description = "工艺id")
private Long craftId;
@NotBlank
@Schema(description = "加热区id")
private String heatId;
}

2
src/main/java/com/iflytop/gd/app/model/dto/StopCraftsDto.java

@ -1,11 +1,13 @@
package com.iflytop.gd.app.model.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;
@Schema(description = "恢复执行工艺")
@Data
public class StopCraftsDto {
@NotBlank
@Schema(description = "加热区id")
private String heatId;
}

1
src/main/java/com/iflytop/gd/app/model/entity/Container.java

@ -19,6 +19,7 @@ public class Container extends BaseEntity {
@Schema(description = "溶液id")
private Long solutionId;
@NotBlank
@Schema(description = "泵id")
private String pumpId;

1
src/main/java/com/iflytop/gd/app/model/entity/Crafts.java

@ -20,6 +20,7 @@ public class Crafts extends BaseEntity {
@Schema(description = "工艺步骤")
private String steps;
@NotBlank
@Schema(description = "矿石ID")
private Long oresId;
}

36
src/main/java/com/iflytop/gd/common/handler/GlobalExceptionHandler.java

@ -3,14 +3,50 @@ package com.iflytop.gd.common.handler;
import com.iflytop.gd.common.exception.AppException;
import com.iflytop.gd.common.result.Result;
import com.iflytop.gd.common.result.ResultCode;
import jakarta.validation.ConstraintViolationException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.BindException;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import java.util.stream.Collectors;
@Slf4j
@RestControllerAdvice
public class GlobalExceptionHandler {
// 1) JSON Body 校验失败
@ExceptionHandler(MethodArgumentNotValidException.class)
public Result<?> handleBodyValid(MethodArgumentNotValidException ex) {
String msg = ex.getBindingResult().getFieldErrors().stream()
.map(f -> f.getField() + ": " + f.getDefaultMessage())
.collect(Collectors.joining("; "));
return Result.failed(ResultCode.INVALID_PARAMETER.getCode(), msg);
}
// 2) 方法级参数校验失败PathVariable/RequestParam
@ExceptionHandler(ConstraintViolationException.class)
public Result<?> handleParamValid(ConstraintViolationException ex) {
String msg = ex.getConstraintViolations().stream()
.map(v -> {
String path = v.getPropertyPath().toString();
String field = path.substring(path.lastIndexOf('.') + 1);
return field + ": " + v.getMessage();
})
.collect(Collectors.joining("; "));
return Result.failed(ResultCode.INVALID_PARAMETER.getCode(), msg);
}
// 3) 表单绑定失败
@ExceptionHandler(BindException.class)
public Result<?> handleBind(BindException ex) {
String msg = ex.getFieldErrors().stream()
.map(f -> f.getField() + ": " + f.getDefaultMessage())
.collect(Collectors.joining("; "));
return Result.failed(ResultCode.INVALID_PARAMETER.getCode(), msg);
}
@ExceptionHandler(Exception.class)
public Result<?> handleException(Exception ex) {
if (ex instanceof AppException ae) {

2
src/main/java/com/iflytop/gd/infrastructure/repository/entity/User.java

@ -31,9 +31,11 @@ public class User extends BaseEntity {
@Schema(description = "密码")
private String password;
@NotBlank()
@Schema(description = "人员角色")
private UsrRole role;
@NotBlank()
@Schema(description = "是否删除(0-否 1-是)")
private Deleted deleted;

Loading…
Cancel
Save