错误码第一版
This commit is contained in:
@@ -0,0 +1,31 @@
|
||||
package cn.iocoder.mall.system.biz.bo.errorcode;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 错误码模块 - 错误码信息 BO
|
||||
* @author ding
|
||||
*/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
public class ErrorCodeBO {
|
||||
/**
|
||||
* 错误码编号
|
||||
*/
|
||||
private Integer id;
|
||||
/**
|
||||
* 错误码编码
|
||||
*/
|
||||
private Integer code;
|
||||
/**
|
||||
* 错误码错误信息
|
||||
*/
|
||||
private String message;
|
||||
/**
|
||||
* 添加时间
|
||||
*/
|
||||
private Date createTime;
|
||||
}
|
||||
@@ -1,19 +1,32 @@
|
||||
package cn.iocoder.mall.system.biz.config;
|
||||
|
||||
import cn.iocoder.common.framework.util.ServiceExceptionUtil;
|
||||
import cn.iocoder.mall.system.biz.bo.errorcode.ErrorCodeBO;
|
||||
import cn.iocoder.mall.system.biz.dataobject.errorcode.ErrorCodeDO;
|
||||
import cn.iocoder.mall.system.biz.enums.SystemErrorCodeEnum;
|
||||
import cn.iocoder.mall.system.biz.service.errorCode.ErrorCodeService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.context.event.ApplicationReadyEvent;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.context.event.EventListener;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Configuration
|
||||
public class ServiceExceptionConfiguration {
|
||||
|
||||
// @Autowired
|
||||
// private ErrorCodeService errorCodeService;
|
||||
|
||||
@EventListener(ApplicationReadyEvent.class) // 可参考 https://www.cnblogs.com/ssslinppp/p/7607509.html
|
||||
public void initMessages() {
|
||||
// List<ErrorCodeBO> list = errorCodeService.getErrorCodeList();
|
||||
for (SystemErrorCodeEnum item : SystemErrorCodeEnum.values()) {
|
||||
ServiceExceptionUtil.put(item.getCode(), item.getMessage());
|
||||
}
|
||||
// for (ErrorCodeBO bo : list) {
|
||||
// ServiceExceptionUtil.put(bo.getCode(),bo.getMessage());
|
||||
// }
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
package cn.iocoder.mall.system.biz.convert.errorcode;
|
||||
|
||||
import cn.iocoder.mall.system.biz.bo.errorcode.ErrorCodeBO;
|
||||
import cn.iocoder.mall.system.biz.dataobject.errorcode.ErrorCodeDO;
|
||||
import cn.iocoder.mall.system.biz.dto.errorcode.ErrorCodeAddDTO;
|
||||
import cn.iocoder.mall.system.biz.dto.errorcode.ErrorCodeDTO;
|
||||
import cn.iocoder.mall.system.biz.dto.errorcode.ErrorCodeUpdateDTO;
|
||||
import org.mapstruct.Mapper;
|
||||
import org.mapstruct.factory.Mappers;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author ding
|
||||
*/
|
||||
@Mapper
|
||||
public interface ErrorCodeConvert {
|
||||
|
||||
ErrorCodeConvert INSTANCE = Mappers.getMapper(ErrorCodeConvert.class);
|
||||
|
||||
ErrorCodeDO convert(ErrorCodeDTO bean);
|
||||
|
||||
ErrorCodeBO convert(ErrorCodeDO bean);
|
||||
|
||||
List<ErrorCodeBO> convertList(List<ErrorCodeDO> beans);
|
||||
|
||||
// @Mapping(source = "records", target = "list")
|
||||
// PageResult<ErrorCodeBO> convertPage(IPage<ErrorCodeDO> page);
|
||||
|
||||
ErrorCodeDO convert(ErrorCodeAddDTO bean);
|
||||
|
||||
ErrorCodeDO convert(ErrorCodeUpdateDTO bean);
|
||||
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
package cn.iocoder.mall.system.biz.dao.errorcode;
|
||||
|
||||
import cn.iocoder.mall.mybatis.query.QueryWrapperX;
|
||||
import cn.iocoder.mall.system.biz.dataobject.errorcode.ErrorCodeDO;
|
||||
import cn.iocoder.mall.system.biz.enums.SystemErrorCodeEnum;
|
||||
import cn.iocoder.mall.system.biz.enums.errorcode.ErrorCodeTypeEnum;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
/**
|
||||
* @author ding
|
||||
*/
|
||||
@Repository
|
||||
public interface ErrorCodeMapper extends BaseMapper<ErrorCodeDO> {
|
||||
|
||||
default ErrorCodeDO selectByCode(Integer code){
|
||||
//从db查询
|
||||
ErrorCodeDO errorCodeDO = selectOne(new QueryWrapperX<ErrorCodeDO>().eqIfPresent("code", code));
|
||||
if (null == errorCodeDO){
|
||||
//从enum查询
|
||||
for (SystemErrorCodeEnum item : SystemErrorCodeEnum.values()) {
|
||||
if(code.equals(item.getCode())){
|
||||
return new ErrorCodeDO().setCode(item.getCode()).
|
||||
setId(0).setType(ErrorCodeTypeEnum.SYSTEM.getType());
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
package cn.iocoder.mall.system.biz.dataobject.errorcode;
|
||||
|
||||
import cn.iocoder.mall.mybatis.dataobject.DeletableDO;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
/**
|
||||
* 错误码实体
|
||||
*/
|
||||
@TableName(value = "error_code")
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Accessors(chain = true)
|
||||
public class ErrorCodeDO extends DeletableDO {
|
||||
/**
|
||||
* 错误码编号
|
||||
*/
|
||||
private Integer id;
|
||||
/**
|
||||
* 错误码编码
|
||||
*/
|
||||
private Integer code;
|
||||
/**
|
||||
* 错误码错误信息
|
||||
*/
|
||||
private String message;
|
||||
/**
|
||||
* 错误码类型
|
||||
*/
|
||||
private Integer type;
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
package cn.iocoder.mall.system.biz.dto.errorcode;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import javax.validation.constraints.NotEmpty;
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
/**
|
||||
* 角色模块 - 添加角色 DTO
|
||||
*/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
public class ErrorCodeAddDTO {
|
||||
|
||||
@NotNull(message = "错误码编码")
|
||||
private Integer code;
|
||||
|
||||
@NotEmpty(message = "错误码错误信息")
|
||||
private String message;
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
package cn.iocoder.mall.system.biz.dto.errorcode;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
/**
|
||||
* @author ding
|
||||
*/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
public class ErrorCodeDTO {
|
||||
/**
|
||||
* 错误码编号
|
||||
*/
|
||||
private Integer id;
|
||||
/**
|
||||
* 错误码编码
|
||||
*/
|
||||
private Integer code;
|
||||
/**
|
||||
* 错误码错误信息
|
||||
*/
|
||||
private String message;
|
||||
/**
|
||||
* 错误码类型
|
||||
*/
|
||||
private Integer type;
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package cn.iocoder.mall.system.biz.dto.errorcode;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
/**
|
||||
* 只可以删除自定义错误码
|
||||
* @author ding
|
||||
*/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
public class ErrorCodeDeleteDTO {
|
||||
@NotNull(message = "错误码编号不能为空")
|
||||
private Integer id;
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
package cn.iocoder.mall.system.biz.dto.errorcode;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
/**
|
||||
* todo 考虑是否删除
|
||||
* @author ding
|
||||
*/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
public class ErrorCodeGetListDTO {
|
||||
/**
|
||||
* 错误码编号数组
|
||||
*
|
||||
* 如果传入空,则不进行错误码编号的过滤
|
||||
*/
|
||||
private Collection<Integer> codes;
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
package cn.iocoder.mall.system.biz.dto.errorcode;
|
||||
|
||||
import cn.iocoder.common.framework.vo.PageParam;
|
||||
|
||||
/**
|
||||
* @author ding
|
||||
*/
|
||||
public class ErrorCodePageDTO extends PageParam {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
package cn.iocoder.mall.system.biz.dto.errorcode;
|
||||
|
||||
import cn.iocoder.mall.system.biz.enums.errorcode.ErrorCodeTypeEnum;
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
/**
|
||||
* @author ding
|
||||
*/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
public class ErrorCodeUpdateDTO {
|
||||
|
||||
/**
|
||||
* 错误码编号,内置错误码的id是没有的
|
||||
*/
|
||||
private Integer id;
|
||||
|
||||
@NotNull(message = "错误码编码不能为空")
|
||||
private Integer code;
|
||||
/**
|
||||
* 错误码错误信息
|
||||
*/
|
||||
private String message;
|
||||
/**
|
||||
* 错误码类型 {@link ErrorCodeTypeEnum}
|
||||
*/
|
||||
private Integer type;
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
package cn.iocoder.mall.system.biz.service.errorCode;
|
||||
|
||||
import cn.iocoder.common.framework.vo.PageResult;
|
||||
import cn.iocoder.mall.system.biz.bo.errorcode.ErrorCodeBO;
|
||||
import cn.iocoder.mall.system.biz.dto.errorcode.ErrorCodeAddDTO;
|
||||
import cn.iocoder.mall.system.biz.dto.errorcode.ErrorCodeDeleteDTO;
|
||||
import cn.iocoder.mall.system.biz.dto.errorcode.ErrorCodePageDTO;
|
||||
import cn.iocoder.mall.system.biz.dto.errorcode.ErrorCodeUpdateDTO;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author ding
|
||||
*/
|
||||
public interface ErrorCodeService {
|
||||
/**
|
||||
* 根据code查询错误码
|
||||
* @param code code
|
||||
* @return 错误码信息
|
||||
*/
|
||||
ErrorCodeBO getErrorCode(Integer code);
|
||||
|
||||
List<ErrorCodeBO> getErrorCodeList();
|
||||
|
||||
PageResult<ErrorCodeBO> getErrorCodePage(ErrorCodePageDTO pageDTO);
|
||||
|
||||
/**
|
||||
* 新增
|
||||
* @param errorCodeAddDTO 错误码信息,默认类型为自定义错误码
|
||||
* @return
|
||||
*/
|
||||
Integer addErrorCode(ErrorCodeAddDTO errorCodeAddDTO);
|
||||
|
||||
/**
|
||||
* 更新错误码,系统内置错误码是不允许更新
|
||||
* @param errorCodeUpdateDTO 错误码信息
|
||||
*/
|
||||
void updateErrorCode(ErrorCodeUpdateDTO errorCodeUpdateDTO);
|
||||
|
||||
/**
|
||||
* 删除错误码
|
||||
* @param errorCodeDeleteDTO 只允许删除自定义错误码
|
||||
*/
|
||||
void deleteErrorCode(ErrorCodeDeleteDTO errorCodeDeleteDTO);
|
||||
}
|
||||
@@ -0,0 +1,112 @@
|
||||
package cn.iocoder.mall.system.biz.service.errorCode;
|
||||
|
||||
import cn.iocoder.common.framework.util.ServiceExceptionUtil;
|
||||
import cn.iocoder.common.framework.vo.PageResult;
|
||||
import cn.iocoder.mall.mybatis.enums.DeletedStatusEnum;
|
||||
import cn.iocoder.mall.mybatis.query.QueryWrapperX;
|
||||
import cn.iocoder.mall.system.biz.bo.errorcode.ErrorCodeBO;
|
||||
import cn.iocoder.mall.system.biz.convert.errorcode.ErrorCodeConvert;
|
||||
import cn.iocoder.mall.system.biz.dao.errorcode.ErrorCodeMapper;
|
||||
import cn.iocoder.mall.system.biz.dataobject.errorcode.ErrorCodeDO;
|
||||
import cn.iocoder.mall.system.biz.dto.errorcode.ErrorCodeAddDTO;
|
||||
import cn.iocoder.mall.system.biz.dto.errorcode.ErrorCodeDeleteDTO;
|
||||
import cn.iocoder.mall.system.biz.dto.errorcode.ErrorCodePageDTO;
|
||||
import cn.iocoder.mall.system.biz.dto.errorcode.ErrorCodeUpdateDTO;
|
||||
import cn.iocoder.mall.system.biz.enums.SystemErrorCodeEnum;
|
||||
import cn.iocoder.mall.system.biz.enums.errorcode.ErrorCodeTypeEnum;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author ding
|
||||
*/
|
||||
@Service
|
||||
public class ErrorCodeServiceImpl implements ErrorCodeService {
|
||||
|
||||
@Autowired
|
||||
private ErrorCodeMapper errorCodeMapper;
|
||||
|
||||
|
||||
@Override
|
||||
public ErrorCodeBO getErrorCode(Integer code) {
|
||||
return ErrorCodeConvert.INSTANCE.convert(errorCodeMapper.selectByCode(code));
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ErrorCodeBO> getErrorCodeList() {
|
||||
List<ErrorCodeDO> list = errorCodeMapper.selectList(new QueryWrapperX<ErrorCodeDO>());
|
||||
return ErrorCodeConvert.INSTANCE.convertList(list);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public PageResult<ErrorCodeBO> getErrorCodePage(ErrorCodePageDTO pageDTO) {
|
||||
// List<ErrorCodeDO> list = errorCodeMapper.selectList(new QueryWrapperX<ErrorCodeDO>());
|
||||
// List<>
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer addErrorCode(ErrorCodeAddDTO errorCodeAddDTO) {
|
||||
// 校验错误码
|
||||
checkDuplicateErrorCode(errorCodeAddDTO.getCode(), null);
|
||||
// 保存到数据库
|
||||
ErrorCodeDO errorCode = ErrorCodeConvert.INSTANCE.convert(errorCodeAddDTO);
|
||||
errorCode.setType(ErrorCodeTypeEnum.CUSTOM.getType());
|
||||
errorCode.setCreateTime(new Date());
|
||||
errorCode.setDeleted(DeletedStatusEnum.DELETED_NO.getValue());
|
||||
errorCodeMapper.insert(errorCode);
|
||||
// TODO 插入操作日志
|
||||
// 返回成功
|
||||
return errorCode.getId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateErrorCode(ErrorCodeUpdateDTO errorCodeUpdateDTO) {
|
||||
// 校验错误码是否存在
|
||||
ErrorCodeDO errorCodeDO = errorCodeMapper.selectByCode(errorCodeUpdateDTO.getCode());
|
||||
if (errorCodeDO == null) {
|
||||
throw ServiceExceptionUtil.exception(SystemErrorCodeEnum.ERROR_CODE_NOT_EXISTS);
|
||||
}
|
||||
// 内置错误码,写死在枚举类中,不允许修改
|
||||
if (ErrorCodeTypeEnum.SYSTEM.getType().equals(errorCodeDO.getType())) {
|
||||
throw ServiceExceptionUtil.exception(SystemErrorCodeEnum.ERROR_CAN_NOT_UPDATE_SYSTEM_TYPE_ERROR);
|
||||
}
|
||||
// 校验角色的唯一字段是否重复
|
||||
checkDuplicateErrorCode(errorCodeDO.getCode(), errorCodeDO.getId());
|
||||
// 更新到数据库
|
||||
ErrorCodeDO updateRole = ErrorCodeConvert.INSTANCE.convert(errorCodeUpdateDTO);
|
||||
errorCodeMapper.updateById(updateRole);
|
||||
// TODO 插入操作日志
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteErrorCode(ErrorCodeDeleteDTO errorCodeDeleteDTO) {
|
||||
// 校验角色是否存在
|
||||
ErrorCodeDO errorCodeDO = errorCodeMapper.selectById(errorCodeDeleteDTO.getId());
|
||||
if (errorCodeDO == null) {
|
||||
throw ServiceExceptionUtil.exception(SystemErrorCodeEnum.ERROR_CODE_NOT_EXISTS);
|
||||
}
|
||||
// 更新到数据库,标记删除
|
||||
errorCodeMapper.deleteById(errorCodeDO.getId());
|
||||
// TODO: 2020-05-08 刷新对外提供的错误码列表
|
||||
}
|
||||
|
||||
/**
|
||||
* 校验错误码的唯一字段是否重复
|
||||
*
|
||||
* 是否存在相同编码的错误码
|
||||
*
|
||||
* @param code 错误码编码
|
||||
* @param id 错误码编号
|
||||
*/
|
||||
private void checkDuplicateErrorCode(Integer code, Integer id) {
|
||||
ErrorCodeDO errorCodeDO = errorCodeMapper.selectByCode(code);
|
||||
if (errorCodeDO != null && !errorCodeDO.getId().equals(id)) {
|
||||
throw ServiceExceptionUtil.exception(SystemErrorCodeEnum.ERROR_CODE_DUPLICATE, errorCodeDO.getCode());
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user