完成错误码的后端代码
parent
3580b416bc
commit
6984eb5db1
|
@ -0,0 +1,12 @@
|
||||||
|
###
|
||||||
|
POST {{baseUrl}}/inra/error-code/create
|
||||||
|
Authorization: Bearer {{token}}
|
||||||
|
Content-Type:application/json
|
||||||
|
|
||||||
|
{
|
||||||
|
"code": 200,
|
||||||
|
"message": "成功",
|
||||||
|
"group": "test",
|
||||||
|
"type": 1
|
||||||
|
}
|
||||||
|
|
|
@ -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<Long> createErrorCode(@Valid @RequestBody InfErrorCodeCreateReqVO createReqVO) {
|
||||||
|
return success(errorCodeService.createErrorCode(createReqVO));
|
||||||
|
}
|
||||||
|
|
||||||
|
@PutMapping("/update")
|
||||||
|
@ApiOperation("更新错误码")
|
||||||
|
@PreAuthorize("@ss.hasPermission('infra:error-code:update')")
|
||||||
|
public CommonResult<Boolean> 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<Boolean> 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<InfErrorCodeRespVO> 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<PageResult<InfErrorCodeRespVO>> getErrorCodePage(@Valid InfErrorCodePageReqVO pageVO) {
|
||||||
|
PageResult<InfErrorCodeDO> 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<InfErrorCodeDO> list = errorCodeService.getErrorCodeList(exportReqVO);
|
||||||
|
// 导出 Excel
|
||||||
|
List<InfErrorCodeExcelVO> datas = InfErrorCodeConvert.INSTANCE.convertList02(list);
|
||||||
|
ExcelUtils.write(response, "错误码.xls", "数据", InfErrorCodeExcelVO.class, datas);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -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;
|
||||||
|
|
||||||
|
}
|
|
@ -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 {
|
||||||
|
|
||||||
|
}
|
|
@ -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;
|
||||||
|
|
||||||
|
}
|
|
@ -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;
|
||||||
|
|
||||||
|
}
|
|
@ -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;
|
||||||
|
|
||||||
|
}
|
|
@ -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;
|
||||||
|
|
||||||
|
}
|
|
@ -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;
|
||||||
|
|
||||||
|
}
|
|
@ -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<InfErrorCodeRespVO> convertList(List<InfErrorCodeDO> list);
|
||||||
|
|
||||||
|
PageResult<InfErrorCodeRespVO> convertPage(PageResult<InfErrorCodeDO> page);
|
||||||
|
|
||||||
|
List<InfErrorCodeExcelVO> convertList02(List<InfErrorCodeDO> list);
|
||||||
|
|
||||||
|
InfErrorCodeDO convert(ErrorCodeAutoGenerateReqDTO bean);
|
||||||
|
|
||||||
|
List<ErrorCodeRespDTO> convertList03(List<InfErrorCodeDO> list);
|
||||||
|
|
||||||
|
}
|
|
@ -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<ErrorCodeVO> convertList(List<InfErrorCodeDO> list);
|
|
||||||
|
|
||||||
@Mapping(source = "records", target = "list")
|
|
||||||
PageResult<ErrorCodeVO> convertPage(IPage<InfErrorCodeDO> page);
|
|
||||||
|
|
||||||
InfErrorCodeDO convert (ErrorCodeCreateDTO bean);
|
|
||||||
|
|
||||||
InfErrorCodeDO convert (ErrorCodeUpdateDTO bean);
|
|
||||||
|
|
||||||
InfErrorCodeDO convert(ErrorCodeAutoGenerateReqDTO bean);
|
|
||||||
|
|
||||||
List<ErrorCodeRespDTO> convertList02(List<InfErrorCodeDO> list);
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,7 +1,7 @@
|
||||||
package cn.iocoder.dashboard.modules.infra.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.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.TableId;
|
||||||
import com.baomidou.mybatisplus.annotation.TableName;
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
@ -27,7 +27,7 @@ public class InfErrorCodeDO extends BaseDO {
|
||||||
/**
|
/**
|
||||||
* 错误码类型
|
* 错误码类型
|
||||||
*
|
*
|
||||||
* 枚举 {@link SysErrorCodeTypeEnum}
|
* 枚举 {@link InfErrorCodeTypeEnum}
|
||||||
*/
|
*/
|
||||||
private Integer type;
|
private Integer type;
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
package cn.iocoder.dashboard.modules.infra.dal.mysql.errorcode;
|
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.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 cn.iocoder.dashboard.modules.infra.dal.dataobject.errorcode.InfErrorCodeDO;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
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 org.apache.ibatis.annotations.Mapper;
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
@ -14,12 +14,26 @@ import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@Mapper
|
@Mapper
|
||||||
public interface InfErrorCodeMapper extends BaseMapper<InfErrorCodeDO> {
|
public interface InfErrorCodeMapper extends BaseMapperX<InfErrorCodeDO> {
|
||||||
|
|
||||||
default IPage<InfErrorCodeDO> selectPage(ErrorCodePageDTO pageDTO) {
|
default PageResult<InfErrorCodeDO> selectPage(InfErrorCodePageReqVO reqVO) {
|
||||||
return selectPage(new Page<>(pageDTO.getPageNo(), pageDTO.getPageSize()),
|
return selectPage(reqVO, new QueryWrapperX<InfErrorCodeDO>()
|
||||||
new QueryWrapperX<InfErrorCodeDO>().likeIfPresent("`group`", pageDTO.getGroup())
|
.eqIfPresent("type", reqVO.getType())
|
||||||
.eqIfPresent("code", pageDTO.getCode()).likeIfPresent("message", pageDTO.getMessage()));
|
.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<InfErrorCodeDO> selectList(InfErrorCodeExportReqVO reqVO) {
|
||||||
|
return selectList(new QueryWrapperX<InfErrorCodeDO>()
|
||||||
|
.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<InfErrorCodeDO> selectListByCodes(Collection<Integer> codes) {
|
default List<InfErrorCodeDO> selectListByCodes(Collection<Integer> codes) {
|
||||||
|
|
|
@ -30,4 +30,9 @@ public interface InfErrorCodeConstants {
|
||||||
// ========== 文件 1001003000 ==========
|
// ========== 文件 1001003000 ==========
|
||||||
ErrorCode FILE_NOT_EXISTS = new ErrorCode(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, "不能修改类型为系统内置的错误码");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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 cn.iocoder.dashboard.common.core.IntArrayValuable;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
|
@ -13,7 +13,7 @@ import java.util.Arrays;
|
||||||
*/
|
*/
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
@Getter
|
@Getter
|
||||||
public enum SysErrorCodeTypeEnum implements IntArrayValuable {
|
public enum InfErrorCodeTypeEnum implements IntArrayValuable {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 自动生成
|
* 自动生成
|
||||||
|
@ -24,7 +24,7 @@ public enum SysErrorCodeTypeEnum implements IntArrayValuable {
|
||||||
*/
|
*/
|
||||||
MANUAL_OPERATION(2);
|
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();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 类型
|
* 类型
|
|
@ -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<InfErrorCodeDO> getErrorCodePage(InfErrorCodePageReqVO pageReqVO);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得错误码列表, 用于 Excel 导出
|
||||||
|
*
|
||||||
|
* @param exportReqVO 查询条件
|
||||||
|
* @return 错误码列表
|
||||||
|
*/
|
||||||
|
List<InfErrorCodeDO> getErrorCodeList(InfErrorCodeExportReqVO exportReqVO);
|
||||||
|
|
||||||
|
}
|
|
@ -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<InfErrorCodeDO> getErrorCodePage(InfErrorCodePageReqVO pageReqVO) {
|
||||||
|
return errorCodeMapper.selectPage(pageReqVO);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<InfErrorCodeDO> getErrorCodeList(InfErrorCodeExportReqVO exportReqVO) {
|
||||||
|
return errorCodeMapper.selectList(exportReqVO);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Transactional
|
||||||
|
public void autoGenerateErrorCodes(List<ErrorCodeAutoGenerateReqDTO> autoGenerateDTOs) {
|
||||||
|
if (CollUtil.isEmpty(autoGenerateDTOs)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// 获得错误码
|
||||||
|
List<InfErrorCodeDO> errorCodeDOs = errorCodeMapper.selectListByCodes(
|
||||||
|
convertSet(autoGenerateDTOs, ErrorCodeAutoGenerateReqDTO::getCode));
|
||||||
|
Map<Integer, InfErrorCodeDO> 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<ErrorCodeRespDTO> getErrorCodeList(String applicationName, Date minUpdateTime) {
|
||||||
|
List<InfErrorCodeDO> errorCodeDOs = errorCodeMapper.selectListByApplicationNameAndUpdateTimeGt(
|
||||||
|
applicationName, minUpdateTime);
|
||||||
|
return InfErrorCodeConvert.INSTANCE.convertList03(errorCodeDOs);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
|
@ -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
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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<Integer> createErrorCode(@RequestBody ErrorCodeCreateDTO createDTO) {
|
|
||||||
return success(errorCodeService.createErrorCode(createDTO).getId());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 更新错误码
|
|
||||||
*
|
|
||||||
* @param updateDTO 更新错误码 DTO
|
|
||||||
*/
|
|
||||||
@ApiOperation("更新错误码")
|
|
||||||
@PatchMapping("/update")
|
|
||||||
public CommonResult<Boolean> updateErrorCode(@RequestBody ErrorCodeUpdateDTO updateDTO) {
|
|
||||||
errorCodeService.updateErrorCode(updateDTO);
|
|
||||||
return success(Boolean.TRUE);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 删除错误码
|
|
||||||
*
|
|
||||||
* @param errorCodeId 错误码编号
|
|
||||||
*/
|
|
||||||
@ApiOperation("删除错误码")
|
|
||||||
@DeleteMapping("delete")
|
|
||||||
public CommonResult<Boolean> deleteErrorCode(Integer errorCodeId) {
|
|
||||||
errorCodeService.deleteErrorCode(errorCodeId);
|
|
||||||
return success(Boolean.TRUE);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获得错误码
|
|
||||||
*
|
|
||||||
* @param errorCodeId 错误码编号
|
|
||||||
* @return 错误码
|
|
||||||
*/
|
|
||||||
@ApiOperation("获取错误码")
|
|
||||||
@GetMapping("/query")
|
|
||||||
public CommonResult<ErrorCodeVO> getErrorCode(Integer errorCodeId) {
|
|
||||||
return success(errorCodeService.getErrorCode(errorCodeId));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获得错误码列表
|
|
||||||
*
|
|
||||||
* @param errorCodeIds 错误码编号列表
|
|
||||||
* @return 错误码列表
|
|
||||||
*/
|
|
||||||
@ApiOperation("获取错误码列表")
|
|
||||||
@GetMapping("/query-ids")
|
|
||||||
public CommonResult<List<ErrorCodeVO>> listErrorCodes(@RequestBody List<Integer> errorCodeIds) {
|
|
||||||
return success(errorCodeService.listErrorCodes(errorCodeIds));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获得错误码分页
|
|
||||||
*
|
|
||||||
* @param pageDTO 错误码分页查询
|
|
||||||
* @return 错误码分页结果
|
|
||||||
*/
|
|
||||||
@ApiOperation("获取错误码分页列表")
|
|
||||||
@GetMapping("/page")
|
|
||||||
public CommonResult<PageResult<ErrorCodeVO>> pageErrorCode(ErrorCodePageDTO pageDTO) {
|
|
||||||
return success(errorCodeService.pageErrorCode(pageDTO));
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -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;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
|
@ -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;
|
|
||||||
|
|
||||||
}
|
|
|
@ -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;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
|
@ -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;
|
|
||||||
|
|
||||||
}
|
|
|
@ -91,10 +91,4 @@ public interface SysErrorCodeConstants {
|
||||||
ErrorCode SMS_SEND_MOBILE_NOT_EXISTS = new ErrorCode(1002012000, "手机号不存在");
|
ErrorCode SMS_SEND_MOBILE_NOT_EXISTS = new ErrorCode(1002012000, "手机号不存在");
|
||||||
ErrorCode SMS_SEND_MOBILE_TEMPLATE_PARAM_MISS = new ErrorCode(1002012001, "模板参数({})缺失");
|
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, "不能修改类型为系统内置的错误码");
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,7 +27,7 @@ public enum SysDictTypeEnum {
|
||||||
INF_JOB_STATUS("inf_job_status"), // 定时任务状态的枚举
|
INF_JOB_STATUS("inf_job_status"), // 定时任务状态的枚举
|
||||||
INF_JOB_LOG_STATUS("inf_job_log_status"), // 定时任务日志状态的枚举
|
INF_JOB_LOG_STATUS("inf_job_log_status"), // 定时任务日志状态的枚举
|
||||||
INF_API_ERROR_LOG_PROCESS_STATUS("inf_api_error_log_process_status"), // API 错误日志的处理状态的枚举
|
INF_API_ERROR_LOG_PROCESS_STATUS("inf_api_error_log_process_status"), // API 错误日志的处理状态的枚举
|
||||||
|
INF_ERROR_CODE_TYPE("inf_error_code_type"), // 错误码的类型枚举
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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 {
|
|
||||||
|
|
||||||
}
|
|
|
@ -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<ErrorCodeVO> listErrorCodes(List<Integer> errorCodeIds) {
|
|
||||||
List<InfErrorCodeDO> errorCodeDOs = errorCodeMapper.selectBatchIds(errorCodeIds);
|
|
||||||
return SysErrorCodeConvert.INSTANCE.convertList(errorCodeDOs);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获得错误码分页
|
|
||||||
*
|
|
||||||
* @param pageDTO 错误码分页查询
|
|
||||||
* @return 错误码分页结果
|
|
||||||
*/
|
|
||||||
public PageResult<ErrorCodeVO> pageErrorCode(ErrorCodePageDTO pageDTO) {
|
|
||||||
IPage<InfErrorCodeDO> 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<ErrorCodeAutoGenerateReqDTO> autoGenerateDTOs) {
|
|
||||||
if (CollUtil.isEmpty(autoGenerateDTOs)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
// 获得错误码
|
|
||||||
List<InfErrorCodeDO> errorCodeDOs = errorCodeMapper.selectListByCodes(
|
|
||||||
convertSet(autoGenerateDTOs, ErrorCodeAutoGenerateReqDTO::getCode));
|
|
||||||
Map<Integer, InfErrorCodeDO> 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<ErrorCodeRespDTO> getErrorCodeList(String applicationName, Date minUpdateTime) {
|
|
||||||
List<InfErrorCodeDO> errorCodeDOs = errorCodeMapper.selectListByApplicationNameAndUpdateTimeGt(
|
|
||||||
applicationName, minUpdateTime);
|
|
||||||
return SysErrorCodeConvert.INSTANCE.convertList02(errorCodeDOs);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
|
@ -53,7 +53,7 @@ public class ${table.className}ServiceImpl implements ${table.className}Service
|
||||||
public void delete${simpleClassName}(${primaryColumn.javaType} id) {
|
public void delete${simpleClassName}(${primaryColumn.javaType} id) {
|
||||||
// 校验存在
|
// 校验存在
|
||||||
this.validate${simpleClassName}Exists(id);
|
this.validate${simpleClassName}Exists(id);
|
||||||
// 更新
|
// 删除
|
||||||
${classNameVar}Mapper.deleteById(id);
|
${classNameVar}Mapper.deleteById(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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<InfErrorCodeDO> 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<InfErrorCodeDO> 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<InfErrorCodeDO>... consumers) {
|
||||||
|
Consumer<InfErrorCodeDO> consumer = (o) -> {
|
||||||
|
o.setType(randomEle(InfConfigTypeEnum.values()).getType()); // 保证 key 的范围
|
||||||
|
};
|
||||||
|
return randomPojo(InfErrorCodeDO.class, ArrayUtils.append(consumer, consumers));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -5,6 +5,7 @@ DELETE FROM "inf_job";
|
||||||
DELETE FROM "inf_job_log";
|
DELETE FROM "inf_job_log";
|
||||||
DELETE FROM "inf_api_access_log";
|
DELETE FROM "inf_api_access_log";
|
||||||
DELETE FROM "inf_api_error_log";
|
DELETE FROM "inf_api_error_log";
|
||||||
|
DELETE FROM "inf_error_code";
|
||||||
|
|
||||||
-- sys 开头的 DB
|
-- sys 开头的 DB
|
||||||
DELETE FROM "sys_dept";
|
DELETE FROM "sys_dept";
|
||||||
|
|
|
@ -359,7 +359,7 @@ CREATE TABLE IF NOT EXISTS "sys_sms_channel" (
|
||||||
PRIMARY KEY ("id")
|
PRIMARY KEY ("id")
|
||||||
) COMMENT '短信渠道';
|
) COMMENT '短信渠道';
|
||||||
|
|
||||||
CREATE TABLE "sys_sms_template" (
|
CREATE TABLE IF NOT EXISTS "sys_sms_template" (
|
||||||
"id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY,
|
"id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY,
|
||||||
"type" tinyint NOT NULL,
|
"type" tinyint NOT NULL,
|
||||||
"status" tinyint NOT NULL,
|
"status" tinyint NOT NULL,
|
||||||
|
@ -379,7 +379,7 @@ CREATE TABLE "sys_sms_template" (
|
||||||
PRIMARY KEY ("id")
|
PRIMARY KEY ("id")
|
||||||
) COMMENT '短信模板';
|
) COMMENT '短信模板';
|
||||||
|
|
||||||
CREATE TABLE "sys_sms_log" (
|
CREATE TABLE IF NOT EXISTS "sys_sms_log" (
|
||||||
"id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY,
|
"id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY,
|
||||||
"channel_id" bigint NOT NULL,
|
"channel_id" bigint NOT NULL,
|
||||||
"channel_code" varchar(63) NOT NULL,
|
"channel_code" varchar(63) NOT NULL,
|
||||||
|
@ -411,3 +411,18 @@ CREATE TABLE "sys_sms_log" (
|
||||||
"deleted" bit NOT NULL DEFAULT FALSE,
|
"deleted" bit NOT NULL DEFAULT FALSE,
|
||||||
PRIMARY KEY ("id")
|
PRIMARY KEY ("id")
|
||||||
) COMMENT '短信日志';
|
) 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 '错误码表';
|
||||||
|
|
Loading…
Reference in New Issue