From b24e45947bfaf32c3190f3c309370f96d6f53273 Mon Sep 17 00:00:00 2001 From: benpaodeyouyusi Date: Sat, 9 May 2020 21:19:17 +0800 Subject: [PATCH 01/10] =?UTF-8?q?=E9=94=99=E8=AF=AF=E7=A0=81=E7=AC=AC?= =?UTF-8?q?=E4=B8=80=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../system/biz/enums/SystemErrorCodeEnum.java | 5 + .../enums/errorcode/ErrorCodeTypeEnum.java | 26 ++++ .../system/biz/bo/errorcode/ErrorCodeBO.java | 31 +++++ .../config/ServiceExceptionConfiguration.java | 13 ++ .../convert/errorcode/ErrorCodeConvert.java | 34 ++++++ .../biz/dao/errorcode/ErrorCodeMapper.java | 31 +++++ .../biz/dataobject/errorcode/ErrorCodeDO.java | 33 ++++++ .../biz/dto/errorcode/ErrorCodeAddDTO.java | 21 ++++ .../biz/dto/errorcode/ErrorCodeDTO.java | 28 +++++ .../biz/dto/errorcode/ErrorCodeDeleteDTO.java | 17 +++ .../dto/errorcode/ErrorCodeGetListDTO.java | 21 ++++ .../biz/dto/errorcode/ErrorCodePageDTO.java | 10 ++ .../biz/dto/errorcode/ErrorCodeUpdateDTO.java | 31 +++++ .../service/errorCode/ErrorCodeService.java | 45 +++++++ .../errorCode/ErrorCodeServiceImpl.java | 112 ++++++++++++++++++ .../errorCode/SystemErrorCodeController.java | 70 +++++++++++ .../convert/errorcode/ErrorCodeConvert.java | 38 ++++++ .../errorcode/ErrorCodeAddRequest.java | 23 ++++ .../errorcode/ErrorCodePageRequest.java | 15 +++ .../errorcode/ErrorCodePageResponse.java | 33 ++++++ .../errorcode/ErrorCodeUpdateRequest.java | 30 +++++ 21 files changed, 667 insertions(+) create mode 100644 system/system-biz-api/src/main/java/cn/iocoder/mall/system/biz/enums/errorcode/ErrorCodeTypeEnum.java create mode 100644 system/system-biz/src/main/java/cn/iocoder/mall/system/biz/bo/errorcode/ErrorCodeBO.java create mode 100644 system/system-biz/src/main/java/cn/iocoder/mall/system/biz/convert/errorcode/ErrorCodeConvert.java create mode 100644 system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dao/errorcode/ErrorCodeMapper.java create mode 100644 system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dataobject/errorcode/ErrorCodeDO.java create mode 100644 system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dto/errorcode/ErrorCodeAddDTO.java create mode 100644 system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dto/errorcode/ErrorCodeDTO.java create mode 100644 system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dto/errorcode/ErrorCodeDeleteDTO.java create mode 100644 system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dto/errorcode/ErrorCodeGetListDTO.java create mode 100644 system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dto/errorcode/ErrorCodePageDTO.java create mode 100644 system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dto/errorcode/ErrorCodeUpdateDTO.java create mode 100644 system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/errorCode/ErrorCodeService.java create mode 100644 system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/errorCode/ErrorCodeServiceImpl.java create mode 100644 system/system-rest/src/main/java/cn/iocoder/mall/system/rest/controller/errorCode/SystemErrorCodeController.java create mode 100644 system/system-rest/src/main/java/cn/iocoder/mall/system/rest/convert/errorcode/ErrorCodeConvert.java create mode 100644 system/system-rest/src/main/java/cn/iocoder/mall/system/rest/request/errorcode/ErrorCodeAddRequest.java create mode 100644 system/system-rest/src/main/java/cn/iocoder/mall/system/rest/request/errorcode/ErrorCodePageRequest.java create mode 100644 system/system-rest/src/main/java/cn/iocoder/mall/system/rest/request/errorcode/ErrorCodePageResponse.java create mode 100644 system/system-rest/src/main/java/cn/iocoder/mall/system/rest/request/errorcode/ErrorCodeUpdateRequest.java diff --git a/system/system-biz-api/src/main/java/cn/iocoder/mall/system/biz/enums/SystemErrorCodeEnum.java b/system/system-biz-api/src/main/java/cn/iocoder/mall/system/biz/enums/SystemErrorCodeEnum.java index 9fac37acd..7dbe84910 100644 --- a/system/system-biz-api/src/main/java/cn/iocoder/mall/system/biz/enums/SystemErrorCodeEnum.java +++ b/system/system-biz-api/src/main/java/cn/iocoder/mall/system/biz/enums/SystemErrorCodeEnum.java @@ -87,6 +87,11 @@ public enum SystemErrorCodeEnum implements ServiceExceptionUtil.Enumerable { USER_ADDRESS_NOT_EXISTENT(1001004000, "用户地址不存在!"), USER_ADDRESS_IS_DELETED(1001004001, "用户地址已被删除!"), USER_GET_ADDRESS_NOT_EXISTS(1001004002, "获取的地址不存在!"), + + // ========== 错误码模块 1002009000 ========== + ERROR_CODE_NOT_EXISTS(1002009000, "错误码不存在"), + ERROR_CODE_DUPLICATE(1002009001, "已经存在编码为【{}}】的错误码"), + ERROR_CAN_NOT_UPDATE_SYSTEM_TYPE_ERROR(1002004003, "不能修改类型为系统内置的错误码"), ; diff --git a/system/system-biz-api/src/main/java/cn/iocoder/mall/system/biz/enums/errorcode/ErrorCodeTypeEnum.java b/system/system-biz-api/src/main/java/cn/iocoder/mall/system/biz/enums/errorcode/ErrorCodeTypeEnum.java new file mode 100644 index 000000000..34a2a681e --- /dev/null +++ b/system/system-biz-api/src/main/java/cn/iocoder/mall/system/biz/enums/errorcode/ErrorCodeTypeEnum.java @@ -0,0 +1,26 @@ +package cn.iocoder.mall.system.biz.enums.errorcode; + +/** + * 错误码枚举,内置错误码是在 枚举中 + * @author ding + */ +public enum ErrorCodeTypeEnum { + /** + * 内置错误码 + */ + SYSTEM(1), + /** + * 自定义错误码 + */ + CUSTOM(2); + + private final Integer type; + + ErrorCodeTypeEnum(Integer type) { + this.type = type; + } + + public Integer getType() { + return type; + } +} diff --git a/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/bo/errorcode/ErrorCodeBO.java b/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/bo/errorcode/ErrorCodeBO.java new file mode 100644 index 000000000..0672e6142 --- /dev/null +++ b/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/bo/errorcode/ErrorCodeBO.java @@ -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; +} diff --git a/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/config/ServiceExceptionConfiguration.java b/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/config/ServiceExceptionConfiguration.java index 81ea30d07..db8792b92 100644 --- a/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/config/ServiceExceptionConfiguration.java +++ b/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/config/ServiceExceptionConfiguration.java @@ -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 list = errorCodeService.getErrorCodeList(); for (SystemErrorCodeEnum item : SystemErrorCodeEnum.values()) { ServiceExceptionUtil.put(item.getCode(), item.getMessage()); } +// for (ErrorCodeBO bo : list) { +// ServiceExceptionUtil.put(bo.getCode(),bo.getMessage()); +// } } } diff --git a/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/convert/errorcode/ErrorCodeConvert.java b/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/convert/errorcode/ErrorCodeConvert.java new file mode 100644 index 000000000..10eed4aab --- /dev/null +++ b/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/convert/errorcode/ErrorCodeConvert.java @@ -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 convertList(List beans); + +// @Mapping(source = "records", target = "list") +// PageResult convertPage(IPage page); + + ErrorCodeDO convert(ErrorCodeAddDTO bean); + + ErrorCodeDO convert(ErrorCodeUpdateDTO bean); + +} diff --git a/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dao/errorcode/ErrorCodeMapper.java b/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dao/errorcode/ErrorCodeMapper.java new file mode 100644 index 000000000..5d95a15e4 --- /dev/null +++ b/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dao/errorcode/ErrorCodeMapper.java @@ -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 { + + default ErrorCodeDO selectByCode(Integer code){ + //从db查询 + ErrorCodeDO errorCodeDO = selectOne(new QueryWrapperX().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; + + } +} diff --git a/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dataobject/errorcode/ErrorCodeDO.java b/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dataobject/errorcode/ErrorCodeDO.java new file mode 100644 index 000000000..055996696 --- /dev/null +++ b/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dataobject/errorcode/ErrorCodeDO.java @@ -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; +} diff --git a/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dto/errorcode/ErrorCodeAddDTO.java b/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dto/errorcode/ErrorCodeAddDTO.java new file mode 100644 index 000000000..1e55ec16e --- /dev/null +++ b/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dto/errorcode/ErrorCodeAddDTO.java @@ -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; +} diff --git a/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dto/errorcode/ErrorCodeDTO.java b/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dto/errorcode/ErrorCodeDTO.java new file mode 100644 index 000000000..980d538ee --- /dev/null +++ b/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dto/errorcode/ErrorCodeDTO.java @@ -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; +} diff --git a/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dto/errorcode/ErrorCodeDeleteDTO.java b/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dto/errorcode/ErrorCodeDeleteDTO.java new file mode 100644 index 000000000..3db1f447c --- /dev/null +++ b/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dto/errorcode/ErrorCodeDeleteDTO.java @@ -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; +} diff --git a/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dto/errorcode/ErrorCodeGetListDTO.java b/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dto/errorcode/ErrorCodeGetListDTO.java new file mode 100644 index 000000000..02af2e5bb --- /dev/null +++ b/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dto/errorcode/ErrorCodeGetListDTO.java @@ -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 codes; +} diff --git a/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dto/errorcode/ErrorCodePageDTO.java b/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dto/errorcode/ErrorCodePageDTO.java new file mode 100644 index 000000000..9db3edd29 --- /dev/null +++ b/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dto/errorcode/ErrorCodePageDTO.java @@ -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 { + +} diff --git a/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dto/errorcode/ErrorCodeUpdateDTO.java b/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dto/errorcode/ErrorCodeUpdateDTO.java new file mode 100644 index 000000000..9cca65e27 --- /dev/null +++ b/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dto/errorcode/ErrorCodeUpdateDTO.java @@ -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; +} diff --git a/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/errorCode/ErrorCodeService.java b/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/errorCode/ErrorCodeService.java new file mode 100644 index 000000000..bafebd248 --- /dev/null +++ b/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/errorCode/ErrorCodeService.java @@ -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 getErrorCodeList(); + + PageResult getErrorCodePage(ErrorCodePageDTO pageDTO); + + /** + * 新增 + * @param errorCodeAddDTO 错误码信息,默认类型为自定义错误码 + * @return + */ + Integer addErrorCode(ErrorCodeAddDTO errorCodeAddDTO); + + /** + * 更新错误码,系统内置错误码是不允许更新 + * @param errorCodeUpdateDTO 错误码信息 + */ + void updateErrorCode(ErrorCodeUpdateDTO errorCodeUpdateDTO); + + /** + * 删除错误码 + * @param errorCodeDeleteDTO 只允许删除自定义错误码 + */ + void deleteErrorCode(ErrorCodeDeleteDTO errorCodeDeleteDTO); +} diff --git a/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/errorCode/ErrorCodeServiceImpl.java b/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/errorCode/ErrorCodeServiceImpl.java new file mode 100644 index 000000000..04d963574 --- /dev/null +++ b/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/errorCode/ErrorCodeServiceImpl.java @@ -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 getErrorCodeList() { + List list = errorCodeMapper.selectList(new QueryWrapperX()); + return ErrorCodeConvert.INSTANCE.convertList(list); + } + + + @Override + public PageResult getErrorCodePage(ErrorCodePageDTO pageDTO) { +// List list = errorCodeMapper.selectList(new QueryWrapperX()); +// 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()); + } + } +} diff --git a/system/system-rest/src/main/java/cn/iocoder/mall/system/rest/controller/errorCode/SystemErrorCodeController.java b/system/system-rest/src/main/java/cn/iocoder/mall/system/rest/controller/errorCode/SystemErrorCodeController.java new file mode 100644 index 000000000..8c85e2807 --- /dev/null +++ b/system/system-rest/src/main/java/cn/iocoder/mall/system/rest/controller/errorCode/SystemErrorCodeController.java @@ -0,0 +1,70 @@ +package cn.iocoder.mall.system.rest.controller.errorCode; + +import cn.iocoder.common.framework.constant.MallConstants; +import cn.iocoder.common.framework.vo.CommonResult; +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 cn.iocoder.mall.system.biz.service.errorCode.ErrorCodeService; +import cn.iocoder.mall.system.rest.convert.errorcode.ErrorCodeConvert; +import cn.iocoder.mall.system.rest.request.errorcode.ErrorCodeAddRequest; +import cn.iocoder.mall.system.rest.request.errorcode.ErrorCodePageRequest; +import cn.iocoder.mall.system.rest.request.errorcode.ErrorCodePageResponse; +import cn.iocoder.mall.system.rest.request.errorcode.ErrorCodeUpdateRequest; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +/** + * 错误码 + * + * @author youyusi + */ +@RestController +@RequestMapping(MallConstants.ROOT_PATH_ADMIN + "/errorCode") +@Api("错误码") +public class SystemErrorCodeController { + @Autowired + private ErrorCodeService errorCodeService; + + @GetMapping("/page") + @ApiOperation(value = "错误码分页") +// @RequiresPermissions("system:errorCode:page") + public CommonResult> page(ErrorCodePageRequest request) { + ErrorCodePageDTO pageDTO = ErrorCodeConvert.INSTANCE.convert(request); + PageResult pageResult = errorCodeService.getErrorCodePage(pageDTO); + return CommonResult.success(ErrorCodeConvert.INSTANCE.convertPage(pageResult)); + } + + @PostMapping("/add") + @ApiOperation(value = "创建错误码") +// @RequiresPermissions("system:errorCode:add") + public CommonResult add(ErrorCodeAddRequest request) { + ErrorCodeAddDTO addDTO = ErrorCodeConvert.INSTANCE.convert(request); + return CommonResult.success(errorCodeService.addErrorCode(addDTO)); + } + + @PostMapping("/update") + @ApiOperation(value = "更新错误码") +// @RequiresPermissions("system:errorCode:update") + public CommonResult update(ErrorCodeUpdateRequest request) { + ErrorCodeUpdateDTO updateDTO = ErrorCodeConvert.INSTANCE.convert(request); + errorCodeService.updateErrorCode(updateDTO); + return CommonResult.success(true); + } + + @PostMapping("/delete") + @ApiOperation(value = "删除错误码") +// @RequiresPermissions("system:errorCode:delete") + @ApiImplicitParam(name = "id", value = "错误码编号", required = true, example = "1") + public CommonResult delete(@RequestParam("id") Integer id) { + ErrorCodeDeleteDTO deleteDTO = new ErrorCodeDeleteDTO().setId(id); + errorCodeService.deleteErrorCode(deleteDTO); + return CommonResult.success(true); + } +} diff --git a/system/system-rest/src/main/java/cn/iocoder/mall/system/rest/convert/errorcode/ErrorCodeConvert.java b/system/system-rest/src/main/java/cn/iocoder/mall/system/rest/convert/errorcode/ErrorCodeConvert.java new file mode 100644 index 000000000..f869a5d7b --- /dev/null +++ b/system/system-rest/src/main/java/cn/iocoder/mall/system/rest/convert/errorcode/ErrorCodeConvert.java @@ -0,0 +1,38 @@ +package cn.iocoder.mall.system.rest.convert.errorcode; + +import cn.iocoder.common.framework.vo.PageResult; +import cn.iocoder.mall.system.biz.bo.authorization.RoleBO; +import cn.iocoder.mall.system.biz.bo.errorcode.ErrorCodeBO; +import cn.iocoder.mall.system.biz.dto.authorization.RoleAddDTO; +import cn.iocoder.mall.system.biz.dto.authorization.RolePageDTO; +import cn.iocoder.mall.system.biz.dto.authorization.RoleUpdateDTO; +import cn.iocoder.mall.system.biz.dto.errorcode.ErrorCodeAddDTO; +import cn.iocoder.mall.system.biz.dto.errorcode.ErrorCodePageDTO; +import cn.iocoder.mall.system.biz.dto.errorcode.ErrorCodeUpdateDTO; +import cn.iocoder.mall.system.rest.convert.authorization.AdminsRoleConvert; +import cn.iocoder.mall.system.rest.request.authorization.AdminsRoleAddRequest; +import cn.iocoder.mall.system.rest.request.authorization.AdminsRolePageRequest; +import cn.iocoder.mall.system.rest.request.authorization.AdminsRoleUpdateRequest; +import cn.iocoder.mall.system.rest.request.errorcode.ErrorCodeAddRequest; +import cn.iocoder.mall.system.rest.request.errorcode.ErrorCodePageRequest; +import cn.iocoder.mall.system.rest.request.errorcode.ErrorCodePageResponse; +import cn.iocoder.mall.system.rest.request.errorcode.ErrorCodeUpdateRequest; +import cn.iocoder.mall.system.rest.response.authorization.AdminsRolePageResponse; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +/** + * @author ding + */ +@Mapper +public interface ErrorCodeConvert { + ErrorCodeConvert INSTANCE = Mappers.getMapper(ErrorCodeConvert.class); + + ErrorCodeAddDTO convert(ErrorCodeAddRequest bean); + + ErrorCodeUpdateDTO convert(ErrorCodeUpdateRequest bean); + + ErrorCodePageDTO convert(ErrorCodePageRequest bean); + + PageResult convertPage(PageResult bean); +} diff --git a/system/system-rest/src/main/java/cn/iocoder/mall/system/rest/request/errorcode/ErrorCodeAddRequest.java b/system/system-rest/src/main/java/cn/iocoder/mall/system/rest/request/errorcode/ErrorCodeAddRequest.java new file mode 100644 index 000000000..82861e9b8 --- /dev/null +++ b/system/system-rest/src/main/java/cn/iocoder/mall/system/rest/request/errorcode/ErrorCodeAddRequest.java @@ -0,0 +1,23 @@ +package cn.iocoder.mall.system.rest.request.errorcode; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import javax.validation.constraints.NotEmpty; + +@ApiModel("管理员 - 错误码模块 - 添加错误码 Request") +@Data +@Accessors(chain = true) +public class ErrorCodeAddRequest { + + @ApiModelProperty(value = "错误码信息", required = true, example = "系统管理员") + @NotEmpty(message = "错误码信息不能为空") + private String message; + + @ApiModelProperty(value = "错误码编码", example = "SUPER_ADMIN") + @NotEmpty(message = "错误码编码不能为空") + private Integer code; + +} diff --git a/system/system-rest/src/main/java/cn/iocoder/mall/system/rest/request/errorcode/ErrorCodePageRequest.java b/system/system-rest/src/main/java/cn/iocoder/mall/system/rest/request/errorcode/ErrorCodePageRequest.java new file mode 100644 index 000000000..17ef20468 --- /dev/null +++ b/system/system-rest/src/main/java/cn/iocoder/mall/system/rest/request/errorcode/ErrorCodePageRequest.java @@ -0,0 +1,15 @@ +package cn.iocoder.mall.system.rest.request.errorcode; + +import io.swagger.annotations.ApiModel; +import lombok.Data; +import lombok.experimental.Accessors; + + +/** + * @author ding + */ +@ApiModel("管理员 - 错误码模块 - 错误码分页 Request") +@Data +@Accessors(chain = true) +public class ErrorCodePageRequest { +} diff --git a/system/system-rest/src/main/java/cn/iocoder/mall/system/rest/request/errorcode/ErrorCodePageResponse.java b/system/system-rest/src/main/java/cn/iocoder/mall/system/rest/request/errorcode/ErrorCodePageResponse.java new file mode 100644 index 000000000..b9a2c17e9 --- /dev/null +++ b/system/system-rest/src/main/java/cn/iocoder/mall/system/rest/request/errorcode/ErrorCodePageResponse.java @@ -0,0 +1,33 @@ +package cn.iocoder.mall.system.rest.request.errorcode; + +import io.swagger.annotations.ApiModel; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.util.Date; + +/** + * 类 描 述:错误码模块 + * @author ding + */ +@ApiModel("管理员 - 错误码模块 - 查询错误码 Request") +@Data +@Accessors(chain = true) +public class ErrorCodePageResponse { + /** + * 错误码编号 + */ + private Integer id; + /** + * 错误码编码 + */ + private Integer code; + /** + * 错误码错误信息 + */ + private String message; + /** + * 添加时间 + */ + private Date createTime; +} diff --git a/system/system-rest/src/main/java/cn/iocoder/mall/system/rest/request/errorcode/ErrorCodeUpdateRequest.java b/system/system-rest/src/main/java/cn/iocoder/mall/system/rest/request/errorcode/ErrorCodeUpdateRequest.java new file mode 100644 index 000000000..53e2d5e0d --- /dev/null +++ b/system/system-rest/src/main/java/cn/iocoder/mall/system/rest/request/errorcode/ErrorCodeUpdateRequest.java @@ -0,0 +1,30 @@ +package cn.iocoder.mall.system.rest.request.errorcode; + +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; + +/** + * 类 描 述:错误码模块 + * @author ding + */ +@ApiModel("管理员 - 错误码模块 - 修改错误码 Request") +@Data +@Accessors(chain = true) +public class ErrorCodeUpdateRequest { + @ApiModelProperty(value = "错误码编号", required = true, example = "1") + @NotNull(message = "错误码不能为空") + private Integer id; + + @ApiModelProperty(value = "错误码信息", required = true, example = "系统管理员") + @NotEmpty(message = "错误码信息不能为空") + private String message; + + @ApiModelProperty(value = "错误码编码", example = "SUPER_ADMIN") + @NotEmpty(message = "错误码编码不能为空") + private Integer code; +} From 96858fae215181cb454254348d15025689e07042 Mon Sep 17 00:00:00 2001 From: benpaodeyouyusi Date: Sun, 10 May 2020 23:38:20 +0800 Subject: [PATCH 02/10] =?UTF-8?q?=E9=94=99=E8=AF=AF=E7=A0=81=E7=AC=AC?= =?UTF-8?q?=E4=B8=80=E7=89=88=E7=BB=AD=EF=BC=8C=E5=88=86=E7=BB=84=E6=9A=82?= =?UTF-8?q?=E6=97=B6=E6=9C=AA=E5=8A=A0=EF=BC=8C=E7=AC=AC=E4=BA=8C=E7=89=88?= =?UTF-8?q?=E4=BC=9A=E6=B7=BB=E5=8A=A0=E5=88=86=E7=BB=84=E5=92=8Cmq?= =?UTF-8?q?=E8=AE=A2=E9=98=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../config/ServiceExceptionConfiguration.java | 15 ++++---- .../ErrorCodeService.java | 17 ++++++++- .../ErrorCodeServiceImpl.java | 37 ++++++++++++++++--- .../errorCode/SystemErrorCodeController.java | 15 ++++---- .../convert/errorcode/ErrorCodeConvert.java | 11 +----- .../errorcode/ErrorCodePageResponse.java | 2 +- .../rpc/api/errorcode/ErrorCodeRPC.java | 16 ++++++++ .../response/errorcode/ErrorCodeResponse.java | 33 +++++++++++++++++ .../convert/errorcode/ErrorCodeConvert.java | 16 ++++++++ .../rpc/rpc/errorcode/ErrorCodeRPCImpl.java | 30 +++++++++++++++ system/system-rpc/src/main/resources/rpc.yaml | 4 ++ 11 files changed, 163 insertions(+), 33 deletions(-) rename system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/{errorCode => errorcode}/ErrorCodeService.java (75%) rename system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/{errorCode => errorcode}/ErrorCodeServiceImpl.java (72%) rename system/system-rest/src/main/java/cn/iocoder/mall/system/rest/{request => response}/errorcode/ErrorCodePageResponse.java (91%) create mode 100644 system/system-rpc-api/src/main/java/cn/iocoder/mall/system/rpc/api/errorcode/ErrorCodeRPC.java create mode 100644 system/system-rpc-api/src/main/java/cn/iocoder/mall/system/rpc/response/errorcode/ErrorCodeResponse.java create mode 100644 system/system-rpc/src/main/java/cn/iocoder/mall/system/rpc/convert/errorcode/ErrorCodeConvert.java create mode 100644 system/system-rpc/src/main/java/cn/iocoder/mall/system/rpc/rpc/errorcode/ErrorCodeRPCImpl.java diff --git a/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/config/ServiceExceptionConfiguration.java b/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/config/ServiceExceptionConfiguration.java index db8792b92..7f1433e2f 100644 --- a/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/config/ServiceExceptionConfiguration.java +++ b/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/config/ServiceExceptionConfiguration.java @@ -2,9 +2,8 @@ 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 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; @@ -15,18 +14,18 @@ import java.util.List; @Configuration public class ServiceExceptionConfiguration { -// @Autowired -// private ErrorCodeService errorCodeService; + @Autowired + private ErrorCodeService errorCodeService; @EventListener(ApplicationReadyEvent.class) // 可参考 https://www.cnblogs.com/ssslinppp/p/7607509.html public void initMessages() { -// List list = errorCodeService.getErrorCodeList(); + List list = errorCodeService.getErrorCodeList(); for (SystemErrorCodeEnum item : SystemErrorCodeEnum.values()) { ServiceExceptionUtil.put(item.getCode(), item.getMessage()); } -// for (ErrorCodeBO bo : list) { -// ServiceExceptionUtil.put(bo.getCode(),bo.getMessage()); -// } + for (ErrorCodeBO bo : list) { + ServiceExceptionUtil.put(bo.getCode(),bo.getMessage()); + } } } diff --git a/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/errorCode/ErrorCodeService.java b/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/errorcode/ErrorCodeService.java similarity index 75% rename from system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/errorCode/ErrorCodeService.java rename to system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/errorcode/ErrorCodeService.java index bafebd248..31c23a86d 100644 --- a/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/errorCode/ErrorCodeService.java +++ b/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/errorcode/ErrorCodeService.java @@ -1,4 +1,4 @@ -package cn.iocoder.mall.system.biz.service.errorCode; +package cn.iocoder.mall.system.biz.service.errorcode; import cn.iocoder.common.framework.vo.PageResult; import cn.iocoder.mall.system.biz.bo.errorcode.ErrorCodeBO; @@ -20,8 +20,23 @@ public interface ErrorCodeService { */ ErrorCodeBO getErrorCode(Integer code); + /** + * 从db取出错误码列表数据 + * @return db错误码列表 + */ List getErrorCodeList(); + /** + * 取出所有错误码列表数据 + * @return 所有错误码列表 + */ + List getErrorCodeListAll(); + + /** + * 分页取出所有错误码列表数据 + * @param pageDTO 分页数据 + * @return 错误码列表 + */ PageResult getErrorCodePage(ErrorCodePageDTO pageDTO); /** diff --git a/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/errorCode/ErrorCodeServiceImpl.java b/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/errorcode/ErrorCodeServiceImpl.java similarity index 72% rename from system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/errorCode/ErrorCodeServiceImpl.java rename to system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/errorcode/ErrorCodeServiceImpl.java index 04d963574..c30ff3c0a 100644 --- a/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/errorCode/ErrorCodeServiceImpl.java +++ b/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/errorcode/ErrorCodeServiceImpl.java @@ -1,4 +1,4 @@ -package cn.iocoder.mall.system.biz.service.errorCode; +package cn.iocoder.mall.system.biz.service.errorcode; import cn.iocoder.common.framework.util.ServiceExceptionUtil; import cn.iocoder.common.framework.vo.PageResult; @@ -41,12 +41,25 @@ public class ErrorCodeServiceImpl implements ErrorCodeService { return ErrorCodeConvert.INSTANCE.convertList(list); } + @Override + public List getErrorCodeListAll() { + List list = errorCodeMapper.selectList(new QueryWrapperX()); + for (SystemErrorCodeEnum item : SystemErrorCodeEnum.values()) { + list.add(new ErrorCodeDO().setId(0).setCode(item.getCode()). + setMessage(item.getMessage()).setType(ErrorCodeTypeEnum.SYSTEM.getType())); + } + return ErrorCodeConvert.INSTANCE.convertList(list); + } + @Override public PageResult getErrorCodePage(ErrorCodePageDTO pageDTO) { -// List list = errorCodeMapper.selectList(new QueryWrapperX()); -// List<> - return null; + List list = errorCodeMapper.selectList(new QueryWrapperX()); + for (SystemErrorCodeEnum item : SystemErrorCodeEnum.values()) { + list.add(new ErrorCodeDO().setId(0).setCode(item.getCode()). + setMessage(item.getMessage()).setType(ErrorCodeTypeEnum.SYSTEM.getType())); + } + return listToPageList(pageDTO.getPageNo(),pageDTO.getPageSize(),list); } @Override @@ -85,14 +98,15 @@ public class ErrorCodeServiceImpl implements ErrorCodeService { @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 刷新对外提供的错误码列表 + // TODO: 2020-05-10 刷新对外提供的错误码列表 + // TODO: 2020-05-10 ServiceExceptionUtil中未提供去除错误码操作,后续新增此接口是否影响? } /** @@ -109,4 +123,15 @@ public class ErrorCodeServiceImpl implements ErrorCodeService { throw ServiceExceptionUtil.exception(SystemErrorCodeEnum.ERROR_CODE_DUPLICATE, errorCodeDO.getCode()); } } + + private PageResult listToPageList(int currentPage, int rows, List list){ + currentPage = currentPage * rows; + Integer sum = list.size(); + if (currentPage + rows > sum){ + list = list.subList(currentPage, sum); + }else { + list = list.subList(currentPage, currentPage + rows); + } + return new PageResult().setList(list).setTotal(sum); + } } diff --git a/system/system-rest/src/main/java/cn/iocoder/mall/system/rest/controller/errorCode/SystemErrorCodeController.java b/system/system-rest/src/main/java/cn/iocoder/mall/system/rest/controller/errorCode/SystemErrorCodeController.java index 8c85e2807..863b60fcf 100644 --- a/system/system-rest/src/main/java/cn/iocoder/mall/system/rest/controller/errorCode/SystemErrorCodeController.java +++ b/system/system-rest/src/main/java/cn/iocoder/mall/system/rest/controller/errorCode/SystemErrorCodeController.java @@ -3,16 +3,17 @@ package cn.iocoder.mall.system.rest.controller.errorCode; import cn.iocoder.common.framework.constant.MallConstants; import cn.iocoder.common.framework.vo.CommonResult; import cn.iocoder.common.framework.vo.PageResult; +import cn.iocoder.mall.security.core.annotation.RequiresPermissions; 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 cn.iocoder.mall.system.biz.service.errorCode.ErrorCodeService; +import cn.iocoder.mall.system.biz.service.errorcode.ErrorCodeService; import cn.iocoder.mall.system.rest.convert.errorcode.ErrorCodeConvert; import cn.iocoder.mall.system.rest.request.errorcode.ErrorCodeAddRequest; import cn.iocoder.mall.system.rest.request.errorcode.ErrorCodePageRequest; -import cn.iocoder.mall.system.rest.request.errorcode.ErrorCodePageResponse; +import cn.iocoder.mall.system.rest.response.errorcode.ErrorCodePageResponse; import cn.iocoder.mall.system.rest.request.errorcode.ErrorCodeUpdateRequest; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; @@ -26,7 +27,7 @@ import org.springframework.web.bind.annotation.*; * @author youyusi */ @RestController -@RequestMapping(MallConstants.ROOT_PATH_ADMIN + "/errorCode") +@RequestMapping(MallConstants.ROOT_PATH_ADMIN + "/errorcode") @Api("错误码") public class SystemErrorCodeController { @Autowired @@ -34,7 +35,7 @@ public class SystemErrorCodeController { @GetMapping("/page") @ApiOperation(value = "错误码分页") -// @RequiresPermissions("system:errorCode:page") + @RequiresPermissions("system:errorcode:page") public CommonResult> page(ErrorCodePageRequest request) { ErrorCodePageDTO pageDTO = ErrorCodeConvert.INSTANCE.convert(request); PageResult pageResult = errorCodeService.getErrorCodePage(pageDTO); @@ -43,7 +44,7 @@ public class SystemErrorCodeController { @PostMapping("/add") @ApiOperation(value = "创建错误码") -// @RequiresPermissions("system:errorCode:add") + @RequiresPermissions("system:errorcode:add") public CommonResult add(ErrorCodeAddRequest request) { ErrorCodeAddDTO addDTO = ErrorCodeConvert.INSTANCE.convert(request); return CommonResult.success(errorCodeService.addErrorCode(addDTO)); @@ -51,7 +52,7 @@ public class SystemErrorCodeController { @PostMapping("/update") @ApiOperation(value = "更新错误码") -// @RequiresPermissions("system:errorCode:update") + @RequiresPermissions("system:errorcode:update") public CommonResult update(ErrorCodeUpdateRequest request) { ErrorCodeUpdateDTO updateDTO = ErrorCodeConvert.INSTANCE.convert(request); errorCodeService.updateErrorCode(updateDTO); @@ -60,7 +61,7 @@ public class SystemErrorCodeController { @PostMapping("/delete") @ApiOperation(value = "删除错误码") -// @RequiresPermissions("system:errorCode:delete") + @RequiresPermissions("system:errorcode:delete") @ApiImplicitParam(name = "id", value = "错误码编号", required = true, example = "1") public CommonResult delete(@RequestParam("id") Integer id) { ErrorCodeDeleteDTO deleteDTO = new ErrorCodeDeleteDTO().setId(id); diff --git a/system/system-rest/src/main/java/cn/iocoder/mall/system/rest/convert/errorcode/ErrorCodeConvert.java b/system/system-rest/src/main/java/cn/iocoder/mall/system/rest/convert/errorcode/ErrorCodeConvert.java index f869a5d7b..49dabc8bb 100644 --- a/system/system-rest/src/main/java/cn/iocoder/mall/system/rest/convert/errorcode/ErrorCodeConvert.java +++ b/system/system-rest/src/main/java/cn/iocoder/mall/system/rest/convert/errorcode/ErrorCodeConvert.java @@ -1,23 +1,14 @@ package cn.iocoder.mall.system.rest.convert.errorcode; import cn.iocoder.common.framework.vo.PageResult; -import cn.iocoder.mall.system.biz.bo.authorization.RoleBO; import cn.iocoder.mall.system.biz.bo.errorcode.ErrorCodeBO; -import cn.iocoder.mall.system.biz.dto.authorization.RoleAddDTO; -import cn.iocoder.mall.system.biz.dto.authorization.RolePageDTO; -import cn.iocoder.mall.system.biz.dto.authorization.RoleUpdateDTO; import cn.iocoder.mall.system.biz.dto.errorcode.ErrorCodeAddDTO; import cn.iocoder.mall.system.biz.dto.errorcode.ErrorCodePageDTO; import cn.iocoder.mall.system.biz.dto.errorcode.ErrorCodeUpdateDTO; -import cn.iocoder.mall.system.rest.convert.authorization.AdminsRoleConvert; -import cn.iocoder.mall.system.rest.request.authorization.AdminsRoleAddRequest; -import cn.iocoder.mall.system.rest.request.authorization.AdminsRolePageRequest; -import cn.iocoder.mall.system.rest.request.authorization.AdminsRoleUpdateRequest; import cn.iocoder.mall.system.rest.request.errorcode.ErrorCodeAddRequest; import cn.iocoder.mall.system.rest.request.errorcode.ErrorCodePageRequest; -import cn.iocoder.mall.system.rest.request.errorcode.ErrorCodePageResponse; +import cn.iocoder.mall.system.rest.response.errorcode.ErrorCodePageResponse; import cn.iocoder.mall.system.rest.request.errorcode.ErrorCodeUpdateRequest; -import cn.iocoder.mall.system.rest.response.authorization.AdminsRolePageResponse; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; diff --git a/system/system-rest/src/main/java/cn/iocoder/mall/system/rest/request/errorcode/ErrorCodePageResponse.java b/system/system-rest/src/main/java/cn/iocoder/mall/system/rest/response/errorcode/ErrorCodePageResponse.java similarity index 91% rename from system/system-rest/src/main/java/cn/iocoder/mall/system/rest/request/errorcode/ErrorCodePageResponse.java rename to system/system-rest/src/main/java/cn/iocoder/mall/system/rest/response/errorcode/ErrorCodePageResponse.java index b9a2c17e9..a03097773 100644 --- a/system/system-rest/src/main/java/cn/iocoder/mall/system/rest/request/errorcode/ErrorCodePageResponse.java +++ b/system/system-rest/src/main/java/cn/iocoder/mall/system/rest/response/errorcode/ErrorCodePageResponse.java @@ -1,4 +1,4 @@ -package cn.iocoder.mall.system.rest.request.errorcode; +package cn.iocoder.mall.system.rest.response.errorcode; import io.swagger.annotations.ApiModel; import lombok.Data; diff --git a/system/system-rpc-api/src/main/java/cn/iocoder/mall/system/rpc/api/errorcode/ErrorCodeRPC.java b/system/system-rpc-api/src/main/java/cn/iocoder/mall/system/rpc/api/errorcode/ErrorCodeRPC.java new file mode 100644 index 000000000..b0a8eace7 --- /dev/null +++ b/system/system-rpc-api/src/main/java/cn/iocoder/mall/system/rpc/api/errorcode/ErrorCodeRPC.java @@ -0,0 +1,16 @@ +package cn.iocoder.mall.system.rpc.api.errorcode; + +import cn.iocoder.common.framework.vo.CommonResult; +import cn.iocoder.mall.system.rpc.response.errorcode.ErrorCodeResponse; + +import java.util.List; + +/** + * ErrorCode RPC 接口 + * @author ding + */ +public interface ErrorCodeRPC { + + CommonResult> getErrorCode(); + +} diff --git a/system/system-rpc-api/src/main/java/cn/iocoder/mall/system/rpc/response/errorcode/ErrorCodeResponse.java b/system/system-rpc-api/src/main/java/cn/iocoder/mall/system/rpc/response/errorcode/ErrorCodeResponse.java new file mode 100644 index 000000000..c88dcfe7f --- /dev/null +++ b/system/system-rpc-api/src/main/java/cn/iocoder/mall/system/rpc/response/errorcode/ErrorCodeResponse.java @@ -0,0 +1,33 @@ +package cn.iocoder.mall.system.rpc.response.errorcode; + +import io.swagger.annotations.ApiModel; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.util.Date; + +/** + * 类 描 述:错误码模块 + * @author ding + */ +@ApiModel("管理员 - 错误码模块 - 查询错误码") +@Data +@Accessors(chain = true) +public class ErrorCodeResponse { + /** + * 错误码编号 + */ + private Integer id; + /** + * 错误码编码 + */ + private Integer code; + /** + * 错误码错误信息 + */ + private String message; + /** + * 添加时间 + */ + private Date createTime; +} diff --git a/system/system-rpc/src/main/java/cn/iocoder/mall/system/rpc/convert/errorcode/ErrorCodeConvert.java b/system/system-rpc/src/main/java/cn/iocoder/mall/system/rpc/convert/errorcode/ErrorCodeConvert.java new file mode 100644 index 000000000..f1d281b66 --- /dev/null +++ b/system/system-rpc/src/main/java/cn/iocoder/mall/system/rpc/convert/errorcode/ErrorCodeConvert.java @@ -0,0 +1,16 @@ +package cn.iocoder.mall.system.rpc.convert.errorcode; + +import cn.iocoder.mall.system.biz.bo.errorcode.ErrorCodeBO; +import cn.iocoder.mall.system.rpc.response.errorcode.ErrorCodeResponse; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +import java.util.List; + +@Mapper +public interface ErrorCodeConvert { + + ErrorCodeConvert INSTANCE = Mappers.getMapper(ErrorCodeConvert.class); + + List convert(List bean); +} diff --git a/system/system-rpc/src/main/java/cn/iocoder/mall/system/rpc/rpc/errorcode/ErrorCodeRPCImpl.java b/system/system-rpc/src/main/java/cn/iocoder/mall/system/rpc/rpc/errorcode/ErrorCodeRPCImpl.java new file mode 100644 index 000000000..7f01a90af --- /dev/null +++ b/system/system-rpc/src/main/java/cn/iocoder/mall/system/rpc/rpc/errorcode/ErrorCodeRPCImpl.java @@ -0,0 +1,30 @@ +package cn.iocoder.mall.system.rpc.rpc.errorcode; + +import cn.iocoder.common.framework.vo.CommonResult; +import cn.iocoder.mall.system.biz.bo.errorcode.ErrorCodeBO; +import cn.iocoder.mall.system.biz.service.errorcode.ErrorCodeService; +import cn.iocoder.mall.system.rpc.api.errorcode.ErrorCodeRPC; +import cn.iocoder.mall.system.rpc.convert.errorcode.ErrorCodeConvert; +import cn.iocoder.mall.system.rpc.convert.user.UserConvert; +import cn.iocoder.mall.system.rpc.response.errorcode.ErrorCodeResponse; +import org.apache.dubbo.config.annotation.Service; +import org.springframework.beans.factory.annotation.Autowired; + +import java.util.List; + +/** + * + * @author ding + */ +@Service(version = "${dubbo.provider.ErrorCodeRPC.version}", validation = "true") +public class ErrorCodeRPCImpl implements ErrorCodeRPC { + + @Autowired + private ErrorCodeService errorCodeService; + + @Override + public CommonResult> getErrorCode() { + List list = errorCodeService.getErrorCodeListAll(); + return CommonResult.success(ErrorCodeConvert.INSTANCE.convert(list)); + } +} diff --git a/system/system-rpc/src/main/resources/rpc.yaml b/system/system-rpc/src/main/resources/rpc.yaml index e056da380..c44353e1f 100644 --- a/system/system-rpc/src/main/resources/rpc.yaml +++ b/system/system-rpc/src/main/resources/rpc.yaml @@ -25,6 +25,8 @@ dubbo: version: 1.0.0 UserAddressRPC: version: 1.0.0 + ErrorCodeRPC: + version: 1.0.0 # Dubbo 服务消费者的配置 consumer: @@ -38,3 +40,5 @@ dubbo: version: 1.0.0 UserRPC: version: 1.0.0 + ErrorCodeRPC: + version: 1.0.0 From a4ca27d68c66c51a3c77645af5b51d0780047ff7 Mon Sep 17 00:00:00 2001 From: q2118cs Date: Mon, 11 May 2020 15:41:54 +0800 Subject: [PATCH 03/10] =?UTF-8?q?=E5=95=86=E5=93=81=E8=A7=84=E6=A0=BC?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- product/pom.xml | 1 + product/product-biz-api/pom.xml | 2 +- product/product-biz/pom.xml | 2 +- .../product/biz/bo/attr/ProductAttrBO.java | 9 +- .../biz/bo/attr/ProductAttrSimpleBO.java | 25 ++ .../bo/attr/ProductAttrSimpleWithValueBO.java | 18 ++ .../biz/bo/attr/ProductAttrValueBO.java | 4 + .../biz/bo/attr/ProductAttrValueSimpleBO.java | 24 ++ .../biz/bo/attr/ProductAttrWithValueBO.java | 18 ++ .../biz/convert/attr/ProductAttrConvert.java | 31 +- .../convert/product/ProductAttrConvert2.java | 58 ---- .../product/ProductAttrValueDO.java | 4 +- .../{product => attr}/ProductAttrAddDTO.java | 2 +- .../ProductAttrUpdateDTO.java | 2 +- .../ProductAttrValueAddDTO.java | 2 +- .../ProductAttrValueUpdateDTO.java | 2 +- .../biz/dto/product/ProductAttrPageDTO.java | 22 -- .../service/product/ProductAttrService.java | 43 ++- .../product/impl/ProductAttrServiceImpl.java | 304 +++++++++--------- product/product-rest/pom.xml | 2 +- .../admins/AdminsProductAttrController.java | 189 +++++------ .../rest/convert/attr/ProductAttrConvert.java | 28 +- .../request/attr/ProductAttrAddRequest.java | 20 ++ .../attr/ProductAttrUpdateRequest.java | 26 ++ .../attr/ProductAttrValueAddRequest.java | 27 ++ .../attr/ProductAttrValueUpdateRequest.java | 27 ++ .../attr/AdminsProductAttrSimpleResponse.java | 38 +++ .../response/attr/AdminsProductAttrVO.java | 24 ++ .../attr/AdminsProductAttrValueResponse.java | 26 ++ product/product-rpc-api/pom.xml | 2 +- product/product-rpc/pom.xml | 2 +- .../admins/AdminsProductAttrController.java | 3 +- .../admins/AdminsProductBrandController.java | 3 +- .../AdminsProductCategoryController.java | 3 +- .../admins/AdminsProductSpuController.java | 3 +- .../users/UserFavoriteController.java | 1 - 36 files changed, 622 insertions(+), 375 deletions(-) create mode 100644 product/product-biz/src/main/java/cn/iocoder/mall/product/biz/bo/attr/ProductAttrSimpleBO.java create mode 100644 product/product-biz/src/main/java/cn/iocoder/mall/product/biz/bo/attr/ProductAttrSimpleWithValueBO.java create mode 100644 product/product-biz/src/main/java/cn/iocoder/mall/product/biz/bo/attr/ProductAttrValueSimpleBO.java create mode 100644 product/product-biz/src/main/java/cn/iocoder/mall/product/biz/bo/attr/ProductAttrWithValueBO.java delete mode 100644 product/product-biz/src/main/java/cn/iocoder/mall/product/biz/convert/product/ProductAttrConvert2.java rename product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/{product => attr}/ProductAttrAddDTO.java (86%) rename product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/{product => attr}/ProductAttrUpdateDTO.java (90%) rename product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/{product => attr}/ProductAttrValueAddDTO.java (90%) rename product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/{product => attr}/ProductAttrValueUpdateDTO.java (91%) delete mode 100644 product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/product/ProductAttrPageDTO.java create mode 100644 product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/attr/ProductAttrAddRequest.java create mode 100644 product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/attr/ProductAttrUpdateRequest.java create mode 100644 product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/attr/ProductAttrValueAddRequest.java create mode 100644 product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/attr/ProductAttrValueUpdateRequest.java create mode 100644 product/product-rest/src/main/java/cn/iocoder/mall/product/rest/response/attr/AdminsProductAttrSimpleResponse.java create mode 100644 product/product-rest/src/main/java/cn/iocoder/mall/product/rest/response/attr/AdminsProductAttrVO.java create mode 100644 product/product-rest/src/main/java/cn/iocoder/mall/product/rest/response/attr/AdminsProductAttrValueResponse.java diff --git a/product/pom.xml b/product/pom.xml index f4e48fe32..960d54248 100644 --- a/product/pom.xml +++ b/product/pom.xml @@ -12,6 +12,7 @@ product product pom + product-application product-rpc-api diff --git a/product/product-biz-api/pom.xml b/product/product-biz-api/pom.xml index 7c302c683..24925d7a7 100644 --- a/product/product-biz-api/pom.xml +++ b/product/product-biz-api/pom.xml @@ -3,7 +3,7 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - system + product cn.iocoder.mall 1.0-SNAPSHOT diff --git a/product/product-biz/pom.xml b/product/product-biz/pom.xml index 5fceb0b3b..1bb098eb3 100644 --- a/product/product-biz/pom.xml +++ b/product/product-biz/pom.xml @@ -3,7 +3,7 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - system + product cn.iocoder.mall 1.0-SNAPSHOT diff --git a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/bo/attr/ProductAttrBO.java b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/bo/attr/ProductAttrBO.java index 855638bd7..5519c84e5 100644 --- a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/bo/attr/ProductAttrBO.java +++ b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/bo/attr/ProductAttrBO.java @@ -3,12 +3,12 @@ package cn.iocoder.mall.product.biz.bo.attr; import lombok.Data; import lombok.experimental.Accessors; +import java.io.Serializable; import java.util.Date; -import java.util.List; @Data @Accessors(chain = true) -public class ProductAttrBO { +public class ProductAttrBO implements Serializable { /** * 规格编号 @@ -26,8 +26,5 @@ public class ProductAttrBO { * 创建时间 */ private Date createTime; - /** - * 规格值数组 - */ - private List values; + } diff --git a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/bo/attr/ProductAttrSimpleBO.java b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/bo/attr/ProductAttrSimpleBO.java new file mode 100644 index 000000000..c8b588b6c --- /dev/null +++ b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/bo/attr/ProductAttrSimpleBO.java @@ -0,0 +1,25 @@ +package cn.iocoder.mall.product.biz.bo.attr; + +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * 商品规格精简 VO + */ +@Data +@Accessors(chain = true) +public class ProductAttrSimpleBO implements Serializable { + + /** + * 规格编号 + */ + private Integer id; + /** + * 规格名 + */ + private String name; + + +} diff --git a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/bo/attr/ProductAttrSimpleWithValueBO.java b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/bo/attr/ProductAttrSimpleWithValueBO.java new file mode 100644 index 000000000..8ace5c5c0 --- /dev/null +++ b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/bo/attr/ProductAttrSimpleWithValueBO.java @@ -0,0 +1,18 @@ +package cn.iocoder.mall.product.biz.bo.attr; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.util.List; + +@Data +@EqualsAndHashCode(callSuper = true) +@Accessors(chain = true) +public class ProductAttrSimpleWithValueBO extends ProductAttrSimpleBO { + + /** + * 规格值数组 + */ + private List values; +} diff --git a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/bo/attr/ProductAttrValueBO.java b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/bo/attr/ProductAttrValueBO.java index 1539b5030..50600fa6c 100644 --- a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/bo/attr/ProductAttrValueBO.java +++ b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/bo/attr/ProductAttrValueBO.java @@ -17,6 +17,10 @@ public class ProductAttrValueBO implements Serializable { * 规格值编号 */ private Integer id; + /** + * 规格编号 + */ + private Integer attrId; /** * 规格值名 */ diff --git a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/bo/attr/ProductAttrValueSimpleBO.java b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/bo/attr/ProductAttrValueSimpleBO.java new file mode 100644 index 000000000..91d4db153 --- /dev/null +++ b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/bo/attr/ProductAttrValueSimpleBO.java @@ -0,0 +1,24 @@ +package cn.iocoder.mall.product.biz.bo.attr; + +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * 商品规格值 VO + */ +@Data +@Accessors(chain = true) +public class ProductAttrValueSimpleBO implements Serializable { + + /** + * 规格值编号 + */ + private Integer id; + /** + * 规格值名 + */ + private String name; + +} diff --git a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/bo/attr/ProductAttrWithValueBO.java b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/bo/attr/ProductAttrWithValueBO.java new file mode 100644 index 000000000..b4fc489b4 --- /dev/null +++ b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/bo/attr/ProductAttrWithValueBO.java @@ -0,0 +1,18 @@ +package cn.iocoder.mall.product.biz.bo.attr; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.util.List; + +@Data +@EqualsAndHashCode(callSuper = true) +@Accessors(chain = true) +public class ProductAttrWithValueBO extends ProductAttrBO { + + /** + * 规格值数组 + */ + private List values; +} diff --git a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/convert/attr/ProductAttrConvert.java b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/convert/attr/ProductAttrConvert.java index a32265009..fa047f97d 100644 --- a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/convert/attr/ProductAttrConvert.java +++ b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/convert/attr/ProductAttrConvert.java @@ -1,10 +1,12 @@ package cn.iocoder.mall.product.biz.convert.attr; import cn.iocoder.common.framework.vo.PageResult; -import cn.iocoder.mall.product.biz.bo.attr.ProductAttrBO; -import cn.iocoder.mall.product.biz.bo.attr.ProductAttrValueBO; +import cn.iocoder.mall.product.biz.bo.attr.*; import cn.iocoder.mall.product.biz.dataobject.product.ProductAttrDO; import cn.iocoder.mall.product.biz.dataobject.product.ProductAttrValueDO; +import cn.iocoder.mall.product.biz.dto.attr.ProductAttrUpdateDTO; +import cn.iocoder.mall.product.biz.dto.attr.ProductAttrValueAddDTO; +import cn.iocoder.mall.product.biz.dto.attr.ProductAttrValueUpdateDTO; import com.baomidou.mybatisplus.core.metadata.IPage; import org.mapstruct.Mapper; import org.mapstruct.Mapping; @@ -19,8 +21,29 @@ public interface ProductAttrConvert { ProductAttrConvert INSTANCE = Mappers.getMapper(ProductAttrConvert.class); @Mapping(source = "records", target = "list") - PageResult convertPage(IPage bean); + PageResult convertPage(IPage bean); @Mappings({}) - List convertAttrValue(List values); + ProductAttrBO convertAttr(ProductAttrDO values); + + @Mappings({}) + ProductAttrValueBO convertAttrValue(ProductAttrValueDO productAttrValueDO); + + @Mappings({}) + List convertAttrValues(List values); + + @Mappings({}) + List convertAttrSimple(List attrs); + + @Mappings({}) + List convertAttrValueSimple(List values); + + @Mappings({}) + ProductAttrDO convertUpdate(ProductAttrUpdateDTO productAttrUpdateDTO); + + @Mappings({}) + ProductAttrValueDO convertValueAdd(ProductAttrValueAddDTO productAttrValueAddDTO); + + @Mappings({}) + ProductAttrValueDO convertValueUpdate(ProductAttrValueUpdateDTO productAttrValueUpdateDTO); } diff --git a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/convert/product/ProductAttrConvert2.java b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/convert/product/ProductAttrConvert2.java deleted file mode 100644 index df87e42ce..000000000 --- a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/convert/product/ProductAttrConvert2.java +++ /dev/null @@ -1,58 +0,0 @@ -package cn.iocoder.mall.product.biz.convert.product; - -import cn.iocoder.mall.product.biz.bo.product.*; -import cn.iocoder.mall.product.biz.dataobject.product.ProductAttrDO; -import cn.iocoder.mall.product.biz.dataobject.product.ProductAttrValueDO; -import cn.iocoder.mall.product.biz.dto.product.ProductAttrAddDTO; -import cn.iocoder.mall.product.biz.dto.product.ProductAttrUpdateDTO; -import cn.iocoder.mall.product.biz.dto.product.ProductAttrValueAddDTO; -import cn.iocoder.mall.product.biz.dto.product.ProductAttrValueUpdateDTO; -import org.mapstruct.Mapper; -import org.mapstruct.Mappings; -import org.mapstruct.factory.Mappers; - -import java.util.List; - -@Mapper -public interface ProductAttrConvert2 { - - ProductAttrConvert2 INSTANCE = Mappers.getMapper(ProductAttrConvert2.class); - - @Mappings({}) - List convert(List attrs); - - @Mappings({}) - ProductAttrValueDetailBO convert(ProductAttrValueDO value); - - @Mappings({}) - List convert2(List values); - - @Mappings({}) - List convert3(List attrs); - - @Mappings({}) - ProductAttrValueSimpleBO convert3(ProductAttrValueDO value); // 保证 convert4 能够映射到这个方法 - - @Mappings({}) - List convert4(List values); - - @Mappings({}) - ProductAttrDO convert(ProductAttrAddDTO productAttrAddDTO); - - @Mappings({}) - ProductAttrDO convert(ProductAttrUpdateDTO productAttrUpdateDTO); - - @Mappings({}) - ProductAttrValueDO convert(ProductAttrValueAddDTO productAttrValueAddDTO); - - @Mappings({}) - ProductAttrValueDO convert(ProductAttrValueUpdateDTO productAttrValueUpdateDTO); - - @Mappings({}) - ProductAttrBO2 convert(ProductAttrDO productAttrDO); - - @Mappings({}) - ProductAttrValueBO convert2(ProductAttrValueDO productAttrValueDO); - - -} \ No newline at end of file diff --git a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dataobject/product/ProductAttrValueDO.java b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dataobject/product/ProductAttrValueDO.java index b4cef1862..2b44cf3c3 100644 --- a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dataobject/product/ProductAttrValueDO.java +++ b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dataobject/product/ProductAttrValueDO.java @@ -2,12 +2,14 @@ package cn.iocoder.mall.product.biz.dataobject.product; import cn.iocoder.mall.mybatis.dataobject.DeletableDO; import lombok.Data; +import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; /** * Product 规格值 */ @Data +@EqualsAndHashCode(callSuper = true) @Accessors(chain = true) public class ProductAttrValueDO extends DeletableDO { @@ -25,7 +27,7 @@ public class ProductAttrValueDO extends DeletableDO { private String name; /** * 状态 - * + *

* 1-正常 * 2-禁用 */ diff --git a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/product/ProductAttrAddDTO.java b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/attr/ProductAttrAddDTO.java similarity index 86% rename from product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/product/ProductAttrAddDTO.java rename to product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/attr/ProductAttrAddDTO.java index 870153fc4..ed3a64596 100644 --- a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/product/ProductAttrAddDTO.java +++ b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/attr/ProductAttrAddDTO.java @@ -1,4 +1,4 @@ -package cn.iocoder.mall.product.biz.dto.product; +package cn.iocoder.mall.product.biz.dto.attr; import lombok.Data; import lombok.experimental.Accessors; diff --git a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/product/ProductAttrUpdateDTO.java b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/attr/ProductAttrUpdateDTO.java similarity index 90% rename from product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/product/ProductAttrUpdateDTO.java rename to product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/attr/ProductAttrUpdateDTO.java index 503e699ae..13fa35a18 100644 --- a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/product/ProductAttrUpdateDTO.java +++ b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/attr/ProductAttrUpdateDTO.java @@ -1,4 +1,4 @@ -package cn.iocoder.mall.product.biz.dto.product; +package cn.iocoder.mall.product.biz.dto.attr; import lombok.Data; import lombok.experimental.Accessors; diff --git a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/product/ProductAttrValueAddDTO.java b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/attr/ProductAttrValueAddDTO.java similarity index 90% rename from product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/product/ProductAttrValueAddDTO.java rename to product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/attr/ProductAttrValueAddDTO.java index b7f4d8a73..aea837d1a 100644 --- a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/product/ProductAttrValueAddDTO.java +++ b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/attr/ProductAttrValueAddDTO.java @@ -1,4 +1,4 @@ -package cn.iocoder.mall.product.biz.dto.product; +package cn.iocoder.mall.product.biz.dto.attr; import lombok.Data; import lombok.experimental.Accessors; diff --git a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/product/ProductAttrValueUpdateDTO.java b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/attr/ProductAttrValueUpdateDTO.java similarity index 91% rename from product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/product/ProductAttrValueUpdateDTO.java rename to product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/attr/ProductAttrValueUpdateDTO.java index a7ae3491d..8b5997772 100644 --- a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/product/ProductAttrValueUpdateDTO.java +++ b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/attr/ProductAttrValueUpdateDTO.java @@ -1,4 +1,4 @@ -package cn.iocoder.mall.product.biz.dto.product; +package cn.iocoder.mall.product.biz.dto.attr; import lombok.Data; import lombok.experimental.Accessors; diff --git a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/product/ProductAttrPageDTO.java b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/product/ProductAttrPageDTO.java deleted file mode 100644 index 49d4aaf68..000000000 --- a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/product/ProductAttrPageDTO.java +++ /dev/null @@ -1,22 +0,0 @@ -package cn.iocoder.mall.product.biz.dto.product; - -import lombok.Data; -import lombok.experimental.Accessors; - -import javax.validation.constraints.NotNull; - -/** - * 商品规格分页 DTO - */ -@Data -@Accessors(chain = true) -public class ProductAttrPageDTO { - - private String name; - - @NotNull(message = "页码不能为空") - private Integer pageNo; - @NotNull(message = "每页条数不能为空") - private Integer pageSize; - -} diff --git a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/service/product/ProductAttrService.java b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/service/product/ProductAttrService.java index 36a34f4b7..1b81ac641 100644 --- a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/service/product/ProductAttrService.java +++ b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/service/product/ProductAttrService.java @@ -4,14 +4,10 @@ import cn.iocoder.common.framework.constant.CommonStatusEnum; import cn.iocoder.common.framework.validator.InEnum; import cn.iocoder.common.framework.vo.PageResult; import cn.iocoder.mall.product.biz.bo.attr.ProductAttrBO; -import cn.iocoder.mall.product.biz.bo.product.ProductAttrBO2; -import cn.iocoder.mall.product.biz.bo.product.ProductAttrSimpleBO; -import cn.iocoder.mall.product.biz.bo.product.ProductAttrValueBO; -import cn.iocoder.mall.product.biz.dto.attr.AdminProductAttrPageDTO; -import cn.iocoder.mall.product.biz.dto.product.ProductAttrAddDTO; -import cn.iocoder.mall.product.biz.dto.product.ProductAttrUpdateDTO; -import cn.iocoder.mall.product.biz.dto.product.ProductAttrValueAddDTO; -import cn.iocoder.mall.product.biz.dto.product.ProductAttrValueUpdateDTO; +import cn.iocoder.mall.product.biz.bo.attr.ProductAttrSimpleWithValueBO; +import cn.iocoder.mall.product.biz.bo.attr.ProductAttrValueBO; +import cn.iocoder.mall.product.biz.bo.attr.ProductAttrWithValueBO; +import cn.iocoder.mall.product.biz.dto.attr.*; import java.util.List; @@ -22,7 +18,7 @@ public interface ProductAttrService { * @param productAttrPageDTO 查询参数 * @return 规格分页信息 */ - PageResult getProductAttrPage(AdminProductAttrPageDTO productAttrPageDTO); + PageResult getProductAttrPage(AdminProductAttrPageDTO productAttrPageDTO); /** * 获得规格属性数组 @@ -31,14 +27,35 @@ public interface ProductAttrService { * * @return 规格属性数组 */ - List getProductAttrList(); + List getProductAttrList(); - ProductAttrBO2 addProductAttr(Integer adminId, ProductAttrAddDTO productAttrAddDTO); + /** + * 添加商品规格 + * + * @param adminId 操作人ID + * @param productAttrAddDTO 添加参数 + * @return 添加的规格 + */ + ProductAttrBO addProductAttr(Integer adminId, ProductAttrAddDTO productAttrAddDTO); + /** + * 更新规格 + * + * @param adminId 操作人 + * @param productAttrUpdateDTO 更新规格 + * @return 成功标识 + */ Boolean updateProductAttr(Integer adminId, ProductAttrUpdateDTO productAttrUpdateDTO); - Boolean updateProductAttrStatus(Integer adminId, Integer productAttrId, - @InEnum(value = CommonStatusEnum.class, message = "修改状态必须是 {value}") Integer status); + /** + * 更新规格状态 + * + * @param adminId 操作人 + * @param productAttrId 规格ID + * @param status 状态 + * @return 成功标识 + */ + Boolean updateProductAttrStatus(Integer adminId, Integer productAttrId, Integer status); ProductAttrValueBO addProductAttrValue(Integer adminId, ProductAttrValueAddDTO productAttrValueAddDTO); diff --git a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/service/product/impl/ProductAttrServiceImpl.java b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/service/product/impl/ProductAttrServiceImpl.java index 3c40f8098..4199697c1 100644 --- a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/service/product/impl/ProductAttrServiceImpl.java +++ b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/service/product/impl/ProductAttrServiceImpl.java @@ -5,21 +5,16 @@ 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.product.biz.bo.attr.ProductAttrBO; +import cn.iocoder.mall.product.biz.bo.attr.ProductAttrSimpleWithValueBO; +import cn.iocoder.mall.product.biz.bo.attr.ProductAttrValueBO; +import cn.iocoder.mall.product.biz.bo.attr.ProductAttrWithValueBO; import cn.iocoder.mall.product.biz.bo.product.ProductAttrAndValuePairBO; -import cn.iocoder.mall.product.biz.bo.product.ProductAttrBO2; -import cn.iocoder.mall.product.biz.bo.product.ProductAttrSimpleBO; -import cn.iocoder.mall.product.biz.bo.product.ProductAttrValueBO; import cn.iocoder.mall.product.biz.convert.attr.ProductAttrConvert; -import cn.iocoder.mall.product.biz.convert.product.ProductAttrConvert2; import cn.iocoder.mall.product.biz.dao.product.ProductAttrMapper; import cn.iocoder.mall.product.biz.dao.product.ProductAttrValueMapper; import cn.iocoder.mall.product.biz.dataobject.product.ProductAttrDO; import cn.iocoder.mall.product.biz.dataobject.product.ProductAttrValueDO; -import cn.iocoder.mall.product.biz.dto.attr.AdminProductAttrPageDTO; -import cn.iocoder.mall.product.biz.dto.product.ProductAttrAddDTO; -import cn.iocoder.mall.product.biz.dto.product.ProductAttrUpdateDTO; -import cn.iocoder.mall.product.biz.dto.product.ProductAttrValueAddDTO; -import cn.iocoder.mall.product.biz.dto.product.ProductAttrValueUpdateDTO; +import cn.iocoder.mall.product.biz.dto.attr.*; import cn.iocoder.mall.product.biz.enums.ProductErrorCodeEnum; import cn.iocoder.mall.product.biz.enums.product.ProductAttrConstants; import cn.iocoder.mall.product.biz.service.product.ProductAttrService; @@ -27,8 +22,6 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.google.common.collect.ImmutableListMultimap; -import com.google.common.collect.Multimaps; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -51,14 +44,14 @@ public class ProductAttrServiceImpl implements ProductAttrService { private ProductAttrValueMapper productAttrValueMapper; @Override - public PageResult getProductAttrPage(AdminProductAttrPageDTO productAttrPageDTO) { + public PageResult getProductAttrPage(AdminProductAttrPageDTO productAttrPageDTO) { //查询分页 Page page = new Page<>(productAttrPageDTO.getPageNo(), productAttrPageDTO.getPageSize()); LambdaQueryWrapper queryWrapper = Wrappers.query().lambda() .like(StringUtils.isNotBlank(productAttrPageDTO.getName()), ProductAttrDO::getName, productAttrPageDTO.getName()) .eq(ProductAttrDO::getDeleted, false); IPage attrPage = productAttrMapper.selectPage(page, queryWrapper); - PageResult productAttrPage = ProductAttrConvert.INSTANCE.convertPage(attrPage); + PageResult productAttrPage = ProductAttrConvert.INSTANCE.convertPage(attrPage); // 将规格值拼接上去 if (!CollectionUtil.isEmpty(productAttrPage.getList())) { Set attrIds = productAttrPage.getList().stream().map(ProductAttrBO::getId).collect(Collectors.toSet()); @@ -66,14 +59,151 @@ public class ProductAttrServiceImpl implements ProductAttrService { .in(ProductAttrValueDO::getAttrId, attrIds) .eq(ProductAttrValueDO::getDeleted, false)); Map> attrValueMap = attrValues.stream().collect(Collectors.groupingBy(ProductAttrValueDO::getAttrId)); - for (ProductAttrBO productAttrBO : productAttrPage.getList()) { - productAttrBO.setValues(ProductAttrConvert.INSTANCE.convertAttrValue(attrValueMap.get(productAttrBO.getId()))); + for (ProductAttrWithValueBO item : productAttrPage.getList()) { + item.setValues(ProductAttrConvert.INSTANCE.convertAttrValues(attrValueMap.get(item.getId()))); } } - // 返回结果 return productAttrPage; } + @Override + public List getProductAttrList() { + // 查询所有开启的规格数组 + List attrDos = productAttrMapper.selectList(Wrappers.query().lambda() + .in(ProductAttrDO::getStatus, ProductAttrConstants.ATTR_STATUS_ENABLE) + .eq(ProductAttrDO::getDeleted, false)); + // 如果为空,则返回空 + if (attrDos.isEmpty()) { + return Collections.emptyList(); + } + List attrs = ProductAttrConvert.INSTANCE.convertAttrSimple(attrDos); + // 将规格值拼接上去 + List attrValues = productAttrValueMapper.selectList(Wrappers.query().lambda() + .in(ProductAttrValueDO::getStatus, ProductAttrConstants.ATTR_STATUS_ENABLE) + .eq(ProductAttrValueDO::getDeleted, false)); + Map> attrValueMap = attrValues.stream().collect(Collectors.groupingBy(ProductAttrValueDO::getAttrId)); + for (ProductAttrSimpleWithValueBO item : attrs) { + item.setValues(ProductAttrConvert.INSTANCE.convertAttrValueSimple(attrValueMap.get(item.getId()))); + } + return attrs; + } + + @Override + public ProductAttrBO addProductAttr(Integer adminId, ProductAttrAddDTO productAttrAddDTO) { + // 校验规格名不重复 + int count = productAttrMapper.selectCount(Wrappers.query().lambda() + .eq(ProductAttrDO::getName, productAttrAddDTO.getName()) + .eq(ProductAttrDO::getDeleted, false)); + if (count > 0) { + throw ServiceExceptionUtil.exception(ProductErrorCodeEnum.PRODUCT_ATTR_EXISTS.getCode()); + } + // 插入到数据库 + ProductAttrDO productAttrDO = new ProductAttrDO().setName(productAttrAddDTO.getName()) + .setStatus(ProductAttrConstants.ATTR_STATUS_ENABLE); + productAttrDO.setCreateTime(new Date()); + productAttrDO.setDeleted(DeletedStatusEnum.DELETED_NO.getValue()); + productAttrMapper.insert(productAttrDO); + // 返回成功 + return ProductAttrConvert.INSTANCE.convertAttr(productAttrDO); + } + + @Override + public Boolean updateProductAttr(Integer adminId, ProductAttrUpdateDTO productAttrUpdateDTO) { + // 校验存在 + if (productAttrMapper.selectById(productAttrUpdateDTO.getId()) == null) { + throw ServiceExceptionUtil.exception(ProductErrorCodeEnum.PRODUCT_ATTR_NOT_EXIST.getCode()); + } + // 校验规格名不重复 + ProductAttrDO existsAttrDO = productAttrMapper.selectOne(Wrappers.query().lambda() + .eq(ProductAttrDO::getName, productAttrUpdateDTO.getName()) + .eq(ProductAttrDO::getDeleted, false)); + if (existsAttrDO != null && !existsAttrDO.getId().equals(productAttrUpdateDTO.getId())) { + throw ServiceExceptionUtil.exception(ProductErrorCodeEnum.PRODUCT_ATTR_EXISTS.getCode()); + } + // 更新到数据库 + ProductAttrDO updateProductAttr = ProductAttrConvert.INSTANCE.convertUpdate(productAttrUpdateDTO); + updateProductAttr.setUpdateTime(new Date()); + int i = productAttrMapper.updateById(updateProductAttr); + // 返回成功 + return i > 0; + } + + + @Override + public Boolean updateProductAttrStatus(Integer adminId, Integer productAttrId, Integer status) { + // 校验存在 + ProductAttrDO productAttrDO = productAttrMapper.selectById(productAttrId); + if (productAttrDO == null) { + throw ServiceExceptionUtil.exception(ProductErrorCodeEnum.PRODUCT_ATTR_NOT_EXIST.getCode()); + } + // 校验状态 + if (productAttrDO.getStatus().equals(status)) { + throw ServiceExceptionUtil.exception(ProductErrorCodeEnum.PRODUCT_ATTR_STATUS_EQUALS.getCode()); + } + // 更新到数据库 + ProductAttrDO updateProductAttr = new ProductAttrDO().setId(productAttrId).setStatus(status); + int i = productAttrMapper.updateById(updateProductAttr); + return i > 0; + } + + @Override + public ProductAttrValueBO addProductAttrValue(Integer adminId, ProductAttrValueAddDTO productAttrValueAddDTO) { + // 校验规格名不重复 + int count = productAttrValueMapper.selectCount(Wrappers.query().lambda() + .eq(ProductAttrValueDO::getName, productAttrValueAddDTO.getName()) + .eq(ProductAttrValueDO::getAttrId, productAttrValueAddDTO.getAttrId()) + .eq(ProductAttrValueDO::getDeleted, false)); + if (count > 0) { + throw ServiceExceptionUtil.exception(ProductErrorCodeEnum.PRODUCT_ATTR_VALUE_EXISTS.getCode()); + } + // 插入到数据库 + ProductAttrValueDO productAttrValueDO = ProductAttrConvert.INSTANCE.convertValueAdd(productAttrValueAddDTO) + .setStatus(ProductAttrConstants.ATTR_VALUE_STATUS_ENABLE); + productAttrValueDO.setCreateTime(new Date()); + productAttrValueDO.setDeleted(DeletedStatusEnum.DELETED_NO.getValue()); + productAttrValueMapper.insert(productAttrValueDO); + return ProductAttrConvert.INSTANCE.convertAttrValue(productAttrValueDO); + } + + @Override + public Boolean updateProductAttrValue(Integer adminId, ProductAttrValueUpdateDTO productAttrValueUpdateDTO) { + // 校验存在 + ProductAttrValueDO productAttrValueDO = productAttrValueMapper.selectById(productAttrValueUpdateDTO.getId()); + if (productAttrValueDO == null) { + throw ServiceExceptionUtil.exception(ProductErrorCodeEnum.PRODUCT_ATTR_VALUE_NOT_EXIST.getCode()); + } + // 校验规格名不重复 + ProductAttrValueDO existsAttrDO = productAttrValueMapper.selectOne(Wrappers.query().lambda() + .eq(ProductAttrValueDO::getName, productAttrValueDO.getName()) + .eq(ProductAttrValueDO::getAttrId, productAttrValueDO.getAttrId()) + .eq(ProductAttrValueDO::getDeleted, false)); + if (existsAttrDO != null && !existsAttrDO.getId().equals(productAttrValueUpdateDTO.getId())) { + throw ServiceExceptionUtil.exception(ProductErrorCodeEnum.PRODUCT_ATTR_VALUE_EXISTS.getCode()); + } + // 更新到数据库 + ProductAttrValueDO updateProductValue = ProductAttrConvert.INSTANCE.convertValueUpdate(productAttrValueUpdateDTO); + updateProductValue.setUpdateTime(new Date()); + int i = productAttrValueMapper.updateById(updateProductValue); + return i > 0; + } + + @Override + public Boolean updateProductAttrValueStatus(Integer adminId, Integer productAttrValueId, Integer status) { + // 校验存在 + ProductAttrValueDO productAttrValueDO = productAttrValueMapper.selectById(productAttrValueId); + if (productAttrValueDO == null) { + throw ServiceExceptionUtil.exception(ProductErrorCodeEnum.PRODUCT_ATTR_VALUE_NOT_EXIST.getCode()); + } + // 校验状态 + if (productAttrValueDO.getStatus().equals(status)) { + throw ServiceExceptionUtil.exception(ProductErrorCodeEnum.PRODUCT_ATTR_VALUE_STATUS_EQUALS.getCode()); + } + // 更新到数据库 + ProductAttrValueDO updateProductAttrValue = new ProductAttrValueDO().setId(productAttrValueId).setStatus(status); + int i = productAttrValueMapper.updateById(updateProductAttrValue); + return i > 0; + } + public List validProductAttrAndValue(Set productAttrValueIds, boolean validStatus) { // 首先,校验规格值 List attrValues = productAttrValueMapper.selectBatchIds(productAttrValueIds); @@ -110,146 +240,4 @@ public class ProductAttrServiceImpl implements ProductAttrService { .setAttrValueId(productAttrValueDO.getId()).setAttrValueName(productAttrValueDO.getName())).collect(Collectors.toList()); } - - - @Override - public List getProductAttrList() { - // 查询所有开启的规格数组 - List attrDos = productAttrMapper.selectList(Wrappers.query().lambda() - .in(ProductAttrDO::getStatus, ProductAttrConstants.ATTR_STATUS_ENABLE) - .eq(ProductAttrDO::getDeleted, false)); - List attrs = ProductAttrConvert2.INSTANCE.convert3(attrDos); - // 如果为空,则返回空 - if (attrs.isEmpty()) { - return Collections.emptyList(); - } - // 将规格值拼接上去 - List attrValues = productAttrValueMapper.selectList(Wrappers.query().lambda() - .in(ProductAttrValueDO::getStatus, ProductAttrConstants.ATTR_STATUS_ENABLE) - .eq(ProductAttrValueDO::getDeleted, false)); - // KEY 是 attrId ,VALUE 是 ProductAttrValueDO 数组 - ImmutableListMultimap attrValueMap = Multimaps.index(attrValues, ProductAttrValueDO::getAttrId); - for (ProductAttrSimpleBO productAttrSimpleBO : attrs) { - productAttrSimpleBO.setValues(ProductAttrConvert2.INSTANCE.convert4(((attrValueMap).get(productAttrSimpleBO.getId())))); - } - return attrs; - } - - @Override - public ProductAttrBO2 addProductAttr(Integer adminId, ProductAttrAddDTO productAttrAddDTO) { - // 校验规格名不重复 - int count = productAttrMapper.selectCount(Wrappers.query().lambda() - .eq(ProductAttrDO::getName, productAttrAddDTO.getName()) - .eq(ProductAttrDO::getDeleted, false)); - if (count > 0) { - throw ServiceExceptionUtil.exception(ProductErrorCodeEnum.PRODUCT_ATTR_EXISTS.getCode()); - } - // 插入到数据库 - ProductAttrDO productAttrDO = ProductAttrConvert2.INSTANCE.convert(productAttrAddDTO) - .setStatus(ProductAttrConstants.ATTR_STATUS_ENABLE); - productAttrDO.setCreateTime(new Date()); - productAttrDO.setDeleted(DeletedStatusEnum.DELETED_NO.getValue()); - productAttrMapper.insert(productAttrDO); - // 返回成功 - return ProductAttrConvert2.INSTANCE.convert(productAttrDO); - } - - @Override - public Boolean updateProductAttr(Integer adminId, ProductAttrUpdateDTO productAttrUpdateDTO) { - // 校验存在 - if (productAttrMapper.selectById(productAttrUpdateDTO.getId()) == null) { - throw ServiceExceptionUtil.exception(ProductErrorCodeEnum.PRODUCT_ATTR_NOT_EXIST.getCode()); - } - // 校验规格名不重复 - ProductAttrDO existsAttrDO = productAttrMapper.selectOne(Wrappers.query().lambda() - .eq(ProductAttrDO::getName, productAttrUpdateDTO.getName()) - .eq(ProductAttrDO::getDeleted, false)); - if (existsAttrDO != null && !existsAttrDO.getId().equals(productAttrUpdateDTO.getId())) { - throw ServiceExceptionUtil.exception(ProductErrorCodeEnum.PRODUCT_ATTR_EXISTS.getCode()); - } - // 更新到数据库 - ProductAttrDO updateProductAttr = ProductAttrConvert2.INSTANCE.convert(productAttrUpdateDTO); - productAttrMapper.updateById(updateProductAttr); - // 返回成功 - return true; - } - - @Override - public Boolean updateProductAttrStatus(Integer adminId, Integer productAttrId, Integer status) { - // 校验存在 - ProductAttrDO productAttrDO = productAttrMapper.selectById(productAttrId); - if (productAttrDO == null) { - throw ServiceExceptionUtil.exception(ProductErrorCodeEnum.PRODUCT_ATTR_NOT_EXIST.getCode()); - } - // 校验状态 - if (productAttrDO.getStatus().equals(status)) { - throw ServiceExceptionUtil.exception(ProductErrorCodeEnum.PRODUCT_ATTR_STATUS_EQUALS.getCode()); - } - // 更新到数据库 - ProductAttrDO updateProductAttr = new ProductAttrDO().setId(productAttrId).setStatus(status); - productAttrMapper.updateById(updateProductAttr); - // 返回成功 - return true; - } - - @Override - public ProductAttrValueBO addProductAttrValue(Integer adminId, ProductAttrValueAddDTO productAttrValueAddDTO) { - // 校验规格名不重复 - int count = productAttrValueMapper.selectCount(Wrappers.query().lambda() - .eq(ProductAttrValueDO::getName, productAttrValueAddDTO.getName()) - .eq(ProductAttrValueDO::getAttrId, productAttrValueAddDTO.getAttrId()) - .eq(ProductAttrValueDO::getDeleted, false)); - if (count > 0) { - throw ServiceExceptionUtil.exception(ProductErrorCodeEnum.PRODUCT_ATTR_VALUE_EXISTS.getCode()); - } - // 插入到数据库 - ProductAttrValueDO productAttrValueDO = ProductAttrConvert2.INSTANCE.convert(productAttrValueAddDTO) - .setStatus(ProductAttrConstants.ATTR_VALUE_STATUS_ENABLE); - productAttrValueDO.setCreateTime(new Date()); - productAttrValueDO.setDeleted(DeletedStatusEnum.DELETED_NO.getValue()); - productAttrValueMapper.insert(productAttrValueDO); - // 返回成功 - return ProductAttrConvert2.INSTANCE.convert2(productAttrValueDO); - } - - @Override - public Boolean updateProductAttrValue(Integer adminId, ProductAttrValueUpdateDTO productAttrValueUpdateDTO) { - // 校验存在 - ProductAttrValueDO productAttrValueDO = productAttrValueMapper.selectById(productAttrValueUpdateDTO.getId()); - if (productAttrValueDO == null) { - throw ServiceExceptionUtil.exception(ProductErrorCodeEnum.PRODUCT_ATTR_VALUE_NOT_EXIST.getCode()); - } - // 校验规格名不重复 - ProductAttrValueDO existsAttrDO = productAttrValueMapper.selectOne(Wrappers.query().lambda() - .eq(ProductAttrValueDO::getName, productAttrValueDO.getName()) - .eq(ProductAttrValueDO::getAttrId, productAttrValueDO.getAttrId()) - .eq(ProductAttrValueDO::getDeleted, false)); - if (existsAttrDO != null && !existsAttrDO.getId().equals(productAttrValueUpdateDTO.getId())) { - throw ServiceExceptionUtil.exception(ProductErrorCodeEnum.PRODUCT_ATTR_VALUE_EXISTS.getCode()); - } - // 更新到数据库 - ProductAttrValueDO updateProductValue = ProductAttrConvert2.INSTANCE.convert(productAttrValueUpdateDTO); - productAttrValueMapper.updateById(updateProductValue); - // 返回成功 - return true; - } - - @Override - public Boolean updateProductAttrValueStatus(Integer adminId, Integer productAttrValueId, Integer status) { - // 校验存在 - ProductAttrValueDO productAttrValueDO = productAttrValueMapper.selectById(productAttrValueId); - if (productAttrValueDO == null) { - throw ServiceExceptionUtil.exception(ProductErrorCodeEnum.PRODUCT_ATTR_VALUE_NOT_EXIST.getCode()); - } - // 校验状态 - if (productAttrValueDO.getStatus().equals(status)) { - throw ServiceExceptionUtil.exception(ProductErrorCodeEnum.PRODUCT_ATTR_VALUE_STATUS_EQUALS.getCode()); - } - // 更新到数据库 - ProductAttrValueDO updateProductAttrValue = new ProductAttrValueDO().setId(productAttrValueId).setStatus(status); - productAttrValueMapper.updateById(updateProductAttrValue); - // 返回成功 - return true; - } - } diff --git a/product/product-rest/pom.xml b/product/product-rest/pom.xml index 3ff0fd551..a7f299091 100644 --- a/product/product-rest/pom.xml +++ b/product/product-rest/pom.xml @@ -3,7 +3,7 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - system + product cn.iocoder.mall 1.0-SNAPSHOT diff --git a/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/controller/admins/AdminsProductAttrController.java b/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/controller/admins/AdminsProductAttrController.java index f6bbb50f0..fd46ee49d 100644 --- a/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/controller/admins/AdminsProductAttrController.java +++ b/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/controller/admins/AdminsProductAttrController.java @@ -3,17 +3,30 @@ package cn.iocoder.mall.product.rest.controller.admins; import cn.iocoder.common.framework.vo.CommonResult; import cn.iocoder.common.framework.vo.PageResult; import cn.iocoder.mall.product.biz.bo.attr.ProductAttrBO; -import cn.iocoder.mall.product.biz.dto.attr.AdminProductAttrPageDTO; +import cn.iocoder.mall.product.biz.bo.attr.ProductAttrSimpleWithValueBO; +import cn.iocoder.mall.product.biz.bo.attr.ProductAttrValueBO; +import cn.iocoder.mall.product.biz.bo.attr.ProductAttrWithValueBO; +import cn.iocoder.mall.product.biz.dto.attr.*; import cn.iocoder.mall.product.biz.service.product.ProductAttrService; import cn.iocoder.mall.product.rest.convert.attr.ProductAttrConvert; import cn.iocoder.mall.product.rest.request.attr.AdminProductAttrPageRequest; +import cn.iocoder.mall.product.rest.request.attr.ProductAttrAddRequest; +import cn.iocoder.mall.product.rest.request.attr.ProductAttrUpdateRequest; +import cn.iocoder.mall.product.rest.request.attr.ProductAttrValueAddRequest; import cn.iocoder.mall.product.rest.response.attr.AdminsProductAttrPageResponse; +import cn.iocoder.mall.product.rest.response.attr.AdminsProductAttrSimpleResponse; +import cn.iocoder.mall.product.rest.response.attr.AdminsProductAttrVO; +import cn.iocoder.mall.product.rest.response.attr.AdminsProductAttrValueResponse; +import cn.iocoder.mall.security.core.context.AdminSecurityContextHolder; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; /** * 商品规格 @@ -34,100 +47,88 @@ public class AdminsProductAttrController { @ApiOperation("获得规格分页") public CommonResult> attrPage(AdminProductAttrPageRequest request) { AdminProductAttrPageDTO pageDTO = ProductAttrConvert.INSTANCE.convert(request); - PageResult productAttrPage = productAttrService.getProductAttrPage(pageDTO); + PageResult productAttrPage = productAttrService.getProductAttrPage(pageDTO); PageResult adminPageResponse = ProductAttrConvert.INSTANCE.convertPage(productAttrPage); return CommonResult.success(adminPageResponse); } -// @GetMapping("/attr/tree") -// @ApiOperation(value = "获得规格树结构", notes = "该接口返回的信息更为精简。一般用于前端缓存数据字典到本地。") -// public CommonResult> tree() { -// // 查询全列表 -// List result = productAttrService.getProductAttrList(); -// // 返回结果 -// return success(ProductAttrConvert.INSTANCE.convert(result)); -// } -// -// @PostMapping("/attr/add") -// @ApiOperation(value = "创建商品规格") -// @ApiImplicitParams({ -// @ApiImplicitParam(name = "name", value = "规格名", required = true, example = "颜色") -// }) -// public CommonResult addAttr(@RequestParam("name") String name) { -// // 创建 ProductAttrAddDTO 对象 -// ProductAttrAddDTO productAttrAddDTO = new ProductAttrAddDTO().setName(name); -// // 添加 -// ProductAttrBO result = productAttrService.addProductAttr(AdminSecurityContextHolder.getContext().getAdminId(), productAttrAddDTO); -// // 返回结果 -// return success(ProductAttrConvert.INSTANCE.convert3(result)); -// } -// -// @PostMapping("/attr/update") -// @ApiOperation(value = "修改商品规格") -// @ApiImplicitParams({ -// @ApiImplicitParam(name = "id", value = "规格编号", required = true, example = "1"), -// @ApiImplicitParam(name = "name", value = "规格名", required = true, example = "颜色") -// }) -// public CommonResult updateAttr(@RequestParam("id") Integer id, -// @RequestParam("name") String name) { -// // 创建 ProductAttrUpdateDTO 对象 -// ProductAttrUpdateDTO productAttrUpdateDTO = new ProductAttrUpdateDTO().setId(id).setName(name); -// // 更新 -// return success(productAttrService.updateProductAttr(AdminSecurityContextHolder.getContext().getAdminId(), productAttrUpdateDTO)); -// } -// -// @PostMapping("/attr/update_status") -// @ApiOperation(value = "修改商品规格状态") -// @ApiImplicitParams({ -// @ApiImplicitParam(name = "id", value = "规格编号", required = true, example = "100"), -// @ApiImplicitParam(name = "status", value = "状态", required = true, example = "1") -// }) -// public CommonResult updateAttrStatus(@RequestParam("id") Integer id, -// @RequestParam("status") Integer status) { -// return success(productAttrService.updateProductAttrStatus(AdminSecurityContextHolder.getContext().getAdminId(), id, status)); -// } -// -// // TODO 芋艿 暂时不考虑 delete Attr 。因为关联逻辑比较多 -// -// @PostMapping("/attr_value/add") -// @ApiOperation(value = "创建商品规格值") -// @ApiImplicitParams({ -// @ApiImplicitParam(name = "attrId", value = "规格编号", required = true, example = "100"), -// @ApiImplicitParam(name = "name", value = "规格值", required = true, example = "蓝色") -// }) -// public CommonResult addAttrValue(@RequestParam("attrId") Integer attrId, -// @RequestParam("name") String name) { -// // 创建 ProductAttrValueAddDTO 对象 -// ProductAttrValueAddDTO productAttrValueAddDTO = new ProductAttrValueAddDTO().setAttrId(attrId).setName(name); -// // 添加 -// ProductAttrValueBO result = productAttrService.addProductAttrValue(AdminSecurityContextHolder.getContext().getAdminId(), productAttrValueAddDTO); -// // 返回结果 -// return success(ProductAttrConvert.INSTANCE.convert4(result)); -// } -// -// @PostMapping("/attr_value/update") -// @ApiOperation(value = "修改商品规格值") -// @ApiImplicitParams({ -// @ApiImplicitParam(name = "id", value = "规格值编号", required = true, example = "100"), -// @ApiImplicitParam(name = "name", value = "规格值", required = true, example = "蓝色") -// }) -// public CommonResult updateAttrValue(@RequestParam("id") Integer id, -// @RequestParam("name") String name) { -// // 创建 ProductAttrValueUpdateDTO 对象 -// ProductAttrValueUpdateDTO productAttrValueUpdateDTO = new ProductAttrValueUpdateDTO().setId(id).setName(name); -// // 更新 -// return success(productAttrService.updateProductAttrValue(AdminSecurityContextHolder.getContext().getAdminId(), productAttrValueUpdateDTO)); -// } -// -// @PostMapping("/attr_value/update_status") -// @ApiImplicitParams({ -// @ApiImplicitParam(name = "id", value = "规格编号", required = true, example = "100"), -// @ApiImplicitParam(name = "status", value = "状态", required = true, example = "1") -// }) -// public CommonResult updateAttrValueStatus(@RequestParam("id") Integer id, -// @RequestParam("status") Integer status) { -// return success(productAttrService.updateProductAttrValueStatus(AdminSecurityContextHolder.getContext().getAdminId(), id, status)); -// } + @GetMapping("/attr/tree") + @ApiOperation(value = "获得规格树结构", notes = "该接口返回的信息更为精简。一般用于前端缓存数据字典到本地。") + public CommonResult> tree() { + // 查询全列表 + List result = productAttrService.getProductAttrList(); + return CommonResult.success(ProductAttrConvert.INSTANCE.convertSimple(result)); + } + + @PostMapping("/attr/add") + @ApiOperation(value = "创建商品规格") + public CommonResult addAttr(@Validated ProductAttrAddRequest addRequest) { + // 创建 ProductAttrAddDTO 对象 + ProductAttrAddDTO productAttrAddDTO = new ProductAttrAddDTO().setName(addRequest.getName()); + // 添加 + ProductAttrBO result = productAttrService.addProductAttr(AdminSecurityContextHolder.getContext().getAdminId(), productAttrAddDTO); + return CommonResult.success(ProductAttrConvert.INSTANCE.convertAttr(result)); + } + + @PostMapping("/attr/update") + @ApiOperation(value = "修改商品规格") + public CommonResult updateAttr(@Validated ProductAttrUpdateRequest updateRequest) { + ProductAttrUpdateDTO productAttrUpdateDTO = ProductAttrConvert.INSTANCE.convertUpdate(updateRequest); + // 更新 + return CommonResult.success(productAttrService.updateProductAttr(AdminSecurityContextHolder.getContext().getAdminId(), productAttrUpdateDTO)); + } + + @PostMapping("/attr/update_status") + @ApiOperation(value = "修改商品规格状态") + @ApiImplicitParams({ + @ApiImplicitParam(name = "id", value = "规格编号", required = true, example = "100"), + @ApiImplicitParam(name = "status", value = "状态", required = true, example = "1") + }) + public CommonResult updateAttrStatus(@RequestParam("id") Integer id, + @RequestParam("status") Integer status) { + return CommonResult.success(productAttrService.updateProductAttrStatus(AdminSecurityContextHolder.getContext().getAdminId(), id, status)); + } + + // TODO 芋艿 暂时不考虑 delete Attr 。因为关联逻辑比较多 + + @PostMapping("/attr_value/add") + @ApiOperation(value = "创建商品规格值") + @ApiImplicitParams({ + @ApiImplicitParam(name = "attrId", value = "规格编号", required = true, example = "100"), + @ApiImplicitParam(name = "name", value = "规格值", required = true, example = "蓝色") + }) + public CommonResult addAttrValue(@Validated ProductAttrValueAddRequest addRequest) { + // 创建 ProductAttrValueAddDTO 对象 + ProductAttrValueAddDTO productAttrValueAddDTO = new ProductAttrValueAddDTO().setAttrId(addRequest.getAttrId()).setName(addRequest.getName()); + // 添加 + ProductAttrValueBO result = productAttrService.addProductAttrValue(AdminSecurityContextHolder.getContext().getAdminId(), productAttrValueAddDTO); + // 返回结果 + return CommonResult.success(ProductAttrConvert.INSTANCE.convertAddResponse(result)); + } + + @PostMapping("/attr_value/update") + @ApiOperation(value = "修改商品规格值") + @ApiImplicitParams({ + @ApiImplicitParam(name = "id", value = "规格值编号", required = true, example = "100"), + @ApiImplicitParam(name = "name", value = "规格值", required = true, example = "蓝色") + }) + public CommonResult updateAttrValue(@RequestParam("id") Integer id, + @RequestParam("name") String name) { + // 创建 ProductAttrValueUpdateDTO 对象 + ProductAttrValueUpdateDTO productAttrValueUpdateDTO = new ProductAttrValueUpdateDTO().setId(id).setName(name); + // 更新 + return CommonResult.success(productAttrService.updateProductAttrValue(AdminSecurityContextHolder.getContext().getAdminId(), productAttrValueUpdateDTO)); + } + + @PostMapping("/attr_value/update_status") + @ApiImplicitParams({ + @ApiImplicitParam(name = "id", value = "规格编号", required = true, example = "100"), + @ApiImplicitParam(name = "status", value = "状态", required = true, example = "1") + }) + public CommonResult updateAttrValueStatus(@RequestParam("id") Integer id, + @RequestParam("status") Integer status) { + return CommonResult.success(productAttrService.updateProductAttrValueStatus(AdminSecurityContextHolder.getContext().getAdminId(), id, status)); + } // TODO 芋艿 暂时不考虑 delete Attr Value 。因为关联逻辑比较多 diff --git a/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/convert/attr/ProductAttrConvert.java b/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/convert/attr/ProductAttrConvert.java index 13415d7c9..c6b315c82 100644 --- a/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/convert/attr/ProductAttrConvert.java +++ b/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/convert/attr/ProductAttrConvert.java @@ -2,18 +2,44 @@ package cn.iocoder.mall.product.rest.convert.attr; import cn.iocoder.common.framework.vo.PageResult; import cn.iocoder.mall.product.biz.bo.attr.ProductAttrBO; +import cn.iocoder.mall.product.biz.bo.attr.ProductAttrSimpleWithValueBO; +import cn.iocoder.mall.product.biz.bo.attr.ProductAttrValueBO; +import cn.iocoder.mall.product.biz.bo.attr.ProductAttrWithValueBO; import cn.iocoder.mall.product.biz.dto.attr.AdminProductAttrPageDTO; +import cn.iocoder.mall.product.biz.dto.attr.ProductAttrUpdateDTO; import cn.iocoder.mall.product.rest.request.attr.AdminProductAttrPageRequest; +import cn.iocoder.mall.product.rest.request.attr.ProductAttrUpdateRequest; import cn.iocoder.mall.product.rest.response.attr.AdminsProductAttrPageResponse; +import cn.iocoder.mall.product.rest.response.attr.AdminsProductAttrSimpleResponse; +import cn.iocoder.mall.product.rest.response.attr.AdminsProductAttrVO; +import cn.iocoder.mall.product.rest.response.attr.AdminsProductAttrValueResponse; import org.mapstruct.Mapper; +import org.mapstruct.Mappings; import org.mapstruct.factory.Mappers; +import java.util.List; + @Mapper public interface ProductAttrConvert { ProductAttrConvert INSTANCE = Mappers.getMapper(ProductAttrConvert.class); + @Mappings({}) AdminProductAttrPageDTO convert(AdminProductAttrPageRequest bean); - PageResult convertPage(PageResult productAttrPage); + @Mappings({}) + PageResult convertPage(PageResult productAttrPage); + + @Mappings({}) + List convertSimple(List simpleList); + + @Mappings({}) + AdminsProductAttrVO convertAttr(ProductAttrBO attrBO); + + @Mappings({}) + ProductAttrUpdateDTO convertUpdate(ProductAttrUpdateRequest updateRequest); + + @Mappings({}) + AdminsProductAttrValueResponse convertAddResponse(ProductAttrValueBO result); } + diff --git a/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/attr/ProductAttrAddRequest.java b/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/attr/ProductAttrAddRequest.java new file mode 100644 index 000000000..9ceb12f9a --- /dev/null +++ b/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/attr/ProductAttrAddRequest.java @@ -0,0 +1,20 @@ +package cn.iocoder.mall.product.rest.request.attr; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import javax.validation.constraints.NotEmpty; + +/** + * 规格添加 + */ +@Data +@Accessors(chain = true) +public class ProductAttrAddRequest { + + @ApiModelProperty(name = "name", value = "规格名", required = true, example = "颜色") + @NotEmpty(message = "规格名不能为空") + private String name; + +} diff --git a/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/attr/ProductAttrUpdateRequest.java b/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/attr/ProductAttrUpdateRequest.java new file mode 100644 index 000000000..745a34f5a --- /dev/null +++ b/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/attr/ProductAttrUpdateRequest.java @@ -0,0 +1,26 @@ +package cn.iocoder.mall.product.rest.request.attr; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; + +/** + * 规格修改 + */ +@Data +@Accessors(chain = true) +public class ProductAttrUpdateRequest { + + @ApiModelProperty(name = "id", value = "规格编号", required = true, example = "1") + @NotNull(message = "规格编号不能为空") + private Integer id; + + @ApiModelProperty(name = "name", value = "规格名", required = true, example = "颜色") + @NotEmpty(message = "规格名不能为空") + private String name; + + +} diff --git a/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/attr/ProductAttrValueAddRequest.java b/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/attr/ProductAttrValueAddRequest.java new file mode 100644 index 000000000..244d8f186 --- /dev/null +++ b/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/attr/ProductAttrValueAddRequest.java @@ -0,0 +1,27 @@ +package cn.iocoder.mall.product.rest.request.attr; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; + +/** + * Product 规格值添加 DTO + */ +@Data +@Accessors(chain = true) +public class ProductAttrValueAddRequest { + + @ApiModelProperty(name = "attrId", value = "规格编号", required = true, example = "1") + @NotNull(message = "规格编号不能为空") + private Integer attrId; + /** + * 名称 + */ + @ApiModelProperty(name = "name", value = "规格值名", required = true, example = "红色") + @NotEmpty(message = "规格值名不能为空") + private String name; + +} diff --git a/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/attr/ProductAttrValueUpdateRequest.java b/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/attr/ProductAttrValueUpdateRequest.java new file mode 100644 index 000000000..e2cabaa85 --- /dev/null +++ b/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/attr/ProductAttrValueUpdateRequest.java @@ -0,0 +1,27 @@ +package cn.iocoder.mall.product.rest.request.attr; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; + +/** + * Product 规格值修改 DTO + *

+ * 注意,不允许修改所属规格 + */ +@Data +@Accessors(chain = true) +public class ProductAttrValueUpdateRequest { + + @ApiModelProperty(name = "id", value = "规格值编号", required = true, example = "1") + @NotNull(message = "规格值编号不能为空") + private Integer id; + + @ApiModelProperty(name = "id", value = "规格值编号", required = true, example = "1") + @NotEmpty(message = "规格名不能为空") + private String name; + +} diff --git a/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/response/attr/AdminsProductAttrSimpleResponse.java b/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/response/attr/AdminsProductAttrSimpleResponse.java new file mode 100644 index 000000000..4b797a686 --- /dev/null +++ b/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/response/attr/AdminsProductAttrSimpleResponse.java @@ -0,0 +1,38 @@ +package cn.iocoder.mall.product.rest.response.attr; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.util.List; + +@ApiModel(value = "商品规格精简 VO", description = "带有规格值数组") +@Data +@Accessors(chain = true) +public class AdminsProductAttrSimpleResponse { + + @ApiModelProperty(value = "规格编号", required = true, example = "1") + private Integer id; + @ApiModelProperty(value = "规格名", required = true, example = "颜色") + private String name; + @ApiModelProperty(value = "规格值数组", required = true) + private List values; + + @ApiModel("规格值") + @Data + @Accessors(chain = true) + public static class ProductAttrValue { + + /** + * 规格值编号 + */ + @ApiModelProperty(value = "规格值编号", required = true, example = "1") + private Integer id; + /** + * 规格值名 + */ + @ApiModelProperty(value = "规格值名", required = true, example = "小") + private String name; + } +} diff --git a/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/response/attr/AdminsProductAttrVO.java b/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/response/attr/AdminsProductAttrVO.java new file mode 100644 index 000000000..5d62ffb7f --- /dev/null +++ b/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/response/attr/AdminsProductAttrVO.java @@ -0,0 +1,24 @@ +package cn.iocoder.mall.product.rest.response.attr; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.util.Date; + +@ApiModel(value = "商品规格 VO", description = "不带有规格值数组") +@Data +@Accessors(chain = true) +public class AdminsProductAttrVO { + + @ApiModelProperty(value = "规格编号", required = true, example = "1") + private Integer id; + @ApiModelProperty(value = "规格名", required = true, example = "颜色") + private String name; + @ApiModelProperty(value = "状态", required = true, example = "1") + private Integer status; + @ApiModelProperty(value = "创建时间", required = true, example = "时间戳") + private Date createTime; + +} diff --git a/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/response/attr/AdminsProductAttrValueResponse.java b/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/response/attr/AdminsProductAttrValueResponse.java new file mode 100644 index 000000000..03de4b578 --- /dev/null +++ b/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/response/attr/AdminsProductAttrValueResponse.java @@ -0,0 +1,26 @@ +package cn.iocoder.mall.product.rest.response.attr; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.util.Date; + +@ApiModel(value = "商品规格值 VO") +@Data +@Accessors(chain = true) +public class AdminsProductAttrValueResponse { + + @ApiModelProperty(value = "规格值编号", required = true, example = "1") + private Integer id; + @ApiModelProperty(value = "规格编号", required = true, example = "1") + private Integer attrId; + @ApiModelProperty(value = "规格名", required = true, example = "颜色") + private String name; + @ApiModelProperty(value = "状态", required = true, example = "1") + private Integer status; + @ApiModelProperty(value = "创建时间", required = true, example = "时间戳") + private Date createTime; + +} diff --git a/product/product-rpc-api/pom.xml b/product/product-rpc-api/pom.xml index 8cb7a6478..489ccc46b 100644 --- a/product/product-rpc-api/pom.xml +++ b/product/product-rpc-api/pom.xml @@ -3,7 +3,7 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - system + product cn.iocoder.mall 1.0-SNAPSHOT diff --git a/product/product-rpc/pom.xml b/product/product-rpc/pom.xml index 010865b94..86830e45c 100644 --- a/product/product-rpc/pom.xml +++ b/product/product-rpc/pom.xml @@ -3,7 +3,7 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - system + product cn.iocoder.mall 1.0-SNAPSHOT diff --git a/product/product-start/src/main/java/cn/iocoder/mall/product/application/controller/admins/AdminsProductAttrController.java b/product/product-start/src/main/java/cn/iocoder/mall/product/application/controller/admins/AdminsProductAttrController.java index 3b2a406c0..f19574d6b 100644 --- a/product/product-start/src/main/java/cn/iocoder/mall/product/application/controller/admins/AdminsProductAttrController.java +++ b/product/product-start/src/main/java/cn/iocoder/mall/product/application/controller/admins/AdminsProductAttrController.java @@ -1,7 +1,6 @@ package cn.iocoder.mall.product.application.controller.admins; import cn.iocoder.common.framework.vo.CommonResult; -import cn.iocoder.mall.system.sdk.context.AdminSecurityContextHolder; import cn.iocoder.mall.product.api.ProductAttrService; import cn.iocoder.mall.product.api.bo.ProductAttrBO; import cn.iocoder.mall.product.api.bo.ProductAttrPageBO; @@ -13,12 +12,12 @@ import cn.iocoder.mall.product.application.vo.admins.AdminsProductAttrPageVO; import cn.iocoder.mall.product.application.vo.admins.AdminsProductAttrSimpleVO; import cn.iocoder.mall.product.application.vo.admins.AdminsProductAttrVO; import cn.iocoder.mall.product.application.vo.admins.AdminsProductAttrValueVO; +import cn.iocoder.mall.system.sdk.context.AdminSecurityContextHolder; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import org.apache.dubbo.config.annotation.Reference; -import org.springframework.web.bind.annotation.*; import java.util.List; diff --git a/product/product-start/src/main/java/cn/iocoder/mall/product/application/controller/admins/AdminsProductBrandController.java b/product/product-start/src/main/java/cn/iocoder/mall/product/application/controller/admins/AdminsProductBrandController.java index 470b69c90..440219781 100644 --- a/product/product-start/src/main/java/cn/iocoder/mall/product/application/controller/admins/AdminsProductBrandController.java +++ b/product/product-start/src/main/java/cn/iocoder/mall/product/application/controller/admins/AdminsProductBrandController.java @@ -1,7 +1,6 @@ package cn.iocoder.mall.product.application.controller.admins; import cn.iocoder.common.framework.vo.CommonResult; -import cn.iocoder.mall.system.sdk.context.AdminSecurityContextHolder; import cn.iocoder.mall.product.api.ProductBrandService; import cn.iocoder.mall.product.api.bo.ProductBrandBO; import cn.iocoder.mall.product.api.bo.ProductBrangPageBO; @@ -11,12 +10,12 @@ import cn.iocoder.mall.product.api.dto.ProductBrandUpdateDTO; import cn.iocoder.mall.product.application.convert.ProductBrandConvert; import cn.iocoder.mall.product.application.vo.admins.AdminsProductBrandVO; import cn.iocoder.mall.product.application.vo.admins.AdminsProductBrangPageVO; +import cn.iocoder.mall.system.sdk.context.AdminSecurityContextHolder; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import org.apache.dubbo.config.annotation.Reference; -import org.springframework.web.bind.annotation.*; import static cn.iocoder.common.framework.vo.CommonResult.success; diff --git a/product/product-start/src/main/java/cn/iocoder/mall/product/application/controller/admins/AdminsProductCategoryController.java b/product/product-start/src/main/java/cn/iocoder/mall/product/application/controller/admins/AdminsProductCategoryController.java index b9a468ce9..b65644ca6 100644 --- a/product/product-start/src/main/java/cn/iocoder/mall/product/application/controller/admins/AdminsProductCategoryController.java +++ b/product/product-start/src/main/java/cn/iocoder/mall/product/application/controller/admins/AdminsProductCategoryController.java @@ -1,7 +1,6 @@ package cn.iocoder.mall.product.application.controller.admins; import cn.iocoder.common.framework.vo.CommonResult; -import cn.iocoder.mall.system.sdk.context.AdminSecurityContextHolder; import cn.iocoder.mall.product.api.ProductCategoryService; import cn.iocoder.mall.product.api.bo.ProductCategoryBO; import cn.iocoder.mall.product.api.constant.ProductCategoryConstants; @@ -10,12 +9,12 @@ import cn.iocoder.mall.product.api.dto.ProductCategoryUpdateDTO; import cn.iocoder.mall.product.application.convert.ProductCategoryConvert; import cn.iocoder.mall.product.application.vo.admins.AdminsProductCategoryTreeNodeVO; import cn.iocoder.mall.product.application.vo.admins.AdminsProductCategoryVO; +import cn.iocoder.mall.system.sdk.context.AdminSecurityContextHolder; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import org.apache.dubbo.config.annotation.Reference; -import org.springframework.web.bind.annotation.*; import java.util.ArrayList; import java.util.Comparator; diff --git a/product/product-start/src/main/java/cn/iocoder/mall/product/application/controller/admins/AdminsProductSpuController.java b/product/product-start/src/main/java/cn/iocoder/mall/product/application/controller/admins/AdminsProductSpuController.java index db3b6727c..08790e193 100644 --- a/product/product-start/src/main/java/cn/iocoder/mall/product/application/controller/admins/AdminsProductSpuController.java +++ b/product/product-start/src/main/java/cn/iocoder/mall/product/application/controller/admins/AdminsProductSpuController.java @@ -1,7 +1,6 @@ package cn.iocoder.mall.product.application.controller.admins; import cn.iocoder.common.framework.vo.CommonResult; -import cn.iocoder.mall.system.sdk.context.AdminSecurityContextHolder; import cn.iocoder.mall.product.api.ProductSpuService; import cn.iocoder.mall.product.api.bo.ProductSpuBO; import cn.iocoder.mall.product.api.bo.ProductSpuDetailBO; @@ -11,13 +10,13 @@ import cn.iocoder.mall.product.application.convert.ProductSpuConvert; import cn.iocoder.mall.product.application.vo.admins.AdminsProductSpuDetailVO; import cn.iocoder.mall.product.application.vo.admins.AdminsProductSpuPageVO; import cn.iocoder.mall.product.application.vo.admins.AdminsProductSpuVO; +import cn.iocoder.mall.system.sdk.context.AdminSecurityContextHolder; import com.alibaba.fastjson.JSON; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import org.apache.dubbo.config.annotation.Reference; -import org.springframework.web.bind.annotation.*; import java.util.Collection; import java.util.List; diff --git a/product/product-start/src/main/java/cn/iocoder/mall/product/application/controller/users/UserFavoriteController.java b/product/product-start/src/main/java/cn/iocoder/mall/product/application/controller/users/UserFavoriteController.java index 1fe9d33fc..b0ad41255 100644 --- a/product/product-start/src/main/java/cn/iocoder/mall/product/application/controller/users/UserFavoriteController.java +++ b/product/product-start/src/main/java/cn/iocoder/mall/product/application/controller/users/UserFavoriteController.java @@ -10,7 +10,6 @@ import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.apache.dubbo.config.annotation.Reference; import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; /** * 用户收藏 From b996ddfa1ea8d36584da0fd6e8511c9045ebe7ab Mon Sep 17 00:00:00 2001 From: q2118cs Date: Mon, 11 May 2020 16:26:02 +0800 Subject: [PATCH 04/10] product-sku-rpc --- .../convert/product/ProductSpuConvert.java | 2 - .../biz/dao/product/ProductSkuMapper.java | 15 ++- .../biz/dao/product/ProductSpuMapper.java | 4 +- .../service/product/ProductAttrService.java | 3 + .../service/product/ProductSpuService.java | 15 +++ .../product/impl/ProductAttrServiceImpl.java | 1 + .../product/impl/ProductSpuServiceImpl.java | 59 ++++++++ .../mall/product/rpc/api/ProductSpuRpc.java | 12 ++ .../response/ProductSpuDetailResponse.java | 127 ++++++++++++++++++ .../rpc/convert/ProductSpuConvert.java | 16 +++ .../product/rpc/rpc/ProductSpuRpcImpl.java | 24 ++++ .../product-rpc/src/main/resources/rpc.yaml | 26 +--- promotion/promotion-service-impl/pom.xml | 2 +- .../service/ProductRecommendServiceImpl.java | 8 +- 14 files changed, 280 insertions(+), 34 deletions(-) create mode 100644 product/product-biz/src/main/java/cn/iocoder/mall/product/biz/service/product/ProductSpuService.java create mode 100644 product/product-biz/src/main/java/cn/iocoder/mall/product/biz/service/product/impl/ProductSpuServiceImpl.java create mode 100644 product/product-rpc-api/src/main/java/cn/iocoder/mall/product/rpc/api/ProductSpuRpc.java create mode 100644 product/product-rpc-api/src/main/java/cn/iocoder/mall/product/rpc/response/ProductSpuDetailResponse.java create mode 100644 product/product-rpc/src/main/java/cn/iocoder/mall/product/rpc/convert/ProductSpuConvert.java create mode 100644 product/product-rpc/src/main/java/cn/iocoder/mall/product/rpc/rpc/ProductSpuRpcImpl.java diff --git a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/convert/product/ProductSpuConvert.java b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/convert/product/ProductSpuConvert.java index e6b4ec24a..4c7ea79a0 100644 --- a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/convert/product/ProductSpuConvert.java +++ b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/convert/product/ProductSpuConvert.java @@ -130,6 +130,4 @@ public interface ProductSpuConvert { return spuDetailList; } - - } diff --git a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dao/product/ProductSkuMapper.java b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dao/product/ProductSkuMapper.java index acd271ed4..f0df9a044 100644 --- a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dao/product/ProductSkuMapper.java +++ b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dao/product/ProductSkuMapper.java @@ -1,10 +1,19 @@ package cn.iocoder.mall.product.biz.dao.product; -import cn.iocoder.mall.product.biz.dataobject.product.ProductBrandDO; +import cn.iocoder.mall.product.biz.dataobject.product.ProductSkuDO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import org.springframework.stereotype.Repository; -@Repository -public interface ProductSkuMapper extends BaseMapper { +import java.util.List; +@Repository +public interface ProductSkuMapper extends BaseMapper { + + default List selectListBySpuIdAndStatus(Integer spuId, Integer status) { + return selectList(Wrappers.query().lambda() + .eq(ProductSkuDO::getSpuId, spuId) + .eq(ProductSkuDO::getStatus, status) + .eq(ProductSkuDO::getDeleted, false)); + } } diff --git a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dao/product/ProductSpuMapper.java b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dao/product/ProductSpuMapper.java index 21a7fd8f7..eab4e069a 100644 --- a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dao/product/ProductSpuMapper.java +++ b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dao/product/ProductSpuMapper.java @@ -1,11 +1,11 @@ package cn.iocoder.mall.product.biz.dao.product; -import cn.iocoder.mall.product.biz.dataobject.product.ProductBrandDO; +import cn.iocoder.mall.product.biz.dataobject.product.ProductSpuDO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.springframework.stereotype.Repository; @Repository -public interface ProductSpuMapper extends BaseMapper { +public interface ProductSpuMapper extends BaseMapper { } diff --git a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/service/product/ProductAttrService.java b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/service/product/ProductAttrService.java index 1b81ac641..ccccac871 100644 --- a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/service/product/ProductAttrService.java +++ b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/service/product/ProductAttrService.java @@ -7,9 +7,11 @@ import cn.iocoder.mall.product.biz.bo.attr.ProductAttrBO; import cn.iocoder.mall.product.biz.bo.attr.ProductAttrSimpleWithValueBO; import cn.iocoder.mall.product.biz.bo.attr.ProductAttrValueBO; import cn.iocoder.mall.product.biz.bo.attr.ProductAttrWithValueBO; +import cn.iocoder.mall.product.biz.bo.product.ProductAttrAndValuePairBO; import cn.iocoder.mall.product.biz.dto.attr.*; import java.util.List; +import java.util.Set; public interface ProductAttrService { /** @@ -64,4 +66,5 @@ public interface ProductAttrService { Boolean updateProductAttrValueStatus(Integer adminId, Integer productAttrValueId, @InEnum(value = CommonStatusEnum.class, message = "修改状态必须是 {value}") Integer status); + List validProductAttrAndValue(Set productAttrValueIds, boolean validStatus); } diff --git a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/service/product/ProductSpuService.java b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/service/product/ProductSpuService.java new file mode 100644 index 000000000..696ae9e5d --- /dev/null +++ b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/service/product/ProductSpuService.java @@ -0,0 +1,15 @@ +package cn.iocoder.mall.product.biz.service.product; + + +import cn.iocoder.mall.product.biz.bo.product.ProductSpuDetailBO; + +public interface ProductSpuService { + /** + * 获取SPU明细 + * + * @param id spuId + * @return SPU明细 + */ + ProductSpuDetailBO getProductSpuDetail(Integer id); + +} diff --git a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/service/product/impl/ProductAttrServiceImpl.java b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/service/product/impl/ProductAttrServiceImpl.java index 4199697c1..7abfb38d3 100644 --- a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/service/product/impl/ProductAttrServiceImpl.java +++ b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/service/product/impl/ProductAttrServiceImpl.java @@ -204,6 +204,7 @@ public class ProductAttrServiceImpl implements ProductAttrService { return i > 0; } + @Override public List validProductAttrAndValue(Set productAttrValueIds, boolean validStatus) { // 首先,校验规格值 List attrValues = productAttrValueMapper.selectBatchIds(productAttrValueIds); diff --git a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/service/product/impl/ProductSpuServiceImpl.java b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/service/product/impl/ProductSpuServiceImpl.java new file mode 100644 index 000000000..4bbe44599 --- /dev/null +++ b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/service/product/impl/ProductSpuServiceImpl.java @@ -0,0 +1,59 @@ +package cn.iocoder.mall.product.biz.service.product.impl; + +import cn.iocoder.common.framework.util.ServiceExceptionUtil; +import cn.iocoder.common.framework.util.StringUtil; +import cn.iocoder.mall.product.biz.bo.product.ProductAttrAndValuePairBO; +import cn.iocoder.mall.product.biz.bo.product.ProductSpuDetailBO; +import cn.iocoder.mall.product.biz.convert.product.ProductSpuConvert; +import cn.iocoder.mall.product.biz.dao.product.ProductCategoryMapper; +import cn.iocoder.mall.product.biz.dao.product.ProductSkuMapper; +import cn.iocoder.mall.product.biz.dao.product.ProductSpuMapper; +import cn.iocoder.mall.product.biz.dataobject.product.ProductCategoryDO; +import cn.iocoder.mall.product.biz.dataobject.product.ProductSkuDO; +import cn.iocoder.mall.product.biz.dataobject.product.ProductSpuDO; +import cn.iocoder.mall.product.biz.enums.ProductErrorCodeEnum; +import cn.iocoder.mall.product.biz.enums.product.ProductSpuConstants; +import cn.iocoder.mall.product.biz.service.product.ProductAttrService; +import cn.iocoder.mall.product.biz.service.product.ProductSpuService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.Assert; + +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +@Service +public class ProductSpuServiceImpl implements ProductSpuService { + + @Autowired + private ProductSpuMapper productSpuMapper; + @Autowired + private ProductSkuMapper productSkuMapper; + @Autowired + private ProductCategoryMapper productCategoryMapper; + @Autowired + private ProductAttrService productAttrService; + + @Override + public ProductSpuDetailBO getProductSpuDetail(Integer spuId) { + // 校验商品 spu 存在 + ProductSpuDO spu = productSpuMapper.selectById(spuId); + if (spu == null) { + throw ServiceExceptionUtil.exception(ProductErrorCodeEnum.PRODUCT_SPU_NOT_EXISTS.getCode()); + } + // 获得商品分类分类 + ProductCategoryDO category = productCategoryMapper.selectById(spu.getCid()); + Assert.notNull(category, String.format("分类编号(%d) 对应", spu.getCid())); + // 获得商品 sku 数组 + List skus = productSkuMapper.selectListBySpuIdAndStatus(spuId, ProductSpuConstants.SKU_STATUS_ENABLE); + // 获得规格 + Set productAttrValueIds = new HashSet<>(); + skus.forEach(sku -> productAttrValueIds.addAll(StringUtil.splitToInt(sku.getAttrs(), ","))); + // 读取规格时,不考虑规格是否被禁用 + List attrAndValuePairList = productAttrService.validProductAttrAndValue(productAttrValueIds, false); + // 返回成功 + return ProductSpuConvert.INSTANCE.convert2(spu, skus, attrAndValuePairList, category); + } + +} diff --git a/product/product-rpc-api/src/main/java/cn/iocoder/mall/product/rpc/api/ProductSpuRpc.java b/product/product-rpc-api/src/main/java/cn/iocoder/mall/product/rpc/api/ProductSpuRpc.java new file mode 100644 index 000000000..8948cdf37 --- /dev/null +++ b/product/product-rpc-api/src/main/java/cn/iocoder/mall/product/rpc/api/ProductSpuRpc.java @@ -0,0 +1,12 @@ +package cn.iocoder.mall.product.rpc.api; + +import cn.iocoder.mall.product.rpc.response.ProductSpuDetailResponse; + +/** + * @author Rai + */ +public interface ProductSpuRpc { + + ProductSpuDetailResponse getProductSpuDetail(Integer spuId); + +} diff --git a/product/product-rpc-api/src/main/java/cn/iocoder/mall/product/rpc/response/ProductSpuDetailResponse.java b/product/product-rpc-api/src/main/java/cn/iocoder/mall/product/rpc/response/ProductSpuDetailResponse.java new file mode 100644 index 000000000..3122bf1f3 --- /dev/null +++ b/product/product-rpc-api/src/main/java/cn/iocoder/mall/product/rpc/response/ProductSpuDetailResponse.java @@ -0,0 +1,127 @@ +package cn.iocoder.mall.product.rpc.response; + +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.util.List; + +/** + * 商品 Spu 明细 BO(包括 Sku 明细) + */ +@Data +@Accessors(chain = true) +public class ProductSpuDetailResponse implements Serializable { + + /** + * SPU 编号 + */ + private Integer id; + + // ========== 基本信息 ========= + /** + * SPU 名字 + */ + private String name; + /** + * 卖点 + */ + private String sellPoint; + /** + * 描述 + */ + private String description; + /** + * 分类编号 + */ + private Integer cid; + /** + * 分类名 + */ + private String categoryName; + /** + * 商品主图地址 + *

+ * 数组,以逗号分隔 + *

+ * 建议尺寸:800*800像素,你可以拖拽图片调整顺序,最多上传15张 + */ + private List picUrls; + + // ========== 其他信息 ========= + /** + * 是否上架商品(是否可见)。 + *

+ * true 为已上架 + * false 为已下架 + */ + private Boolean visible; + /** + * 排序字段 + */ + private Integer sort; + + // ========== SKU ========= + + /** + * SKU 数组 + */ + private List skus; + + /** + * 商品 Sku 明细 BO + */ + @Data + @Accessors(chain = true) + public static class Sku implements Serializable { + + /** + * sku 编号 + */ + private Integer id; + /** + * 商品编号 + */ + private Integer spuId; + /** + * 图片地址 + */ + private String picURL; + /** + * 规格值数组 + */ + private List attrs; + /** + * 价格,单位:分 + */ + private Integer price; + /** + * 库存数量 + */ + private Integer quantity; + + } + + @Data + @Accessors(chain = true) + public static class ProductAttrAndValuePair implements Serializable { + + /** + * 规格编号 + */ + private Integer attrId; + /** + * 规格名 + */ + private String attrName; + /** + * 规格值 + */ + private Integer attrValueId; + /** + * 规格值名 + */ + private String attrValueName; + + } +} diff --git a/product/product-rpc/src/main/java/cn/iocoder/mall/product/rpc/convert/ProductSpuConvert.java b/product/product-rpc/src/main/java/cn/iocoder/mall/product/rpc/convert/ProductSpuConvert.java new file mode 100644 index 000000000..23f2e38eb --- /dev/null +++ b/product/product-rpc/src/main/java/cn/iocoder/mall/product/rpc/convert/ProductSpuConvert.java @@ -0,0 +1,16 @@ +package cn.iocoder.mall.product.rpc.convert; + +import cn.iocoder.mall.product.biz.bo.product.ProductSpuDetailBO; +import cn.iocoder.mall.product.rpc.response.ProductSpuDetailResponse; +import org.mapstruct.Mapper; +import org.mapstruct.Mappings; +import org.mapstruct.factory.Mappers; + +@Mapper +public interface ProductSpuConvert { + + ProductSpuConvert INSTANCE = Mappers.getMapper(ProductSpuConvert.class); + + @Mappings({}) + ProductSpuDetailResponse convertDetail(ProductSpuDetailBO productSpuDetail); +} diff --git a/product/product-rpc/src/main/java/cn/iocoder/mall/product/rpc/rpc/ProductSpuRpcImpl.java b/product/product-rpc/src/main/java/cn/iocoder/mall/product/rpc/rpc/ProductSpuRpcImpl.java new file mode 100644 index 000000000..04af31b0c --- /dev/null +++ b/product/product-rpc/src/main/java/cn/iocoder/mall/product/rpc/rpc/ProductSpuRpcImpl.java @@ -0,0 +1,24 @@ +package cn.iocoder.mall.product.rpc.rpc; + +import cn.iocoder.mall.product.biz.bo.product.ProductSpuDetailBO; +import cn.iocoder.mall.product.biz.service.product.ProductSpuService; +import cn.iocoder.mall.product.rpc.api.ProductSpuRpc; +import cn.iocoder.mall.product.rpc.convert.ProductSpuConvert; +import cn.iocoder.mall.product.rpc.response.ProductSpuDetailResponse; +import org.apache.dubbo.config.annotation.Service; +import org.springframework.beans.factory.annotation.Autowired; + +@Service(validation = "true", version = "${dubbo.provider.ProductSpuService.version}") +public class ProductSpuRpcImpl implements ProductSpuRpc { + + @Autowired + private ProductSpuService productSpuService; + + @Override + public ProductSpuDetailResponse getProductSpuDetail(Integer spuId) { + ProductSpuDetailBO productSpuDetail = productSpuService.getProductSpuDetail(spuId); + return ProductSpuConvert.INSTANCE.convertDetail(productSpuDetail); + } + + +} diff --git a/product/product-rpc/src/main/resources/rpc.yaml b/product/product-rpc/src/main/resources/rpc.yaml index 48d16c48a..8cacacf0a 100644 --- a/product/product-rpc/src/main/resources/rpc.yaml +++ b/product/product-rpc/src/main/resources/rpc.yaml @@ -2,39 +2,21 @@ dubbo: # Spring Cloud Alibaba Dubbo 专属配置 cloud: - subscribed-services: 'system-application' # 设置订阅的应用列表,默认为 * 订阅所有应用 + subscribed-services: 'product-application' # 设置订阅的应用列表,默认为 * 订阅所有应用 # Dubbo 提供者的协议 protocol: name: dubbo port: -1 # Dubbo 提供服务的扫描基础包 scan: - base-packages: cn.iocoder.mall.system.rpc.rpc + base-packages: cn.iocoder.mall.product.rpc.rpc # Dubbo 服务提供者的配置 provider: filter: -exception - SystemLogRPC: - version: 1.0.0 - OAuth2RPC: - version: 1.0.0 - AuthorizationRPC: - version: 1.0.0 - AdminRPC: - version: 1.0.0 - UserRPC: - version: 1.0.0 - UserAddressRPC: + ProductSpuService: version: 1.0.0 # Dubbo 服务消费者的配置 consumer: - SystemLogRPC: # 用于 AccessLogInterceptor 等拦截器,记录 HTTP API 请求的访问日志 - version: 1.0.0 - OAuth2RPC: # 用于 AccountAuthInterceptor 拦截器,执行认证 - version: 1.0.0 - AuthorizationRPC: # 用于 AccountAuthInterceptor 拦截器,执行鉴权(权限验证) - version: 1.0.0 - AdminRPC: - version: 1.0.0 - UserRPC: + ProductSpuService: version: 1.0.0 diff --git a/promotion/promotion-service-impl/pom.xml b/promotion/promotion-service-impl/pom.xml index 49b3d9bf7..7156cbe50 100644 --- a/promotion/promotion-service-impl/pom.xml +++ b/promotion/promotion-service-impl/pom.xml @@ -25,7 +25,7 @@ cn.iocoder.mall - product-service-api + product-rpc-api 1.0-SNAPSHOT diff --git a/promotion/promotion-service-impl/src/main/java/cn/iocoder/mall/promotion/biz/service/ProductRecommendServiceImpl.java b/promotion/promotion-service-impl/src/main/java/cn/iocoder/mall/promotion/biz/service/ProductRecommendServiceImpl.java index f9817416b..4e0a728f6 100644 --- a/promotion/promotion-service-impl/src/main/java/cn/iocoder/mall/promotion/biz/service/ProductRecommendServiceImpl.java +++ b/promotion/promotion-service-impl/src/main/java/cn/iocoder/mall/promotion/biz/service/ProductRecommendServiceImpl.java @@ -3,7 +3,7 @@ package cn.iocoder.mall.promotion.biz.service; import cn.iocoder.common.framework.constant.CommonStatusEnum; import cn.iocoder.common.framework.util.ServiceExceptionUtil; import cn.iocoder.mall.mybatis.enums.DeletedStatusEnum; -import cn.iocoder.mall.product.api.ProductSpuService; +import cn.iocoder.mall.product.rpc.api.ProductSpuRpc; import cn.iocoder.mall.promotion.api.ProductRecommendService; import cn.iocoder.mall.promotion.api.bo.ProductRecommendBO; import cn.iocoder.mall.promotion.api.bo.ProductRecommendPageBO; @@ -26,7 +26,7 @@ import java.util.List; public class ProductRecommendServiceImpl implements ProductRecommendService { @Reference(validation = "true", version = "${dubbo.consumer.ProductSpuService.version}") - private ProductSpuService productSpuService; + private ProductSpuRpc productSpuRpc; @Autowired private ProductRecommendMapper productRecommendMapper; @@ -52,7 +52,7 @@ public class ProductRecommendServiceImpl implements ProductRecommendService { @Override public ProductRecommendBO addProductRecommend(Integer adminId, ProductRecommendAddDTO productRecommendAddDTO) { // 校验商品不存在 - if (productSpuService.getProductSpuDetail(productRecommendAddDTO.getProductSpuId()) == null) { + if (productSpuRpc.getProductSpuDetail(productRecommendAddDTO.getProductSpuId()) == null) { throw ServiceExceptionUtil.exception(PromotionErrorCodeEnum.PRODUCT_RECOMMEND_PRODUCT_NOT_EXISTS.getCode()); } // 校验商品是否已经推荐 @@ -74,7 +74,7 @@ public class ProductRecommendServiceImpl implements ProductRecommendService { throw ServiceExceptionUtil.exception(PromotionErrorCodeEnum.PRODUCT_RECOMMEND_NOT_EXISTS.getCode()); } // 校验商品不存在 - if (productSpuService.getProductSpuDetail(productRecommendUpdateDTO.getProductSpuId()) == null) { + if (productSpuRpc.getProductSpuDetail(productRecommendUpdateDTO.getProductSpuId()) == null) { throw ServiceExceptionUtil.exception(PromotionErrorCodeEnum.PRODUCT_RECOMMEND_PRODUCT_NOT_EXISTS.getCode()); } // 校验商品是否已经推荐 From 055d204ded129b360e566b639311d1185e968490 Mon Sep 17 00:00:00 2001 From: linhj Date: Mon, 11 May 2020 18:12:13 +0800 Subject: [PATCH 05/10] =?UTF-8?q?:construction:=20=E5=95=86=E5=93=81?= =?UTF-8?q?=E5=8C=85=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- product/product-service-impl/pom.xml | 12 ++++++++++++ .../mall/product/dataobject/ProductAttrDO.java | 2 +- .../product/dataobject/ProductAttrValueDO.java | 2 +- .../mall/product/dataobject/ProductBrandDO.java | 2 +- .../mall/product/dataobject/ProductCategoryDO.java | 2 +- .../mall/product/dataobject/ProductSkuDO.java | 2 +- .../mall/product/dataobject/ProductSpuDO.java | 2 +- .../message/UserProductSpuCollectionsConsumer.java | 4 ++-- .../product/service/ProductAttrServiceImpl.java | 2 +- .../service/ProductCategoryServiceImpl.java | 2 +- .../product/service/ProductSpuServiceImpl.java | 2 +- .../UserProductSpuCollectionsServiceImpl.java | 2 +- product/product-start/pom.xml | 14 ++++++++------ .../admins/AdminsProductAttrController.java | 3 ++- .../admins/AdminsProductBrandController.java | 3 ++- .../admins/AdminsProductCategoryController.java | 3 ++- .../admins/AdminsProductSpuController.java | 3 ++- .../controller/users/UserFavoriteController.java | 7 ++----- .../users/UsersProductSpuCollectionController.java | 4 +--- .../iocoder/mall/system/api/SystemLogService.java | 2 -- .../mall/user/biz/enums/UserErrorCodeEnum.java | 3 +++ 21 files changed, 46 insertions(+), 32 deletions(-) diff --git a/product/product-service-impl/pom.xml b/product/product-service-impl/pom.xml index 6f9735b6c..4d9696434 100644 --- a/product/product-service-impl/pom.xml +++ b/product/product-service-impl/pom.xml @@ -49,6 +49,12 @@ mybatis-plus-boot-starter + + cn.iocoder.mall + mall-spring-boot-starter-mybatis + 1.0-SNAPSHOT + + com.alibaba.cloud @@ -78,6 +84,12 @@ com.google.guava guava + + cn.iocoder.mall + user-biz + 1.0-SNAPSHOT + compile + diff --git a/product/product-service-impl/src/main/java/cn/iocoder/mall/product/dataobject/ProductAttrDO.java b/product/product-service-impl/src/main/java/cn/iocoder/mall/product/dataobject/ProductAttrDO.java index 4499806bf..02b465ce0 100644 --- a/product/product-service-impl/src/main/java/cn/iocoder/mall/product/dataobject/ProductAttrDO.java +++ b/product/product-service-impl/src/main/java/cn/iocoder/mall/product/dataobject/ProductAttrDO.java @@ -1,6 +1,6 @@ package cn.iocoder.mall.product.dataobject; -import cn.iocoder.common.framework.dataobject.DeletableDO; +import cn.iocoder.mall.mybatis.dataobject.DeletableDO; import lombok.Data; import lombok.experimental.Accessors; diff --git a/product/product-service-impl/src/main/java/cn/iocoder/mall/product/dataobject/ProductAttrValueDO.java b/product/product-service-impl/src/main/java/cn/iocoder/mall/product/dataobject/ProductAttrValueDO.java index ccfe7aa35..23ff2ef2c 100644 --- a/product/product-service-impl/src/main/java/cn/iocoder/mall/product/dataobject/ProductAttrValueDO.java +++ b/product/product-service-impl/src/main/java/cn/iocoder/mall/product/dataobject/ProductAttrValueDO.java @@ -1,6 +1,6 @@ package cn.iocoder.mall.product.dataobject; -import cn.iocoder.common.framework.dataobject.DeletableDO; +import cn.iocoder.mall.mybatis.dataobject.DeletableDO; import lombok.Data; import lombok.experimental.Accessors; diff --git a/product/product-service-impl/src/main/java/cn/iocoder/mall/product/dataobject/ProductBrandDO.java b/product/product-service-impl/src/main/java/cn/iocoder/mall/product/dataobject/ProductBrandDO.java index a90effe17..d3b04bd20 100644 --- a/product/product-service-impl/src/main/java/cn/iocoder/mall/product/dataobject/ProductBrandDO.java +++ b/product/product-service-impl/src/main/java/cn/iocoder/mall/product/dataobject/ProductBrandDO.java @@ -1,6 +1,6 @@ package cn.iocoder.mall.product.dataobject; -import cn.iocoder.common.framework.dataobject.DeletableDO; +import cn.iocoder.mall.mybatis.dataobject.DeletableDO; import lombok.Data; import lombok.experimental.Accessors; diff --git a/product/product-service-impl/src/main/java/cn/iocoder/mall/product/dataobject/ProductCategoryDO.java b/product/product-service-impl/src/main/java/cn/iocoder/mall/product/dataobject/ProductCategoryDO.java index aa6489612..0d1af5ac7 100644 --- a/product/product-service-impl/src/main/java/cn/iocoder/mall/product/dataobject/ProductCategoryDO.java +++ b/product/product-service-impl/src/main/java/cn/iocoder/mall/product/dataobject/ProductCategoryDO.java @@ -1,6 +1,6 @@ package cn.iocoder.mall.product.dataobject; -import cn.iocoder.common.framework.dataobject.DeletableDO; +import cn.iocoder.mall.mybatis.dataobject.DeletableDO; import lombok.Data; import lombok.experimental.Accessors; diff --git a/product/product-service-impl/src/main/java/cn/iocoder/mall/product/dataobject/ProductSkuDO.java b/product/product-service-impl/src/main/java/cn/iocoder/mall/product/dataobject/ProductSkuDO.java index 2edbb11e9..4d41f73ce 100644 --- a/product/product-service-impl/src/main/java/cn/iocoder/mall/product/dataobject/ProductSkuDO.java +++ b/product/product-service-impl/src/main/java/cn/iocoder/mall/product/dataobject/ProductSkuDO.java @@ -1,6 +1,6 @@ package cn.iocoder.mall.product.dataobject; -import cn.iocoder.common.framework.dataobject.DeletableDO; +import cn.iocoder.mall.mybatis.dataobject.DeletableDO; import lombok.Data; import lombok.experimental.Accessors; diff --git a/product/product-service-impl/src/main/java/cn/iocoder/mall/product/dataobject/ProductSpuDO.java b/product/product-service-impl/src/main/java/cn/iocoder/mall/product/dataobject/ProductSpuDO.java index 4a906deaa..08b6b918a 100644 --- a/product/product-service-impl/src/main/java/cn/iocoder/mall/product/dataobject/ProductSpuDO.java +++ b/product/product-service-impl/src/main/java/cn/iocoder/mall/product/dataobject/ProductSpuDO.java @@ -1,6 +1,6 @@ package cn.iocoder.mall.product.dataobject; -import cn.iocoder.common.framework.dataobject.DeletableDO; +import cn.iocoder.mall.mybatis.dataobject.DeletableDO; import lombok.Data; import lombok.experimental.Accessors; diff --git a/product/product-service-impl/src/main/java/cn/iocoder/mall/product/message/UserProductSpuCollectionsConsumer.java b/product/product-service-impl/src/main/java/cn/iocoder/mall/product/message/UserProductSpuCollectionsConsumer.java index 664ca2e3a..8677bd0a6 100644 --- a/product/product-service-impl/src/main/java/cn/iocoder/mall/product/message/UserProductSpuCollectionsConsumer.java +++ b/product/product-service-impl/src/main/java/cn/iocoder/mall/product/message/UserProductSpuCollectionsConsumer.java @@ -1,7 +1,7 @@ package cn.iocoder.mall.product.message; -import cn.iocoder.common.framework.constant.DeletedStatusEnum; import cn.iocoder.common.framework.util.ServiceExceptionUtil; +import cn.iocoder.mall.mybatis.enums.DeletedStatusEnum; import cn.iocoder.mall.product.api.UserProductSpuCollectionsService; import cn.iocoder.mall.product.api.bo.UserProductSpuCollectionsBO; import cn.iocoder.mall.product.api.dto.UserProductSpuCollectionsAddDTO; @@ -10,7 +10,7 @@ import cn.iocoder.mall.product.api.message.ProductSpuCollectionMessage; import cn.iocoder.mall.product.convert.UserProductSpuCollectionsConvert; import cn.iocoder.mall.user.api.UserService; import cn.iocoder.mall.user.api.bo.UserBO; -import cn.iocoder.mall.user.api.constant.UserErrorCodeEnum; +import cn.iocoder.mall.user.biz.enums.UserErrorCodeEnum; import org.apache.commons.lang3.StringUtils; import org.apache.dubbo.config.annotation.Reference; import org.apache.rocketmq.spring.annotation.RocketMQMessageListener; diff --git a/product/product-service-impl/src/main/java/cn/iocoder/mall/product/service/ProductAttrServiceImpl.java b/product/product-service-impl/src/main/java/cn/iocoder/mall/product/service/ProductAttrServiceImpl.java index 7ccdfb8ce..c7691d790 100644 --- a/product/product-service-impl/src/main/java/cn/iocoder/mall/product/service/ProductAttrServiceImpl.java +++ b/product/product-service-impl/src/main/java/cn/iocoder/mall/product/service/ProductAttrServiceImpl.java @@ -1,7 +1,7 @@ package cn.iocoder.mall.product.service; -import cn.iocoder.common.framework.constant.DeletedStatusEnum; import cn.iocoder.common.framework.util.ServiceExceptionUtil; +import cn.iocoder.mall.mybatis.enums.DeletedStatusEnum; import cn.iocoder.mall.product.api.ProductAttrService; import cn.iocoder.mall.product.api.bo.*; import cn.iocoder.mall.product.api.constant.ProductAttrConstants; diff --git a/product/product-service-impl/src/main/java/cn/iocoder/mall/product/service/ProductCategoryServiceImpl.java b/product/product-service-impl/src/main/java/cn/iocoder/mall/product/service/ProductCategoryServiceImpl.java index c067eefdd..35d658621 100644 --- a/product/product-service-impl/src/main/java/cn/iocoder/mall/product/service/ProductCategoryServiceImpl.java +++ b/product/product-service-impl/src/main/java/cn/iocoder/mall/product/service/ProductCategoryServiceImpl.java @@ -1,7 +1,7 @@ package cn.iocoder.mall.product.service; -import cn.iocoder.common.framework.constant.DeletedStatusEnum; import cn.iocoder.common.framework.util.ServiceExceptionUtil; +import cn.iocoder.mall.mybatis.enums.DeletedStatusEnum; import cn.iocoder.mall.product.api.ProductCategoryService; import cn.iocoder.mall.product.api.bo.ProductCategoryBO; import cn.iocoder.mall.product.api.constant.ProductCategoryConstants; diff --git a/product/product-service-impl/src/main/java/cn/iocoder/mall/product/service/ProductSpuServiceImpl.java b/product/product-service-impl/src/main/java/cn/iocoder/mall/product/service/ProductSpuServiceImpl.java index 8fb9734e0..6a572ee48 100644 --- a/product/product-service-impl/src/main/java/cn/iocoder/mall/product/service/ProductSpuServiceImpl.java +++ b/product/product-service-impl/src/main/java/cn/iocoder/mall/product/service/ProductSpuServiceImpl.java @@ -1,9 +1,9 @@ package cn.iocoder.mall.product.service; -import cn.iocoder.common.framework.constant.DeletedStatusEnum; import cn.iocoder.common.framework.util.CollectionUtil; import cn.iocoder.common.framework.util.ServiceExceptionUtil; import cn.iocoder.common.framework.util.StringUtil; +import cn.iocoder.mall.mybatis.enums.DeletedStatusEnum; import cn.iocoder.mall.product.api.ProductSpuService; import cn.iocoder.mall.product.api.bo.*; import cn.iocoder.mall.product.api.constant.ProductCategoryConstants; diff --git a/product/product-service-impl/src/main/java/cn/iocoder/mall/product/service/UserProductSpuCollectionsServiceImpl.java b/product/product-service-impl/src/main/java/cn/iocoder/mall/product/service/UserProductSpuCollectionsServiceImpl.java index 2794e3331..067031394 100644 --- a/product/product-service-impl/src/main/java/cn/iocoder/mall/product/service/UserProductSpuCollectionsServiceImpl.java +++ b/product/product-service-impl/src/main/java/cn/iocoder/mall/product/service/UserProductSpuCollectionsServiceImpl.java @@ -1,7 +1,7 @@ package cn.iocoder.mall.product.service; -import cn.iocoder.common.framework.constant.DeletedStatusEnum; import cn.iocoder.common.framework.vo.CommonResult; +import cn.iocoder.mall.mybatis.enums.DeletedStatusEnum; import cn.iocoder.mall.product.api.UserProductSpuCollectionsService; import cn.iocoder.mall.product.api.bo.UserProductSpuCollectionsBO; import cn.iocoder.mall.product.api.bo.UserProductSpuCollectionsPageBO; diff --git a/product/product-start/pom.xml b/product/product-start/pom.xml index 594e99ee6..5a0c29a91 100644 --- a/product/product-start/pom.xml +++ b/product/product-start/pom.xml @@ -33,14 +33,10 @@ product-service-impl 1.0-SNAPSHOT + cn.iocoder.mall - user-sdk - 1.0-SNAPSHOT - - - cn.iocoder.mall - system-sdk + mall-spring-boot-starter-mybatis 1.0-SNAPSHOT @@ -82,6 +78,12 @@ spring-boot-starter-test test + + cn.iocoder.mall + mall-spring-boot-starter-security + 1.0-SNAPSHOT + compile + diff --git a/product/product-start/src/main/java/cn/iocoder/mall/product/application/controller/admins/AdminsProductAttrController.java b/product/product-start/src/main/java/cn/iocoder/mall/product/application/controller/admins/AdminsProductAttrController.java index f19574d6b..8e0b2c6d4 100644 --- a/product/product-start/src/main/java/cn/iocoder/mall/product/application/controller/admins/AdminsProductAttrController.java +++ b/product/product-start/src/main/java/cn/iocoder/mall/product/application/controller/admins/AdminsProductAttrController.java @@ -12,12 +12,13 @@ import cn.iocoder.mall.product.application.vo.admins.AdminsProductAttrPageVO; import cn.iocoder.mall.product.application.vo.admins.AdminsProductAttrSimpleVO; import cn.iocoder.mall.product.application.vo.admins.AdminsProductAttrVO; import cn.iocoder.mall.product.application.vo.admins.AdminsProductAttrValueVO; -import cn.iocoder.mall.system.sdk.context.AdminSecurityContextHolder; +import cn.iocoder.mall.security.core.context.AdminSecurityContextHolder; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import org.apache.dubbo.config.annotation.Reference; +import org.springframework.web.bind.annotation.*; import java.util.List; diff --git a/product/product-start/src/main/java/cn/iocoder/mall/product/application/controller/admins/AdminsProductBrandController.java b/product/product-start/src/main/java/cn/iocoder/mall/product/application/controller/admins/AdminsProductBrandController.java index 440219781..965191b59 100644 --- a/product/product-start/src/main/java/cn/iocoder/mall/product/application/controller/admins/AdminsProductBrandController.java +++ b/product/product-start/src/main/java/cn/iocoder/mall/product/application/controller/admins/AdminsProductBrandController.java @@ -10,12 +10,13 @@ import cn.iocoder.mall.product.api.dto.ProductBrandUpdateDTO; import cn.iocoder.mall.product.application.convert.ProductBrandConvert; import cn.iocoder.mall.product.application.vo.admins.AdminsProductBrandVO; import cn.iocoder.mall.product.application.vo.admins.AdminsProductBrangPageVO; -import cn.iocoder.mall.system.sdk.context.AdminSecurityContextHolder; +import cn.iocoder.mall.security.core.context.AdminSecurityContextHolder; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import org.apache.dubbo.config.annotation.Reference; +import org.springframework.web.bind.annotation.*; import static cn.iocoder.common.framework.vo.CommonResult.success; diff --git a/product/product-start/src/main/java/cn/iocoder/mall/product/application/controller/admins/AdminsProductCategoryController.java b/product/product-start/src/main/java/cn/iocoder/mall/product/application/controller/admins/AdminsProductCategoryController.java index b65644ca6..14151bde2 100644 --- a/product/product-start/src/main/java/cn/iocoder/mall/product/application/controller/admins/AdminsProductCategoryController.java +++ b/product/product-start/src/main/java/cn/iocoder/mall/product/application/controller/admins/AdminsProductCategoryController.java @@ -9,12 +9,13 @@ import cn.iocoder.mall.product.api.dto.ProductCategoryUpdateDTO; import cn.iocoder.mall.product.application.convert.ProductCategoryConvert; import cn.iocoder.mall.product.application.vo.admins.AdminsProductCategoryTreeNodeVO; import cn.iocoder.mall.product.application.vo.admins.AdminsProductCategoryVO; -import cn.iocoder.mall.system.sdk.context.AdminSecurityContextHolder; +import cn.iocoder.mall.security.core.context.AdminSecurityContextHolder; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import org.apache.dubbo.config.annotation.Reference; +import org.springframework.web.bind.annotation.*; import java.util.ArrayList; import java.util.Comparator; diff --git a/product/product-start/src/main/java/cn/iocoder/mall/product/application/controller/admins/AdminsProductSpuController.java b/product/product-start/src/main/java/cn/iocoder/mall/product/application/controller/admins/AdminsProductSpuController.java index 08790e193..305f93072 100644 --- a/product/product-start/src/main/java/cn/iocoder/mall/product/application/controller/admins/AdminsProductSpuController.java +++ b/product/product-start/src/main/java/cn/iocoder/mall/product/application/controller/admins/AdminsProductSpuController.java @@ -10,13 +10,14 @@ import cn.iocoder.mall.product.application.convert.ProductSpuConvert; import cn.iocoder.mall.product.application.vo.admins.AdminsProductSpuDetailVO; import cn.iocoder.mall.product.application.vo.admins.AdminsProductSpuPageVO; import cn.iocoder.mall.product.application.vo.admins.AdminsProductSpuVO; -import cn.iocoder.mall.system.sdk.context.AdminSecurityContextHolder; +import cn.iocoder.mall.security.core.context.AdminSecurityContextHolder; import com.alibaba.fastjson.JSON; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import org.apache.dubbo.config.annotation.Reference; +import org.springframework.web.bind.annotation.*; import java.util.Collection; import java.util.List; diff --git a/product/product-start/src/main/java/cn/iocoder/mall/product/application/controller/users/UserFavoriteController.java b/product/product-start/src/main/java/cn/iocoder/mall/product/application/controller/users/UserFavoriteController.java index b0ad41255..5a8efd159 100644 --- a/product/product-start/src/main/java/cn/iocoder/mall/product/application/controller/users/UserFavoriteController.java +++ b/product/product-start/src/main/java/cn/iocoder/mall/product/application/controller/users/UserFavoriteController.java @@ -4,12 +4,12 @@ import cn.iocoder.common.framework.vo.CommonResult; import cn.iocoder.mall.product.api.UserProductSpuCollectionsService; import cn.iocoder.mall.product.api.bo.UserProductSpuCollectionsPageBO; import cn.iocoder.mall.product.api.dto.UserProductSpuCollectionsPageDTO; -import cn.iocoder.mall.user.sdk.annotation.RequiresLogin; -import cn.iocoder.mall.user.sdk.context.UserSecurityContextHolder; +import cn.iocoder.mall.security.core.context.UserSecurityContextHolder; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.apache.dubbo.config.annotation.Reference; import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; /** * 用户收藏 @@ -26,7 +26,6 @@ public class UserFavoriteController { private UserProductSpuCollectionsService userProductSpuCollectionsService; @GetMapping("page") - @RequiresLogin @ApiOperation("用户商品收藏列表") public CommonResult getUserProductSpuCollectionsPage( @Validated UserProductSpuCollectionsPageDTO userProductSpuCollectionsPageDTO) { @@ -36,7 +35,6 @@ public class UserFavoriteController { } @DeleteMapping("remove") - @RequiresLogin @ApiOperation(value = "用户商品收藏-删除") public CommonResult removeUserFavorite(@RequestParam("spuId") final Integer spuId) { final Integer userId = UserSecurityContextHolder.getContext().getUserId(); @@ -44,7 +42,6 @@ public class UserFavoriteController { } @GetMapping("hasUserFavorite") - @RequiresLogin @ApiOperation(value = "用户商品收藏-是否收藏") public CommonResult hasUserSpuFavorite(@RequestParam("spuId") final Integer spuId) { final Integer userId = UserSecurityContextHolder.getContext().getUserId(); diff --git a/product/product-start/src/main/java/cn/iocoder/mall/product/application/controller/users/UsersProductSpuCollectionController.java b/product/product-start/src/main/java/cn/iocoder/mall/product/application/controller/users/UsersProductSpuCollectionController.java index 39de1d967..46fe604f4 100644 --- a/product/product-start/src/main/java/cn/iocoder/mall/product/application/controller/users/UsersProductSpuCollectionController.java +++ b/product/product-start/src/main/java/cn/iocoder/mall/product/application/controller/users/UsersProductSpuCollectionController.java @@ -2,8 +2,7 @@ package cn.iocoder.mall.product.application.controller.users; import cn.iocoder.common.framework.vo.CommonResult; import cn.iocoder.mall.product.api.ProductSpuCollectionService; -import cn.iocoder.mall.user.sdk.annotation.RequiresLogin; -import cn.iocoder.mall.user.sdk.context.UserSecurityContextHolder; +import cn.iocoder.mall.security.core.context.UserSecurityContextHolder; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.apache.dubbo.config.annotation.Reference; @@ -30,7 +29,6 @@ public class UsersProductSpuCollectionController { @PostMapping("/collection/{spuId}/{hasCollectionType}") @ApiOperation("商品收藏") - @RequiresLogin public CommonResult productSpuCollection(@PathVariable("spuId") Integer spuId, @PathVariable("hasCollectionType") Integer hasCollectionType) { final Integer userId = UserSecurityContextHolder.getContext().getUserId(); diff --git a/system/system-service-api/src/main/java/cn/iocoder/mall/system/api/SystemLogService.java b/system/system-service-api/src/main/java/cn/iocoder/mall/system/api/SystemLogService.java index 31ca69637..872f6de1b 100644 --- a/system/system-service-api/src/main/java/cn/iocoder/mall/system/api/SystemLogService.java +++ b/system/system-service-api/src/main/java/cn/iocoder/mall/system/api/SystemLogService.java @@ -1,9 +1,7 @@ package cn.iocoder.mall.system.api; import cn.iocoder.mall.system.api.bo.systemlog.AccessLogPageBO; -import cn.iocoder.mall.system.api.dto.systemlog.AccessLogAddDTO; import cn.iocoder.mall.system.api.dto.systemlog.AccessLogPageDTO; -import cn.iocoder.mall.system.api.dto.systemlog.ExceptionLogAddDTO; /** * 系统日志 Service 接口 diff --git a/user/user-biz/src/main/java/cn/iocoder/mall/user/biz/enums/UserErrorCodeEnum.java b/user/user-biz/src/main/java/cn/iocoder/mall/user/biz/enums/UserErrorCodeEnum.java index 8d17f5a20..a4f88e56e 100644 --- a/user/user-biz/src/main/java/cn/iocoder/mall/user/biz/enums/UserErrorCodeEnum.java +++ b/user/user-biz/src/main/java/cn/iocoder/mall/user/biz/enums/UserErrorCodeEnum.java @@ -13,6 +13,9 @@ public enum UserErrorCodeEnum implements ServiceExceptionUtil.Enumerable { USER_ADDRESS_NOT_EXISTENT(1001004000, "用户地址不存在!"), USER_ADDRESS_IS_DELETED(1001004001, "用户地址已被删除!"), USER_GET_ADDRESS_NOT_EXISTS(1001004002, "获取的地址不存在!"), + + // ========== 用户 ========== + USER_NOT_EXISTS(1001004003, "获取的地址不存在!"), ; private final int code; From 08f3d35573499d15083b7429f6b9ba45f2cc37f2 Mon Sep 17 00:00:00 2001 From: q2118cs Date: Mon, 11 May 2020 18:22:12 +0800 Subject: [PATCH 06/10] product brand --- .../bo/{product => brand}/ProductBrandBO.java | 2 +- .../biz/bo/product/ProductBrangPageBO.java | 1 + .../ProductBrandConvert.java | 15 ++-- .../biz/dao/product/ProductBrandMapper.java | 16 +++- .../dataobject/product/ProductBrandDO.java | 4 +- ...trPageDTO.java => ProductAttrPageDTO.java} | 2 +- .../ProductBrandAddDTO.java | 2 +- .../ProductBrandPageDTO.java | 15 ++-- .../ProductBrandUpdateDTO.java | 2 +- .../service/product/ProductAttrService.java | 2 +- .../service/product/ProductBrandService.java | 45 ++++++++++ .../product/impl/ProductAttrServiceImpl.java | 2 +- .../product/impl/ProductBrandServiceImpl.java | 67 ++++++++++++++ .../admins/AdminsProductAttrController.java | 10 +-- .../admins/AdminsProductBrandController.java | 90 +++++++++++++++++++ .../rest/convert/attr/ProductAttrConvert.java | 10 +-- .../convert/brand/ProductBrandConvert.java | 35 ++++++++ .../request/attr/ProductAttrAddRequest.java | 5 +- ...quest.java => ProductAttrPageRequest.java} | 2 +- .../attr/ProductAttrUpdateRequest.java | 5 +- .../attr/ProductAttrValueAddRequest.java | 5 +- .../attr/ProductAttrValueUpdateRequest.java | 2 + .../request/brand/ProductBrandAddRequest.java | 27 ++++++ .../brand/ProductBrandPageRequest.java | 24 +++++ .../brand/ProductBrandUpdateRequest.java | 32 +++++++ .../response/attr/AdminsProductAttrVO.java | 24 ----- .../attr/AdminsProdutAttrResponse.java | 20 +++++ .../brand/AdminsProductBrandResponse.java | 36 ++++++++ 28 files changed, 435 insertions(+), 67 deletions(-) rename product/product-biz/src/main/java/cn/iocoder/mall/product/biz/bo/{product => brand}/ProductBrandBO.java (91%) rename product/product-biz/src/main/java/cn/iocoder/mall/product/biz/convert/{product => brand}/ProductBrandConvert.java (55%) rename product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/attr/{AdminProductAttrPageDTO.java => ProductAttrPageDTO.java} (86%) rename product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/{product => brand}/ProductBrandAddDTO.java (93%) rename product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/{product => brand}/ProductBrandPageDTO.java (53%) rename product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/{product => brand}/ProductBrandUpdateDTO.java (94%) create mode 100644 product/product-biz/src/main/java/cn/iocoder/mall/product/biz/service/product/ProductBrandService.java create mode 100644 product/product-biz/src/main/java/cn/iocoder/mall/product/biz/service/product/impl/ProductBrandServiceImpl.java create mode 100644 product/product-rest/src/main/java/cn/iocoder/mall/product/rest/controller/admins/AdminsProductBrandController.java create mode 100644 product/product-rest/src/main/java/cn/iocoder/mall/product/rest/convert/brand/ProductBrandConvert.java rename product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/attr/{AdminProductAttrPageRequest.java => ProductAttrPageRequest.java} (89%) create mode 100644 product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/brand/ProductBrandAddRequest.java create mode 100644 product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/brand/ProductBrandPageRequest.java create mode 100644 product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/brand/ProductBrandUpdateRequest.java delete mode 100644 product/product-rest/src/main/java/cn/iocoder/mall/product/rest/response/attr/AdminsProductAttrVO.java create mode 100644 product/product-rest/src/main/java/cn/iocoder/mall/product/rest/response/brand/AdminsProductBrandResponse.java diff --git a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/bo/product/ProductBrandBO.java b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/bo/brand/ProductBrandBO.java similarity index 91% rename from product/product-biz/src/main/java/cn/iocoder/mall/product/biz/bo/product/ProductBrandBO.java rename to product/product-biz/src/main/java/cn/iocoder/mall/product/biz/bo/brand/ProductBrandBO.java index 4bf95a294..6dcdcc99b 100644 --- a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/bo/product/ProductBrandBO.java +++ b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/bo/brand/ProductBrandBO.java @@ -1,4 +1,4 @@ -package cn.iocoder.mall.product.biz.bo.product; +package cn.iocoder.mall.product.biz.bo.brand; import lombok.Data; import lombok.experimental.Accessors; diff --git a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/bo/product/ProductBrangPageBO.java b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/bo/product/ProductBrangPageBO.java index c80d6b0d4..5c3e6d966 100644 --- a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/bo/product/ProductBrangPageBO.java +++ b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/bo/product/ProductBrangPageBO.java @@ -1,5 +1,6 @@ package cn.iocoder.mall.product.biz.bo.product; +import cn.iocoder.mall.product.biz.bo.brand.ProductBrandBO; import lombok.Data; import lombok.experimental.Accessors; diff --git a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/convert/product/ProductBrandConvert.java b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/convert/brand/ProductBrandConvert.java similarity index 55% rename from product/product-biz/src/main/java/cn/iocoder/mall/product/biz/convert/product/ProductBrandConvert.java rename to product/product-biz/src/main/java/cn/iocoder/mall/product/biz/convert/brand/ProductBrandConvert.java index 6e18c8412..7c7e64d22 100644 --- a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/convert/product/ProductBrandConvert.java +++ b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/convert/brand/ProductBrandConvert.java @@ -1,10 +1,13 @@ -package cn.iocoder.mall.product.biz.convert.product; +package cn.iocoder.mall.product.biz.convert.brand; -import cn.iocoder.mall.product.biz.bo.product.ProductBrandBO; +import cn.iocoder.common.framework.vo.PageResult; +import cn.iocoder.mall.product.biz.bo.brand.ProductBrandBO; import cn.iocoder.mall.product.biz.dataobject.product.ProductBrandDO; -import cn.iocoder.mall.product.biz.dto.product.ProductBrandAddDTO; -import cn.iocoder.mall.product.biz.dto.product.ProductBrandUpdateDTO; +import cn.iocoder.mall.product.biz.dto.brand.ProductBrandAddDTO; +import cn.iocoder.mall.product.biz.dto.brand.ProductBrandUpdateDTO; +import com.baomidou.mybatisplus.core.metadata.IPage; import org.mapstruct.Mapper; +import org.mapstruct.Mapping; import org.mapstruct.Mappings; import org.mapstruct.factory.Mappers; @@ -15,6 +18,9 @@ public interface ProductBrandConvert { ProductBrandConvert INSTANCE = Mappers.getMapper(ProductBrandConvert.class); + @Mapping(source = "records", target = "list") + PageResult convertPage(IPage bean); + @Mappings({}) List convert(List brands); @@ -26,5 +32,4 @@ public interface ProductBrandConvert { @Mappings({}) ProductBrandDO convert(ProductBrandAddDTO brand); - } \ No newline at end of file diff --git a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dao/product/ProductBrandMapper.java b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dao/product/ProductBrandMapper.java index 5d79a4a1b..f83f77c20 100644 --- a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dao/product/ProductBrandMapper.java +++ b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dao/product/ProductBrandMapper.java @@ -1,11 +1,25 @@ package cn.iocoder.mall.product.biz.dao.product; import cn.iocoder.mall.product.biz.dataobject.product.ProductBrandDO; +import cn.iocoder.mall.product.biz.dto.brand.ProductBrandPageDTO; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Repository; @Repository public interface ProductBrandMapper extends BaseMapper { - + default IPage selectListByParams(ProductBrandPageDTO productBrandPageDTO) { + Page page = new Page<>(productBrandPageDTO.getPageNo(), productBrandPageDTO.getPageSize()); + LambdaQueryWrapper queryWrapper = Wrappers.query().lambda() + .like(StringUtils.isNotBlank(productBrandPageDTO.getName()), ProductBrandDO::getName, productBrandPageDTO.getName()) + .like(StringUtils.isNotBlank(productBrandPageDTO.getDescription()), ProductBrandDO::getName, productBrandPageDTO.getDescription()) + .eq(null != productBrandPageDTO.getStatus(), ProductBrandDO::getName, productBrandPageDTO.getStatus()) + .eq(ProductBrandDO::getDeleted, false); + return selectPage(page, queryWrapper); + } } \ No newline at end of file diff --git a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dataobject/product/ProductBrandDO.java b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dataobject/product/ProductBrandDO.java index 18b3c62aa..7ef635763 100644 --- a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dataobject/product/ProductBrandDO.java +++ b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dataobject/product/ProductBrandDO.java @@ -2,12 +2,14 @@ package cn.iocoder.mall.product.biz.dataobject.product; import cn.iocoder.mall.mybatis.dataobject.DeletableDO; import lombok.Data; +import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; /** * Product 品牌 */ @Data +@EqualsAndHashCode(callSuper = true) @Accessors(chain = true) public class ProductBrandDO extends DeletableDO { @@ -32,7 +34,7 @@ public class ProductBrandDO extends DeletableDO { /** * 状态 - * + *

* 1-开启 * 2-禁用 */ diff --git a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/attr/AdminProductAttrPageDTO.java b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/attr/ProductAttrPageDTO.java similarity index 86% rename from product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/attr/AdminProductAttrPageDTO.java rename to product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/attr/ProductAttrPageDTO.java index 9b0aa0a84..e6d23c62a 100644 --- a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/attr/AdminProductAttrPageDTO.java +++ b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/attr/ProductAttrPageDTO.java @@ -11,7 +11,7 @@ import lombok.experimental.Accessors; @Data @Accessors(chain = true) @EqualsAndHashCode(callSuper = true) -public class AdminProductAttrPageDTO extends PageParam { +public class ProductAttrPageDTO extends PageParam { /** * 商品规格名字 */ diff --git a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/product/ProductBrandAddDTO.java b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/brand/ProductBrandAddDTO.java similarity index 93% rename from product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/product/ProductBrandAddDTO.java rename to product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/brand/ProductBrandAddDTO.java index bda1d92ae..9b345eecd 100644 --- a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/product/ProductBrandAddDTO.java +++ b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/brand/ProductBrandAddDTO.java @@ -1,4 +1,4 @@ -package cn.iocoder.mall.product.biz.dto.product; +package cn.iocoder.mall.product.biz.dto.brand; import lombok.Data; import lombok.experimental.Accessors; diff --git a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/product/ProductBrandPageDTO.java b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/brand/ProductBrandPageDTO.java similarity index 53% rename from product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/product/ProductBrandPageDTO.java rename to product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/brand/ProductBrandPageDTO.java index cbd50fe8e..63255b5ef 100644 --- a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/product/ProductBrandPageDTO.java +++ b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/brand/ProductBrandPageDTO.java @@ -1,16 +1,17 @@ -package cn.iocoder.mall.product.biz.dto.product; +package cn.iocoder.mall.product.biz.dto.brand; +import cn.iocoder.common.framework.vo.PageParam; import lombok.Data; +import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; -import javax.validation.constraints.NotNull; - /** * 商品品牌分页 DTO */ @Data +@EqualsAndHashCode(callSuper = true) @Accessors(chain = true) -public class ProductBrandPageDTO { +public class ProductBrandPageDTO extends PageParam { /** * 名称 @@ -27,10 +28,4 @@ public class ProductBrandPageDTO { */ private Integer status; - @NotNull(message = "页码不能为空") - private Integer pageNo; - - @NotNull(message = "每页条数不能为空") - private Integer pageSize; - } diff --git a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/product/ProductBrandUpdateDTO.java b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/brand/ProductBrandUpdateDTO.java similarity index 94% rename from product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/product/ProductBrandUpdateDTO.java rename to product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/brand/ProductBrandUpdateDTO.java index b64d0bd6c..c977f8a0e 100644 --- a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/product/ProductBrandUpdateDTO.java +++ b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/brand/ProductBrandUpdateDTO.java @@ -1,4 +1,4 @@ -package cn.iocoder.mall.product.biz.dto.product; +package cn.iocoder.mall.product.biz.dto.brand; import lombok.Data; import lombok.experimental.Accessors; diff --git a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/service/product/ProductAttrService.java b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/service/product/ProductAttrService.java index ccccac871..4cb93a0d9 100644 --- a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/service/product/ProductAttrService.java +++ b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/service/product/ProductAttrService.java @@ -20,7 +20,7 @@ public interface ProductAttrService { * @param productAttrPageDTO 查询参数 * @return 规格分页信息 */ - PageResult getProductAttrPage(AdminProductAttrPageDTO productAttrPageDTO); + PageResult getProductAttrPage(ProductAttrPageDTO productAttrPageDTO); /** * 获得规格属性数组 diff --git a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/service/product/ProductBrandService.java b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/service/product/ProductBrandService.java new file mode 100644 index 000000000..711158054 --- /dev/null +++ b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/service/product/ProductBrandService.java @@ -0,0 +1,45 @@ +package cn.iocoder.mall.product.biz.service.product; + + +import cn.iocoder.common.framework.vo.PageResult; +import cn.iocoder.mall.product.biz.bo.brand.ProductBrandBO; +import cn.iocoder.mall.product.biz.dto.brand.ProductBrandAddDTO; +import cn.iocoder.mall.product.biz.dto.brand.ProductBrandPageDTO; +import cn.iocoder.mall.product.biz.dto.brand.ProductBrandUpdateDTO; + +public interface ProductBrandService { + + /** + * 获取品牌分页数据 + * + * @param productBrandPageDTO 翻页参数 + * @return + */ + PageResult getProductBrandPage(ProductBrandPageDTO productBrandPageDTO); + + /** + * 获取品牌明细 + * + * @param id 主键 + * @return + */ + ProductBrandBO getProductBrand(Integer id); + + /** + * 添加品牌 + * + * @param productBrandAddDTO 添加参数 + * @return + */ + ProductBrandBO addProductBrand(Integer adminId, ProductBrandAddDTO productBrandAddDTO); + + /** + * 更新品牌 + * + * @param productBrandUpdateDTO 更新参数 + * @return + */ + Boolean updateProductBrand(Integer adminId, ProductBrandUpdateDTO productBrandUpdateDTO); + + +} diff --git a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/service/product/impl/ProductAttrServiceImpl.java b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/service/product/impl/ProductAttrServiceImpl.java index 7abfb38d3..2c493eaaf 100644 --- a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/service/product/impl/ProductAttrServiceImpl.java +++ b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/service/product/impl/ProductAttrServiceImpl.java @@ -44,7 +44,7 @@ public class ProductAttrServiceImpl implements ProductAttrService { private ProductAttrValueMapper productAttrValueMapper; @Override - public PageResult getProductAttrPage(AdminProductAttrPageDTO productAttrPageDTO) { + public PageResult getProductAttrPage(ProductAttrPageDTO productAttrPageDTO) { //查询分页 Page page = new Page<>(productAttrPageDTO.getPageNo(), productAttrPageDTO.getPageSize()); LambdaQueryWrapper queryWrapper = Wrappers.query().lambda() diff --git a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/service/product/impl/ProductBrandServiceImpl.java b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/service/product/impl/ProductBrandServiceImpl.java new file mode 100644 index 000000000..404fd843c --- /dev/null +++ b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/service/product/impl/ProductBrandServiceImpl.java @@ -0,0 +1,67 @@ +package cn.iocoder.mall.product.biz.service.product.impl; + +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.product.biz.bo.brand.ProductBrandBO; +import cn.iocoder.mall.product.biz.convert.brand.ProductBrandConvert; +import cn.iocoder.mall.product.biz.dao.product.ProductBrandMapper; +import cn.iocoder.mall.product.biz.dataobject.product.ProductBrandDO; +import cn.iocoder.mall.product.biz.dto.brand.ProductBrandAddDTO; +import cn.iocoder.mall.product.biz.dto.brand.ProductBrandPageDTO; +import cn.iocoder.mall.product.biz.dto.brand.ProductBrandUpdateDTO; +import cn.iocoder.mall.product.biz.enums.ProductErrorCodeEnum; +import cn.iocoder.mall.product.biz.service.product.ProductBrandService; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.Date; + +/** + * 商品规格 Service 实现类 + * + * @see ProductBrandDO + */ +@Service +public class ProductBrandServiceImpl implements ProductBrandService { + + @Autowired + private ProductBrandMapper productBrandMapper; + + @Override + public PageResult getProductBrandPage(ProductBrandPageDTO productBrandPageDTO) { + IPage brandPage = productBrandMapper.selectListByParams(productBrandPageDTO); + return ProductBrandConvert.INSTANCE.convertPage(brandPage); + } + + @Override + public ProductBrandBO getProductBrand(Integer brandId) { + return ProductBrandConvert.INSTANCE.convert(productBrandMapper.selectById(brandId)); + } + + @Override + public ProductBrandBO addProductBrand(Integer adminId, ProductBrandAddDTO productBrandAddDTO) { + // 校验品牌名不重复 + int count = productBrandMapper.selectCount(Wrappers.query().lambda() + .eq(ProductBrandDO::getName, productBrandAddDTO.getName()) + .eq(ProductBrandDO::getDeleted, false)); + if (count > 0) { + throw ServiceExceptionUtil.exception(ProductErrorCodeEnum.PRODUCT_BRAND_EXIST.getCode()); + } + ProductBrandDO productBrandDO = ProductBrandConvert.INSTANCE.convert(productBrandAddDTO); + productBrandDO.setCreateTime(new Date()); + productBrandDO.setDeleted(DeletedStatusEnum.DELETED_NO.getValue()); + productBrandMapper.insert(productBrandDO); + return ProductBrandConvert.INSTANCE.convert(productBrandDO); + } + + @Override + public Boolean updateProductBrand(Integer adminId, ProductBrandUpdateDTO productBrandUpdateDTO) { + ProductBrandDO productBrandDO = ProductBrandConvert.INSTANCE.convert(productBrandUpdateDTO); + productBrandDO.setUpdateTime(new Date()); + productBrandMapper.updateById(productBrandDO); + return true; + } +} diff --git a/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/controller/admins/AdminsProductAttrController.java b/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/controller/admins/AdminsProductAttrController.java index fd46ee49d..7e10229b2 100644 --- a/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/controller/admins/AdminsProductAttrController.java +++ b/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/controller/admins/AdminsProductAttrController.java @@ -9,13 +9,13 @@ import cn.iocoder.mall.product.biz.bo.attr.ProductAttrWithValueBO; import cn.iocoder.mall.product.biz.dto.attr.*; import cn.iocoder.mall.product.biz.service.product.ProductAttrService; import cn.iocoder.mall.product.rest.convert.attr.ProductAttrConvert; -import cn.iocoder.mall.product.rest.request.attr.AdminProductAttrPageRequest; +import cn.iocoder.mall.product.rest.request.attr.ProductAttrPageRequest; import cn.iocoder.mall.product.rest.request.attr.ProductAttrAddRequest; import cn.iocoder.mall.product.rest.request.attr.ProductAttrUpdateRequest; import cn.iocoder.mall.product.rest.request.attr.ProductAttrValueAddRequest; import cn.iocoder.mall.product.rest.response.attr.AdminsProductAttrPageResponse; import cn.iocoder.mall.product.rest.response.attr.AdminsProductAttrSimpleResponse; -import cn.iocoder.mall.product.rest.response.attr.AdminsProductAttrVO; +import cn.iocoder.mall.product.rest.response.attr.AdminsProdutAttrResponse; import cn.iocoder.mall.product.rest.response.attr.AdminsProductAttrValueResponse; import cn.iocoder.mall.security.core.context.AdminSecurityContextHolder; import io.swagger.annotations.Api; @@ -45,8 +45,8 @@ public class AdminsProductAttrController { @GetMapping("/attr/page") @ApiOperation("获得规格分页") - public CommonResult> attrPage(AdminProductAttrPageRequest request) { - AdminProductAttrPageDTO pageDTO = ProductAttrConvert.INSTANCE.convert(request); + public CommonResult> attrPage(ProductAttrPageRequest request) { + ProductAttrPageDTO pageDTO = ProductAttrConvert.INSTANCE.convert(request); PageResult productAttrPage = productAttrService.getProductAttrPage(pageDTO); PageResult adminPageResponse = ProductAttrConvert.INSTANCE.convertPage(productAttrPage); return CommonResult.success(adminPageResponse); @@ -62,7 +62,7 @@ public class AdminsProductAttrController { @PostMapping("/attr/add") @ApiOperation(value = "创建商品规格") - public CommonResult addAttr(@Validated ProductAttrAddRequest addRequest) { + public CommonResult addAttr(@Validated ProductAttrAddRequest addRequest) { // 创建 ProductAttrAddDTO 对象 ProductAttrAddDTO productAttrAddDTO = new ProductAttrAddDTO().setName(addRequest.getName()); // 添加 diff --git a/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/controller/admins/AdminsProductBrandController.java b/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/controller/admins/AdminsProductBrandController.java new file mode 100644 index 000000000..8a31cd681 --- /dev/null +++ b/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/controller/admins/AdminsProductBrandController.java @@ -0,0 +1,90 @@ +package cn.iocoder.mall.product.rest.controller.admins; + +import cn.iocoder.common.framework.vo.CommonResult; +import cn.iocoder.common.framework.vo.PageResult; +import cn.iocoder.mall.product.biz.bo.brand.ProductBrandBO; +import cn.iocoder.mall.product.biz.dto.brand.ProductBrandAddDTO; +import cn.iocoder.mall.product.biz.dto.brand.ProductBrandPageDTO; +import cn.iocoder.mall.product.biz.dto.brand.ProductBrandUpdateDTO; +import cn.iocoder.mall.product.biz.service.product.ProductBrandService; +import cn.iocoder.mall.product.rest.convert.brand.ProductBrandConvert; +import cn.iocoder.mall.product.rest.request.brand.ProductBrandAddRequest; +import cn.iocoder.mall.product.rest.request.brand.ProductBrandPageRequest; +import cn.iocoder.mall.product.rest.request.brand.ProductBrandUpdateRequest; +import cn.iocoder.mall.product.rest.response.brand.AdminsProductBrandResponse; +import cn.iocoder.mall.security.core.context.AdminSecurityContextHolder; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import static cn.iocoder.common.framework.vo.CommonResult.success; + +@RestController +@RequestMapping("admins/brand") +@Api("商品品牌") +public class AdminsProductBrandController { + + private ProductBrandService productBrandService; + + @PostMapping("/add") + @ApiOperation("创建品牌") + public CommonResult add(@Validated ProductBrandAddRequest addRequest) { + // 创建 ProductBrandAddDTO 对象 + ProductBrandAddDTO productBrandAddDTO = ProductBrandConvert.INSTANCE.convertAdd(addRequest); + // 保存品牌 + ProductBrandBO result = productBrandService.addProductBrand(AdminSecurityContextHolder.getContext().getAdminId(), productBrandAddDTO); + // 返回结果 + return success(ProductBrandConvert.INSTANCE.convert(result)); + } + + @PostMapping("/update") + @ApiOperation("更新商品") + @ApiImplicitParams({ + @ApiImplicitParam(name = "id", value = "品牌主键", required = true, example = "1"), + @ApiImplicitParam(name = "name", value = "品牌名称", required = true, example = "安踏"), + @ApiImplicitParam(name = "description", value = "品牌描述", required = true, example = "安踏拖鞋"), + @ApiImplicitParam(name = "picUrl", value = "品牌图片", required = true, example = "http://www.iocoder.cn"), + @ApiImplicitParam(name = "status", value = "状态 1开启 2禁用", required = true, example = "1") + }) + public CommonResult update(@Validated ProductBrandUpdateRequest updateRequest) { + // 创建 productBrandUpdateDTO 对象 + ProductBrandUpdateDTO productBrandUpdateDTO = ProductBrandConvert.INSTANCE.convertUpdate(updateRequest); + // 更新商品 + return success(productBrandService.updateProductBrand(AdminSecurityContextHolder.getContext().getAdminId(), productBrandUpdateDTO)); + } + + @GetMapping("/get") + @ApiOperation("获取品牌") + @ApiImplicitParams({ + @ApiImplicitParam(name = "id", value = "品牌主键", required = true, example = "1") + }) + public CommonResult add(@RequestParam("id") Integer id) { + // 保存商品 + ProductBrandBO result = productBrandService.getProductBrand(id); + // 返回结果 + return success(ProductBrandConvert.INSTANCE.convert(result)); + } + + @GetMapping("/page") + @ApiOperation("获得品牌分页") + @ApiImplicitParams({ + @ApiImplicitParam(name = "name", value = "品牌名称", required = true, example = "安踏"), + @ApiImplicitParam(name = "description", value = "品牌描述", required = true, example = "安踏拖鞋"), + @ApiImplicitParam(name = "status", value = "状态 1开启 2禁用", required = true, example = "1"), + @ApiImplicitParam(name = "pageNo", value = "页码", required = true, example = "1"), + @ApiImplicitParam(name = "pageSize", value = "页面大小", required = true, example = "10") + }) + public CommonResult> attrPage(ProductBrandPageRequest pageRequest) { + // 创建 ProductBrandPageDTO 对象 + ProductBrandPageDTO productBrandPageDTO = ProductBrandConvert.INSTANCE.convertPageRequest(pageRequest); + // 查询分页 + PageResult productBrandPage = productBrandService.getProductBrandPage(productBrandPageDTO); + PageResult adminPageResponse = ProductBrandConvert.INSTANCE.convertPage(productBrandPage); + return CommonResult.success(adminPageResponse); + } + + +} diff --git a/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/convert/attr/ProductAttrConvert.java b/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/convert/attr/ProductAttrConvert.java index c6b315c82..0e5e571c5 100644 --- a/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/convert/attr/ProductAttrConvert.java +++ b/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/convert/attr/ProductAttrConvert.java @@ -5,13 +5,13 @@ import cn.iocoder.mall.product.biz.bo.attr.ProductAttrBO; import cn.iocoder.mall.product.biz.bo.attr.ProductAttrSimpleWithValueBO; import cn.iocoder.mall.product.biz.bo.attr.ProductAttrValueBO; import cn.iocoder.mall.product.biz.bo.attr.ProductAttrWithValueBO; -import cn.iocoder.mall.product.biz.dto.attr.AdminProductAttrPageDTO; +import cn.iocoder.mall.product.biz.dto.attr.ProductAttrPageDTO; import cn.iocoder.mall.product.biz.dto.attr.ProductAttrUpdateDTO; -import cn.iocoder.mall.product.rest.request.attr.AdminProductAttrPageRequest; +import cn.iocoder.mall.product.rest.request.attr.ProductAttrPageRequest; import cn.iocoder.mall.product.rest.request.attr.ProductAttrUpdateRequest; import cn.iocoder.mall.product.rest.response.attr.AdminsProductAttrPageResponse; import cn.iocoder.mall.product.rest.response.attr.AdminsProductAttrSimpleResponse; -import cn.iocoder.mall.product.rest.response.attr.AdminsProductAttrVO; +import cn.iocoder.mall.product.rest.response.attr.AdminsProdutAttrResponse; import cn.iocoder.mall.product.rest.response.attr.AdminsProductAttrValueResponse; import org.mapstruct.Mapper; import org.mapstruct.Mappings; @@ -25,7 +25,7 @@ public interface ProductAttrConvert { ProductAttrConvert INSTANCE = Mappers.getMapper(ProductAttrConvert.class); @Mappings({}) - AdminProductAttrPageDTO convert(AdminProductAttrPageRequest bean); + ProductAttrPageDTO convert(ProductAttrPageRequest bean); @Mappings({}) PageResult convertPage(PageResult productAttrPage); @@ -34,7 +34,7 @@ public interface ProductAttrConvert { List convertSimple(List simpleList); @Mappings({}) - AdminsProductAttrVO convertAttr(ProductAttrBO attrBO); + AdminsProdutAttrResponse convertAttr(ProductAttrBO attrBO); @Mappings({}) ProductAttrUpdateDTO convertUpdate(ProductAttrUpdateRequest updateRequest); diff --git a/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/convert/brand/ProductBrandConvert.java b/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/convert/brand/ProductBrandConvert.java new file mode 100644 index 000000000..2110b7537 --- /dev/null +++ b/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/convert/brand/ProductBrandConvert.java @@ -0,0 +1,35 @@ +package cn.iocoder.mall.product.rest.convert.brand; + +import cn.iocoder.common.framework.vo.PageResult; +import cn.iocoder.mall.product.biz.bo.brand.ProductBrandBO; +import cn.iocoder.mall.product.biz.dto.brand.ProductBrandAddDTO; +import cn.iocoder.mall.product.biz.dto.brand.ProductBrandPageDTO; +import cn.iocoder.mall.product.biz.dto.brand.ProductBrandUpdateDTO; +import cn.iocoder.mall.product.rest.request.brand.ProductBrandAddRequest; +import cn.iocoder.mall.product.rest.request.brand.ProductBrandPageRequest; +import cn.iocoder.mall.product.rest.request.brand.ProductBrandUpdateRequest; +import cn.iocoder.mall.product.rest.response.brand.AdminsProductBrandResponse; +import org.mapstruct.Mapper; +import org.mapstruct.Mappings; +import org.mapstruct.factory.Mappers; + +@Mapper +public interface ProductBrandConvert { + + ProductBrandConvert INSTANCE = Mappers.getMapper(ProductBrandConvert.class); + + @Mappings({}) + AdminsProductBrandResponse convert(ProductBrandBO brand); + + @Mappings({}) + ProductBrandAddDTO convertAdd(ProductBrandAddRequest addRequest); + + @Mappings({}) + ProductBrandUpdateDTO convertUpdate(ProductBrandUpdateRequest updateRequest); + + @Mappings({}) + ProductBrandPageDTO convertPageRequest(ProductBrandPageRequest pageRequest); + + @Mappings({}) + PageResult convertPage(PageResult productBrandPage); +} \ No newline at end of file diff --git a/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/attr/ProductAttrAddRequest.java b/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/attr/ProductAttrAddRequest.java index 9ceb12f9a..a155d1f6e 100644 --- a/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/attr/ProductAttrAddRequest.java +++ b/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/attr/ProductAttrAddRequest.java @@ -1,14 +1,13 @@ package cn.iocoder.mall.product.rest.request.attr; +import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.experimental.Accessors; import javax.validation.constraints.NotEmpty; -/** - * 规格添加 - */ +@ApiModel("商品 - 规格模块 - 商品规格添加 Request") @Data @Accessors(chain = true) public class ProductAttrAddRequest { diff --git a/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/attr/AdminProductAttrPageRequest.java b/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/attr/ProductAttrPageRequest.java similarity index 89% rename from product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/attr/AdminProductAttrPageRequest.java rename to product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/attr/ProductAttrPageRequest.java index 7b663875c..fee12d92c 100644 --- a/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/attr/AdminProductAttrPageRequest.java +++ b/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/attr/ProductAttrPageRequest.java @@ -11,7 +11,7 @@ import lombok.experimental.Accessors; @Data @EqualsAndHashCode(callSuper = true) @Accessors(chain = true) -public class AdminProductAttrPageRequest extends PageParam { +public class ProductAttrPageRequest extends PageParam { @ApiModelProperty(value = "商品规格名字,模糊匹配", example = "材料") private String name; diff --git a/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/attr/ProductAttrUpdateRequest.java b/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/attr/ProductAttrUpdateRequest.java index 745a34f5a..b7dad4fde 100644 --- a/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/attr/ProductAttrUpdateRequest.java +++ b/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/attr/ProductAttrUpdateRequest.java @@ -1,5 +1,6 @@ package cn.iocoder.mall.product.rest.request.attr; +import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.experimental.Accessors; @@ -7,9 +8,7 @@ import lombok.experimental.Accessors; import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; -/** - * 规格修改 - */ +@ApiModel("商品 - 规格模块 - 商品规格修改 Request") @Data @Accessors(chain = true) public class ProductAttrUpdateRequest { diff --git a/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/attr/ProductAttrValueAddRequest.java b/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/attr/ProductAttrValueAddRequest.java index 244d8f186..c60d4bc77 100644 --- a/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/attr/ProductAttrValueAddRequest.java +++ b/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/attr/ProductAttrValueAddRequest.java @@ -1,5 +1,6 @@ package cn.iocoder.mall.product.rest.request.attr; +import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.experimental.Accessors; @@ -7,9 +8,7 @@ import lombok.experimental.Accessors; import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; -/** - * Product 规格值添加 DTO - */ +@ApiModel("商品 - 规格模块 - 商品规格值添加 Request") @Data @Accessors(chain = true) public class ProductAttrValueAddRequest { diff --git a/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/attr/ProductAttrValueUpdateRequest.java b/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/attr/ProductAttrValueUpdateRequest.java index e2cabaa85..a12bc81fc 100644 --- a/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/attr/ProductAttrValueUpdateRequest.java +++ b/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/attr/ProductAttrValueUpdateRequest.java @@ -1,5 +1,6 @@ package cn.iocoder.mall.product.rest.request.attr; +import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.experimental.Accessors; @@ -12,6 +13,7 @@ import javax.validation.constraints.NotNull; *

* 注意,不允许修改所属规格 */ +@ApiModel("商品 - 规格模块 - 商品规格值修改 Request") @Data @Accessors(chain = true) public class ProductAttrValueUpdateRequest { diff --git a/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/brand/ProductBrandAddRequest.java b/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/brand/ProductBrandAddRequest.java new file mode 100644 index 000000000..6eea75ccc --- /dev/null +++ b/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/brand/ProductBrandAddRequest.java @@ -0,0 +1,27 @@ +package cn.iocoder.mall.product.rest.request.brand; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import javax.validation.constraints.NotEmpty; + +@ApiModel("商品 - 品牌模块 - 商品品牌新增 Request") +@Data +@Accessors(chain = true) +public class ProductBrandAddRequest { + + @ApiModelProperty(name = "name", value = "品牌名称", required = true, example = "安踏") + @NotEmpty(message = "品牌名称不能为空") + private String name; + + @ApiModelProperty(name = "description", value = "品牌描述", required = true, example = "安踏拖鞋") + private String description; + + @ApiModelProperty(name = "picUrl", value = "品牌图片", required = true, example = "http://www.iocoder.cn") + private String picUrl; + + @ApiModelProperty(name = "status", value = "状态 1开启 2禁用", required = true, example = "1") + private Integer status; +} diff --git a/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/brand/ProductBrandPageRequest.java b/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/brand/ProductBrandPageRequest.java new file mode 100644 index 000000000..24c038f62 --- /dev/null +++ b/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/brand/ProductBrandPageRequest.java @@ -0,0 +1,24 @@ +package cn.iocoder.mall.product.rest.request.brand; + +import cn.iocoder.common.framework.vo.PageParam; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +@ApiModel("商品 - 品牌模块 - 品牌分页 Request") +@Data +@EqualsAndHashCode(callSuper = true) +@Accessors(chain = true) +public class ProductBrandPageRequest extends PageParam { + + @ApiModelProperty(name = "name", value = "品牌名称", required = true, example = "安踏") + private String name; + + @ApiModelProperty(name = "name", value = "品牌描述", required = true, example = "安踏拖鞋") + private String description; + + @ApiModelProperty(name = "name", value = "状态 1开启 2禁用", required = true, example = "1") + private String status; +} diff --git a/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/brand/ProductBrandUpdateRequest.java b/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/brand/ProductBrandUpdateRequest.java new file mode 100644 index 000000000..de429c720 --- /dev/null +++ b/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/brand/ProductBrandUpdateRequest.java @@ -0,0 +1,32 @@ +package cn.iocoder.mall.product.rest.request.brand; + +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; + +@ApiModel("商品 - 品牌模块 - 商品品牌更新 Request") +@Data +@Accessors(chain = true) +public class ProductBrandUpdateRequest { + + @ApiModelProperty(name = "id", value = "规格编号", required = true, example = "1") + @NotNull(message = "品牌编号不能为空") + private Integer id; + + @ApiModelProperty(name = "name", value = "品牌名称", required = true, example = "安踏") + @NotEmpty(message = "品牌名称不能为空") + private String name; + + @ApiModelProperty(name = "description", value = "品牌描述", required = true, example = "安踏拖鞋") + private String description; + + @ApiModelProperty(name = "picUrl", value = "品牌图片", required = true, example = "http://www.iocoder.cn") + private String picUrl; + + @ApiModelProperty(name = "status", value = "状态 1开启 2禁用", required = true, example = "1") + private Integer status; +} diff --git a/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/response/attr/AdminsProductAttrVO.java b/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/response/attr/AdminsProductAttrVO.java deleted file mode 100644 index 5d62ffb7f..000000000 --- a/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/response/attr/AdminsProductAttrVO.java +++ /dev/null @@ -1,24 +0,0 @@ -package cn.iocoder.mall.product.rest.response.attr; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import lombok.experimental.Accessors; - -import java.util.Date; - -@ApiModel(value = "商品规格 VO", description = "不带有规格值数组") -@Data -@Accessors(chain = true) -public class AdminsProductAttrVO { - - @ApiModelProperty(value = "规格编号", required = true, example = "1") - private Integer id; - @ApiModelProperty(value = "规格名", required = true, example = "颜色") - private String name; - @ApiModelProperty(value = "状态", required = true, example = "1") - private Integer status; - @ApiModelProperty(value = "创建时间", required = true, example = "时间戳") - private Date createTime; - -} diff --git a/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/response/attr/AdminsProdutAttrResponse.java b/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/response/attr/AdminsProdutAttrResponse.java index 3ca9c3330..04d7f6e08 100644 --- a/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/response/attr/AdminsProdutAttrResponse.java +++ b/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/response/attr/AdminsProdutAttrResponse.java @@ -1,4 +1,24 @@ package cn.iocoder.mall.product.rest.response.attr; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.util.Date; + +@ApiModel(value = "商品规格 VO", description = "不带有规格值数组") +@Data +@Accessors(chain = true) public class AdminsProdutAttrResponse { + + @ApiModelProperty(value = "规格编号", required = true, example = "1") + private Integer id; + @ApiModelProperty(value = "规格名", required = true, example = "颜色") + private String name; + @ApiModelProperty(value = "状态", required = true, example = "1") + private Integer status; + @ApiModelProperty(value = "创建时间", required = true, example = "时间戳") + private Date createTime; + } diff --git a/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/response/brand/AdminsProductBrandResponse.java b/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/response/brand/AdminsProductBrandResponse.java new file mode 100644 index 000000000..fad12f1c5 --- /dev/null +++ b/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/response/brand/AdminsProductBrandResponse.java @@ -0,0 +1,36 @@ +package cn.iocoder.mall.product.rest.response.brand; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import javax.validation.constraints.NotEmpty; + +/** + * VO + */ +@ApiModel(value = "商品品牌", description = "商品品牌") +@Data +@Accessors(chain = true) +public class AdminsProductBrandResponse { + /** + * 规格编号 + */ + @ApiModelProperty(value = "品牌编号", required = true, example = "1") + private Integer id; + + @ApiModelProperty(name = "name", value = "品牌名称", required = true, example = "安踏") + @NotEmpty(message = "品牌名称不能为空") + private String name; + + @ApiModelProperty(name = "description", value = "品牌描述", required = true, example = "安踏拖鞋") + private String description; + + @ApiModelProperty(name = "picUrl", value = "品牌图片", required = true, example = "http://www.iocoder.cn") + private String picUrl; + + @ApiModelProperty(name = "status", value = "状态 1开启 2禁用", required = true, example = "1") + private Integer status; + +} From b227928135a20a780a762abd03d8ccfbca02b39a Mon Sep 17 00:00:00 2001 From: YunaiV <> Date: Mon, 11 May 2020 19:25:50 +0800 Subject: [PATCH 07/10] =?UTF-8?q?=E5=95=86=E5=93=81=E5=88=86=E7=B1=BB?= =?UTF-8?q?=EF=BC=8C=E4=BB=A3=E7=A0=81=20REVIEW=20=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/iocoder/mall/order/application/OrderApplication.java | 1 + .../mall/product/biz/bo/category/ProductCategoryBO.java | 3 +-- .../product/biz/dto/category/ProductCategoryAddDTO.java | 1 - .../service/product/impl/ProductCategoryServiceImpl.java | 6 +++--- .../request/category/AdminsProductCategoryAddRequest.java | 1 - .../mall/user/biz/dataobject/user/UsersUserAddressDO.java | 1 + .../mall/user/biz/dto/user/UserAddressUpdateDTO.java | 1 + .../rest/controller/user/UsersUserAddressController.java | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/order/order-application/src/main/java/cn/iocoder/mall/order/application/OrderApplication.java b/order/order-application/src/main/java/cn/iocoder/mall/order/application/OrderApplication.java index ed0d910a0..5187d889e 100644 --- a/order/order-application/src/main/java/cn/iocoder/mall/order/application/OrderApplication.java +++ b/order/order-application/src/main/java/cn/iocoder/mall/order/application/OrderApplication.java @@ -35,6 +35,7 @@ public class OrderApplication { * @return */ @Bean + // TODO FROM 芋艿 to 芋艿:这个不太了解,可能后续要放到 starter 里,统一处理。 public ConfigurableServletWebServerFactory webServerFactory() { TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory(); factory.addConnectorCustomizers(new TomcatConnectorCustomizer() { diff --git a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/bo/category/ProductCategoryBO.java b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/bo/category/ProductCategoryBO.java index 1b918d4ab..556d42248 100644 --- a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/bo/category/ProductCategoryBO.java +++ b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/bo/category/ProductCategoryBO.java @@ -2,7 +2,7 @@ package cn.iocoder.mall.product.biz.bo.category; import lombok.Data; import lombok.experimental.Accessors; -import java.io.Serializable; + import java.util.Date; /** @@ -12,7 +12,6 @@ import java.util.Date; */ @Data @Accessors(chain = true) -// TODO FROM 芋艿 to 伟帆,BO 可以不加 Serializable 接口,因为没序列化的诉求哈。一般 BO 可以创建一个统一的 ProductCategory,可以把 ProductCategoryAllListBO 合并过来 [DONE] public class ProductCategoryBO { /** diff --git a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/category/ProductCategoryAddDTO.java b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/category/ProductCategoryAddDTO.java index 8d0a8f389..f997a9655 100644 --- a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/category/ProductCategoryAddDTO.java +++ b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/category/ProductCategoryAddDTO.java @@ -17,7 +17,6 @@ public class ProductCategoryAddDTO { /** * 管理员id */ - // TODO FROM 芋艿 to 伟帆:传入 Service 的,要加下 Validation 的注解,虽然 Controller 那也添加了 Validation,但是相比来说,Service 更应该被保护,嘿嘿。因为一些时候,Service 也会被别人所调用,所以要保护好自己。[DONE] @NotNull(message = "管理员id不能为空") private Integer adminId; diff --git a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/service/product/impl/ProductCategoryServiceImpl.java b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/service/product/impl/ProductCategoryServiceImpl.java index 6a9e63cab..deedebddc 100644 --- a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/service/product/impl/ProductCategoryServiceImpl.java +++ b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/service/product/impl/ProductCategoryServiceImpl.java @@ -16,11 +16,12 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; -import static cn.iocoder.mall.product.biz.enums.ProductErrorCodeEnum.*; -import javax.validation.Valid; + import java.util.Date; import java.util.List; +import static cn.iocoder.mall.product.biz.enums.ProductErrorCodeEnum.*; + /** * @Author: jiangweifan * @Date: 2020/5/6 @@ -166,7 +167,6 @@ public class ProductCategoryServiceImpl implements ProductCategoryService { } // 父分类必须是一级分类 if (!ProductCategoryConstants.PID_ROOT.equals(parentCategory.getPid())) { - // TODO FROM 芋艿 to 伟帆,ProductErrorCodeEnum 去实现下 ServiceExceptionUtil.Enumerable 接口,酱紫就不用 .getCode() 方法,代码会更简洁。同时,可以把 ProductErrorCodeEnum static import 下,[DONE] throw ServiceExceptionUtil.exception(PRODUCT_CATEGORY_PARENT_CAN_NOT_BE_LEVEL2); } } diff --git a/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/category/AdminsProductCategoryAddRequest.java b/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/category/AdminsProductCategoryAddRequest.java index 6b25daf69..367032123 100644 --- a/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/category/AdminsProductCategoryAddRequest.java +++ b/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/category/AdminsProductCategoryAddRequest.java @@ -17,7 +17,6 @@ import javax.validation.constraints.NotNull; @Accessors(chain = true) public class AdminsProductCategoryAddRequest { - // TODO FROM 芋艿 to 伟帆:写了 swagger 注解,我们可以少写一份 Java 注释。[DONE] @ApiModelProperty(name = "pid", value = "父级分类编号", required = true, example = "1") @NotNull(message = "父分类编号不能为空") private Integer pid; diff --git a/user/user-biz/src/main/java/cn/iocoder/mall/user/biz/dataobject/user/UsersUserAddressDO.java b/user/user-biz/src/main/java/cn/iocoder/mall/user/biz/dataobject/user/UsersUserAddressDO.java index 3b49d0e9a..decc62027 100644 --- a/user/user-biz/src/main/java/cn/iocoder/mall/user/biz/dataobject/user/UsersUserAddressDO.java +++ b/user/user-biz/src/main/java/cn/iocoder/mall/user/biz/dataobject/user/UsersUserAddressDO.java @@ -11,6 +11,7 @@ import lombok.experimental.Accessors; * @time 2019-04-06 13:22 */ @Data +// TODO FROM 芋艿 to 小范:如果继承了,需要添加 @EqualsAndHashCode(callSuper = true) 注解 @Accessors(chain = true) public class UsersUserAddressDO extends DeletableDO { diff --git a/user/user-biz/src/main/java/cn/iocoder/mall/user/biz/dto/user/UserAddressUpdateDTO.java b/user/user-biz/src/main/java/cn/iocoder/mall/user/biz/dto/user/UserAddressUpdateDTO.java index f793d3de6..6144b31cf 100644 --- a/user/user-biz/src/main/java/cn/iocoder/mall/user/biz/dto/user/UserAddressUpdateDTO.java +++ b/user/user-biz/src/main/java/cn/iocoder/mall/user/biz/dto/user/UserAddressUpdateDTO.java @@ -13,6 +13,7 @@ import java.io.Serializable; */ @Data @Accessors(chain = true) +// TODO FROM 芋艿 to 小范:service 要做 validation 哈。其它同理 public class UserAddressUpdateDTO implements Serializable { /** diff --git a/user/user-rest/src/main/java/cn/iocoder/mall/user/rest/controller/user/UsersUserAddressController.java b/user/user-rest/src/main/java/cn/iocoder/mall/user/rest/controller/user/UsersUserAddressController.java index 8231dca7a..65d19c730 100644 --- a/user/user-rest/src/main/java/cn/iocoder/mall/user/rest/controller/user/UsersUserAddressController.java +++ b/user/user-rest/src/main/java/cn/iocoder/mall/user/rest/controller/user/UsersUserAddressController.java @@ -24,7 +24,7 @@ import java.util.List; * time: 2020/5/8 9:50 */ @RestController -@Api(tags = "用户地址(user API)") +@Api(tags = "用户地址(user API)") // TODO FROM 芋艿 to 小范:"管理员 - 管理员 API" 按照类似酱紫的格式哈。= = 虽然我也没想太好格式。 @RequestMapping("/users/user-address") public class UsersUserAddressController { From b45739d1515ad213fadde13f36f8f316ab619f49 Mon Sep 17 00:00:00 2001 From: YunaiV <> Date: Mon, 11 May 2020 21:45:16 +0800 Subject: [PATCH 08/10] =?UTF-8?q?=E9=94=99=E8=AF=AF=E7=A0=81=E6=A8=A1?= =?UTF-8?q?=E5=9D=97=EF=BC=8C=E4=BB=A3=E7=A0=81=20REVIEW?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../rest/request/users/OrderReturnApplyRequest.java | 9 ++++++--- .../system/biz/config/ServiceExceptionConfiguration.java | 1 + .../system/biz/dataobject/errorcode/ErrorCodeDO.java | 4 ++++ .../system/biz/dto/errorcode/ErrorCodeUpdateDTO.java | 1 + .../biz/service/errorcode/ErrorCodeServiceImpl.java | 7 ++++++- .../controller/errorCode/SystemErrorCodeController.java | 4 ++-- .../rest/request/errorcode/ErrorCodePageRequest.java | 3 +++ 7 files changed, 23 insertions(+), 6 deletions(-) diff --git a/order/order-rest/src/main/java/cn/iocoder/mall/order/rest/request/users/OrderReturnApplyRequest.java b/order/order-rest/src/main/java/cn/iocoder/mall/order/rest/request/users/OrderReturnApplyRequest.java index a34c2455c..adbbf143c 100644 --- a/order/order-rest/src/main/java/cn/iocoder/mall/order/rest/request/users/OrderReturnApplyRequest.java +++ b/order/order-rest/src/main/java/cn/iocoder/mall/order/rest/request/users/OrderReturnApplyRequest.java @@ -1,11 +1,12 @@ package cn.iocoder.mall.order.rest.request.users; -import java.io.Serializable; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; import lombok.Data; import lombok.experimental.Accessors; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; +import java.io.Serializable; + /** * 订单售后 * @@ -26,6 +27,8 @@ public class OrderReturnApplyRequest implements Serializable { * * - 1、退货退款 * - 2、退款 + * + * / TODO FROM 芋艿 to xiaofeng:可以瞅瞅 @InEnum 注解,直接校验退货类型 */ @NotNull(message = "退货类型不能为空!") private Integer returnType; diff --git a/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/config/ServiceExceptionConfiguration.java b/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/config/ServiceExceptionConfiguration.java index 7f1433e2f..50400ee5b 100644 --- a/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/config/ServiceExceptionConfiguration.java +++ b/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/config/ServiceExceptionConfiguration.java @@ -14,6 +14,7 @@ import java.util.List; @Configuration public class ServiceExceptionConfiguration { + // TODO FROM 芋艿 to 鱿鱼须:这块的实现,微信一起沟通下哈。大体是说,要调用 RPC 接口,不然别的模块无法使用哟。最终,我们是要做成 starter,提供给各个模块用。 @Autowired private ErrorCodeService errorCodeService; diff --git a/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dataobject/errorcode/ErrorCodeDO.java b/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dataobject/errorcode/ErrorCodeDO.java index 055996696..0ce8e3ce7 100644 --- a/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dataobject/errorcode/ErrorCodeDO.java +++ b/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dataobject/errorcode/ErrorCodeDO.java @@ -30,4 +30,8 @@ public class ErrorCodeDO extends DeletableDO { * 错误码类型 */ private Integer type; + + // TODO FROM 芋艿 to 鱿鱼丝:增加一个分组字段。方便做归类 + // TODO FROM 芋艿 to 鱿鱼丝:增加个备注字段,方便做备注哈。 + } diff --git a/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dto/errorcode/ErrorCodeUpdateDTO.java b/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dto/errorcode/ErrorCodeUpdateDTO.java index 9cca65e27..f26ee519b 100644 --- a/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dto/errorcode/ErrorCodeUpdateDTO.java +++ b/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/dto/errorcode/ErrorCodeUpdateDTO.java @@ -16,6 +16,7 @@ public class ErrorCodeUpdateDTO { /** * 错误码编号,内置错误码的id是没有的 */ + // TODO FROM 芋艿 to 鱿鱼丝:必要的参数校验噢 private Integer id; @NotNull(message = "错误码编码不能为空") diff --git a/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/errorcode/ErrorCodeServiceImpl.java b/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/errorcode/ErrorCodeServiceImpl.java index c30ff3c0a..192ea11ff 100644 --- a/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/errorcode/ErrorCodeServiceImpl.java +++ b/system/system-biz/src/main/java/cn/iocoder/mall/system/biz/service/errorcode/ErrorCodeServiceImpl.java @@ -37,6 +37,7 @@ public class ErrorCodeServiceImpl implements ErrorCodeService { @Override public List getErrorCodeList() { + // TODO FROM 芋艿 to 鱿鱼丝:QueryWrapperX 只存在 mapper 里,不直接体现在 Service List list = errorCodeMapper.selectList(new QueryWrapperX()); return ErrorCodeConvert.INSTANCE.convertList(list); } @@ -44,6 +45,7 @@ public class ErrorCodeServiceImpl implements ErrorCodeService { @Override public List getErrorCodeListAll() { List list = errorCodeMapper.selectList(new QueryWrapperX()); + // TODO FROM 芋艿 to 鱿鱼丝:这块微信交流一波哈。 for (SystemErrorCodeEnum item : SystemErrorCodeEnum.values()) { list.add(new ErrorCodeDO().setId(0).setCode(item.getCode()). setMessage(item.getMessage()).setType(ErrorCodeTypeEnum.SYSTEM.getType())); @@ -103,6 +105,7 @@ public class ErrorCodeServiceImpl implements ErrorCodeService { if (errorCodeDO == null) { throw ServiceExceptionUtil.exception(SystemErrorCodeEnum.ERROR_CODE_NOT_EXISTS); } + // TODO FROM 芋艿 to 鱿鱼丝:不能删除内置错误码 // 更新到数据库,标记删除 errorCodeMapper.deleteById(errorCodeDO.getId()); // TODO: 2020-05-10 刷新对外提供的错误码列表 @@ -125,13 +128,15 @@ public class ErrorCodeServiceImpl implements ErrorCodeService { } private PageResult listToPageList(int currentPage, int rows, List list){ + // TODO FROM 芋艿 to 鱿鱼须:可以直接使用数据库分页哇 currentPage = currentPage * rows; - Integer sum = list.size(); + Integer sum = list.size(); // TODO FROM 芋艿 to 鱿鱼须:这里 int 就可以啦。一般情况下,如果 IDEA 提示警告,要尽量去掉噢。 if (currentPage + rows > sum){ list = list.subList(currentPage, sum); }else { list = list.subList(currentPage, currentPage + rows); } + // TODO FROM 芋艿 to 鱿鱼丝:泛型噢 return new PageResult().setList(list).setTotal(sum); } } diff --git a/system/system-rest/src/main/java/cn/iocoder/mall/system/rest/controller/errorCode/SystemErrorCodeController.java b/system/system-rest/src/main/java/cn/iocoder/mall/system/rest/controller/errorCode/SystemErrorCodeController.java index 863b60fcf..4023f36b7 100644 --- a/system/system-rest/src/main/java/cn/iocoder/mall/system/rest/controller/errorCode/SystemErrorCodeController.java +++ b/system/system-rest/src/main/java/cn/iocoder/mall/system/rest/controller/errorCode/SystemErrorCodeController.java @@ -27,9 +27,9 @@ import org.springframework.web.bind.annotation.*; * @author youyusi */ @RestController -@RequestMapping(MallConstants.ROOT_PATH_ADMIN + "/errorcode") +@RequestMapping(MallConstants.ROOT_PATH_ADMIN + "/errorcode") // TODO FROM 芋艿 to 鱿鱼须:error-code @Api("错误码") -public class SystemErrorCodeController { +public class SystemErrorCodeController { // TODO FROM 芋艿 to 鱿鱼须:变量要空行 @Autowired private ErrorCodeService errorCodeService; diff --git a/system/system-rest/src/main/java/cn/iocoder/mall/system/rest/request/errorcode/ErrorCodePageRequest.java b/system/system-rest/src/main/java/cn/iocoder/mall/system/rest/request/errorcode/ErrorCodePageRequest.java index 17ef20468..6383207e6 100644 --- a/system/system-rest/src/main/java/cn/iocoder/mall/system/rest/request/errorcode/ErrorCodePageRequest.java +++ b/system/system-rest/src/main/java/cn/iocoder/mall/system/rest/request/errorcode/ErrorCodePageRequest.java @@ -12,4 +12,7 @@ import lombok.experimental.Accessors; @Data @Accessors(chain = true) public class ErrorCodePageRequest { + + // TODO FROM 芋艿 to 鱿鱼须:分页参数? + // TODO FROM 芋艿 to 鱿鱼须:对于 rest 的接口,要区分下是给 Admins 管理员还是 Users 用户的 } From a8bc6754c248e6fde19fea8c8ebb4f4649f371f6 Mon Sep 17 00:00:00 2001 From: YunaiV <> Date: Mon, 11 May 2020 21:55:53 +0800 Subject: [PATCH 09/10] =?UTF-8?q?=E5=95=86=E5=93=81=E5=93=81=E7=89=9B?= =?UTF-8?q?=E6=8E=92=E5=92=8C=E8=A7=84=E6=A0=BC=EF=BC=8C=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=20REVIEW?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mall/product/biz/dao/product/ProductBrandMapper.java | 3 ++- .../rest/controller/admins/AdminsProductBrandController.java | 4 +++- .../product/rest/controller/users/UserFavoriteController.java | 1 + .../cn/iocoder/mall/user/biz/enums/UserErrorCodeEnum.java | 1 + 4 files changed, 7 insertions(+), 2 deletions(-) diff --git a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dao/product/ProductBrandMapper.java b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dao/product/ProductBrandMapper.java index f83f77c20..775503d7e 100644 --- a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dao/product/ProductBrandMapper.java +++ b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dao/product/ProductBrandMapper.java @@ -13,6 +13,7 @@ import org.springframework.stereotype.Repository; @Repository public interface ProductBrandMapper extends BaseMapper { + // TODO FROM 芋艿 to q2118cs:selectPageByParams default IPage selectListByParams(ProductBrandPageDTO productBrandPageDTO) { Page page = new Page<>(productBrandPageDTO.getPageNo(), productBrandPageDTO.getPageSize()); LambdaQueryWrapper queryWrapper = Wrappers.query().lambda() @@ -22,4 +23,4 @@ public interface ProductBrandMapper extends BaseMapper { .eq(ProductBrandDO::getDeleted, false); return selectPage(page, queryWrapper); } -} \ No newline at end of file +} diff --git a/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/controller/admins/AdminsProductBrandController.java b/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/controller/admins/AdminsProductBrandController.java index 8a31cd681..a430483d8 100644 --- a/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/controller/admins/AdminsProductBrandController.java +++ b/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/controller/admins/AdminsProductBrandController.java @@ -24,9 +24,10 @@ import static cn.iocoder.common.framework.vo.CommonResult.success; @RestController @RequestMapping("admins/brand") -@Api("商品品牌") +@Api("商品品牌") // TODO FROM 芋艿 to q2118cs:管理员 - 商品品牌 API。。哈哈哈,原来没规范 public class AdminsProductBrandController { + // TODO FROM 芋艿 to q2118cs:貌似没注入哈 private ProductBrandService productBrandService; @PostMapping("/add") @@ -49,6 +50,7 @@ public class AdminsProductBrandController { @ApiImplicitParam(name = "picUrl", value = "品牌图片", required = true, example = "http://www.iocoder.cn"), @ApiImplicitParam(name = "status", value = "状态 1开启 2禁用", required = true, example = "1") }) + // TODO FROM 芋艿 to q2118cs:只要改成了 bean 接收,就不用在写 @ApiImplicitParam 注解啦,直接在 bean 里写就 ok 啦 public CommonResult update(@Validated ProductBrandUpdateRequest updateRequest) { // 创建 productBrandUpdateDTO 对象 ProductBrandUpdateDTO productBrandUpdateDTO = ProductBrandConvert.INSTANCE.convertUpdate(updateRequest); diff --git a/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/controller/users/UserFavoriteController.java b/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/controller/users/UserFavoriteController.java index 6f5ba4993..99dde8ee2 100644 --- a/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/controller/users/UserFavoriteController.java +++ b/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/controller/users/UserFavoriteController.java @@ -13,6 +13,7 @@ import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("users/favorite") @Api("用户收藏") +// TODO FROM 芋艿 to ilnhj:controller 分包的话,还是按照模块。然后通过 Admins 和 Users 前缀,区分不同的 Controlller public class UserFavoriteController { } diff --git a/user/user-biz/src/main/java/cn/iocoder/mall/user/biz/enums/UserErrorCodeEnum.java b/user/user-biz/src/main/java/cn/iocoder/mall/user/biz/enums/UserErrorCodeEnum.java index a4f88e56e..ff65e7005 100644 --- a/user/user-biz/src/main/java/cn/iocoder/mall/user/biz/enums/UserErrorCodeEnum.java +++ b/user/user-biz/src/main/java/cn/iocoder/mall/user/biz/enums/UserErrorCodeEnum.java @@ -15,6 +15,7 @@ public enum UserErrorCodeEnum implements ServiceExceptionUtil.Enumerable { USER_GET_ADDRESS_NOT_EXISTS(1001004002, "获取的地址不存在!"), // ========== 用户 ========== + // TODO FROM 芋艿 to linhj:是不是提示不对呀 USER_NOT_EXISTS(1001004003, "获取的地址不存在!"), ; From 23251cb18765709aac84bba9b727a1ade7eccfde Mon Sep 17 00:00:00 2001 From: sunderui Date: Mon, 11 May 2020 22:06:36 +0800 Subject: [PATCH 10/10] review--->edit --- .../mall/product/biz/dao/product/ProductBrandMapper.java | 3 +-- .../biz/service/product/impl/ProductBrandServiceImpl.java | 2 +- .../controller/admins/AdminsProductBrandController.java | 7 ++++--- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dao/product/ProductBrandMapper.java b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dao/product/ProductBrandMapper.java index 775503d7e..09c402ed3 100644 --- a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dao/product/ProductBrandMapper.java +++ b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dao/product/ProductBrandMapper.java @@ -13,8 +13,7 @@ import org.springframework.stereotype.Repository; @Repository public interface ProductBrandMapper extends BaseMapper { - // TODO FROM 芋艿 to q2118cs:selectPageByParams - default IPage selectListByParams(ProductBrandPageDTO productBrandPageDTO) { + default IPage selectPageByParams(ProductBrandPageDTO productBrandPageDTO) { Page page = new Page<>(productBrandPageDTO.getPageNo(), productBrandPageDTO.getPageSize()); LambdaQueryWrapper queryWrapper = Wrappers.query().lambda() .like(StringUtils.isNotBlank(productBrandPageDTO.getName()), ProductBrandDO::getName, productBrandPageDTO.getName()) diff --git a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/service/product/impl/ProductBrandServiceImpl.java b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/service/product/impl/ProductBrandServiceImpl.java index 404fd843c..fd97831e7 100644 --- a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/service/product/impl/ProductBrandServiceImpl.java +++ b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/service/product/impl/ProductBrandServiceImpl.java @@ -32,7 +32,7 @@ public class ProductBrandServiceImpl implements ProductBrandService { @Override public PageResult getProductBrandPage(ProductBrandPageDTO productBrandPageDTO) { - IPage brandPage = productBrandMapper.selectListByParams(productBrandPageDTO); + IPage brandPage = productBrandMapper.selectPageByParams(productBrandPageDTO); return ProductBrandConvert.INSTANCE.convertPage(brandPage); } diff --git a/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/controller/admins/AdminsProductBrandController.java b/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/controller/admins/AdminsProductBrandController.java index a430483d8..413034f90 100644 --- a/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/controller/admins/AdminsProductBrandController.java +++ b/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/controller/admins/AdminsProductBrandController.java @@ -17,6 +17,7 @@ import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import lombok.AllArgsConstructor; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -24,11 +25,11 @@ import static cn.iocoder.common.framework.vo.CommonResult.success; @RestController @RequestMapping("admins/brand") -@Api("商品品牌") // TODO FROM 芋艿 to q2118cs:管理员 - 商品品牌 API。。哈哈哈,原来没规范 +@Api("管理员 - 商品品牌 API") +@AllArgsConstructor public class AdminsProductBrandController { - // TODO FROM 芋艿 to q2118cs:貌似没注入哈 - private ProductBrandService productBrandService; + private final ProductBrandService productBrandService; @PostMapping("/add") @ApiOperation("创建品牌")