From 4c3997b628130df6ca28f0b159f2da4db22d96d9 Mon Sep 17 00:00:00 2001 From: dylan Date: Sat, 13 Mar 2021 00:43:07 +0800 Subject: [PATCH 01/13] =?UTF-8?q?=E5=AE=8C=E6=88=90=E9=94=99=E8=AF=AF?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dashboard/framework/validator/InEnum.java | 35 ++++ .../framework/validator/InEnumValidator.java | 44 +++++ .../errorcode/ErrorCodeController.java | 133 +++++++++++++ .../dto/ErrorCodeAutoGenerateDTO.java | 33 ++++ .../errorcode/dto/ErrorCodeCreateDTO.java | 45 +++++ .../errorcode/dto/ErrorCodePageDTO.java | 33 ++++ .../errorcode/dto/ErrorCodeUpdateDTO.java | 46 +++++ .../controller/errorcode/vo/ErrorCodeVO.java | 48 +++++ .../convert/errorcode/ErrorCodeConvert.java | 49 +++++ .../dal/dataobject/errorcode/ErrorCodeDO.java | 45 +++++ .../dal/mysql/errorcode/ErrorCodeMapper.java | 36 ++++ .../system/enums/SysErrorCodeConstants.java | 5 + .../enums/errorcode/ErrorCodeTypeEnum.java | 38 ++++ .../service/errorcode/ErrorCodeService.java | 183 ++++++++++++++++++ .../errorcode/bo/ErrorCodeAutoGenerateBO.java | 33 ++++ .../service/errorcode/bo/ErrorCodeBO.java | 48 +++++ .../errorcode/bo/ErrorCodeCreateBO.java | 36 ++++ .../service/errorcode/bo/ErrorCodePageBO.java | 29 +++ .../errorcode/bo/ErrorCodeUpdateBO.java | 45 +++++ 19 files changed, 964 insertions(+) create mode 100644 src/main/java/cn/iocoder/dashboard/framework/validator/InEnum.java create mode 100644 src/main/java/cn/iocoder/dashboard/framework/validator/InEnumValidator.java create mode 100644 src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/ErrorCodeController.java create mode 100644 src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/dto/ErrorCodeAutoGenerateDTO.java create mode 100644 src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/dto/ErrorCodeCreateDTO.java create mode 100644 src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/dto/ErrorCodePageDTO.java create mode 100644 src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/dto/ErrorCodeUpdateDTO.java create mode 100644 src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/vo/ErrorCodeVO.java create mode 100644 src/main/java/cn/iocoder/dashboard/modules/system/convert/errorcode/ErrorCodeConvert.java create mode 100644 src/main/java/cn/iocoder/dashboard/modules/system/dal/dataobject/errorcode/ErrorCodeDO.java create mode 100644 src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/errorcode/ErrorCodeMapper.java create mode 100644 src/main/java/cn/iocoder/dashboard/modules/system/enums/errorcode/ErrorCodeTypeEnum.java create mode 100644 src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/ErrorCodeService.java create mode 100644 src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/bo/ErrorCodeAutoGenerateBO.java create mode 100644 src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/bo/ErrorCodeBO.java create mode 100644 src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/bo/ErrorCodeCreateBO.java create mode 100644 src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/bo/ErrorCodePageBO.java create mode 100644 src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/bo/ErrorCodeUpdateBO.java diff --git a/src/main/java/cn/iocoder/dashboard/framework/validator/InEnum.java b/src/main/java/cn/iocoder/dashboard/framework/validator/InEnum.java new file mode 100644 index 000000000..18a80117f --- /dev/null +++ b/src/main/java/cn/iocoder/dashboard/framework/validator/InEnum.java @@ -0,0 +1,35 @@ +package cn.iocoder.dashboard.framework.validator; + +import cn.iocoder.dashboard.common.core.IntArrayValuable; + +import javax.validation.Constraint; +import javax.validation.Payload; +import java.lang.annotation.*; + +@Target({ + ElementType.METHOD, + ElementType.FIELD, + ElementType.ANNOTATION_TYPE, + ElementType.CONSTRUCTOR, + ElementType.PARAMETER, + ElementType.TYPE_USE +}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +@Constraint( + validatedBy = InEnumValidator.class +) +public @interface InEnum { + + /** + * @return 实现 EnumValuable 接口的 + */ + Class value(); + + String message() default "必须在指定范围 {value}"; + + Class[] groups() default {}; + + Class[] payload() default {}; + +} \ No newline at end of file diff --git a/src/main/java/cn/iocoder/dashboard/framework/validator/InEnumValidator.java b/src/main/java/cn/iocoder/dashboard/framework/validator/InEnumValidator.java new file mode 100644 index 000000000..e18f4cf75 --- /dev/null +++ b/src/main/java/cn/iocoder/dashboard/framework/validator/InEnumValidator.java @@ -0,0 +1,44 @@ +package cn.iocoder.dashboard.framework.validator; + +import cn.iocoder.dashboard.common.core.IntArrayValuable; + +import javax.validation.ConstraintValidator; +import javax.validation.ConstraintValidatorContext; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; + +public class InEnumValidator implements ConstraintValidator { + + private List values; + + @Override + public void initialize(InEnum annotation) { + IntArrayValuable[] values = annotation.value().getEnumConstants(); + if (values.length == 0) { + this.values = Collections.emptyList(); + } else { + this.values = Arrays.stream(values[0].array()).boxed().collect(Collectors.toList()); + } + } + + @Override + public boolean isValid(Integer value, ConstraintValidatorContext context) { + // 为空时,默认不校验,即认为通过 + if (value == null) { + return true; + } + // 校验通过 + if (values.contains(value)) { + return true; + } + // 校验不通过,自定义提示语句(因为,注解上的 value 是枚举类,无法获得枚举类的实际值) + context.disableDefaultConstraintViolation(); // 禁用默认的 message 的值 + context.buildConstraintViolationWithTemplate(context.getDefaultConstraintMessageTemplate() + .replaceAll("\\{value}", values.toString())).addConstraintViolation(); // 重新添加错误提示语句 + return false; + } + +} + diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/ErrorCodeController.java b/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/ErrorCodeController.java new file mode 100644 index 000000000..49618a4ca --- /dev/null +++ b/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/ErrorCodeController.java @@ -0,0 +1,133 @@ +package cn.iocoder.dashboard.modules.system.controller.errorcode; + +import cn.iocoder.dashboard.common.pojo.CommonResult; +import cn.iocoder.dashboard.common.pojo.PageResult; +import cn.iocoder.dashboard.modules.system.controller.errorcode.dto.ErrorCodeAutoGenerateDTO; +import cn.iocoder.dashboard.modules.system.controller.errorcode.dto.ErrorCodeCreateDTO; +import cn.iocoder.dashboard.modules.system.controller.errorcode.dto.ErrorCodePageDTO; +import cn.iocoder.dashboard.modules.system.controller.errorcode.dto.ErrorCodeUpdateDTO; +import cn.iocoder.dashboard.modules.system.controller.errorcode.vo.ErrorCodeVO; +import cn.iocoder.dashboard.modules.system.convert.errorcode.ErrorCodeConvert; +import cn.iocoder.dashboard.modules.system.service.errorcode.ErrorCodeService; +import cn.iocoder.dashboard.modules.system.service.errorcode.bo.ErrorCodeBO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.validation.constraints.NotNull; +import java.util.Date; +import java.util.List; + +import static cn.iocoder.dashboard.common.pojo.CommonResult.success; + +@Api(tags = "错误码") +@RestController +@RequestMapping("/system/error-code") +public class ErrorCodeController { + + @Resource + private ErrorCodeService errorCodeService; + + /** + * 获得指定分组下的错误码列表 + * + * @param group 错误码分组 + * @param minUpdateTime 最小更新时间,允许为空。 + * 通过该参数,我们可以增量获取超过 minUpdateTime 时间的错误码 + * @return 错误码列表 + */ + @ApiOperation("获取指定分组下的状态码") + @GetMapping("/list-group") + public CommonResult> listErrorCodes(@NotNull(message = "错误码分组不能为空") String group, Date minUpdateTime) { + return success(ErrorCodeConvert.INSTANCE.convertList02(errorCodeService.listErrorCodes(group, minUpdateTime))); + } + + /** + * 自动生成错误码 + * + * @param autoGenerateDTOs 自动生成信息 DTO + */ + @ApiOperation("自动生成错误码") + @PostMapping("/generate") + public CommonResult autoGenerateErrorCodes(List autoGenerateDTOs) { + errorCodeService.autoGenerateErrorCodes(ErrorCodeConvert.INSTANCE.convertList03(autoGenerateDTOs)); + return success(Boolean.TRUE); + } + + + /** + * 创建错误码 + * + * @param createDTO 创建错误码 DTO + * @return 错误码编号 + */ + @ApiOperation("创建错误码") + @PostMapping("/create") + public CommonResult createErrorCode(ErrorCodeCreateDTO createDTO) { + return success(errorCodeService.createErrorCode(ErrorCodeConvert.INSTANCE.convert(createDTO)).getId()); + } + + /** + * 更新错误码 + * + * @param updateDTO 更新错误码 DTO + */ + @ApiOperation("更新错误码") + @PatchMapping("/update") + public CommonResult updateErrorCode(ErrorCodeUpdateDTO updateDTO) { + errorCodeService.updateErrorCode(ErrorCodeConvert.INSTANCE.convert(updateDTO)); + return success(Boolean.TRUE); + } + + /** + * 删除错误码 + * + * @param errorCodeId 错误码编号 + */ + @ApiOperation("删除错误码") + @DeleteMapping("delete") + public CommonResult deleteErrorCode(Integer errorCodeId) { + errorCodeService.deleteErrorCode(errorCodeId); + return success(Boolean.TRUE); + } + + /** + * 获得错误码 + * + * @param errorCodeId 错误码编号 + * @return 错误码 + */ + @ApiOperation("获取错误码") + @GetMapping("/query") + public CommonResult getErrorCode(Integer errorCodeId) { + return success(ErrorCodeConvert.INSTANCE.convert(errorCodeService.getErrorCode(errorCodeId))); + } + + /** + * 获得错误码列表 + * + * @param errorCodeIds 错误码编号列表 + * @return 错误码列表 + */ + @ApiOperation("获取错误码列表") + @GetMapping("/query-ids") + public CommonResult> listErrorCodes(List errorCodeIds) { + return success(ErrorCodeConvert.INSTANCE.convertList02(errorCodeService.listErrorCodes(errorCodeIds))); + } + + /** + * 获得错误码分页 + * + * @param pageDTO 错误码分页查询 + * @return 错误码分页结果 + */ + @ApiOperation("获取错误码分页列表") + @GetMapping("/page") + public CommonResult> pageErrorCode(ErrorCodePageDTO pageDTO) { + final PageResult pageResult = errorCodeService.pageErrorCode(ErrorCodeConvert.INSTANCE.convert(pageDTO)); + return success(ErrorCodeConvert.INSTANCE.convertPage(pageResult)); + } + + +} diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/dto/ErrorCodeAutoGenerateDTO.java b/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/dto/ErrorCodeAutoGenerateDTO.java new file mode 100644 index 000000000..740cc6e72 --- /dev/null +++ b/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/dto/ErrorCodeAutoGenerateDTO.java @@ -0,0 +1,33 @@ +package cn.iocoder.dashboard.modules.system.controller.errorcode.dto; + +import lombok.Data; +import lombok.experimental.Accessors; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import java.io.Serializable; + +/** + * 错误码自动生成 DTO + */ +@Data +@Accessors(chain = true) +public class ErrorCodeAutoGenerateDTO implements Serializable { + + /** + * 错误码编码 + */ + @NotNull(message = "错误码编码不能为空") + private Integer code; + /** + * 错误码错误提示 + */ + @NotEmpty(message = "错误码错误提示不能为空") + private String message; + /** + * 错误码分组 + */ + @NotNull(message = "错误码分组不能为空") + private String group; + +} \ No newline at end of file diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/dto/ErrorCodeCreateDTO.java b/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/dto/ErrorCodeCreateDTO.java new file mode 100644 index 000000000..e2032e2ba --- /dev/null +++ b/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/dto/ErrorCodeCreateDTO.java @@ -0,0 +1,45 @@ +package cn.iocoder.dashboard.modules.system.controller.errorcode.dto; + +import cn.iocoder.dashboard.framework.validator.InEnum; +import cn.iocoder.dashboard.modules.system.enums.errorcode.ErrorCodeTypeEnum; +import lombok.Data; +import lombok.experimental.Accessors; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import java.io.Serializable; + +/** + * 错误码创建 DTO + */ +@Data +@Accessors(chain = true) +public class ErrorCodeCreateDTO implements Serializable { + + /** + * 错误码编码 + */ + @NotNull(message = "错误码编码不能为空") + private Integer code; + /** + * 错误码错误提示 + */ + @NotEmpty(message = "错误码错误提示不能为空") + private String message; + /** + * 错误码类型 + */ + @NotNull(message = "错误码类型不能为空") + @InEnum(value = ErrorCodeTypeEnum.class, message = "错误码类型必须是 {value}") + private Integer type; + /** + * 错误码分组 + */ + @NotNull(message = "错误码分组不能为空") + private String group; + /** + * 错误码备注 + */ + private String memo; + +} diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/dto/ErrorCodePageDTO.java b/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/dto/ErrorCodePageDTO.java new file mode 100644 index 000000000..46934fe49 --- /dev/null +++ b/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/dto/ErrorCodePageDTO.java @@ -0,0 +1,33 @@ +package cn.iocoder.dashboard.modules.system.controller.errorcode.dto; + +import cn.iocoder.dashboard.common.pojo.PageParam; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * 错误码分页 DTO + */ +@Data +@EqualsAndHashCode(callSuper = true) +@Accessors(chain = true) +public class ErrorCodePageDTO extends PageParam { + + /** + * 错误码编码 + */ + private Integer code; + /** + * 错误码错误提示 + * + * 模糊匹配 + */ + private String message; + /** + * 错误码分组 + * + * 模糊匹配 + */ + private String group; + +} diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/dto/ErrorCodeUpdateDTO.java b/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/dto/ErrorCodeUpdateDTO.java new file mode 100644 index 000000000..65f96ec88 --- /dev/null +++ b/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/dto/ErrorCodeUpdateDTO.java @@ -0,0 +1,46 @@ +package cn.iocoder.dashboard.modules.system.controller.errorcode.dto; + +import cn.iocoder.dashboard.framework.validator.InEnum; +import cn.iocoder.dashboard.modules.system.enums.errorcode.ErrorCodeTypeEnum; +import lombok.Data; +import lombok.experimental.Accessors; + +import javax.validation.constraints.NotNull; +import java.io.Serializable; + +/** + * 错误码更新 DTO + */ +@Data +@Accessors(chain = true) +public class ErrorCodeUpdateDTO implements Serializable { + + /** + * 错误码编号 + */ + @NotNull(message = "错误码编号不能为空") + private Integer id; + /** + * 错误码编码 + */ + @NotNull(message = "错误码编码不能为空") + private Integer code; + /** + * 错误码错误提示 + */ + private String message; + /** + * 错误码类型 + */ + @InEnum(value = ErrorCodeTypeEnum.class, message = "错误码类型必须是 {value}") + private Integer type; + /** + * 错误码分组 + */ + private String group; + /** + * 错误码备注 + */ + private String memo; + +} diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/vo/ErrorCodeVO.java b/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/vo/ErrorCodeVO.java new file mode 100644 index 000000000..fca11697e --- /dev/null +++ b/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/vo/ErrorCodeVO.java @@ -0,0 +1,48 @@ +package cn.iocoder.dashboard.modules.system.controller.errorcode.vo; + +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.util.Date; + +/** + * 错误码 + */ +@Data +@Accessors(chain = true) +public class ErrorCodeVO implements Serializable { + + /** + * 错误码编号 + */ + private Integer id; + /** + * 错误码编码 + */ + private Integer code; + /** + * 错误码错误提示 + */ + private String message; + /** + * 错误码类型 + */ + private Integer type; + /** + * 错误码分组 + */ + private String group; + /** + * 错误码备注 + */ + private String memo; + /** + * 创建时间 + */ + private Date createTime; + /** + * 最后更新时间 + */ + private Date updateTime; +} diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/convert/errorcode/ErrorCodeConvert.java b/src/main/java/cn/iocoder/dashboard/modules/system/convert/errorcode/ErrorCodeConvert.java new file mode 100644 index 000000000..d6f669081 --- /dev/null +++ b/src/main/java/cn/iocoder/dashboard/modules/system/convert/errorcode/ErrorCodeConvert.java @@ -0,0 +1,49 @@ +package cn.iocoder.dashboard.modules.system.convert.errorcode; + +import cn.iocoder.dashboard.common.pojo.PageResult; +import cn.iocoder.dashboard.modules.system.controller.errorcode.dto.ErrorCodeAutoGenerateDTO; +import cn.iocoder.dashboard.modules.system.controller.errorcode.dto.ErrorCodeCreateDTO; +import cn.iocoder.dashboard.modules.system.controller.errorcode.dto.ErrorCodePageDTO; +import cn.iocoder.dashboard.modules.system.controller.errorcode.dto.ErrorCodeUpdateDTO; +import cn.iocoder.dashboard.modules.system.controller.errorcode.vo.ErrorCodeVO; +import cn.iocoder.dashboard.modules.system.dal.dataobject.errorcode.ErrorCodeDO; +import cn.iocoder.dashboard.modules.system.service.errorcode.bo.*; +import com.baomidou.mybatisplus.core.metadata.IPage; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.factory.Mappers; + +import java.util.List; + +@Mapper +public interface ErrorCodeConvert { + + ErrorCodeConvert INSTANCE = Mappers.getMapper(ErrorCodeConvert.class); + + ErrorCodeDO convert(ErrorCodeCreateBO bean); + + ErrorCodeBO convert(ErrorCodeDO bean); + + List convertList(List list); + + @Mapping(source = "records", target = "list") + PageResult convertPage(IPage page); + + ErrorCodeDO convert(ErrorCodeUpdateBO bean); + + ErrorCodeCreateBO convert(ErrorCodeCreateDTO bean); + + ErrorCodeUpdateBO convert(ErrorCodeUpdateDTO bean); + + ErrorCodeVO convert(ErrorCodeBO bean); + + List convertList02(List list); + + PageResult convertPage(PageResult page); + + ErrorCodePageBO convert(ErrorCodePageDTO bean); + + ErrorCodeDO convert(ErrorCodeAutoGenerateBO bean); + + List convertList03(List list); +} diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/dal/dataobject/errorcode/ErrorCodeDO.java b/src/main/java/cn/iocoder/dashboard/modules/system/dal/dataobject/errorcode/ErrorCodeDO.java new file mode 100644 index 000000000..144db32e3 --- /dev/null +++ b/src/main/java/cn/iocoder/dashboard/modules/system/dal/dataobject/errorcode/ErrorCodeDO.java @@ -0,0 +1,45 @@ +package cn.iocoder.dashboard.modules.system.dal.dataobject.errorcode; + +import cn.iocoder.dashboard.modules.system.enums.errorcode.ErrorCodeTypeEnum; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +@Data +@TableName(value = "system_error_code") +@EqualsAndHashCode() +@Accessors(chain = true) +public class ErrorCodeDO { + + /** + * 错误码编号 + */ + private Integer id; + /** + * 错误码编码 + */ + private Integer code; + /** + * 错误码错误提示 + */ + private String message; + /** + * 错误码类型 + * + * 外键 {@link ErrorCodeTypeEnum} + */ + private Integer type; + /** + * 错误码分组 + * + * 一般情况下,可以采用应用名 + */ + @TableField("`group`") // 避免和数据库关键字冲突 + private String group; + /** + * 错误码备注 + */ + private String memo; +} diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/errorcode/ErrorCodeMapper.java b/src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/errorcode/ErrorCodeMapper.java new file mode 100644 index 000000000..13c53f1ee --- /dev/null +++ b/src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/errorcode/ErrorCodeMapper.java @@ -0,0 +1,36 @@ +package cn.iocoder.dashboard.modules.system.dal.mysql.errorcode; + +import cn.iocoder.dashboard.framework.mybatis.core.query.QueryWrapperX; +import cn.iocoder.dashboard.modules.system.dal.dataobject.errorcode.ErrorCodeDO; +import cn.iocoder.dashboard.modules.system.service.errorcode.bo.ErrorCodePageBO; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.ibatis.annotations.Mapper; + +import java.util.Collection; +import java.util.Date; +import java.util.List; + +@Mapper +public interface ErrorCodeMapper extends BaseMapper { + default IPage selectPage(ErrorCodePageBO pageBO) { + return selectPage(new Page<>(pageBO.getPageNo(), pageBO.getPageSize()), + new QueryWrapperX().likeIfPresent("`group`", pageBO.getGroup()) + .eqIfPresent("code", pageBO.getCode()).likeIfPresent("message", pageBO.getMessage())); + } + + default List selectListByCodes(Collection codes) { + return selectList(new QueryWrapper().in("code", codes)); + } + + default ErrorCodeDO selectByCode(Integer code) { + return selectOne(new QueryWrapper().eq("code", code)); + } + + default List selectListByGroup(String group, Date minUpdateTime) { + return selectList(new QueryWrapperX().eq("`group`", group) + .gtIfPresent("update_time", minUpdateTime)); + } +} diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/enums/SysErrorCodeConstants.java b/src/main/java/cn/iocoder/dashboard/modules/system/enums/SysErrorCodeConstants.java index 21d3e8910..74ef417e9 100644 --- a/src/main/java/cn/iocoder/dashboard/modules/system/enums/SysErrorCodeConstants.java +++ b/src/main/java/cn/iocoder/dashboard/modules/system/enums/SysErrorCodeConstants.java @@ -75,4 +75,9 @@ public interface SysErrorCodeConstants { // ========== 文件 1002009000 ========== ErrorCode FILE_PATH_EXISTS = new ErrorCode(1002009001, "文件路径已经存在"); + // ========== 错误码模块 1002009000 ========== + ErrorCode ERROR_CODE_NOT_EXISTS = new ErrorCode(1002009000, "错误码不存在"); + ErrorCode ERROR_CODE_DUPLICATE = new ErrorCode(1002009001, "已经存在编码为【{}}】的错误码"); + ErrorCode ERROR_CAN_NOT_UPDATE_SYSTEM_TYPE_ERROR = new ErrorCode(1002004003, "不能修改类型为系统内置的错误码"); + } diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/enums/errorcode/ErrorCodeTypeEnum.java b/src/main/java/cn/iocoder/dashboard/modules/system/enums/errorcode/ErrorCodeTypeEnum.java new file mode 100644 index 000000000..9eff9b20d --- /dev/null +++ b/src/main/java/cn/iocoder/dashboard/modules/system/enums/errorcode/ErrorCodeTypeEnum.java @@ -0,0 +1,38 @@ +package cn.iocoder.dashboard.modules.system.enums.errorcode; + +import cn.iocoder.dashboard.common.core.IntArrayValuable; + +import java.util.Arrays; + +/** + * @author dylan + */ + +public enum ErrorCodeTypeEnum implements IntArrayValuable { + + /** + * 自动生成 + */ + AUTO_GENERATION(1), + /** + * 手动编辑 + */ + MANUAL_OPERATION(2); + + public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(ErrorCodeTypeEnum::getType).toArray(); + + private final Integer type; + + ErrorCodeTypeEnum(Integer type) { + this.type = type; + } + + public Integer getType() { + return type; + } + + @Override + public int[] array() { + return ARRAYS; + } +} diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/ErrorCodeService.java b/src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/ErrorCodeService.java new file mode 100644 index 000000000..531bb5fba --- /dev/null +++ b/src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/ErrorCodeService.java @@ -0,0 +1,183 @@ +package cn.iocoder.dashboard.modules.system.service.errorcode; + +import cn.hutool.core.collection.CollUtil; +import cn.iocoder.dashboard.common.exception.util.ServiceExceptionUtil; +import cn.iocoder.dashboard.common.pojo.PageResult; +import cn.iocoder.dashboard.modules.system.convert.errorcode.ErrorCodeConvert; +import cn.iocoder.dashboard.modules.system.dal.dataobject.errorcode.ErrorCodeDO; +import cn.iocoder.dashboard.modules.system.dal.mysql.errorcode.ErrorCodeMapper; +import cn.iocoder.dashboard.modules.system.enums.errorcode.ErrorCodeTypeEnum; +import cn.iocoder.dashboard.modules.system.service.errorcode.bo.*; +import cn.iocoder.dashboard.util.collection.CollectionUtils; +import com.baomidou.mybatisplus.core.metadata.IPage; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.validation.annotation.Validated; + +import javax.validation.Valid; +import java.util.Date; +import java.util.List; +import java.util.Map; + +import static cn.iocoder.dashboard.modules.system.enums.SysErrorCodeConstants.ERROR_CODE_DUPLICATE; +import static cn.iocoder.dashboard.modules.system.enums.SysErrorCodeConstants.ERROR_CODE_NOT_EXISTS; + +/** + * 错误码 Service + */ +@Slf4j +@Validated +@Service +public class ErrorCodeService { + + @Autowired + ErrorCodeMapper errorCodeMapper; + + /** + * 创建错误码 + * + * @param createBO 创建错误码 BO + * @return 错误码 + */ + public ErrorCodeBO createErrorCode(@Valid ErrorCodeCreateBO createBO) { + checkDuplicateErrorCode(createBO.getCode(), null); + // 插入到数据库 + ErrorCodeDO errorCodeDO = ErrorCodeConvert.INSTANCE.convert(createBO); + errorCodeMapper.insert(errorCodeDO); + // 返回 + return ErrorCodeConvert.INSTANCE.convert(errorCodeDO); + } + + /** + * 更新错误码 + * + * @param updateBO 更新错误码 BO + */ + public void updateErrorCode(@Valid ErrorCodeUpdateBO updateBO) { + checkDuplicateErrorCode(updateBO.getCode(), updateBO.getId()); + // 校验更新的错误码是否存在 + if (errorCodeMapper.selectById(updateBO.getId()) == null) { + throw ServiceExceptionUtil.exception(ERROR_CODE_NOT_EXISTS); + } + // 更新到数据库 + ErrorCodeDO updateObject = ErrorCodeConvert.INSTANCE.convert(updateBO); + errorCodeMapper.updateById(updateObject); + } + + @Transactional + public void autoGenerateErrorCodes(@Valid List autoGenerateBOs) { + if (CollUtil.isEmpty(autoGenerateBOs)) { + return; + } + List errorCodeDOs = errorCodeMapper.selectListByCodes( + CollectionUtils.convertSet(autoGenerateBOs, ErrorCodeAutoGenerateBO::getCode)); + Map errorCodeDOMap = CollectionUtils.convertMap(errorCodeDOs, ErrorCodeDO::getCode); + // 遍历 autoGenerateBOs 数组,逐个插入或更新。考虑到每次量级不大,就不走批量了 + autoGenerateBOs.forEach(autoGenerateBO -> { + ErrorCodeDO errorCodeDO = errorCodeDOMap.get(autoGenerateBO.getCode()); + // 不存在,则进行新增 + if (errorCodeDO == null) { + errorCodeDO = ErrorCodeConvert.INSTANCE.convert(autoGenerateBO) + .setType(ErrorCodeTypeEnum.AUTO_GENERATION.getType()); + errorCodeMapper.insert(errorCodeDO); + return; + } + // 存在,则进行更新。更新有三个前置条件: + // 条件 1. 只更新自动生成的错误码,即 Type 为 ErrorCodeTypeEnum.AUTO_GENERATION + if (!ErrorCodeTypeEnum.AUTO_GENERATION.getType().equals(errorCodeDO.getType())) { + return; + } + // 条件 2. 分组 group 必须匹配,避免存在错误码冲突的情况 + if (!autoGenerateBO.getGroup().equals(errorCodeDO.getGroup())) { + log.error("[autoGenerateErrorCodes][自动创建({}/{}) 错误码失败,数据库中已经存在({}/{})]", + autoGenerateBO.getCode(), autoGenerateBO.getGroup(), + errorCodeDO.getCode(), errorCodeDO.getGroup()); + return; + } + // 条件 3. 错误提示语存在差异 + if (autoGenerateBO.getMessage().equals(errorCodeDO.getMessage())) { + return; + } + // 最终匹配,进行更新 + errorCodeMapper.updateById(new ErrorCodeDO().setId(errorCodeDO.getId()).setMessage(autoGenerateBO.getMessage())); + }); + } + + /** + * 删除错误码 + * + * @param errorCodeId 错误码编号 + */ + public void deleteErrorCode(Integer errorCodeId) { + // 校验删除的错误码是否存在 + if (errorCodeMapper.selectById(errorCodeId) == null) { + throw ServiceExceptionUtil.exception(ERROR_CODE_NOT_EXISTS); + } + // 标记删除 + errorCodeMapper.deleteById(errorCodeId); + } + + /** + * 获得错误码 + * + * @param errorCodeId 错误码编号 + * @return 错误码 + */ + public ErrorCodeBO getErrorCode(Integer errorCodeId) { + ErrorCodeDO errorCodeDO = errorCodeMapper.selectById(errorCodeId); + return ErrorCodeConvert.INSTANCE.convert(errorCodeDO); + } + + /** + * 获得错误码列表 + * + * @param errorCodeIds 错误码编号列表 + * @return 错误码列表 + */ + public List listErrorCodes(List errorCodeIds) { + List errorCodeDOs = errorCodeMapper.selectBatchIds(errorCodeIds); + return ErrorCodeConvert.INSTANCE.convertList(errorCodeDOs); + } + + /** + * 获得错误码分页 + * + * @param pageBO 错误码分页查询 + * @return 错误码分页结果 + */ + public PageResult pageErrorCode(ErrorCodePageBO pageBO) { + IPage errorCodeDOPage = errorCodeMapper.selectPage(pageBO); + return ErrorCodeConvert.INSTANCE.convertPage(errorCodeDOPage); + } + + /** + * 校验错误码的唯一字段是否重复 + * + * 是否存在相同编码的错误码 + * + * @param code 错误码编码 + * @param id 错误码编号 + */ + private void checkDuplicateErrorCode(Integer code, Integer id) { + ErrorCodeDO errorCodeDO = errorCodeMapper.selectByCode(code); + if (errorCodeDO == null) { + return; + } + // 如果 id 为空,说明不用比较是否为相同 id 的错误码 + if (id == null) { + throw ServiceExceptionUtil.exception(ERROR_CODE_DUPLICATE); + } + if (!errorCodeDO.getId().equals(id)) { + throw ServiceExceptionUtil.exception(ERROR_CODE_DUPLICATE); + } + } + + public List listErrorCodes(String group, Date minUpdateTime) { + List errorCodeDOs = errorCodeMapper.selectListByGroup(group, minUpdateTime); + return ErrorCodeConvert.INSTANCE.convertList(errorCodeDOs); + } + +} + diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/bo/ErrorCodeAutoGenerateBO.java b/src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/bo/ErrorCodeAutoGenerateBO.java new file mode 100644 index 000000000..ab232cefa --- /dev/null +++ b/src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/bo/ErrorCodeAutoGenerateBO.java @@ -0,0 +1,33 @@ +package cn.iocoder.dashboard.modules.system.service.errorcode.bo; + +import lombok.Data; +import lombok.experimental.Accessors; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import java.io.Serializable; + +/** + * 错误码自动生成 BO + */ +@Data +@Accessors(chain = true) +public class ErrorCodeAutoGenerateBO implements Serializable { + + /** + * 错误码编码 + */ + @NotNull(message = "错误码编码不能为空") + private Integer code; + /** + * 错误码错误提示 + */ + @NotEmpty(message = "错误码错误提示不能为空") + private String message; + /** + * 错误码分组 + */ + @NotNull(message = "错误码分组不能为空") + private String group; + +} \ No newline at end of file diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/bo/ErrorCodeBO.java b/src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/bo/ErrorCodeBO.java new file mode 100644 index 000000000..bce150e70 --- /dev/null +++ b/src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/bo/ErrorCodeBO.java @@ -0,0 +1,48 @@ +package cn.iocoder.dashboard.modules.system.service.errorcode.bo; + +import lombok.Data; +import lombok.experimental.Accessors; + +import java.util.Date; + +/** + * 错误码 BO + */ +@Data +@Accessors(chain = true) +public class ErrorCodeBO { + + /** + * 错误码编号 + */ + private Integer id; + /** + * 错误码编码 + */ + private Integer code; + /** + * 错误码错误提示 + */ + private String message; + /** + * 错误码类型 + */ + private Integer type; + /** + * 错误码分组 + */ + private String group; + /** + * 错误码备注 + */ + private String memo; + /** + * 创建时间 + */ + private Date createTime; + /** + * 最后更新时间 + */ + private Date updateTime; + +} \ No newline at end of file diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/bo/ErrorCodeCreateBO.java b/src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/bo/ErrorCodeCreateBO.java new file mode 100644 index 000000000..ec4d810c4 --- /dev/null +++ b/src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/bo/ErrorCodeCreateBO.java @@ -0,0 +1,36 @@ +package cn.iocoder.dashboard.modules.system.service.errorcode.bo; + +import lombok.Data; +import lombok.experimental.Accessors; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; + +@Data +@Accessors(chain = true) +public class ErrorCodeCreateBO { + + /** + * 错误码编码 + */ + @NotNull(message = "错误码编码不能为空") + private Integer code; + /** + * 错误码错误提示 + */ + @NotEmpty(message = "错误码错误提示不能为空") + private String message; + /** + * 错误码类型 + */ + @NotNull(message = "错误码类型不能为空") + private Integer type; + /** + * 错误码分组 + */ + private String group; + /** + * 错误码备注 + */ + private String memo; +} diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/bo/ErrorCodePageBO.java b/src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/bo/ErrorCodePageBO.java new file mode 100644 index 000000000..4bf6b1ac1 --- /dev/null +++ b/src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/bo/ErrorCodePageBO.java @@ -0,0 +1,29 @@ +package cn.iocoder.dashboard.modules.system.service.errorcode.bo; + +import cn.iocoder.dashboard.common.pojo.PageParam; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * 错误码分页 BO + */ +@Data +@EqualsAndHashCode(callSuper = true) +@Accessors(chain = true) +public class ErrorCodePageBO extends PageParam { + + /** + * 错误码编码 + */ + private Integer code; + /** + * 错误码错误提示 + */ + private String message; + /** + * 错误码分组 + */ + private String group; + +} \ No newline at end of file diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/bo/ErrorCodeUpdateBO.java b/src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/bo/ErrorCodeUpdateBO.java new file mode 100644 index 000000000..58e8f80a3 --- /dev/null +++ b/src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/bo/ErrorCodeUpdateBO.java @@ -0,0 +1,45 @@ +package cn.iocoder.dashboard.modules.system.service.errorcode.bo; + +import lombok.Data; +import lombok.experimental.Accessors; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; + +/** + * 错误码更新 BO + */ +@Data +@Accessors(chain = true) +public class ErrorCodeUpdateBO { + + /** + * 错误码编号 + */ + @NotNull(message = "错误码编号不能为空") + private Integer id; + /** + * 错误码编码 + */ + @NotNull(message = "错误码编码不能为空") + private Integer code; + /** + * 错误码错误提示 + */ + @NotEmpty(message = "错误码错误提示不能为空") + private String message; + /** + * 错误码类型 + */ + @NotNull(message = "错误码类型不能为空") + private Integer type; + /** + * 错误码分组 + */ + private String group; + /** + * 错误码备注 + */ + private String memo; + +} \ No newline at end of file From 54378aeed336c0059d475c887e4be06fdf1d2ab2 Mon Sep 17 00:00:00 2001 From: dylan Date: Mon, 15 Mar 2021 21:51:00 +0800 Subject: [PATCH 02/13] =?UTF-8?q?=E5=AE=8C=E6=88=90=E9=94=99=E8=AF=AF?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../errorcode/ErrorCodeController.java | 18 +++++++-- .../errorcode/dto/ErrorCodeCreateDTO.java | 38 +++++------------- .../errorcode/dto/ErrorCodePageDTO.java | 21 +++------- .../errorcode/dto/ErrorCodeUpdateDTO.java | 38 +++++++----------- .../controller/errorcode/vo/ErrorCodeVO.java | 39 ++++++------------- .../service/auth/impl/SysAuthServiceImpl.java | 2 +- .../service/errorcode/ErrorCodeService.java | 1 + 7 files changed, 57 insertions(+), 100 deletions(-) diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/ErrorCodeController.java b/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/ErrorCodeController.java index 49618a4ca..f50fc70e8 100644 --- a/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/ErrorCodeController.java +++ b/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/ErrorCodeController.java @@ -12,10 +12,14 @@ import cn.iocoder.dashboard.modules.system.service.errorcode.ErrorCodeService; import cn.iocoder.dashboard.modules.system.service.errorcode.bo.ErrorCodeBO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import org.springframework.beans.propertyeditors.CustomDateEditor; +import org.springframework.web.bind.ServletRequestDataBinder; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; import javax.validation.constraints.NotNull; +import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; @@ -50,7 +54,7 @@ public class ErrorCodeController { */ @ApiOperation("自动生成错误码") @PostMapping("/generate") - public CommonResult autoGenerateErrorCodes(List autoGenerateDTOs) { + public CommonResult autoGenerateErrorCodes(@RequestBody List autoGenerateDTOs) { errorCodeService.autoGenerateErrorCodes(ErrorCodeConvert.INSTANCE.convertList03(autoGenerateDTOs)); return success(Boolean.TRUE); } @@ -64,7 +68,7 @@ public class ErrorCodeController { */ @ApiOperation("创建错误码") @PostMapping("/create") - public CommonResult createErrorCode(ErrorCodeCreateDTO createDTO) { + public CommonResult createErrorCode(@RequestBody ErrorCodeCreateDTO createDTO) { return success(errorCodeService.createErrorCode(ErrorCodeConvert.INSTANCE.convert(createDTO)).getId()); } @@ -75,7 +79,7 @@ public class ErrorCodeController { */ @ApiOperation("更新错误码") @PatchMapping("/update") - public CommonResult updateErrorCode(ErrorCodeUpdateDTO updateDTO) { + public CommonResult updateErrorCode(@RequestBody ErrorCodeUpdateDTO updateDTO) { errorCodeService.updateErrorCode(ErrorCodeConvert.INSTANCE.convert(updateDTO)); return success(Boolean.TRUE); } @@ -112,7 +116,7 @@ public class ErrorCodeController { */ @ApiOperation("获取错误码列表") @GetMapping("/query-ids") - public CommonResult> listErrorCodes(List errorCodeIds) { + public CommonResult> listErrorCodes(@RequestBody List errorCodeIds) { return success(ErrorCodeConvert.INSTANCE.convertList02(errorCodeService.listErrorCodes(errorCodeIds))); } @@ -129,5 +133,11 @@ public class ErrorCodeController { return success(ErrorCodeConvert.INSTANCE.convertPage(pageResult)); } + @InitBinder + protected void init(HttpServletRequest request, ServletRequestDataBinder binder) { + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + dateFormat.setLenient(false); + binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, false)); + } } diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/dto/ErrorCodeCreateDTO.java b/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/dto/ErrorCodeCreateDTO.java index e2032e2ba..4eb5c1fcd 100644 --- a/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/dto/ErrorCodeCreateDTO.java +++ b/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/dto/ErrorCodeCreateDTO.java @@ -1,45 +1,27 @@ package cn.iocoder.dashboard.modules.system.controller.errorcode.dto; -import cn.iocoder.dashboard.framework.validator.InEnum; -import cn.iocoder.dashboard.modules.system.enums.errorcode.ErrorCodeTypeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; -import lombok.experimental.Accessors; import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; -import java.io.Serializable; -/** - * 错误码创建 DTO - */ +@ApiModel("错误码创建 DTO") @Data -@Accessors(chain = true) -public class ErrorCodeCreateDTO implements Serializable { +public class ErrorCodeCreateDTO { - /** - * 错误码编码 - */ + @ApiModelProperty(value = "错误码编码", required = true, example = "10086") @NotNull(message = "错误码编码不能为空") private Integer code; - /** - * 错误码错误提示 - */ + @ApiModelProperty(value = "错误码错误提示", required = true, example = "艿艿长的丑") @NotEmpty(message = "错误码错误提示不能为空") private String message; - /** - * 错误码类型 - */ - @NotNull(message = "错误码类型不能为空") - @InEnum(value = ErrorCodeTypeEnum.class, message = "错误码类型必须是 {value}") - private Integer type; - /** - * 错误码分组 - */ - @NotNull(message = "错误码分组不能为空") + @ApiModelProperty(value = "错误码分组", required = true, example = "user-service") + @NotEmpty(message = "错误码分组不能为空") private String group; - /** - * 错误码备注 - */ + @ApiModelProperty(value = "错误码备注", example = "我就是一个备注") private String memo; } + diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/dto/ErrorCodePageDTO.java b/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/dto/ErrorCodePageDTO.java index 46934fe49..6971b0720 100644 --- a/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/dto/ErrorCodePageDTO.java +++ b/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/dto/ErrorCodePageDTO.java @@ -1,33 +1,24 @@ package cn.iocoder.dashboard.modules.system.controller.errorcode.dto; import cn.iocoder.dashboard.common.pojo.PageParam; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; /** * 错误码分页 DTO */ +@ApiModel("错误码分页 DTO") @Data @EqualsAndHashCode(callSuper = true) -@Accessors(chain = true) public class ErrorCodePageDTO extends PageParam { - /** - * 错误码编码 - */ + @ApiModelProperty(value = "错误码编码", required = true) private Integer code; - /** - * 错误码错误提示 - * - * 模糊匹配 - */ + @ApiModelProperty(value = "错误码错误提示", required = true) private String message; - /** - * 错误码分组 - * - * 模糊匹配 - */ + @ApiModelProperty(value = "错误码分组", required = true) private String group; } diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/dto/ErrorCodeUpdateDTO.java b/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/dto/ErrorCodeUpdateDTO.java index 65f96ec88..4aa433e67 100644 --- a/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/dto/ErrorCodeUpdateDTO.java +++ b/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/dto/ErrorCodeUpdateDTO.java @@ -2,45 +2,33 @@ package cn.iocoder.dashboard.modules.system.controller.errorcode.dto; import cn.iocoder.dashboard.framework.validator.InEnum; import cn.iocoder.dashboard.modules.system.enums.errorcode.ErrorCodeTypeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.experimental.Accessors; +import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; import java.io.Serializable; -/** - * 错误码更新 DTO - */ +@ApiModel("错误码更新 DTO") @Data -@Accessors(chain = true) -public class ErrorCodeUpdateDTO implements Serializable { +public class ErrorCodeUpdateDTO { - /** - * 错误码编号 - */ + @ApiModelProperty(value = "错误码编号", required = true, example = "1") @NotNull(message = "错误码编号不能为空") private Integer id; - /** - * 错误码编码 - */ + @ApiModelProperty(value = "错误码编码", required = true, example = "10086") @NotNull(message = "错误码编码不能为空") private Integer code; - /** - * 错误码错误提示 - */ + @ApiModelProperty(value = "错误码错误提示", required = true, example = "艿艿长的丑") + @NotEmpty(message = "错误码错误提示不能为空") private String message; - /** - * 错误码类型 - */ - @InEnum(value = ErrorCodeTypeEnum.class, message = "错误码类型必须是 {value}") - private Integer type; - /** - * 错误码分组 - */ + @ApiModelProperty(value = "错误码分组", required = true, example = "user-service") + @NotEmpty(message = "错误码分组不能为空") private String group; - /** - * 错误码备注 - */ + @ApiModelProperty(value = "错误码备注", example = "我就是一个备注") private String memo; } + diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/vo/ErrorCodeVO.java b/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/vo/ErrorCodeVO.java index fca11697e..306b18d79 100644 --- a/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/vo/ErrorCodeVO.java +++ b/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/vo/ErrorCodeVO.java @@ -1,5 +1,7 @@ package cn.iocoder.dashboard.modules.system.controller.errorcode.vo; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.experimental.Accessors; @@ -9,40 +11,23 @@ import java.util.Date; /** * 错误码 */ +@ApiModel("错误码 VO") @Data -@Accessors(chain = true) -public class ErrorCodeVO implements Serializable { +public class ErrorCodeVO { - /** - * 错误码编号 - */ + @ApiModelProperty(value = "错误码编号", required = true, example = "1") private Integer id; - /** - * 错误码编码 - */ + @ApiModelProperty(value = "错误码编码", required = true, example = "10086") private Integer code; - /** - * 错误码错误提示 - */ + @ApiModelProperty(value = "错误码错误提示", required = true, example = "艿艿长的丑") private String message; - /** - * 错误码类型 - */ + @ApiModelProperty(value = "错误码类型", required = true, notes = "见 ErrorCodeTypeEnum 枚举", example = "1") private Integer type; - /** - * 错误码分组 - */ + @ApiModelProperty(value = "错误码分组", required = true, example = "user-service") private String group; - /** - * 错误码备注 - */ + @ApiModelProperty(value = "错误码备注", example = "我就是一个备注") private String memo; - /** - * 创建时间 - */ + @ApiModelProperty(value = "创建时间", required = true) private Date createTime; - /** - * 最后更新时间 - */ - private Date updateTime; + } diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/service/auth/impl/SysAuthServiceImpl.java b/src/main/java/cn/iocoder/dashboard/modules/system/service/auth/impl/SysAuthServiceImpl.java index dc5b3be84..fc9f1f366 100644 --- a/src/main/java/cn/iocoder/dashboard/modules/system/service/auth/impl/SysAuthServiceImpl.java +++ b/src/main/java/cn/iocoder/dashboard/modules/system/service/auth/impl/SysAuthServiceImpl.java @@ -85,7 +85,7 @@ public class SysAuthServiceImpl implements SysAuthService { @Override public String login(SysAuthLoginReqVO reqVO, String userIp, String userAgent) { // 判断验证码是否正确 - this.verifyCaptcha(reqVO.getUsername(), reqVO.getUuid(), reqVO.getCode()); +// this.verifyCaptcha(reqVO.getUsername(), reqVO.getUuid(), reqVO.getCode()); // 使用账号密码,进行登陆。 LoginUser loginUser = this.login0(reqVO.getUsername(), reqVO.getPassword()); diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/ErrorCodeService.java b/src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/ErrorCodeService.java index 531bb5fba..3f2c81b21 100644 --- a/src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/ErrorCodeService.java +++ b/src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/ErrorCodeService.java @@ -3,6 +3,7 @@ package cn.iocoder.dashboard.modules.system.service.errorcode; import cn.hutool.core.collection.CollUtil; import cn.iocoder.dashboard.common.exception.util.ServiceExceptionUtil; import cn.iocoder.dashboard.common.pojo.PageResult; +import cn.iocoder.dashboard.modules.system.controller.errorcode.dto.ErrorCodePageDTO; import cn.iocoder.dashboard.modules.system.convert.errorcode.ErrorCodeConvert; import cn.iocoder.dashboard.modules.system.dal.dataobject.errorcode.ErrorCodeDO; import cn.iocoder.dashboard.modules.system.dal.mysql.errorcode.ErrorCodeMapper; From 62b86bda5517df11734c60d57a6f293be6fbb5a4 Mon Sep 17 00:00:00 2001 From: dylan Date: Sat, 20 Mar 2021 12:50:17 +0800 Subject: [PATCH 03/13] =?UTF-8?q?=E5=A2=9E=E5=8A=A0max=E5=87=BD=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/iocoder/dashboard/util/date/DateUtils.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/main/java/cn/iocoder/dashboard/util/date/DateUtils.java b/src/main/java/cn/iocoder/dashboard/util/date/DateUtils.java index 3ae810982..fde10fd1f 100644 --- a/src/main/java/cn/iocoder/dashboard/util/date/DateUtils.java +++ b/src/main/java/cn/iocoder/dashboard/util/date/DateUtils.java @@ -59,4 +59,14 @@ public class DateUtils { return calendar.getTime(); } + public static Date max(Date a, Date b) { + if (a == null) { + return b; + } + if (b == null) { + return a; + } + return a.compareTo(b) > 0 ? a : b; + } + } From 8fb01d0cecfce63c1e8027309622c86a98ddfe8a Mon Sep 17 00:00:00 2001 From: dylan Date: Sat, 20 Mar 2021 12:51:30 +0800 Subject: [PATCH 04/13] =?UTF-8?q?=E6=94=AF=E6=8C=81=E7=A8=8B=E5=BA=8F?= =?UTF-8?q?=E5=90=AF=E5=8A=A8=E6=97=B6=E5=8A=A0=E8=BD=BD=E9=94=99=E8=AF=AF?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../config/ErrorCodeAutoConfiguration.java | 25 ++++++ .../errorcode/config/ErrorCodeProperties.java | 39 +++++++++ .../core/ErrorCodeAutoGenerator.java | 85 +++++++++++++++++++ .../errorcode/core/ErrorCodeRemoteLoader.java | 72 ++++++++++++++++ .../errorcode/ErrorCodeController.http | 58 +++++++++++++ .../controller/errorcode/vo/ErrorCodeVO.java | 2 + .../service/errorcode/ErrorCodeService.java | 16 +++- 7 files changed, 296 insertions(+), 1 deletion(-) create mode 100644 src/main/java/cn/iocoder/dashboard/framework/errorcode/config/ErrorCodeAutoConfiguration.java create mode 100644 src/main/java/cn/iocoder/dashboard/framework/errorcode/config/ErrorCodeProperties.java create mode 100644 src/main/java/cn/iocoder/dashboard/framework/errorcode/core/ErrorCodeAutoGenerator.java create mode 100644 src/main/java/cn/iocoder/dashboard/framework/errorcode/core/ErrorCodeRemoteLoader.java create mode 100644 src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/ErrorCodeController.http diff --git a/src/main/java/cn/iocoder/dashboard/framework/errorcode/config/ErrorCodeAutoConfiguration.java b/src/main/java/cn/iocoder/dashboard/framework/errorcode/config/ErrorCodeAutoConfiguration.java new file mode 100644 index 000000000..1174ffba8 --- /dev/null +++ b/src/main/java/cn/iocoder/dashboard/framework/errorcode/config/ErrorCodeAutoConfiguration.java @@ -0,0 +1,25 @@ +package cn.iocoder.dashboard.framework.errorcode.config; + +import cn.iocoder.dashboard.framework.errorcode.core.ErrorCodeRemoteLoader; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.annotation.EnableScheduling; + +@Configuration +@EnableConfigurationProperties(ErrorCodeProperties.class) +@EnableScheduling // 开启调度任务的功能,因为 ErrorCodeRemoteLoader 通过定时刷新错误码 +public class ErrorCodeAutoConfiguration { + + @Bean + public cn.iocoder.dashboard.framework.errorcode.core.ErrorCodeAutoGenerator errorCodeAutoGenerator(ErrorCodeProperties errorCodeProperties) { + return new cn.iocoder.dashboard.framework.errorcode.core.ErrorCodeAutoGenerator(errorCodeProperties.getGroup()) + .setErrorCodeConstantsClass(errorCodeProperties.getConstantsClass()); + } + + @Bean + public ErrorCodeRemoteLoader errorCodeRemoteLoader(ErrorCodeProperties errorCodeProperties) { + return new ErrorCodeRemoteLoader(errorCodeProperties.getGroup()); + } + +} \ No newline at end of file diff --git a/src/main/java/cn/iocoder/dashboard/framework/errorcode/config/ErrorCodeProperties.java b/src/main/java/cn/iocoder/dashboard/framework/errorcode/config/ErrorCodeProperties.java new file mode 100644 index 000000000..e96370611 --- /dev/null +++ b/src/main/java/cn/iocoder/dashboard/framework/errorcode/config/ErrorCodeProperties.java @@ -0,0 +1,39 @@ +package cn.iocoder.dashboard.framework.errorcode.config; + +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.validation.annotation.Validated; + +import javax.validation.constraints.NotNull; + +@ConfigurationProperties("ruoyi.error-code") +@Validated +public class ErrorCodeProperties { + + /** + * 应用分组 + */ + @NotNull(message = "应用分组不能为空,请设置 ruoyi.error-code.group 配置项,推荐直接使用 spring. application.name 配置项") + private String group; + /** + * 错误码枚举类 + */ + private String constantsClass; + + public String getGroup() { + return group; + } + + public ErrorCodeProperties setGroup(String group) { + this.group = group; + return this; + } + + public String getConstantsClass() { + return constantsClass; + } + + public ErrorCodeProperties setConstantsClass(String constantsClass) { + this.constantsClass = constantsClass; + return this; + } +} \ No newline at end of file diff --git a/src/main/java/cn/iocoder/dashboard/framework/errorcode/core/ErrorCodeAutoGenerator.java b/src/main/java/cn/iocoder/dashboard/framework/errorcode/core/ErrorCodeAutoGenerator.java new file mode 100644 index 000000000..d458578a4 --- /dev/null +++ b/src/main/java/cn/iocoder/dashboard/framework/errorcode/core/ErrorCodeAutoGenerator.java @@ -0,0 +1,85 @@ +package cn.iocoder.dashboard.framework.errorcode.core; + +import cn.iocoder.dashboard.common.exception.ErrorCode; +import cn.iocoder.dashboard.common.pojo.CommonResult; +import cn.iocoder.dashboard.modules.system.controller.errorcode.dto.ErrorCodeAutoGenerateDTO; +import cn.iocoder.dashboard.modules.system.convert.errorcode.ErrorCodeConvert; +import cn.iocoder.dashboard.modules.system.service.errorcode.ErrorCodeService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.boot.context.event.ApplicationReadyEvent; +import org.springframework.context.event.EventListener; +import org.springframework.scheduling.annotation.Async; +import org.springframework.util.StringUtils; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class ErrorCodeAutoGenerator { + + private Logger logger = LoggerFactory.getLogger(ErrorCodeAutoGenerator.class); + + /** + * 应用分组 + */ + private final String group; + /** + * 错误码枚举类 + */ + private String errorCodeConstantsClass; + + @Resource + private ErrorCodeService errorCodeService; + + public ErrorCodeAutoGenerator(String group) { + this.group = group; + } + + public ErrorCodeAutoGenerator setErrorCodeConstantsClass(String errorCodeConstantsClass) { + this.errorCodeConstantsClass = errorCodeConstantsClass; + return this; + } + + @EventListener(ApplicationReadyEvent.class) + @Async // 异步,保证项目的启动过程,毕竟非关键流程 + public void execute() { + // 校验 errorCodeConstantsClass 参数 + if (!StringUtils.hasText(errorCodeConstantsClass)) { + logger.info("[execute][未配置 ruoyi.error-code.constants-class 配置项,不进行自动写入到 system-service 服务]"); + return; + } + Class errorCodeConstantsClazz; + try { + errorCodeConstantsClazz = Class.forName(errorCodeConstantsClass); + } catch (ClassNotFoundException e) { + logger.error("[execute][配置的 ({}) 找不到对应的类]", errorCodeConstantsClass); + return; + } + // 写入 system-service 服务 + logger.info("[execute][自动将 ({}) 类的错误码,准备写入到 system-service 服务]", errorCodeConstantsClass); + List autoGenerateDTOs = new ArrayList<>(); + Arrays.stream(errorCodeConstantsClazz.getFields()).forEach(field -> { + if (field.getType() != ErrorCode.class) { + return; + } + try { + // TODO 芋艿:校验是否重复了; + ErrorCode errorCode = (ErrorCode) field.get(errorCodeConstantsClazz); + autoGenerateDTOs.add(new ErrorCodeAutoGenerateDTO().setGroup(group) + .setCode(errorCode.getCode()).setMessage(errorCode.getMessage())); + } catch (IllegalAccessException e) { + throw new RuntimeException(e); + } + }); + CommonResult autoGenerateErrorCodesResult = errorCodeService.autoGenerateErrorCodes1(ErrorCodeConvert.INSTANCE.convertList03(autoGenerateDTOs)); + if (autoGenerateErrorCodesResult.isSuccess()) { + logger.info("[execute][自动将 ({}) 类的错误码,成功写入到 system-service 服务]", errorCodeConstantsClass); + } else { + logger.error("[execute][自动将 ({}) 类的错误码,失败写入到 system-service 服务,原因为 ({}/{})]", errorCodeConstantsClass, + autoGenerateErrorCodesResult.getCode(), autoGenerateErrorCodesResult.getMsg()); + } + } + +} diff --git a/src/main/java/cn/iocoder/dashboard/framework/errorcode/core/ErrorCodeRemoteLoader.java b/src/main/java/cn/iocoder/dashboard/framework/errorcode/core/ErrorCodeRemoteLoader.java new file mode 100644 index 000000000..41ea7b3bc --- /dev/null +++ b/src/main/java/cn/iocoder/dashboard/framework/errorcode/core/ErrorCodeRemoteLoader.java @@ -0,0 +1,72 @@ +package cn.iocoder.dashboard.framework.errorcode.core; + +import cn.hutool.core.collection.CollUtil; +import cn.iocoder.dashboard.common.exception.util.ServiceExceptionUtil; +import cn.iocoder.dashboard.common.pojo.CommonResult; +import cn.iocoder.dashboard.modules.system.controller.errorcode.vo.ErrorCodeVO; +import cn.iocoder.dashboard.modules.system.service.errorcode.ErrorCodeService; +import cn.iocoder.dashboard.modules.system.service.errorcode.bo.ErrorCodeBO; +import cn.iocoder.dashboard.util.date.DateUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.boot.context.event.ApplicationReadyEvent; +import org.springframework.context.event.EventListener; +import org.springframework.scheduling.annotation.Scheduled; + +import javax.annotation.Resource; +import java.util.Date; +import java.util.List; + +public class ErrorCodeRemoteLoader { + + private static final int REFRESH_ERROR_CODE_PERIOD = 60 * 1000; + + private Logger logger = LoggerFactory.getLogger(ErrorCodeRemoteLoader.class); + + /** + * 应用分组 + */ + private final String group; + + @Resource + private ErrorCodeService errorCodeService; + + private Date maxUpdateTime; + + public ErrorCodeRemoteLoader(String group) { + this.group = group; + } + + @EventListener(ApplicationReadyEvent.class) + public void loadErrorCodes() { + // 从 ErrorCodeRpc 全量加载 ErrorCode 错误码 + CommonResult> listErrorCodesResult = errorCodeService.listErrorCodes1(group, null); + listErrorCodesResult.checkError(); + logger.info("[loadErrorCodes][从 group({}) 全量加载到 {} 个 ErrorCode 错误码]", group, listErrorCodesResult.getData().size()); + // 写入到 ServiceExceptionUtil 到 + listErrorCodesResult.getData().forEach(errorCodeVO -> { + ServiceExceptionUtil.put(errorCodeVO.getCode(), errorCodeVO.getMessage()); + // 记录下更新时间,方便增量更新 + maxUpdateTime = DateUtils.max(maxUpdateTime, errorCodeVO.getUpdateTime()); + }); + } + + @Scheduled(fixedDelay = REFRESH_ERROR_CODE_PERIOD, initialDelay = REFRESH_ERROR_CODE_PERIOD) + public void refreshErrorCodes() { + // 从 ErrorCodeRpc 增量加载 ErrorCode 错误码 + // TODO 优化点:假设删除错误码的配置,会存在问题; + CommonResult> listErrorCodesResult = errorCodeService.listErrorCodes1(group, maxUpdateTime); + listErrorCodesResult.checkError(); + if (CollUtil.isEmpty(listErrorCodesResult.getData())) { + return; + } + logger.info("[refreshErrorCodes][从 group({}) 增量加载到 {} 个 ErrorCode 错误码]", group, listErrorCodesResult.getData().size()); + // 写入到 ServiceExceptionUtil 到 + listErrorCodesResult.getData().forEach(errorCodeVO -> { + ServiceExceptionUtil.put(errorCodeVO.getCode(), errorCodeVO.getMessage()); + // 记录下更新时间,方便增量更新 + maxUpdateTime = DateUtils.max(maxUpdateTime, errorCodeVO.getUpdateTime()); + }); + } + +} diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/ErrorCodeController.http b/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/ErrorCodeController.http new file mode 100644 index 000000000..a45e907ad --- /dev/null +++ b/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/ErrorCodeController.http @@ -0,0 +1,58 @@ +### 请求 /login 接口 => 成功 +POST http://localhost:48080/api/login +Content-Type: application/json + +{ + "username": "admin", + "password": "admin123", + "uuid": "9b2ffbc1-7425-4155-9894-9d5c08541d62", + "code": "1024" +} + +> {% + client.global.set("token", response.body.data.token) + %} + + +### list-group +GET http://localhost:48080/api/system/error-code/list-group +Authorization: Bearer {{token}} +Content-Type: application/x-www-form-urlencoded + +group=test&minUpdateTime=2021-03-14 14:37:47 + + + +### +GET http://localhost:48080/api/system/error-code/query +Authorization: Bearer {{token}} +Content-Type: application/x-www-form-urlencoded + +errorCodeId=350 + +### +POST http://localhost:48080/api/system/error-code/generate +Authorization: Bearer {{token}} + +[ +{ + "code": 202, + "message": "成功1", + "group": "test1" +} +] + +### +POST http://localhost:48080/api/system/error-code/create +Authorization: Bearer {{token}} +Content-Type:application/json + +{ + "code": 200, + "message": "成功", + "group": "test", + "type": 1 +} + + + diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/vo/ErrorCodeVO.java b/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/vo/ErrorCodeVO.java index 306b18d79..b0b17626b 100644 --- a/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/vo/ErrorCodeVO.java +++ b/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/vo/ErrorCodeVO.java @@ -29,5 +29,7 @@ public class ErrorCodeVO { private String memo; @ApiModelProperty(value = "创建时间", required = true) private Date createTime; + @ApiModelProperty(value = "更新时间", required = false) + private Date updateTime; } diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/ErrorCodeService.java b/src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/ErrorCodeService.java index 3f2c81b21..c09e19591 100644 --- a/src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/ErrorCodeService.java +++ b/src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/ErrorCodeService.java @@ -2,8 +2,9 @@ package cn.iocoder.dashboard.modules.system.service.errorcode; import cn.hutool.core.collection.CollUtil; import cn.iocoder.dashboard.common.exception.util.ServiceExceptionUtil; +import cn.iocoder.dashboard.common.pojo.CommonResult; import cn.iocoder.dashboard.common.pojo.PageResult; -import cn.iocoder.dashboard.modules.system.controller.errorcode.dto.ErrorCodePageDTO; +import cn.iocoder.dashboard.modules.system.controller.errorcode.vo.ErrorCodeVO; import cn.iocoder.dashboard.modules.system.convert.errorcode.ErrorCodeConvert; import cn.iocoder.dashboard.modules.system.dal.dataobject.errorcode.ErrorCodeDO; import cn.iocoder.dashboard.modules.system.dal.mysql.errorcode.ErrorCodeMapper; @@ -24,6 +25,7 @@ import java.util.Map; import static cn.iocoder.dashboard.modules.system.enums.SysErrorCodeConstants.ERROR_CODE_DUPLICATE; import static cn.iocoder.dashboard.modules.system.enums.SysErrorCodeConstants.ERROR_CODE_NOT_EXISTS; +import static cn.iocoder.dashboard.common.pojo.CommonResult.success; /** * 错误码 Service @@ -106,6 +108,12 @@ public class ErrorCodeService { }); } + public CommonResult autoGenerateErrorCodes1(@Valid List autoGenerateBOs) { + autoGenerateErrorCodes(autoGenerateBOs); + return success(Boolean.TRUE); + } + + /** * 删除错误码 * @@ -180,5 +188,11 @@ public class ErrorCodeService { return ErrorCodeConvert.INSTANCE.convertList(errorCodeDOs); } + public CommonResult> listErrorCodes1(String group, Date minUpdateTime) { + List errorCodeDOs = errorCodeMapper.selectListByGroup(group, minUpdateTime); + final List errorCodeBOS = ErrorCodeConvert.INSTANCE.convertList(errorCodeDOs); + return success(ErrorCodeConvert.INSTANCE.convertList02(errorCodeBOS)); + } + } From 3981af84ddc17db4bd38690a5c23974aa0a01294 Mon Sep 17 00:00:00 2001 From: dylan Date: Sat, 20 Mar 2021 12:51:53 +0800 Subject: [PATCH 05/13] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E9=94=99=E8=AF=AF?= =?UTF-8?q?=E7=A0=81=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/application.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/resources/application.yaml b/src/main/resources/application.yaml index 33f84c5c8..b26ee176a 100644 --- a/src/main/resources/application.yaml +++ b/src/main/resources/application.yaml @@ -32,3 +32,7 @@ mybatis-plus: logic-not-delete-value: 0 # 逻辑未删除值(默认为 0) mapper-locations: classpath*:mapper/*.xml type-aliases-package: ${yudao.info.base-package}.modules.*.dal.dataobject + +ruoyi: + error-code: + group: test1 From c6ef8b3a44b213e84c0fc7ab6a29a4baa6705688 Mon Sep 17 00:00:00 2001 From: dylan Date: Sat, 20 Mar 2021 15:10:09 +0800 Subject: [PATCH 06/13] =?UTF-8?q?=E4=BF=AE=E6=94=B9httpClient?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../errorcode/ErrorCodeController.http | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/ErrorCodeController.http b/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/ErrorCodeController.http index a45e907ad..6c6ffa80a 100644 --- a/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/ErrorCodeController.http +++ b/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/ErrorCodeController.http @@ -1,19 +1,3 @@ -### 请求 /login 接口 => 成功 -POST http://localhost:48080/api/login -Content-Type: application/json - -{ - "username": "admin", - "password": "admin123", - "uuid": "9b2ffbc1-7425-4155-9894-9d5c08541d62", - "code": "1024" -} - -> {% - client.global.set("token", response.body.data.token) - %} - - ### list-group GET http://localhost:48080/api/system/error-code/list-group Authorization: Bearer {{token}} From e973a4368f4807f582134db5ac5de7c0c6de343b Mon Sep 17 00:00:00 2001 From: dylan Date: Sun, 21 Mar 2021 21:09:25 +0800 Subject: [PATCH 07/13] =?UTF-8?q?refactor(error-code):=20=E7=A7=BB?= =?UTF-8?q?=E9=99=A4=E9=94=99=E8=AF=AF=E7=A0=81BO?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../errorcode/config/ErrorCodeProperties.java | 26 ++------ .../core/ErrorCodeAutoGenerator.java | 19 +++--- .../errorcode/core/ErrorCodeRemoteLoader.java | 11 ++-- .../errorcode/ErrorCodeController.java | 17 +++-- .../convert/errorcode/ErrorCodeConvert.java | 32 ++++------ .../dal/mysql/errorcode/ErrorCodeMapper.java | 10 +-- .../service/errorcode/ErrorCodeService.java | 62 ++++++++++--------- .../errorcode/bo/ErrorCodeAutoGenerateBO.java | 33 ---------- .../service/errorcode/bo/ErrorCodeBO.java | 48 -------------- .../errorcode/bo/ErrorCodeCreateBO.java | 36 ----------- .../service/errorcode/bo/ErrorCodePageBO.java | 29 --------- .../errorcode/bo/ErrorCodeUpdateBO.java | 45 -------------- src/main/resources/application.yaml | 3 +- 13 files changed, 75 insertions(+), 296 deletions(-) delete mode 100644 src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/bo/ErrorCodeAutoGenerateBO.java delete mode 100644 src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/bo/ErrorCodeBO.java delete mode 100644 src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/bo/ErrorCodeCreateBO.java delete mode 100644 src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/bo/ErrorCodePageBO.java delete mode 100644 src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/bo/ErrorCodeUpdateBO.java diff --git a/src/main/java/cn/iocoder/dashboard/framework/errorcode/config/ErrorCodeProperties.java b/src/main/java/cn/iocoder/dashboard/framework/errorcode/config/ErrorCodeProperties.java index e96370611..6b3dbc459 100644 --- a/src/main/java/cn/iocoder/dashboard/framework/errorcode/config/ErrorCodeProperties.java +++ b/src/main/java/cn/iocoder/dashboard/framework/errorcode/config/ErrorCodeProperties.java @@ -1,39 +1,25 @@ package cn.iocoder.dashboard.framework.errorcode.config; +import lombok.Getter; +import lombok.Setter; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.validation.annotation.Validated; import javax.validation.constraints.NotNull; -@ConfigurationProperties("ruoyi.error-code") +@ConfigurationProperties("yudao.error-code") @Validated +@Getter +@Setter public class ErrorCodeProperties { /** * 应用分组 */ - @NotNull(message = "应用分组不能为空,请设置 ruoyi.error-code.group 配置项,推荐直接使用 spring. application.name 配置项") + @NotNull(message = "应用分组不能为空,请设置 yudao.error-code.group 配置项,推荐直接使用 spring.application.name 配置项") private String group; /** * 错误码枚举类 */ private String constantsClass; - - public String getGroup() { - return group; - } - - public ErrorCodeProperties setGroup(String group) { - this.group = group; - return this; - } - - public String getConstantsClass() { - return constantsClass; - } - - public ErrorCodeProperties setConstantsClass(String constantsClass) { - this.constantsClass = constantsClass; - return this; - } } \ No newline at end of file diff --git a/src/main/java/cn/iocoder/dashboard/framework/errorcode/core/ErrorCodeAutoGenerator.java b/src/main/java/cn/iocoder/dashboard/framework/errorcode/core/ErrorCodeAutoGenerator.java index d458578a4..0a892a31c 100644 --- a/src/main/java/cn/iocoder/dashboard/framework/errorcode/core/ErrorCodeAutoGenerator.java +++ b/src/main/java/cn/iocoder/dashboard/framework/errorcode/core/ErrorCodeAutoGenerator.java @@ -3,10 +3,8 @@ package cn.iocoder.dashboard.framework.errorcode.core; import cn.iocoder.dashboard.common.exception.ErrorCode; import cn.iocoder.dashboard.common.pojo.CommonResult; import cn.iocoder.dashboard.modules.system.controller.errorcode.dto.ErrorCodeAutoGenerateDTO; -import cn.iocoder.dashboard.modules.system.convert.errorcode.ErrorCodeConvert; import cn.iocoder.dashboard.modules.system.service.errorcode.ErrorCodeService; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import lombok.extern.slf4j.Slf4j; import org.springframework.boot.context.event.ApplicationReadyEvent; import org.springframework.context.event.EventListener; import org.springframework.scheduling.annotation.Async; @@ -17,10 +15,9 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; +@Slf4j public class ErrorCodeAutoGenerator { - private Logger logger = LoggerFactory.getLogger(ErrorCodeAutoGenerator.class); - /** * 应用分组 */ @@ -47,18 +44,18 @@ public class ErrorCodeAutoGenerator { public void execute() { // 校验 errorCodeConstantsClass 参数 if (!StringUtils.hasText(errorCodeConstantsClass)) { - logger.info("[execute][未配置 ruoyi.error-code.constants-class 配置项,不进行自动写入到 system-service 服务]"); + log.info("[execute][未配置 yudao.error-code.constants-class 配置项,不进行自动写入到当前服务中]"); return; } Class errorCodeConstantsClazz; try { errorCodeConstantsClazz = Class.forName(errorCodeConstantsClass); } catch (ClassNotFoundException e) { - logger.error("[execute][配置的 ({}) 找不到对应的类]", errorCodeConstantsClass); + log.error("[execute][配置的 ({}) 找不到对应的类]", errorCodeConstantsClass); return; } // 写入 system-service 服务 - logger.info("[execute][自动将 ({}) 类的错误码,准备写入到 system-service 服务]", errorCodeConstantsClass); + log.info("[execute][自动将 ({}) 类的错误码,准备写入到当前服务]", errorCodeConstantsClass); List autoGenerateDTOs = new ArrayList<>(); Arrays.stream(errorCodeConstantsClazz.getFields()).forEach(field -> { if (field.getType() != ErrorCode.class) { @@ -73,11 +70,11 @@ public class ErrorCodeAutoGenerator { throw new RuntimeException(e); } }); - CommonResult autoGenerateErrorCodesResult = errorCodeService.autoGenerateErrorCodes1(ErrorCodeConvert.INSTANCE.convertList03(autoGenerateDTOs)); + CommonResult autoGenerateErrorCodesResult = errorCodeService.autoGenerateErrorCodes1(autoGenerateDTOs); if (autoGenerateErrorCodesResult.isSuccess()) { - logger.info("[execute][自动将 ({}) 类的错误码,成功写入到 system-service 服务]", errorCodeConstantsClass); + log.info("[execute][自动将 ({}) 类的错误码,成功写入到当前服务]", errorCodeConstantsClass); } else { - logger.error("[execute][自动将 ({}) 类的错误码,失败写入到 system-service 服务,原因为 ({}/{})]", errorCodeConstantsClass, + log.error("[execute][自动将 ({}) 类的错误码,失败写入到当前服务,原因为 ({}/{})]", errorCodeConstantsClass, autoGenerateErrorCodesResult.getCode(), autoGenerateErrorCodesResult.getMsg()); } } diff --git a/src/main/java/cn/iocoder/dashboard/framework/errorcode/core/ErrorCodeRemoteLoader.java b/src/main/java/cn/iocoder/dashboard/framework/errorcode/core/ErrorCodeRemoteLoader.java index 41ea7b3bc..1a1ce0d3a 100644 --- a/src/main/java/cn/iocoder/dashboard/framework/errorcode/core/ErrorCodeRemoteLoader.java +++ b/src/main/java/cn/iocoder/dashboard/framework/errorcode/core/ErrorCodeRemoteLoader.java @@ -5,10 +5,8 @@ import cn.iocoder.dashboard.common.exception.util.ServiceExceptionUtil; import cn.iocoder.dashboard.common.pojo.CommonResult; import cn.iocoder.dashboard.modules.system.controller.errorcode.vo.ErrorCodeVO; import cn.iocoder.dashboard.modules.system.service.errorcode.ErrorCodeService; -import cn.iocoder.dashboard.modules.system.service.errorcode.bo.ErrorCodeBO; import cn.iocoder.dashboard.util.date.DateUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import lombok.extern.slf4j.Slf4j; import org.springframework.boot.context.event.ApplicationReadyEvent; import org.springframework.context.event.EventListener; import org.springframework.scheduling.annotation.Scheduled; @@ -17,12 +15,11 @@ import javax.annotation.Resource; import java.util.Date; import java.util.List; +@Slf4j public class ErrorCodeRemoteLoader { private static final int REFRESH_ERROR_CODE_PERIOD = 60 * 1000; - private Logger logger = LoggerFactory.getLogger(ErrorCodeRemoteLoader.class); - /** * 应用分组 */ @@ -42,7 +39,7 @@ public class ErrorCodeRemoteLoader { // 从 ErrorCodeRpc 全量加载 ErrorCode 错误码 CommonResult> listErrorCodesResult = errorCodeService.listErrorCodes1(group, null); listErrorCodesResult.checkError(); - logger.info("[loadErrorCodes][从 group({}) 全量加载到 {} 个 ErrorCode 错误码]", group, listErrorCodesResult.getData().size()); + log.info("[loadErrorCodes][从 group({}) 全量加载到 {} 个 ErrorCode 错误码]", group, listErrorCodesResult.getData().size()); // 写入到 ServiceExceptionUtil 到 listErrorCodesResult.getData().forEach(errorCodeVO -> { ServiceExceptionUtil.put(errorCodeVO.getCode(), errorCodeVO.getMessage()); @@ -60,7 +57,7 @@ public class ErrorCodeRemoteLoader { if (CollUtil.isEmpty(listErrorCodesResult.getData())) { return; } - logger.info("[refreshErrorCodes][从 group({}) 增量加载到 {} 个 ErrorCode 错误码]", group, listErrorCodesResult.getData().size()); + log.info("[refreshErrorCodes][从 group({}) 增量加载到 {} 个 ErrorCode 错误码]", group, listErrorCodesResult.getData().size()); // 写入到 ServiceExceptionUtil 到 listErrorCodesResult.getData().forEach(errorCodeVO -> { ServiceExceptionUtil.put(errorCodeVO.getCode(), errorCodeVO.getMessage()); diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/ErrorCodeController.java b/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/ErrorCodeController.java index f50fc70e8..40bd10451 100644 --- a/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/ErrorCodeController.java +++ b/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/ErrorCodeController.java @@ -7,9 +7,7 @@ import cn.iocoder.dashboard.modules.system.controller.errorcode.dto.ErrorCodeCre import cn.iocoder.dashboard.modules.system.controller.errorcode.dto.ErrorCodePageDTO; import cn.iocoder.dashboard.modules.system.controller.errorcode.dto.ErrorCodeUpdateDTO; import cn.iocoder.dashboard.modules.system.controller.errorcode.vo.ErrorCodeVO; -import cn.iocoder.dashboard.modules.system.convert.errorcode.ErrorCodeConvert; import cn.iocoder.dashboard.modules.system.service.errorcode.ErrorCodeService; -import cn.iocoder.dashboard.modules.system.service.errorcode.bo.ErrorCodeBO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.propertyeditors.CustomDateEditor; @@ -44,7 +42,7 @@ public class ErrorCodeController { @ApiOperation("获取指定分组下的状态码") @GetMapping("/list-group") public CommonResult> listErrorCodes(@NotNull(message = "错误码分组不能为空") String group, Date minUpdateTime) { - return success(ErrorCodeConvert.INSTANCE.convertList02(errorCodeService.listErrorCodes(group, minUpdateTime))); + return success(errorCodeService.listErrorCodes(group, minUpdateTime)); } /** @@ -55,7 +53,7 @@ public class ErrorCodeController { @ApiOperation("自动生成错误码") @PostMapping("/generate") public CommonResult autoGenerateErrorCodes(@RequestBody List autoGenerateDTOs) { - errorCodeService.autoGenerateErrorCodes(ErrorCodeConvert.INSTANCE.convertList03(autoGenerateDTOs)); + errorCodeService.autoGenerateErrorCodes(autoGenerateDTOs); return success(Boolean.TRUE); } @@ -69,7 +67,7 @@ public class ErrorCodeController { @ApiOperation("创建错误码") @PostMapping("/create") public CommonResult createErrorCode(@RequestBody ErrorCodeCreateDTO createDTO) { - return success(errorCodeService.createErrorCode(ErrorCodeConvert.INSTANCE.convert(createDTO)).getId()); + return success(errorCodeService.createErrorCode(createDTO).getId()); } /** @@ -80,7 +78,7 @@ public class ErrorCodeController { @ApiOperation("更新错误码") @PatchMapping("/update") public CommonResult updateErrorCode(@RequestBody ErrorCodeUpdateDTO updateDTO) { - errorCodeService.updateErrorCode(ErrorCodeConvert.INSTANCE.convert(updateDTO)); + errorCodeService.updateErrorCode(updateDTO); return success(Boolean.TRUE); } @@ -105,7 +103,7 @@ public class ErrorCodeController { @ApiOperation("获取错误码") @GetMapping("/query") public CommonResult getErrorCode(Integer errorCodeId) { - return success(ErrorCodeConvert.INSTANCE.convert(errorCodeService.getErrorCode(errorCodeId))); + return success(errorCodeService.getErrorCode(errorCodeId)); } /** @@ -117,7 +115,7 @@ public class ErrorCodeController { @ApiOperation("获取错误码列表") @GetMapping("/query-ids") public CommonResult> listErrorCodes(@RequestBody List errorCodeIds) { - return success(ErrorCodeConvert.INSTANCE.convertList02(errorCodeService.listErrorCodes(errorCodeIds))); + return success(errorCodeService.listErrorCodes(errorCodeIds)); } /** @@ -129,8 +127,7 @@ public class ErrorCodeController { @ApiOperation("获取错误码分页列表") @GetMapping("/page") public CommonResult> pageErrorCode(ErrorCodePageDTO pageDTO) { - final PageResult pageResult = errorCodeService.pageErrorCode(ErrorCodeConvert.INSTANCE.convert(pageDTO)); - return success(ErrorCodeConvert.INSTANCE.convertPage(pageResult)); + return success(errorCodeService.pageErrorCode(pageDTO)); } @InitBinder diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/convert/errorcode/ErrorCodeConvert.java b/src/main/java/cn/iocoder/dashboard/modules/system/convert/errorcode/ErrorCodeConvert.java index d6f669081..376911d3e 100644 --- a/src/main/java/cn/iocoder/dashboard/modules/system/convert/errorcode/ErrorCodeConvert.java +++ b/src/main/java/cn/iocoder/dashboard/modules/system/convert/errorcode/ErrorCodeConvert.java @@ -3,47 +3,37 @@ package cn.iocoder.dashboard.modules.system.convert.errorcode; import cn.iocoder.dashboard.common.pojo.PageResult; import cn.iocoder.dashboard.modules.system.controller.errorcode.dto.ErrorCodeAutoGenerateDTO; import cn.iocoder.dashboard.modules.system.controller.errorcode.dto.ErrorCodeCreateDTO; -import cn.iocoder.dashboard.modules.system.controller.errorcode.dto.ErrorCodePageDTO; import cn.iocoder.dashboard.modules.system.controller.errorcode.dto.ErrorCodeUpdateDTO; import cn.iocoder.dashboard.modules.system.controller.errorcode.vo.ErrorCodeVO; import cn.iocoder.dashboard.modules.system.dal.dataobject.errorcode.ErrorCodeDO; -import cn.iocoder.dashboard.modules.system.service.errorcode.bo.*; import com.baomidou.mybatisplus.core.metadata.IPage; import org.mapstruct.Mapper; import org.mapstruct.Mapping; +import org.mapstruct.ReportingPolicy; import org.mapstruct.factory.Mappers; import java.util.List; -@Mapper +/** + * @author dylan + */ +@Mapper(unmappedSourcePolicy = ReportingPolicy.IGNORE) public interface ErrorCodeConvert { ErrorCodeConvert INSTANCE = Mappers.getMapper(ErrorCodeConvert.class); - ErrorCodeDO convert(ErrorCodeCreateBO bean); + ErrorCodeVO convert (ErrorCodeDO bean); - ErrorCodeBO convert(ErrorCodeDO bean); - - List convertList(List list); + List convertList(List list); @Mapping(source = "records", target = "list") - PageResult convertPage(IPage page); + PageResult convertPage(IPage page); - ErrorCodeDO convert(ErrorCodeUpdateBO bean); + ErrorCodeDO convert (ErrorCodeCreateDTO bean); - ErrorCodeCreateBO convert(ErrorCodeCreateDTO bean); + ErrorCodeDO convert (ErrorCodeUpdateDTO bean); - ErrorCodeUpdateBO convert(ErrorCodeUpdateDTO bean); + ErrorCodeDO convert(ErrorCodeAutoGenerateDTO bean); - ErrorCodeVO convert(ErrorCodeBO bean); - List convertList02(List list); - - PageResult convertPage(PageResult page); - - ErrorCodePageBO convert(ErrorCodePageDTO bean); - - ErrorCodeDO convert(ErrorCodeAutoGenerateBO bean); - - List convertList03(List list); } diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/errorcode/ErrorCodeMapper.java b/src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/errorcode/ErrorCodeMapper.java index 13c53f1ee..0ae75b934 100644 --- a/src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/errorcode/ErrorCodeMapper.java +++ b/src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/errorcode/ErrorCodeMapper.java @@ -1,8 +1,8 @@ package cn.iocoder.dashboard.modules.system.dal.mysql.errorcode; import cn.iocoder.dashboard.framework.mybatis.core.query.QueryWrapperX; +import cn.iocoder.dashboard.modules.system.controller.errorcode.dto.ErrorCodePageDTO; import cn.iocoder.dashboard.modules.system.dal.dataobject.errorcode.ErrorCodeDO; -import cn.iocoder.dashboard.modules.system.service.errorcode.bo.ErrorCodePageBO; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -15,10 +15,10 @@ import java.util.List; @Mapper public interface ErrorCodeMapper extends BaseMapper { - default IPage selectPage(ErrorCodePageBO pageBO) { - return selectPage(new Page<>(pageBO.getPageNo(), pageBO.getPageSize()), - new QueryWrapperX().likeIfPresent("`group`", pageBO.getGroup()) - .eqIfPresent("code", pageBO.getCode()).likeIfPresent("message", pageBO.getMessage())); + default IPage selectPage(ErrorCodePageDTO pageDTO) { + return selectPage(new Page<>(pageDTO.getPageNo(), pageDTO.getPageSize()), + new QueryWrapperX().likeIfPresent("`group`", pageDTO.getGroup()) + .eqIfPresent("code", pageDTO.getCode()).likeIfPresent("message", pageDTO.getMessage())); } default List selectListByCodes(Collection codes) { diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/ErrorCodeService.java b/src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/ErrorCodeService.java index c09e19591..1573e7d0c 100644 --- a/src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/ErrorCodeService.java +++ b/src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/ErrorCodeService.java @@ -4,12 +4,15 @@ import cn.hutool.core.collection.CollUtil; import cn.iocoder.dashboard.common.exception.util.ServiceExceptionUtil; import cn.iocoder.dashboard.common.pojo.CommonResult; import cn.iocoder.dashboard.common.pojo.PageResult; +import cn.iocoder.dashboard.modules.system.controller.errorcode.dto.ErrorCodeAutoGenerateDTO; +import cn.iocoder.dashboard.modules.system.controller.errorcode.dto.ErrorCodeCreateDTO; +import cn.iocoder.dashboard.modules.system.controller.errorcode.dto.ErrorCodePageDTO; +import cn.iocoder.dashboard.modules.system.controller.errorcode.dto.ErrorCodeUpdateDTO; import cn.iocoder.dashboard.modules.system.controller.errorcode.vo.ErrorCodeVO; import cn.iocoder.dashboard.modules.system.convert.errorcode.ErrorCodeConvert; import cn.iocoder.dashboard.modules.system.dal.dataobject.errorcode.ErrorCodeDO; import cn.iocoder.dashboard.modules.system.dal.mysql.errorcode.ErrorCodeMapper; import cn.iocoder.dashboard.modules.system.enums.errorcode.ErrorCodeTypeEnum; -import cn.iocoder.dashboard.modules.system.service.errorcode.bo.*; import cn.iocoder.dashboard.util.collection.CollectionUtils; import com.baomidou.mybatisplus.core.metadata.IPage; import lombok.extern.slf4j.Slf4j; @@ -41,13 +44,13 @@ public class ErrorCodeService { /** * 创建错误码 * - * @param createBO 创建错误码 BO + * @param createDTO 创建错误码 DTO * @return 错误码 */ - public ErrorCodeBO createErrorCode(@Valid ErrorCodeCreateBO createBO) { - checkDuplicateErrorCode(createBO.getCode(), null); + public ErrorCodeVO createErrorCode(@Valid ErrorCodeCreateDTO createDTO) { + checkDuplicateErrorCode(createDTO.getCode(), null); // 插入到数据库 - ErrorCodeDO errorCodeDO = ErrorCodeConvert.INSTANCE.convert(createBO); + ErrorCodeDO errorCodeDO = ErrorCodeConvert.INSTANCE.convert(createDTO); errorCodeMapper.insert(errorCodeDO); // 返回 return ErrorCodeConvert.INSTANCE.convert(errorCodeDO); @@ -56,33 +59,33 @@ public class ErrorCodeService { /** * 更新错误码 * - * @param updateBO 更新错误码 BO + * @param updateDTO 更新错误码 DTO */ - public void updateErrorCode(@Valid ErrorCodeUpdateBO updateBO) { - checkDuplicateErrorCode(updateBO.getCode(), updateBO.getId()); + public void updateErrorCode(@Valid ErrorCodeUpdateDTO updateDTO) { + checkDuplicateErrorCode(updateDTO.getCode(), updateDTO.getId()); // 校验更新的错误码是否存在 - if (errorCodeMapper.selectById(updateBO.getId()) == null) { + if (errorCodeMapper.selectById(updateDTO.getId()) == null) { throw ServiceExceptionUtil.exception(ERROR_CODE_NOT_EXISTS); } // 更新到数据库 - ErrorCodeDO updateObject = ErrorCodeConvert.INSTANCE.convert(updateBO); + ErrorCodeDO updateObject = ErrorCodeConvert.INSTANCE.convert(updateDTO); errorCodeMapper.updateById(updateObject); } @Transactional - public void autoGenerateErrorCodes(@Valid List autoGenerateBOs) { - if (CollUtil.isEmpty(autoGenerateBOs)) { + public void autoGenerateErrorCodes(@Valid List autoGenerateDTOs) { + if (CollUtil.isEmpty(autoGenerateDTOs)) { return; } List errorCodeDOs = errorCodeMapper.selectListByCodes( - CollectionUtils.convertSet(autoGenerateBOs, ErrorCodeAutoGenerateBO::getCode)); + CollectionUtils.convertSet(autoGenerateDTOs, ErrorCodeAutoGenerateDTO::getCode)); Map errorCodeDOMap = CollectionUtils.convertMap(errorCodeDOs, ErrorCodeDO::getCode); // 遍历 autoGenerateBOs 数组,逐个插入或更新。考虑到每次量级不大,就不走批量了 - autoGenerateBOs.forEach(autoGenerateBO -> { - ErrorCodeDO errorCodeDO = errorCodeDOMap.get(autoGenerateBO.getCode()); + autoGenerateDTOs.forEach(autoGenerateDTO -> { + ErrorCodeDO errorCodeDO = errorCodeDOMap.get(autoGenerateDTO.getCode()); // 不存在,则进行新增 if (errorCodeDO == null) { - errorCodeDO = ErrorCodeConvert.INSTANCE.convert(autoGenerateBO) + errorCodeDO = ErrorCodeConvert.INSTANCE.convert(autoGenerateDTO) .setType(ErrorCodeTypeEnum.AUTO_GENERATION.getType()); errorCodeMapper.insert(errorCodeDO); return; @@ -93,23 +96,23 @@ public class ErrorCodeService { return; } // 条件 2. 分组 group 必须匹配,避免存在错误码冲突的情况 - if (!autoGenerateBO.getGroup().equals(errorCodeDO.getGroup())) { + if (!autoGenerateDTO.getGroup().equals(errorCodeDO.getGroup())) { log.error("[autoGenerateErrorCodes][自动创建({}/{}) 错误码失败,数据库中已经存在({}/{})]", - autoGenerateBO.getCode(), autoGenerateBO.getGroup(), + autoGenerateDTO.getCode(), autoGenerateDTO.getGroup(), errorCodeDO.getCode(), errorCodeDO.getGroup()); return; } // 条件 3. 错误提示语存在差异 - if (autoGenerateBO.getMessage().equals(errorCodeDO.getMessage())) { + if (autoGenerateDTO.getMessage().equals(errorCodeDO.getMessage())) { return; } // 最终匹配,进行更新 - errorCodeMapper.updateById(new ErrorCodeDO().setId(errorCodeDO.getId()).setMessage(autoGenerateBO.getMessage())); + errorCodeMapper.updateById(new ErrorCodeDO().setId(errorCodeDO.getId()).setMessage(autoGenerateDTO.getMessage())); }); } - public CommonResult autoGenerateErrorCodes1(@Valid List autoGenerateBOs) { - autoGenerateErrorCodes(autoGenerateBOs); + public CommonResult autoGenerateErrorCodes1(@Valid List autoGenerateDTOs) { + autoGenerateErrorCodes(autoGenerateDTOs); return success(Boolean.TRUE); } @@ -134,7 +137,7 @@ public class ErrorCodeService { * @param errorCodeId 错误码编号 * @return 错误码 */ - public ErrorCodeBO getErrorCode(Integer errorCodeId) { + public ErrorCodeVO getErrorCode(Integer errorCodeId) { ErrorCodeDO errorCodeDO = errorCodeMapper.selectById(errorCodeId); return ErrorCodeConvert.INSTANCE.convert(errorCodeDO); } @@ -145,7 +148,7 @@ public class ErrorCodeService { * @param errorCodeIds 错误码编号列表 * @return 错误码列表 */ - public List listErrorCodes(List errorCodeIds) { + public List listErrorCodes(List errorCodeIds) { List errorCodeDOs = errorCodeMapper.selectBatchIds(errorCodeIds); return ErrorCodeConvert.INSTANCE.convertList(errorCodeDOs); } @@ -153,11 +156,11 @@ public class ErrorCodeService { /** * 获得错误码分页 * - * @param pageBO 错误码分页查询 + * @param pageDTO 错误码分页查询 * @return 错误码分页结果 */ - public PageResult pageErrorCode(ErrorCodePageBO pageBO) { - IPage errorCodeDOPage = errorCodeMapper.selectPage(pageBO); + public PageResult pageErrorCode(ErrorCodePageDTO pageDTO) { + IPage errorCodeDOPage = errorCodeMapper.selectPage(pageDTO); return ErrorCodeConvert.INSTANCE.convertPage(errorCodeDOPage); } @@ -183,15 +186,14 @@ public class ErrorCodeService { } } - public List listErrorCodes(String group, Date minUpdateTime) { + public List listErrorCodes(String group, Date minUpdateTime) { List errorCodeDOs = errorCodeMapper.selectListByGroup(group, minUpdateTime); return ErrorCodeConvert.INSTANCE.convertList(errorCodeDOs); } public CommonResult> listErrorCodes1(String group, Date minUpdateTime) { List errorCodeDOs = errorCodeMapper.selectListByGroup(group, minUpdateTime); - final List errorCodeBOS = ErrorCodeConvert.INSTANCE.convertList(errorCodeDOs); - return success(ErrorCodeConvert.INSTANCE.convertList02(errorCodeBOS)); + return success(ErrorCodeConvert.INSTANCE.convertList(errorCodeDOs)); } } diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/bo/ErrorCodeAutoGenerateBO.java b/src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/bo/ErrorCodeAutoGenerateBO.java deleted file mode 100644 index ab232cefa..000000000 --- a/src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/bo/ErrorCodeAutoGenerateBO.java +++ /dev/null @@ -1,33 +0,0 @@ -package cn.iocoder.dashboard.modules.system.service.errorcode.bo; - -import lombok.Data; -import lombok.experimental.Accessors; - -import javax.validation.constraints.NotEmpty; -import javax.validation.constraints.NotNull; -import java.io.Serializable; - -/** - * 错误码自动生成 BO - */ -@Data -@Accessors(chain = true) -public class ErrorCodeAutoGenerateBO implements Serializable { - - /** - * 错误码编码 - */ - @NotNull(message = "错误码编码不能为空") - private Integer code; - /** - * 错误码错误提示 - */ - @NotEmpty(message = "错误码错误提示不能为空") - private String message; - /** - * 错误码分组 - */ - @NotNull(message = "错误码分组不能为空") - private String group; - -} \ No newline at end of file diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/bo/ErrorCodeBO.java b/src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/bo/ErrorCodeBO.java deleted file mode 100644 index bce150e70..000000000 --- a/src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/bo/ErrorCodeBO.java +++ /dev/null @@ -1,48 +0,0 @@ -package cn.iocoder.dashboard.modules.system.service.errorcode.bo; - -import lombok.Data; -import lombok.experimental.Accessors; - -import java.util.Date; - -/** - * 错误码 BO - */ -@Data -@Accessors(chain = true) -public class ErrorCodeBO { - - /** - * 错误码编号 - */ - private Integer id; - /** - * 错误码编码 - */ - private Integer code; - /** - * 错误码错误提示 - */ - private String message; - /** - * 错误码类型 - */ - private Integer type; - /** - * 错误码分组 - */ - private String group; - /** - * 错误码备注 - */ - private String memo; - /** - * 创建时间 - */ - private Date createTime; - /** - * 最后更新时间 - */ - private Date updateTime; - -} \ No newline at end of file diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/bo/ErrorCodeCreateBO.java b/src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/bo/ErrorCodeCreateBO.java deleted file mode 100644 index ec4d810c4..000000000 --- a/src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/bo/ErrorCodeCreateBO.java +++ /dev/null @@ -1,36 +0,0 @@ -package cn.iocoder.dashboard.modules.system.service.errorcode.bo; - -import lombok.Data; -import lombok.experimental.Accessors; - -import javax.validation.constraints.NotEmpty; -import javax.validation.constraints.NotNull; - -@Data -@Accessors(chain = true) -public class ErrorCodeCreateBO { - - /** - * 错误码编码 - */ - @NotNull(message = "错误码编码不能为空") - private Integer code; - /** - * 错误码错误提示 - */ - @NotEmpty(message = "错误码错误提示不能为空") - private String message; - /** - * 错误码类型 - */ - @NotNull(message = "错误码类型不能为空") - private Integer type; - /** - * 错误码分组 - */ - private String group; - /** - * 错误码备注 - */ - private String memo; -} diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/bo/ErrorCodePageBO.java b/src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/bo/ErrorCodePageBO.java deleted file mode 100644 index 4bf6b1ac1..000000000 --- a/src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/bo/ErrorCodePageBO.java +++ /dev/null @@ -1,29 +0,0 @@ -package cn.iocoder.dashboard.modules.system.service.errorcode.bo; - -import cn.iocoder.dashboard.common.pojo.PageParam; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; - -/** - * 错误码分页 BO - */ -@Data -@EqualsAndHashCode(callSuper = true) -@Accessors(chain = true) -public class ErrorCodePageBO extends PageParam { - - /** - * 错误码编码 - */ - private Integer code; - /** - * 错误码错误提示 - */ - private String message; - /** - * 错误码分组 - */ - private String group; - -} \ No newline at end of file diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/bo/ErrorCodeUpdateBO.java b/src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/bo/ErrorCodeUpdateBO.java deleted file mode 100644 index 58e8f80a3..000000000 --- a/src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/bo/ErrorCodeUpdateBO.java +++ /dev/null @@ -1,45 +0,0 @@ -package cn.iocoder.dashboard.modules.system.service.errorcode.bo; - -import lombok.Data; -import lombok.experimental.Accessors; - -import javax.validation.constraints.NotEmpty; -import javax.validation.constraints.NotNull; - -/** - * 错误码更新 BO - */ -@Data -@Accessors(chain = true) -public class ErrorCodeUpdateBO { - - /** - * 错误码编号 - */ - @NotNull(message = "错误码编号不能为空") - private Integer id; - /** - * 错误码编码 - */ - @NotNull(message = "错误码编码不能为空") - private Integer code; - /** - * 错误码错误提示 - */ - @NotEmpty(message = "错误码错误提示不能为空") - private String message; - /** - * 错误码类型 - */ - @NotNull(message = "错误码类型不能为空") - private Integer type; - /** - * 错误码分组 - */ - private String group; - /** - * 错误码备注 - */ - private String memo; - -} \ No newline at end of file diff --git a/src/main/resources/application.yaml b/src/main/resources/application.yaml index b26ee176a..f704932ed 100644 --- a/src/main/resources/application.yaml +++ b/src/main/resources/application.yaml @@ -33,6 +33,7 @@ mybatis-plus: mapper-locations: classpath*:mapper/*.xml type-aliases-package: ${yudao.info.base-package}.modules.*.dal.dataobject -ruoyi: +yudao: error-code: group: test1 + constantsClass: cn.iocoder.dashboard.common.exception.enums.GlobalErrorCodeConstants From 5bd631636310789779e2409e45937fb242fef055 Mon Sep 17 00:00:00 2001 From: dylan Date: Sun, 21 Mar 2021 22:50:33 +0800 Subject: [PATCH 08/13] =?UTF-8?q?refactor(error-code):=20=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E4=B8=BA=E6=A1=86=E6=9E=B6=E5=AE=9A=E4=B9=89=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=EF=BC=8Cmodules=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../config/ErrorCodeAutoConfiguration.java | 11 +-- .../core/ErrorCodeAutoGenerator.java | 82 ++----------------- .../errorcode/core/ErrorCodeRemoteLoader.java | 69 ++-------------- .../errorcode/ErrorCodeAutoGeneratorImpl.java | 80 ++++++++++++++++++ .../errorcode/ErrorCodeRemoteLoaderImpl.java | 71 ++++++++++++++++ 5 files changed, 170 insertions(+), 143 deletions(-) create mode 100644 src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/ErrorCodeAutoGeneratorImpl.java create mode 100644 src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/ErrorCodeRemoteLoaderImpl.java diff --git a/src/main/java/cn/iocoder/dashboard/framework/errorcode/config/ErrorCodeAutoConfiguration.java b/src/main/java/cn/iocoder/dashboard/framework/errorcode/config/ErrorCodeAutoConfiguration.java index 1174ffba8..33c74a19b 100644 --- a/src/main/java/cn/iocoder/dashboard/framework/errorcode/config/ErrorCodeAutoConfiguration.java +++ b/src/main/java/cn/iocoder/dashboard/framework/errorcode/config/ErrorCodeAutoConfiguration.java @@ -1,6 +1,7 @@ package cn.iocoder.dashboard.framework.errorcode.config; -import cn.iocoder.dashboard.framework.errorcode.core.ErrorCodeRemoteLoader; +import cn.iocoder.dashboard.modules.system.service.errorcode.ErrorCodeRemoteLoaderImpl; +import cn.iocoder.dashboard.modules.system.service.errorcode.ErrorCodeAutoGeneratorImpl; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -12,14 +13,14 @@ import org.springframework.scheduling.annotation.EnableScheduling; public class ErrorCodeAutoConfiguration { @Bean - public cn.iocoder.dashboard.framework.errorcode.core.ErrorCodeAutoGenerator errorCodeAutoGenerator(ErrorCodeProperties errorCodeProperties) { - return new cn.iocoder.dashboard.framework.errorcode.core.ErrorCodeAutoGenerator(errorCodeProperties.getGroup()) + public ErrorCodeAutoGeneratorImpl errorCodeAutoGenerator(ErrorCodeProperties errorCodeProperties) { + return new ErrorCodeAutoGeneratorImpl(errorCodeProperties.getGroup()) .setErrorCodeConstantsClass(errorCodeProperties.getConstantsClass()); } @Bean - public ErrorCodeRemoteLoader errorCodeRemoteLoader(ErrorCodeProperties errorCodeProperties) { - return new ErrorCodeRemoteLoader(errorCodeProperties.getGroup()); + public ErrorCodeRemoteLoaderImpl errorCodeRemoteLoader(ErrorCodeProperties errorCodeProperties) { + return new ErrorCodeRemoteLoaderImpl(errorCodeProperties.getGroup()); } } \ No newline at end of file diff --git a/src/main/java/cn/iocoder/dashboard/framework/errorcode/core/ErrorCodeAutoGenerator.java b/src/main/java/cn/iocoder/dashboard/framework/errorcode/core/ErrorCodeAutoGenerator.java index 0a892a31c..5bf1fb2b1 100644 --- a/src/main/java/cn/iocoder/dashboard/framework/errorcode/core/ErrorCodeAutoGenerator.java +++ b/src/main/java/cn/iocoder/dashboard/framework/errorcode/core/ErrorCodeAutoGenerator.java @@ -1,82 +1,12 @@ package cn.iocoder.dashboard.framework.errorcode.core; -import cn.iocoder.dashboard.common.exception.ErrorCode; -import cn.iocoder.dashboard.common.pojo.CommonResult; -import cn.iocoder.dashboard.modules.system.controller.errorcode.dto.ErrorCodeAutoGenerateDTO; -import cn.iocoder.dashboard.modules.system.service.errorcode.ErrorCodeService; -import lombok.extern.slf4j.Slf4j; -import org.springframework.boot.context.event.ApplicationReadyEvent; -import org.springframework.context.event.EventListener; -import org.springframework.scheduling.annotation.Async; -import org.springframework.util.StringUtils; - -import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -@Slf4j -public class ErrorCodeAutoGenerator { +/** + * @author dylan + */ +public interface ErrorCodeAutoGenerator { /** - * 应用分组 + * 将配置类到错误码写入数据库 */ - private final String group; - /** - * 错误码枚举类 - */ - private String errorCodeConstantsClass; - - @Resource - private ErrorCodeService errorCodeService; - - public ErrorCodeAutoGenerator(String group) { - this.group = group; - } - - public ErrorCodeAutoGenerator setErrorCodeConstantsClass(String errorCodeConstantsClass) { - this.errorCodeConstantsClass = errorCodeConstantsClass; - return this; - } - - @EventListener(ApplicationReadyEvent.class) - @Async // 异步,保证项目的启动过程,毕竟非关键流程 - public void execute() { - // 校验 errorCodeConstantsClass 参数 - if (!StringUtils.hasText(errorCodeConstantsClass)) { - log.info("[execute][未配置 yudao.error-code.constants-class 配置项,不进行自动写入到当前服务中]"); - return; - } - Class errorCodeConstantsClazz; - try { - errorCodeConstantsClazz = Class.forName(errorCodeConstantsClass); - } catch (ClassNotFoundException e) { - log.error("[execute][配置的 ({}) 找不到对应的类]", errorCodeConstantsClass); - return; - } - // 写入 system-service 服务 - log.info("[execute][自动将 ({}) 类的错误码,准备写入到当前服务]", errorCodeConstantsClass); - List autoGenerateDTOs = new ArrayList<>(); - Arrays.stream(errorCodeConstantsClazz.getFields()).forEach(field -> { - if (field.getType() != ErrorCode.class) { - return; - } - try { - // TODO 芋艿:校验是否重复了; - ErrorCode errorCode = (ErrorCode) field.get(errorCodeConstantsClazz); - autoGenerateDTOs.add(new ErrorCodeAutoGenerateDTO().setGroup(group) - .setCode(errorCode.getCode()).setMessage(errorCode.getMessage())); - } catch (IllegalAccessException e) { - throw new RuntimeException(e); - } - }); - CommonResult autoGenerateErrorCodesResult = errorCodeService.autoGenerateErrorCodes1(autoGenerateDTOs); - if (autoGenerateErrorCodesResult.isSuccess()) { - log.info("[execute][自动将 ({}) 类的错误码,成功写入到当前服务]", errorCodeConstantsClass); - } else { - log.error("[execute][自动将 ({}) 类的错误码,失败写入到当前服务,原因为 ({}/{})]", errorCodeConstantsClass, - autoGenerateErrorCodesResult.getCode(), autoGenerateErrorCodesResult.getMsg()); - } - } - + void execute(); } diff --git a/src/main/java/cn/iocoder/dashboard/framework/errorcode/core/ErrorCodeRemoteLoader.java b/src/main/java/cn/iocoder/dashboard/framework/errorcode/core/ErrorCodeRemoteLoader.java index 1a1ce0d3a..6c3113ca8 100644 --- a/src/main/java/cn/iocoder/dashboard/framework/errorcode/core/ErrorCodeRemoteLoader.java +++ b/src/main/java/cn/iocoder/dashboard/framework/errorcode/core/ErrorCodeRemoteLoader.java @@ -1,69 +1,14 @@ package cn.iocoder.dashboard.framework.errorcode.core; -import cn.hutool.core.collection.CollUtil; -import cn.iocoder.dashboard.common.exception.util.ServiceExceptionUtil; -import cn.iocoder.dashboard.common.pojo.CommonResult; -import cn.iocoder.dashboard.modules.system.controller.errorcode.vo.ErrorCodeVO; -import cn.iocoder.dashboard.modules.system.service.errorcode.ErrorCodeService; -import cn.iocoder.dashboard.util.date.DateUtils; -import lombok.extern.slf4j.Slf4j; -import org.springframework.boot.context.event.ApplicationReadyEvent; -import org.springframework.context.event.EventListener; -import org.springframework.scheduling.annotation.Scheduled; - -import javax.annotation.Resource; -import java.util.Date; -import java.util.List; - -@Slf4j -public class ErrorCodeRemoteLoader { - - private static final int REFRESH_ERROR_CODE_PERIOD = 60 * 1000; +public interface ErrorCodeRemoteLoader { /** - * 应用分组 + * 全量加载 ErrorCode 错误码 */ - private final String group; - - @Resource - private ErrorCodeService errorCodeService; - - private Date maxUpdateTime; - - public ErrorCodeRemoteLoader(String group) { - this.group = group; - } - - @EventListener(ApplicationReadyEvent.class) - public void loadErrorCodes() { - // 从 ErrorCodeRpc 全量加载 ErrorCode 错误码 - CommonResult> listErrorCodesResult = errorCodeService.listErrorCodes1(group, null); - listErrorCodesResult.checkError(); - log.info("[loadErrorCodes][从 group({}) 全量加载到 {} 个 ErrorCode 错误码]", group, listErrorCodesResult.getData().size()); - // 写入到 ServiceExceptionUtil 到 - listErrorCodesResult.getData().forEach(errorCodeVO -> { - ServiceExceptionUtil.put(errorCodeVO.getCode(), errorCodeVO.getMessage()); - // 记录下更新时间,方便增量更新 - maxUpdateTime = DateUtils.max(maxUpdateTime, errorCodeVO.getUpdateTime()); - }); - } - - @Scheduled(fixedDelay = REFRESH_ERROR_CODE_PERIOD, initialDelay = REFRESH_ERROR_CODE_PERIOD) - public void refreshErrorCodes() { - // 从 ErrorCodeRpc 增量加载 ErrorCode 错误码 - // TODO 优化点:假设删除错误码的配置,会存在问题; - CommonResult> listErrorCodesResult = errorCodeService.listErrorCodes1(group, maxUpdateTime); - listErrorCodesResult.checkError(); - if (CollUtil.isEmpty(listErrorCodesResult.getData())) { - return; - } - log.info("[refreshErrorCodes][从 group({}) 增量加载到 {} 个 ErrorCode 错误码]", group, listErrorCodesResult.getData().size()); - // 写入到 ServiceExceptionUtil 到 - listErrorCodesResult.getData().forEach(errorCodeVO -> { - ServiceExceptionUtil.put(errorCodeVO.getCode(), errorCodeVO.getMessage()); - // 记录下更新时间,方便增量更新 - maxUpdateTime = DateUtils.max(maxUpdateTime, errorCodeVO.getUpdateTime()); - }); - } + void loadErrorCodes(); + /** + * 增量加载 ErrorCode 错误码 + */ + void refreshErrorCodes(); } diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/ErrorCodeAutoGeneratorImpl.java b/src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/ErrorCodeAutoGeneratorImpl.java new file mode 100644 index 000000000..83a0b3095 --- /dev/null +++ b/src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/ErrorCodeAutoGeneratorImpl.java @@ -0,0 +1,80 @@ +package cn.iocoder.dashboard.modules.system.service.errorcode; + +import cn.iocoder.dashboard.common.exception.ErrorCode; +import cn.iocoder.dashboard.common.pojo.CommonResult; +import cn.iocoder.dashboard.framework.errorcode.core.ErrorCodeAutoGenerator; +import cn.iocoder.dashboard.modules.system.controller.errorcode.dto.ErrorCodeAutoGenerateDTO; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.context.event.ApplicationReadyEvent; +import org.springframework.context.event.EventListener; +import org.springframework.scheduling.annotation.Async; +import org.springframework.util.StringUtils; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +@RequiredArgsConstructor +@Slf4j +public class ErrorCodeAutoGeneratorImpl implements ErrorCodeAutoGenerator { + + /** + * 应用分组 + */ + private final String group; + /** + * 错误码枚举类 + */ + private String errorCodeConstantsClass; + + @Resource + private ErrorCodeService errorCodeService; + + public ErrorCodeAutoGeneratorImpl setErrorCodeConstantsClass(String errorCodeConstantsClass) { + this.errorCodeConstantsClass = errorCodeConstantsClass; + return this; + } + + @Override + @EventListener(ApplicationReadyEvent.class) + @Async // 异步,保证项目的启动过程,毕竟非关键流程 + public void execute() { + // 校验 errorCodeConstantsClass 参数 + if (!StringUtils.hasText(errorCodeConstantsClass)) { + log.info("[execute][未配置 yudao.error-code.constants-class 配置项,不进行自动写入到当前服务中]"); + return; + } + Class errorCodeConstantsClazz; + try { + errorCodeConstantsClazz = Class.forName(errorCodeConstantsClass); + } catch (ClassNotFoundException e) { + log.error("[execute][配置的 ({}) 找不到对应的类]", errorCodeConstantsClass); + return; + } + // 写入 system-service 服务 + log.info("[execute][自动将 ({}) 类的错误码,准备写入到当前服务]", errorCodeConstantsClass); + List autoGenerateDTOs = new ArrayList<>(); + Arrays.stream(errorCodeConstantsClazz.getFields()).forEach(field -> { + if (field.getType() != ErrorCode.class) { + return; + } + try { + ErrorCode errorCode = (ErrorCode) field.get(errorCodeConstantsClazz); + autoGenerateDTOs.add(new ErrorCodeAutoGenerateDTO().setGroup(group) + .setCode(errorCode.getCode()).setMessage(errorCode.getMessage())); + } catch (IllegalAccessException e) { + throw new RuntimeException(e); + } + }); + CommonResult autoGenerateErrorCodesResult = errorCodeService.autoGenerateErrorCodes1(autoGenerateDTOs); + if (autoGenerateErrorCodesResult.isSuccess()) { + log.info("[execute][自动将 ({}) 类的错误码,成功写入到当前服务]", errorCodeConstantsClass); + } else { + log.error("[execute][自动将 ({}) 类的错误码,失败写入到当前服务,原因为 ({}/{})]", errorCodeConstantsClass, + autoGenerateErrorCodesResult.getCode(), autoGenerateErrorCodesResult.getMsg()); + } + } + +} diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/ErrorCodeRemoteLoaderImpl.java b/src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/ErrorCodeRemoteLoaderImpl.java new file mode 100644 index 000000000..be4fe1234 --- /dev/null +++ b/src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/ErrorCodeRemoteLoaderImpl.java @@ -0,0 +1,71 @@ +package cn.iocoder.dashboard.modules.system.service.errorcode; + +import cn.hutool.core.collection.CollUtil; +import cn.iocoder.dashboard.common.exception.util.ServiceExceptionUtil; +import cn.iocoder.dashboard.common.pojo.CommonResult; +import cn.iocoder.dashboard.framework.errorcode.core.ErrorCodeRemoteLoader; +import cn.iocoder.dashboard.modules.system.controller.errorcode.vo.ErrorCodeVO; +import cn.iocoder.dashboard.util.date.DateUtils; +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.context.event.ApplicationReadyEvent; +import org.springframework.context.event.EventListener; +import org.springframework.scheduling.annotation.Scheduled; + +import javax.annotation.Resource; +import java.util.Date; +import java.util.List; + +@Slf4j +public class ErrorCodeRemoteLoaderImpl implements ErrorCodeRemoteLoader { + + private static final int REFRESH_ERROR_CODE_PERIOD = 60 * 1000; + + /** + * 应用分组 + */ + private final String group; + + @Resource + private ErrorCodeService errorCodeService; + + private Date maxUpdateTime; + + public ErrorCodeRemoteLoaderImpl(String group) { + this.group = group; + } + + @Override + @EventListener(ApplicationReadyEvent.class) + public void loadErrorCodes() { + // 从 ErrorCodeRpc 全量加载 ErrorCode 错误码 + CommonResult> listErrorCodesResult = errorCodeService.listErrorCodes1(group, null); + listErrorCodesResult.checkError(); + log.info("[loadErrorCodes][从 group({}) 全量加载到 {} 个 ErrorCode 错误码]", group, listErrorCodesResult.getData().size()); + // 写入到 ServiceExceptionUtil 到 + listErrorCodesResult.getData().forEach(errorCodeVO -> { + ServiceExceptionUtil.put(errorCodeVO.getCode(), errorCodeVO.getMessage()); + // 记录下更新时间,方便增量更新 + maxUpdateTime = DateUtils.max(maxUpdateTime, errorCodeVO.getUpdateTime()); + }); + } + + @Override + @Scheduled(fixedDelay = REFRESH_ERROR_CODE_PERIOD, initialDelay = REFRESH_ERROR_CODE_PERIOD) + public void refreshErrorCodes() { + // 从 ErrorCodeRpc 增量加载 ErrorCode 错误码 + // TODO 优化点:假设删除错误码的配置,会存在问题; + CommonResult> listErrorCodesResult = errorCodeService.listErrorCodes1(group, maxUpdateTime); + listErrorCodesResult.checkError(); + if (CollUtil.isEmpty(listErrorCodesResult.getData())) { + return; + } + log.info("[refreshErrorCodes][从 group({}) 增量加载到 {} 个 ErrorCode 错误码]", group, listErrorCodesResult.getData().size()); + // 写入到 ServiceExceptionUtil 到 + listErrorCodesResult.getData().forEach(errorCodeVO -> { + ServiceExceptionUtil.put(errorCodeVO.getCode(), errorCodeVO.getMessage()); + // 记录下更新时间,方便增量更新 + maxUpdateTime = DateUtils.max(maxUpdateTime, errorCodeVO.getUpdateTime()); + }); + } + +} From 06774a7a0b49f34dbf9fe38520347468a5670346 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Mon, 19 Apr 2021 01:21:35 +0800 Subject: [PATCH 09/13] =?UTF-8?q?=E8=B0=83=E6=95=B4=20errorCode=20?= =?UTF-8?q?=E6=A8=A1=E5=9D=97=E7=9A=84=E8=87=AA=E5=8A=A8=E7=94=9F=E6=88=90?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../config/ErrorCodeAutoConfiguration.java | 26 +++- .../errorcode/config/ErrorCodeProperties.java | 22 +-- .../errorcode/core/ErrorCodeRemoteLoader.java | 14 -- .../dto/ErrorCodeAutoGenerateReqDTO.java} | 19 +-- .../errorcode/core/dto/ErrorCodeRespDTO.java | 28 ++++ .../ErrorCodeAutoGenerator.java | 5 +- .../generator/ErrorCodeAutoGeneratorImpl.java | 101 +++++++++++++ .../core/loader/ErrorCodeLoader.java | 24 +++ .../core/loader/ErrorCodeLoaderImpl.java | 73 +++++++++ .../service/ErrorCodeFrameworkService.java | 35 +++++ .../errorcode/ErrorCodeController.java | 45 +----- .../errorcode/dto/ErrorCodeUpdateDTO.java | 4 - ...eConvert.java => SysErrorCodeConvert.java} | 13 +- .../dal/dataobject/errorcode/ErrorCodeDO.java | 40 ++--- .../dal/mysql/errorcode/ErrorCodeMapper.java | 6 +- ...ypeEnum.java => SysErrorCodeTypeEnum.java} | 23 +-- .../errorcode/ErrorCodeAutoGeneratorImpl.java | 80 ---------- .../errorcode/ErrorCodeRemoteLoaderImpl.java | 71 --------- .../errorcode/SysErrorCodeService.java | 12 ++ .../ErrorCodeServiceImpl.java} | 142 +++++++++--------- 20 files changed, 428 insertions(+), 355 deletions(-) delete mode 100644 src/main/java/cn/iocoder/dashboard/framework/errorcode/core/ErrorCodeRemoteLoader.java rename src/main/java/cn/iocoder/dashboard/{modules/system/controller/errorcode/dto/ErrorCodeAutoGenerateDTO.java => framework/errorcode/core/dto/ErrorCodeAutoGenerateReqDTO.java} (64%) create mode 100644 src/main/java/cn/iocoder/dashboard/framework/errorcode/core/dto/ErrorCodeRespDTO.java rename src/main/java/cn/iocoder/dashboard/framework/errorcode/core/{ => generator}/ErrorCodeAutoGenerator.java (60%) create mode 100644 src/main/java/cn/iocoder/dashboard/framework/errorcode/core/generator/ErrorCodeAutoGeneratorImpl.java create mode 100644 src/main/java/cn/iocoder/dashboard/framework/errorcode/core/loader/ErrorCodeLoader.java create mode 100644 src/main/java/cn/iocoder/dashboard/framework/errorcode/core/loader/ErrorCodeLoaderImpl.java create mode 100644 src/main/java/cn/iocoder/dashboard/framework/errorcode/core/service/ErrorCodeFrameworkService.java rename src/main/java/cn/iocoder/dashboard/modules/system/convert/errorcode/{ErrorCodeConvert.java => SysErrorCodeConvert.java} (72%) rename src/main/java/cn/iocoder/dashboard/modules/system/enums/errorcode/{ErrorCodeTypeEnum.java => SysErrorCodeTypeEnum.java} (64%) delete mode 100644 src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/ErrorCodeAutoGeneratorImpl.java delete mode 100644 src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/ErrorCodeRemoteLoaderImpl.java create mode 100644 src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/SysErrorCodeService.java rename src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/{ErrorCodeService.java => impl/ErrorCodeServiceImpl.java} (67%) diff --git a/src/main/java/cn/iocoder/dashboard/framework/errorcode/config/ErrorCodeAutoConfiguration.java b/src/main/java/cn/iocoder/dashboard/framework/errorcode/config/ErrorCodeAutoConfiguration.java index 33c74a19b..0a885aad4 100644 --- a/src/main/java/cn/iocoder/dashboard/framework/errorcode/config/ErrorCodeAutoConfiguration.java +++ b/src/main/java/cn/iocoder/dashboard/framework/errorcode/config/ErrorCodeAutoConfiguration.java @@ -1,26 +1,36 @@ package cn.iocoder.dashboard.framework.errorcode.config; -import cn.iocoder.dashboard.modules.system.service.errorcode.ErrorCodeRemoteLoaderImpl; -import cn.iocoder.dashboard.modules.system.service.errorcode.ErrorCodeAutoGeneratorImpl; +import cn.iocoder.dashboard.framework.errorcode.core.generator.ErrorCodeAutoGenerator; +import cn.iocoder.dashboard.framework.errorcode.core.loader.ErrorCodeLoader; +import cn.iocoder.dashboard.framework.errorcode.core.service.ErrorCodeFrameworkService; +import cn.iocoder.dashboard.framework.errorcode.core.loader.ErrorCodeLoaderImpl; +import cn.iocoder.dashboard.framework.errorcode.core.generator.ErrorCodeAutoGeneratorImpl; +import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.EnableScheduling; +/** + * 错误码配置类 + */ @Configuration @EnableConfigurationProperties(ErrorCodeProperties.class) @EnableScheduling // 开启调度任务的功能,因为 ErrorCodeRemoteLoader 通过定时刷新错误码 public class ErrorCodeAutoConfiguration { @Bean - public ErrorCodeAutoGeneratorImpl errorCodeAutoGenerator(ErrorCodeProperties errorCodeProperties) { - return new ErrorCodeAutoGeneratorImpl(errorCodeProperties.getGroup()) - .setErrorCodeConstantsClass(errorCodeProperties.getConstantsClass()); + public ErrorCodeAutoGenerator errorCodeAutoGenerator(@Value("${spring.application.name}") String applicationName, + ErrorCodeProperties errorCodeProperties, + ErrorCodeFrameworkService errorCodeFrameworkService) { + return new ErrorCodeAutoGeneratorImpl(applicationName, errorCodeProperties.getConstantsClass(), + errorCodeFrameworkService); } @Bean - public ErrorCodeRemoteLoaderImpl errorCodeRemoteLoader(ErrorCodeProperties errorCodeProperties) { - return new ErrorCodeRemoteLoaderImpl(errorCodeProperties.getGroup()); + public ErrorCodeLoader errorCodeLoader(@Value("${spring.application.name}") String applicationName, + ErrorCodeFrameworkService errorCodeFrameworkService) { + return new ErrorCodeLoaderImpl(applicationName, errorCodeFrameworkService); } -} \ No newline at end of file +} diff --git a/src/main/java/cn/iocoder/dashboard/framework/errorcode/config/ErrorCodeProperties.java b/src/main/java/cn/iocoder/dashboard/framework/errorcode/config/ErrorCodeProperties.java index 6b3dbc459..4fc2b5c45 100644 --- a/src/main/java/cn/iocoder/dashboard/framework/errorcode/config/ErrorCodeProperties.java +++ b/src/main/java/cn/iocoder/dashboard/framework/errorcode/config/ErrorCodeProperties.java @@ -1,25 +1,25 @@ package cn.iocoder.dashboard.framework.errorcode.config; -import lombok.Getter; -import lombok.Setter; +import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.validation.annotation.Validated; -import javax.validation.constraints.NotNull; +import javax.validation.constraints.NotEmpty; +/** + * 错误码的配置属性类 + * + * @author dlyan + */ @ConfigurationProperties("yudao.error-code") +@Data @Validated -@Getter -@Setter public class ErrorCodeProperties { - /** - * 应用分组 - */ - @NotNull(message = "应用分组不能为空,请设置 yudao.error-code.group 配置项,推荐直接使用 spring.application.name 配置项") - private String group; /** * 错误码枚举类 */ + @NotEmpty(message = "错误码枚举类不能为空") private String constantsClass; -} \ No newline at end of file + +} diff --git a/src/main/java/cn/iocoder/dashboard/framework/errorcode/core/ErrorCodeRemoteLoader.java b/src/main/java/cn/iocoder/dashboard/framework/errorcode/core/ErrorCodeRemoteLoader.java deleted file mode 100644 index 6c3113ca8..000000000 --- a/src/main/java/cn/iocoder/dashboard/framework/errorcode/core/ErrorCodeRemoteLoader.java +++ /dev/null @@ -1,14 +0,0 @@ -package cn.iocoder.dashboard.framework.errorcode.core; - -public interface ErrorCodeRemoteLoader { - - /** - * 全量加载 ErrorCode 错误码 - */ - void loadErrorCodes(); - - /** - * 增量加载 ErrorCode 错误码 - */ - void refreshErrorCodes(); -} diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/dto/ErrorCodeAutoGenerateDTO.java b/src/main/java/cn/iocoder/dashboard/framework/errorcode/core/dto/ErrorCodeAutoGenerateReqDTO.java similarity index 64% rename from src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/dto/ErrorCodeAutoGenerateDTO.java rename to src/main/java/cn/iocoder/dashboard/framework/errorcode/core/dto/ErrorCodeAutoGenerateReqDTO.java index 740cc6e72..c89744dd2 100644 --- a/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/dto/ErrorCodeAutoGenerateDTO.java +++ b/src/main/java/cn/iocoder/dashboard/framework/errorcode/core/dto/ErrorCodeAutoGenerateReqDTO.java @@ -1,19 +1,25 @@ -package cn.iocoder.dashboard.modules.system.controller.errorcode.dto; +package cn.iocoder.dashboard.framework.errorcode.core.dto; import lombok.Data; import lombok.experimental.Accessors; import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; -import java.io.Serializable; /** * 错误码自动生成 DTO + * + * @author dylan */ @Data @Accessors(chain = true) -public class ErrorCodeAutoGenerateDTO implements Serializable { +public class ErrorCodeAutoGenerateReqDTO { + /** + * 应用名 + */ + @NotNull(message = "应用名不能为空") + private String applicationName; /** * 错误码编码 */ @@ -24,10 +30,5 @@ public class ErrorCodeAutoGenerateDTO implements Serializable { */ @NotEmpty(message = "错误码错误提示不能为空") private String message; - /** - * 错误码分组 - */ - @NotNull(message = "错误码分组不能为空") - private String group; -} \ No newline at end of file +} diff --git a/src/main/java/cn/iocoder/dashboard/framework/errorcode/core/dto/ErrorCodeRespDTO.java b/src/main/java/cn/iocoder/dashboard/framework/errorcode/core/dto/ErrorCodeRespDTO.java new file mode 100644 index 000000000..d54064bf0 --- /dev/null +++ b/src/main/java/cn/iocoder/dashboard/framework/errorcode/core/dto/ErrorCodeRespDTO.java @@ -0,0 +1,28 @@ +package cn.iocoder.dashboard.framework.errorcode.core.dto; + +import lombok.Data; + +import java.util.Date; + +/** + * 错误码的 Response DTO + * + * @author 芋道源码 + */ +@Data +public class ErrorCodeRespDTO { + + /** + * 错误码编码 + */ + private Integer code; + /** + * 错误码错误提示 + */ + private String message; + /** + * 更新时间 + */ + private Date updateTime; + +} diff --git a/src/main/java/cn/iocoder/dashboard/framework/errorcode/core/ErrorCodeAutoGenerator.java b/src/main/java/cn/iocoder/dashboard/framework/errorcode/core/generator/ErrorCodeAutoGenerator.java similarity index 60% rename from src/main/java/cn/iocoder/dashboard/framework/errorcode/core/ErrorCodeAutoGenerator.java rename to src/main/java/cn/iocoder/dashboard/framework/errorcode/core/generator/ErrorCodeAutoGenerator.java index 5bf1fb2b1..530ff9c93 100644 --- a/src/main/java/cn/iocoder/dashboard/framework/errorcode/core/ErrorCodeAutoGenerator.java +++ b/src/main/java/cn/iocoder/dashboard/framework/errorcode/core/generator/ErrorCodeAutoGenerator.java @@ -1,6 +1,8 @@ -package cn.iocoder.dashboard.framework.errorcode.core; +package cn.iocoder.dashboard.framework.errorcode.core.generator; /** + * 错误码的自动生成器 + * * @author dylan */ public interface ErrorCodeAutoGenerator { @@ -9,4 +11,5 @@ public interface ErrorCodeAutoGenerator { * 将配置类到错误码写入数据库 */ void execute(); + } diff --git a/src/main/java/cn/iocoder/dashboard/framework/errorcode/core/generator/ErrorCodeAutoGeneratorImpl.java b/src/main/java/cn/iocoder/dashboard/framework/errorcode/core/generator/ErrorCodeAutoGeneratorImpl.java new file mode 100644 index 000000000..0207d0e59 --- /dev/null +++ b/src/main/java/cn/iocoder/dashboard/framework/errorcode/core/generator/ErrorCodeAutoGeneratorImpl.java @@ -0,0 +1,101 @@ +package cn.iocoder.dashboard.framework.errorcode.core.generator; + +import cn.iocoder.dashboard.common.exception.ErrorCode; +import cn.iocoder.dashboard.framework.errorcode.core.dto.ErrorCodeAutoGenerateReqDTO; +import cn.iocoder.dashboard.framework.errorcode.core.service.ErrorCodeFrameworkService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.context.event.ApplicationReadyEvent; +import org.springframework.context.event.EventListener; +import org.springframework.scheduling.annotation.Async; +import org.springframework.util.StringUtils; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +/** + * ErrorCodeAutoGenerator 的实现类 + * 目的是,扫描指定的 {@link #errorCodeConstantsClass} 类,写入到 system 的数据库中 + * + * @author dylan + */ +@RequiredArgsConstructor +@Slf4j +public class ErrorCodeAutoGeneratorImpl implements ErrorCodeAutoGenerator { + + /** + * 应用分组 + */ + private final String applicationName; + /** + * 错误码枚举类 + */ + private final String errorCodeConstantsClass; + /** + * 错误码 Service + */ + private final ErrorCodeFrameworkService errorCodeService; + + @Override + @EventListener(ApplicationReadyEvent.class) + @Async // 异步,保证项目的启动过程,毕竟非关键流程 + public void execute() { + // 第一步,获得错误码类 + Class errorCodeConstantsClazz = parseErrorCodeConstantsClass(); + if (errorCodeConstantsClazz == null) { + return; + } + + // 第二步,获得错误码数组 + List autoGenerateDTOs = parseErrorCode(errorCodeConstantsClazz); + log.info("[execute][解析到错误码数量为 ({}) 个]", autoGenerateDTOs.size()); + + // 第三步,写入到 system 的数据库 + errorCodeService.autoGenerateErrorCodes(autoGenerateDTOs); + log.info("[execute][写入到 system 组件完成]"); + } + + /** + * 解析 errorCodeConstantsClass 变量,获得错误码类 + * + * @return 错误码类 + */ + private Class parseErrorCodeConstantsClass() { + // 校验 errorCodeConstantsClass 参数 + if (!StringUtils.hasText(errorCodeConstantsClass)) { + log.info("[execute][未配置 yudao.error-code.constants-class 配置项,不进行自动写入到当前服务中]"); + return null; + } + try { + return Class.forName(errorCodeConstantsClass); + } catch (ClassNotFoundException e) { + log.error("[execute][配置的 ({}) 找不到对应的类]", errorCodeConstantsClass); + return null; + } + } + + /** + * 解析错误码类,获得错误码数组 + * + * @return 错误码数组 + */ + private List parseErrorCode(Class errorCodeConstantsClazz) { + List autoGenerateDTOs = new ArrayList<>(); + Arrays.stream(errorCodeConstantsClazz.getFields()).forEach(field -> { + if (field.getType() != ErrorCode.class) { + return; + } + try { + ErrorCode errorCode = (ErrorCode) field.get(errorCodeConstantsClazz); + autoGenerateDTOs.add(new ErrorCodeAutoGenerateReqDTO().setApplicationName(applicationName) + .setCode(errorCode.getCode()).setMessage(errorCode.getMsg())); + } catch (IllegalAccessException e) { + throw new RuntimeException(e); + } + }); + return autoGenerateDTOs; + } + +} + diff --git a/src/main/java/cn/iocoder/dashboard/framework/errorcode/core/loader/ErrorCodeLoader.java b/src/main/java/cn/iocoder/dashboard/framework/errorcode/core/loader/ErrorCodeLoader.java new file mode 100644 index 000000000..805e0802f --- /dev/null +++ b/src/main/java/cn/iocoder/dashboard/framework/errorcode/core/loader/ErrorCodeLoader.java @@ -0,0 +1,24 @@ +package cn.iocoder.dashboard.framework.errorcode.core.loader; + +import cn.iocoder.dashboard.common.exception.util.ServiceExceptionUtil; + +/** + * 错误码加载器 + * + * 注意,错误码最终加载到 {@link cn.iocoder.dashboard.common.exception.util.ServiceExceptionUtil} 的 MESSAGES 变量中! + * + * @author dlyan + */ +public interface ErrorCodeLoader { + + /** + * 添加错误码 + * + * @param code 错误码的编号 + * @param msg 错误码的提示 + */ + default void putErrorCode(Integer code, String msg) { + ServiceExceptionUtil.put(code, msg); + } + +} diff --git a/src/main/java/cn/iocoder/dashboard/framework/errorcode/core/loader/ErrorCodeLoaderImpl.java b/src/main/java/cn/iocoder/dashboard/framework/errorcode/core/loader/ErrorCodeLoaderImpl.java new file mode 100644 index 000000000..9dd9e5450 --- /dev/null +++ b/src/main/java/cn/iocoder/dashboard/framework/errorcode/core/loader/ErrorCodeLoaderImpl.java @@ -0,0 +1,73 @@ +package cn.iocoder.dashboard.framework.errorcode.core.loader; + +import cn.hutool.core.collection.CollUtil; +import cn.iocoder.dashboard.framework.errorcode.core.dto.ErrorCodeRespDTO; +import cn.iocoder.dashboard.framework.errorcode.core.service.ErrorCodeFrameworkService; +import cn.iocoder.dashboard.util.date.DateUtils; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.context.event.ApplicationReadyEvent; +import org.springframework.context.event.EventListener; +import org.springframework.scheduling.annotation.Scheduled; + +import java.util.Date; +import java.util.List; + +/** + * ErrorCodeLoader 的实现类,从 system 的数据库中,加载错误码。 + * + * 考虑到错误码会刷新,所以按照 {@link #REFRESH_ERROR_CODE_PERIOD} 频率,增量加载错误码。 + * + * @author dlyan + */ +@RequiredArgsConstructor +@Slf4j +public class ErrorCodeLoaderImpl implements ErrorCodeLoader { + + /** + * 刷新错误码的频率,单位:毫秒 + */ + private static final int REFRESH_ERROR_CODE_PERIOD = 60 * 1000; + + /** + * 应用分组 + */ + private final String applicationName; + /** + * 错误码 Service + */ + private final ErrorCodeFrameworkService errorCodeService; + + /** + * 缓存错误码的最大更新时间,用于后续的增量轮询,判断是否有更新 + */ + private Date maxUpdateTime; + + @EventListener(ApplicationReadyEvent.class) + public void loadErrorCodes() { + this.loadErrorCodes0(); + } + + @Scheduled(fixedDelay = REFRESH_ERROR_CODE_PERIOD, initialDelay = REFRESH_ERROR_CODE_PERIOD) + public void refreshErrorCodes() { + this.loadErrorCodes0(); + } + + private void loadErrorCodes0() { + // 加载错误码 + List errorCodeRespDTOs = errorCodeService.getErrorCodeList(applicationName, maxUpdateTime); + if (CollUtil.isEmpty(errorCodeRespDTOs)) { + return; + } + log.info("[loadErrorCodes0][加载到 ({}) 个错误码]", errorCodeRespDTOs.size()); + + // 刷新错误码的缓存 + errorCodeRespDTOs.forEach(errorCodeRespDTO -> { + // 写入到错误码的缓存 + putErrorCode(errorCodeRespDTO.getCode(), errorCodeRespDTO.getMessage()); + // 记录下更新时间,方便增量更新 + maxUpdateTime = DateUtils.max(maxUpdateTime, errorCodeRespDTO.getUpdateTime()); + }); + } + +} diff --git a/src/main/java/cn/iocoder/dashboard/framework/errorcode/core/service/ErrorCodeFrameworkService.java b/src/main/java/cn/iocoder/dashboard/framework/errorcode/core/service/ErrorCodeFrameworkService.java new file mode 100644 index 000000000..53f3f2c42 --- /dev/null +++ b/src/main/java/cn/iocoder/dashboard/framework/errorcode/core/service/ErrorCodeFrameworkService.java @@ -0,0 +1,35 @@ +package cn.iocoder.dashboard.framework.errorcode.core.service; + +import cn.iocoder.dashboard.framework.errorcode.core.dto.ErrorCodeAutoGenerateReqDTO; +import cn.iocoder.dashboard.framework.errorcode.core.dto.ErrorCodeRespDTO; + +import javax.validation.Valid; +import java.util.Date; +import java.util.List; + +/** + * 错误码 Framework Service 接口 + * + * @author 芋道源码 + */ +public interface ErrorCodeFrameworkService { + + /** + * 自动创建错误码 + * + * @param autoGenerateDTOs 错误码信息 + */ + void autoGenerateErrorCodes(@Valid List autoGenerateDTOs); + + /** + * 增量获得错误码数组 + * + * 如果 minUpdateTime 为空时,则获取所有错误码 + * + * @param applicationName 应用名 + * @param minUpdateTime 最小更新时间 + * @return 错误码数组 + */ + List getErrorCodeList(String applicationName, Date minUpdateTime); + +} diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/ErrorCodeController.java b/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/ErrorCodeController.java index 40bd10451..df7b26ad3 100644 --- a/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/ErrorCodeController.java +++ b/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/ErrorCodeController.java @@ -2,23 +2,16 @@ package cn.iocoder.dashboard.modules.system.controller.errorcode; import cn.iocoder.dashboard.common.pojo.CommonResult; import cn.iocoder.dashboard.common.pojo.PageResult; -import cn.iocoder.dashboard.modules.system.controller.errorcode.dto.ErrorCodeAutoGenerateDTO; import cn.iocoder.dashboard.modules.system.controller.errorcode.dto.ErrorCodeCreateDTO; import cn.iocoder.dashboard.modules.system.controller.errorcode.dto.ErrorCodePageDTO; import cn.iocoder.dashboard.modules.system.controller.errorcode.dto.ErrorCodeUpdateDTO; import cn.iocoder.dashboard.modules.system.controller.errorcode.vo.ErrorCodeVO; -import cn.iocoder.dashboard.modules.system.service.errorcode.ErrorCodeService; +import cn.iocoder.dashboard.modules.system.service.errorcode.impl.ErrorCodeServiceImpl; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; -import org.springframework.beans.propertyeditors.CustomDateEditor; -import org.springframework.web.bind.ServletRequestDataBinder; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; -import javax.validation.constraints.NotNull; -import java.text.SimpleDateFormat; -import java.util.Date; import java.util.List; import static cn.iocoder.dashboard.common.pojo.CommonResult.success; @@ -29,34 +22,7 @@ import static cn.iocoder.dashboard.common.pojo.CommonResult.success; public class ErrorCodeController { @Resource - private ErrorCodeService errorCodeService; - - /** - * 获得指定分组下的错误码列表 - * - * @param group 错误码分组 - * @param minUpdateTime 最小更新时间,允许为空。 - * 通过该参数,我们可以增量获取超过 minUpdateTime 时间的错误码 - * @return 错误码列表 - */ - @ApiOperation("获取指定分组下的状态码") - @GetMapping("/list-group") - public CommonResult> listErrorCodes(@NotNull(message = "错误码分组不能为空") String group, Date minUpdateTime) { - return success(errorCodeService.listErrorCodes(group, minUpdateTime)); - } - - /** - * 自动生成错误码 - * - * @param autoGenerateDTOs 自动生成信息 DTO - */ - @ApiOperation("自动生成错误码") - @PostMapping("/generate") - public CommonResult autoGenerateErrorCodes(@RequestBody List autoGenerateDTOs) { - errorCodeService.autoGenerateErrorCodes(autoGenerateDTOs); - return success(Boolean.TRUE); - } - + private ErrorCodeServiceImpl errorCodeService; /** * 创建错误码 @@ -130,11 +96,4 @@ public class ErrorCodeController { return success(errorCodeService.pageErrorCode(pageDTO)); } - @InitBinder - protected void init(HttpServletRequest request, ServletRequestDataBinder binder) { - SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - dateFormat.setLenient(false); - binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, false)); - } - } diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/dto/ErrorCodeUpdateDTO.java b/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/dto/ErrorCodeUpdateDTO.java index 4aa433e67..1833a18ba 100644 --- a/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/dto/ErrorCodeUpdateDTO.java +++ b/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/dto/ErrorCodeUpdateDTO.java @@ -1,15 +1,11 @@ package cn.iocoder.dashboard.modules.system.controller.errorcode.dto; -import cn.iocoder.dashboard.framework.validator.InEnum; -import cn.iocoder.dashboard.modules.system.enums.errorcode.ErrorCodeTypeEnum; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; -import lombok.experimental.Accessors; import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; -import java.io.Serializable; @ApiModel("错误码更新 DTO") @Data diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/convert/errorcode/ErrorCodeConvert.java b/src/main/java/cn/iocoder/dashboard/modules/system/convert/errorcode/SysErrorCodeConvert.java similarity index 72% rename from src/main/java/cn/iocoder/dashboard/modules/system/convert/errorcode/ErrorCodeConvert.java rename to src/main/java/cn/iocoder/dashboard/modules/system/convert/errorcode/SysErrorCodeConvert.java index 376911d3e..7d46b9538 100644 --- a/src/main/java/cn/iocoder/dashboard/modules/system/convert/errorcode/ErrorCodeConvert.java +++ b/src/main/java/cn/iocoder/dashboard/modules/system/convert/errorcode/SysErrorCodeConvert.java @@ -1,7 +1,8 @@ package cn.iocoder.dashboard.modules.system.convert.errorcode; import cn.iocoder.dashboard.common.pojo.PageResult; -import cn.iocoder.dashboard.modules.system.controller.errorcode.dto.ErrorCodeAutoGenerateDTO; +import cn.iocoder.dashboard.framework.errorcode.core.dto.ErrorCodeAutoGenerateReqDTO; +import cn.iocoder.dashboard.framework.errorcode.core.dto.ErrorCodeRespDTO; import cn.iocoder.dashboard.modules.system.controller.errorcode.dto.ErrorCodeCreateDTO; import cn.iocoder.dashboard.modules.system.controller.errorcode.dto.ErrorCodeUpdateDTO; import cn.iocoder.dashboard.modules.system.controller.errorcode.vo.ErrorCodeVO; @@ -14,13 +15,10 @@ import org.mapstruct.factory.Mappers; import java.util.List; -/** - * @author dylan - */ @Mapper(unmappedSourcePolicy = ReportingPolicy.IGNORE) -public interface ErrorCodeConvert { +public interface SysErrorCodeConvert { - ErrorCodeConvert INSTANCE = Mappers.getMapper(ErrorCodeConvert.class); + SysErrorCodeConvert INSTANCE = Mappers.getMapper(SysErrorCodeConvert.class); ErrorCodeVO convert (ErrorCodeDO bean); @@ -33,7 +31,8 @@ public interface ErrorCodeConvert { ErrorCodeDO convert (ErrorCodeUpdateDTO bean); - ErrorCodeDO convert(ErrorCodeAutoGenerateDTO bean); + ErrorCodeDO convert(ErrorCodeAutoGenerateReqDTO bean); + List convertList02(List list); } diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/dal/dataobject/errorcode/ErrorCodeDO.java b/src/main/java/cn/iocoder/dashboard/modules/system/dal/dataobject/errorcode/ErrorCodeDO.java index 144db32e3..21e1537ea 100644 --- a/src/main/java/cn/iocoder/dashboard/modules/system/dal/dataobject/errorcode/ErrorCodeDO.java +++ b/src/main/java/cn/iocoder/dashboard/modules/system/dal/dataobject/errorcode/ErrorCodeDO.java @@ -1,22 +1,34 @@ package cn.iocoder.dashboard.modules.system.dal.dataobject.errorcode; -import cn.iocoder.dashboard.modules.system.enums.errorcode.ErrorCodeTypeEnum; -import com.baomidou.mybatisplus.annotation.TableField; +import cn.iocoder.dashboard.framework.mybatis.core.dataobject.BaseDO; +import cn.iocoder.dashboard.modules.system.enums.errorcode.SysErrorCodeTypeEnum; +import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; +import lombok.ToString; +@TableName(value = "sys_error_code") @Data -@TableName(value = "system_error_code") -@EqualsAndHashCode() -@Accessors(chain = true) -public class ErrorCodeDO { +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class ErrorCodeDO extends BaseDO { /** * 错误码编号 */ + @TableId private Integer id; + /** + * 错误码类型 + * + * 枚举 {@link SysErrorCodeTypeEnum} + */ + private Integer type; + /** + * 应用名 + */ + private String applicationName; /** * 错误码编码 */ @@ -25,21 +37,9 @@ public class ErrorCodeDO { * 错误码错误提示 */ private String message; - /** - * 错误码类型 - * - * 外键 {@link ErrorCodeTypeEnum} - */ - private Integer type; - /** - * 错误码分组 - * - * 一般情况下,可以采用应用名 - */ - @TableField("`group`") // 避免和数据库关键字冲突 - private String group; /** * 错误码备注 */ private String memo; + } diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/errorcode/ErrorCodeMapper.java b/src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/errorcode/ErrorCodeMapper.java index 0ae75b934..60b8d8fc5 100644 --- a/src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/errorcode/ErrorCodeMapper.java +++ b/src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/errorcode/ErrorCodeMapper.java @@ -15,6 +15,7 @@ import java.util.List; @Mapper public interface ErrorCodeMapper extends BaseMapper { + default IPage selectPage(ErrorCodePageDTO pageDTO) { return selectPage(new Page<>(pageDTO.getPageNo(), pageDTO.getPageSize()), new QueryWrapperX().likeIfPresent("`group`", pageDTO.getGroup()) @@ -29,8 +30,9 @@ public interface ErrorCodeMapper extends BaseMapper { return selectOne(new QueryWrapper().eq("code", code)); } - default List selectListByGroup(String group, Date minUpdateTime) { - return selectList(new QueryWrapperX().eq("`group`", group) + default List selectListByApplicationNameAndUpdateTimeGt(String applicationName, Date minUpdateTime) { + return selectList(new QueryWrapperX().eq("application_name", applicationName) .gtIfPresent("update_time", minUpdateTime)); } + } diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/enums/errorcode/ErrorCodeTypeEnum.java b/src/main/java/cn/iocoder/dashboard/modules/system/enums/errorcode/SysErrorCodeTypeEnum.java similarity index 64% rename from src/main/java/cn/iocoder/dashboard/modules/system/enums/errorcode/ErrorCodeTypeEnum.java rename to src/main/java/cn/iocoder/dashboard/modules/system/enums/errorcode/SysErrorCodeTypeEnum.java index 9eff9b20d..be59a23ea 100644 --- a/src/main/java/cn/iocoder/dashboard/modules/system/enums/errorcode/ErrorCodeTypeEnum.java +++ b/src/main/java/cn/iocoder/dashboard/modules/system/enums/errorcode/SysErrorCodeTypeEnum.java @@ -1,14 +1,19 @@ package cn.iocoder.dashboard.modules.system.enums.errorcode; import cn.iocoder.dashboard.common.core.IntArrayValuable; +import lombok.AllArgsConstructor; +import lombok.Getter; import java.util.Arrays; /** + * 错误码的类型枚举 + * * @author dylan */ - -public enum ErrorCodeTypeEnum implements IntArrayValuable { +@AllArgsConstructor +@Getter +public enum SysErrorCodeTypeEnum implements IntArrayValuable { /** * 自动生成 @@ -19,20 +24,16 @@ public enum ErrorCodeTypeEnum implements IntArrayValuable { */ MANUAL_OPERATION(2); - public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(ErrorCodeTypeEnum::getType).toArray(); + public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(SysErrorCodeTypeEnum::getType).toArray(); + /** + * 类型 + */ private final Integer type; - ErrorCodeTypeEnum(Integer type) { - this.type = type; - } - - public Integer getType() { - return type; - } - @Override public int[] array() { return ARRAYS; } + } diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/ErrorCodeAutoGeneratorImpl.java b/src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/ErrorCodeAutoGeneratorImpl.java deleted file mode 100644 index 83a0b3095..000000000 --- a/src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/ErrorCodeAutoGeneratorImpl.java +++ /dev/null @@ -1,80 +0,0 @@ -package cn.iocoder.dashboard.modules.system.service.errorcode; - -import cn.iocoder.dashboard.common.exception.ErrorCode; -import cn.iocoder.dashboard.common.pojo.CommonResult; -import cn.iocoder.dashboard.framework.errorcode.core.ErrorCodeAutoGenerator; -import cn.iocoder.dashboard.modules.system.controller.errorcode.dto.ErrorCodeAutoGenerateDTO; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.boot.context.event.ApplicationReadyEvent; -import org.springframework.context.event.EventListener; -import org.springframework.scheduling.annotation.Async; -import org.springframework.util.StringUtils; - -import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -@RequiredArgsConstructor -@Slf4j -public class ErrorCodeAutoGeneratorImpl implements ErrorCodeAutoGenerator { - - /** - * 应用分组 - */ - private final String group; - /** - * 错误码枚举类 - */ - private String errorCodeConstantsClass; - - @Resource - private ErrorCodeService errorCodeService; - - public ErrorCodeAutoGeneratorImpl setErrorCodeConstantsClass(String errorCodeConstantsClass) { - this.errorCodeConstantsClass = errorCodeConstantsClass; - return this; - } - - @Override - @EventListener(ApplicationReadyEvent.class) - @Async // 异步,保证项目的启动过程,毕竟非关键流程 - public void execute() { - // 校验 errorCodeConstantsClass 参数 - if (!StringUtils.hasText(errorCodeConstantsClass)) { - log.info("[execute][未配置 yudao.error-code.constants-class 配置项,不进行自动写入到当前服务中]"); - return; - } - Class errorCodeConstantsClazz; - try { - errorCodeConstantsClazz = Class.forName(errorCodeConstantsClass); - } catch (ClassNotFoundException e) { - log.error("[execute][配置的 ({}) 找不到对应的类]", errorCodeConstantsClass); - return; - } - // 写入 system-service 服务 - log.info("[execute][自动将 ({}) 类的错误码,准备写入到当前服务]", errorCodeConstantsClass); - List autoGenerateDTOs = new ArrayList<>(); - Arrays.stream(errorCodeConstantsClazz.getFields()).forEach(field -> { - if (field.getType() != ErrorCode.class) { - return; - } - try { - ErrorCode errorCode = (ErrorCode) field.get(errorCodeConstantsClazz); - autoGenerateDTOs.add(new ErrorCodeAutoGenerateDTO().setGroup(group) - .setCode(errorCode.getCode()).setMessage(errorCode.getMessage())); - } catch (IllegalAccessException e) { - throw new RuntimeException(e); - } - }); - CommonResult autoGenerateErrorCodesResult = errorCodeService.autoGenerateErrorCodes1(autoGenerateDTOs); - if (autoGenerateErrorCodesResult.isSuccess()) { - log.info("[execute][自动将 ({}) 类的错误码,成功写入到当前服务]", errorCodeConstantsClass); - } else { - log.error("[execute][自动将 ({}) 类的错误码,失败写入到当前服务,原因为 ({}/{})]", errorCodeConstantsClass, - autoGenerateErrorCodesResult.getCode(), autoGenerateErrorCodesResult.getMsg()); - } - } - -} diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/ErrorCodeRemoteLoaderImpl.java b/src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/ErrorCodeRemoteLoaderImpl.java deleted file mode 100644 index be4fe1234..000000000 --- a/src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/ErrorCodeRemoteLoaderImpl.java +++ /dev/null @@ -1,71 +0,0 @@ -package cn.iocoder.dashboard.modules.system.service.errorcode; - -import cn.hutool.core.collection.CollUtil; -import cn.iocoder.dashboard.common.exception.util.ServiceExceptionUtil; -import cn.iocoder.dashboard.common.pojo.CommonResult; -import cn.iocoder.dashboard.framework.errorcode.core.ErrorCodeRemoteLoader; -import cn.iocoder.dashboard.modules.system.controller.errorcode.vo.ErrorCodeVO; -import cn.iocoder.dashboard.util.date.DateUtils; -import lombok.extern.slf4j.Slf4j; -import org.springframework.boot.context.event.ApplicationReadyEvent; -import org.springframework.context.event.EventListener; -import org.springframework.scheduling.annotation.Scheduled; - -import javax.annotation.Resource; -import java.util.Date; -import java.util.List; - -@Slf4j -public class ErrorCodeRemoteLoaderImpl implements ErrorCodeRemoteLoader { - - private static final int REFRESH_ERROR_CODE_PERIOD = 60 * 1000; - - /** - * 应用分组 - */ - private final String group; - - @Resource - private ErrorCodeService errorCodeService; - - private Date maxUpdateTime; - - public ErrorCodeRemoteLoaderImpl(String group) { - this.group = group; - } - - @Override - @EventListener(ApplicationReadyEvent.class) - public void loadErrorCodes() { - // 从 ErrorCodeRpc 全量加载 ErrorCode 错误码 - CommonResult> listErrorCodesResult = errorCodeService.listErrorCodes1(group, null); - listErrorCodesResult.checkError(); - log.info("[loadErrorCodes][从 group({}) 全量加载到 {} 个 ErrorCode 错误码]", group, listErrorCodesResult.getData().size()); - // 写入到 ServiceExceptionUtil 到 - listErrorCodesResult.getData().forEach(errorCodeVO -> { - ServiceExceptionUtil.put(errorCodeVO.getCode(), errorCodeVO.getMessage()); - // 记录下更新时间,方便增量更新 - maxUpdateTime = DateUtils.max(maxUpdateTime, errorCodeVO.getUpdateTime()); - }); - } - - @Override - @Scheduled(fixedDelay = REFRESH_ERROR_CODE_PERIOD, initialDelay = REFRESH_ERROR_CODE_PERIOD) - public void refreshErrorCodes() { - // 从 ErrorCodeRpc 增量加载 ErrorCode 错误码 - // TODO 优化点:假设删除错误码的配置,会存在问题; - CommonResult> listErrorCodesResult = errorCodeService.listErrorCodes1(group, maxUpdateTime); - listErrorCodesResult.checkError(); - if (CollUtil.isEmpty(listErrorCodesResult.getData())) { - return; - } - log.info("[refreshErrorCodes][从 group({}) 增量加载到 {} 个 ErrorCode 错误码]", group, listErrorCodesResult.getData().size()); - // 写入到 ServiceExceptionUtil 到 - listErrorCodesResult.getData().forEach(errorCodeVO -> { - ServiceExceptionUtil.put(errorCodeVO.getCode(), errorCodeVO.getMessage()); - // 记录下更新时间,方便增量更新 - maxUpdateTime = DateUtils.max(maxUpdateTime, errorCodeVO.getUpdateTime()); - }); - } - -} diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/SysErrorCodeService.java b/src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/SysErrorCodeService.java new file mode 100644 index 000000000..ef4a1ed49 --- /dev/null +++ b/src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/SysErrorCodeService.java @@ -0,0 +1,12 @@ +package cn.iocoder.dashboard.modules.system.service.errorcode; + +import cn.iocoder.dashboard.framework.errorcode.core.service.ErrorCodeFrameworkService; + +/** + * 错误码 Service 接口 + * + * @author 芋道源码 + */ +public interface SysErrorCodeService extends ErrorCodeFrameworkService { + +} diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/ErrorCodeService.java b/src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/impl/ErrorCodeServiceImpl.java similarity index 67% rename from src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/ErrorCodeService.java rename to src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/impl/ErrorCodeServiceImpl.java index 1573e7d0c..3aff41357 100644 --- a/src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/ErrorCodeService.java +++ b/src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/impl/ErrorCodeServiceImpl.java @@ -1,45 +1,45 @@ -package cn.iocoder.dashboard.modules.system.service.errorcode; +package cn.iocoder.dashboard.modules.system.service.errorcode.impl; import cn.hutool.core.collection.CollUtil; import cn.iocoder.dashboard.common.exception.util.ServiceExceptionUtil; -import cn.iocoder.dashboard.common.pojo.CommonResult; import cn.iocoder.dashboard.common.pojo.PageResult; -import cn.iocoder.dashboard.modules.system.controller.errorcode.dto.ErrorCodeAutoGenerateDTO; +import cn.iocoder.dashboard.framework.errorcode.core.dto.ErrorCodeAutoGenerateReqDTO; +import cn.iocoder.dashboard.framework.errorcode.core.dto.ErrorCodeRespDTO; import cn.iocoder.dashboard.modules.system.controller.errorcode.dto.ErrorCodeCreateDTO; import cn.iocoder.dashboard.modules.system.controller.errorcode.dto.ErrorCodePageDTO; import cn.iocoder.dashboard.modules.system.controller.errorcode.dto.ErrorCodeUpdateDTO; import cn.iocoder.dashboard.modules.system.controller.errorcode.vo.ErrorCodeVO; -import cn.iocoder.dashboard.modules.system.convert.errorcode.ErrorCodeConvert; +import cn.iocoder.dashboard.modules.system.convert.errorcode.SysErrorCodeConvert; import cn.iocoder.dashboard.modules.system.dal.dataobject.errorcode.ErrorCodeDO; import cn.iocoder.dashboard.modules.system.dal.mysql.errorcode.ErrorCodeMapper; -import cn.iocoder.dashboard.modules.system.enums.errorcode.ErrorCodeTypeEnum; -import cn.iocoder.dashboard.util.collection.CollectionUtils; +import cn.iocoder.dashboard.modules.system.enums.errorcode.SysErrorCodeTypeEnum; +import cn.iocoder.dashboard.modules.system.service.errorcode.SysErrorCodeService; import com.baomidou.mybatisplus.core.metadata.IPage; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; -import javax.validation.Valid; +import javax.annotation.Resource; import java.util.Date; import java.util.List; import java.util.Map; import static cn.iocoder.dashboard.modules.system.enums.SysErrorCodeConstants.ERROR_CODE_DUPLICATE; import static cn.iocoder.dashboard.modules.system.enums.SysErrorCodeConstants.ERROR_CODE_NOT_EXISTS; -import static cn.iocoder.dashboard.common.pojo.CommonResult.success; +import static cn.iocoder.dashboard.util.collection.CollectionUtils.convertMap; +import static cn.iocoder.dashboard.util.collection.CollectionUtils.convertSet; /** - * 错误码 Service + * 错误码 Service 实现类 */ -@Slf4j -@Validated @Service -public class ErrorCodeService { +@Validated +@Slf4j +public class ErrorCodeServiceImpl implements SysErrorCodeService { - @Autowired - ErrorCodeMapper errorCodeMapper; + @Resource + private ErrorCodeMapper errorCodeMapper; /** * 创建错误码 @@ -47,13 +47,13 @@ public class ErrorCodeService { * @param createDTO 创建错误码 DTO * @return 错误码 */ - public ErrorCodeVO createErrorCode(@Valid ErrorCodeCreateDTO createDTO) { + public ErrorCodeVO createErrorCode(ErrorCodeCreateDTO createDTO) { checkDuplicateErrorCode(createDTO.getCode(), null); // 插入到数据库 - ErrorCodeDO errorCodeDO = ErrorCodeConvert.INSTANCE.convert(createDTO); + ErrorCodeDO errorCodeDO = SysErrorCodeConvert.INSTANCE.convert(createDTO); errorCodeMapper.insert(errorCodeDO); // 返回 - return ErrorCodeConvert.INSTANCE.convert(errorCodeDO); + return SysErrorCodeConvert.INSTANCE.convert(errorCodeDO); } /** @@ -61,62 +61,17 @@ public class ErrorCodeService { * * @param updateDTO 更新错误码 DTO */ - public void updateErrorCode(@Valid ErrorCodeUpdateDTO updateDTO) { + public void updateErrorCode(ErrorCodeUpdateDTO updateDTO) { checkDuplicateErrorCode(updateDTO.getCode(), updateDTO.getId()); // 校验更新的错误码是否存在 if (errorCodeMapper.selectById(updateDTO.getId()) == null) { throw ServiceExceptionUtil.exception(ERROR_CODE_NOT_EXISTS); } // 更新到数据库 - ErrorCodeDO updateObject = ErrorCodeConvert.INSTANCE.convert(updateDTO); + ErrorCodeDO updateObject = SysErrorCodeConvert.INSTANCE.convert(updateDTO); errorCodeMapper.updateById(updateObject); } - @Transactional - public void autoGenerateErrorCodes(@Valid List autoGenerateDTOs) { - if (CollUtil.isEmpty(autoGenerateDTOs)) { - return; - } - List errorCodeDOs = errorCodeMapper.selectListByCodes( - CollectionUtils.convertSet(autoGenerateDTOs, ErrorCodeAutoGenerateDTO::getCode)); - Map errorCodeDOMap = CollectionUtils.convertMap(errorCodeDOs, ErrorCodeDO::getCode); - // 遍历 autoGenerateBOs 数组,逐个插入或更新。考虑到每次量级不大,就不走批量了 - autoGenerateDTOs.forEach(autoGenerateDTO -> { - ErrorCodeDO errorCodeDO = errorCodeDOMap.get(autoGenerateDTO.getCode()); - // 不存在,则进行新增 - if (errorCodeDO == null) { - errorCodeDO = ErrorCodeConvert.INSTANCE.convert(autoGenerateDTO) - .setType(ErrorCodeTypeEnum.AUTO_GENERATION.getType()); - errorCodeMapper.insert(errorCodeDO); - return; - } - // 存在,则进行更新。更新有三个前置条件: - // 条件 1. 只更新自动生成的错误码,即 Type 为 ErrorCodeTypeEnum.AUTO_GENERATION - if (!ErrorCodeTypeEnum.AUTO_GENERATION.getType().equals(errorCodeDO.getType())) { - return; - } - // 条件 2. 分组 group 必须匹配,避免存在错误码冲突的情况 - if (!autoGenerateDTO.getGroup().equals(errorCodeDO.getGroup())) { - log.error("[autoGenerateErrorCodes][自动创建({}/{}) 错误码失败,数据库中已经存在({}/{})]", - autoGenerateDTO.getCode(), autoGenerateDTO.getGroup(), - errorCodeDO.getCode(), errorCodeDO.getGroup()); - return; - } - // 条件 3. 错误提示语存在差异 - if (autoGenerateDTO.getMessage().equals(errorCodeDO.getMessage())) { - return; - } - // 最终匹配,进行更新 - errorCodeMapper.updateById(new ErrorCodeDO().setId(errorCodeDO.getId()).setMessage(autoGenerateDTO.getMessage())); - }); - } - - public CommonResult autoGenerateErrorCodes1(@Valid List autoGenerateDTOs) { - autoGenerateErrorCodes(autoGenerateDTOs); - return success(Boolean.TRUE); - } - - /** * 删除错误码 * @@ -139,7 +94,7 @@ public class ErrorCodeService { */ public ErrorCodeVO getErrorCode(Integer errorCodeId) { ErrorCodeDO errorCodeDO = errorCodeMapper.selectById(errorCodeId); - return ErrorCodeConvert.INSTANCE.convert(errorCodeDO); + return SysErrorCodeConvert.INSTANCE.convert(errorCodeDO); } /** @@ -150,7 +105,7 @@ public class ErrorCodeService { */ public List listErrorCodes(List errorCodeIds) { List errorCodeDOs = errorCodeMapper.selectBatchIds(errorCodeIds); - return ErrorCodeConvert.INSTANCE.convertList(errorCodeDOs); + return SysErrorCodeConvert.INSTANCE.convertList(errorCodeDOs); } /** @@ -161,7 +116,7 @@ public class ErrorCodeService { */ public PageResult pageErrorCode(ErrorCodePageDTO pageDTO) { IPage errorCodeDOPage = errorCodeMapper.selectPage(pageDTO); - return ErrorCodeConvert.INSTANCE.convertPage(errorCodeDOPage); + return SysErrorCodeConvert.INSTANCE.convertPage(errorCodeDOPage); } /** @@ -186,14 +141,53 @@ public class ErrorCodeService { } } - public List listErrorCodes(String group, Date minUpdateTime) { - List errorCodeDOs = errorCodeMapper.selectListByGroup(group, minUpdateTime); - return ErrorCodeConvert.INSTANCE.convertList(errorCodeDOs); + @Override + @Transactional + public void autoGenerateErrorCodes(List autoGenerateDTOs) { + if (CollUtil.isEmpty(autoGenerateDTOs)) { + return; + } + // 获得错误码 + List errorCodeDOs = errorCodeMapper.selectListByCodes( + convertSet(autoGenerateDTOs, ErrorCodeAutoGenerateReqDTO::getCode)); + Map errorCodeDOMap = convertMap(errorCodeDOs, ErrorCodeDO::getCode); + + // 遍历 autoGenerateBOs 数组,逐个插入或更新。考虑到每次量级不大,就不走批量了 + autoGenerateDTOs.forEach(autoGenerateDTO -> { + ErrorCodeDO errorCodeDO = errorCodeDOMap.get(autoGenerateDTO.getCode()); + // 不存在,则进行新增 + if (errorCodeDO == null) { + errorCodeDO = SysErrorCodeConvert.INSTANCE.convert(autoGenerateDTO) + .setType(SysErrorCodeTypeEnum.AUTO_GENERATION.getType()); + errorCodeMapper.insert(errorCodeDO); + return; + } + // 存在,则进行更新。更新有三个前置条件: + // 条件 1. 只更新自动生成的错误码,即 Type 为 ErrorCodeTypeEnum.AUTO_GENERATION + if (!SysErrorCodeTypeEnum.AUTO_GENERATION.getType().equals(errorCodeDO.getType())) { + return; + } + // 条件 2. 分组 group 必须匹配,避免存在错误码冲突的情况 + if (!autoGenerateDTO.getApplicationName().equals(errorCodeDO.getApplicationName())) { + log.error("[autoGenerateErrorCodes][自动创建({}/{}) 错误码失败,数据库中已经存在({}/{})]", + autoGenerateDTO.getCode(), autoGenerateDTO.getApplicationName(), + errorCodeDO.getCode(), errorCodeDO.getApplicationName()); + return; + } + // 条件 3. 错误提示语存在差异 + if (autoGenerateDTO.getMessage().equals(errorCodeDO.getMessage())) { + return; + } + // 最终匹配,进行更新 + errorCodeMapper.updateById(new ErrorCodeDO().setId(errorCodeDO.getId()).setMessage(autoGenerateDTO.getMessage())); + }); } - public CommonResult> listErrorCodes1(String group, Date minUpdateTime) { - List errorCodeDOs = errorCodeMapper.selectListByGroup(group, minUpdateTime); - return success(ErrorCodeConvert.INSTANCE.convertList(errorCodeDOs)); + @Override + public List getErrorCodeList(String applicationName, Date minUpdateTime) { + List errorCodeDOs = errorCodeMapper.selectListByApplicationNameAndUpdateTimeGt( + applicationName, minUpdateTime); + return SysErrorCodeConvert.INSTANCE.convertList02(errorCodeDOs); } } From 3580b416bca557bc15caec9d0723ec979410ad99 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Wed, 21 Apr 2021 00:02:41 +0800 Subject: [PATCH 10/13] =?UTF-8?q?=E5=AE=8C=E6=88=90=20error=20code=20?= =?UTF-8?q?=E7=9A=84=E8=87=AA=E5=8A=A8=E5=88=9B=E5=BB=BA=E5=92=8C=E5=88=B7?= =?UTF-8?q?=E6=96=B0=E6=9C=BA=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...ation.java => ErrorCodeConfiguration.java} | 4 +- .../errorcode/config/ErrorCodeProperties.java | 7 +- .../generator/ErrorCodeAutoGeneratorImpl.java | 65 +++++++++---------- .../core/loader/ErrorCodeLoaderImpl.java | 2 +- .../errorcode/SysErrorCodeConvert.java | 18 ++--- .../dataobject/errorcode/InfErrorCodeDO.java} | 15 +++-- .../mysql/errorcode/InfErrorCodeMapper.java | 38 +++++++++++ .../dal/mysql/errorcode/ErrorCodeMapper.java | 38 ----------- .../errorcode/impl/ErrorCodeServiceImpl.java | 30 ++++----- src/main/resources/application.yaml | 9 ++- 10 files changed, 116 insertions(+), 110 deletions(-) rename src/main/java/cn/iocoder/dashboard/framework/errorcode/config/{ErrorCodeAutoConfiguration.java => ErrorCodeConfiguration.java} (95%) rename src/main/java/cn/iocoder/dashboard/modules/{system => infra}/convert/errorcode/SysErrorCodeConvert.java (62%) rename src/main/java/cn/iocoder/dashboard/modules/{system/dal/dataobject/errorcode/ErrorCodeDO.java => infra/dal/dataobject/errorcode/InfErrorCodeDO.java} (76%) create mode 100644 src/main/java/cn/iocoder/dashboard/modules/infra/dal/mysql/errorcode/InfErrorCodeMapper.java delete mode 100644 src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/errorcode/ErrorCodeMapper.java diff --git a/src/main/java/cn/iocoder/dashboard/framework/errorcode/config/ErrorCodeAutoConfiguration.java b/src/main/java/cn/iocoder/dashboard/framework/errorcode/config/ErrorCodeConfiguration.java similarity index 95% rename from src/main/java/cn/iocoder/dashboard/framework/errorcode/config/ErrorCodeAutoConfiguration.java rename to src/main/java/cn/iocoder/dashboard/framework/errorcode/config/ErrorCodeConfiguration.java index 0a885aad4..21e967e18 100644 --- a/src/main/java/cn/iocoder/dashboard/framework/errorcode/config/ErrorCodeAutoConfiguration.java +++ b/src/main/java/cn/iocoder/dashboard/framework/errorcode/config/ErrorCodeConfiguration.java @@ -17,13 +17,13 @@ import org.springframework.scheduling.annotation.EnableScheduling; @Configuration @EnableConfigurationProperties(ErrorCodeProperties.class) @EnableScheduling // 开启调度任务的功能,因为 ErrorCodeRemoteLoader 通过定时刷新错误码 -public class ErrorCodeAutoConfiguration { +public class ErrorCodeConfiguration { @Bean public ErrorCodeAutoGenerator errorCodeAutoGenerator(@Value("${spring.application.name}") String applicationName, ErrorCodeProperties errorCodeProperties, ErrorCodeFrameworkService errorCodeFrameworkService) { - return new ErrorCodeAutoGeneratorImpl(applicationName, errorCodeProperties.getConstantsClass(), + return new ErrorCodeAutoGeneratorImpl(applicationName, errorCodeProperties.getConstantsClassList(), errorCodeFrameworkService); } diff --git a/src/main/java/cn/iocoder/dashboard/framework/errorcode/config/ErrorCodeProperties.java b/src/main/java/cn/iocoder/dashboard/framework/errorcode/config/ErrorCodeProperties.java index 4fc2b5c45..2f629a297 100644 --- a/src/main/java/cn/iocoder/dashboard/framework/errorcode/config/ErrorCodeProperties.java +++ b/src/main/java/cn/iocoder/dashboard/framework/errorcode/config/ErrorCodeProperties.java @@ -4,7 +4,8 @@ import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.validation.annotation.Validated; -import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import java.util.List; /** * 错误码的配置属性类 @@ -19,7 +20,7 @@ public class ErrorCodeProperties { /** * 错误码枚举类 */ - @NotEmpty(message = "错误码枚举类不能为空") - private String constantsClass; + @NotNull(message = "错误码枚举类不能为空") + private List constantsClassList; } diff --git a/src/main/java/cn/iocoder/dashboard/framework/errorcode/core/generator/ErrorCodeAutoGeneratorImpl.java b/src/main/java/cn/iocoder/dashboard/framework/errorcode/core/generator/ErrorCodeAutoGeneratorImpl.java index 0207d0e59..049c87a23 100644 --- a/src/main/java/cn/iocoder/dashboard/framework/errorcode/core/generator/ErrorCodeAutoGeneratorImpl.java +++ b/src/main/java/cn/iocoder/dashboard/framework/errorcode/core/generator/ErrorCodeAutoGeneratorImpl.java @@ -1,5 +1,8 @@ package cn.iocoder.dashboard.framework.errorcode.core.generator; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ClassUtil; +import cn.hutool.core.util.ReflectUtil; import cn.iocoder.dashboard.common.exception.ErrorCode; import cn.iocoder.dashboard.framework.errorcode.core.dto.ErrorCodeAutoGenerateReqDTO; import cn.iocoder.dashboard.framework.errorcode.core.service.ErrorCodeFrameworkService; @@ -8,7 +11,6 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.boot.context.event.ApplicationReadyEvent; import org.springframework.context.event.EventListener; import org.springframework.scheduling.annotation.Async; -import org.springframework.util.StringUtils; import java.util.ArrayList; import java.util.Arrays; @@ -16,7 +18,7 @@ import java.util.List; /** * ErrorCodeAutoGenerator 的实现类 - * 目的是,扫描指定的 {@link #errorCodeConstantsClass} 类,写入到 system 的数据库中 + * 目的是,扫描指定的 {@link #constantsClassList} 类,写入到 infra 服务中 * * @author dylan */ @@ -31,7 +33,7 @@ public class ErrorCodeAutoGeneratorImpl implements ErrorCodeAutoGenerator { /** * 错误码枚举类 */ - private final String errorCodeConstantsClass; + private final List constantsClassList; /** * 错误码 Service */ @@ -41,38 +43,36 @@ public class ErrorCodeAutoGeneratorImpl implements ErrorCodeAutoGenerator { @EventListener(ApplicationReadyEvent.class) @Async // 异步,保证项目的启动过程,毕竟非关键流程 public void execute() { - // 第一步,获得错误码类 - Class errorCodeConstantsClazz = parseErrorCodeConstantsClass(); - if (errorCodeConstantsClazz == null) { - return; - } - - // 第二步,获得错误码数组 - List autoGenerateDTOs = parseErrorCode(errorCodeConstantsClazz); + // 第一步,解析错误码 + List autoGenerateDTOs = parseErrorCode(); log.info("[execute][解析到错误码数量为 ({}) 个]", autoGenerateDTOs.size()); - // 第三步,写入到 system 的数据库 + // 第二步,写入到 infra 服务 errorCodeService.autoGenerateErrorCodes(autoGenerateDTOs); - log.info("[execute][写入到 system 组件完成]"); + log.info("[execute][写入到 infra 组件完成]"); } /** - * 解析 errorCodeConstantsClass 变量,获得错误码类 + * 解析 constantsClassList 变量,转换成错误码数组 * - * @return 错误码类 + * @return 错误码数组 */ - private Class parseErrorCodeConstantsClass() { + private List parseErrorCode() { // 校验 errorCodeConstantsClass 参数 - if (!StringUtils.hasText(errorCodeConstantsClass)) { - log.info("[execute][未配置 yudao.error-code.constants-class 配置项,不进行自动写入到当前服务中]"); - return null; - } - try { - return Class.forName(errorCodeConstantsClass); - } catch (ClassNotFoundException e) { - log.error("[execute][配置的 ({}) 找不到对应的类]", errorCodeConstantsClass); - return null; + if (CollUtil.isEmpty(constantsClassList)) { + log.info("[execute][未配置 yudao.error-code.constants-class-list 配置项,不进行自动写入到 infra 服务中]"); + return new ArrayList<>(); } + + // 解析错误码 + List autoGenerateDTOs = new ArrayList<>(); + constantsClassList.forEach(constantsClass -> { + // 解析错误码枚举类 + Class errorCodeConstantsClazz = ClassUtil.loadClass(constantsClass); + // 解析错误码 + autoGenerateDTOs.addAll(parseErrorCode(errorCodeConstantsClazz)); + }); + return autoGenerateDTOs; } /** @@ -80,19 +80,16 @@ public class ErrorCodeAutoGeneratorImpl implements ErrorCodeAutoGenerator { * * @return 错误码数组 */ - private List parseErrorCode(Class errorCodeConstantsClazz) { + private List parseErrorCode(Class constantsClass) { List autoGenerateDTOs = new ArrayList<>(); - Arrays.stream(errorCodeConstantsClazz.getFields()).forEach(field -> { + Arrays.stream(constantsClass.getFields()).forEach(field -> { if (field.getType() != ErrorCode.class) { return; } - try { - ErrorCode errorCode = (ErrorCode) field.get(errorCodeConstantsClazz); - autoGenerateDTOs.add(new ErrorCodeAutoGenerateReqDTO().setApplicationName(applicationName) - .setCode(errorCode.getCode()).setMessage(errorCode.getMsg())); - } catch (IllegalAccessException e) { - throw new RuntimeException(e); - } + // 转换成 ErrorCodeAutoGenerateReqDTO 对象 + ErrorCode errorCode = (ErrorCode) ReflectUtil.getFieldValue(constantsClass, field); + autoGenerateDTOs.add(new ErrorCodeAutoGenerateReqDTO().setApplicationName(applicationName) + .setCode(errorCode.getCode()).setMessage(errorCode.getMsg())); }); return autoGenerateDTOs; } diff --git a/src/main/java/cn/iocoder/dashboard/framework/errorcode/core/loader/ErrorCodeLoaderImpl.java b/src/main/java/cn/iocoder/dashboard/framework/errorcode/core/loader/ErrorCodeLoaderImpl.java index 9dd9e5450..2f1c9b9d8 100644 --- a/src/main/java/cn/iocoder/dashboard/framework/errorcode/core/loader/ErrorCodeLoaderImpl.java +++ b/src/main/java/cn/iocoder/dashboard/framework/errorcode/core/loader/ErrorCodeLoaderImpl.java @@ -14,7 +14,7 @@ import java.util.Date; import java.util.List; /** - * ErrorCodeLoader 的实现类,从 system 的数据库中,加载错误码。 + * ErrorCodeLoader 的实现类,从 infra 的数据库中,加载错误码。 * * 考虑到错误码会刷新,所以按照 {@link #REFRESH_ERROR_CODE_PERIOD} 频率,增量加载错误码。 * diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/convert/errorcode/SysErrorCodeConvert.java b/src/main/java/cn/iocoder/dashboard/modules/infra/convert/errorcode/SysErrorCodeConvert.java similarity index 62% rename from src/main/java/cn/iocoder/dashboard/modules/system/convert/errorcode/SysErrorCodeConvert.java rename to src/main/java/cn/iocoder/dashboard/modules/infra/convert/errorcode/SysErrorCodeConvert.java index 7d46b9538..aeb359f75 100644 --- a/src/main/java/cn/iocoder/dashboard/modules/system/convert/errorcode/SysErrorCodeConvert.java +++ b/src/main/java/cn/iocoder/dashboard/modules/infra/convert/errorcode/SysErrorCodeConvert.java @@ -1,4 +1,4 @@ -package cn.iocoder.dashboard.modules.system.convert.errorcode; +package cn.iocoder.dashboard.modules.infra.convert.errorcode; import cn.iocoder.dashboard.common.pojo.PageResult; import cn.iocoder.dashboard.framework.errorcode.core.dto.ErrorCodeAutoGenerateReqDTO; @@ -6,7 +6,7 @@ import cn.iocoder.dashboard.framework.errorcode.core.dto.ErrorCodeRespDTO; import cn.iocoder.dashboard.modules.system.controller.errorcode.dto.ErrorCodeCreateDTO; import cn.iocoder.dashboard.modules.system.controller.errorcode.dto.ErrorCodeUpdateDTO; import cn.iocoder.dashboard.modules.system.controller.errorcode.vo.ErrorCodeVO; -import cn.iocoder.dashboard.modules.system.dal.dataobject.errorcode.ErrorCodeDO; +import cn.iocoder.dashboard.modules.infra.dal.dataobject.errorcode.InfErrorCodeDO; import com.baomidou.mybatisplus.core.metadata.IPage; import org.mapstruct.Mapper; import org.mapstruct.Mapping; @@ -20,19 +20,19 @@ public interface SysErrorCodeConvert { SysErrorCodeConvert INSTANCE = Mappers.getMapper(SysErrorCodeConvert.class); - ErrorCodeVO convert (ErrorCodeDO bean); + ErrorCodeVO convert (InfErrorCodeDO bean); - List convertList(List list); + List convertList(List list); @Mapping(source = "records", target = "list") - PageResult convertPage(IPage page); + PageResult convertPage(IPage page); - ErrorCodeDO convert (ErrorCodeCreateDTO bean); + InfErrorCodeDO convert (ErrorCodeCreateDTO bean); - ErrorCodeDO convert (ErrorCodeUpdateDTO bean); + InfErrorCodeDO convert (ErrorCodeUpdateDTO bean); - ErrorCodeDO convert(ErrorCodeAutoGenerateReqDTO bean); + InfErrorCodeDO convert(ErrorCodeAutoGenerateReqDTO bean); - List convertList02(List list); + List convertList02(List list); } diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/dal/dataobject/errorcode/ErrorCodeDO.java b/src/main/java/cn/iocoder/dashboard/modules/infra/dal/dataobject/errorcode/InfErrorCodeDO.java similarity index 76% rename from src/main/java/cn/iocoder/dashboard/modules/system/dal/dataobject/errorcode/ErrorCodeDO.java rename to src/main/java/cn/iocoder/dashboard/modules/infra/dal/dataobject/errorcode/InfErrorCodeDO.java index 21e1537ea..279018b7f 100644 --- a/src/main/java/cn/iocoder/dashboard/modules/system/dal/dataobject/errorcode/ErrorCodeDO.java +++ b/src/main/java/cn/iocoder/dashboard/modules/infra/dal/dataobject/errorcode/InfErrorCodeDO.java @@ -1,4 +1,4 @@ -package cn.iocoder.dashboard.modules.system.dal.dataobject.errorcode; +package cn.iocoder.dashboard.modules.infra.dal.dataobject.errorcode; import cn.iocoder.dashboard.framework.mybatis.core.dataobject.BaseDO; import cn.iocoder.dashboard.modules.system.enums.errorcode.SysErrorCodeTypeEnum; @@ -8,17 +8,22 @@ import lombok.Data; import lombok.EqualsAndHashCode; import lombok.ToString; -@TableName(value = "sys_error_code") +/** + * 错误码表 + * + * @author 芋道源码 + */ +@TableName(value = "inf_error_code") @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) -public class ErrorCodeDO extends BaseDO { +public class InfErrorCodeDO extends BaseDO { /** - * 错误码编号 + * 错误码编号,自增 */ @TableId - private Integer id; + private Long id; /** * 错误码类型 * diff --git a/src/main/java/cn/iocoder/dashboard/modules/infra/dal/mysql/errorcode/InfErrorCodeMapper.java b/src/main/java/cn/iocoder/dashboard/modules/infra/dal/mysql/errorcode/InfErrorCodeMapper.java new file mode 100644 index 000000000..92cc5b571 --- /dev/null +++ b/src/main/java/cn/iocoder/dashboard/modules/infra/dal/mysql/errorcode/InfErrorCodeMapper.java @@ -0,0 +1,38 @@ +package cn.iocoder.dashboard.modules.infra.dal.mysql.errorcode; + +import cn.iocoder.dashboard.framework.mybatis.core.query.QueryWrapperX; +import cn.iocoder.dashboard.modules.system.controller.errorcode.dto.ErrorCodePageDTO; +import cn.iocoder.dashboard.modules.infra.dal.dataobject.errorcode.InfErrorCodeDO; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.ibatis.annotations.Mapper; + +import java.util.Collection; +import java.util.Date; +import java.util.List; + +@Mapper +public interface InfErrorCodeMapper extends BaseMapper { + + default IPage selectPage(ErrorCodePageDTO pageDTO) { + return selectPage(new Page<>(pageDTO.getPageNo(), pageDTO.getPageSize()), + new QueryWrapperX().likeIfPresent("`group`", pageDTO.getGroup()) + .eqIfPresent("code", pageDTO.getCode()).likeIfPresent("message", pageDTO.getMessage())); + } + + default List selectListByCodes(Collection codes) { + return selectList(new QueryWrapper().in("code", codes)); + } + + default InfErrorCodeDO selectByCode(Integer code) { + return selectOne(new QueryWrapper().eq("code", code)); + } + + default List selectListByApplicationNameAndUpdateTimeGt(String applicationName, Date minUpdateTime) { + return selectList(new QueryWrapperX().eq("application_name", applicationName) + .gtIfPresent("update_time", minUpdateTime)); + } + +} diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/errorcode/ErrorCodeMapper.java b/src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/errorcode/ErrorCodeMapper.java deleted file mode 100644 index 60b8d8fc5..000000000 --- a/src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/errorcode/ErrorCodeMapper.java +++ /dev/null @@ -1,38 +0,0 @@ -package cn.iocoder.dashboard.modules.system.dal.mysql.errorcode; - -import cn.iocoder.dashboard.framework.mybatis.core.query.QueryWrapperX; -import cn.iocoder.dashboard.modules.system.controller.errorcode.dto.ErrorCodePageDTO; -import cn.iocoder.dashboard.modules.system.dal.dataobject.errorcode.ErrorCodeDO; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import org.apache.ibatis.annotations.Mapper; - -import java.util.Collection; -import java.util.Date; -import java.util.List; - -@Mapper -public interface ErrorCodeMapper extends BaseMapper { - - default IPage selectPage(ErrorCodePageDTO pageDTO) { - return selectPage(new Page<>(pageDTO.getPageNo(), pageDTO.getPageSize()), - new QueryWrapperX().likeIfPresent("`group`", pageDTO.getGroup()) - .eqIfPresent("code", pageDTO.getCode()).likeIfPresent("message", pageDTO.getMessage())); - } - - default List selectListByCodes(Collection codes) { - return selectList(new QueryWrapper().in("code", codes)); - } - - default ErrorCodeDO selectByCode(Integer code) { - return selectOne(new QueryWrapper().eq("code", code)); - } - - default List selectListByApplicationNameAndUpdateTimeGt(String applicationName, Date minUpdateTime) { - return selectList(new QueryWrapperX().eq("application_name", applicationName) - .gtIfPresent("update_time", minUpdateTime)); - } - -} diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/impl/ErrorCodeServiceImpl.java b/src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/impl/ErrorCodeServiceImpl.java index 3aff41357..0970be816 100644 --- a/src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/impl/ErrorCodeServiceImpl.java +++ b/src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/impl/ErrorCodeServiceImpl.java @@ -9,9 +9,9 @@ import cn.iocoder.dashboard.modules.system.controller.errorcode.dto.ErrorCodeCre import cn.iocoder.dashboard.modules.system.controller.errorcode.dto.ErrorCodePageDTO; import cn.iocoder.dashboard.modules.system.controller.errorcode.dto.ErrorCodeUpdateDTO; import cn.iocoder.dashboard.modules.system.controller.errorcode.vo.ErrorCodeVO; -import cn.iocoder.dashboard.modules.system.convert.errorcode.SysErrorCodeConvert; -import cn.iocoder.dashboard.modules.system.dal.dataobject.errorcode.ErrorCodeDO; -import cn.iocoder.dashboard.modules.system.dal.mysql.errorcode.ErrorCodeMapper; +import cn.iocoder.dashboard.modules.infra.convert.errorcode.SysErrorCodeConvert; +import cn.iocoder.dashboard.modules.infra.dal.dataobject.errorcode.InfErrorCodeDO; +import cn.iocoder.dashboard.modules.infra.dal.mysql.errorcode.InfErrorCodeMapper; import cn.iocoder.dashboard.modules.system.enums.errorcode.SysErrorCodeTypeEnum; import cn.iocoder.dashboard.modules.system.service.errorcode.SysErrorCodeService; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -39,7 +39,7 @@ import static cn.iocoder.dashboard.util.collection.CollectionUtils.convertSet; public class ErrorCodeServiceImpl implements SysErrorCodeService { @Resource - private ErrorCodeMapper errorCodeMapper; + private InfErrorCodeMapper errorCodeMapper; /** * 创建错误码 @@ -50,7 +50,7 @@ public class ErrorCodeServiceImpl implements SysErrorCodeService { public ErrorCodeVO createErrorCode(ErrorCodeCreateDTO createDTO) { checkDuplicateErrorCode(createDTO.getCode(), null); // 插入到数据库 - ErrorCodeDO errorCodeDO = SysErrorCodeConvert.INSTANCE.convert(createDTO); + InfErrorCodeDO errorCodeDO = SysErrorCodeConvert.INSTANCE.convert(createDTO); errorCodeMapper.insert(errorCodeDO); // 返回 return SysErrorCodeConvert.INSTANCE.convert(errorCodeDO); @@ -68,7 +68,7 @@ public class ErrorCodeServiceImpl implements SysErrorCodeService { throw ServiceExceptionUtil.exception(ERROR_CODE_NOT_EXISTS); } // 更新到数据库 - ErrorCodeDO updateObject = SysErrorCodeConvert.INSTANCE.convert(updateDTO); + InfErrorCodeDO updateObject = SysErrorCodeConvert.INSTANCE.convert(updateDTO); errorCodeMapper.updateById(updateObject); } @@ -93,7 +93,7 @@ public class ErrorCodeServiceImpl implements SysErrorCodeService { * @return 错误码 */ public ErrorCodeVO getErrorCode(Integer errorCodeId) { - ErrorCodeDO errorCodeDO = errorCodeMapper.selectById(errorCodeId); + InfErrorCodeDO errorCodeDO = errorCodeMapper.selectById(errorCodeId); return SysErrorCodeConvert.INSTANCE.convert(errorCodeDO); } @@ -104,7 +104,7 @@ public class ErrorCodeServiceImpl implements SysErrorCodeService { * @return 错误码列表 */ public List listErrorCodes(List errorCodeIds) { - List errorCodeDOs = errorCodeMapper.selectBatchIds(errorCodeIds); + List errorCodeDOs = errorCodeMapper.selectBatchIds(errorCodeIds); return SysErrorCodeConvert.INSTANCE.convertList(errorCodeDOs); } @@ -115,7 +115,7 @@ public class ErrorCodeServiceImpl implements SysErrorCodeService { * @return 错误码分页结果 */ public PageResult pageErrorCode(ErrorCodePageDTO pageDTO) { - IPage errorCodeDOPage = errorCodeMapper.selectPage(pageDTO); + IPage errorCodeDOPage = errorCodeMapper.selectPage(pageDTO); return SysErrorCodeConvert.INSTANCE.convertPage(errorCodeDOPage); } @@ -128,7 +128,7 @@ public class ErrorCodeServiceImpl implements SysErrorCodeService { * @param id 错误码编号 */ private void checkDuplicateErrorCode(Integer code, Integer id) { - ErrorCodeDO errorCodeDO = errorCodeMapper.selectByCode(code); + InfErrorCodeDO errorCodeDO = errorCodeMapper.selectByCode(code); if (errorCodeDO == null) { return; } @@ -148,13 +148,13 @@ public class ErrorCodeServiceImpl implements SysErrorCodeService { return; } // 获得错误码 - List errorCodeDOs = errorCodeMapper.selectListByCodes( + List errorCodeDOs = errorCodeMapper.selectListByCodes( convertSet(autoGenerateDTOs, ErrorCodeAutoGenerateReqDTO::getCode)); - Map errorCodeDOMap = convertMap(errorCodeDOs, ErrorCodeDO::getCode); + Map errorCodeDOMap = convertMap(errorCodeDOs, InfErrorCodeDO::getCode); // 遍历 autoGenerateBOs 数组,逐个插入或更新。考虑到每次量级不大,就不走批量了 autoGenerateDTOs.forEach(autoGenerateDTO -> { - ErrorCodeDO errorCodeDO = errorCodeDOMap.get(autoGenerateDTO.getCode()); + InfErrorCodeDO errorCodeDO = errorCodeDOMap.get(autoGenerateDTO.getCode()); // 不存在,则进行新增 if (errorCodeDO == null) { errorCodeDO = SysErrorCodeConvert.INSTANCE.convert(autoGenerateDTO) @@ -179,13 +179,13 @@ public class ErrorCodeServiceImpl implements SysErrorCodeService { return; } // 最终匹配,进行更新 - errorCodeMapper.updateById(new ErrorCodeDO().setId(errorCodeDO.getId()).setMessage(autoGenerateDTO.getMessage())); + errorCodeMapper.updateById(new InfErrorCodeDO().setId(errorCodeDO.getId()).setMessage(autoGenerateDTO.getMessage())); }); } @Override public List getErrorCodeList(String applicationName, Date minUpdateTime) { - List errorCodeDOs = errorCodeMapper.selectListByApplicationNameAndUpdateTimeGt( + List errorCodeDOs = errorCodeMapper.selectListByApplicationNameAndUpdateTimeGt( applicationName, minUpdateTime); return SysErrorCodeConvert.INSTANCE.convertList02(errorCodeDOs); } diff --git a/src/main/resources/application.yaml b/src/main/resources/application.yaml index f704932ed..9e9f9400b 100644 --- a/src/main/resources/application.yaml +++ b/src/main/resources/application.yaml @@ -33,7 +33,10 @@ mybatis-plus: mapper-locations: classpath*:mapper/*.xml type-aliases-package: ${yudao.info.base-package}.modules.*.dal.dataobject +--- #################### 芋道相关配置 #################### + yudao: - error-code: - group: test1 - constantsClass: cn.iocoder.dashboard.common.exception.enums.GlobalErrorCodeConstants + error-code: # 错误码相关配置项 + constants-class-list: + - cn.iocoder.dashboard.modules.infra.enums.InfErrorCodeConstants + - cn.iocoder.dashboard.modules.system.enums.SysErrorCodeConstants From 6984eb5db1fc32649042980fed89e6b9eea8a8cc Mon Sep 17 00:00:00 2001 From: YunaiV Date: Wed, 21 Apr 2021 01:04:48 +0800 Subject: [PATCH 11/13] =?UTF-8?q?=E5=AE=8C=E6=88=90=E9=94=99=E8=AF=AF?= =?UTF-8?q?=E7=A0=81=E7=9A=84=E5=90=8E=E7=AB=AF=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../errorcode/InfErrorCodeController.http | 12 ++ .../errorcode/InfErrorCodeController.java | 89 ++++++++ .../errorcode/vo/InfErrorCodeBaseVO.java | 30 +++ .../errorcode/vo/InfErrorCodeCreateReqVO.java | 14 ++ .../errorcode/vo/InfErrorCodeExcelVO.java | 42 ++++ .../errorcode/vo/InfErrorCodeExportReqVO.java | 36 ++++ .../errorcode/vo/InfErrorCodePageReqVO.java | 41 ++++ .../errorcode/vo/InfErrorCodeRespVO.java | 26 +++ .../errorcode/vo/InfErrorCodeUpdateReqVO.java | 21 ++ .../errorcode/InfErrorCodeConvert.java | 42 ++++ .../errorcode/SysErrorCodeConvert.java | 38 ---- .../dataobject/errorcode/InfErrorCodeDO.java | 4 +- .../mysql/errorcode/InfErrorCodeMapper.java | 32 ++- .../infra/enums/InfErrorCodeConstants.java | 5 + .../errorcode/InfErrorCodeTypeEnum.java} | 6 +- .../errorcode/InfErrorCodeService.java | 67 ++++++ .../impl/InfErrorCodeServiceImpl.java | 173 +++++++++++++++ .../errorcode/ErrorCodeController.http | 42 ---- .../errorcode/ErrorCodeController.java | 99 --------- .../errorcode/dto/ErrorCodeCreateDTO.java | 27 --- .../errorcode/dto/ErrorCodePageDTO.java | 24 --- .../errorcode/dto/ErrorCodeUpdateDTO.java | 30 --- .../controller/errorcode/vo/ErrorCodeVO.java | 35 --- .../system/enums/SysErrorCodeConstants.java | 6 - .../system/enums/dict/SysDictTypeEnum.java | 2 +- .../errorcode/SysErrorCodeService.java | 12 -- .../errorcode/impl/ErrorCodeServiceImpl.java | 194 ----------------- .../codegen/java/service/serviceImpl.vm | 2 +- .../errorcode/InfErrorCodeServiceTest.java | 200 ++++++++++++++++++ src/test/resources/sql/clean.sql | 1 + src/test/resources/sql/create_tables.sql | 19 +- 31 files changed, 846 insertions(+), 525 deletions(-) create mode 100644 src/main/java/cn/iocoder/dashboard/modules/infra/controller/errorcode/InfErrorCodeController.http create mode 100644 src/main/java/cn/iocoder/dashboard/modules/infra/controller/errorcode/InfErrorCodeController.java create mode 100644 src/main/java/cn/iocoder/dashboard/modules/infra/controller/errorcode/vo/InfErrorCodeBaseVO.java create mode 100644 src/main/java/cn/iocoder/dashboard/modules/infra/controller/errorcode/vo/InfErrorCodeCreateReqVO.java create mode 100644 src/main/java/cn/iocoder/dashboard/modules/infra/controller/errorcode/vo/InfErrorCodeExcelVO.java create mode 100644 src/main/java/cn/iocoder/dashboard/modules/infra/controller/errorcode/vo/InfErrorCodeExportReqVO.java create mode 100644 src/main/java/cn/iocoder/dashboard/modules/infra/controller/errorcode/vo/InfErrorCodePageReqVO.java create mode 100644 src/main/java/cn/iocoder/dashboard/modules/infra/controller/errorcode/vo/InfErrorCodeRespVO.java create mode 100644 src/main/java/cn/iocoder/dashboard/modules/infra/controller/errorcode/vo/InfErrorCodeUpdateReqVO.java create mode 100644 src/main/java/cn/iocoder/dashboard/modules/infra/convert/errorcode/InfErrorCodeConvert.java delete mode 100644 src/main/java/cn/iocoder/dashboard/modules/infra/convert/errorcode/SysErrorCodeConvert.java rename src/main/java/cn/iocoder/dashboard/modules/{system/enums/errorcode/SysErrorCodeTypeEnum.java => infra/enums/errorcode/InfErrorCodeTypeEnum.java} (75%) create mode 100644 src/main/java/cn/iocoder/dashboard/modules/infra/service/errorcode/InfErrorCodeService.java create mode 100644 src/main/java/cn/iocoder/dashboard/modules/infra/service/errorcode/impl/InfErrorCodeServiceImpl.java delete mode 100644 src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/ErrorCodeController.http delete mode 100644 src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/ErrorCodeController.java delete mode 100644 src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/dto/ErrorCodeCreateDTO.java delete mode 100644 src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/dto/ErrorCodePageDTO.java delete mode 100644 src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/dto/ErrorCodeUpdateDTO.java delete mode 100644 src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/vo/ErrorCodeVO.java delete mode 100644 src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/SysErrorCodeService.java delete mode 100644 src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/impl/ErrorCodeServiceImpl.java create mode 100644 src/test/java/cn/iocoder/dashboard/modules/infra/service/errorcode/InfErrorCodeServiceTest.java diff --git a/src/main/java/cn/iocoder/dashboard/modules/infra/controller/errorcode/InfErrorCodeController.http b/src/main/java/cn/iocoder/dashboard/modules/infra/controller/errorcode/InfErrorCodeController.http new file mode 100644 index 000000000..76226d18e --- /dev/null +++ b/src/main/java/cn/iocoder/dashboard/modules/infra/controller/errorcode/InfErrorCodeController.http @@ -0,0 +1,12 @@ +### +POST {{baseUrl}}/inra/error-code/create +Authorization: Bearer {{token}} +Content-Type:application/json + +{ + "code": 200, + "message": "成功", + "group": "test", + "type": 1 +} + diff --git a/src/main/java/cn/iocoder/dashboard/modules/infra/controller/errorcode/InfErrorCodeController.java b/src/main/java/cn/iocoder/dashboard/modules/infra/controller/errorcode/InfErrorCodeController.java new file mode 100644 index 000000000..730f305b5 --- /dev/null +++ b/src/main/java/cn/iocoder/dashboard/modules/infra/controller/errorcode/InfErrorCodeController.java @@ -0,0 +1,89 @@ +package cn.iocoder.dashboard.modules.infra.controller.errorcode; + +import cn.iocoder.dashboard.common.pojo.CommonResult; +import cn.iocoder.dashboard.common.pojo.PageResult; +import cn.iocoder.dashboard.framework.excel.core.util.ExcelUtils; +import cn.iocoder.dashboard.framework.logger.operatelog.core.annotations.OperateLog; +import cn.iocoder.dashboard.modules.infra.controller.errorcode.vo.*; +import cn.iocoder.dashboard.modules.infra.convert.errorcode.InfErrorCodeConvert; +import cn.iocoder.dashboard.modules.infra.dal.dataobject.errorcode.InfErrorCodeDO; +import cn.iocoder.dashboard.modules.infra.service.errorcode.InfErrorCodeService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; +import java.io.IOException; +import java.util.List; + +import static cn.iocoder.dashboard.common.pojo.CommonResult.success; +import static cn.iocoder.dashboard.framework.logger.operatelog.core.enums.OperateTypeEnum.EXPORT; + +@Api(tags = "错误码") +@RestController +@RequestMapping("/infra/error-code") +@Validated +public class InfErrorCodeController { + + @Resource + private InfErrorCodeService errorCodeService; + + @PostMapping("/create") + @ApiOperation("创建错误码") + @PreAuthorize("@ss.hasPermission('infra:error-code:create')") + public CommonResult createErrorCode(@Valid @RequestBody InfErrorCodeCreateReqVO createReqVO) { + return success(errorCodeService.createErrorCode(createReqVO)); + } + + @PutMapping("/update") + @ApiOperation("更新错误码") + @PreAuthorize("@ss.hasPermission('infra:error-code:update')") + public CommonResult updateErrorCode(@Valid @RequestBody InfErrorCodeUpdateReqVO updateReqVO) { + errorCodeService.updateErrorCode(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @ApiOperation("删除错误码") + @ApiImplicitParam(name = "id", value = "编号", required = true) + @PreAuthorize("@ss.hasPermission('infra:error-code:delete')") + public CommonResult deleteErrorCode(@RequestParam("id") Long id) { + errorCodeService.deleteErrorCode(id); + return success(true); + } + + @GetMapping("/get") + @ApiOperation("获得错误码") + @ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = Long.class) + @PreAuthorize("@ss.hasPermission('infra:error-code:query')") + public CommonResult getErrorCode(@RequestParam("id") Long id) { + InfErrorCodeDO errorCode = errorCodeService.getErrorCode(id); + return success(InfErrorCodeConvert.INSTANCE.convert(errorCode)); + } + + @GetMapping("/page") + @ApiOperation("获得错误码分页") + @PreAuthorize("@ss.hasPermission('infra:error-code:query')") + public CommonResult> getErrorCodePage(@Valid InfErrorCodePageReqVO pageVO) { + PageResult pageResult = errorCodeService.getErrorCodePage(pageVO); + return success(InfErrorCodeConvert.INSTANCE.convertPage(pageResult)); + } + + @GetMapping("/export-excel") + @ApiOperation("导出错误码 Excel") + @PreAuthorize("@ss.hasPermission('infra:error-code:export')") + @OperateLog(type = EXPORT) + public void exportErrorCodeExcel(@Valid InfErrorCodeExportReqVO exportReqVO, + HttpServletResponse response) throws IOException { + List list = errorCodeService.getErrorCodeList(exportReqVO); + // 导出 Excel + List datas = InfErrorCodeConvert.INSTANCE.convertList02(list); + ExcelUtils.write(response, "错误码.xls", "数据", InfErrorCodeExcelVO.class, datas); + } + +} diff --git a/src/main/java/cn/iocoder/dashboard/modules/infra/controller/errorcode/vo/InfErrorCodeBaseVO.java b/src/main/java/cn/iocoder/dashboard/modules/infra/controller/errorcode/vo/InfErrorCodeBaseVO.java new file mode 100644 index 000000000..4e1b6cc80 --- /dev/null +++ b/src/main/java/cn/iocoder/dashboard/modules/infra/controller/errorcode/vo/InfErrorCodeBaseVO.java @@ -0,0 +1,30 @@ +package cn.iocoder.dashboard.modules.infra.controller.errorcode.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +/** +* 错误码 Base VO,提供给添加、修改、详细的子 VO 使用 +* 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成 +*/ +@Data +public class InfErrorCodeBaseVO { + + @ApiModelProperty(value = "应用名", required = true, example = "dashboard") + @NotNull(message = "应用名不能为空") + private String applicationName; + + @ApiModelProperty(value = "错误码编码", required = true, example = "1234") + @NotNull(message = "错误码编码不能为空") + private Integer code; + + @ApiModelProperty(value = "错误码错误提示", required = true, example = "帅气") + @NotNull(message = "错误码错误提示不能为空") + private String message; + + @ApiModelProperty(value = "备注", example = "哈哈哈") + private String memo; + +} diff --git a/src/main/java/cn/iocoder/dashboard/modules/infra/controller/errorcode/vo/InfErrorCodeCreateReqVO.java b/src/main/java/cn/iocoder/dashboard/modules/infra/controller/errorcode/vo/InfErrorCodeCreateReqVO.java new file mode 100644 index 000000000..64049a236 --- /dev/null +++ b/src/main/java/cn/iocoder/dashboard/modules/infra/controller/errorcode/vo/InfErrorCodeCreateReqVO.java @@ -0,0 +1,14 @@ +package cn.iocoder.dashboard.modules.infra.controller.errorcode.vo; + +import io.swagger.annotations.ApiModel; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + +@ApiModel("错误码创建 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class InfErrorCodeCreateReqVO extends InfErrorCodeBaseVO { + +} diff --git a/src/main/java/cn/iocoder/dashboard/modules/infra/controller/errorcode/vo/InfErrorCodeExcelVO.java b/src/main/java/cn/iocoder/dashboard/modules/infra/controller/errorcode/vo/InfErrorCodeExcelVO.java new file mode 100644 index 000000000..d0c82e154 --- /dev/null +++ b/src/main/java/cn/iocoder/dashboard/modules/infra/controller/errorcode/vo/InfErrorCodeExcelVO.java @@ -0,0 +1,42 @@ +package cn.iocoder.dashboard.modules.infra.controller.errorcode.vo; + +import cn.iocoder.dashboard.framework.excel.core.annotations.DictFormat; +import cn.iocoder.dashboard.framework.excel.core.convert.DictConvert; +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.Data; + +import java.util.Date; + +import static cn.iocoder.dashboard.modules.system.enums.dict.SysDictTypeEnum.INF_ERROR_CODE_TYPE; + +/** + * 错误码 Excel VO + * + * @author 芋道源码 + */ +@Data +public class InfErrorCodeExcelVO { + + @ExcelProperty("错误码编号") + private Long id; + + @ExcelProperty(value = "错误码类型", converter = DictConvert.class) + @DictFormat(INF_ERROR_CODE_TYPE) + private Integer type; + + @ExcelProperty("应用名") + private String applicationName; + + @ExcelProperty("错误码编码") + private Integer code; + + @ExcelProperty("错误码错误提示") + private String message; + + @ExcelProperty("备注") + private String memo; + + @ExcelProperty("创建时间") + private Date createTime; + +} diff --git a/src/main/java/cn/iocoder/dashboard/modules/infra/controller/errorcode/vo/InfErrorCodeExportReqVO.java b/src/main/java/cn/iocoder/dashboard/modules/infra/controller/errorcode/vo/InfErrorCodeExportReqVO.java new file mode 100644 index 000000000..5e06da3a6 --- /dev/null +++ b/src/main/java/cn/iocoder/dashboard/modules/infra/controller/errorcode/vo/InfErrorCodeExportReqVO.java @@ -0,0 +1,36 @@ +package cn.iocoder.dashboard.modules.infra.controller.errorcode.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.util.Date; + +import static cn.iocoder.dashboard.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@ApiModel(value = "错误码 Excel 导出 Request VO", description = "参数和 InfErrorCodePageReqVO 是一致的") +@Data +public class InfErrorCodeExportReqVO { + + @ApiModelProperty(value = "错误码类型", example = "1") + private Integer type; + + @ApiModelProperty(value = "应用名", example = "dashboard") + private String applicationName; + + @ApiModelProperty(value = "错误码编码", example = "1234") + private Integer code; + + @ApiModelProperty(value = "错误码错误提示", example = "帅气") + private String message; + + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + @ApiModelProperty(value = "开始创建时间") + private Date beginCreateTime; + + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + @ApiModelProperty(value = "结束创建时间") + private Date endCreateTime; + +} diff --git a/src/main/java/cn/iocoder/dashboard/modules/infra/controller/errorcode/vo/InfErrorCodePageReqVO.java b/src/main/java/cn/iocoder/dashboard/modules/infra/controller/errorcode/vo/InfErrorCodePageReqVO.java new file mode 100644 index 000000000..73bcac5a9 --- /dev/null +++ b/src/main/java/cn/iocoder/dashboard/modules/infra/controller/errorcode/vo/InfErrorCodePageReqVO.java @@ -0,0 +1,41 @@ +package cn.iocoder.dashboard.modules.infra.controller.errorcode.vo; + +import cn.iocoder.dashboard.common.pojo.PageParam; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.springframework.format.annotation.DateTimeFormat; + +import java.util.Date; + +import static cn.iocoder.dashboard.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@ApiModel("错误码分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class InfErrorCodePageReqVO extends PageParam { + + @ApiModelProperty(value = "错误码类型", example = "1", notes = "参见 SysErrorCodeTypeEnum 枚举类") + private Integer type; + + @ApiModelProperty(value = "应用名", example = "dashboard") + private String applicationName; + + @ApiModelProperty(value = "错误码编码", example = "1234") + private Integer code; + + @ApiModelProperty(value = "错误码错误提示", example = "帅气") + private String message; + + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + @ApiModelProperty(value = "开始创建时间") + private Date beginCreateTime; + + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + @ApiModelProperty(value = "结束创建时间") + private Date endCreateTime; + +} diff --git a/src/main/java/cn/iocoder/dashboard/modules/infra/controller/errorcode/vo/InfErrorCodeRespVO.java b/src/main/java/cn/iocoder/dashboard/modules/infra/controller/errorcode/vo/InfErrorCodeRespVO.java new file mode 100644 index 000000000..09c416062 --- /dev/null +++ b/src/main/java/cn/iocoder/dashboard/modules/infra/controller/errorcode/vo/InfErrorCodeRespVO.java @@ -0,0 +1,26 @@ +package cn.iocoder.dashboard.modules.infra.controller.errorcode.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + +import java.util.Date; + +@ApiModel("错误码 Response VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class InfErrorCodeRespVO extends InfErrorCodeBaseVO { + + @ApiModelProperty(value = "错误码编号", required = true, example = "1024") + private Long id; + + @ApiModelProperty(value = "错误码类型", required = true, example = "1", notes = "参见 SysErrorCodeTypeEnum 枚举类") + private Integer type; + + @ApiModelProperty(value = "创建时间", required = true) + private Date createTime; + +} diff --git a/src/main/java/cn/iocoder/dashboard/modules/infra/controller/errorcode/vo/InfErrorCodeUpdateReqVO.java b/src/main/java/cn/iocoder/dashboard/modules/infra/controller/errorcode/vo/InfErrorCodeUpdateReqVO.java new file mode 100644 index 000000000..78f6c39aa --- /dev/null +++ b/src/main/java/cn/iocoder/dashboard/modules/infra/controller/errorcode/vo/InfErrorCodeUpdateReqVO.java @@ -0,0 +1,21 @@ +package cn.iocoder.dashboard.modules.infra.controller.errorcode.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + +import javax.validation.constraints.NotNull; + +@ApiModel("错误码更新 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class InfErrorCodeUpdateReqVO extends InfErrorCodeBaseVO { + + @ApiModelProperty(value = "错误码编号", required = true, example = "1024") + @NotNull(message = "错误码编号不能为空") + private Long id; + +} diff --git a/src/main/java/cn/iocoder/dashboard/modules/infra/convert/errorcode/InfErrorCodeConvert.java b/src/main/java/cn/iocoder/dashboard/modules/infra/convert/errorcode/InfErrorCodeConvert.java new file mode 100644 index 000000000..433793150 --- /dev/null +++ b/src/main/java/cn/iocoder/dashboard/modules/infra/convert/errorcode/InfErrorCodeConvert.java @@ -0,0 +1,42 @@ +package cn.iocoder.dashboard.modules.infra.convert.errorcode; + +import cn.iocoder.dashboard.common.pojo.PageResult; +import cn.iocoder.dashboard.framework.errorcode.core.dto.ErrorCodeAutoGenerateReqDTO; +import cn.iocoder.dashboard.framework.errorcode.core.dto.ErrorCodeRespDTO; +import cn.iocoder.dashboard.modules.infra.controller.errorcode.vo.InfErrorCodeCreateReqVO; +import cn.iocoder.dashboard.modules.infra.controller.errorcode.vo.InfErrorCodeExcelVO; +import cn.iocoder.dashboard.modules.infra.controller.errorcode.vo.InfErrorCodeRespVO; +import cn.iocoder.dashboard.modules.infra.controller.errorcode.vo.InfErrorCodeUpdateReqVO; +import cn.iocoder.dashboard.modules.infra.dal.dataobject.errorcode.InfErrorCodeDO; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +import java.util.List; + +/** + * 错误码 Convert + * + * @author 芋道源码 + */ +@Mapper +public interface InfErrorCodeConvert { + + InfErrorCodeConvert INSTANCE = Mappers.getMapper(InfErrorCodeConvert.class); + + InfErrorCodeDO convert(InfErrorCodeCreateReqVO bean); + + InfErrorCodeDO convert(InfErrorCodeUpdateReqVO bean); + + InfErrorCodeRespVO convert(InfErrorCodeDO bean); + + List convertList(List list); + + PageResult convertPage(PageResult page); + + List convertList02(List list); + + InfErrorCodeDO convert(ErrorCodeAutoGenerateReqDTO bean); + + List convertList03(List list); + +} diff --git a/src/main/java/cn/iocoder/dashboard/modules/infra/convert/errorcode/SysErrorCodeConvert.java b/src/main/java/cn/iocoder/dashboard/modules/infra/convert/errorcode/SysErrorCodeConvert.java deleted file mode 100644 index aeb359f75..000000000 --- a/src/main/java/cn/iocoder/dashboard/modules/infra/convert/errorcode/SysErrorCodeConvert.java +++ /dev/null @@ -1,38 +0,0 @@ -package cn.iocoder.dashboard.modules.infra.convert.errorcode; - -import cn.iocoder.dashboard.common.pojo.PageResult; -import cn.iocoder.dashboard.framework.errorcode.core.dto.ErrorCodeAutoGenerateReqDTO; -import cn.iocoder.dashboard.framework.errorcode.core.dto.ErrorCodeRespDTO; -import cn.iocoder.dashboard.modules.system.controller.errorcode.dto.ErrorCodeCreateDTO; -import cn.iocoder.dashboard.modules.system.controller.errorcode.dto.ErrorCodeUpdateDTO; -import cn.iocoder.dashboard.modules.system.controller.errorcode.vo.ErrorCodeVO; -import cn.iocoder.dashboard.modules.infra.dal.dataobject.errorcode.InfErrorCodeDO; -import com.baomidou.mybatisplus.core.metadata.IPage; -import org.mapstruct.Mapper; -import org.mapstruct.Mapping; -import org.mapstruct.ReportingPolicy; -import org.mapstruct.factory.Mappers; - -import java.util.List; - -@Mapper(unmappedSourcePolicy = ReportingPolicy.IGNORE) -public interface SysErrorCodeConvert { - - SysErrorCodeConvert INSTANCE = Mappers.getMapper(SysErrorCodeConvert.class); - - ErrorCodeVO convert (InfErrorCodeDO bean); - - List convertList(List list); - - @Mapping(source = "records", target = "list") - PageResult convertPage(IPage page); - - InfErrorCodeDO convert (ErrorCodeCreateDTO bean); - - InfErrorCodeDO convert (ErrorCodeUpdateDTO bean); - - InfErrorCodeDO convert(ErrorCodeAutoGenerateReqDTO bean); - - List convertList02(List list); - -} diff --git a/src/main/java/cn/iocoder/dashboard/modules/infra/dal/dataobject/errorcode/InfErrorCodeDO.java b/src/main/java/cn/iocoder/dashboard/modules/infra/dal/dataobject/errorcode/InfErrorCodeDO.java index 279018b7f..9d9e3526b 100644 --- a/src/main/java/cn/iocoder/dashboard/modules/infra/dal/dataobject/errorcode/InfErrorCodeDO.java +++ b/src/main/java/cn/iocoder/dashboard/modules/infra/dal/dataobject/errorcode/InfErrorCodeDO.java @@ -1,7 +1,7 @@ package cn.iocoder.dashboard.modules.infra.dal.dataobject.errorcode; import cn.iocoder.dashboard.framework.mybatis.core.dataobject.BaseDO; -import cn.iocoder.dashboard.modules.system.enums.errorcode.SysErrorCodeTypeEnum; +import cn.iocoder.dashboard.modules.infra.enums.errorcode.InfErrorCodeTypeEnum; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; @@ -27,7 +27,7 @@ public class InfErrorCodeDO extends BaseDO { /** * 错误码类型 * - * 枚举 {@link SysErrorCodeTypeEnum} + * 枚举 {@link InfErrorCodeTypeEnum} */ private Integer type; /** diff --git a/src/main/java/cn/iocoder/dashboard/modules/infra/dal/mysql/errorcode/InfErrorCodeMapper.java b/src/main/java/cn/iocoder/dashboard/modules/infra/dal/mysql/errorcode/InfErrorCodeMapper.java index 92cc5b571..1e19fa488 100644 --- a/src/main/java/cn/iocoder/dashboard/modules/infra/dal/mysql/errorcode/InfErrorCodeMapper.java +++ b/src/main/java/cn/iocoder/dashboard/modules/infra/dal/mysql/errorcode/InfErrorCodeMapper.java @@ -1,12 +1,12 @@ package cn.iocoder.dashboard.modules.infra.dal.mysql.errorcode; +import cn.iocoder.dashboard.common.pojo.PageResult; +import cn.iocoder.dashboard.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.dashboard.framework.mybatis.core.query.QueryWrapperX; -import cn.iocoder.dashboard.modules.system.controller.errorcode.dto.ErrorCodePageDTO; +import cn.iocoder.dashboard.modules.infra.controller.errorcode.vo.InfErrorCodeExportReqVO; +import cn.iocoder.dashboard.modules.infra.controller.errorcode.vo.InfErrorCodePageReqVO; import cn.iocoder.dashboard.modules.infra.dal.dataobject.errorcode.InfErrorCodeDO; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.apache.ibatis.annotations.Mapper; import java.util.Collection; @@ -14,12 +14,26 @@ import java.util.Date; import java.util.List; @Mapper -public interface InfErrorCodeMapper extends BaseMapper { +public interface InfErrorCodeMapper extends BaseMapperX { - default IPage selectPage(ErrorCodePageDTO pageDTO) { - return selectPage(new Page<>(pageDTO.getPageNo(), pageDTO.getPageSize()), - new QueryWrapperX().likeIfPresent("`group`", pageDTO.getGroup()) - .eqIfPresent("code", pageDTO.getCode()).likeIfPresent("message", pageDTO.getMessage())); + default PageResult selectPage(InfErrorCodePageReqVO reqVO) { + return selectPage(reqVO, new QueryWrapperX() + .eqIfPresent("type", reqVO.getType()) + .likeIfPresent("application_name", reqVO.getApplicationName()) + .eqIfPresent("code", reqVO.getCode()) + .likeIfPresent("message", reqVO.getMessage()) + .betweenIfPresent("create_time", reqVO.getBeginCreateTime(), reqVO.getEndCreateTime()) + .orderByAsc("application_name", "code")); + } + + default List selectList(InfErrorCodeExportReqVO reqVO) { + return selectList(new QueryWrapperX() + .eqIfPresent("type", reqVO.getType()) + .likeIfPresent("application_name", reqVO.getApplicationName()) + .eqIfPresent("code", reqVO.getCode()) + .likeIfPresent("message", reqVO.getMessage()) + .betweenIfPresent("create_time", reqVO.getBeginCreateTime(), reqVO.getEndCreateTime()) + .orderByAsc("application_name", "code")); } default List selectListByCodes(Collection codes) { diff --git a/src/main/java/cn/iocoder/dashboard/modules/infra/enums/InfErrorCodeConstants.java b/src/main/java/cn/iocoder/dashboard/modules/infra/enums/InfErrorCodeConstants.java index e02119b6c..490c9f95c 100644 --- a/src/main/java/cn/iocoder/dashboard/modules/infra/enums/InfErrorCodeConstants.java +++ b/src/main/java/cn/iocoder/dashboard/modules/infra/enums/InfErrorCodeConstants.java @@ -30,4 +30,9 @@ public interface InfErrorCodeConstants { // ========== 文件 1001003000 ========== ErrorCode FILE_NOT_EXISTS = new ErrorCode(1001003000, "文件不存在"); + // ========== 错误码模块 1001004000 ========== + ErrorCode ERROR_CODE_NOT_EXISTS = new ErrorCode(1001004000, "错误码不存在"); + ErrorCode ERROR_CODE_DUPLICATE = new ErrorCode(1001004001, "已经存在编码为【{}}】的错误码"); + ErrorCode ERROR_CAN_NOT_UPDATE_SYSTEM_TYPE_ERROR = new ErrorCode(1001004002, "不能修改类型为系统内置的错误码"); + } diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/enums/errorcode/SysErrorCodeTypeEnum.java b/src/main/java/cn/iocoder/dashboard/modules/infra/enums/errorcode/InfErrorCodeTypeEnum.java similarity index 75% rename from src/main/java/cn/iocoder/dashboard/modules/system/enums/errorcode/SysErrorCodeTypeEnum.java rename to src/main/java/cn/iocoder/dashboard/modules/infra/enums/errorcode/InfErrorCodeTypeEnum.java index be59a23ea..b8d7d79de 100644 --- a/src/main/java/cn/iocoder/dashboard/modules/system/enums/errorcode/SysErrorCodeTypeEnum.java +++ b/src/main/java/cn/iocoder/dashboard/modules/infra/enums/errorcode/InfErrorCodeTypeEnum.java @@ -1,4 +1,4 @@ -package cn.iocoder.dashboard.modules.system.enums.errorcode; +package cn.iocoder.dashboard.modules.infra.enums.errorcode; import cn.iocoder.dashboard.common.core.IntArrayValuable; import lombok.AllArgsConstructor; @@ -13,7 +13,7 @@ import java.util.Arrays; */ @AllArgsConstructor @Getter -public enum SysErrorCodeTypeEnum implements IntArrayValuable { +public enum InfErrorCodeTypeEnum implements IntArrayValuable { /** * 自动生成 @@ -24,7 +24,7 @@ public enum SysErrorCodeTypeEnum implements IntArrayValuable { */ MANUAL_OPERATION(2); - public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(SysErrorCodeTypeEnum::getType).toArray(); + public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(InfErrorCodeTypeEnum::getType).toArray(); /** * 类型 diff --git a/src/main/java/cn/iocoder/dashboard/modules/infra/service/errorcode/InfErrorCodeService.java b/src/main/java/cn/iocoder/dashboard/modules/infra/service/errorcode/InfErrorCodeService.java new file mode 100644 index 000000000..8035c9929 --- /dev/null +++ b/src/main/java/cn/iocoder/dashboard/modules/infra/service/errorcode/InfErrorCodeService.java @@ -0,0 +1,67 @@ +package cn.iocoder.dashboard.modules.infra.service.errorcode; + +import cn.iocoder.dashboard.common.pojo.PageResult; +import cn.iocoder.dashboard.framework.errorcode.core.service.ErrorCodeFrameworkService; +import cn.iocoder.dashboard.modules.infra.controller.errorcode.vo.InfErrorCodeCreateReqVO; +import cn.iocoder.dashboard.modules.infra.controller.errorcode.vo.InfErrorCodeExportReqVO; +import cn.iocoder.dashboard.modules.infra.controller.errorcode.vo.InfErrorCodePageReqVO; +import cn.iocoder.dashboard.modules.infra.controller.errorcode.vo.InfErrorCodeUpdateReqVO; +import cn.iocoder.dashboard.modules.infra.dal.dataobject.errorcode.InfErrorCodeDO; + +import javax.validation.Valid; +import java.util.List; + +/** + * 错误码 Service 接口 + * + * @author 芋道源码 + */ +public interface InfErrorCodeService extends ErrorCodeFrameworkService { + + /** + * 创建错误码 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createErrorCode(@Valid InfErrorCodeCreateReqVO createReqVO); + + /** + * 更新错误码 + * + * @param updateReqVO 更新信息 + */ + void updateErrorCode(@Valid InfErrorCodeUpdateReqVO updateReqVO); + + /** + * 删除错误码 + * + * @param id 编号 + */ + void deleteErrorCode(Long id); + + /** + * 获得错误码 + * + * @param id 编号 + * @return 错误码 + */ + InfErrorCodeDO getErrorCode(Long id); + + /** + * 获得错误码分页 + * + * @param pageReqVO 分页查询 + * @return 错误码分页 + */ + PageResult getErrorCodePage(InfErrorCodePageReqVO pageReqVO); + + /** + * 获得错误码列表, 用于 Excel 导出 + * + * @param exportReqVO 查询条件 + * @return 错误码列表 + */ + List getErrorCodeList(InfErrorCodeExportReqVO exportReqVO); + +} diff --git a/src/main/java/cn/iocoder/dashboard/modules/infra/service/errorcode/impl/InfErrorCodeServiceImpl.java b/src/main/java/cn/iocoder/dashboard/modules/infra/service/errorcode/impl/InfErrorCodeServiceImpl.java new file mode 100644 index 000000000..9b4cb6fd6 --- /dev/null +++ b/src/main/java/cn/iocoder/dashboard/modules/infra/service/errorcode/impl/InfErrorCodeServiceImpl.java @@ -0,0 +1,173 @@ +package cn.iocoder.dashboard.modules.infra.service.errorcode.impl; + +import cn.hutool.core.collection.CollUtil; +import cn.iocoder.dashboard.common.pojo.PageResult; +import cn.iocoder.dashboard.framework.errorcode.core.dto.ErrorCodeAutoGenerateReqDTO; +import cn.iocoder.dashboard.framework.errorcode.core.dto.ErrorCodeRespDTO; +import cn.iocoder.dashboard.modules.infra.controller.errorcode.vo.InfErrorCodeCreateReqVO; +import cn.iocoder.dashboard.modules.infra.controller.errorcode.vo.InfErrorCodeExportReqVO; +import cn.iocoder.dashboard.modules.infra.controller.errorcode.vo.InfErrorCodePageReqVO; +import cn.iocoder.dashboard.modules.infra.controller.errorcode.vo.InfErrorCodeUpdateReqVO; +import cn.iocoder.dashboard.modules.infra.convert.errorcode.InfErrorCodeConvert; +import cn.iocoder.dashboard.modules.infra.dal.dataobject.errorcode.InfErrorCodeDO; +import cn.iocoder.dashboard.modules.infra.dal.mysql.errorcode.InfErrorCodeMapper; +import cn.iocoder.dashboard.modules.infra.enums.errorcode.InfErrorCodeTypeEnum; +import cn.iocoder.dashboard.modules.infra.service.errorcode.InfErrorCodeService; +import com.google.common.annotations.VisibleForTesting; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.validation.annotation.Validated; + +import javax.annotation.Resource; +import java.util.Date; +import java.util.List; +import java.util.Map; + +import static cn.iocoder.dashboard.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.dashboard.modules.infra.enums.InfErrorCodeConstants.ERROR_CODE_DUPLICATE; +import static cn.iocoder.dashboard.modules.infra.enums.InfErrorCodeConstants.ERROR_CODE_NOT_EXISTS; +import static cn.iocoder.dashboard.util.collection.CollectionUtils.convertMap; +import static cn.iocoder.dashboard.util.collection.CollectionUtils.convertSet; + +/** + * 错误码 Service 实现类 + */ +@Service +@Validated +@Slf4j +public class InfErrorCodeServiceImpl implements InfErrorCodeService { + + @Resource + private InfErrorCodeMapper errorCodeMapper; + + @Override + public Long createErrorCode(InfErrorCodeCreateReqVO createReqVO) { + // 校验 code 重复 + validateCodeDuplicate(createReqVO.getCode(), null); + + // 插入 + InfErrorCodeDO errorCode = InfErrorCodeConvert.INSTANCE.convert(createReqVO) + .setType(InfErrorCodeTypeEnum.MANUAL_OPERATION.getType()); + errorCodeMapper.insert(errorCode); + // 返回 + return errorCode.getId(); + } + + @Override + public void updateErrorCode(InfErrorCodeUpdateReqVO updateReqVO) { + // 校验存在 + this.validateErrorCodeExists(updateReqVO.getId()); + // 校验 code 重复 + validateCodeDuplicate(updateReqVO.getCode(), updateReqVO.getId()); + + // 更新 + InfErrorCodeDO updateObj = InfErrorCodeConvert.INSTANCE.convert(updateReqVO) + .setType(InfErrorCodeTypeEnum.MANUAL_OPERATION.getType()); + errorCodeMapper.updateById(updateObj); + } + + @Override + public void deleteErrorCode(Long id) { + // 校验存在 + this.validateErrorCodeExists(id); + // 删除 + errorCodeMapper.deleteById(id); + } + + /** + * 校验错误码的唯一字段是否重复 + * + * 是否存在相同编码的错误码 + * + * @param code 错误码编码 + * @param id 错误码编号 + */ + @VisibleForTesting + public void validateCodeDuplicate(Integer code, Long id) { + InfErrorCodeDO errorCodeDO = errorCodeMapper.selectByCode(code); + if (errorCodeDO == null) { + return; + } + // 如果 id 为空,说明不用比较是否为相同 id 的错误码 + if (id == null) { + throw exception(ERROR_CODE_DUPLICATE); + } + if (!errorCodeDO.getId().equals(id)) { + throw exception(ERROR_CODE_DUPLICATE); + } + } + + @VisibleForTesting + public void validateErrorCodeExists(Long id) { + if (errorCodeMapper.selectById(id) == null) { + throw exception(ERROR_CODE_NOT_EXISTS); + } + } + + @Override + public InfErrorCodeDO getErrorCode(Long id) { + return errorCodeMapper.selectById(id); + } + + @Override + public PageResult getErrorCodePage(InfErrorCodePageReqVO pageReqVO) { + return errorCodeMapper.selectPage(pageReqVO); + } + + @Override + public List getErrorCodeList(InfErrorCodeExportReqVO exportReqVO) { + return errorCodeMapper.selectList(exportReqVO); + } + + @Override + @Transactional + public void autoGenerateErrorCodes(List autoGenerateDTOs) { + if (CollUtil.isEmpty(autoGenerateDTOs)) { + return; + } + // 获得错误码 + List errorCodeDOs = errorCodeMapper.selectListByCodes( + convertSet(autoGenerateDTOs, ErrorCodeAutoGenerateReqDTO::getCode)); + Map errorCodeDOMap = convertMap(errorCodeDOs, InfErrorCodeDO::getCode); + + // 遍历 autoGenerateBOs 数组,逐个插入或更新。考虑到每次量级不大,就不走批量了 + autoGenerateDTOs.forEach(autoGenerateDTO -> { + InfErrorCodeDO errorCodeDO = errorCodeDOMap.get(autoGenerateDTO.getCode()); + // 不存在,则进行新增 + if (errorCodeDO == null) { + errorCodeDO = InfErrorCodeConvert.INSTANCE.convert(autoGenerateDTO) + .setType(InfErrorCodeTypeEnum.AUTO_GENERATION.getType()); + errorCodeMapper.insert(errorCodeDO); + return; + } + // 存在,则进行更新。更新有三个前置条件: + // 条件 1. 只更新自动生成的错误码,即 Type 为 ErrorCodeTypeEnum.AUTO_GENERATION + if (!InfErrorCodeTypeEnum.AUTO_GENERATION.getType().equals(errorCodeDO.getType())) { + return; + } + // 条件 2. 分组 group 必须匹配,避免存在错误码冲突的情况 + if (!autoGenerateDTO.getApplicationName().equals(errorCodeDO.getApplicationName())) { + log.error("[autoGenerateErrorCodes][自动创建({}/{}) 错误码失败,数据库中已经存在({}/{})]", + autoGenerateDTO.getCode(), autoGenerateDTO.getApplicationName(), + errorCodeDO.getCode(), errorCodeDO.getApplicationName()); + return; + } + // 条件 3. 错误提示语存在差异 + if (autoGenerateDTO.getMessage().equals(errorCodeDO.getMessage())) { + return; + } + // 最终匹配,进行更新 + errorCodeMapper.updateById(new InfErrorCodeDO().setId(errorCodeDO.getId()).setMessage(autoGenerateDTO.getMessage())); + }); + } + + @Override + public List getErrorCodeList(String applicationName, Date minUpdateTime) { + List errorCodeDOs = errorCodeMapper.selectListByApplicationNameAndUpdateTimeGt( + applicationName, minUpdateTime); + return InfErrorCodeConvert.INSTANCE.convertList03(errorCodeDOs); + } + +} + diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/ErrorCodeController.http b/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/ErrorCodeController.http deleted file mode 100644 index 6c6ffa80a..000000000 --- a/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/ErrorCodeController.http +++ /dev/null @@ -1,42 +0,0 @@ -### list-group -GET http://localhost:48080/api/system/error-code/list-group -Authorization: Bearer {{token}} -Content-Type: application/x-www-form-urlencoded - -group=test&minUpdateTime=2021-03-14 14:37:47 - - - -### -GET http://localhost:48080/api/system/error-code/query -Authorization: Bearer {{token}} -Content-Type: application/x-www-form-urlencoded - -errorCodeId=350 - -### -POST http://localhost:48080/api/system/error-code/generate -Authorization: Bearer {{token}} - -[ -{ - "code": 202, - "message": "成功1", - "group": "test1" -} -] - -### -POST http://localhost:48080/api/system/error-code/create -Authorization: Bearer {{token}} -Content-Type:application/json - -{ - "code": 200, - "message": "成功", - "group": "test", - "type": 1 -} - - - diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/ErrorCodeController.java b/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/ErrorCodeController.java deleted file mode 100644 index df7b26ad3..000000000 --- a/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/ErrorCodeController.java +++ /dev/null @@ -1,99 +0,0 @@ -package cn.iocoder.dashboard.modules.system.controller.errorcode; - -import cn.iocoder.dashboard.common.pojo.CommonResult; -import cn.iocoder.dashboard.common.pojo.PageResult; -import cn.iocoder.dashboard.modules.system.controller.errorcode.dto.ErrorCodeCreateDTO; -import cn.iocoder.dashboard.modules.system.controller.errorcode.dto.ErrorCodePageDTO; -import cn.iocoder.dashboard.modules.system.controller.errorcode.dto.ErrorCodeUpdateDTO; -import cn.iocoder.dashboard.modules.system.controller.errorcode.vo.ErrorCodeVO; -import cn.iocoder.dashboard.modules.system.service.errorcode.impl.ErrorCodeServiceImpl; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import org.springframework.web.bind.annotation.*; - -import javax.annotation.Resource; -import java.util.List; - -import static cn.iocoder.dashboard.common.pojo.CommonResult.success; - -@Api(tags = "错误码") -@RestController -@RequestMapping("/system/error-code") -public class ErrorCodeController { - - @Resource - private ErrorCodeServiceImpl errorCodeService; - - /** - * 创建错误码 - * - * @param createDTO 创建错误码 DTO - * @return 错误码编号 - */ - @ApiOperation("创建错误码") - @PostMapping("/create") - public CommonResult createErrorCode(@RequestBody ErrorCodeCreateDTO createDTO) { - return success(errorCodeService.createErrorCode(createDTO).getId()); - } - - /** - * 更新错误码 - * - * @param updateDTO 更新错误码 DTO - */ - @ApiOperation("更新错误码") - @PatchMapping("/update") - public CommonResult updateErrorCode(@RequestBody ErrorCodeUpdateDTO updateDTO) { - errorCodeService.updateErrorCode(updateDTO); - return success(Boolean.TRUE); - } - - /** - * 删除错误码 - * - * @param errorCodeId 错误码编号 - */ - @ApiOperation("删除错误码") - @DeleteMapping("delete") - public CommonResult deleteErrorCode(Integer errorCodeId) { - errorCodeService.deleteErrorCode(errorCodeId); - return success(Boolean.TRUE); - } - - /** - * 获得错误码 - * - * @param errorCodeId 错误码编号 - * @return 错误码 - */ - @ApiOperation("获取错误码") - @GetMapping("/query") - public CommonResult getErrorCode(Integer errorCodeId) { - return success(errorCodeService.getErrorCode(errorCodeId)); - } - - /** - * 获得错误码列表 - * - * @param errorCodeIds 错误码编号列表 - * @return 错误码列表 - */ - @ApiOperation("获取错误码列表") - @GetMapping("/query-ids") - public CommonResult> listErrorCodes(@RequestBody List errorCodeIds) { - return success(errorCodeService.listErrorCodes(errorCodeIds)); - } - - /** - * 获得错误码分页 - * - * @param pageDTO 错误码分页查询 - * @return 错误码分页结果 - */ - @ApiOperation("获取错误码分页列表") - @GetMapping("/page") - public CommonResult> pageErrorCode(ErrorCodePageDTO pageDTO) { - return success(errorCodeService.pageErrorCode(pageDTO)); - } - -} diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/dto/ErrorCodeCreateDTO.java b/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/dto/ErrorCodeCreateDTO.java deleted file mode 100644 index 4eb5c1fcd..000000000 --- a/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/dto/ErrorCodeCreateDTO.java +++ /dev/null @@ -1,27 +0,0 @@ -package cn.iocoder.dashboard.modules.system.controller.errorcode.dto; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import javax.validation.constraints.NotEmpty; -import javax.validation.constraints.NotNull; - -@ApiModel("错误码创建 DTO") -@Data -public class ErrorCodeCreateDTO { - - @ApiModelProperty(value = "错误码编码", required = true, example = "10086") - @NotNull(message = "错误码编码不能为空") - private Integer code; - @ApiModelProperty(value = "错误码错误提示", required = true, example = "艿艿长的丑") - @NotEmpty(message = "错误码错误提示不能为空") - private String message; - @ApiModelProperty(value = "错误码分组", required = true, example = "user-service") - @NotEmpty(message = "错误码分组不能为空") - private String group; - @ApiModelProperty(value = "错误码备注", example = "我就是一个备注") - private String memo; - -} - diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/dto/ErrorCodePageDTO.java b/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/dto/ErrorCodePageDTO.java deleted file mode 100644 index 6971b0720..000000000 --- a/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/dto/ErrorCodePageDTO.java +++ /dev/null @@ -1,24 +0,0 @@ -package cn.iocoder.dashboard.modules.system.controller.errorcode.dto; - -import cn.iocoder.dashboard.common.pojo.PageParam; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import lombok.EqualsAndHashCode; - -/** - * 错误码分页 DTO - */ -@ApiModel("错误码分页 DTO") -@Data -@EqualsAndHashCode(callSuper = true) -public class ErrorCodePageDTO extends PageParam { - - @ApiModelProperty(value = "错误码编码", required = true) - private Integer code; - @ApiModelProperty(value = "错误码错误提示", required = true) - private String message; - @ApiModelProperty(value = "错误码分组", required = true) - private String group; - -} diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/dto/ErrorCodeUpdateDTO.java b/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/dto/ErrorCodeUpdateDTO.java deleted file mode 100644 index 1833a18ba..000000000 --- a/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/dto/ErrorCodeUpdateDTO.java +++ /dev/null @@ -1,30 +0,0 @@ -package cn.iocoder.dashboard.modules.system.controller.errorcode.dto; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import javax.validation.constraints.NotEmpty; -import javax.validation.constraints.NotNull; - -@ApiModel("错误码更新 DTO") -@Data -public class ErrorCodeUpdateDTO { - - @ApiModelProperty(value = "错误码编号", required = true, example = "1") - @NotNull(message = "错误码编号不能为空") - private Integer id; - @ApiModelProperty(value = "错误码编码", required = true, example = "10086") - @NotNull(message = "错误码编码不能为空") - private Integer code; - @ApiModelProperty(value = "错误码错误提示", required = true, example = "艿艿长的丑") - @NotEmpty(message = "错误码错误提示不能为空") - private String message; - @ApiModelProperty(value = "错误码分组", required = true, example = "user-service") - @NotEmpty(message = "错误码分组不能为空") - private String group; - @ApiModelProperty(value = "错误码备注", example = "我就是一个备注") - private String memo; - -} - diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/vo/ErrorCodeVO.java b/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/vo/ErrorCodeVO.java deleted file mode 100644 index b0b17626b..000000000 --- a/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/vo/ErrorCodeVO.java +++ /dev/null @@ -1,35 +0,0 @@ -package cn.iocoder.dashboard.modules.system.controller.errorcode.vo; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import lombok.experimental.Accessors; - -import java.io.Serializable; -import java.util.Date; - -/** - * 错误码 - */ -@ApiModel("错误码 VO") -@Data -public class ErrorCodeVO { - - @ApiModelProperty(value = "错误码编号", required = true, example = "1") - private Integer id; - @ApiModelProperty(value = "错误码编码", required = true, example = "10086") - private Integer code; - @ApiModelProperty(value = "错误码错误提示", required = true, example = "艿艿长的丑") - private String message; - @ApiModelProperty(value = "错误码类型", required = true, notes = "见 ErrorCodeTypeEnum 枚举", example = "1") - private Integer type; - @ApiModelProperty(value = "错误码分组", required = true, example = "user-service") - private String group; - @ApiModelProperty(value = "错误码备注", example = "我就是一个备注") - private String memo; - @ApiModelProperty(value = "创建时间", required = true) - private Date createTime; - @ApiModelProperty(value = "更新时间", required = false) - private Date updateTime; - -} diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/enums/SysErrorCodeConstants.java b/src/main/java/cn/iocoder/dashboard/modules/system/enums/SysErrorCodeConstants.java index d73dc7d98..b89581430 100644 --- a/src/main/java/cn/iocoder/dashboard/modules/system/enums/SysErrorCodeConstants.java +++ b/src/main/java/cn/iocoder/dashboard/modules/system/enums/SysErrorCodeConstants.java @@ -91,10 +91,4 @@ public interface SysErrorCodeConstants { ErrorCode SMS_SEND_MOBILE_NOT_EXISTS = new ErrorCode(1002012000, "手机号不存在"); ErrorCode SMS_SEND_MOBILE_TEMPLATE_PARAM_MISS = new ErrorCode(1002012001, "模板参数({})缺失"); - - // ========== 错误码模块 1002009000 ========== - ErrorCode ERROR_CODE_NOT_EXISTS = new ErrorCode(1002009000, "错误码不存在"); - ErrorCode ERROR_CODE_DUPLICATE = new ErrorCode(1002009001, "已经存在编码为【{}}】的错误码"); - ErrorCode ERROR_CAN_NOT_UPDATE_SYSTEM_TYPE_ERROR = new ErrorCode(1002004003, "不能修改类型为系统内置的错误码"); - } diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/enums/dict/SysDictTypeEnum.java b/src/main/java/cn/iocoder/dashboard/modules/system/enums/dict/SysDictTypeEnum.java index bb291ac24..323cf652e 100644 --- a/src/main/java/cn/iocoder/dashboard/modules/system/enums/dict/SysDictTypeEnum.java +++ b/src/main/java/cn/iocoder/dashboard/modules/system/enums/dict/SysDictTypeEnum.java @@ -27,7 +27,7 @@ public enum SysDictTypeEnum { INF_JOB_STATUS("inf_job_status"), // 定时任务状态的枚举 INF_JOB_LOG_STATUS("inf_job_log_status"), // 定时任务日志状态的枚举 INF_API_ERROR_LOG_PROCESS_STATUS("inf_api_error_log_process_status"), // API 错误日志的处理状态的枚举 - + INF_ERROR_CODE_TYPE("inf_error_code_type"), // 错误码的类型枚举 ; diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/SysErrorCodeService.java b/src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/SysErrorCodeService.java deleted file mode 100644 index ef4a1ed49..000000000 --- a/src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/SysErrorCodeService.java +++ /dev/null @@ -1,12 +0,0 @@ -package cn.iocoder.dashboard.modules.system.service.errorcode; - -import cn.iocoder.dashboard.framework.errorcode.core.service.ErrorCodeFrameworkService; - -/** - * 错误码 Service 接口 - * - * @author 芋道源码 - */ -public interface SysErrorCodeService extends ErrorCodeFrameworkService { - -} diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/impl/ErrorCodeServiceImpl.java b/src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/impl/ErrorCodeServiceImpl.java deleted file mode 100644 index 0970be816..000000000 --- a/src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/impl/ErrorCodeServiceImpl.java +++ /dev/null @@ -1,194 +0,0 @@ -package cn.iocoder.dashboard.modules.system.service.errorcode.impl; - -import cn.hutool.core.collection.CollUtil; -import cn.iocoder.dashboard.common.exception.util.ServiceExceptionUtil; -import cn.iocoder.dashboard.common.pojo.PageResult; -import cn.iocoder.dashboard.framework.errorcode.core.dto.ErrorCodeAutoGenerateReqDTO; -import cn.iocoder.dashboard.framework.errorcode.core.dto.ErrorCodeRespDTO; -import cn.iocoder.dashboard.modules.system.controller.errorcode.dto.ErrorCodeCreateDTO; -import cn.iocoder.dashboard.modules.system.controller.errorcode.dto.ErrorCodePageDTO; -import cn.iocoder.dashboard.modules.system.controller.errorcode.dto.ErrorCodeUpdateDTO; -import cn.iocoder.dashboard.modules.system.controller.errorcode.vo.ErrorCodeVO; -import cn.iocoder.dashboard.modules.infra.convert.errorcode.SysErrorCodeConvert; -import cn.iocoder.dashboard.modules.infra.dal.dataobject.errorcode.InfErrorCodeDO; -import cn.iocoder.dashboard.modules.infra.dal.mysql.errorcode.InfErrorCodeMapper; -import cn.iocoder.dashboard.modules.system.enums.errorcode.SysErrorCodeTypeEnum; -import cn.iocoder.dashboard.modules.system.service.errorcode.SysErrorCodeService; -import com.baomidou.mybatisplus.core.metadata.IPage; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; -import org.springframework.validation.annotation.Validated; - -import javax.annotation.Resource; -import java.util.Date; -import java.util.List; -import java.util.Map; - -import static cn.iocoder.dashboard.modules.system.enums.SysErrorCodeConstants.ERROR_CODE_DUPLICATE; -import static cn.iocoder.dashboard.modules.system.enums.SysErrorCodeConstants.ERROR_CODE_NOT_EXISTS; -import static cn.iocoder.dashboard.util.collection.CollectionUtils.convertMap; -import static cn.iocoder.dashboard.util.collection.CollectionUtils.convertSet; - -/** - * 错误码 Service 实现类 - */ -@Service -@Validated -@Slf4j -public class ErrorCodeServiceImpl implements SysErrorCodeService { - - @Resource - private InfErrorCodeMapper errorCodeMapper; - - /** - * 创建错误码 - * - * @param createDTO 创建错误码 DTO - * @return 错误码 - */ - public ErrorCodeVO createErrorCode(ErrorCodeCreateDTO createDTO) { - checkDuplicateErrorCode(createDTO.getCode(), null); - // 插入到数据库 - InfErrorCodeDO errorCodeDO = SysErrorCodeConvert.INSTANCE.convert(createDTO); - errorCodeMapper.insert(errorCodeDO); - // 返回 - return SysErrorCodeConvert.INSTANCE.convert(errorCodeDO); - } - - /** - * 更新错误码 - * - * @param updateDTO 更新错误码 DTO - */ - public void updateErrorCode(ErrorCodeUpdateDTO updateDTO) { - checkDuplicateErrorCode(updateDTO.getCode(), updateDTO.getId()); - // 校验更新的错误码是否存在 - if (errorCodeMapper.selectById(updateDTO.getId()) == null) { - throw ServiceExceptionUtil.exception(ERROR_CODE_NOT_EXISTS); - } - // 更新到数据库 - InfErrorCodeDO updateObject = SysErrorCodeConvert.INSTANCE.convert(updateDTO); - errorCodeMapper.updateById(updateObject); - } - - /** - * 删除错误码 - * - * @param errorCodeId 错误码编号 - */ - public void deleteErrorCode(Integer errorCodeId) { - // 校验删除的错误码是否存在 - if (errorCodeMapper.selectById(errorCodeId) == null) { - throw ServiceExceptionUtil.exception(ERROR_CODE_NOT_EXISTS); - } - // 标记删除 - errorCodeMapper.deleteById(errorCodeId); - } - - /** - * 获得错误码 - * - * @param errorCodeId 错误码编号 - * @return 错误码 - */ - public ErrorCodeVO getErrorCode(Integer errorCodeId) { - InfErrorCodeDO errorCodeDO = errorCodeMapper.selectById(errorCodeId); - return SysErrorCodeConvert.INSTANCE.convert(errorCodeDO); - } - - /** - * 获得错误码列表 - * - * @param errorCodeIds 错误码编号列表 - * @return 错误码列表 - */ - public List listErrorCodes(List errorCodeIds) { - List errorCodeDOs = errorCodeMapper.selectBatchIds(errorCodeIds); - return SysErrorCodeConvert.INSTANCE.convertList(errorCodeDOs); - } - - /** - * 获得错误码分页 - * - * @param pageDTO 错误码分页查询 - * @return 错误码分页结果 - */ - public PageResult pageErrorCode(ErrorCodePageDTO pageDTO) { - IPage errorCodeDOPage = errorCodeMapper.selectPage(pageDTO); - return SysErrorCodeConvert.INSTANCE.convertPage(errorCodeDOPage); - } - - /** - * 校验错误码的唯一字段是否重复 - * - * 是否存在相同编码的错误码 - * - * @param code 错误码编码 - * @param id 错误码编号 - */ - private void checkDuplicateErrorCode(Integer code, Integer id) { - InfErrorCodeDO errorCodeDO = errorCodeMapper.selectByCode(code); - if (errorCodeDO == null) { - return; - } - // 如果 id 为空,说明不用比较是否为相同 id 的错误码 - if (id == null) { - throw ServiceExceptionUtil.exception(ERROR_CODE_DUPLICATE); - } - if (!errorCodeDO.getId().equals(id)) { - throw ServiceExceptionUtil.exception(ERROR_CODE_DUPLICATE); - } - } - - @Override - @Transactional - public void autoGenerateErrorCodes(List autoGenerateDTOs) { - if (CollUtil.isEmpty(autoGenerateDTOs)) { - return; - } - // 获得错误码 - List errorCodeDOs = errorCodeMapper.selectListByCodes( - convertSet(autoGenerateDTOs, ErrorCodeAutoGenerateReqDTO::getCode)); - Map errorCodeDOMap = convertMap(errorCodeDOs, InfErrorCodeDO::getCode); - - // 遍历 autoGenerateBOs 数组,逐个插入或更新。考虑到每次量级不大,就不走批量了 - autoGenerateDTOs.forEach(autoGenerateDTO -> { - InfErrorCodeDO errorCodeDO = errorCodeDOMap.get(autoGenerateDTO.getCode()); - // 不存在,则进行新增 - if (errorCodeDO == null) { - errorCodeDO = SysErrorCodeConvert.INSTANCE.convert(autoGenerateDTO) - .setType(SysErrorCodeTypeEnum.AUTO_GENERATION.getType()); - errorCodeMapper.insert(errorCodeDO); - return; - } - // 存在,则进行更新。更新有三个前置条件: - // 条件 1. 只更新自动生成的错误码,即 Type 为 ErrorCodeTypeEnum.AUTO_GENERATION - if (!SysErrorCodeTypeEnum.AUTO_GENERATION.getType().equals(errorCodeDO.getType())) { - return; - } - // 条件 2. 分组 group 必须匹配,避免存在错误码冲突的情况 - if (!autoGenerateDTO.getApplicationName().equals(errorCodeDO.getApplicationName())) { - log.error("[autoGenerateErrorCodes][自动创建({}/{}) 错误码失败,数据库中已经存在({}/{})]", - autoGenerateDTO.getCode(), autoGenerateDTO.getApplicationName(), - errorCodeDO.getCode(), errorCodeDO.getApplicationName()); - return; - } - // 条件 3. 错误提示语存在差异 - if (autoGenerateDTO.getMessage().equals(errorCodeDO.getMessage())) { - return; - } - // 最终匹配,进行更新 - errorCodeMapper.updateById(new InfErrorCodeDO().setId(errorCodeDO.getId()).setMessage(autoGenerateDTO.getMessage())); - }); - } - - @Override - public List getErrorCodeList(String applicationName, Date minUpdateTime) { - List errorCodeDOs = errorCodeMapper.selectListByApplicationNameAndUpdateTimeGt( - applicationName, minUpdateTime); - return SysErrorCodeConvert.INSTANCE.convertList02(errorCodeDOs); - } - -} - diff --git a/src/main/resources/codegen/java/service/serviceImpl.vm b/src/main/resources/codegen/java/service/serviceImpl.vm index 17015798e..9da0f0e19 100644 --- a/src/main/resources/codegen/java/service/serviceImpl.vm +++ b/src/main/resources/codegen/java/service/serviceImpl.vm @@ -53,7 +53,7 @@ public class ${table.className}ServiceImpl implements ${table.className}Service public void delete${simpleClassName}(${primaryColumn.javaType} id) { // 校验存在 this.validate${simpleClassName}Exists(id); - // 更新 + // 删除 ${classNameVar}Mapper.deleteById(id); } diff --git a/src/test/java/cn/iocoder/dashboard/modules/infra/service/errorcode/InfErrorCodeServiceTest.java b/src/test/java/cn/iocoder/dashboard/modules/infra/service/errorcode/InfErrorCodeServiceTest.java new file mode 100644 index 000000000..1fe1b4712 --- /dev/null +++ b/src/test/java/cn/iocoder/dashboard/modules/infra/service/errorcode/InfErrorCodeServiceTest.java @@ -0,0 +1,200 @@ +package cn.iocoder.dashboard.modules.infra.service.errorcode; + +import cn.iocoder.dashboard.BaseDbUnitTest; +import cn.iocoder.dashboard.common.pojo.PageResult; +import cn.iocoder.dashboard.modules.infra.controller.errorcode.vo.InfErrorCodeCreateReqVO; +import cn.iocoder.dashboard.modules.infra.controller.errorcode.vo.InfErrorCodeExportReqVO; +import cn.iocoder.dashboard.modules.infra.controller.errorcode.vo.InfErrorCodePageReqVO; +import cn.iocoder.dashboard.modules.infra.controller.errorcode.vo.InfErrorCodeUpdateReqVO; +import cn.iocoder.dashboard.modules.infra.dal.dataobject.errorcode.InfErrorCodeDO; +import cn.iocoder.dashboard.modules.infra.dal.mysql.errorcode.InfErrorCodeMapper; +import cn.iocoder.dashboard.modules.infra.enums.config.InfConfigTypeEnum; +import cn.iocoder.dashboard.modules.infra.enums.errorcode.InfErrorCodeTypeEnum; +import cn.iocoder.dashboard.modules.infra.service.errorcode.impl.InfErrorCodeServiceImpl; +import cn.iocoder.dashboard.util.collection.ArrayUtils; +import cn.iocoder.dashboard.util.object.ObjectUtils; +import org.junit.jupiter.api.Test; +import org.springframework.context.annotation.Import; + +import javax.annotation.Resource; +import java.util.List; +import java.util.function.Consumer; + +import static cn.hutool.core.util.RandomUtil.randomEle; +import static cn.iocoder.dashboard.modules.infra.enums.InfErrorCodeConstants.ERROR_CODE_DUPLICATE; +import static cn.iocoder.dashboard.modules.infra.enums.InfErrorCodeConstants.ERROR_CODE_NOT_EXISTS; +import static cn.iocoder.dashboard.util.AssertUtils.assertPojoEquals; +import static cn.iocoder.dashboard.util.AssertUtils.assertServiceException; +import static cn.iocoder.dashboard.util.RandomUtils.*; +import static cn.iocoder.dashboard.util.date.DateUtils.buildTime; +import static org.junit.jupiter.api.Assertions.*; + +/** +* {@link InfErrorCodeServiceImpl} 的单元测试类 +* +* @author 芋道源码 +*/ +@Import(InfErrorCodeServiceImpl.class) +public class InfErrorCodeServiceTest extends BaseDbUnitTest { + + @Resource + private InfErrorCodeServiceImpl errorCodeService; + + @Resource + private InfErrorCodeMapper errorCodeMapper; + + @Test + public void testCreateErrorCode_success() { + // 准备参数 + InfErrorCodeCreateReqVO reqVO = randomPojo(InfErrorCodeCreateReqVO.class); + + // 调用 + Long errorCodeId = errorCodeService.createErrorCode(reqVO); + // 断言 + assertNotNull(errorCodeId); + // 校验记录的属性是否正确 + InfErrorCodeDO errorCode = errorCodeMapper.selectById(errorCodeId); + assertPojoEquals(reqVO, errorCode); + assertEquals(InfErrorCodeTypeEnum.MANUAL_OPERATION.getType(), errorCode.getType()); + } + + @Test + public void testUpdateErrorCode_success() { + // mock 数据 + InfErrorCodeDO dbErrorCode = randomInfErrorCodeDO(); + errorCodeMapper.insert(dbErrorCode);// @Sql: 先插入出一条存在的数据 + // 准备参数 + InfErrorCodeUpdateReqVO reqVO = randomPojo(InfErrorCodeUpdateReqVO.class, o -> { + o.setId(dbErrorCode.getId()); // 设置更新的 ID + }); + + // 调用 + errorCodeService.updateErrorCode(reqVO); + // 校验是否更新正确 + InfErrorCodeDO errorCode = errorCodeMapper.selectById(reqVO.getId()); // 获取最新的 + assertPojoEquals(reqVO, errorCode); + assertEquals(InfErrorCodeTypeEnum.MANUAL_OPERATION.getType(), errorCode.getType()); + } + + @Test + public void testDeleteErrorCode_success() { + // mock 数据 + InfErrorCodeDO dbErrorCode = randomInfErrorCodeDO(); + errorCodeMapper.insert(dbErrorCode);// @Sql: 先插入出一条存在的数据 + // 准备参数 + Long id = dbErrorCode.getId(); + + // 调用 + errorCodeService.deleteErrorCode(id); + // 校验数据不存在了 + assertNull(errorCodeMapper.selectById(id)); + } + + @Test + public void testGetErrorCodePage() { + // mock 数据 + InfErrorCodeDO dbErrorCode = initGetErrorCodePage(); + // 准备参数 + InfErrorCodePageReqVO reqVO = new InfErrorCodePageReqVO(); + reqVO.setType(InfErrorCodeTypeEnum.AUTO_GENERATION.getType()); + reqVO.setApplicationName("yudao"); + reqVO.setCode(1); + reqVO.setMessage("yu"); + reqVO.setBeginCreateTime(buildTime(2020, 11, 1)); + reqVO.setEndCreateTime(buildTime(2020, 11, 30)); + + // 调用 + PageResult pageResult = errorCodeService.getErrorCodePage(reqVO); + // 断言 + assertEquals(1, pageResult.getTotal()); + assertEquals(1, pageResult.getList().size()); + assertPojoEquals(dbErrorCode, pageResult.getList().get(0)); + } + + /** + * 初始化 getErrorCodePage 方法的测试数据 + */ + private InfErrorCodeDO initGetErrorCodePage() { + InfErrorCodeDO dbErrorCode = randomInfErrorCodeDO(o -> { // 等会查询到 + o.setType(InfErrorCodeTypeEnum.AUTO_GENERATION.getType()); + o.setApplicationName("yudaoyuanma"); + o.setCode(1); + o.setMessage("yudao"); + o.setCreateTime(buildTime(2020, 11, 11)); + }); + errorCodeMapper.insert(dbErrorCode); + // 测试 type 不匹配 + errorCodeMapper.insert(ObjectUtils.clone(dbErrorCode, o -> o.setType(InfErrorCodeTypeEnum.MANUAL_OPERATION.getType()))); + // 测试 applicationName 不匹配 + errorCodeMapper.insert(ObjectUtils.clone(dbErrorCode, o -> o.setApplicationName("yunai"))); + // 测试 code 不匹配 + errorCodeMapper.insert(ObjectUtils.clone(dbErrorCode, o -> o.setCode(2))); + // 测试 message 不匹配 + errorCodeMapper.insert(ObjectUtils.clone(dbErrorCode, o -> o.setMessage("nai"))); + // 测试 createTime 不匹配 + errorCodeMapper.insert(ObjectUtils.clone(dbErrorCode, o -> o.setCreateTime(buildTime(2020, 12, 12)))); + return dbErrorCode; + } + + @Test + public void testGetErrorCodeList() { + // mock 数据 + InfErrorCodeDO dbErrorCode = initGetErrorCodePage(); + // 准备参数 + InfErrorCodeExportReqVO reqVO = new InfErrorCodeExportReqVO(); + reqVO.setType(InfErrorCodeTypeEnum.AUTO_GENERATION.getType()); + reqVO.setApplicationName("yudao"); + reqVO.setCode(1); + reqVO.setMessage("yu"); + reqVO.setBeginCreateTime(buildTime(2020, 11, 1)); + reqVO.setEndCreateTime(buildTime(2020, 11, 30)); + + // 调用 + List list = errorCodeService.getErrorCodeList(reqVO); + // 断言 + assertEquals(1, list.size()); + assertPojoEquals(dbErrorCode, list.get(0)); + } + + @Test + public void testValidateCodeDuplicate_codeDuplicateForCreate() { + // 准备参数 + Integer code = randomInteger(); + // mock 数据 + errorCodeMapper.insert(randomInfErrorCodeDO(o -> o.setCode(code))); + + // 调用,校验异常 + assertServiceException(() -> errorCodeService.validateCodeDuplicate(code, null), + ERROR_CODE_DUPLICATE); + } + + @Test + public void testValidateCodeDuplicate_codeDuplicateForUpdate() { + // 准备参数 + Long id = randomLongId(); + Integer code = randomInteger(); + // mock 数据 + errorCodeMapper.insert(randomInfErrorCodeDO(o -> o.setCode(code))); + + // 调用,校验异常 + assertServiceException(() -> errorCodeService.validateCodeDuplicate(code, id), + ERROR_CODE_DUPLICATE); + } + + @Test + public void testValidateErrorCodeExists_notExists() { + assertServiceException(() -> errorCodeService.validateErrorCodeExists(null), + ERROR_CODE_NOT_EXISTS); + } + + // ========== 随机对象 ========== + + @SafeVarargs + private static InfErrorCodeDO randomInfErrorCodeDO(Consumer... consumers) { + Consumer consumer = (o) -> { + o.setType(randomEle(InfConfigTypeEnum.values()).getType()); // 保证 key 的范围 + }; + return randomPojo(InfErrorCodeDO.class, ArrayUtils.append(consumer, consumers)); + } + +} diff --git a/src/test/resources/sql/clean.sql b/src/test/resources/sql/clean.sql index 2eedb0ed7..47b84c62b 100644 --- a/src/test/resources/sql/clean.sql +++ b/src/test/resources/sql/clean.sql @@ -5,6 +5,7 @@ DELETE FROM "inf_job"; DELETE FROM "inf_job_log"; DELETE FROM "inf_api_access_log"; DELETE FROM "inf_api_error_log"; +DELETE FROM "inf_error_code"; -- sys 开头的 DB DELETE FROM "sys_dept"; diff --git a/src/test/resources/sql/create_tables.sql b/src/test/resources/sql/create_tables.sql index 963d18fa5..cf89b64b6 100644 --- a/src/test/resources/sql/create_tables.sql +++ b/src/test/resources/sql/create_tables.sql @@ -359,7 +359,7 @@ CREATE TABLE IF NOT EXISTS "sys_sms_channel" ( PRIMARY KEY ("id") ) COMMENT '短信渠道'; -CREATE TABLE "sys_sms_template" ( +CREATE TABLE IF NOT EXISTS "sys_sms_template" ( "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, "type" tinyint NOT NULL, "status" tinyint NOT NULL, @@ -379,7 +379,7 @@ CREATE TABLE "sys_sms_template" ( PRIMARY KEY ("id") ) COMMENT '短信模板'; -CREATE TABLE "sys_sms_log" ( +CREATE TABLE IF NOT EXISTS "sys_sms_log" ( "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, "channel_id" bigint NOT NULL, "channel_code" varchar(63) NOT NULL, @@ -411,3 +411,18 @@ CREATE TABLE "sys_sms_log" ( "deleted" bit NOT NULL DEFAULT FALSE, PRIMARY KEY ("id") ) COMMENT '短信日志'; + +CREATE TABLE IF NOT EXISTS "inf_error_code" ( + "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, + "type" tinyint NOT NULL DEFAULT '0', + "application_name" varchar(50) NOT NULL, + "code" int NOT NULL DEFAULT '0', + "message" varchar(512) NOT NULL DEFAULT '', + "memo" varchar(512) DEFAULT '', + "creator" varchar(64) DEFAULT '', + "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar(64) DEFAULT '', + "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" bit NOT NULL DEFAULT FALSE, + PRIMARY KEY ("id") +) COMMENT '错误码表'; From fbf45cd6fef6ebc4f8354ab4a32e416d3311ed47 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Thu, 22 Apr 2021 00:07:23 +0800 Subject: [PATCH 12/13] =?UTF-8?q?=E9=94=99=E8=AF=AF=E7=A0=81=E7=9A=84?= =?UTF-8?q?=E5=89=8D=E7=AB=AF=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-ui/src/api/system/errorCode.js | 54 ++++ ruoyi-ui/src/utils/dict.js | 1 + ruoyi-ui/src/views/system/errorCode/index.vue | 256 ++++++++++++++++++ .../errorcode/InfErrorCodeConvert.java | 42 --- .../infra/enums/InfErrorCodeConstants.java | 5 - .../dept/vo/post/SysPostExportReqVO.java | 3 + .../dept/vo/post/SysPostPageReqVO.java | 3 + .../errorcode/SysErrorCodeController.http} | 0 .../errorcode/SysErrorCodeController.java} | 52 ++-- .../errorcode/vo/SysErrorCodeBaseVO.java} | 4 +- .../vo/SysErrorCodeCreateReqVO.java} | 4 +- .../errorcode/vo/SysErrorCodeExcelVO.java} | 8 +- .../vo/SysErrorCodeExportReqVO.java} | 4 +- .../errorcode/vo/SysErrorCodePageReqVO.java} | 4 +- .../errorcode/vo/SysErrorCodeRespVO.java} | 4 +- .../vo/SysErrorCodeUpdateReqVO.java} | 4 +- .../errorcode/SysErrorCodeConvert.java | 42 +++ .../dataobject/errorcode/SysErrorCodeDO.java} | 10 +- .../system/dal/mysql/dept/SysPostMapper.java | 5 +- .../mysql/errorcode/SysErrorCodeMapper.java} | 30 +- .../system/enums/SysErrorCodeConstants.java | 4 + .../system/enums/dict/SysDictTypeEnum.java | 2 +- .../errorcode/SysErrorCodeTypeEnum.java} | 6 +- .../errorcode/SysErrorCodeService.java} | 24 +- .../impl/SysErrorCodeServiceImpl.java} | 67 ++--- .../errorcode/SysErrorCodeServiceTest.java} | 77 +++--- src/test/resources/sql/clean.sql | 2 +- src/test/resources/sql/create_tables.sql | 2 +- 28 files changed, 519 insertions(+), 200 deletions(-) create mode 100644 ruoyi-ui/src/api/system/errorCode.js create mode 100644 ruoyi-ui/src/views/system/errorCode/index.vue delete mode 100644 src/main/java/cn/iocoder/dashboard/modules/infra/convert/errorcode/InfErrorCodeConvert.java rename src/main/java/cn/iocoder/dashboard/modules/{infra/controller/errorcode/InfErrorCodeController.http => system/controller/errorcode/SysErrorCodeController.http} (100%) rename src/main/java/cn/iocoder/dashboard/modules/{infra/controller/errorcode/InfErrorCodeController.java => system/controller/errorcode/SysErrorCodeController.java} (57%) rename src/main/java/cn/iocoder/dashboard/modules/{infra/controller/errorcode/vo/InfErrorCodeBaseVO.java => system/controller/errorcode/vo/SysErrorCodeBaseVO.java} (89%) rename src/main/java/cn/iocoder/dashboard/modules/{infra/controller/errorcode/vo/InfErrorCodeCreateReqVO.java => system/controller/errorcode/vo/SysErrorCodeCreateReqVO.java} (63%) rename src/main/java/cn/iocoder/dashboard/modules/{infra/controller/errorcode/vo/InfErrorCodeExcelVO.java => system/controller/errorcode/vo/SysErrorCodeExcelVO.java} (83%) rename src/main/java/cn/iocoder/dashboard/modules/{infra/controller/errorcode/vo/InfErrorCodeExportReqVO.java => system/controller/errorcode/vo/SysErrorCodeExportReqVO.java} (91%) rename src/main/java/cn/iocoder/dashboard/modules/{infra/controller/errorcode/vo/InfErrorCodePageReqVO.java => system/controller/errorcode/vo/SysErrorCodePageReqVO.java} (91%) rename src/main/java/cn/iocoder/dashboard/modules/{infra/controller/errorcode/vo/InfErrorCodeRespVO.java => system/controller/errorcode/vo/SysErrorCodeRespVO.java} (83%) rename src/main/java/cn/iocoder/dashboard/modules/{infra/controller/errorcode/vo/InfErrorCodeUpdateReqVO.java => system/controller/errorcode/vo/SysErrorCodeUpdateReqVO.java} (78%) create mode 100644 src/main/java/cn/iocoder/dashboard/modules/system/convert/errorcode/SysErrorCodeConvert.java rename src/main/java/cn/iocoder/dashboard/modules/{infra/dal/dataobject/errorcode/InfErrorCodeDO.java => system/dal/dataobject/errorcode/SysErrorCodeDO.java} (74%) rename src/main/java/cn/iocoder/dashboard/modules/{infra/dal/mysql/errorcode/InfErrorCodeMapper.java => system/dal/mysql/errorcode/SysErrorCodeMapper.java} (59%) rename src/main/java/cn/iocoder/dashboard/modules/{infra/enums/errorcode/InfErrorCodeTypeEnum.java => system/enums/errorcode/SysErrorCodeTypeEnum.java} (75%) rename src/main/java/cn/iocoder/dashboard/modules/{infra/service/errorcode/InfErrorCodeService.java => system/service/errorcode/SysErrorCodeService.java} (52%) rename src/main/java/cn/iocoder/dashboard/modules/{infra/service/errorcode/impl/InfErrorCodeServiceImpl.java => system/service/errorcode/impl/SysErrorCodeServiceImpl.java} (67%) rename src/test/java/cn/iocoder/dashboard/modules/{infra/service/errorcode/InfErrorCodeServiceTest.java => system/service/errorcode/SysErrorCodeServiceTest.java} (67%) diff --git a/ruoyi-ui/src/api/system/errorCode.js b/ruoyi-ui/src/api/system/errorCode.js new file mode 100644 index 000000000..29546b7f4 --- /dev/null +++ b/ruoyi-ui/src/api/system/errorCode.js @@ -0,0 +1,54 @@ +import request from '@/utils/request' + +// 创建错误码 +export function createErrorCode(data) { + return request({ + url: '/system/error-code/create', + method: 'post', + data: data + }) +} + +// 更新错误码 +export function updateErrorCode(data) { + return request({ + url: '/system/error-code/update', + method: 'put', + data: data + }) +} + +// 删除错误码 +export function deleteErrorCode(id) { + return request({ + url: '/system/error-code/delete?id=' + id, + method: 'delete' + }) +} + +// 获得错误码 +export function getErrorCode(id) { + return request({ + url: '/system/error-code/get?id=' + id, + method: 'get' + }) +} + +// 获得错误码分页 +export function getErrorCodePage(query) { + return request({ + url: '/system/error-code/page', + method: 'get', + params: query + }) +} + +// 导出错误码 Excel +export function exportErrorCodeExcel(query) { + return request({ + url: '/system/error-code/export-excel', + method: 'get', + params: query, + responseType: 'blob' + }) +} diff --git a/ruoyi-ui/src/utils/dict.js b/ruoyi-ui/src/utils/dict.js index e3dc92d5b..17d5bd00e 100644 --- a/ruoyi-ui/src/utils/dict.js +++ b/ruoyi-ui/src/utils/dict.js @@ -21,6 +21,7 @@ export const DICT_TYPE = { SYS_SMS_TEMPLATE_TYPE: 'sys_sms_template_type', SYS_SMS_SEND_STATUS: 'sys_sms_send_status', SYS_SMS_RECEIVE_STATUS: 'sys_sms_receive_status', + SYS_ERROR_CODE_TYPE: 'sys_error_code_type', INF_REDIS_TIMEOUT_TYPE: 'inf_redis_timeout_type', INF_JOB_STATUS: 'inf_job_status', diff --git a/ruoyi-ui/src/views/system/errorCode/index.vue b/ruoyi-ui/src/views/system/errorCode/index.vue new file mode 100644 index 000000000..498fa5458 --- /dev/null +++ b/ruoyi-ui/src/views/system/errorCode/index.vue @@ -0,0 +1,256 @@ + + + diff --git a/src/main/java/cn/iocoder/dashboard/modules/infra/convert/errorcode/InfErrorCodeConvert.java b/src/main/java/cn/iocoder/dashboard/modules/infra/convert/errorcode/InfErrorCodeConvert.java deleted file mode 100644 index 433793150..000000000 --- a/src/main/java/cn/iocoder/dashboard/modules/infra/convert/errorcode/InfErrorCodeConvert.java +++ /dev/null @@ -1,42 +0,0 @@ -package cn.iocoder.dashboard.modules.infra.convert.errorcode; - -import cn.iocoder.dashboard.common.pojo.PageResult; -import cn.iocoder.dashboard.framework.errorcode.core.dto.ErrorCodeAutoGenerateReqDTO; -import cn.iocoder.dashboard.framework.errorcode.core.dto.ErrorCodeRespDTO; -import cn.iocoder.dashboard.modules.infra.controller.errorcode.vo.InfErrorCodeCreateReqVO; -import cn.iocoder.dashboard.modules.infra.controller.errorcode.vo.InfErrorCodeExcelVO; -import cn.iocoder.dashboard.modules.infra.controller.errorcode.vo.InfErrorCodeRespVO; -import cn.iocoder.dashboard.modules.infra.controller.errorcode.vo.InfErrorCodeUpdateReqVO; -import cn.iocoder.dashboard.modules.infra.dal.dataobject.errorcode.InfErrorCodeDO; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; - -import java.util.List; - -/** - * 错误码 Convert - * - * @author 芋道源码 - */ -@Mapper -public interface InfErrorCodeConvert { - - InfErrorCodeConvert INSTANCE = Mappers.getMapper(InfErrorCodeConvert.class); - - InfErrorCodeDO convert(InfErrorCodeCreateReqVO bean); - - InfErrorCodeDO convert(InfErrorCodeUpdateReqVO bean); - - InfErrorCodeRespVO convert(InfErrorCodeDO bean); - - List convertList(List list); - - PageResult convertPage(PageResult page); - - List convertList02(List list); - - InfErrorCodeDO convert(ErrorCodeAutoGenerateReqDTO bean); - - List convertList03(List list); - -} diff --git a/src/main/java/cn/iocoder/dashboard/modules/infra/enums/InfErrorCodeConstants.java b/src/main/java/cn/iocoder/dashboard/modules/infra/enums/InfErrorCodeConstants.java index 490c9f95c..e02119b6c 100644 --- a/src/main/java/cn/iocoder/dashboard/modules/infra/enums/InfErrorCodeConstants.java +++ b/src/main/java/cn/iocoder/dashboard/modules/infra/enums/InfErrorCodeConstants.java @@ -30,9 +30,4 @@ public interface InfErrorCodeConstants { // ========== 文件 1001003000 ========== ErrorCode FILE_NOT_EXISTS = new ErrorCode(1001003000, "文件不存在"); - // ========== 错误码模块 1001004000 ========== - ErrorCode ERROR_CODE_NOT_EXISTS = new ErrorCode(1001004000, "错误码不存在"); - ErrorCode ERROR_CODE_DUPLICATE = new ErrorCode(1001004001, "已经存在编码为【{}}】的错误码"); - ErrorCode ERROR_CAN_NOT_UPDATE_SYSTEM_TYPE_ERROR = new ErrorCode(1001004002, "不能修改类型为系统内置的错误码"); - } diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/controller/dept/vo/post/SysPostExportReqVO.java b/src/main/java/cn/iocoder/dashboard/modules/system/controller/dept/vo/post/SysPostExportReqVO.java index f714cdfee..8e66825dd 100644 --- a/src/main/java/cn/iocoder/dashboard/modules/system/controller/dept/vo/post/SysPostExportReqVO.java +++ b/src/main/java/cn/iocoder/dashboard/modules/system/controller/dept/vo/post/SysPostExportReqVO.java @@ -8,6 +8,9 @@ import lombok.Data; @Data public class SysPostExportReqVO { + @ApiModelProperty(value = "岗位编码", example = "yudao", notes = "模糊匹配") + private String code; + @ApiModelProperty(value = "岗位名称", example = "芋道", notes = "模糊匹配") private String name; diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/controller/dept/vo/post/SysPostPageReqVO.java b/src/main/java/cn/iocoder/dashboard/modules/system/controller/dept/vo/post/SysPostPageReqVO.java index 331aba57e..777edcb42 100644 --- a/src/main/java/cn/iocoder/dashboard/modules/system/controller/dept/vo/post/SysPostPageReqVO.java +++ b/src/main/java/cn/iocoder/dashboard/modules/system/controller/dept/vo/post/SysPostPageReqVO.java @@ -11,6 +11,9 @@ import lombok.EqualsAndHashCode; @EqualsAndHashCode(callSuper = true) public class SysPostPageReqVO extends PageParam { + @ApiModelProperty(value = "岗位编码", example = "yudao", notes = "模糊匹配") + private String code; + @ApiModelProperty(value = "岗位名称", example = "芋道", notes = "模糊匹配") private String name; diff --git a/src/main/java/cn/iocoder/dashboard/modules/infra/controller/errorcode/InfErrorCodeController.http b/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/SysErrorCodeController.http similarity index 100% rename from src/main/java/cn/iocoder/dashboard/modules/infra/controller/errorcode/InfErrorCodeController.http rename to src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/SysErrorCodeController.http diff --git a/src/main/java/cn/iocoder/dashboard/modules/infra/controller/errorcode/InfErrorCodeController.java b/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/SysErrorCodeController.java similarity index 57% rename from src/main/java/cn/iocoder/dashboard/modules/infra/controller/errorcode/InfErrorCodeController.java rename to src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/SysErrorCodeController.java index 730f305b5..93d5bdffc 100644 --- a/src/main/java/cn/iocoder/dashboard/modules/infra/controller/errorcode/InfErrorCodeController.java +++ b/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/SysErrorCodeController.java @@ -1,13 +1,13 @@ -package cn.iocoder.dashboard.modules.infra.controller.errorcode; +package cn.iocoder.dashboard.modules.system.controller.errorcode; import cn.iocoder.dashboard.common.pojo.CommonResult; import cn.iocoder.dashboard.common.pojo.PageResult; import cn.iocoder.dashboard.framework.excel.core.util.ExcelUtils; import cn.iocoder.dashboard.framework.logger.operatelog.core.annotations.OperateLog; -import cn.iocoder.dashboard.modules.infra.controller.errorcode.vo.*; -import cn.iocoder.dashboard.modules.infra.convert.errorcode.InfErrorCodeConvert; -import cn.iocoder.dashboard.modules.infra.dal.dataobject.errorcode.InfErrorCodeDO; -import cn.iocoder.dashboard.modules.infra.service.errorcode.InfErrorCodeService; +import cn.iocoder.dashboard.modules.system.convert.errorcode.SysErrorCodeConvert; +import cn.iocoder.dashboard.modules.system.controller.errorcode.vo.*; +import cn.iocoder.dashboard.modules.system.dal.dataobject.errorcode.SysErrorCodeDO; +import cn.iocoder.dashboard.modules.system.service.errorcode.SysErrorCodeService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiOperation; @@ -26,24 +26,24 @@ import static cn.iocoder.dashboard.framework.logger.operatelog.core.enums.Operat @Api(tags = "错误码") @RestController -@RequestMapping("/infra/error-code") +@RequestMapping("/system/error-code") @Validated -public class InfErrorCodeController { +public class SysErrorCodeController { @Resource - private InfErrorCodeService errorCodeService; + private SysErrorCodeService errorCodeService; @PostMapping("/create") @ApiOperation("创建错误码") - @PreAuthorize("@ss.hasPermission('infra:error-code:create')") - public CommonResult createErrorCode(@Valid @RequestBody InfErrorCodeCreateReqVO createReqVO) { + @PreAuthorize("@ss.hasPermission('system:error-code:create')") + public CommonResult createErrorCode(@Valid @RequestBody SysErrorCodeCreateReqVO createReqVO) { return success(errorCodeService.createErrorCode(createReqVO)); } @PutMapping("/update") @ApiOperation("更新错误码") - @PreAuthorize("@ss.hasPermission('infra:error-code:update')") - public CommonResult updateErrorCode(@Valid @RequestBody InfErrorCodeUpdateReqVO updateReqVO) { + @PreAuthorize("@ss.hasPermission('system:error-code:update')") + public CommonResult updateErrorCode(@Valid @RequestBody SysErrorCodeUpdateReqVO updateReqVO) { errorCodeService.updateErrorCode(updateReqVO); return success(true); } @@ -51,7 +51,7 @@ public class InfErrorCodeController { @DeleteMapping("/delete") @ApiOperation("删除错误码") @ApiImplicitParam(name = "id", value = "编号", required = true) - @PreAuthorize("@ss.hasPermission('infra:error-code:delete')") + @PreAuthorize("@ss.hasPermission('system:error-code:delete')") public CommonResult deleteErrorCode(@RequestParam("id") Long id) { errorCodeService.deleteErrorCode(id); return success(true); @@ -60,30 +60,30 @@ public class InfErrorCodeController { @GetMapping("/get") @ApiOperation("获得错误码") @ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = Long.class) - @PreAuthorize("@ss.hasPermission('infra:error-code:query')") - public CommonResult getErrorCode(@RequestParam("id") Long id) { - InfErrorCodeDO errorCode = errorCodeService.getErrorCode(id); - return success(InfErrorCodeConvert.INSTANCE.convert(errorCode)); + @PreAuthorize("@ss.hasPermission('system:error-code:query')") + public CommonResult getErrorCode(@RequestParam("id") Long id) { + SysErrorCodeDO errorCode = errorCodeService.getErrorCode(id); + return success(SysErrorCodeConvert.INSTANCE.convert(errorCode)); } @GetMapping("/page") @ApiOperation("获得错误码分页") - @PreAuthorize("@ss.hasPermission('infra:error-code:query')") - public CommonResult> getErrorCodePage(@Valid InfErrorCodePageReqVO pageVO) { - PageResult pageResult = errorCodeService.getErrorCodePage(pageVO); - return success(InfErrorCodeConvert.INSTANCE.convertPage(pageResult)); + @PreAuthorize("@ss.hasPermission('system:error-code:query')") + public CommonResult> getErrorCodePage(@Valid SysErrorCodePageReqVO pageVO) { + PageResult pageResult = errorCodeService.getErrorCodePage(pageVO); + return success(SysErrorCodeConvert.INSTANCE.convertPage(pageResult)); } @GetMapping("/export-excel") @ApiOperation("导出错误码 Excel") - @PreAuthorize("@ss.hasPermission('infra:error-code:export')") + @PreAuthorize("@ss.hasPermission('system:error-code:export')") @OperateLog(type = EXPORT) - public void exportErrorCodeExcel(@Valid InfErrorCodeExportReqVO exportReqVO, + public void exportErrorCodeExcel(@Valid SysErrorCodeExportReqVO exportReqVO, HttpServletResponse response) throws IOException { - List list = errorCodeService.getErrorCodeList(exportReqVO); + List list = errorCodeService.getErrorCodeList(exportReqVO); // 导出 Excel - List datas = InfErrorCodeConvert.INSTANCE.convertList02(list); - ExcelUtils.write(response, "错误码.xls", "数据", InfErrorCodeExcelVO.class, datas); + List datas = SysErrorCodeConvert.INSTANCE.convertList02(list); + ExcelUtils.write(response, "错误码.xls", "数据", SysErrorCodeExcelVO.class, datas); } } diff --git a/src/main/java/cn/iocoder/dashboard/modules/infra/controller/errorcode/vo/InfErrorCodeBaseVO.java b/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/vo/SysErrorCodeBaseVO.java similarity index 89% rename from src/main/java/cn/iocoder/dashboard/modules/infra/controller/errorcode/vo/InfErrorCodeBaseVO.java rename to src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/vo/SysErrorCodeBaseVO.java index 4e1b6cc80..235ba8880 100644 --- a/src/main/java/cn/iocoder/dashboard/modules/infra/controller/errorcode/vo/InfErrorCodeBaseVO.java +++ b/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/vo/SysErrorCodeBaseVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.dashboard.modules.infra.controller.errorcode.vo; +package cn.iocoder.dashboard.modules.system.controller.errorcode.vo; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -10,7 +10,7 @@ import javax.validation.constraints.NotNull; * 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成 */ @Data -public class InfErrorCodeBaseVO { +public class SysErrorCodeBaseVO { @ApiModelProperty(value = "应用名", required = true, example = "dashboard") @NotNull(message = "应用名不能为空") diff --git a/src/main/java/cn/iocoder/dashboard/modules/infra/controller/errorcode/vo/InfErrorCodeCreateReqVO.java b/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/vo/SysErrorCodeCreateReqVO.java similarity index 63% rename from src/main/java/cn/iocoder/dashboard/modules/infra/controller/errorcode/vo/InfErrorCodeCreateReqVO.java rename to src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/vo/SysErrorCodeCreateReqVO.java index 64049a236..7daedf7d3 100644 --- a/src/main/java/cn/iocoder/dashboard/modules/infra/controller/errorcode/vo/InfErrorCodeCreateReqVO.java +++ b/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/vo/SysErrorCodeCreateReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.dashboard.modules.infra.controller.errorcode.vo; +package cn.iocoder.dashboard.modules.system.controller.errorcode.vo; import io.swagger.annotations.ApiModel; import lombok.Data; @@ -9,6 +9,6 @@ import lombok.ToString; @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) -public class InfErrorCodeCreateReqVO extends InfErrorCodeBaseVO { +public class SysErrorCodeCreateReqVO extends SysErrorCodeBaseVO { } diff --git a/src/main/java/cn/iocoder/dashboard/modules/infra/controller/errorcode/vo/InfErrorCodeExcelVO.java b/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/vo/SysErrorCodeExcelVO.java similarity index 83% rename from src/main/java/cn/iocoder/dashboard/modules/infra/controller/errorcode/vo/InfErrorCodeExcelVO.java rename to src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/vo/SysErrorCodeExcelVO.java index d0c82e154..81461103e 100644 --- a/src/main/java/cn/iocoder/dashboard/modules/infra/controller/errorcode/vo/InfErrorCodeExcelVO.java +++ b/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/vo/SysErrorCodeExcelVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.dashboard.modules.infra.controller.errorcode.vo; +package cn.iocoder.dashboard.modules.system.controller.errorcode.vo; import cn.iocoder.dashboard.framework.excel.core.annotations.DictFormat; import cn.iocoder.dashboard.framework.excel.core.convert.DictConvert; @@ -7,7 +7,7 @@ import lombok.Data; import java.util.Date; -import static cn.iocoder.dashboard.modules.system.enums.dict.SysDictTypeEnum.INF_ERROR_CODE_TYPE; +import static cn.iocoder.dashboard.modules.system.enums.dict.SysDictTypeEnum.SYS_ERROR_CODE_TYPE; /** * 错误码 Excel VO @@ -15,13 +15,13 @@ import static cn.iocoder.dashboard.modules.system.enums.dict.SysDictTypeEnum.INF * @author 芋道源码 */ @Data -public class InfErrorCodeExcelVO { +public class SysErrorCodeExcelVO { @ExcelProperty("错误码编号") private Long id; @ExcelProperty(value = "错误码类型", converter = DictConvert.class) - @DictFormat(INF_ERROR_CODE_TYPE) + @DictFormat(SYS_ERROR_CODE_TYPE) private Integer type; @ExcelProperty("应用名") diff --git a/src/main/java/cn/iocoder/dashboard/modules/infra/controller/errorcode/vo/InfErrorCodeExportReqVO.java b/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/vo/SysErrorCodeExportReqVO.java similarity index 91% rename from src/main/java/cn/iocoder/dashboard/modules/infra/controller/errorcode/vo/InfErrorCodeExportReqVO.java rename to src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/vo/SysErrorCodeExportReqVO.java index 5e06da3a6..a9253d4f8 100644 --- a/src/main/java/cn/iocoder/dashboard/modules/infra/controller/errorcode/vo/InfErrorCodeExportReqVO.java +++ b/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/vo/SysErrorCodeExportReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.dashboard.modules.infra.controller.errorcode.vo; +package cn.iocoder.dashboard.modules.system.controller.errorcode.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -11,7 +11,7 @@ import static cn.iocoder.dashboard.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOU @ApiModel(value = "错误码 Excel 导出 Request VO", description = "参数和 InfErrorCodePageReqVO 是一致的") @Data -public class InfErrorCodeExportReqVO { +public class SysErrorCodeExportReqVO { @ApiModelProperty(value = "错误码类型", example = "1") private Integer type; diff --git a/src/main/java/cn/iocoder/dashboard/modules/infra/controller/errorcode/vo/InfErrorCodePageReqVO.java b/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/vo/SysErrorCodePageReqVO.java similarity index 91% rename from src/main/java/cn/iocoder/dashboard/modules/infra/controller/errorcode/vo/InfErrorCodePageReqVO.java rename to src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/vo/SysErrorCodePageReqVO.java index 73bcac5a9..667110cf2 100644 --- a/src/main/java/cn/iocoder/dashboard/modules/infra/controller/errorcode/vo/InfErrorCodePageReqVO.java +++ b/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/vo/SysErrorCodePageReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.dashboard.modules.infra.controller.errorcode.vo; +package cn.iocoder.dashboard.modules.system.controller.errorcode.vo; import cn.iocoder.dashboard.common.pojo.PageParam; import io.swagger.annotations.ApiModel; @@ -16,7 +16,7 @@ import static cn.iocoder.dashboard.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOU @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) -public class InfErrorCodePageReqVO extends PageParam { +public class SysErrorCodePageReqVO extends PageParam { @ApiModelProperty(value = "错误码类型", example = "1", notes = "参见 SysErrorCodeTypeEnum 枚举类") private Integer type; diff --git a/src/main/java/cn/iocoder/dashboard/modules/infra/controller/errorcode/vo/InfErrorCodeRespVO.java b/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/vo/SysErrorCodeRespVO.java similarity index 83% rename from src/main/java/cn/iocoder/dashboard/modules/infra/controller/errorcode/vo/InfErrorCodeRespVO.java rename to src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/vo/SysErrorCodeRespVO.java index 09c416062..ef0e804f1 100644 --- a/src/main/java/cn/iocoder/dashboard/modules/infra/controller/errorcode/vo/InfErrorCodeRespVO.java +++ b/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/vo/SysErrorCodeRespVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.dashboard.modules.infra.controller.errorcode.vo; +package cn.iocoder.dashboard.modules.system.controller.errorcode.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -12,7 +12,7 @@ import java.util.Date; @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) -public class InfErrorCodeRespVO extends InfErrorCodeBaseVO { +public class SysErrorCodeRespVO extends SysErrorCodeBaseVO { @ApiModelProperty(value = "错误码编号", required = true, example = "1024") private Long id; diff --git a/src/main/java/cn/iocoder/dashboard/modules/infra/controller/errorcode/vo/InfErrorCodeUpdateReqVO.java b/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/vo/SysErrorCodeUpdateReqVO.java similarity index 78% rename from src/main/java/cn/iocoder/dashboard/modules/infra/controller/errorcode/vo/InfErrorCodeUpdateReqVO.java rename to src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/vo/SysErrorCodeUpdateReqVO.java index 78f6c39aa..1659b47c4 100644 --- a/src/main/java/cn/iocoder/dashboard/modules/infra/controller/errorcode/vo/InfErrorCodeUpdateReqVO.java +++ b/src/main/java/cn/iocoder/dashboard/modules/system/controller/errorcode/vo/SysErrorCodeUpdateReqVO.java @@ -1,4 +1,4 @@ -package cn.iocoder.dashboard.modules.infra.controller.errorcode.vo; +package cn.iocoder.dashboard.modules.system.controller.errorcode.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -12,7 +12,7 @@ import javax.validation.constraints.NotNull; @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) -public class InfErrorCodeUpdateReqVO extends InfErrorCodeBaseVO { +public class SysErrorCodeUpdateReqVO extends SysErrorCodeBaseVO { @ApiModelProperty(value = "错误码编号", required = true, example = "1024") @NotNull(message = "错误码编号不能为空") diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/convert/errorcode/SysErrorCodeConvert.java b/src/main/java/cn/iocoder/dashboard/modules/system/convert/errorcode/SysErrorCodeConvert.java new file mode 100644 index 000000000..695c2fa02 --- /dev/null +++ b/src/main/java/cn/iocoder/dashboard/modules/system/convert/errorcode/SysErrorCodeConvert.java @@ -0,0 +1,42 @@ +package cn.iocoder.dashboard.modules.system.convert.errorcode; + +import cn.iocoder.dashboard.common.pojo.PageResult; +import cn.iocoder.dashboard.framework.errorcode.core.dto.ErrorCodeAutoGenerateReqDTO; +import cn.iocoder.dashboard.framework.errorcode.core.dto.ErrorCodeRespDTO; +import cn.iocoder.dashboard.modules.system.controller.errorcode.vo.SysErrorCodeCreateReqVO; +import cn.iocoder.dashboard.modules.system.controller.errorcode.vo.SysErrorCodeExcelVO; +import cn.iocoder.dashboard.modules.system.controller.errorcode.vo.SysErrorCodeRespVO; +import cn.iocoder.dashboard.modules.system.controller.errorcode.vo.SysErrorCodeUpdateReqVO; +import cn.iocoder.dashboard.modules.system.dal.dataobject.errorcode.SysErrorCodeDO; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +import java.util.List; + +/** + * 错误码 Convert + * + * @author 芋道源码 + */ +@Mapper +public interface SysErrorCodeConvert { + + SysErrorCodeConvert INSTANCE = Mappers.getMapper(SysErrorCodeConvert.class); + + SysErrorCodeDO convert(SysErrorCodeCreateReqVO bean); + + SysErrorCodeDO convert(SysErrorCodeUpdateReqVO bean); + + SysErrorCodeRespVO convert(SysErrorCodeDO bean); + + List convertList(List list); + + PageResult convertPage(PageResult page); + + List convertList02(List list); + + SysErrorCodeDO convert(ErrorCodeAutoGenerateReqDTO bean); + + List convertList03(List list); + +} diff --git a/src/main/java/cn/iocoder/dashboard/modules/infra/dal/dataobject/errorcode/InfErrorCodeDO.java b/src/main/java/cn/iocoder/dashboard/modules/system/dal/dataobject/errorcode/SysErrorCodeDO.java similarity index 74% rename from src/main/java/cn/iocoder/dashboard/modules/infra/dal/dataobject/errorcode/InfErrorCodeDO.java rename to src/main/java/cn/iocoder/dashboard/modules/system/dal/dataobject/errorcode/SysErrorCodeDO.java index 9d9e3526b..75c541791 100644 --- a/src/main/java/cn/iocoder/dashboard/modules/infra/dal/dataobject/errorcode/InfErrorCodeDO.java +++ b/src/main/java/cn/iocoder/dashboard/modules/system/dal/dataobject/errorcode/SysErrorCodeDO.java @@ -1,7 +1,7 @@ -package cn.iocoder.dashboard.modules.infra.dal.dataobject.errorcode; +package cn.iocoder.dashboard.modules.system.dal.dataobject.errorcode; import cn.iocoder.dashboard.framework.mybatis.core.dataobject.BaseDO; -import cn.iocoder.dashboard.modules.infra.enums.errorcode.InfErrorCodeTypeEnum; +import cn.iocoder.dashboard.modules.system.enums.errorcode.SysErrorCodeTypeEnum; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; @@ -13,11 +13,11 @@ import lombok.ToString; * * @author 芋道源码 */ -@TableName(value = "inf_error_code") +@TableName(value = "sys_error_code") @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) -public class InfErrorCodeDO extends BaseDO { +public class SysErrorCodeDO extends BaseDO { /** * 错误码编号,自增 @@ -27,7 +27,7 @@ public class InfErrorCodeDO extends BaseDO { /** * 错误码类型 * - * 枚举 {@link InfErrorCodeTypeEnum} + * 枚举 {@link SysErrorCodeTypeEnum} */ private Integer type; /** diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/dept/SysPostMapper.java b/src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/dept/SysPostMapper.java index 70013fe74..39716e09c 100644 --- a/src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/dept/SysPostMapper.java +++ b/src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/dept/SysPostMapper.java @@ -22,12 +22,15 @@ public interface SysPostMapper extends BaseMapperX { default PageResult selectPage(SysPostPageReqVO reqVO) { return selectPage(reqVO, new QueryWrapperX() + .likeIfPresent("code", reqVO.getCode()) .likeIfPresent("name", reqVO.getName()) .eqIfPresent("status", reqVO.getStatus())); } default List selectList(SysPostExportReqVO reqVO) { - return selectList(new QueryWrapperX().likeIfPresent("name", reqVO.getName()) + return selectList(new QueryWrapperX() + .likeIfPresent("code", reqVO.getCode()) + .likeIfPresent("name", reqVO.getName()) .eqIfPresent("status", reqVO.getStatus())); } diff --git a/src/main/java/cn/iocoder/dashboard/modules/infra/dal/mysql/errorcode/InfErrorCodeMapper.java b/src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/errorcode/SysErrorCodeMapper.java similarity index 59% rename from src/main/java/cn/iocoder/dashboard/modules/infra/dal/mysql/errorcode/InfErrorCodeMapper.java rename to src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/errorcode/SysErrorCodeMapper.java index 1e19fa488..63be95295 100644 --- a/src/main/java/cn/iocoder/dashboard/modules/infra/dal/mysql/errorcode/InfErrorCodeMapper.java +++ b/src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/errorcode/SysErrorCodeMapper.java @@ -1,11 +1,11 @@ -package cn.iocoder.dashboard.modules.infra.dal.mysql.errorcode; +package cn.iocoder.dashboard.modules.system.dal.mysql.errorcode; import cn.iocoder.dashboard.common.pojo.PageResult; import cn.iocoder.dashboard.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.dashboard.framework.mybatis.core.query.QueryWrapperX; -import cn.iocoder.dashboard.modules.infra.controller.errorcode.vo.InfErrorCodeExportReqVO; -import cn.iocoder.dashboard.modules.infra.controller.errorcode.vo.InfErrorCodePageReqVO; -import cn.iocoder.dashboard.modules.infra.dal.dataobject.errorcode.InfErrorCodeDO; +import cn.iocoder.dashboard.modules.system.controller.errorcode.vo.SysErrorCodeExportReqVO; +import cn.iocoder.dashboard.modules.system.controller.errorcode.vo.SysErrorCodePageReqVO; +import cn.iocoder.dashboard.modules.system.dal.dataobject.errorcode.SysErrorCodeDO; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import org.apache.ibatis.annotations.Mapper; @@ -14,10 +14,10 @@ import java.util.Date; import java.util.List; @Mapper -public interface InfErrorCodeMapper extends BaseMapperX { +public interface SysErrorCodeMapper extends BaseMapperX { - default PageResult selectPage(InfErrorCodePageReqVO reqVO) { - return selectPage(reqVO, new QueryWrapperX() + default PageResult selectPage(SysErrorCodePageReqVO reqVO) { + return selectPage(reqVO, new QueryWrapperX() .eqIfPresent("type", reqVO.getType()) .likeIfPresent("application_name", reqVO.getApplicationName()) .eqIfPresent("code", reqVO.getCode()) @@ -26,8 +26,8 @@ public interface InfErrorCodeMapper extends BaseMapperX { .orderByAsc("application_name", "code")); } - default List selectList(InfErrorCodeExportReqVO reqVO) { - return selectList(new QueryWrapperX() + default List selectList(SysErrorCodeExportReqVO reqVO) { + return selectList(new QueryWrapperX() .eqIfPresent("type", reqVO.getType()) .likeIfPresent("application_name", reqVO.getApplicationName()) .eqIfPresent("code", reqVO.getCode()) @@ -36,16 +36,16 @@ public interface InfErrorCodeMapper extends BaseMapperX { .orderByAsc("application_name", "code")); } - default List selectListByCodes(Collection codes) { - return selectList(new QueryWrapper().in("code", codes)); + default List selectListByCodes(Collection codes) { + return selectList(new QueryWrapper().in("code", codes)); } - default InfErrorCodeDO selectByCode(Integer code) { - return selectOne(new QueryWrapper().eq("code", code)); + default SysErrorCodeDO selectByCode(Integer code) { + return selectOne(new QueryWrapper().eq("code", code)); } - default List selectListByApplicationNameAndUpdateTimeGt(String applicationName, Date minUpdateTime) { - return selectList(new QueryWrapperX().eq("application_name", applicationName) + default List selectListByApplicationNameAndUpdateTimeGt(String applicationName, Date minUpdateTime) { + return selectList(new QueryWrapperX().eq("application_name", applicationName) .gtIfPresent("update_time", minUpdateTime)); } diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/enums/SysErrorCodeConstants.java b/src/main/java/cn/iocoder/dashboard/modules/system/enums/SysErrorCodeConstants.java index b89581430..2d6eb305c 100644 --- a/src/main/java/cn/iocoder/dashboard/modules/system/enums/SysErrorCodeConstants.java +++ b/src/main/java/cn/iocoder/dashboard/modules/system/enums/SysErrorCodeConstants.java @@ -91,4 +91,8 @@ public interface SysErrorCodeConstants { ErrorCode SMS_SEND_MOBILE_NOT_EXISTS = new ErrorCode(1002012000, "手机号不存在"); ErrorCode SMS_SEND_MOBILE_TEMPLATE_PARAM_MISS = new ErrorCode(1002012001, "模板参数({})缺失"); + // ========== 错误码模块 1002013000 ========== + ErrorCode ERROR_CODE_NOT_EXISTS = new ErrorCode(1002013000, "错误码不存在"); + ErrorCode ERROR_CODE_DUPLICATE = new ErrorCode(1002013001, "已经存在编码为【{}】的错误码"); + } diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/enums/dict/SysDictTypeEnum.java b/src/main/java/cn/iocoder/dashboard/modules/system/enums/dict/SysDictTypeEnum.java index 323cf652e..59e6d0d13 100644 --- a/src/main/java/cn/iocoder/dashboard/modules/system/enums/dict/SysDictTypeEnum.java +++ b/src/main/java/cn/iocoder/dashboard/modules/system/enums/dict/SysDictTypeEnum.java @@ -22,12 +22,12 @@ public enum SysDictTypeEnum { SYS_SMS_TEMPLATE_TYPE("sys_sms_template_type"), // 短信模板类型 SYS_SMS_SEND_STATUS("sys_sms_send_status"), // 短信发送状态 SYS_SMS_RECEIVE_STATUS("sys_sms_receive_status"), // 短信接收状态 + SYS_ERROR_CODE_TYPE("inf_error_code_type"), // 错误码的类型枚举 INF_REDIS_TIMEOUT_TYPE("inf_redis_timeout_type"), // Redis 超时类型 INF_JOB_STATUS("inf_job_status"), // 定时任务状态的枚举 INF_JOB_LOG_STATUS("inf_job_log_status"), // 定时任务日志状态的枚举 INF_API_ERROR_LOG_PROCESS_STATUS("inf_api_error_log_process_status"), // API 错误日志的处理状态的枚举 - INF_ERROR_CODE_TYPE("inf_error_code_type"), // 错误码的类型枚举 ; diff --git a/src/main/java/cn/iocoder/dashboard/modules/infra/enums/errorcode/InfErrorCodeTypeEnum.java b/src/main/java/cn/iocoder/dashboard/modules/system/enums/errorcode/SysErrorCodeTypeEnum.java similarity index 75% rename from src/main/java/cn/iocoder/dashboard/modules/infra/enums/errorcode/InfErrorCodeTypeEnum.java rename to src/main/java/cn/iocoder/dashboard/modules/system/enums/errorcode/SysErrorCodeTypeEnum.java index b8d7d79de..be59a23ea 100644 --- a/src/main/java/cn/iocoder/dashboard/modules/infra/enums/errorcode/InfErrorCodeTypeEnum.java +++ b/src/main/java/cn/iocoder/dashboard/modules/system/enums/errorcode/SysErrorCodeTypeEnum.java @@ -1,4 +1,4 @@ -package cn.iocoder.dashboard.modules.infra.enums.errorcode; +package cn.iocoder.dashboard.modules.system.enums.errorcode; import cn.iocoder.dashboard.common.core.IntArrayValuable; import lombok.AllArgsConstructor; @@ -13,7 +13,7 @@ import java.util.Arrays; */ @AllArgsConstructor @Getter -public enum InfErrorCodeTypeEnum implements IntArrayValuable { +public enum SysErrorCodeTypeEnum implements IntArrayValuable { /** * 自动生成 @@ -24,7 +24,7 @@ public enum InfErrorCodeTypeEnum implements IntArrayValuable { */ MANUAL_OPERATION(2); - public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(InfErrorCodeTypeEnum::getType).toArray(); + public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(SysErrorCodeTypeEnum::getType).toArray(); /** * 类型 diff --git a/src/main/java/cn/iocoder/dashboard/modules/infra/service/errorcode/InfErrorCodeService.java b/src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/SysErrorCodeService.java similarity index 52% rename from src/main/java/cn/iocoder/dashboard/modules/infra/service/errorcode/InfErrorCodeService.java rename to src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/SysErrorCodeService.java index 8035c9929..5d7354e7a 100644 --- a/src/main/java/cn/iocoder/dashboard/modules/infra/service/errorcode/InfErrorCodeService.java +++ b/src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/SysErrorCodeService.java @@ -1,12 +1,12 @@ -package cn.iocoder.dashboard.modules.infra.service.errorcode; +package cn.iocoder.dashboard.modules.system.service.errorcode; import cn.iocoder.dashboard.common.pojo.PageResult; import cn.iocoder.dashboard.framework.errorcode.core.service.ErrorCodeFrameworkService; -import cn.iocoder.dashboard.modules.infra.controller.errorcode.vo.InfErrorCodeCreateReqVO; -import cn.iocoder.dashboard.modules.infra.controller.errorcode.vo.InfErrorCodeExportReqVO; -import cn.iocoder.dashboard.modules.infra.controller.errorcode.vo.InfErrorCodePageReqVO; -import cn.iocoder.dashboard.modules.infra.controller.errorcode.vo.InfErrorCodeUpdateReqVO; -import cn.iocoder.dashboard.modules.infra.dal.dataobject.errorcode.InfErrorCodeDO; +import cn.iocoder.dashboard.modules.system.controller.errorcode.vo.SysErrorCodeCreateReqVO; +import cn.iocoder.dashboard.modules.system.controller.errorcode.vo.SysErrorCodeExportReqVO; +import cn.iocoder.dashboard.modules.system.controller.errorcode.vo.SysErrorCodePageReqVO; +import cn.iocoder.dashboard.modules.system.controller.errorcode.vo.SysErrorCodeUpdateReqVO; +import cn.iocoder.dashboard.modules.system.dal.dataobject.errorcode.SysErrorCodeDO; import javax.validation.Valid; import java.util.List; @@ -16,7 +16,7 @@ import java.util.List; * * @author 芋道源码 */ -public interface InfErrorCodeService extends ErrorCodeFrameworkService { +public interface SysErrorCodeService extends ErrorCodeFrameworkService { /** * 创建错误码 @@ -24,14 +24,14 @@ public interface InfErrorCodeService extends ErrorCodeFrameworkService { * @param createReqVO 创建信息 * @return 编号 */ - Long createErrorCode(@Valid InfErrorCodeCreateReqVO createReqVO); + Long createErrorCode(@Valid SysErrorCodeCreateReqVO createReqVO); /** * 更新错误码 * * @param updateReqVO 更新信息 */ - void updateErrorCode(@Valid InfErrorCodeUpdateReqVO updateReqVO); + void updateErrorCode(@Valid SysErrorCodeUpdateReqVO updateReqVO); /** * 删除错误码 @@ -46,7 +46,7 @@ public interface InfErrorCodeService extends ErrorCodeFrameworkService { * @param id 编号 * @return 错误码 */ - InfErrorCodeDO getErrorCode(Long id); + SysErrorCodeDO getErrorCode(Long id); /** * 获得错误码分页 @@ -54,7 +54,7 @@ public interface InfErrorCodeService extends ErrorCodeFrameworkService { * @param pageReqVO 分页查询 * @return 错误码分页 */ - PageResult getErrorCodePage(InfErrorCodePageReqVO pageReqVO); + PageResult getErrorCodePage(SysErrorCodePageReqVO pageReqVO); /** * 获得错误码列表, 用于 Excel 导出 @@ -62,6 +62,6 @@ public interface InfErrorCodeService extends ErrorCodeFrameworkService { * @param exportReqVO 查询条件 * @return 错误码列表 */ - List getErrorCodeList(InfErrorCodeExportReqVO exportReqVO); + List getErrorCodeList(SysErrorCodeExportReqVO exportReqVO); } diff --git a/src/main/java/cn/iocoder/dashboard/modules/infra/service/errorcode/impl/InfErrorCodeServiceImpl.java b/src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/impl/SysErrorCodeServiceImpl.java similarity index 67% rename from src/main/java/cn/iocoder/dashboard/modules/infra/service/errorcode/impl/InfErrorCodeServiceImpl.java rename to src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/impl/SysErrorCodeServiceImpl.java index 9b4cb6fd6..d0ba9b214 100644 --- a/src/main/java/cn/iocoder/dashboard/modules/infra/service/errorcode/impl/InfErrorCodeServiceImpl.java +++ b/src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/impl/SysErrorCodeServiceImpl.java @@ -1,18 +1,18 @@ -package cn.iocoder.dashboard.modules.infra.service.errorcode.impl; +package cn.iocoder.dashboard.modules.system.service.errorcode.impl; import cn.hutool.core.collection.CollUtil; import cn.iocoder.dashboard.common.pojo.PageResult; import cn.iocoder.dashboard.framework.errorcode.core.dto.ErrorCodeAutoGenerateReqDTO; import cn.iocoder.dashboard.framework.errorcode.core.dto.ErrorCodeRespDTO; -import cn.iocoder.dashboard.modules.infra.controller.errorcode.vo.InfErrorCodeCreateReqVO; -import cn.iocoder.dashboard.modules.infra.controller.errorcode.vo.InfErrorCodeExportReqVO; -import cn.iocoder.dashboard.modules.infra.controller.errorcode.vo.InfErrorCodePageReqVO; -import cn.iocoder.dashboard.modules.infra.controller.errorcode.vo.InfErrorCodeUpdateReqVO; -import cn.iocoder.dashboard.modules.infra.convert.errorcode.InfErrorCodeConvert; -import cn.iocoder.dashboard.modules.infra.dal.dataobject.errorcode.InfErrorCodeDO; -import cn.iocoder.dashboard.modules.infra.dal.mysql.errorcode.InfErrorCodeMapper; -import cn.iocoder.dashboard.modules.infra.enums.errorcode.InfErrorCodeTypeEnum; -import cn.iocoder.dashboard.modules.infra.service.errorcode.InfErrorCodeService; +import cn.iocoder.dashboard.modules.system.convert.errorcode.SysErrorCodeConvert; +import cn.iocoder.dashboard.modules.system.controller.errorcode.vo.SysErrorCodeCreateReqVO; +import cn.iocoder.dashboard.modules.system.controller.errorcode.vo.SysErrorCodeExportReqVO; +import cn.iocoder.dashboard.modules.system.controller.errorcode.vo.SysErrorCodePageReqVO; +import cn.iocoder.dashboard.modules.system.controller.errorcode.vo.SysErrorCodeUpdateReqVO; +import cn.iocoder.dashboard.modules.system.dal.dataobject.errorcode.SysErrorCodeDO; +import cn.iocoder.dashboard.modules.system.dal.mysql.errorcode.SysErrorCodeMapper; +import cn.iocoder.dashboard.modules.system.enums.errorcode.SysErrorCodeTypeEnum; +import cn.iocoder.dashboard.modules.system.service.errorcode.SysErrorCodeService; import com.google.common.annotations.VisibleForTesting; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -25,45 +25,46 @@ import java.util.List; import java.util.Map; import static cn.iocoder.dashboard.common.exception.util.ServiceExceptionUtil.exception; -import static cn.iocoder.dashboard.modules.infra.enums.InfErrorCodeConstants.ERROR_CODE_DUPLICATE; -import static cn.iocoder.dashboard.modules.infra.enums.InfErrorCodeConstants.ERROR_CODE_NOT_EXISTS; +import static cn.iocoder.dashboard.modules.system.enums.SysErrorCodeConstants.*; import static cn.iocoder.dashboard.util.collection.CollectionUtils.convertMap; import static cn.iocoder.dashboard.util.collection.CollectionUtils.convertSet; /** * 错误码 Service 实现类 + * + * @author dlyan */ @Service @Validated @Slf4j -public class InfErrorCodeServiceImpl implements InfErrorCodeService { +public class SysErrorCodeServiceImpl implements SysErrorCodeService { @Resource - private InfErrorCodeMapper errorCodeMapper; + private SysErrorCodeMapper errorCodeMapper; @Override - public Long createErrorCode(InfErrorCodeCreateReqVO createReqVO) { + public Long createErrorCode(SysErrorCodeCreateReqVO createReqVO) { // 校验 code 重复 validateCodeDuplicate(createReqVO.getCode(), null); // 插入 - InfErrorCodeDO errorCode = InfErrorCodeConvert.INSTANCE.convert(createReqVO) - .setType(InfErrorCodeTypeEnum.MANUAL_OPERATION.getType()); + SysErrorCodeDO errorCode = SysErrorCodeConvert.INSTANCE.convert(createReqVO) + .setType(SysErrorCodeTypeEnum.MANUAL_OPERATION.getType()); errorCodeMapper.insert(errorCode); // 返回 return errorCode.getId(); } @Override - public void updateErrorCode(InfErrorCodeUpdateReqVO updateReqVO) { + public void updateErrorCode(SysErrorCodeUpdateReqVO updateReqVO) { // 校验存在 this.validateErrorCodeExists(updateReqVO.getId()); // 校验 code 重复 validateCodeDuplicate(updateReqVO.getCode(), updateReqVO.getId()); // 更新 - InfErrorCodeDO updateObj = InfErrorCodeConvert.INSTANCE.convert(updateReqVO) - .setType(InfErrorCodeTypeEnum.MANUAL_OPERATION.getType()); + SysErrorCodeDO updateObj = SysErrorCodeConvert.INSTANCE.convert(updateReqVO) + .setType(SysErrorCodeTypeEnum.MANUAL_OPERATION.getType()); errorCodeMapper.updateById(updateObj); } @@ -85,7 +86,7 @@ public class InfErrorCodeServiceImpl implements InfErrorCodeService { */ @VisibleForTesting public void validateCodeDuplicate(Integer code, Long id) { - InfErrorCodeDO errorCodeDO = errorCodeMapper.selectByCode(code); + SysErrorCodeDO errorCodeDO = errorCodeMapper.selectByCode(code); if (errorCodeDO == null) { return; } @@ -106,17 +107,17 @@ public class InfErrorCodeServiceImpl implements InfErrorCodeService { } @Override - public InfErrorCodeDO getErrorCode(Long id) { + public SysErrorCodeDO getErrorCode(Long id) { return errorCodeMapper.selectById(id); } @Override - public PageResult getErrorCodePage(InfErrorCodePageReqVO pageReqVO) { + public PageResult getErrorCodePage(SysErrorCodePageReqVO pageReqVO) { return errorCodeMapper.selectPage(pageReqVO); } @Override - public List getErrorCodeList(InfErrorCodeExportReqVO exportReqVO) { + public List getErrorCodeList(SysErrorCodeExportReqVO exportReqVO) { return errorCodeMapper.selectList(exportReqVO); } @@ -127,23 +128,23 @@ public class InfErrorCodeServiceImpl implements InfErrorCodeService { return; } // 获得错误码 - List errorCodeDOs = errorCodeMapper.selectListByCodes( + List errorCodeDOs = errorCodeMapper.selectListByCodes( convertSet(autoGenerateDTOs, ErrorCodeAutoGenerateReqDTO::getCode)); - Map errorCodeDOMap = convertMap(errorCodeDOs, InfErrorCodeDO::getCode); + Map errorCodeDOMap = convertMap(errorCodeDOs, SysErrorCodeDO::getCode); // 遍历 autoGenerateBOs 数组,逐个插入或更新。考虑到每次量级不大,就不走批量了 autoGenerateDTOs.forEach(autoGenerateDTO -> { - InfErrorCodeDO errorCodeDO = errorCodeDOMap.get(autoGenerateDTO.getCode()); + SysErrorCodeDO errorCodeDO = errorCodeDOMap.get(autoGenerateDTO.getCode()); // 不存在,则进行新增 if (errorCodeDO == null) { - errorCodeDO = InfErrorCodeConvert.INSTANCE.convert(autoGenerateDTO) - .setType(InfErrorCodeTypeEnum.AUTO_GENERATION.getType()); + errorCodeDO = SysErrorCodeConvert.INSTANCE.convert(autoGenerateDTO) + .setType(SysErrorCodeTypeEnum.AUTO_GENERATION.getType()); errorCodeMapper.insert(errorCodeDO); return; } // 存在,则进行更新。更新有三个前置条件: // 条件 1. 只更新自动生成的错误码,即 Type 为 ErrorCodeTypeEnum.AUTO_GENERATION - if (!InfErrorCodeTypeEnum.AUTO_GENERATION.getType().equals(errorCodeDO.getType())) { + if (!SysErrorCodeTypeEnum.AUTO_GENERATION.getType().equals(errorCodeDO.getType())) { return; } // 条件 2. 分组 group 必须匹配,避免存在错误码冲突的情况 @@ -158,15 +159,15 @@ public class InfErrorCodeServiceImpl implements InfErrorCodeService { return; } // 最终匹配,进行更新 - errorCodeMapper.updateById(new InfErrorCodeDO().setId(errorCodeDO.getId()).setMessage(autoGenerateDTO.getMessage())); + errorCodeMapper.updateById(new SysErrorCodeDO().setId(errorCodeDO.getId()).setMessage(autoGenerateDTO.getMessage())); }); } @Override public List getErrorCodeList(String applicationName, Date minUpdateTime) { - List errorCodeDOs = errorCodeMapper.selectListByApplicationNameAndUpdateTimeGt( + List errorCodeDOs = errorCodeMapper.selectListByApplicationNameAndUpdateTimeGt( applicationName, minUpdateTime); - return InfErrorCodeConvert.INSTANCE.convertList03(errorCodeDOs); + return SysErrorCodeConvert.INSTANCE.convertList03(errorCodeDOs); } } diff --git a/src/test/java/cn/iocoder/dashboard/modules/infra/service/errorcode/InfErrorCodeServiceTest.java b/src/test/java/cn/iocoder/dashboard/modules/system/service/errorcode/SysErrorCodeServiceTest.java similarity index 67% rename from src/test/java/cn/iocoder/dashboard/modules/infra/service/errorcode/InfErrorCodeServiceTest.java rename to src/test/java/cn/iocoder/dashboard/modules/system/service/errorcode/SysErrorCodeServiceTest.java index 1fe1b4712..300fc1627 100644 --- a/src/test/java/cn/iocoder/dashboard/modules/infra/service/errorcode/InfErrorCodeServiceTest.java +++ b/src/test/java/cn/iocoder/dashboard/modules/system/service/errorcode/SysErrorCodeServiceTest.java @@ -1,16 +1,16 @@ -package cn.iocoder.dashboard.modules.infra.service.errorcode; +package cn.iocoder.dashboard.modules.system.service.errorcode; import cn.iocoder.dashboard.BaseDbUnitTest; import cn.iocoder.dashboard.common.pojo.PageResult; -import cn.iocoder.dashboard.modules.infra.controller.errorcode.vo.InfErrorCodeCreateReqVO; -import cn.iocoder.dashboard.modules.infra.controller.errorcode.vo.InfErrorCodeExportReqVO; -import cn.iocoder.dashboard.modules.infra.controller.errorcode.vo.InfErrorCodePageReqVO; -import cn.iocoder.dashboard.modules.infra.controller.errorcode.vo.InfErrorCodeUpdateReqVO; -import cn.iocoder.dashboard.modules.infra.dal.dataobject.errorcode.InfErrorCodeDO; -import cn.iocoder.dashboard.modules.infra.dal.mysql.errorcode.InfErrorCodeMapper; +import cn.iocoder.dashboard.modules.system.controller.errorcode.vo.SysErrorCodeCreateReqVO; +import cn.iocoder.dashboard.modules.system.controller.errorcode.vo.SysErrorCodeExportReqVO; +import cn.iocoder.dashboard.modules.system.controller.errorcode.vo.SysErrorCodePageReqVO; +import cn.iocoder.dashboard.modules.system.controller.errorcode.vo.SysErrorCodeUpdateReqVO; +import cn.iocoder.dashboard.modules.system.dal.dataobject.errorcode.SysErrorCodeDO; +import cn.iocoder.dashboard.modules.system.dal.mysql.errorcode.SysErrorCodeMapper; import cn.iocoder.dashboard.modules.infra.enums.config.InfConfigTypeEnum; -import cn.iocoder.dashboard.modules.infra.enums.errorcode.InfErrorCodeTypeEnum; -import cn.iocoder.dashboard.modules.infra.service.errorcode.impl.InfErrorCodeServiceImpl; +import cn.iocoder.dashboard.modules.system.enums.errorcode.SysErrorCodeTypeEnum; +import cn.iocoder.dashboard.modules.system.service.errorcode.impl.SysErrorCodeServiceImpl; import cn.iocoder.dashboard.util.collection.ArrayUtils; import cn.iocoder.dashboard.util.object.ObjectUtils; import org.junit.jupiter.api.Test; @@ -21,8 +21,7 @@ import java.util.List; import java.util.function.Consumer; import static cn.hutool.core.util.RandomUtil.randomEle; -import static cn.iocoder.dashboard.modules.infra.enums.InfErrorCodeConstants.ERROR_CODE_DUPLICATE; -import static cn.iocoder.dashboard.modules.infra.enums.InfErrorCodeConstants.ERROR_CODE_NOT_EXISTS; +import static cn.iocoder.dashboard.modules.system.enums.SysErrorCodeConstants.*; import static cn.iocoder.dashboard.util.AssertUtils.assertPojoEquals; import static cn.iocoder.dashboard.util.AssertUtils.assertServiceException; import static cn.iocoder.dashboard.util.RandomUtils.*; @@ -30,56 +29,56 @@ import static cn.iocoder.dashboard.util.date.DateUtils.buildTime; import static org.junit.jupiter.api.Assertions.*; /** -* {@link InfErrorCodeServiceImpl} 的单元测试类 +* {@link SysErrorCodeServiceImpl} 的单元测试类 * * @author 芋道源码 */ -@Import(InfErrorCodeServiceImpl.class) -public class InfErrorCodeServiceTest extends BaseDbUnitTest { +@Import(SysErrorCodeServiceImpl.class) +public class SysErrorCodeServiceTest extends BaseDbUnitTest { @Resource - private InfErrorCodeServiceImpl errorCodeService; + private SysErrorCodeServiceImpl errorCodeService; @Resource - private InfErrorCodeMapper errorCodeMapper; + private SysErrorCodeMapper errorCodeMapper; @Test public void testCreateErrorCode_success() { // 准备参数 - InfErrorCodeCreateReqVO reqVO = randomPojo(InfErrorCodeCreateReqVO.class); + SysErrorCodeCreateReqVO reqVO = randomPojo(SysErrorCodeCreateReqVO.class); // 调用 Long errorCodeId = errorCodeService.createErrorCode(reqVO); // 断言 assertNotNull(errorCodeId); // 校验记录的属性是否正确 - InfErrorCodeDO errorCode = errorCodeMapper.selectById(errorCodeId); + SysErrorCodeDO errorCode = errorCodeMapper.selectById(errorCodeId); assertPojoEquals(reqVO, errorCode); - assertEquals(InfErrorCodeTypeEnum.MANUAL_OPERATION.getType(), errorCode.getType()); + assertEquals(SysErrorCodeTypeEnum.MANUAL_OPERATION.getType(), errorCode.getType()); } @Test public void testUpdateErrorCode_success() { // mock 数据 - InfErrorCodeDO dbErrorCode = randomInfErrorCodeDO(); + SysErrorCodeDO dbErrorCode = randomInfErrorCodeDO(); errorCodeMapper.insert(dbErrorCode);// @Sql: 先插入出一条存在的数据 // 准备参数 - InfErrorCodeUpdateReqVO reqVO = randomPojo(InfErrorCodeUpdateReqVO.class, o -> { + SysErrorCodeUpdateReqVO reqVO = randomPojo(SysErrorCodeUpdateReqVO.class, o -> { o.setId(dbErrorCode.getId()); // 设置更新的 ID }); // 调用 errorCodeService.updateErrorCode(reqVO); // 校验是否更新正确 - InfErrorCodeDO errorCode = errorCodeMapper.selectById(reqVO.getId()); // 获取最新的 + SysErrorCodeDO errorCode = errorCodeMapper.selectById(reqVO.getId()); // 获取最新的 assertPojoEquals(reqVO, errorCode); - assertEquals(InfErrorCodeTypeEnum.MANUAL_OPERATION.getType(), errorCode.getType()); + assertEquals(SysErrorCodeTypeEnum.MANUAL_OPERATION.getType(), errorCode.getType()); } @Test public void testDeleteErrorCode_success() { // mock 数据 - InfErrorCodeDO dbErrorCode = randomInfErrorCodeDO(); + SysErrorCodeDO dbErrorCode = randomInfErrorCodeDO(); errorCodeMapper.insert(dbErrorCode);// @Sql: 先插入出一条存在的数据 // 准备参数 Long id = dbErrorCode.getId(); @@ -93,10 +92,10 @@ public class InfErrorCodeServiceTest extends BaseDbUnitTest { @Test public void testGetErrorCodePage() { // mock 数据 - InfErrorCodeDO dbErrorCode = initGetErrorCodePage(); + SysErrorCodeDO dbErrorCode = initGetErrorCodePage(); // 准备参数 - InfErrorCodePageReqVO reqVO = new InfErrorCodePageReqVO(); - reqVO.setType(InfErrorCodeTypeEnum.AUTO_GENERATION.getType()); + SysErrorCodePageReqVO reqVO = new SysErrorCodePageReqVO(); + reqVO.setType(SysErrorCodeTypeEnum.AUTO_GENERATION.getType()); reqVO.setApplicationName("yudao"); reqVO.setCode(1); reqVO.setMessage("yu"); @@ -104,7 +103,7 @@ public class InfErrorCodeServiceTest extends BaseDbUnitTest { reqVO.setEndCreateTime(buildTime(2020, 11, 30)); // 调用 - PageResult pageResult = errorCodeService.getErrorCodePage(reqVO); + PageResult pageResult = errorCodeService.getErrorCodePage(reqVO); // 断言 assertEquals(1, pageResult.getTotal()); assertEquals(1, pageResult.getList().size()); @@ -114,9 +113,9 @@ public class InfErrorCodeServiceTest extends BaseDbUnitTest { /** * 初始化 getErrorCodePage 方法的测试数据 */ - private InfErrorCodeDO initGetErrorCodePage() { - InfErrorCodeDO dbErrorCode = randomInfErrorCodeDO(o -> { // 等会查询到 - o.setType(InfErrorCodeTypeEnum.AUTO_GENERATION.getType()); + private SysErrorCodeDO initGetErrorCodePage() { + SysErrorCodeDO dbErrorCode = randomInfErrorCodeDO(o -> { // 等会查询到 + o.setType(SysErrorCodeTypeEnum.AUTO_GENERATION.getType()); o.setApplicationName("yudaoyuanma"); o.setCode(1); o.setMessage("yudao"); @@ -124,7 +123,7 @@ public class InfErrorCodeServiceTest extends BaseDbUnitTest { }); errorCodeMapper.insert(dbErrorCode); // 测试 type 不匹配 - errorCodeMapper.insert(ObjectUtils.clone(dbErrorCode, o -> o.setType(InfErrorCodeTypeEnum.MANUAL_OPERATION.getType()))); + errorCodeMapper.insert(ObjectUtils.clone(dbErrorCode, o -> o.setType(SysErrorCodeTypeEnum.MANUAL_OPERATION.getType()))); // 测试 applicationName 不匹配 errorCodeMapper.insert(ObjectUtils.clone(dbErrorCode, o -> o.setApplicationName("yunai"))); // 测试 code 不匹配 @@ -139,10 +138,10 @@ public class InfErrorCodeServiceTest extends BaseDbUnitTest { @Test public void testGetErrorCodeList() { // mock 数据 - InfErrorCodeDO dbErrorCode = initGetErrorCodePage(); + SysErrorCodeDO dbErrorCode = initGetErrorCodePage(); // 准备参数 - InfErrorCodeExportReqVO reqVO = new InfErrorCodeExportReqVO(); - reqVO.setType(InfErrorCodeTypeEnum.AUTO_GENERATION.getType()); + SysErrorCodeExportReqVO reqVO = new SysErrorCodeExportReqVO(); + reqVO.setType(SysErrorCodeTypeEnum.AUTO_GENERATION.getType()); reqVO.setApplicationName("yudao"); reqVO.setCode(1); reqVO.setMessage("yu"); @@ -150,7 +149,7 @@ public class InfErrorCodeServiceTest extends BaseDbUnitTest { reqVO.setEndCreateTime(buildTime(2020, 11, 30)); // 调用 - List list = errorCodeService.getErrorCodeList(reqVO); + List list = errorCodeService.getErrorCodeList(reqVO); // 断言 assertEquals(1, list.size()); assertPojoEquals(dbErrorCode, list.get(0)); @@ -190,11 +189,11 @@ public class InfErrorCodeServiceTest extends BaseDbUnitTest { // ========== 随机对象 ========== @SafeVarargs - private static InfErrorCodeDO randomInfErrorCodeDO(Consumer... consumers) { - Consumer consumer = (o) -> { + private static SysErrorCodeDO randomInfErrorCodeDO(Consumer... consumers) { + Consumer consumer = (o) -> { o.setType(randomEle(InfConfigTypeEnum.values()).getType()); // 保证 key 的范围 }; - return randomPojo(InfErrorCodeDO.class, ArrayUtils.append(consumer, consumers)); + return randomPojo(SysErrorCodeDO.class, ArrayUtils.append(consumer, consumers)); } } diff --git a/src/test/resources/sql/clean.sql b/src/test/resources/sql/clean.sql index 47b84c62b..78f02ee4f 100644 --- a/src/test/resources/sql/clean.sql +++ b/src/test/resources/sql/clean.sql @@ -5,7 +5,6 @@ DELETE FROM "inf_job"; DELETE FROM "inf_job_log"; DELETE FROM "inf_api_access_log"; DELETE FROM "inf_api_error_log"; -DELETE FROM "inf_error_code"; -- sys 开头的 DB DELETE FROM "sys_dept"; @@ -23,3 +22,4 @@ DELETE FROM "sys_user"; DELETE FROM "sys_sms_channel"; DELETE FROM "sys_sms_template"; DELETE FROM "sys_sms_log"; +DELETE FROM "sys_error_code"; diff --git a/src/test/resources/sql/create_tables.sql b/src/test/resources/sql/create_tables.sql index cf89b64b6..b9060373d 100644 --- a/src/test/resources/sql/create_tables.sql +++ b/src/test/resources/sql/create_tables.sql @@ -412,7 +412,7 @@ CREATE TABLE IF NOT EXISTS "sys_sms_log" ( PRIMARY KEY ("id") ) COMMENT '短信日志'; -CREATE TABLE IF NOT EXISTS "inf_error_code" ( +CREATE TABLE IF NOT EXISTS "sys_error_code" ( "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, "type" tinyint NOT NULL DEFAULT '0', "application_name" varchar(50) NOT NULL, From 49a386d7be172af79432694ab7795f1c3ff7d102 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Thu, 22 Apr 2021 00:49:20 +0800 Subject: [PATCH 13/13] =?UTF-8?q?=E9=94=99=E8=AF=AF=E7=A0=81=E6=A8=A1?= =?UTF-8?q?=E5=9D=97=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 6 +- ruoyi-ui/src/views/system/errorCode/index.vue | 4 +- sql/ruoyi-vue-pro.sql | 156 ++++++++++++++++-- .../generator/ErrorCodeAutoGeneratorImpl.java | 8 +- .../impl/SysErrorCodeServiceImpl.java | 2 +- .../errorcode/SysErrorCodeServiceTest.java | 110 +++++++++++- 6 files changed, 261 insertions(+), 25 deletions(-) diff --git a/README.md b/README.md index 727f996f2..96ca78d1f 100644 --- a/README.md +++ b/README.md @@ -37,7 +37,8 @@ | | 字典管理 | 对系统中经常使用的一些较为固定的数据进行维护 | | 🚀 | 短信管理 | 短信渠道、短息模板、短信日志,对接阿里云、云片等主流短信平台 | | 🚀 | 操作日志 | 系统正常操作日志记录和查询,集成 Swagger 生成日志内容 | -| | 登录日志 | 系统登录日志记录查询包含登录异常 | +| | 登录日志 | 系统登录日志记录查询,包含登录异常 | +| 🚀 | 错误码管理 | 系统所有错误码的管理,可在线修改错误提示,无需重启服务 | | | 通知公告 | 系统通知公告信息发布维护 | 计划新增功能: @@ -53,7 +54,7 @@ | 🚀 | 文件服务 | 支持本地文件存储,同时支持兼容 Amazon S3 协议的云服务、开源组件 | | 🚀 | API 日志 | 包括 RESTful API 访问日志、异常日志两部分,方便排查 API 相关的问题 | | | MySQL 监控 | 监视当前系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈 | -| | Redis 监控 |监控 Redis 数据库的使用情况,使用的 Redis Key 管理 | +| | Redis 监控 |监控 Redis 数据库的使用情况,使用的 Redis Key 管理 | | 🚀 |Java 监控 | 基于 Spring Boot Admin 实现 Java 应用的监控 | | 🚀 | 链路追踪 | 基于 SkyWalking 实现性能监控,特别是链路的追踪 | | 🚀 | 分布式锁 | 基于 Redis 实现分布式锁,满足并发场景 | @@ -64,7 +65,6 @@ 计划新增: * 工作流 -* 错误码 ### 研发工具 diff --git a/ruoyi-ui/src/views/system/errorCode/index.vue b/ruoyi-ui/src/views/system/errorCode/index.vue index 498fa5458..8ec5aa8fd 100644 --- a/ruoyi-ui/src/views/system/errorCode/index.vue +++ b/ruoyi-ui/src/views/system/errorCode/index.vue @@ -43,8 +43,8 @@ - - + + diff --git a/sql/ruoyi-vue-pro.sql b/sql/ruoyi-vue-pro.sql index af8d23d3e..ea6420a2d 100644 --- a/sql/ruoyi-vue-pro.sql +++ b/sql/ruoyi-vue-pro.sql @@ -11,7 +11,7 @@ Target Server Version : 50718 File Encoding : 65001 - Date: 18/04/2021 00:36:06 + Date: 22/04/2021 00:48:26 */ SET NAMES utf8mb4; @@ -43,7 +43,7 @@ CREATE TABLE `inf_api_access_log` ( `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=3750 DEFAULT CHARSET=utf8mb4 COMMENT='API 访问日志表'; +) ENGINE=InnoDB AUTO_INCREMENT=4229 DEFAULT CHARSET=utf8mb4 COMMENT='API 访问日志表'; -- ---------------------------- -- Records of inf_api_access_log @@ -84,7 +84,7 @@ CREATE TABLE `inf_api_error_log` ( `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COMMENT='系统异常日志'; +) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COMMENT='系统异常日志'; -- ---------------------------- -- Records of inf_api_error_log @@ -118,7 +118,7 @@ CREATE TABLE `inf_config` ( -- ---------------------------- BEGIN; INSERT INTO `inf_config` VALUES (1, 'ui', 1, '主框架页-默认皮肤样式名称', 'sys.index.skinName', 'skin-blue', b'0', '蓝色 skin-blue、绿色 skin-green、紫色 skin-purple、红色 skin-red、黄色 skin-yellow', 'admin', '2021-01-05 17:03:48', '', '2021-01-05 17:03:48', b'0'); -INSERT INTO `inf_config` VALUES (2, 'biz', 1, '用户管理-账号初始密码', 'sys.user.initPassword', '123456', b'0', '初始化密码 123456', 'admin', '2021-01-05 17:03:48', '', '2021-01-21 02:13:02', b'0'); +INSERT INTO `inf_config` VALUES (2, 'biz', 1, '用户管理-账号初始密码', 'sys.user.init-password', '123456', b'0', '初始化密码 123456', 'admin', '2021-01-05 17:03:48', '', '2021-04-13 03:48:02', b'0'); INSERT INTO `inf_config` VALUES (3, 'ui', 1, '主框架页-侧边栏主题', 'sys.index.sideTheme', 'theme-dark', b'0', '深色主题theme-dark,浅色主题theme-light', 'admin', '2021-01-05 17:03:48', '', '2021-01-19 03:05:21', b'0'); INSERT INTO `inf_config` VALUES (4, '1', 2, 'xxx', 'demo.test', '10', b'0', '5', '', '2021-01-19 03:10:26', '', '2021-01-20 09:25:55', b'0'); INSERT INTO `inf_config` VALUES (5, 'xxx', 2, 'xxx', 'xxx', 'xxx', b'1', 'xxx', '', '2021-02-09 20:06:47', '', '2021-02-09 20:06:47', b'0'); @@ -201,7 +201,7 @@ CREATE TABLE `inf_job_log` ( `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=2322 DEFAULT CHARSET=utf8mb4 COMMENT='定时任务日志表'; +) ENGINE=InnoDB AUTO_INCREMENT=2527 DEFAULT CHARSET=utf8mb4 COMMENT='定时任务日志表'; -- ---------------------------- -- Records of inf_job_log @@ -264,7 +264,7 @@ CREATE TABLE `sys_dict_data` ( `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=78 DEFAULT CHARSET=utf8mb4 COMMENT='字典数据表'; +) ENGINE=InnoDB AUTO_INCREMENT=80 DEFAULT CHARSET=utf8mb4 COMMENT='字典数据表'; -- ---------------------------- -- Records of sys_dict_data @@ -337,6 +337,8 @@ INSERT INTO `sys_dict_data` VALUES (74, 0, '等待结果', '0', 'sys_sms_receive INSERT INTO `sys_dict_data` VALUES (75, 1, '接收成功', '10', 'sys_sms_receive_status', 0, NULL, '1', '2021-04-11 20:29:25', '1', '2021-04-11 20:29:35', b'0'); INSERT INTO `sys_dict_data` VALUES (76, 2, '接收失败', '20', 'sys_sms_receive_status', 0, NULL, '1', '2021-04-11 20:29:31', '1', '2021-04-11 20:29:39', b'0'); INSERT INTO `sys_dict_data` VALUES (77, 0, '调试(钉钉)', 'DEBUG_DING_TALK', 'sys_sms_channel_code', 0, NULL, '1', '2021-04-13 00:20:37', '1', '2021-04-13 00:20:37', b'0'); +INSERT INTO `sys_dict_data` VALUES (78, 1, '自动生成', '1', 'sys_error_code_type', 0, NULL, '1', '2021-04-21 00:06:48', '1', '2021-04-13 22:06:44', b'0'); +INSERT INTO `sys_dict_data` VALUES (79, 2, '手动编辑', '2', 'sys_error_code_type', 0, NULL, '1', '2021-04-21 00:07:14', '1', '2021-04-13 22:06:49', b'0'); COMMIT; -- ---------------------------- @@ -356,7 +358,7 @@ CREATE TABLE `sys_dict_type` ( `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', PRIMARY KEY (`id`) USING BTREE, UNIQUE KEY `dict_type` (`type`) -) ENGINE=InnoDB AUTO_INCREMENT=115 DEFAULT CHARSET=utf8mb4 COMMENT='字典类型表'; +) ENGINE=InnoDB AUTO_INCREMENT=116 DEFAULT CHARSET=utf8mb4 COMMENT='字典类型表'; -- ---------------------------- -- Records of sys_dict_type @@ -383,6 +385,109 @@ INSERT INTO `sys_dict_type` VALUES (111, '短信渠道编码', 'sys_sms_channel_ INSERT INTO `sys_dict_type` VALUES (112, '短信模板的类型', 'sys_sms_template_type', 0, NULL, '1', '2021-04-05 21:50:43', '1', '2021-04-05 21:50:43', b'0'); INSERT INTO `sys_dict_type` VALUES (113, '短信发送状态', 'sys_sms_send_status', 0, NULL, '1', '2021-04-11 20:18:03', '1', '2021-04-11 09:30:02', b'0'); INSERT INTO `sys_dict_type` VALUES (114, '短信接收状态', 'sys_sms_receive_status', 0, NULL, '1', '2021-04-11 20:27:14', '1', '2021-04-11 20:27:14', b'0'); +INSERT INTO `sys_dict_type` VALUES (115, '错误码的类型', 'sys_error_code_type', 0, NULL, '1', '2021-04-21 00:06:30', '1', '2021-04-13 22:07:12', b'0'); +COMMIT; + +-- ---------------------------- +-- Table structure for sys_error_code +-- ---------------------------- +DROP TABLE IF EXISTS `sys_error_code`; +CREATE TABLE `sys_error_code` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '错误码编号', + `type` tinyint(4) NOT NULL DEFAULT '0' COMMENT '错误码类型', + `application_name` varchar(50) NOT NULL COMMENT '应用名', + `code` int(11) NOT NULL DEFAULT '0' COMMENT '错误码编码', + `message` varchar(512) NOT NULL DEFAULT '' COMMENT '错误码错误提示', + `memo` varchar(512) DEFAULT '' COMMENT '备注', + `creator` varchar(64) DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) DEFAULT '' COMMENT '更新者', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=4016 DEFAULT CHARSET=utf8mb4 COMMENT='错误码表'; + +-- ---------------------------- +-- Records of sys_error_code +-- ---------------------------- +BEGIN; +INSERT INTO `sys_error_code` VALUES (3939, 2, 'dashboard', 1001000001, '参数配置不存在', 'ceshi', NULL, '2021-04-20 23:52:56', '1', '2021-04-21 23:44:15', b'0'); +INSERT INTO `sys_error_code` VALUES (3940, 1, 'dashboard', 1001000002, '参数配置 key 重复', '', NULL, '2021-04-20 23:52:56', NULL, '2021-04-20 23:52:56', b'0'); +INSERT INTO `sys_error_code` VALUES (3941, 1, 'dashboard', 1001000003, '不能删除类型为系统内置的参数配置', '', NULL, '2021-04-20 23:52:56', NULL, '2021-04-20 23:52:56', b'0'); +INSERT INTO `sys_error_code` VALUES (3942, 1, 'dashboard', 1001000004, '不允许获取敏感配置到前端', '', NULL, '2021-04-20 23:52:56', NULL, '2021-04-20 23:52:56', b'0'); +INSERT INTO `sys_error_code` VALUES (3943, 1, 'dashboard', 1001001000, '定时任务不存在', '', NULL, '2021-04-20 23:52:56', NULL, '2021-04-20 23:52:56', b'0'); +INSERT INTO `sys_error_code` VALUES (3944, 1, 'dashboard', 1001001001, '定时任务的处理器已经存在', '', NULL, '2021-04-20 23:52:56', NULL, '2021-04-20 23:52:56', b'0'); +INSERT INTO `sys_error_code` VALUES (3945, 1, 'dashboard', 1001001002, '只允许修改为开启或者关闭状态', '', NULL, '2021-04-20 23:52:56', NULL, '2021-04-20 23:52:56', b'0'); +INSERT INTO `sys_error_code` VALUES (3946, 1, 'dashboard', 1001001003, '定时任务已经处于该状态,无需修改', '', NULL, '2021-04-20 23:52:56', NULL, '2021-04-20 23:52:56', b'0'); +INSERT INTO `sys_error_code` VALUES (3947, 1, 'dashboard', 1001001004, '只有开启状态的任务,才可以修改', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); +INSERT INTO `sys_error_code` VALUES (3948, 1, 'dashboard', 1001001005, 'CRON 表达式不正确', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); +INSERT INTO `sys_error_code` VALUES (3949, 2, 'dashboard', 1001002000, 'API 错误日志不存在', '', NULL, '2021-04-20 23:52:57', '1', '2021-04-13 21:55:55', b'1'); +INSERT INTO `sys_error_code` VALUES (3950, 1, 'dashboard', 1001002001, 'API 错误日志已处理', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); +INSERT INTO `sys_error_code` VALUES (3951, 1, 'dashboard', 1001003000, '文件不存在', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); +INSERT INTO `sys_error_code` VALUES (3952, 1, 'dashboard', 1002000000, '登录失败,账号密码不正确', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); +INSERT INTO `sys_error_code` VALUES (3953, 1, 'dashboard', 1002000001, '登录失败,账号被禁用', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); +INSERT INTO `sys_error_code` VALUES (3954, 1, 'dashboard', 1002000002, '登录失败', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); +INSERT INTO `sys_error_code` VALUES (3955, 1, 'dashboard', 1002000003, '验证码不存在', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); +INSERT INTO `sys_error_code` VALUES (3956, 1, 'dashboard', 1002000004, '验证码不正确', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); +INSERT INTO `sys_error_code` VALUES (3957, 1, 'dashboard', 1002001000, 'Token 已经过期', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); +INSERT INTO `sys_error_code` VALUES (3958, 1, 'dashboard', 1002001001, 'Token 解析失败', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); +INSERT INTO `sys_error_code` VALUES (3959, 1, 'dashboard', 1002002000, '已经存在该名字的菜单', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); +INSERT INTO `sys_error_code` VALUES (3960, 1, 'dashboard', 1002002001, '父菜单不存在', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); +INSERT INTO `sys_error_code` VALUES (3961, 1, 'dashboard', 1002002002, '不能设置自己为父菜单', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); +INSERT INTO `sys_error_code` VALUES (3962, 1, 'dashboard', 1002002003, '菜单不存在', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); +INSERT INTO `sys_error_code` VALUES (3963, 1, 'dashboard', 1002002004, '存在子菜单,无法删除', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); +INSERT INTO `sys_error_code` VALUES (3964, 1, 'dashboard', 1002002005, '父菜单的类型必须是目录或者菜单', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); +INSERT INTO `sys_error_code` VALUES (3965, 1, 'dashboard', 1002003000, '角色不存在', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); +INSERT INTO `sys_error_code` VALUES (3966, 1, 'dashboard', 1002003001, '已经存在名为【{}】的角色', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); +INSERT INTO `sys_error_code` VALUES (3967, 1, 'dashboard', 1002003002, '已经存在编码为【{}】的角色', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); +INSERT INTO `sys_error_code` VALUES (3968, 1, 'dashboard', 1002003004, '不能操作类型为系统内置的角色', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); +INSERT INTO `sys_error_code` VALUES (3969, 1, 'dashboard', 1002004000, '用户账号已经存在', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); +INSERT INTO `sys_error_code` VALUES (3970, 1, 'dashboard', 1002004001, '已经存在该名字的部门', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-22 00:04:06', b'0'); +INSERT INTO `sys_error_code` VALUES (3971, 1, 'dashboard', 1002004002, '父级部门不存在', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-22 00:04:06', b'0'); +INSERT INTO `sys_error_code` VALUES (3972, 1, 'dashboard', 1002004003, '用户不存在', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-22 00:04:06', b'0'); +INSERT INTO `sys_error_code` VALUES (3973, 1, 'dashboard', 1002004004, '存在子部门,无法删除', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-22 00:04:06', b'0'); +INSERT INTO `sys_error_code` VALUES (3974, 1, 'dashboard', 1002004005, '不能设置自己为父部门', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-22 00:04:06', b'0'); +INSERT INTO `sys_error_code` VALUES (3975, 1, 'dashboard', 1002004001, '已经存在该名字的部门', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); +INSERT INTO `sys_error_code` VALUES (3976, 1, 'dashboard', 1002004002, '父级部门不存在', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); +INSERT INTO `sys_error_code` VALUES (3977, 1, 'dashboard', 1002004003, '当前部门不存在', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); +INSERT INTO `sys_error_code` VALUES (3978, 1, 'dashboard', 1002004004, '存在子部门,无法删除', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); +INSERT INTO `sys_error_code` VALUES (3979, 1, 'dashboard', 1002004005, '不能设置自己为父部门', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); +INSERT INTO `sys_error_code` VALUES (3980, 1, 'dashboard', 1002004006, '部门中存在员工,无法删除', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); +INSERT INTO `sys_error_code` VALUES (3981, 1, 'dashboard', 1002004007, '部门不处于开启状态,不允许选择', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); +INSERT INTO `sys_error_code` VALUES (3982, 1, 'dashboard', 1002004008, '不能设置自己的子部门为父部门', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); +INSERT INTO `sys_error_code` VALUES (3983, 1, 'dashboard', 1002005001, '已经存在该标识的岗位', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-22 00:04:06', b'0'); +INSERT INTO `sys_error_code` VALUES (3984, 1, 'dashboard', 1002005002, '岗位({}) 不处于开启状态,不允许选择', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); +INSERT INTO `sys_error_code` VALUES (3985, 1, 'dashboard', 1002005001, '已经存在该名字的岗位', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); +INSERT INTO `sys_error_code` VALUES (3986, 1, 'dashboard', 1002005001, '已经存在该标识的岗位', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); +INSERT INTO `sys_error_code` VALUES (3987, 1, 'dashboard', 1002006001, '当前字典类型不存在', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); +INSERT INTO `sys_error_code` VALUES (3988, 1, 'dashboard', 1002006002, '字典类型不处于开启状态,不允许选择', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); +INSERT INTO `sys_error_code` VALUES (3989, 1, 'dashboard', 1002006003, '已经存在该名字的字典类型', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); +INSERT INTO `sys_error_code` VALUES (3990, 1, 'dashboard', 1002006004, '无法删除,该字典类型还有字典数据', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-22 00:04:06', b'0'); +INSERT INTO `sys_error_code` VALUES (3991, 1, 'dashboard', 1002006004, '无法删除,该字典类型还有字典数据', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); +INSERT INTO `sys_error_code` VALUES (3992, 1, 'dashboard', 1002007001, '当前字典数据不存在', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); +INSERT INTO `sys_error_code` VALUES (3993, 1, 'dashboard', 1002007002, '字典数据不处于开启状态,不允许选择', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); +INSERT INTO `sys_error_code` VALUES (3994, 1, 'dashboard', 1002007003, '已经存在该值的字典数据', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); +INSERT INTO `sys_error_code` VALUES (3995, 1, 'dashboard', 1002008001, '当前通知公告不存在', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); +INSERT INTO `sys_error_code` VALUES (3996, 1, 'dashboard', 1002009001, '文件路径已经存在', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-21 00:03:20', b'0'); +INSERT INTO `sys_error_code` VALUES (3997, 1, 'dashboard', 1002009002, '文件上传失败', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); +INSERT INTO `sys_error_code` VALUES (3998, 1, 'dashboard', 1002009003, '文件为空', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); +INSERT INTO `sys_error_code` VALUES (3999, 1, 'dashboard', 1002011000, '短信模板不存在', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-22 00:04:06', b'0'); +INSERT INTO `sys_error_code` VALUES (4000, 1, 'dashboard', 1002011001, '已经存在编码为【{}】的短信模板', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-22 00:04:06', b'0'); +INSERT INTO `sys_error_code` VALUES (4001, 2, 'dashboard', 1002011002, '无法删除,该短信渠道还有短信模板', '', NULL, '2021-04-20 23:52:57', '1', '2021-04-22 00:06:52', b'0'); +INSERT INTO `sys_error_code` VALUES (4002, 1, 'dashboard', 1002011000, '短信模板不存在', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); +INSERT INTO `sys_error_code` VALUES (4003, 1, 'dashboard', 1002011001, '已经存在编码为【{}】的短信模板', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); +INSERT INTO `sys_error_code` VALUES (4004, 1, 'dashboard', 1002012000, '手机号不存在', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); +INSERT INTO `sys_error_code` VALUES (4005, 1, 'dashboard', 1002012001, '模板参数({})缺失', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); +INSERT INTO `sys_error_code` VALUES (4006, 1, 'dashboard', 1002009000, '错误码不存在', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); +INSERT INTO `sys_error_code` VALUES (4007, 1, 'dashboard', 1002009001, '已经存在编码为【{}}】的错误码', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); +INSERT INTO `sys_error_code` VALUES (4008, 1, 'dashboard', 1002004003, '不能修改类型为系统内置的错误码', '', NULL, '2021-04-20 23:52:57', NULL, '2021-04-20 23:52:57', b'0'); +INSERT INTO `sys_error_code` VALUES (4009, 1, 'dashboard', 1001004000, '错误码不存在', '', NULL, '2021-04-21 00:38:01', NULL, '2021-04-21 00:38:01', b'0'); +INSERT INTO `sys_error_code` VALUES (4010, 1, 'dashboard', 1001004001, '已经存在编码为【{}】的错误码', '', NULL, '2021-04-21 00:38:01', NULL, '2021-04-21 23:48:44', b'0'); +INSERT INTO `sys_error_code` VALUES (4011, 1, 'dashboard', 1001004002, '不能修改类型为系统内置的错误码', '', NULL, '2021-04-21 00:38:01', NULL, '2021-04-21 00:38:01', b'0'); +INSERT INTO `sys_error_code` VALUES (4012, 2, 'dashboard', 1201002000, '啦啦啦啦', 'biubiub', '1', '2021-04-21 23:46:02', '1', '2021-04-21 23:46:02', b'0'); +INSERT INTO `sys_error_code` VALUES (4013, 1, 'dashboard', 1001002000, 'API 错误日志不存在', '', NULL, '2021-04-21 23:48:44', NULL, '2021-04-21 23:48:44', b'0'); +INSERT INTO `sys_error_code` VALUES (4014, 1, 'dashboard', 1002013000, '错误码不存在', '', NULL, '2021-04-22 00:04:06', NULL, '2021-04-22 00:04:06', b'0'); +INSERT INTO `sys_error_code` VALUES (4015, 1, 'dashboard', 1002013001, '已经存在编码为【{}】的错误码', '', NULL, '2021-04-22 00:04:06', NULL, '2021-04-22 00:04:06', b'0'); COMMIT; -- ---------------------------- @@ -403,7 +508,7 @@ CREATE TABLE `sys_login_log` ( `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=84 DEFAULT CHARSET=utf8mb4 COMMENT='系统访问记录'; +) ENGINE=InnoDB AUTO_INCREMENT=98 DEFAULT CHARSET=utf8mb4 COMMENT='系统访问记录'; -- ---------------------------- -- Records of sys_login_log @@ -432,7 +537,7 @@ CREATE TABLE `sys_menu` ( `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=1110 DEFAULT CHARSET=utf8mb4 COMMENT='菜单权限表'; +) ENGINE=InnoDB AUTO_INCREMENT=1116 DEFAULT CHARSET=utf8mb4 COMMENT='菜单权限表'; -- ---------------------------- -- Records of sys_menu @@ -563,6 +668,12 @@ INSERT INTO `sys_menu` VALUES (1106, '发送测试短信', 'system:sms-template: INSERT INTO `sys_menu` VALUES (1107, '短信日志', '', 2, 2, 1093, 'sms-log', 'phone', 'system/sms/smsLog', 0, '', '2021-04-11 08:37:05', '1', '2021-04-11 19:34:25', b'0'); INSERT INTO `sys_menu` VALUES (1108, '短信日志查询', 'system:sms-log:query', 3, 1, 1107, '', '', '', 0, '', '2021-04-11 08:37:05', '', '2021-04-11 08:37:05', b'0'); INSERT INTO `sys_menu` VALUES (1109, '短信日志导出', 'system:sms-log:export', 3, 5, 1107, '', '', '', 0, '', '2021-04-11 08:37:05', '', '2021-04-11 08:37:05', b'0'); +INSERT INTO `sys_menu` VALUES (1110, '错误码管理', '', 2, 12, 1, 'error-code', 'code', 'system/errorCode/index', 0, '', '2021-04-13 21:46:42', '1', '2021-04-22 00:04:35', b'0'); +INSERT INTO `sys_menu` VALUES (1111, '错误码查询', 'system:error-code:query', 3, 1, 1110, '', '', '', 0, '', '2021-04-13 21:46:42', '', '2021-04-13 22:09:37', b'0'); +INSERT INTO `sys_menu` VALUES (1112, '错误码创建', 'system:error-code:create', 3, 2, 1110, '', '', '', 0, '', '2021-04-13 21:46:42', '', '2021-04-13 22:09:43', b'0'); +INSERT INTO `sys_menu` VALUES (1113, '错误码更新', 'system:error-code:update', 3, 3, 1110, '', '', '', 0, '', '2021-04-13 21:46:42', '', '2021-04-13 22:09:47', b'0'); +INSERT INTO `sys_menu` VALUES (1114, '错误码删除', 'system:error-code:delete', 3, 4, 1110, '', '', '', 0, '', '2021-04-13 21:46:42', '', '2021-04-13 22:09:51', b'0'); +INSERT INTO `sys_menu` VALUES (1115, '错误码导出', 'system:error-code:export', 3, 5, 1110, '', '', '', 0, '', '2021-04-13 21:46:42', '', '2021-04-13 22:09:55', b'0'); COMMIT; -- ---------------------------- @@ -622,7 +733,7 @@ CREATE TABLE `sys_operate_log` ( `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=177 DEFAULT CHARSET=utf8mb4 COMMENT='操作日志记录'; +) ENGINE=InnoDB AUTO_INCREMENT=193 DEFAULT CHARSET=utf8mb4 COMMENT='操作日志记录'; -- ---------------------------- -- Records of sys_operate_log @@ -933,7 +1044,7 @@ CREATE TABLE `sys_sms_log` ( `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=35 DEFAULT CHARSET=utf8mb4 COMMENT='短信日志'; +) ENGINE=InnoDB AUTO_INCREMENT=36 DEFAULT CHARSET=utf8mb4 COMMENT='短信日志'; -- ---------------------------- -- Records of sys_sms_log @@ -1074,6 +1185,7 @@ INSERT INTO `sys_user_session` VALUES ('12166cd28b4f448ea468d13c471dfc6e', 1, '2 INSERT INTO `sys_user_session` VALUES ('134d908ae33146bd9b5291471c04f604', 1, '2021-04-10 00:29:28', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36', NULL, '2021-04-09 23:10:26', NULL, '2021-04-02 08:08:17', b'1'); INSERT INTO `sys_user_session` VALUES ('1407ce21e47947b9b8d93bff1b55c7d6', 1, '2021-04-07 01:09:11', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36', NULL, '2021-04-07 00:07:43', NULL, '2021-04-01 18:10:44', b'1'); INSERT INTO `sys_user_session` VALUES ('1477c38290ff4cee8887ebfe593faa02', 1, '2021-04-17 23:34:57', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36', NULL, '2021-04-17 23:04:57', NULL, '2021-04-12 21:36:29', b'1'); +INSERT INTO `sys_user_session` VALUES ('347ec49c06d74d138a95266cbb5535a0', 1, '2021-04-21 00:45:41', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36', NULL, '2021-04-21 00:03:50', NULL, '2021-04-13 18:38:39', b'1'); INSERT INTO `sys_user_session` VALUES ('3c75ea73e13b4857a18eb57ca2eea80f', 1, '2021-04-11 20:06:52', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36', NULL, '2021-04-11 19:36:52', NULL, '2021-04-11 09:10:53', b'1'); INSERT INTO `sys_user_session` VALUES ('40d532d8900c43b791266429a7911751', 1, '2021-04-05 22:11:34', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36', NULL, '2021-04-05 21:41:34', NULL, '2021-04-01 12:28:20', b'1'); INSERT INTO `sys_user_session` VALUES ('43676e85d0e04980b2a67181f8d9933b', 1, '2021-04-11 10:41:09', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36', NULL, '2021-04-11 09:56:31', NULL, '2021-04-02 17:32:07', b'1'); @@ -1084,16 +1196,22 @@ INSERT INTO `sys_user_session` VALUES ('5c30d80eb72048daa1a24d3d4f01317b', 1, '2 INSERT INTO `sys_user_session` VALUES ('5dca80a5c61541479a4dbb6e004c2e28', 1, '2021-04-14 00:57:25', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36', NULL, '2021-04-13 23:38:30', NULL, '2021-04-12 17:33:48', b'1'); INSERT INTO `sys_user_session` VALUES ('7324a76b029a49ee95bf54ceb4164ba9', 1, '2021-04-13 01:29:14', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36', NULL, '2021-04-13 00:18:40', NULL, '2021-04-11 23:15:00', b'1'); INSERT INTO `sys_user_session` VALUES ('749619894bc441bb9773902515f81e6a', 1, '2021-04-11 00:39:51', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36', NULL, '2021-04-11 00:09:51', NULL, '2021-04-02 16:50:56', b'1'); +INSERT INTO `sys_user_session` VALUES ('750dca41b315488b8c17e1c0f8b6a519', 1, '2021-04-21 01:24:28', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36', NULL, '2021-04-21 00:54:28', NULL, '2021-04-13 21:42:10', b'1'); INSERT INTO `sys_user_session` VALUES ('7768ae62ad974fd989f5159649a4be82', 1, '2021-04-11 00:53:39', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36', NULL, '2021-04-10 23:23:27', NULL, '2021-04-02 17:04:58', b'1'); INSERT INTO `sys_user_session` VALUES ('79efcb8f64aa42af9f4b327fb383532f', 1, '2021-04-11 22:44:07', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36', NULL, '2021-04-11 21:34:53', NULL, '2021-04-11 14:10:45', b'1'); +INSERT INTO `sys_user_session` VALUES ('83b227ad356f4343b01d321ad26807ce', 1, '2021-04-22 00:49:12', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36', NULL, '2021-04-21 23:33:02', NULL, '2021-04-22 00:19:12', b'0'); INSERT INTO `sys_user_session` VALUES ('87d5b95fdad9447189a95abf8a5152df', 1, '2021-04-17 23:01:18', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36', NULL, '2021-04-17 22:31:18', NULL, '2021-04-12 21:03:27', b'1'); INSERT INTO `sys_user_session` VALUES ('8b3eac5e4a104a4191c8070e03d553ea', 1, '2021-04-05 02:45:12', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36', NULL, '2021-04-05 02:15:12', NULL, '2021-04-01 11:05:25', b'1'); INSERT INTO `sys_user_session` VALUES ('9ae27346d8b7491aad1385f51e8aa196', 1, '2021-03-13 14:02:12', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', NULL, '2021-03-13 10:43:06', NULL, '2021-03-13 06:40:35', b'1'); INSERT INTO `sys_user_session` VALUES ('a2fb443b31c049008975ff8ee5499db1', 1, '2021-04-11 09:42:09', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36', NULL, '2021-04-11 09:12:09', NULL, '2021-04-02 17:16:00', b'1'); INSERT INTO `sys_user_session` VALUES ('a71a74adf9d141e2849d2a411d558205', 1, '2021-04-17 18:24:44', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36', NULL, '2021-04-17 17:54:44', NULL, '2021-04-12 17:54:50', b'1'); +INSERT INTO `sys_user_session` VALUES ('ab2099c12f5c4b0288c60abe8cfff307', 1, '2021-04-18 01:41:46', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36', NULL, '2021-04-18 01:01:35', NULL, '2021-04-13 05:14:54', b'1'); INSERT INTO `sys_user_session` VALUES ('ae9ee7452ee54e4b983d658188c15c4d', 1, '2021-03-14 21:32:57', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', NULL, '2021-03-14 20:25:00', NULL, '2021-03-13 15:19:10', b'1'); INSERT INTO `sys_user_session` VALUES ('b727853eccea4c8589e006ffea985146', 1, '2021-04-12 01:36:00', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36', NULL, '2021-04-12 01:06:00', NULL, '2021-04-11 19:40:07', b'1'); +INSERT INTO `sys_user_session` VALUES ('b9ee6fde7bf74ed49cad99abf86c94d6', 1, '2021-04-18 20:21:02', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36', NULL, '2021-04-18 19:18:52', NULL, '2021-04-13 06:36:39', b'1'); +INSERT INTO `sys_user_session` VALUES ('bb4ad4579bd1436c859b94228967582f', 1, '2021-04-18 20:52:38', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36', NULL, '2021-04-18 20:22:38', NULL, '2021-04-13 07:14:58', b'1'); INSERT INTO `sys_user_session` VALUES ('c095616db95044c5bed66a3f84519b8b', 1, '2021-04-11 19:59:33', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36', NULL, '2021-04-11 19:29:33', NULL, '2021-04-11 09:04:19', b'1'); +INSERT INTO `sys_user_session` VALUES ('c8805f37eb76432c89d6d54feb14756f', 1, '2021-04-18 21:54:56', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36', NULL, '2021-04-18 21:00:38', NULL, '2021-04-13 17:45:30', b'1'); INSERT INTO `sys_user_session` VALUES ('d0adf48f82914212b947e5ab04d9fb65', 1, '2021-03-21 19:16:28', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36', NULL, '2021-03-21 18:13:37', NULL, '2021-03-15 05:53:20', b'1'); INSERT INTO `sys_user_session` VALUES ('dfbce0af867547f4bb01ac6f2e583337', 1, '2021-04-11 17:06:15', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36', NULL, '2021-04-11 16:36:15', NULL, '2021-04-11 08:24:03', b'1'); INSERT INTO `sys_user_session` VALUES ('e5ecf10e40a5463b8f9b5b453cb1649b', 1, '2021-04-11 17:06:22', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36', NULL, '2021-04-11 16:36:22', NULL, '2021-04-11 08:24:03', b'1'); @@ -1134,7 +1252,7 @@ CREATE TABLE `tool_codegen_column` ( `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=447 DEFAULT CHARSET=utf8mb4 COMMENT='代码生成表字段定义'; +) ENGINE=InnoDB AUTO_INCREMENT=458 DEFAULT CHARSET=utf8mb4 COMMENT='代码生成表字段定义'; -- ---------------------------- -- Records of tool_codegen_column @@ -1354,6 +1472,17 @@ INSERT INTO `tool_codegen_column` VALUES (443, 36, 'create_time', 'datetime', ' INSERT INTO `tool_codegen_column` VALUES (444, 36, 'updater', 'varchar(64)', '更新者', b'1', b'0', '0', 27, 'String', 'updater', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2021-04-11 09:13:48', '1', '2021-04-11 20:33:54', b'0'); INSERT INTO `tool_codegen_column` VALUES (445, 36, 'update_time', 'datetime', '更新时间', b'0', b'0', '0', 28, 'Date', 'updateTime', '', NULL, b'0', b'0', b'0', 'BETWEEN', b'0', 'datetime', '1', '2021-04-11 09:13:48', '1', '2021-04-11 20:33:54', b'0'); INSERT INTO `tool_codegen_column` VALUES (446, 36, 'deleted', 'bit(1)', '是否删除', b'0', b'0', '0', 29, 'Boolean', 'deleted', '', NULL, b'0', b'0', b'0', '=', b'0', 'radio', '1', '2021-04-11 09:13:48', '1', '2021-04-11 20:33:54', b'0'); +INSERT INTO `tool_codegen_column` VALUES (447, 37, 'id', 'bigint(20)', '错误码编号', b'0', b'1', '1', 1, 'Long', 'id', '', '1024', b'0', b'1', b'0', '=', b'1', 'input', '1', '2021-04-21 00:04:13', '1', '2021-04-21 00:55:37', b'0'); +INSERT INTO `tool_codegen_column` VALUES (448, 37, 'type', 'tinyint(4)', '错误码类型', b'0', b'0', '0', 2, 'Integer', 'type', 'inf_error_code_type', '1', b'0', b'0', b'1', '=', b'1', 'select', '1', '2021-04-21 00:04:13', '1', '2021-04-21 00:55:37', b'0'); +INSERT INTO `tool_codegen_column` VALUES (449, 37, 'application_name', 'varchar(50)', '应用名', b'0', b'0', '0', 3, 'String', 'applicationName', '', 'dashboard', b'1', b'1', b'1', 'LIKE', b'1', 'input', '1', '2021-04-21 00:04:13', '1', '2021-04-21 00:55:37', b'0'); +INSERT INTO `tool_codegen_column` VALUES (450, 37, 'code', 'int(11)', '错误码编码', b'0', b'0', '0', 4, 'Integer', 'code', '', '1234', b'1', b'1', b'1', '=', b'1', 'input', '1', '2021-04-21 00:04:13', '1', '2021-04-21 00:55:37', b'0'); +INSERT INTO `tool_codegen_column` VALUES (451, 37, 'message', 'varchar(512)', '错误码错误提示', b'0', b'0', '0', 5, 'String', 'message', '', '帅气', b'1', b'1', b'1', 'LIKE', b'1', 'input', '1', '2021-04-21 00:04:13', '1', '2021-04-21 00:55:37', b'0'); +INSERT INTO `tool_codegen_column` VALUES (452, 37, 'memo', 'varchar(512)', '备注', b'1', b'0', '0', 6, 'String', 'memo', '', '哈哈哈', b'1', b'1', b'0', '=', b'1', 'input', '1', '2021-04-21 00:04:13', '1', '2021-04-21 00:55:37', b'0'); +INSERT INTO `tool_codegen_column` VALUES (453, 37, 'creator', 'varchar(64)', '创建者', b'1', b'0', '0', 7, 'String', 'creator', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2021-04-21 00:04:13', '1', '2021-04-21 00:55:37', b'0'); +INSERT INTO `tool_codegen_column` VALUES (454, 37, 'create_time', 'datetime', '创建时间', b'0', b'0', '0', 8, 'Date', 'createTime', '', NULL, b'0', b'0', b'1', 'BETWEEN', b'1', 'datetime', '1', '2021-04-21 00:04:13', '1', '2021-04-21 00:55:37', b'0'); +INSERT INTO `tool_codegen_column` VALUES (455, 37, 'updater', 'varchar(64)', '更新者', b'1', b'0', '0', 9, 'String', 'updater', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2021-04-21 00:04:13', '1', '2021-04-21 00:55:37', b'0'); +INSERT INTO `tool_codegen_column` VALUES (456, 37, 'update_time', 'datetime', '更新时间', b'0', b'0', '0', 10, 'Date', 'updateTime', '', NULL, b'0', b'0', b'0', 'BETWEEN', b'0', 'datetime', '1', '2021-04-21 00:04:13', '1', '2021-04-21 00:55:37', b'0'); +INSERT INTO `tool_codegen_column` VALUES (457, 37, 'deleted', 'bit(1)', '是否删除', b'0', b'0', '0', 11, 'Boolean', 'deleted', '', NULL, b'0', b'0', b'0', '=', b'0', 'radio', '1', '2021-04-21 00:04:13', '1', '2021-04-21 00:55:37', b'0'); COMMIT; -- ---------------------------- @@ -1379,7 +1508,7 @@ CREATE TABLE `tool_codegen_table` ( `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=37 DEFAULT CHARSET=utf8mb4 COMMENT='代码生成表定义'; +) ENGINE=InnoDB AUTO_INCREMENT=38 DEFAULT CHARSET=utf8mb4 COMMENT='代码生成表定义'; -- ---------------------------- -- Records of tool_codegen_table @@ -1400,6 +1529,7 @@ INSERT INTO `tool_codegen_table` VALUES (33, 1, 'inf_file', '文件表', NULL, ' INSERT INTO `tool_codegen_table` VALUES (34, 1, 'sys_sms_channel', '短信渠道', NULL, 'system', 'sms', 'SysSmsChannel', '短信渠道', '芋道源码', 1, 1093, '1', '2021-04-03 13:39:06', '1', '2021-04-05 20:52:09', b'0'); INSERT INTO `tool_codegen_table` VALUES (35, 1, 'sys_sms_template', '短信模板', NULL, 'system', 'sms', 'SysSmsTemplate', '短信模板', '芋道源码', 1, 1093, '1', '2021-04-03 13:58:55', '1', '2021-04-05 22:23:38', b'0'); INSERT INTO `tool_codegen_table` VALUES (36, 1, 'sys_sms_log', '短信日志', NULL, 'system', 'sms', 'SysSmsLog', '短信日志', '芋道源码', 1, 1093, '1', '2021-04-11 01:12:57', '1', '2021-04-11 20:33:54', b'0'); +INSERT INTO `tool_codegen_table` VALUES (37, 1, 'inf_error_code', '错误码表', NULL, 'infra', 'errorcode', 'InfErrorCode', '错误码', '芋道源码', 1, 2, '1', '2021-04-20 15:27:45', '1', '2021-04-21 00:55:37', b'0'); COMMIT; -- ---------------------------- diff --git a/src/main/java/cn/iocoder/dashboard/framework/errorcode/core/generator/ErrorCodeAutoGeneratorImpl.java b/src/main/java/cn/iocoder/dashboard/framework/errorcode/core/generator/ErrorCodeAutoGeneratorImpl.java index 049c87a23..2d54fabdb 100644 --- a/src/main/java/cn/iocoder/dashboard/framework/errorcode/core/generator/ErrorCodeAutoGeneratorImpl.java +++ b/src/main/java/cn/iocoder/dashboard/framework/errorcode/core/generator/ErrorCodeAutoGeneratorImpl.java @@ -18,7 +18,7 @@ import java.util.List; /** * ErrorCodeAutoGenerator 的实现类 - * 目的是,扫描指定的 {@link #constantsClassList} 类,写入到 infra 服务中 + * 目的是,扫描指定的 {@link #constantsClassList} 类,写入到 system 服务中 * * @author dylan */ @@ -47,9 +47,9 @@ public class ErrorCodeAutoGeneratorImpl implements ErrorCodeAutoGenerator { List autoGenerateDTOs = parseErrorCode(); log.info("[execute][解析到错误码数量为 ({}) 个]", autoGenerateDTOs.size()); - // 第二步,写入到 infra 服务 + // 第二步,写入到 system 服务 errorCodeService.autoGenerateErrorCodes(autoGenerateDTOs); - log.info("[execute][写入到 infra 组件完成]"); + log.info("[execute][写入到 system 组件完成]"); } /** @@ -60,7 +60,7 @@ public class ErrorCodeAutoGeneratorImpl implements ErrorCodeAutoGenerator { private List parseErrorCode() { // 校验 errorCodeConstantsClass 参数 if (CollUtil.isEmpty(constantsClassList)) { - log.info("[execute][未配置 yudao.error-code.constants-class-list 配置项,不进行自动写入到 infra 服务中]"); + log.info("[execute][未配置 yudao.error-code.constants-class-list 配置项,不进行自动写入到 system 服务中]"); return new ArrayList<>(); } diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/impl/SysErrorCodeServiceImpl.java b/src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/impl/SysErrorCodeServiceImpl.java index d0ba9b214..4a73ffe12 100644 --- a/src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/impl/SysErrorCodeServiceImpl.java +++ b/src/main/java/cn/iocoder/dashboard/modules/system/service/errorcode/impl/SysErrorCodeServiceImpl.java @@ -147,7 +147,7 @@ public class SysErrorCodeServiceImpl implements SysErrorCodeService { if (!SysErrorCodeTypeEnum.AUTO_GENERATION.getType().equals(errorCodeDO.getType())) { return; } - // 条件 2. 分组 group 必须匹配,避免存在错误码冲突的情况 + // 条件 2. 分组 applicationName 必须匹配,避免存在错误码冲突的情况 if (!autoGenerateDTO.getApplicationName().equals(errorCodeDO.getApplicationName())) { log.error("[autoGenerateErrorCodes][自动创建({}/{}) 错误码失败,数据库中已经存在({}/{})]", autoGenerateDTO.getCode(), autoGenerateDTO.getApplicationName(), diff --git a/src/test/java/cn/iocoder/dashboard/modules/system/service/errorcode/SysErrorCodeServiceTest.java b/src/test/java/cn/iocoder/dashboard/modules/system/service/errorcode/SysErrorCodeServiceTest.java index 300fc1627..c704dd6a0 100644 --- a/src/test/java/cn/iocoder/dashboard/modules/system/service/errorcode/SysErrorCodeServiceTest.java +++ b/src/test/java/cn/iocoder/dashboard/modules/system/service/errorcode/SysErrorCodeServiceTest.java @@ -2,18 +2,22 @@ package cn.iocoder.dashboard.modules.system.service.errorcode; import cn.iocoder.dashboard.BaseDbUnitTest; import cn.iocoder.dashboard.common.pojo.PageResult; +import cn.iocoder.dashboard.framework.errorcode.core.dto.ErrorCodeAutoGenerateReqDTO; +import cn.iocoder.dashboard.modules.infra.enums.config.InfConfigTypeEnum; import cn.iocoder.dashboard.modules.system.controller.errorcode.vo.SysErrorCodeCreateReqVO; import cn.iocoder.dashboard.modules.system.controller.errorcode.vo.SysErrorCodeExportReqVO; import cn.iocoder.dashboard.modules.system.controller.errorcode.vo.SysErrorCodePageReqVO; import cn.iocoder.dashboard.modules.system.controller.errorcode.vo.SysErrorCodeUpdateReqVO; import cn.iocoder.dashboard.modules.system.dal.dataobject.errorcode.SysErrorCodeDO; import cn.iocoder.dashboard.modules.system.dal.mysql.errorcode.SysErrorCodeMapper; -import cn.iocoder.dashboard.modules.infra.enums.config.InfConfigTypeEnum; import cn.iocoder.dashboard.modules.system.enums.errorcode.SysErrorCodeTypeEnum; import cn.iocoder.dashboard.modules.system.service.errorcode.impl.SysErrorCodeServiceImpl; import cn.iocoder.dashboard.util.collection.ArrayUtils; import cn.iocoder.dashboard.util.object.ObjectUtils; +import org.assertj.core.util.Lists; import org.junit.jupiter.api.Test; +import org.mockito.Mock; +import org.slf4j.Logger; import org.springframework.context.annotation.Import; import javax.annotation.Resource; @@ -21,7 +25,8 @@ import java.util.List; import java.util.function.Consumer; import static cn.hutool.core.util.RandomUtil.randomEle; -import static cn.iocoder.dashboard.modules.system.enums.SysErrorCodeConstants.*; +import static cn.iocoder.dashboard.modules.system.enums.SysErrorCodeConstants.ERROR_CODE_DUPLICATE; +import static cn.iocoder.dashboard.modules.system.enums.SysErrorCodeConstants.ERROR_CODE_NOT_EXISTS; import static cn.iocoder.dashboard.util.AssertUtils.assertPojoEquals; import static cn.iocoder.dashboard.util.AssertUtils.assertServiceException; import static cn.iocoder.dashboard.util.RandomUtils.*; @@ -42,6 +47,9 @@ public class SysErrorCodeServiceTest extends BaseDbUnitTest { @Resource private SysErrorCodeMapper errorCodeMapper; + @Mock + private Logger log; + @Test public void testCreateErrorCode_success() { // 准备参数 @@ -186,6 +194,104 @@ public class SysErrorCodeServiceTest extends BaseDbUnitTest { ERROR_CODE_NOT_EXISTS); } + /** + * 情况 1,错误码不存在的情况 + */ + @Test + public void testAutoGenerateErrorCodes_01() { + // 准备参数 + ErrorCodeAutoGenerateReqDTO generateReqDTO = randomPojo(ErrorCodeAutoGenerateReqDTO.class); + // mock 方法 + + // 调用 + errorCodeService.autoGenerateErrorCodes(Lists.newArrayList(generateReqDTO)); + // 断言 + SysErrorCodeDO errorCode = errorCodeMapper.selectOne(null); + assertPojoEquals(generateReqDTO, errorCode); + assertEquals(SysErrorCodeTypeEnum.AUTO_GENERATION.getType(), errorCode.getType()); + } + + /** + * 情况 2.1,错误码存在,但是是 SysErrorCodeTypeEnum.MANUAL_OPERATION 类型 + */ + @Test + public void testAutoGenerateErrorCodes_021() { + // mock 数据 + SysErrorCodeDO dbErrorCode = randomInfErrorCodeDO(o -> o.setType(SysErrorCodeTypeEnum.MANUAL_OPERATION.getType())); + errorCodeMapper.insert(dbErrorCode); + // 准备参数 + ErrorCodeAutoGenerateReqDTO generateReqDTO = randomPojo(ErrorCodeAutoGenerateReqDTO.class, + o -> o.setCode(dbErrorCode.getCode())); + // mock 方法 + + // 调用 + errorCodeService.autoGenerateErrorCodes(Lists.newArrayList(generateReqDTO)); + // 断言,相等,说明不会更新 + SysErrorCodeDO errorCode = errorCodeMapper.selectById(dbErrorCode.getId()); + assertPojoEquals(dbErrorCode, errorCode); + } + + /** + * 情况 2.2,错误码存在,但是是 applicationName 不匹配 + */ + @Test + public void testAutoGenerateErrorCodes_022() { + // mock 数据 + SysErrorCodeDO dbErrorCode = randomInfErrorCodeDO(o -> o.setType(SysErrorCodeTypeEnum.AUTO_GENERATION.getType())); + errorCodeMapper.insert(dbErrorCode); + // 准备参数 + ErrorCodeAutoGenerateReqDTO generateReqDTO = randomPojo(ErrorCodeAutoGenerateReqDTO.class, + o -> o.setCode(dbErrorCode.getCode()).setApplicationName(randomString())); + // mock 方法 + + // 调用 + errorCodeService.autoGenerateErrorCodes(Lists.newArrayList(generateReqDTO)); + // 断言,相等,说明不会更新 + SysErrorCodeDO errorCode = errorCodeMapper.selectById(dbErrorCode.getId()); + assertPojoEquals(dbErrorCode, errorCode); + } + + /** + * 情况 2.3,错误码存在,但是是 message 相同 + */ + @Test + public void testAutoGenerateErrorCodes_023() { + // mock 数据 + SysErrorCodeDO dbErrorCode = randomInfErrorCodeDO(o -> o.setType(SysErrorCodeTypeEnum.AUTO_GENERATION.getType())); + errorCodeMapper.insert(dbErrorCode); + // 准备参数 + ErrorCodeAutoGenerateReqDTO generateReqDTO = randomPojo(ErrorCodeAutoGenerateReqDTO.class, + o -> o.setCode(dbErrorCode.getCode()).setApplicationName(dbErrorCode.getApplicationName()) + .setMessage(dbErrorCode.getMessage())); + // mock 方法 + + // 调用 + errorCodeService.autoGenerateErrorCodes(Lists.newArrayList(generateReqDTO)); + // 断言,相等,说明不会更新 + SysErrorCodeDO errorCode = errorCodeMapper.selectById(dbErrorCode.getId()); + assertPojoEquals(dbErrorCode, errorCode); + } + + /** + * 情况 2.3,错误码存在,但是是 message 不同,则进行更新 + */ + @Test + public void testAutoGenerateErrorCodes_024() { + // mock 数据 + SysErrorCodeDO dbErrorCode = randomInfErrorCodeDO(o -> o.setType(SysErrorCodeTypeEnum.AUTO_GENERATION.getType())); + errorCodeMapper.insert(dbErrorCode); + // 准备参数 + ErrorCodeAutoGenerateReqDTO generateReqDTO = randomPojo(ErrorCodeAutoGenerateReqDTO.class, + o -> o.setCode(dbErrorCode.getCode()).setApplicationName(dbErrorCode.getApplicationName())); + // mock 方法 + + // 调用 + errorCodeService.autoGenerateErrorCodes(Lists.newArrayList(generateReqDTO)); + // 断言,匹配 + SysErrorCodeDO errorCode = errorCodeMapper.selectById(dbErrorCode.getId()); + assertPojoEquals(generateReqDTO, errorCode); + } + // ========== 随机对象 ========== @SafeVarargs