From e0edc2d2d953c915bf6e33f56d99b4baa7263df2 Mon Sep 17 00:00:00 2001 From: YunaiV <> Date: Fri, 24 Jul 2020 09:12:38 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E4=BF=AE=E6=94=B9=20address=20=E6=8F=90?= =?UTF-8?q?=E4=BA=A4=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../address/dto/UserAddressCreateReqDTO.java | 16 ++-------- .../rpc/address/dto/UserAddressRespDTO.java | 12 ++------ .../address/dto/UserAddressUpdateReqDTO.java | 16 ++-------- .../dataobject/address/UserAddressDO.java | 12 ++------ .../mapper/address/UserAddressMapper.java | 2 +- .../service/address/bo/UserAddressBO.java | 20 ++----------- .../address/bo/UserAddressCreateBO.java | 16 ++-------- .../address/bo/UserAddressUpdateBO.java | 16 ++-------- .../src/main/resources/application.yaml | 2 ++ .../address/UserAddressController.java | 7 ++--- .../address/vo/UserAddressCreateReqVO.java | 10 ++----- .../address/vo/UserAddressRespVO.java | 30 ++++++++----------- .../address/vo/UserAddressUpdateReqVO.java | 12 ++------ .../manager/address/UserAddressManager.java | 7 ++--- .../src/main/resources/application.yml | 2 ++ 15 files changed, 46 insertions(+), 134 deletions(-) diff --git a/user-service-project/user-service-api/src/main/java/cn/iocoder/mall/userservice/rpc/address/dto/UserAddressCreateReqDTO.java b/user-service-project/user-service-api/src/main/java/cn/iocoder/mall/userservice/rpc/address/dto/UserAddressCreateReqDTO.java index c5cb42cf2..0698e1216 100644 --- a/user-service-project/user-service-api/src/main/java/cn/iocoder/mall/userservice/rpc/address/dto/UserAddressCreateReqDTO.java +++ b/user-service-project/user-service-api/src/main/java/cn/iocoder/mall/userservice/rpc/address/dto/UserAddressCreateReqDTO.java @@ -30,20 +30,10 @@ public class UserAddressCreateReqDTO implements Serializable { @NotEmpty(message = "手机号不能为空") private String mobile; /** - * 省份编号 + * 地区编码 */ - @NotNull(message = "省份编号不能为空") - private Integer provinceCode; - /** - * 城市编号 - */ - @NotNull(message = "城市编号不能为空") - private Integer cityCode; - /** - * 区域编号 - */ - @NotNull(message = "区域编号不能为空") - private Integer countyCode; + @NotNull(message = "地区编码不能为空") + private Integer areaCode; /** * 收件详细地址 */ diff --git a/user-service-project/user-service-api/src/main/java/cn/iocoder/mall/userservice/rpc/address/dto/UserAddressRespDTO.java b/user-service-project/user-service-api/src/main/java/cn/iocoder/mall/userservice/rpc/address/dto/UserAddressRespDTO.java index 93c5b95fd..2668fcffb 100644 --- a/user-service-project/user-service-api/src/main/java/cn/iocoder/mall/userservice/rpc/address/dto/UserAddressRespDTO.java +++ b/user-service-project/user-service-api/src/main/java/cn/iocoder/mall/userservice/rpc/address/dto/UserAddressRespDTO.java @@ -30,17 +30,9 @@ public class UserAddressRespDTO implements Serializable { */ private String mobile; /** - * 省份编号 + * 地区编码 */ - private Integer provinceCode; - /** - * 城市编号 - */ - private Integer cityCode; - /** - * 区域编号 - */ - private Integer countyCode; + private Integer areaCode; /** * 收件详细地址 */ diff --git a/user-service-project/user-service-api/src/main/java/cn/iocoder/mall/userservice/rpc/address/dto/UserAddressUpdateReqDTO.java b/user-service-project/user-service-api/src/main/java/cn/iocoder/mall/userservice/rpc/address/dto/UserAddressUpdateReqDTO.java index 5ff0b9865..212a4a81b 100644 --- a/user-service-project/user-service-api/src/main/java/cn/iocoder/mall/userservice/rpc/address/dto/UserAddressUpdateReqDTO.java +++ b/user-service-project/user-service-api/src/main/java/cn/iocoder/mall/userservice/rpc/address/dto/UserAddressUpdateReqDTO.java @@ -41,20 +41,10 @@ public class UserAddressUpdateReqDTO implements Serializable { @Mobile private String mobile; /** - * 省份编号 + * 地区编码 */ - @NotNull(message = "省份编号不能为空") - private Integer provinceCode; - /** - * 城市编号 - */ - @NotNull(message = "城市编号不能为空") - private Integer cityCode; - /** - * 区域编号 - */ - @NotNull(message = "区域编号不能为空") - private Integer countyCode; + @NotNull(message = "地区编码不能为空") + private Integer areaCode; /** * 收件详细地址 */ diff --git a/user-service-project/user-service-app/src/main/java/cn/iocoder/mall/userservice/dal/mysql/dataobject/address/UserAddressDO.java b/user-service-project/user-service-app/src/main/java/cn/iocoder/mall/userservice/dal/mysql/dataobject/address/UserAddressDO.java index eb24f7be1..47a5ece8f 100644 --- a/user-service-project/user-service-app/src/main/java/cn/iocoder/mall/userservice/dal/mysql/dataobject/address/UserAddressDO.java +++ b/user-service-project/user-service-app/src/main/java/cn/iocoder/mall/userservice/dal/mysql/dataobject/address/UserAddressDO.java @@ -38,17 +38,9 @@ public class UserAddressDO extends DeletableDO { */ private String mobile; /** - * 省份编号 + * 地区编码 */ - private Integer provinceCode; - /** - * 城市编号 - */ - private Integer cityCode; - /** - * 区域编号 - */ - private Integer countyCode; + private Integer areaCode; /** * 收件详细地址 */ diff --git a/user-service-project/user-service-app/src/main/java/cn/iocoder/mall/userservice/dal/mysql/mapper/address/UserAddressMapper.java b/user-service-project/user-service-app/src/main/java/cn/iocoder/mall/userservice/dal/mysql/mapper/address/UserAddressMapper.java index c67b9cedf..83dbff4a7 100644 --- a/user-service-project/user-service-app/src/main/java/cn/iocoder/mall/userservice/dal/mysql/mapper/address/UserAddressMapper.java +++ b/user-service-project/user-service-app/src/main/java/cn/iocoder/mall/userservice/dal/mysql/mapper/address/UserAddressMapper.java @@ -12,7 +12,7 @@ import java.util.List; public interface UserAddressMapper extends BaseMapper { default List selectListByUserIdAndType(Integer userId, @Nullable Integer type) { - return selectList(new QueryWrapperX().eq("userId", userId) + return selectList(new QueryWrapperX().eq("user_id", userId) .eqIfPresent("type", type)); } diff --git a/user-service-project/user-service-app/src/main/java/cn/iocoder/mall/userservice/service/address/bo/UserAddressBO.java b/user-service-project/user-service-app/src/main/java/cn/iocoder/mall/userservice/service/address/bo/UserAddressBO.java index 2bae5cb6b..de7451bda 100644 --- a/user-service-project/user-service-app/src/main/java/cn/iocoder/mall/userservice/service/address/bo/UserAddressBO.java +++ b/user-service-project/user-service-app/src/main/java/cn/iocoder/mall/userservice/service/address/bo/UserAddressBO.java @@ -29,17 +29,9 @@ public class UserAddressBO { */ private String mobile; /** - * 省份编号 + * 地区编码 */ - private Integer provinceCode; - /** - * 城市编号 - */ - private Integer cityCode; - /** - * 区域编号 - */ - private Integer countyCode; + private Integer areaCode; /** * 收件详细地址 */ @@ -52,13 +44,5 @@ public class UserAddressBO { * 创建时间 */ private Date createTime; - /** - * 最后更新时间 - */ - private Date updateTime; - /** - * 删除状态 - */ - private Integer deleted; } diff --git a/user-service-project/user-service-app/src/main/java/cn/iocoder/mall/userservice/service/address/bo/UserAddressCreateBO.java b/user-service-project/user-service-app/src/main/java/cn/iocoder/mall/userservice/service/address/bo/UserAddressCreateBO.java index 1a6a72b79..cabe00ec9 100644 --- a/user-service-project/user-service-app/src/main/java/cn/iocoder/mall/userservice/service/address/bo/UserAddressCreateBO.java +++ b/user-service-project/user-service-app/src/main/java/cn/iocoder/mall/userservice/service/address/bo/UserAddressCreateBO.java @@ -31,20 +31,10 @@ public class UserAddressCreateBO { @Mobile private String mobile; /** - * 省份编号 + * 地区编码 */ - @NotNull(message = "省份编号不能为空") - private Integer provinceCode; - /** - * 城市编号 - */ - @NotNull(message = "城市编号不能为空") - private Integer cityCode; - /** - * 区域编号 - */ - @NotNull(message = "区域编号不能为空") - private Integer countyCode; + @NotNull(message = "地区编码不能为空") + private Integer areaCode; /** * 收件详细地址 */ diff --git a/user-service-project/user-service-app/src/main/java/cn/iocoder/mall/userservice/service/address/bo/UserAddressUpdateBO.java b/user-service-project/user-service-app/src/main/java/cn/iocoder/mall/userservice/service/address/bo/UserAddressUpdateBO.java index 75b12772d..6321b16dc 100644 --- a/user-service-project/user-service-app/src/main/java/cn/iocoder/mall/userservice/service/address/bo/UserAddressUpdateBO.java +++ b/user-service-project/user-service-app/src/main/java/cn/iocoder/mall/userservice/service/address/bo/UserAddressUpdateBO.java @@ -34,20 +34,10 @@ public class UserAddressUpdateBO { @NotEmpty(message = "手机号不能为空") private String mobile; /** - * 省份编号 + * 地区编码 */ - @NotNull(message = "省份编号不能为空") - private Integer provinceCode; - /** - * 城市编号 - */ - @NotNull(message = "城市编号不能为空") - private Integer cityCode; - /** - * 区域编号 - */ - @NotNull(message = "区域编号不能为空") - private Integer countyCode; + @NotNull(message = "地区编码不能为空") + private Integer areaCode; /** * 收件详细地址 */ diff --git a/user-service-project/user-service-app/src/main/resources/application.yaml b/user-service-project/user-service-app/src/main/resources/application.yaml index d8c2748e8..3ee3026cb 100644 --- a/user-service-project/user-service-app/src/main/resources/application.yaml +++ b/user-service-project/user-service-app/src/main/resources/application.yaml @@ -38,6 +38,8 @@ dubbo: version: 1.0.0 UserSmsCodeRpc: version: 1.0.0 + UserAddressRpc: + version: 1.0.0 # Dubbo 服务消费者的配置 consumer: OAuth2Rpc: diff --git a/user-web-app/src/main/java/cn/iocoder/mall/userweb/controller/address/UserAddressController.java b/user-web-app/src/main/java/cn/iocoder/mall/userweb/controller/address/UserAddressController.java index 72403e33d..d22d56210 100644 --- a/user-web-app/src/main/java/cn/iocoder/mall/userweb/controller/address/UserAddressController.java +++ b/user-web-app/src/main/java/cn/iocoder/mall/userweb/controller/address/UserAddressController.java @@ -23,7 +23,7 @@ import static cn.iocoder.common.framework.vo.CommonResult.success; * 用户收件地址 Controller */ @RestController -@RequestMapping("/user_address") +@RequestMapping("/user-address") @Api(tags = "用户收件地址") @Validated public class UserAddressController { @@ -65,10 +65,9 @@ public class UserAddressController { @GetMapping("/list") @ApiOperation("获得用户收件地址列表") - @ApiImplicitParam(name = "userAddressIds", value = "用户收件地址编号列表", required = true) @RequiresPermissions - public CommonResult> listUserAddresses(@RequestParam("userAddressIds") List userAddressIds) { - return success(userAddressManager.listUserAddresses(UserSecurityContextHolder.getUserId(), userAddressIds)); + public CommonResult> listUserAddresses() { + return success(userAddressManager.listUserAddresses(UserSecurityContextHolder.getUserId())); } } diff --git a/user-web-app/src/main/java/cn/iocoder/mall/userweb/controller/address/vo/UserAddressCreateReqVO.java b/user-web-app/src/main/java/cn/iocoder/mall/userweb/controller/address/vo/UserAddressCreateReqVO.java index 4b2ae5862..51aa8f303 100644 --- a/user-web-app/src/main/java/cn/iocoder/mall/userweb/controller/address/vo/UserAddressCreateReqVO.java +++ b/user-web-app/src/main/java/cn/iocoder/mall/userweb/controller/address/vo/UserAddressCreateReqVO.java @@ -19,15 +19,9 @@ public class UserAddressCreateReqVO { @ApiModelProperty(value = "手机号", required = true, example = "15601691300") @NotEmpty(message = "手机号不能为空") private String mobile; - @ApiModelProperty(value = "省份编号", required = true, example = "230000") - @NotNull(message = "省份编号不能为空") - private Integer provinceCode; - @ApiModelProperty(value = "城市编号", required = true, example = "469031") - @NotNull(message = "城市编号不能为空") - private Integer cityCode; @ApiModelProperty(value = "区域编号", required = true, example = "610632") - @NotNull(message = "区域编号不能为空") - private Integer countyCode; + @NotNull(message = "地区编码不能为空") + private Integer areaCode; @ApiModelProperty(value = "收件详细地址", required = true, example = "芋道源码 233 号 666 室") @NotEmpty(message = "收件详细地址不能为空") private String detailAddress; diff --git a/user-web-app/src/main/java/cn/iocoder/mall/userweb/controller/address/vo/UserAddressRespVO.java b/user-web-app/src/main/java/cn/iocoder/mall/userweb/controller/address/vo/UserAddressRespVO.java index f46089220..6a1681409 100644 --- a/user-web-app/src/main/java/cn/iocoder/mall/userweb/controller/address/vo/UserAddressRespVO.java +++ b/user-web-app/src/main/java/cn/iocoder/mall/userweb/controller/address/vo/UserAddressRespVO.java @@ -1,35 +1,31 @@ package cn.iocoder.mall.userweb.controller.address.vo; -import lombok.*; -import io.swagger.annotations.*; -import java.util.*; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; @ApiModel("用户收件地址 Response VO") @Data public class UserAddressRespVO { - @ApiModelProperty(value = "收件地址编号", required = true) + @ApiModelProperty(value = "收件地址编号", required = true, example = "1024") private Integer id; - @ApiModelProperty(value = "用户编号", required = true) + @ApiModelProperty(value = "用户编号", required = true, example = "2048") private Integer userId; - @ApiModelProperty(value = "收件人名称", required = true) + @ApiModelProperty(value = "收件人名称", required = true, example = "帅艿艿") private String name; - @ApiModelProperty(value = "手机号", required = true) + @ApiModelProperty(value = "手机号", required = true, example = "15601691300") private String mobile; - @ApiModelProperty(value = "省份编号", required = true) - private Integer provinceCode; - @ApiModelProperty(value = "城市编号", required = true) - private Integer cityCode; - @ApiModelProperty(value = "区域编号", required = true) - private Integer countyCode; - @ApiModelProperty(value = "收件详细地址", required = true) + @ApiModelProperty(value = "区域编号", required = true, example = "610632") + private Integer areaCode; + @ApiModelProperty(value = "收件详细地址", required = true, example = "芋道源码 233 号 666 室") private String detailAddress; - @ApiModelProperty(value = "地址类型", required = true) + @ApiModelProperty(value = "地址类型", required = true, example = "1", notes = "参见 UserAddressType 枚举类") private Integer type; @ApiModelProperty(value = "创建时间", required = true) private Date createTime; - @ApiModelProperty(value = "最后更新时间", required = true) - private Date updateTime; } diff --git a/user-web-app/src/main/java/cn/iocoder/mall/userweb/controller/address/vo/UserAddressUpdateReqVO.java b/user-web-app/src/main/java/cn/iocoder/mall/userweb/controller/address/vo/UserAddressUpdateReqVO.java index 215b9fad7..853754632 100644 --- a/user-web-app/src/main/java/cn/iocoder/mall/userweb/controller/address/vo/UserAddressUpdateReqVO.java +++ b/user-web-app/src/main/java/cn/iocoder/mall/userweb/controller/address/vo/UserAddressUpdateReqVO.java @@ -13,7 +13,7 @@ import javax.validation.constraints.NotNull; @Data public class UserAddressUpdateReqVO { - @ApiModelProperty(value = "收件地址编号", required = true) + @ApiModelProperty(value = "收件地址编号", required = true, example = "1024") @NotNull(message = "收件地址编号不能为空") private Integer id; @ApiModelProperty(value = "收件人名称", required = true, example = "帅艿艿") @@ -22,15 +22,9 @@ public class UserAddressUpdateReqVO { @ApiModelProperty(value = "手机号", required = true, example = "15601691300") @NotEmpty(message = "手机号不能为空") private String mobile; - @ApiModelProperty(value = "省份编号", required = true, example = "230000") - @NotNull(message = "省份编号不能为空") - private Integer provinceCode; - @ApiModelProperty(value = "城市编号", required = true, example = "469031") - @NotNull(message = "城市编号不能为空") - private Integer cityCode; @ApiModelProperty(value = "区域编号", required = true, example = "610632") - @NotNull(message = "区域编号不能为空") - private Integer countyCode; + @NotNull(message = "地区编码不能为空") + private Integer areaCode; @ApiModelProperty(value = "收件详细地址", required = true, example = "芋道源码 233 号 666 室") @NotEmpty(message = "收件详细地址不能为空") private String detailAddress; diff --git a/user-web-app/src/main/java/cn/iocoder/mall/userweb/manager/address/UserAddressManager.java b/user-web-app/src/main/java/cn/iocoder/mall/userweb/manager/address/UserAddressManager.java index 062026448..de5657c31 100644 --- a/user-web-app/src/main/java/cn/iocoder/mall/userweb/manager/address/UserAddressManager.java +++ b/user-web-app/src/main/java/cn/iocoder/mall/userweb/manager/address/UserAddressManager.java @@ -85,14 +85,11 @@ public class UserAddressManager { * 获得用户收件地址列表 * * @param userId 用户编号 - * @param userAddressIds 用户收件地址编号列表 * @return 用户收件地址列表 */ - public List listUserAddresses(Integer userId, List userAddressIds) { - CommonResult> listUserAddressResult = userAddressRpc.listUserAddresses(userAddressIds); + public List listUserAddresses(Integer userId) { + CommonResult> listUserAddressResult = userAddressRpc.listUserAddresses(userId, null); listUserAddressResult.checkError(); - // 校验是否能够操作 - listUserAddressResult.getData().forEach(userAddressRespDTO -> check(userId, userAddressRespDTO)); return UserAddressConvert.INSTANCE.convertList(listUserAddressResult.getData()); } diff --git a/user-web-app/src/main/resources/application.yml b/user-web-app/src/main/resources/application.yml index 6fdcf7997..aba33d1f5 100644 --- a/user-web-app/src/main/resources/application.yml +++ b/user-web-app/src/main/resources/application.yml @@ -35,6 +35,8 @@ dubbo: version: 1.0.0 SystemExceptionLogRpc: version: 1.0.0 + UserAddressRpc: + version: 1.0.0 # Swagger 配置项 swagger: From b209505f9953e5602e53ad952e3ca4b4a8742e07 Mon Sep 17 00:00:00 2001 From: YunaiV <> Date: Fri, 24 Jul 2020 18:55:51 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E5=95=86=E5=93=81=E5=88=86=E7=B1=BB?= =?UTF-8?q?=E7=9A=84=E8=BF=81=E7=A7=BB=EF=BC=8C=E6=9C=AA=E5=AE=8C=E6=88=90?= =?UTF-8?q?=EF=BC=8C=E5=85=88=E6=8F=90=E4=BA=A4=E4=B8=8B~?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/handler/GlobalExceptionHandler.java | 12 +- pom.xml | 3 +- {user => product-service-project}/pom.xml | 17 +- .../product-service-api}/pom.xml | 16 +- .../enums/ProductErrorCodeConstants.java | 41 +++++ .../enums/category/ProductCategoryIdEnum.java | 23 +++ .../product-service-app/pom.xml | 76 +++++++++ .../ProductServiceApplication.java | 13 ++ .../config/DatabaseConfiguration.java | 28 ++++ .../category/ProductCategoryConvert.java | 25 +++ .../category/ProductCategoryDO.java | 52 ++++++ .../category/ProductCategoryMapper.java | 15 ++ .../category/ProductCategoryService.java | 129 +++++++++++++++ .../category/bo/ProductCategoryBO.java | 48 ++++++ .../category/bo/ProductCategoryCreateBO.java | 45 +++++ .../category/bo/ProductCategoryUpdateBO.java | 50 ++++++ .../src/main/resources/application-dev.yaml | 20 +++ .../src/main/resources/application-local.yaml | 24 +++ .../src/main/resources/application.yaml | 67 ++++++++ product/product-application/pom.xml | 29 ---- .../application/ProductApplication.java | 26 --- .../src/main/resources/application-test.yaml | 6 - .../src/main/resources/application.yaml | 9 - .../biz/enums/ProductErrorCodeEnum.java | 63 ------- .../biz/enums/attr/ProductAttrConstants.java | 23 --- .../category/ProductCategoryNodeEnum.java | 28 ---- .../category/ProductCategoryStatusEnum.java | 46 ------ .../biz/enums/spu/ProductSpuConstants.java | 14 -- .../mall/product/biz/package-info.java | 6 - .../category/ProductCategoryServiceImpl.java | 114 ------------- product/product-mq/pom.xml | 15 -- .../cn/iocoder/mall/demo/mq/package-info.java | 1 - .../service/ProductCategoryServiceImpl.java | 154 ------------------ .../enums/permission/ResourceIdEnum.java | 2 +- .../system-service-app/pom.xml | 8 - .../controller/address/AddressController.http | 5 + .../address/UserAddressController.java | 7 + .../manager/address/UserAddressManager.java | 18 +- user/user-rest/pom.xml | 41 ----- .../user/UsersUserAddressController.java | 81 --------- .../request/user/UserAddressAddRequest.java | 41 ----- .../user/UserAddressUpdateRequest.java | 45 ----- .../response/user/UserAddressResponse.java | 41 ----- 43 files changed, 721 insertions(+), 806 deletions(-) rename {user => product-service-project}/pom.xml (67%) rename {product/product-biz-api => product-service-project/product-service-api}/pom.xml (59%) create mode 100644 product-service-project/product-service-api/src/main/java/cn/iocoder/mall/productservice/enums/ProductErrorCodeConstants.java create mode 100644 product-service-project/product-service-api/src/main/java/cn/iocoder/mall/productservice/enums/category/ProductCategoryIdEnum.java create mode 100644 product-service-project/product-service-app/pom.xml create mode 100644 product-service-project/product-service-app/src/main/java/cn/iocoder/mall/productservice/ProductServiceApplication.java create mode 100644 product-service-project/product-service-app/src/main/java/cn/iocoder/mall/productservice/config/DatabaseConfiguration.java create mode 100644 product-service-project/product-service-app/src/main/java/cn/iocoder/mall/productservice/convert/category/ProductCategoryConvert.java create mode 100644 product-service-project/product-service-app/src/main/java/cn/iocoder/mall/productservice/dal/mysql/dataobject/category/ProductCategoryDO.java create mode 100644 product-service-project/product-service-app/src/main/java/cn/iocoder/mall/productservice/dal/mysql/mapper/category/ProductCategoryMapper.java create mode 100644 product-service-project/product-service-app/src/main/java/cn/iocoder/mall/productservice/service/category/ProductCategoryService.java create mode 100644 product-service-project/product-service-app/src/main/java/cn/iocoder/mall/productservice/service/category/bo/ProductCategoryBO.java create mode 100644 product-service-project/product-service-app/src/main/java/cn/iocoder/mall/productservice/service/category/bo/ProductCategoryCreateBO.java create mode 100644 product-service-project/product-service-app/src/main/java/cn/iocoder/mall/productservice/service/category/bo/ProductCategoryUpdateBO.java create mode 100644 product-service-project/product-service-app/src/main/resources/application-dev.yaml create mode 100644 product-service-project/product-service-app/src/main/resources/application-local.yaml create mode 100644 product-service-project/product-service-app/src/main/resources/application.yaml delete mode 100644 product/product-application/pom.xml delete mode 100644 product/product-application/src/main/java/cn/iocoder/mall/product/application/ProductApplication.java delete mode 100644 product/product-application/src/main/resources/application-test.yaml delete mode 100644 product/product-application/src/main/resources/application.yaml delete mode 100644 product/product-biz-api/src/main/java/cn/iocoder/mall/product/biz/enums/ProductErrorCodeEnum.java delete mode 100644 product/product-biz-api/src/main/java/cn/iocoder/mall/product/biz/enums/attr/ProductAttrConstants.java delete mode 100644 product/product-biz-api/src/main/java/cn/iocoder/mall/product/biz/enums/category/ProductCategoryNodeEnum.java delete mode 100644 product/product-biz-api/src/main/java/cn/iocoder/mall/product/biz/enums/category/ProductCategoryStatusEnum.java delete mode 100644 product/product-biz-api/src/main/java/cn/iocoder/mall/product/biz/enums/spu/ProductSpuConstants.java delete mode 100644 product/product-biz-api/src/main/java/cn/iocoder/mall/product/biz/package-info.java delete mode 100644 product/product-mq/pom.xml delete mode 100644 product/product-mq/src/main/java/cn/iocoder/mall/demo/mq/package-info.java delete mode 100644 product/product-service-impl/src/main/java/cn/iocoder/mall/product/service/ProductCategoryServiceImpl.java create mode 100644 user-web-app/src/main/java/cn/iocoder/mall/userweb/controller/address/AddressController.http delete mode 100644 user/user-rest/pom.xml delete mode 100644 user/user-rest/src/main/java/cn/iocoder/mall/user/rest/controller/user/UsersUserAddressController.java delete mode 100644 user/user-rest/src/main/java/cn/iocoder/mall/user/rest/request/user/UserAddressAddRequest.java delete mode 100644 user/user-rest/src/main/java/cn/iocoder/mall/user/rest/request/user/UserAddressUpdateRequest.java delete mode 100644 user/user-rest/src/main/java/cn/iocoder/mall/user/rest/response/user/UserAddressResponse.java diff --git a/common/mall-spring-boot-starter-web/src/main/java/cn/iocoder/mall/web/core/handler/GlobalExceptionHandler.java b/common/mall-spring-boot-starter-web/src/main/java/cn/iocoder/mall/web/core/handler/GlobalExceptionHandler.java index 7a5dff9c3..d036fce45 100644 --- a/common/mall-spring-boot-starter-web/src/main/java/cn/iocoder/mall/web/core/handler/GlobalExceptionHandler.java +++ b/common/mall-spring-boot-starter-web/src/main/java/cn/iocoder/mall/web/core/handler/GlobalExceptionHandler.java @@ -31,6 +31,7 @@ import org.springframework.web.servlet.NoHandlerFoundException; import javax.servlet.http.HttpServletRequest; import javax.validation.ConstraintViolation; import javax.validation.ConstraintViolationException; +import javax.validation.ValidationException; import java.util.Date; import static cn.iocoder.common.framework.exception.enums.GlobalErrorCodeConstants.*; @@ -162,7 +163,6 @@ public class GlobalExceptionHandler { public CommonResult globalExceptionHandler(HttpServletRequest req, GlobalException ex) { // 系统异常时,才打印异常日志 if (INTERNAL_SERVER_ERROR.getCode().equals(ex.getCode())) { - logger.error("[globalExceptionHandler]", ex); // 插入异常日志 this.createExceptionLog(req, ex); // 普通全局异常,打印 info 日志即可 @@ -173,6 +173,16 @@ public class GlobalExceptionHandler { return CommonResult.error(ex); } + /** + * 处理 Dubbo Consumer 本地参数校验时,抛出的 ValidationException 异常 + */ + @ExceptionHandler(value = ValidationException.class) + public CommonResult validationException(ValidationException ex) { + logger.warn("[constraintViolationExceptionHandler]", ex); + // 无法拼接明细的错误信息,因为 Dubbo Consumer 抛出 ValidationException 异常时,是直接的字符串信息,且人类不可读 + return CommonResult.error(BAD_REQUEST.getCode(), "请求参数不正确"); + } + /** * 处理系统异常,兜底处理所有的一切 */ diff --git a/pom.xml b/pom.xml index 60e431a00..85928c013 100644 --- a/pom.xml +++ b/pom.xml @@ -16,7 +16,6 @@ - user common @@ -24,13 +23,13 @@ mall-dependencies - user-service-project user-web-app system-service-project pay-service-project management-web-app shop-web-app + product-service-project pom diff --git a/user/pom.xml b/product-service-project/pom.xml similarity index 67% rename from user/pom.xml rename to product-service-project/pom.xml index f2d71e10b..9a3f4adca 100644 --- a/user/pom.xml +++ b/product-service-project/pom.xml @@ -9,18 +9,16 @@ 4.0.0 - user + product-service-project pom - - - - user-rest - user-biz + product-service-api + product-service-app + cn.iocoder.mall mall-dependencies @@ -28,6 +26,13 @@ pom import + + + + cn.iocoder.mall + product-service-api + 1.0-SNAPSHOT + diff --git a/product/product-biz-api/pom.xml b/product-service-project/product-service-api/pom.xml similarity index 59% rename from product/product-biz-api/pom.xml rename to product-service-project/product-service-api/pom.xml index 24925d7a7..e267473c8 100644 --- a/product/product-biz-api/pom.xml +++ b/product-service-project/product-service-api/pom.xml @@ -3,20 +3,28 @@ 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"> - product + product-service-project cn.iocoder.mall 1.0-SNAPSHOT 4.0.0 - product-biz-api + product-service-api - cn.iocoder.mall common-framework - 1.0-SNAPSHOT + + + + + javax.validation + validation-api + + + org.projectlombok + lombok diff --git a/product-service-project/product-service-api/src/main/java/cn/iocoder/mall/productservice/enums/ProductErrorCodeConstants.java b/product-service-project/product-service-api/src/main/java/cn/iocoder/mall/productservice/enums/ProductErrorCodeConstants.java new file mode 100644 index 000000000..90f638270 --- /dev/null +++ b/product-service-project/product-service-api/src/main/java/cn/iocoder/mall/productservice/enums/ProductErrorCodeConstants.java @@ -0,0 +1,41 @@ +package cn.iocoder.mall.productservice.enums; + +import cn.iocoder.common.framework.exception.ErrorCode; + +/** + * 错误码枚举类 + * + * 商品系统,使用 1-003-000-000 段 + */ +public interface ProductErrorCodeConstants { + + // ========== PRODUCT CATEGORY 模块 ========== + ErrorCode PRODUCT_CATEGORY_PARENT_NOT_EXISTS = new ErrorCode(1003001000, "父分类不存在"); + ErrorCode PRODUCT_CATEGORY_NOT_EXISTS = new ErrorCode(1003001001, "商品分类不存在"); + ErrorCode PRODUCT_CATEGORY_STATUS_NOT_EXISTS = new ErrorCode(1003001001, "商品分类状态不存在"); + ErrorCode PRODUCT_CATEGORY_PARENT_NOT_SELF = new ErrorCode(1003001002, "不能设置自己为父分类"); + ErrorCode PRODUCT_CATEGORY_STATUS_EQUALS = new ErrorCode(1002001003, "商品分类已经是该状态"); + ErrorCode PRODUCT_CATEGORY_DELETE_ONLY_DISABLE = new ErrorCode(1002001004, "只有关闭的商品分类才可以删除"); + ErrorCode PRODUCT_CATEGORY_DELETE_ONLY_NO_CHILD = new ErrorCode(1002001004, "只有无子分类的商品分类才可以删除"); + ErrorCode PRODUCT_CATEGORY_MUST_ENABLE = new ErrorCode(1002001005, "只有开启的商品分类,才可以使用"); + ErrorCode PRODUCT_CATEGORY_PARENT_CAN_NOT_BE_LEVEL2 = new ErrorCode(1002001005, "父分类必须是一级分类"); + + // ========== PRODUCT SPU + SKU 模块 ========== + ErrorCode PRODUCT_SKU_ATTR_CANT_NOT_DUPLICATE = new ErrorCode(1003002000, "一个 Sku 下,不能有重复的规格"); + ErrorCode PRODUCT_SPU_ATTR_NUMBERS_MUST_BE_EQUALS = new ErrorCode(1003002001, "一个 Spu 下的每个 Sku ,其规格数必须一致"); + ErrorCode PRODUCT_SPU_SKU__NOT_DUPLICATE = new ErrorCode(1003002002, "一个 Spu 下的每个 Sku ,必须不重复"); + ErrorCode PRODUCT_SPU_NOT_EXISTS = new ErrorCode(1003002003, "Spu 不存在"); + ErrorCode PRODUCT_SPU_CATEGORY_MUST_BE_LEVEL2 = new ErrorCode(1003002003, "Spu 只能添加在二级分类下"); + + // ========== PRODUCT ATTR + ATTR_VALUE 模块 ========== + ErrorCode PRODUCT_ATTR_VALUE_NOT_EXIST = new ErrorCode(1003003000, "商品属性值不存在"); + ErrorCode PRODUCT_ATTR_NOT_EXIST = new ErrorCode(1003003001, "商品属性值不存在"); + ErrorCode PRODUCT_ATTR_EXISTS = new ErrorCode(1003003002, "商品规格已经存在"); + ErrorCode PRODUCT_ATTR_STATUS_EQUALS = new ErrorCode(1003003003, "商品规格已经是该状态"); + ErrorCode PRODUCT_ATTR_VALUE_EXISTS = new ErrorCode(1003003004, "商品规格值已经存在"); + ErrorCode PRODUCT_ATTR_VALUE_STATUS_EQUALS = new ErrorCode(1003003005, "商品规格值已经是该状态"); + + // ========== PRODUCT BRAND模块 ========== + ErrorCode PRODUCT_BRAND_EXIST = new ErrorCode(1003004000,"品牌值已经存在"); + +} diff --git a/product-service-project/product-service-api/src/main/java/cn/iocoder/mall/productservice/enums/category/ProductCategoryIdEnum.java b/product-service-project/product-service-api/src/main/java/cn/iocoder/mall/productservice/enums/category/ProductCategoryIdEnum.java new file mode 100644 index 000000000..dd1807b6c --- /dev/null +++ b/product-service-project/product-service-api/src/main/java/cn/iocoder/mall/productservice/enums/category/ProductCategoryIdEnum.java @@ -0,0 +1,23 @@ +package cn.iocoder.mall.productservice.enums.category; + +/** + * 商品分类的编号枚举 + */ +public enum ProductCategoryIdEnum { + + /** + * 根节点 + */ + ROOT(0); + + private final Integer id; + + ProductCategoryIdEnum(Integer id) { + this.id = id; + } + + public Integer getId() { + return id; + } + +} diff --git a/product-service-project/product-service-app/pom.xml b/product-service-project/product-service-app/pom.xml new file mode 100644 index 000000000..2b19dc8ef --- /dev/null +++ b/product-service-project/product-service-app/pom.xml @@ -0,0 +1,76 @@ + + + + product-service-project + cn.iocoder.mall + 1.0-SNAPSHOT + + 4.0.0 + + product-service-app + + + + cn.iocoder.mall + mall-spring-boot-starter-dubbo + + + + + cn.iocoder.mall + system-service-api + + + + + cn.iocoder.mall + product-service-api + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-discovery + + + + + mysql + mysql-connector-java + + + + com.alibaba + druid-spring-boot-starter + + + + cn.iocoder.mall + mall-spring-boot-starter-mybatis + + + + + org.springframework.boot + spring-boot-starter-validation + + + + org.projectlombok + lombok + + + + org.mapstruct + mapstruct + + + org.mapstruct + mapstruct-jdk8 + + + + + diff --git a/product-service-project/product-service-app/src/main/java/cn/iocoder/mall/productservice/ProductServiceApplication.java b/product-service-project/product-service-app/src/main/java/cn/iocoder/mall/productservice/ProductServiceApplication.java new file mode 100644 index 000000000..ac41a7aab --- /dev/null +++ b/product-service-project/product-service-app/src/main/java/cn/iocoder/mall/productservice/ProductServiceApplication.java @@ -0,0 +1,13 @@ +package cn.iocoder.mall.productservice; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class ProductServiceApplication { + + public static void main(String[] args) { + SpringApplication.run(ProductServiceApplication.class, args); + } + +} diff --git a/product-service-project/product-service-app/src/main/java/cn/iocoder/mall/productservice/config/DatabaseConfiguration.java b/product-service-project/product-service-app/src/main/java/cn/iocoder/mall/productservice/config/DatabaseConfiguration.java new file mode 100644 index 000000000..84fcef6fa --- /dev/null +++ b/product-service-project/product-service-app/src/main/java/cn/iocoder/mall/productservice/config/DatabaseConfiguration.java @@ -0,0 +1,28 @@ +package cn.iocoder.mall.productservice.config; + +import com.baomidou.mybatisplus.core.injector.DefaultSqlInjector; +import com.baomidou.mybatisplus.core.injector.ISqlInjector; +import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.transaction.annotation.EnableTransactionManagement; + +@Configuration +@MapperScan("cn.iocoder.mall.productservice.dal.mysql.mapper") // 扫描对应的 Mapper 接口 +@EnableTransactionManagement(proxyTargetClass = true) // 启动事务管理。 +public class DatabaseConfiguration { + + // 数据库连接池 Druid + + @Bean + public ISqlInjector sqlInjector() { + return new DefaultSqlInjector(); // MyBatis Plus 逻辑删除 + } + + @Bean + public PaginationInterceptor paginationInterceptor() { + return new PaginationInterceptor(); // MyBatis Plus 分页插件 + } + +} diff --git a/product-service-project/product-service-app/src/main/java/cn/iocoder/mall/productservice/convert/category/ProductCategoryConvert.java b/product-service-project/product-service-app/src/main/java/cn/iocoder/mall/productservice/convert/category/ProductCategoryConvert.java new file mode 100644 index 000000000..aada2b4d4 --- /dev/null +++ b/product-service-project/product-service-app/src/main/java/cn/iocoder/mall/productservice/convert/category/ProductCategoryConvert.java @@ -0,0 +1,25 @@ +package cn.iocoder.mall.productservice.convert.category; + +import cn.iocoder.mall.productservice.dal.mysql.dataobject.category.ProductCategoryDO; +import cn.iocoder.mall.productservice.service.category.bo.ProductCategoryBO; +import cn.iocoder.mall.productservice.service.category.bo.ProductCategoryCreateBO; +import cn.iocoder.mall.productservice.service.category.bo.ProductCategoryUpdateBO; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +import java.util.List; + +@Mapper +public interface ProductCategoryConvert { + + ProductCategoryConvert INSTANCE = Mappers.getMapper(ProductCategoryConvert.class); + + ProductCategoryDO convert(ProductCategoryCreateBO bean); + + ProductCategoryBO convert(ProductCategoryDO bean); + + List convertList(List list); + + ProductCategoryDO convert(ProductCategoryUpdateBO bean); + +} diff --git a/product-service-project/product-service-app/src/main/java/cn/iocoder/mall/productservice/dal/mysql/dataobject/category/ProductCategoryDO.java b/product-service-project/product-service-app/src/main/java/cn/iocoder/mall/productservice/dal/mysql/dataobject/category/ProductCategoryDO.java new file mode 100644 index 000000000..4ffcc962b --- /dev/null +++ b/product-service-project/product-service-app/src/main/java/cn/iocoder/mall/productservice/dal/mysql/dataobject/category/ProductCategoryDO.java @@ -0,0 +1,52 @@ +package cn.iocoder.mall.productservice.dal.mysql.dataobject.category; + +import cn.iocoder.common.framework.enums.CommonStatusEnum; +import cn.iocoder.mall.mybatis.core.dataobject.BaseDO; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** +* 商品分类表 +*/ +@TableName("product_category") +@Data +@EqualsAndHashCode(callSuper = true) +@Accessors(chain = true) +public class ProductCategoryDO extends BaseDO { + + /** + * 分类编号 + */ + @TableId + private Integer id; + /** + * 父分类编号 + */ + private Integer pid; + /** + * 分类名称 + */ + private String name; + /** + * 分类描述 + */ + private String description; + /** + * 分类图片 + */ + private String picUrl; + /** + * 分类排序 + */ + private Integer sort; + /** + * 状态 + * + * 枚举 {@link CommonStatusEnum} + */ + private Integer status; + +} diff --git a/product-service-project/product-service-app/src/main/java/cn/iocoder/mall/productservice/dal/mysql/mapper/category/ProductCategoryMapper.java b/product-service-project/product-service-app/src/main/java/cn/iocoder/mall/productservice/dal/mysql/mapper/category/ProductCategoryMapper.java new file mode 100644 index 000000000..8d86d1242 --- /dev/null +++ b/product-service-project/product-service-app/src/main/java/cn/iocoder/mall/productservice/dal/mysql/mapper/category/ProductCategoryMapper.java @@ -0,0 +1,15 @@ +package cn.iocoder.mall.productservice.dal.mysql.mapper.category; + +import cn.iocoder.mall.productservice.dal.mysql.dataobject.category.ProductCategoryDO; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.springframework.stereotype.Repository; + +@Repository +public interface ProductCategoryMapper extends BaseMapper { + + default Integer selectCountByPid(Integer pid) { + return selectCount(new QueryWrapper().eq("pid", pid)); + } + +} diff --git a/product-service-project/product-service-app/src/main/java/cn/iocoder/mall/productservice/service/category/ProductCategoryService.java b/product-service-project/product-service-app/src/main/java/cn/iocoder/mall/productservice/service/category/ProductCategoryService.java new file mode 100644 index 000000000..722da2c55 --- /dev/null +++ b/product-service-project/product-service-app/src/main/java/cn/iocoder/mall/productservice/service/category/ProductCategoryService.java @@ -0,0 +1,129 @@ +package cn.iocoder.mall.productservice.service.category; + +import cn.iocoder.common.framework.exception.util.ServiceExceptionUtil; +import cn.iocoder.mall.productservice.convert.category.ProductCategoryConvert; +import cn.iocoder.mall.productservice.dal.mysql.dataobject.category.ProductCategoryDO; +import cn.iocoder.mall.productservice.dal.mysql.mapper.category.ProductCategoryMapper; +import cn.iocoder.mall.productservice.enums.category.ProductCategoryIdEnum; +import cn.iocoder.mall.productservice.service.category.bo.ProductCategoryBO; +import cn.iocoder.mall.productservice.service.category.bo.ProductCategoryCreateBO; +import cn.iocoder.mall.productservice.service.category.bo.ProductCategoryUpdateBO; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import javax.validation.Valid; +import java.util.List; + +import static cn.iocoder.mall.productservice.enums.ProductErrorCodeConstants.*; + +/** +* 商品分类表 Service +*/ +@Service +@Validated +public class ProductCategoryService { + + @Autowired + private ProductCategoryMapper productCategoryMapper; + + /** + * 创建商品分类表 + * + * @param createBO 创建商品分类表 BO + * @return 商品分类表 + */ + public ProductCategoryBO createProductCategory(@Valid ProductCategoryCreateBO createBO) { + // 校验父分类 + validParent(createBO.getPid()); + // 插入到数据库 + ProductCategoryDO productCategoryDO = ProductCategoryConvert.INSTANCE.convert(createBO); + productCategoryMapper.insert(productCategoryDO); + // 返回 + return ProductCategoryConvert.INSTANCE.convert(productCategoryDO); + } + + /** + * 更新商品分类表 + * + * @param updateBO 更新商品分类表 BO + */ + public void updateProductCategory(@Valid ProductCategoryUpdateBO updateBO) { + // 校验父分类 + validParent(updateBO.getPid()); + // 校验不能设置自己为父分类 + if (updateBO.getId().equals(updateBO.getPid())) { + throw ServiceExceptionUtil.exception(PRODUCT_CATEGORY_PARENT_NOT_SELF); + } + // 校验更新的商品分类表是否存在 + if (productCategoryMapper.selectById(updateBO.getId()) == null) { + throw ServiceExceptionUtil.exception(PRODUCT_CATEGORY_NOT_EXISTS); + } + // 更新到数据库 + ProductCategoryDO updateObject = ProductCategoryConvert.INSTANCE.convert(updateBO); + productCategoryMapper.updateById(updateObject); + } + + /** + * 删除商品分类表 + * + * @param productCategoryId 商品分类表编号 + */ + public void deleteProductCategory(Integer productCategoryId) { + // 校验删除的商品分类表是否存在 + if (productCategoryMapper.selectById(productCategoryId) == null) { + throw ServiceExceptionUtil.exception(PRODUCT_CATEGORY_NOT_EXISTS); + } + // 只有不存在子分类才可以删除 + Integer childCount = productCategoryMapper.selectCountByPid(productCategoryId); + if (childCount > 0) { + throw ServiceExceptionUtil.exception(PRODUCT_CATEGORY_DELETE_ONLY_NO_CHILD); + } + // TODO 芋艿 补充只有不存在商品才可以删除 + // 标记删除 + productCategoryMapper.deleteById(productCategoryId); + } + + /** + * 获得商品分类表 + * + * @param productCategoryId 商品分类表编号 + * @return 商品分类表 + */ + public ProductCategoryBO getProductCategory(Integer productCategoryId) { + ProductCategoryDO productCategoryDO = productCategoryMapper.selectById(productCategoryId); + return ProductCategoryConvert.INSTANCE.convert(productCategoryDO); + } + + /** + * 获得商品分类表列表 + * + * @param productCategoryIds 商品分类表编号列表 + * @return 商品分类表列表 + */ + public List listProductCategories(List productCategoryIds) { + List productCategoryDOs = productCategoryMapper.selectBatchIds(productCategoryIds); + return ProductCategoryConvert.INSTANCE.convertList(productCategoryDOs); + } + + private void validParent(Integer pid) { + if (!ProductCategoryIdEnum.ROOT.getId().equals(pid)) { + ProductCategoryDO parentCategory = productCategoryMapper.selectById(pid); + // 校验父分类是否存在 + if (parentCategory == null) { + throw ServiceExceptionUtil.exception(PRODUCT_CATEGORY_PARENT_NOT_EXISTS); + } + // 父分类必须是一级分类 + if (!ProductCategoryIdEnum.ROOT.getId().equals(parentCategory.getPid())) { + throw ServiceExceptionUtil.exception((PRODUCT_CATEGORY_PARENT_CAN_NOT_BE_LEVEL2)); + } + } + } + +// @Override +// public List getListByPid(Integer pid) { +// List categoryList = productCategoryMapper.selectListByPidAndStatusOrderBySort(pid, ProductCategoryConstants.STATUS_ENABLE); +// return ProductCategoryConvert.INSTANCE.convertToBO(categoryList); +// } + +} diff --git a/product-service-project/product-service-app/src/main/java/cn/iocoder/mall/productservice/service/category/bo/ProductCategoryBO.java b/product-service-project/product-service-app/src/main/java/cn/iocoder/mall/productservice/service/category/bo/ProductCategoryBO.java new file mode 100644 index 000000000..c09bb3719 --- /dev/null +++ b/product-service-project/product-service-app/src/main/java/cn/iocoder/mall/productservice/service/category/bo/ProductCategoryBO.java @@ -0,0 +1,48 @@ +package cn.iocoder.mall.productservice.service.category.bo; + +import lombok.Data; +import lombok.experimental.Accessors; + +import java.util.Date; + +/** +* 商品分类表 BO +*/ +@Data +@Accessors(chain = true) +public class ProductCategoryBO { + + /** + * 分类编号 + */ + private Integer id; + /** + * 父分类编号 + */ + private Integer pid; + /** + * 分类名称 + */ + private String name; + /** + * 分类描述 + */ + private String description; + /** + * 分类图片 + */ + private String picUrl; + /** + * 分类排序 + */ + private Integer sort; + /** + * 状态 + */ + private Integer status; + /** + * 创建时间 + */ + private Date createTime; + +} diff --git a/product-service-project/product-service-app/src/main/java/cn/iocoder/mall/productservice/service/category/bo/ProductCategoryCreateBO.java b/product-service-project/product-service-app/src/main/java/cn/iocoder/mall/productservice/service/category/bo/ProductCategoryCreateBO.java new file mode 100644 index 000000000..d6b0610fb --- /dev/null +++ b/product-service-project/product-service-app/src/main/java/cn/iocoder/mall/productservice/service/category/bo/ProductCategoryCreateBO.java @@ -0,0 +1,45 @@ +package cn.iocoder.mall.productservice.service.category.bo; + +import lombok.Data; +import lombok.experimental.Accessors; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; + +/** +* 商品分类表创建 BO +*/ +@Data +@Accessors(chain = true) +public class ProductCategoryCreateBO { + + /** + * 父分类编号 + */ + @NotNull(message = "父分类编号不能为空") + private Integer pid; + /** + * 分类名称 + */ + @NotEmpty(message = "分类名称不能为空") + private String name; + /** + * 分类描述 + */ + private String description; + /** + * 分类图片 + */ + private String picUrl; + /** + * 分类排序 + */ + @NotNull(message = "分类排序不能为空") + private Integer sort; + /** + * 状态 + */ + @NotNull(message = "状态不能为空") + private Integer status; + +} diff --git a/product-service-project/product-service-app/src/main/java/cn/iocoder/mall/productservice/service/category/bo/ProductCategoryUpdateBO.java b/product-service-project/product-service-app/src/main/java/cn/iocoder/mall/productservice/service/category/bo/ProductCategoryUpdateBO.java new file mode 100644 index 000000000..5268602e3 --- /dev/null +++ b/product-service-project/product-service-app/src/main/java/cn/iocoder/mall/productservice/service/category/bo/ProductCategoryUpdateBO.java @@ -0,0 +1,50 @@ +package cn.iocoder.mall.productservice.service.category.bo; + +import lombok.Data; +import lombok.experimental.Accessors; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; + +/** +* 商品分类表更新 BO +*/ +@Data +@Accessors(chain = true) +public class ProductCategoryUpdateBO { + + /** + * 分类编号 + */ + @NotNull(message = "分类编号不能为空") + private Integer id; + /** + * 父分类编号 + */ + @NotNull(message = "父分类编号不能为空") + private Integer pid; + /** + * 分类名称 + */ + @NotEmpty(message = "分类名称不能为空") + private String name; + /** + * 分类描述 + */ + private String description; + /** + * 分类图片 + */ + private String picUrl; + /** + * 分类排序 + */ + @NotNull(message = "分类排序不能为空") + private Integer sort; + /** + * 状态 + */ + @NotNull(message = "状态不能为空") + private Integer status; + +} diff --git a/product-service-project/product-service-app/src/main/resources/application-dev.yaml b/product-service-project/product-service-app/src/main/resources/application-dev.yaml new file mode 100644 index 000000000..cfae12b0d --- /dev/null +++ b/product-service-project/product-service-app/src/main/resources/application-dev.yaml @@ -0,0 +1,20 @@ +spring: + # 数据源配置项 + datasource: + url: jdbc:mysql://400-infra.server.iocoder.cn:3306/mall_system?useSSL=false&useUnicode=true&characterEncoding=UTF-8 + driver-class-name: com.mysql.jdbc.Driver + username: root + password: 3WLiVUBEwTbvAfsh + # Spring Cloud 配置项 + cloud: + nacos: + # Spring Cloud Nacos Discovery 配置项 + discovery: + server-addr: 400-infra.server.iocoder.cn:8848 # Nacos 服务器地址 + namespace: dev # Nacos 命名空间 + +# Dubbo 配置项 +dubbo: + # Dubbo 注册中心 + registry: + address: spring-cloud://400-infra.server.iocoder.cn:8848 # 指定 Dubbo 服务注册中心的地址 diff --git a/product-service-project/product-service-app/src/main/resources/application-local.yaml b/product-service-project/product-service-app/src/main/resources/application-local.yaml new file mode 100644 index 000000000..1b5420bef --- /dev/null +++ b/product-service-project/product-service-app/src/main/resources/application-local.yaml @@ -0,0 +1,24 @@ +spring: + # 数据源配置项 + datasource: + url: jdbc:mysql://400-infra.server.iocoder.cn:3306/mall_system?useSSL=false&useUnicode=true&characterEncoding=UTF-8 + driver-class-name: com.mysql.jdbc.Driver + username: root + password: 3WLiVUBEwTbvAfsh + # Spring Cloud 配置项 + cloud: + nacos: + # Spring Cloud Nacos Discovery 配置项 + discovery: + server-addr: 400-infra.server.iocoder.cn:8848 # Nacos 服务器地址 + namespace: dev # Nacos 命名空间 + +# Dubbo 配置项 +dubbo: + # Dubbo 注册中心 + registry: +# address: spring-cloud://400-infra.server.iocoder.cn:8848 # 指定 Dubbo 服务注册中心的地址 + address: nacos://400-infra.server.iocoder.cn:8848?namespace=dev # 指定 Dubbo 服务注册中心的地址 + # Dubbo 服务提供者的配置 + provider: + tag: ${DUBBO_TAG} # Dubbo 路由分组 diff --git a/product-service-project/product-service-app/src/main/resources/application.yaml b/product-service-project/product-service-app/src/main/resources/application.yaml new file mode 100644 index 000000000..f1cb94c44 --- /dev/null +++ b/product-service-project/product-service-app/src/main/resources/application.yaml @@ -0,0 +1,67 @@ +spring: + # Application 的配置项 + application: + name: product-service + # Profile 的配置项 + profiles: + active: local + +# MyBatis Plus 配置项 +mybatis-plus: + configuration: + map-underscore-to-camel-case: true # 虽然默认为 true ,但是还是显示去指定下。 + global-config: + db-config: + id-type: auto + logic-delete-value: 1 # 逻辑已删除值(默认为 1) + logic-not-delete-value: 0 # 逻辑未删除值(默认为 0) + mapper-locations: classpath*:mapper/*.xml + type-aliases-package: cn.iocoder.mall.productservice.dal.mysql.dataobject + +# Dubbo 配置项 +dubbo: + # Spring Cloud Alibaba Dubbo 专属配置 + cloud: + subscribed-services: '' # 设置订阅的应用列表,默认为 * 订阅所有应用 + # Dubbo 提供者的协议 + protocol: + name: dubbo + port: -1 + # Dubbo 提供服务的扫描基础包 + scan: + base-packages: cn.iocoder.mall.productservice.rpc + # Dubbo 服务提供者的配置 + provider: + filter: -exception + validation: true # 开启 Provider 参数校验 + OAuth2Rpc: + version: 1.0.0 + AdminRpc: + version: 1.0.0 + ResourceRpc: + version: 1.0.0 + RoleRpc: + version: 1.0.0 + PermissionRpc: + version: 1.0.0 + DepartmentRpc: + version: 1.0.0 + DataDictRpc: + version: 1.0.0 + ProductExceptionLogRpc: + version: 1.0.0 + ProductAccessLogRpc: + version: 1.0.0 + ErrorCodeRpc: + version: 1.0.0 + # Dubbo 服务消费者的配置 + consumer: + ErrorCodeRpc: + version: 1.0.0 + +# Mall 配置项 +mall: + # 错误码配置项对应 ErrorCodeProperties 配置类 + error-code: + group: ${spring.application.name} + constants-class: cn.iocoder.mall.productservice.enums.ProductErrorCodeConstants diff --git a/product/product-application/pom.xml b/product/product-application/pom.xml deleted file mode 100644 index 3dec4c1e0..000000000 --- a/product/product-application/pom.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - - product - cn.iocoder.mall - 1.0-SNAPSHOT - - 4.0.0 - - product-application - - - - - cn.iocoder.mall - product-rest - 1.0-SNAPSHOT - - - cn.iocoder.mall - product-rpc - 1.0-SNAPSHOT - - - - - diff --git a/product/product-application/src/main/java/cn/iocoder/mall/product/application/ProductApplication.java b/product/product-application/src/main/java/cn/iocoder/mall/product/application/ProductApplication.java deleted file mode 100644 index 81aed8b6a..000000000 --- a/product/product-application/src/main/java/cn/iocoder/mall/product/application/ProductApplication.java +++ /dev/null @@ -1,26 +0,0 @@ -package cn.iocoder.mall.product.application; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.context.config.ConfigFileApplicationListener; -import org.springframework.scheduling.annotation.EnableAsync; - -@SpringBootApplication(scanBasePackages = {"cn.iocoder.mall.product"}) -@EnableAsync(proxyTargetClass = true) -public class ProductApplication { - - /** - * 设置需要读取的配置文件的名字。 - * 基于 {@link org.springframework.boot.context.config.ConfigFileApplicationListener#CONFIG_NAME_PROPERTY} 实现。 - */ - private static final String CONFIG_NAME_VALUE = "biz,rest,rpc,application"; - - public static void main(String[] args) { - // 设置环境变量 - System.setProperty(ConfigFileApplicationListener.CONFIG_NAME_PROPERTY, CONFIG_NAME_VALUE); - - // 启动 Spring Boot 应用 - SpringApplication.run(ProductApplication.class, args); - } - -} diff --git a/product/product-application/src/main/resources/application-test.yaml b/product/product-application/src/main/resources/application-test.yaml deleted file mode 100644 index 22be4ba61..000000000 --- a/product/product-application/src/main/resources/application-test.yaml +++ /dev/null @@ -1,6 +0,0 @@ -swagger: - enable: true - title: 商品子系统 - description: 商品子系统 - version: 1.0.0 - base-package: cn.iocoder.mall.product.application.controller diff --git a/product/product-application/src/main/resources/application.yaml b/product/product-application/src/main/resources/application.yaml deleted file mode 100644 index 003331d9f..000000000 --- a/product/product-application/src/main/resources/application.yaml +++ /dev/null @@ -1,9 +0,0 @@ -spring: - # Application 的配置项 - application: - name: product-application - # Profile 的配置项 - profiles: - active: local - - diff --git a/product/product-biz-api/src/main/java/cn/iocoder/mall/product/biz/enums/ProductErrorCodeEnum.java b/product/product-biz-api/src/main/java/cn/iocoder/mall/product/biz/enums/ProductErrorCodeEnum.java deleted file mode 100644 index 3543d2d34..000000000 --- a/product/product-biz-api/src/main/java/cn/iocoder/mall/product/biz/enums/ProductErrorCodeEnum.java +++ /dev/null @@ -1,63 +0,0 @@ -package cn.iocoder.mall.product.biz.enums; - -import cn.iocoder.common.framework.util.ServiceExceptionUtil; - -/** - * 错误码枚举类 - * - * 商品系统,使用 1-003-000-000 段 - */ -public enum ProductErrorCodeEnum implements ServiceExceptionUtil.Enumerable { - - // ========== PRODUCT CATEGORY 模块 ========== - PRODUCT_CATEGORY_PARENT_NOT_EXISTS(1003001000, "父分类不存在"), - PRODUCT_CATEGORY_NOT_EXISTS(1003001001, "商品分类不存在"), - PRODUCT_CATEGORY_STATUS_NOT_EXISTS(1003001001, "商品分类状态不存在"), - PRODUCT_CATEGORY_PARENT_NOT_SELF(1003001002, "不能设置自己为父分类"), - PRODUCT_CATEGORY_STATUS_EQUALS(1002001003, "商品分类已经是该状态"), - PRODUCT_CATEGORY_DELETE_ONLY_DISABLE(1002001004, "只有关闭的商品分类才可以删除"), - PRODUCT_CATEGORY_DELETE_ONLY_NO_CHILD(1002001004, "只有无子分类的商品分类才可以删除"), - PRODUCT_CATEGORY_MUST_ENABLE(1002001005, "只有开启的商品分类,才可以使用"), - PRODUCT_CATEGORY_PARENT_CAN_NOT_BE_LEVEL2(1002001005, "父分类必须是一级分类"), - - // ========== PRODUCT SPU + SKU 模块 ========== - PRODUCT_SKU_ATTR_CANT_NOT_DUPLICATE(1003002000, "一个 Sku 下,不能有重复的规格"), - PRODUCT_SPU_ATTR_NUMBERS_MUST_BE_EQUALS(1003002001, "一个 Spu 下的每个 Sku ,其规格数必须一致"), - PRODUCT_SPU_SKU__NOT_DUPLICATE(1003002002, "一个 Spu 下的每个 Sku ,必须不重复"), - PRODUCT_SPU_NOT_EXISTS(1003002003, "Spu 不存在"), - PRODUCT_SPU_CATEGORY_MUST_BE_LEVEL2(1003002003, "Spu 只能添加在二级分类下"), - - // ========== PRODUCT ATTR + ATTR_VALUE 模块 ========== - PRODUCT_ATTR_VALUE_NOT_EXIST(1003003000, "商品属性值不存在"), - PRODUCT_ATTR_NOT_EXIST(1003003001, "商品属性值不存在"), - PRODUCT_ATTR_EXISTS(1003003002, "商品规格已经存在"), - PRODUCT_ATTR_STATUS_EQUALS(1003003003, "商品规格已经是该状态"), - PRODUCT_ATTR_VALUE_EXISTS(1003003004, "商品规格值已经存在"), - PRODUCT_ATTR_VALUE_STATUS_EQUALS(1003003005, "商品规格值已经是该状态"), - - // ========== PRODUCT BRAND模块 ========== - PRODUCT_BRAND_EXIST(1003004000, "品牌值已经存在"), - ; - - private final int code; - private final String message; - - ProductErrorCodeEnum(int code, String message) { - this.code = code; - this.message = message; - } - - public String getMessage() { - return message; - } - - @Override - public int getGroup() { - return 0; - } - - @Override - public int getCode() { - return code; - } -} diff --git a/product/product-biz-api/src/main/java/cn/iocoder/mall/product/biz/enums/attr/ProductAttrConstants.java b/product/product-biz-api/src/main/java/cn/iocoder/mall/product/biz/enums/attr/ProductAttrConstants.java deleted file mode 100644 index b65aac0a1..000000000 --- a/product/product-biz-api/src/main/java/cn/iocoder/mall/product/biz/enums/attr/ProductAttrConstants.java +++ /dev/null @@ -1,23 +0,0 @@ -package cn.iocoder.mall.product.biz.enums.attr; - -public class ProductAttrConstants { - - /** - * ATTR 状态 - 开启 - */ - public static final Integer ATTR_STATUS_ENABLE = 1; - /** - * ATTR 状态 - 关闭 - */ - public static final Integer ATTR_STATUS_DISABLE = 2; - - /** - * ATTR_VALUE 状态 - 开启 - */ - public static final Integer ATTR_VALUE_STATUS_ENABLE = 1; - /** - * ATTR_VALUE 状态 - 关闭 - */ - public static final Integer ATTR_VALUE_STATUS_DISABLE = 2; - -} diff --git a/product/product-biz-api/src/main/java/cn/iocoder/mall/product/biz/enums/category/ProductCategoryNodeEnum.java b/product/product-biz-api/src/main/java/cn/iocoder/mall/product/biz/enums/category/ProductCategoryNodeEnum.java deleted file mode 100644 index 9f32d1df7..000000000 --- a/product/product-biz-api/src/main/java/cn/iocoder/mall/product/biz/enums/category/ProductCategoryNodeEnum.java +++ /dev/null @@ -1,28 +0,0 @@ -package cn.iocoder.mall.product.biz.enums.category; - -import cn.iocoder.common.framework.core.IntArrayValuable; - -import java.util.Arrays; - -/** - * @Author: jiangweifan - * @Date: 2020/5/12 - * @Description: 商品分类节点枚举 - */ -public enum ProductCategoryNodeEnum{ - - /** - * 根节点 - */ - ROOT(0); - - private final Integer id; - - ProductCategoryNodeEnum(Integer id) { - this.id = id; - } - - public Integer getId() { - return id; - } -} diff --git a/product/product-biz-api/src/main/java/cn/iocoder/mall/product/biz/enums/category/ProductCategoryStatusEnum.java b/product/product-biz-api/src/main/java/cn/iocoder/mall/product/biz/enums/category/ProductCategoryStatusEnum.java deleted file mode 100644 index f90d4670f..000000000 --- a/product/product-biz-api/src/main/java/cn/iocoder/mall/product/biz/enums/category/ProductCategoryStatusEnum.java +++ /dev/null @@ -1,46 +0,0 @@ -package cn.iocoder.mall.product.biz.enums.category; - -import cn.iocoder.common.framework.core.IntArrayValuable; - -import java.util.Arrays; - -/** - * @Author: jiangweifan - * @Date: 2020/5/12 - * @Description: 商品分类状态枚举 - */ -public enum ProductCategoryStatusEnum implements IntArrayValuable { - - ENABLED(1, "启用"), - DISABLED(2, "禁用"); - - public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(ProductCategoryStatusEnum::getStatus).toArray(); - - /** - * 状态 - */ - private final Integer status; - /** - * 描述 - */ - private final String name; - - ProductCategoryStatusEnum(Integer status, String name) { - this.status = status; - this.name = name; - } - - public Integer getStatus() { - return status; - } - - public String getName() { - return name; - } - - @Override - public int[] array() { - return ARRAYS; - } - -} diff --git a/product/product-biz-api/src/main/java/cn/iocoder/mall/product/biz/enums/spu/ProductSpuConstants.java b/product/product-biz-api/src/main/java/cn/iocoder/mall/product/biz/enums/spu/ProductSpuConstants.java deleted file mode 100644 index 366545e81..000000000 --- a/product/product-biz-api/src/main/java/cn/iocoder/mall/product/biz/enums/spu/ProductSpuConstants.java +++ /dev/null @@ -1,14 +0,0 @@ -package cn.iocoder.mall.product.biz.enums.spu; - -public class ProductSpuConstants { - - /** - * 状态 - 开启 - */ - public static final Integer SKU_STATUS_ENABLE = 1; - /** - * 状态 - 关闭 - */ - public static final Integer SKU_STATUS_DISABLE = 2; - -} diff --git a/product/product-biz-api/src/main/java/cn/iocoder/mall/product/biz/package-info.java b/product/product-biz-api/src/main/java/cn/iocoder/mall/product/biz/package-info.java deleted file mode 100644 index d68b31026..000000000 --- a/product/product-biz-api/src/main/java/cn/iocoder/mall/product/biz/package-info.java +++ /dev/null @@ -1,6 +0,0 @@ -/** - * 该项目,主要用于暴露一些共享的枚举类等。 - * - * 例如说,RPC 接口提供错误码给调用方 - */ -package cn.iocoder.mall.product.biz; diff --git a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/service/category/ProductCategoryServiceImpl.java b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/service/category/ProductCategoryServiceImpl.java index 16a0231f6..447f92d04 100644 --- a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/service/category/ProductCategoryServiceImpl.java +++ b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/service/category/ProductCategoryServiceImpl.java @@ -39,118 +39,4 @@ public class ProductCategoryServiceImpl implements ProductCategoryService { return ProductCategoryConvert.INSTANCE.convertToAllListBO(categoryList); } - @Override - public ProductCategoryBO addProductCategory(ProductCategoryAddDTO productCategoryAddDTO) { - // 校验父分类 - validParent(productCategoryAddDTO.getPid()); - // 保存到数据库 - ProductCategoryDO productCategory = ProductCategoryConvert.INSTANCE.convertToDO(productCategoryAddDTO) - .setStatus(ProductCategoryStatusEnum.ENABLED.getStatus()); - productCategory.setCreateTime(new Date()); - productCategory.setDeleted(DeletedStatusEnum.DELETED_NO.getValue()); - productCategoryMapper.insert(productCategory); - // TODO 伟帆 操作日志 - // 返回成功 - return ProductCategoryConvert.INSTANCE.convertToBO(productCategory); - } - - @Override - public Boolean updateProductCategory(ProductCategoryUpdateDTO productCategoryUpdateDTO) { - // 校验当前分类是否存在 - if (productCategoryMapper.selectById(productCategoryUpdateDTO.getId()) == null) { - throw ServiceExceptionUtil.exception(PRODUCT_CATEGORY_NOT_EXISTS); - } - // 校验父分类 - validParent(productCategoryUpdateDTO.getPid()); - // 校验不能设置自己为父分类 - if (productCategoryUpdateDTO.getId().equals(productCategoryUpdateDTO.getPid())) { - throw ServiceExceptionUtil.exception(PRODUCT_CATEGORY_PARENT_NOT_SELF); - } - // 校验父分类是否存在 - if (!ProductCategoryNodeEnum.ROOT.getId().equals(productCategoryUpdateDTO.getPid()) - && productCategoryMapper.selectById(productCategoryUpdateDTO.getPid()) == null) { - throw ServiceExceptionUtil.exception(PRODUCT_CATEGORY_PARENT_NOT_EXISTS); - } - // 更新到数据库 - ProductCategoryDO updateProductCategory = ProductCategoryConvert.INSTANCE.convertToDO(productCategoryUpdateDTO); - productCategoryMapper.updateById(updateProductCategory); - // TODO 伟帆 操作日志 - return true; - } - - @Override - public Boolean updateProductCategoryStatus(ProductCategoryUpdateStatusDTO productCategoryUpdateStatusDTO) { - // 校验商品分类是否存在 - ProductCategoryDO productCategoryDO = productCategoryMapper.selectById(productCategoryUpdateStatusDTO.getId()); - if (productCategoryDO == null) { - throw ServiceExceptionUtil.exception(PRODUCT_CATEGORY_NOT_EXISTS); - } - // 判断更新状态是否存在 - if (Arrays.stream(ProductCategoryStatusEnum.ARRAYS).noneMatch(status -> status == productCategoryUpdateStatusDTO.getStatus())) { - throw ServiceExceptionUtil.exception(PRODUCT_CATEGORY_STATUS_NOT_EXISTS); - } - // 如果状态相同,则返回错误 - if (productCategoryDO.getStatus().equals(productCategoryUpdateStatusDTO.getStatus())) { - throw ServiceExceptionUtil.exception(PRODUCT_CATEGORY_STATUS_EQUALS); - } - // 更新商品分类状态 - ProductCategoryDO updateCategoryStatus = ProductCategoryConvert.INSTANCE.convertToDO(productCategoryUpdateStatusDTO); - productCategoryMapper.updateById(updateCategoryStatus); - // TODO 伟帆 操作日志 - return true; - } - - @Override - public Boolean deleteProductCategory(ProductCategoryDeleteDTO productCategoryDeleteDTO) { - Integer productCategoryId = productCategoryDeleteDTO.getId(); - // 校验分类是否存在 - ProductCategoryDO productCategory = productCategoryMapper.selectById(productCategoryId); - if (productCategory == null) { - throw ServiceExceptionUtil.exception(PRODUCT_CATEGORY_NOT_EXISTS); - } - // 只有禁用的商品分类才可以删除 - if (ProductCategoryStatusEnum.ENABLED.getStatus().equals(productCategory.getStatus())) { - throw ServiceExceptionUtil.exception(PRODUCT_CATEGORY_DELETE_ONLY_DISABLE); - } - // 只有不存在子分类才可以删除 - // TODO FROM 芋艿 to jiangweifan:Wrappers 只用在 Mapper 层 [DONE] - Integer childCount = productCategoryMapper.selectChildCategoryCount(productCategoryId); - if (childCount > 0) { - throw ServiceExceptionUtil.exception(PRODUCT_CATEGORY_DELETE_ONLY_NO_CHILD); - } - // TODO 伟帆 补充只有不存在商品才可以删除 - // 标记删除商品分类 - productCategoryMapper.deleteById(productCategoryId); - // TODO 伟帆 操作日志 - return true; - } - - private void validParent(Integer pid) { - if (!ProductCategoryNodeEnum.ROOT.getId().equals(pid)) { - ProductCategoryDO parentCategory = productCategoryMapper.selectById(pid); - // 校验父分类是否存在 - if (parentCategory == null) { - throw ServiceExceptionUtil.exception(PRODUCT_CATEGORY_PARENT_NOT_EXISTS); - } - // 父分类必须是一级分类 - if (!ProductCategoryNodeEnum.ROOT.getId().equals(parentCategory.getPid())) { - throw ServiceExceptionUtil.exception(PRODUCT_CATEGORY_PARENT_CAN_NOT_BE_LEVEL2); - } - } - } - - @Override - public ProductCategoryDO validProductCategory(Integer productCategoryId) { - // 校验分类是否存在 - ProductCategoryDO productCategory = productCategoryMapper.selectById(productCategoryId); - if (productCategory == null) { - throw ServiceExceptionUtil.exception(ProductErrorCodeEnum.PRODUCT_CATEGORY_NOT_EXISTS.getCode()); - } - // 只有禁用的商品分类才可以删除 - if (ProductCategoryStatusEnum.DISABLED.getStatus().equals(productCategory.getStatus())) { - throw ServiceExceptionUtil.exception(ProductErrorCodeEnum.PRODUCT_CATEGORY_MUST_ENABLE.getCode()); - } - // 返回结果 - return productCategory; - } } diff --git a/product/product-mq/pom.xml b/product/product-mq/pom.xml deleted file mode 100644 index 857d7b9c4..000000000 --- a/product/product-mq/pom.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - demo - cn.iocoder.mall - 1.0-SNAPSHOT - - 4.0.0 - - product-mq - - - diff --git a/product/product-mq/src/main/java/cn/iocoder/mall/demo/mq/package-info.java b/product/product-mq/src/main/java/cn/iocoder/mall/demo/mq/package-info.java deleted file mode 100644 index 8172d958c..000000000 --- a/product/product-mq/src/main/java/cn/iocoder/mall/demo/mq/package-info.java +++ /dev/null @@ -1 +0,0 @@ -package cn.iocoder.mall.demo.mq; 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 deleted file mode 100644 index 1818194ef..000000000 --- a/product/product-service-impl/src/main/java/cn/iocoder/mall/product/service/ProductCategoryServiceImpl.java +++ /dev/null @@ -1,154 +0,0 @@ -package cn.iocoder.mall.product.service; - -import cn.iocoder.common.framework.util.ServiceExceptionUtil; -import cn.iocoder.mall.mybatis.core.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; -import cn.iocoder.mall.product.api.constant.ProductErrorCodeEnum; -import cn.iocoder.mall.product.api.dto.ProductCategoryAddDTO; -import cn.iocoder.mall.product.api.dto.ProductCategoryUpdateDTO; -import cn.iocoder.mall.product.convert.ProductCategoryConvert; -import cn.iocoder.mall.product.dao.ProductCategoryMapper; -import cn.iocoder.mall.product.dataobject.ProductCategoryDO; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import java.util.Collection; -import java.util.Date; -import java.util.List; - -@Service // 实际上不用添加。添加的原因是,必须 Spring 报错提示 -@org.apache.dubbo.config.annotation.Service(validation = "true", version = "${dubbo.provider.ProductCategoryService.version}") -public class ProductCategoryServiceImpl implements ProductCategoryService { - - @Autowired - private ProductCategoryMapper productCategoryMapper; - - @Override - public List getListByPid(Integer pid) { - List categoryList = productCategoryMapper.selectListByPidAndStatusOrderBySort(pid, ProductCategoryConstants.STATUS_ENABLE); - return ProductCategoryConvert.INSTANCE.convertToBO(categoryList); - } - - @Override - public List getListByIds(Collection ids) { - List categoryList = productCategoryMapper.selectByIds(ids); - return ProductCategoryConvert.INSTANCE.convertToBO(categoryList); - } - - @Override - public List getAll() { - List categoryList = productCategoryMapper.selectList(); - return ProductCategoryConvert.INSTANCE.convertToBO(categoryList); - } - - @Override - public ProductCategoryBO addProductCategory(Integer adminId, ProductCategoryAddDTO productCategoryAddDTO) { - // 校验父分类 - validParent(productCategoryAddDTO.getPid()); - // 保存到数据库 - ProductCategoryDO productCategory = ProductCategoryConvert.INSTANCE.convert(productCategoryAddDTO) - .setStatus(ProductCategoryConstants.STATUS_ENABLE); - productCategory.setCreateTime(new Date()); - productCategory.setDeleted(DeletedStatusEnum.DELETED_NO.getValue()); - productCategoryMapper.insert(productCategory); - // TODO 操作日志 - // 返回成功 - return ProductCategoryConvert.INSTANCE.convertToBO(productCategory); - } - - @Override - public Boolean updateProductCategory(Integer adminId, ProductCategoryUpdateDTO productCategoryUpdateDTO) { - // 校验父分类 - validParent(productCategoryUpdateDTO.getPid()); - // 校验不能设置自己为父分类 - if (productCategoryUpdateDTO.getId().equals(productCategoryUpdateDTO.getPid())) { - throw ServiceExceptionUtil.exception(ProductErrorCodeEnum.PRODUCT_CATEGORY_PARENT_NOT_SELF.getCode()); - } - // 校验父分类是否存在 - if (!ProductCategoryConstants.PID_ROOT.equals(productCategoryUpdateDTO.getPid()) - && productCategoryMapper.selectById(productCategoryUpdateDTO.getPid()) == null) { - throw ServiceExceptionUtil.exception(ProductErrorCodeEnum.PRODUCT_CATEGORY_PARENT_NOT_EXISTS.getCode()); - } - // 更新到数据库 - ProductCategoryDO updateProductCategory = ProductCategoryConvert.INSTANCE.convert(productCategoryUpdateDTO); - productCategoryMapper.update(updateProductCategory); - // TODO 操作日志 - return true; - } - - @Override - public Boolean updateProductCategoryStatus(Integer adminId, Integer productCategoryId, Integer status) { - // 校验分类是否存在 - ProductCategoryDO productCategory = productCategoryMapper.selectById(productCategoryId); - if (productCategory == null) { - throw ServiceExceptionUtil.exception(ProductErrorCodeEnum.PRODUCT_CATEGORY_NOT_EXISTS.getCode()); - } - // 如果状态相同,则返回错误 - if (productCategory.getStatus().equals(status)) { - throw ServiceExceptionUtil.exception(ProductErrorCodeEnum.PRODUCT_CATEGORY_STATUS_EQUALS.getCode()); - } - // 更新商品分类 - ProductCategoryDO updateProductCategory = new ProductCategoryDO() - .setId(productCategoryId).setStatus(status); - productCategoryMapper.update(updateProductCategory); - // TODO 操作日志 - return true; - } - - @Override - public Boolean deleteProductCategory(Integer admin, Integer productCategoryId) { - // 校验分类是否存在 - ProductCategoryDO productCategory = productCategoryMapper.selectById(productCategoryId); - if (productCategory == null) { - throw ServiceExceptionUtil.exception(ProductErrorCodeEnum.PRODUCT_CATEGORY_NOT_EXISTS.getCode()); - } - // 只有禁用的商品分类才可以删除 - if (ProductCategoryConstants.STATUS_ENABLE.equals(productCategory.getStatus())) { - throw ServiceExceptionUtil.exception(ProductErrorCodeEnum.PRODUCT_CATEGORY_DELETE_ONLY_DISABLE.getCode()); - } - // TODO 芋艿:考虑下,是否需要判断下该分类下是否有商品 - // TODO 芋艿,需要补充下,还有子分类 - // 标记删除商品分类 - ProductCategoryDO updateProductCategory = new ProductCategoryDO() - .setId(productCategoryId); - updateProductCategory.setDeleted(DeletedStatusEnum.DELETED_YES.getValue()); - productCategoryMapper.update(updateProductCategory); - // TODO 操作日志 - return true; - } - - public ProductCategoryDO getProductCategory(Integer productCategoryId) { - return productCategoryMapper.selectById(productCategoryId); - } - - public ProductCategoryDO validProductCategory(Integer productCategoryId) { - // 校验分类是否存在 - ProductCategoryDO productCategory = productCategoryMapper.selectById(productCategoryId); - if (productCategory == null) { - throw ServiceExceptionUtil.exception(ProductErrorCodeEnum.PRODUCT_CATEGORY_NOT_EXISTS.getCode()); - } - // 只有禁用的商品分类才可以删除 - if (ProductCategoryConstants.STATUS_DISABLE.equals(productCategory.getStatus())) { - throw ServiceExceptionUtil.exception(ProductErrorCodeEnum.PRODUCT_CATEGORY_MUST_ENABLE.getCode()); - } - // 返回结果 - return productCategory; - } - - private void validParent(Integer pid) { - if (!ProductCategoryConstants.PID_ROOT.equals(pid)) { - ProductCategoryDO parentCategory = productCategoryMapper.selectById(pid); - // 校验父分类是否存在 - if (parentCategory == null) { - throw ServiceExceptionUtil.exception(ProductErrorCodeEnum.PRODUCT_CATEGORY_PARENT_NOT_EXISTS.getCode()); - } - // 父分类必须是一级分类 - if (!ProductCategoryConstants.PID_ROOT.equals(parentCategory.getPid())) { - throw ServiceExceptionUtil.exception((ProductErrorCodeEnum.PRODUCT_CATEGORY_PARENT_CAN_NOT_BE_LEVEL2.getCode())); - } - } - } - -} diff --git a/system-service-project/system-service-api/src/main/java/cn/iocoder/mall/systemservice/enums/permission/ResourceIdEnum.java b/system-service-project/system-service-api/src/main/java/cn/iocoder/mall/systemservice/enums/permission/ResourceIdEnum.java index 3b48a3eb8..69ce57a37 100644 --- a/system-service-project/system-service-api/src/main/java/cn/iocoder/mall/systemservice/enums/permission/ResourceIdEnum.java +++ b/system-service-project/system-service-api/src/main/java/cn/iocoder/mall/systemservice/enums/permission/ResourceIdEnum.java @@ -3,7 +3,7 @@ package cn.iocoder.mall.systemservice.enums.permission; /** * Resource 编号枚举 */ -public enum ResourceIdEnum { +public enum ResourceIdEnum { /** * 根节点 diff --git a/system-service-project/system-service-app/pom.xml b/system-service-project/system-service-app/pom.xml index 740786b84..58dafdfc7 100644 --- a/system-service-project/system-service-app/pom.xml +++ b/system-service-project/system-service-app/pom.xml @@ -40,14 +40,6 @@ mysql-connector-java - - org.springframework - spring-tx - - - org.springframework - spring-jdbc - com.alibaba druid-spring-boot-starter diff --git a/user-web-app/src/main/java/cn/iocoder/mall/userweb/controller/address/AddressController.http b/user-web-app/src/main/java/cn/iocoder/mall/userweb/controller/address/AddressController.http new file mode 100644 index 000000000..440a895ef --- /dev/null +++ b/user-web-app/src/main/java/cn/iocoder/mall/userweb/controller/address/AddressController.http @@ -0,0 +1,5 @@ +### /user-address/get-default 成功 +GET {{user-api-base-url}}/user-address/get-default +Authorization: Bearer {{user-access-token}} + +### diff --git a/user-web-app/src/main/java/cn/iocoder/mall/userweb/controller/address/UserAddressController.java b/user-web-app/src/main/java/cn/iocoder/mall/userweb/controller/address/UserAddressController.java index d22d56210..f1ec7ab71 100644 --- a/user-web-app/src/main/java/cn/iocoder/mall/userweb/controller/address/UserAddressController.java +++ b/user-web-app/src/main/java/cn/iocoder/mall/userweb/controller/address/UserAddressController.java @@ -63,6 +63,13 @@ public class UserAddressController { return success(userAddressManager.getUserAddress(UserSecurityContextHolder.getUserId(), userAddressId)); } + @GetMapping("/get-default") + @ApiOperation("获得默认的用户收件地址") + @RequiresPermissions + public CommonResult getDefaultUserAddress() { + return success(userAddressManager.getDefaultUserAddress(UserSecurityContextHolder.getUserId())); + } + @GetMapping("/list") @ApiOperation("获得用户收件地址列表") @RequiresPermissions diff --git a/user-web-app/src/main/java/cn/iocoder/mall/userweb/manager/address/UserAddressManager.java b/user-web-app/src/main/java/cn/iocoder/mall/userweb/manager/address/UserAddressManager.java index de5657c31..940bd1c76 100644 --- a/user-web-app/src/main/java/cn/iocoder/mall/userweb/manager/address/UserAddressManager.java +++ b/user-web-app/src/main/java/cn/iocoder/mall/userweb/manager/address/UserAddressManager.java @@ -1,7 +1,9 @@ package cn.iocoder.mall.userweb.manager.address; import cn.iocoder.common.framework.exception.GlobalException; +import cn.iocoder.common.framework.util.CollectionUtils; import cn.iocoder.common.framework.vo.CommonResult; +import cn.iocoder.mall.userservice.enums.address.UserAddressType; import cn.iocoder.mall.userservice.rpc.address.UserAddressRpc; import cn.iocoder.mall.userservice.rpc.address.dto.UserAddressRespDTO; import cn.iocoder.mall.userweb.controller.address.vo.UserAddressCreateReqVO; @@ -48,7 +50,8 @@ public class UserAddressManager { // 校验是否能够操作 check(userId, updateVO.getId()); // 执行更新 - CommonResult updateUserAddressResult = userAddressRpc.updateUserAddress(UserAddressConvert.INSTANCE.convert(updateVO)); + CommonResult updateUserAddressResult = userAddressRpc.updateUserAddress(UserAddressConvert.INSTANCE.convert(updateVO) + .setUserId(userId)); updateUserAddressResult.checkError(); } @@ -93,6 +96,19 @@ public class UserAddressManager { return UserAddressConvert.INSTANCE.convertList(listUserAddressResult.getData()); } + /** + * 获得用户的默认收件地址 + * + * @param userId 用户编号 + * @return 用户收件地址 + */ + public UserAddressRespVO getDefaultUserAddress(Integer userId) { + CommonResult> listUserAddressResult = userAddressRpc.listUserAddresses(userId, UserAddressType.DEFAULT.getType()); + listUserAddressResult.checkError(); + return !CollectionUtils.isEmpty(listUserAddressResult.getData()) ? + UserAddressConvert.INSTANCE.convert(listUserAddressResult.getData().get(0)) : null; + } + /** * 校验用户收件地址是不是属于该用户 * diff --git a/user/user-rest/pom.xml b/user/user-rest/pom.xml deleted file mode 100644 index 88bfd5d54..000000000 --- a/user/user-rest/pom.xml +++ /dev/null @@ -1,41 +0,0 @@ - - - - user - cn.iocoder.mall - 1.0-SNAPSHOT - - 4.0.0 - - user-rest - - - - - cn.iocoder.mall - user-biz - 1.0-SNAPSHOT - compile - - - - - cn.iocoder.mall - mall-spring-boot-starter-web - 1.0-SNAPSHOT - - - cn.iocoder.mall - mall-spring-boot-starter-security - 1.0-SNAPSHOT - - - cn.iocoder.mall - mall-spring-boot-starter-swagger - 1.0-SNAPSHOT - - - - 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 deleted file mode 100644 index 65d19c730..000000000 --- a/user/user-rest/src/main/java/cn/iocoder/mall/user/rest/controller/user/UsersUserAddressController.java +++ /dev/null @@ -1,81 +0,0 @@ -package cn.iocoder.mall.user.rest.controller.user; - -import cn.iocoder.common.framework.vo.CommonResult; -import cn.iocoder.mall.security.core.context.UserSecurityContextHolder; -import cn.iocoder.mall.user.biz.dto.user.UserAddressAddDTO; -import cn.iocoder.mall.user.biz.dto.user.UserAddressUpdateDTO; -import cn.iocoder.mall.user.biz.service.user.UserAddressService; -import cn.iocoder.mall.user.rest.convert.UserAddressConvert; -import cn.iocoder.mall.user.rest.request.user.UserAddressAddRequest; -import cn.iocoder.mall.user.rest.request.user.UserAddressUpdateRequest; -import cn.iocoder.mall.user.rest.response.user.UserAddressResponse; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; - -import javax.validation.Valid; -import java.util.List; - -/** - * 用户地址(user API) - * - * author: sin - * time: 2020/5/8 9:50 - */ -@RestController -@Api(tags = "用户地址(user API)") // TODO FROM 芋艿 to 小范:"管理员 - 管理员 API" 按照类似酱紫的格式哈。= = 虽然我也没想太好格式。 -@RequestMapping("/users/user-address") -public class UsersUserAddressController { - - @Autowired - private UserAddressService userAddressService; - - @GetMapping("list-address") - @ApiOperation("获取 - 地址列表(all)") - public CommonResult> listAddress() { - Integer userId = UserSecurityContextHolder.getContext().getUserId(); - return CommonResult.success(UserAddressConvert.INSTANCE.convert(userAddressService.listAddress(userId))); - } - - @GetMapping("{addressId}") - @ApiOperation("获取 - 根据id获取") - public CommonResult getAddress(@PathVariable("addressId") Integer addressId) { - return CommonResult.success(UserAddressConvert.INSTANCE.convert(userAddressService.getAddress(addressId))); - } - - @GetMapping("default") - @ApiOperation("获取 - 获取默认地址") - public CommonResult getDefaultAddress() { - Integer userId = UserSecurityContextHolder.getContext().getUserId(); - return CommonResult.success(UserAddressConvert.INSTANCE.convert(userAddressService.getDefaultAddress(userId))); - } - - @DeleteMapping("/{addressId}/remove") - @ApiOperation("删除 - 根据id删除") - public CommonResult getDefaultAddress(@PathVariable("addressId") Integer addressId) { - Integer userId = UserSecurityContextHolder.getContext().getUserId(); - userAddressService.removeAddress(userId, addressId); - return CommonResult.success(null); - } - - @PostMapping("/add-address") - @ApiOperation("添加地址") - public CommonResult addAddress(@RequestBody @Valid UserAddressAddRequest userAddressAddRequest) { - Integer userId = UserSecurityContextHolder.getContext().getUserId(); - UserAddressAddDTO userAddressAddDTO = UserAddressConvert.INSTANCE.convert(userAddressAddRequest); - userAddressAddDTO.setUserId(userId); - userAddressService.addAddress(userAddressAddDTO); - return CommonResult.success(null); - } - - @PutMapping("/update-address") - @ApiOperation("更新地址") - public CommonResult updateAddress(@RequestBody @Valid UserAddressUpdateRequest userAddressAddRequest) { - Integer userId = UserSecurityContextHolder.getContext().getUserId(); - UserAddressUpdateDTO userAddressAddDTO = UserAddressConvert.INSTANCE.convert(userAddressAddRequest); - userAddressAddDTO.setUserId(userId); - userAddressService.updateAddress(userAddressAddDTO); - return CommonResult.success(null); - } -} diff --git a/user/user-rest/src/main/java/cn/iocoder/mall/user/rest/request/user/UserAddressAddRequest.java b/user/user-rest/src/main/java/cn/iocoder/mall/user/rest/request/user/UserAddressAddRequest.java deleted file mode 100644 index 05353b9f0..000000000 --- a/user/user-rest/src/main/java/cn/iocoder/mall/user/rest/request/user/UserAddressAddRequest.java +++ /dev/null @@ -1,41 +0,0 @@ -package cn.iocoder.mall.user.rest.request.user; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import lombok.experimental.Accessors; - -import javax.validation.constraints.NotNull; -import java.io.Serializable; - -/** - * 用户地址 add - * - * @author Sin - * @time 2019-04-06 13:25 - */ -@Data -@Accessors(chain = true) -@ApiModel("用户地址(添加)") -public class UserAddressAddRequest implements Serializable { - - @NotNull - @ApiModelProperty("收件区域编号") - private String areaNo; - - @NotNull - @ApiModelProperty("收件人名称") - private String name; - - @NotNull - @ApiModelProperty("收件手机号") - private String mobile; - - @NotNull - @ApiModelProperty("收件详细地址") - private String address; - - @NotNull - @ApiModelProperty("是否默认 1 不是 2 是") - private Integer hasDefault; -} diff --git a/user/user-rest/src/main/java/cn/iocoder/mall/user/rest/request/user/UserAddressUpdateRequest.java b/user/user-rest/src/main/java/cn/iocoder/mall/user/rest/request/user/UserAddressUpdateRequest.java deleted file mode 100644 index e443db1a7..000000000 --- a/user/user-rest/src/main/java/cn/iocoder/mall/user/rest/request/user/UserAddressUpdateRequest.java +++ /dev/null @@ -1,45 +0,0 @@ -package cn.iocoder.mall.user.rest.request.user; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import lombok.experimental.Accessors; - -import javax.validation.constraints.NotNull; -import java.io.Serializable; - -/** - * 用户地址 更新 - * - * @author Sin - * @time 2019-04-06 13:28 - */ -@Data -@Accessors(chain = true) -@ApiModel("用户地址(更新)") -public class UserAddressUpdateRequest implements Serializable { - - @NotNull - @ApiModelProperty("编号") - private Integer id; - - @NotNull - @ApiModelProperty("收件区域编号") - private String areaNo; - - @NotNull - @ApiModelProperty("收件人名称") - private String name; - - @NotNull - @ApiModelProperty("收件手机号") - private String mobile; - - @NotNull - @ApiModelProperty("收件详细地址") - private String address; - - @NotNull - @ApiModelProperty("是否默认地址") - private Integer hasDefault; -} diff --git a/user/user-rest/src/main/java/cn/iocoder/mall/user/rest/response/user/UserAddressResponse.java b/user/user-rest/src/main/java/cn/iocoder/mall/user/rest/response/user/UserAddressResponse.java deleted file mode 100644 index 0de88b4cd..000000000 --- a/user/user-rest/src/main/java/cn/iocoder/mall/user/rest/response/user/UserAddressResponse.java +++ /dev/null @@ -1,41 +0,0 @@ -package cn.iocoder.mall.user.rest.response.user; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import lombok.experimental.Accessors; - -import java.io.Serializable; - -/** - * 用户地址 - * - * @author Sin - * @time 2019-04-06 13:28 - */ -@Data -@Accessors(chain = true) -@ApiModel(value = "用户地址") -public class UserAddressResponse implements Serializable { - - @ApiModelProperty("编号") - private Integer id; - - @ApiModelProperty("用户编号") - private Integer userId; - - @ApiModelProperty("收件区域编号") - private String areaNo; - - @ApiModelProperty("收件人名称") - private String name; - - @ApiModelProperty("收件手机号") - private String mobile; - - @ApiModelProperty("收件详细地址") - private String address; - - @ApiModelProperty("是否默认") - private Integer hasDefault; -} From a99afdc833a2f917fed37dfde66e562f76647367 Mon Sep 17 00:00:00 2001 From: YunaiV <> Date: Sat, 25 Jul 2020 00:10:10 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E5=95=86=E5=93=81=E5=88=86=E7=B1=BB?= =?UTF-8?q?=E7=9A=84=E8=BF=81=E7=A7=BB=EF=BC=8C=E7=BB=A7=E7=BB=AD=E6=9C=AA?= =?UTF-8?q?=E5=AE=8C=E6=88=90=EF=BC=8C=E7=BB=A7=E7=BB=AD=E5=85=88=E6=8F=90?= =?UTF-8?q?=E4=BA=A4=E4=B8=8B~?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- management-web-app/pom.xml | 6 + .../product/ProductCategoryController.java | 54 +++++++++ .../category/ProductCategoryCreateReqVO.java | 34 ++++++ .../vo/category/ProductCategoryRespVO.java | 26 +++++ .../ProductCategoryTreeNodeRespVO.java | 33 ++++++ .../category/ProductCategoryUpdateReqVO.java | 37 ++++++ .../product/ProductCategoryConvert.java | 26 +++++ .../product/ProductCategoryManager.java | 106 ++++++++++++++++++ .../src/main/resources/application.yml | 2 + .../rpc/category/ProductCategoryRpc.java | 61 ++++++++++ .../dto/ProductCategoryCreateReqDTO.java | 49 ++++++++ .../dto/ProductCategoryListQueryReqDTO.java | 18 +++ .../category/dto/ProductCategoryRespDTO.java | 22 ++-- .../dto/ProductCategoryUpdateReqDTO.java | 54 +++++++++ .../category/ProductCategoryConvert.java | 15 +++ .../category/ProductCategoryDO.java | 2 +- .../category/ProductCategoryMapper.java | 8 ++ .../category/ProductCategoryManager.java | 86 ++++++++++++++ .../rpc/category/ProductCategoryRpcImpl.java | 57 ++++++++++ .../category/ProductCategoryService.java | 49 ++++---- .../category/bo/ProductCategoryBO.java | 2 +- .../category/bo/ProductCategoryCreateBO.java | 2 +- .../bo/ProductCategoryListQueryBO.java | 18 +++ .../category/bo/ProductCategoryUpdateBO.java | 2 +- .../mall/product/biz/bo/package-info.java | 5 - .../biz/config/DatabaseConfiguration.java | 26 ----- .../category/ProductCategoryConvert.java | 58 ---------- .../product/biz/convert/package-info.java | 5 - .../dao/category/ProductCategoryMapper.java | 25 ----- .../mall/product/biz/dao/package-info.java | 5 - .../category/ProductCategoryDO.java | 50 --------- .../product/biz/dataobject/package-info.java | 5 - .../dto/category/ProductCategoryAddDTO.java | 48 -------- .../category/ProductCategoryDeleteDTO.java | 28 ----- .../category/ProductCategoryUpdateDTO.java | 52 --------- .../ProductCategoryUpdateStatusDTO.java | 33 ------ .../category/ProductCategoryService.java | 69 ------------ .../category/ProductCategoryServiceImpl.java | 42 ------- .../product/biz/service/package-info.java | 5 - .../AdminsProductCategoryConvert.java | 69 ------------ .../AdminsProductCategoryAddRequest.java | 38 ------- .../AdminsProductCategoryUpdateRequest.java | 42 ------- ...insProductCategoryUpdateStatusRequest.java | 27 ----- .../service/permission/ResourceService.java | 4 +- 44 files changed, 731 insertions(+), 674 deletions(-) create mode 100644 management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/product/ProductCategoryController.java create mode 100644 management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/product/vo/category/ProductCategoryCreateReqVO.java create mode 100644 management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/product/vo/category/ProductCategoryRespVO.java create mode 100644 management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/product/vo/category/ProductCategoryTreeNodeRespVO.java create mode 100644 management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/product/vo/category/ProductCategoryUpdateReqVO.java create mode 100644 management-web-app/src/main/java/cn/iocoder/mall/managementweb/convert/product/ProductCategoryConvert.java create mode 100644 management-web-app/src/main/java/cn/iocoder/mall/managementweb/manager/product/ProductCategoryManager.java create mode 100644 product-service-project/product-service-api/src/main/java/cn/iocoder/mall/productservice/rpc/category/ProductCategoryRpc.java create mode 100644 product-service-project/product-service-api/src/main/java/cn/iocoder/mall/productservice/rpc/category/dto/ProductCategoryCreateReqDTO.java create mode 100644 product-service-project/product-service-api/src/main/java/cn/iocoder/mall/productservice/rpc/category/dto/ProductCategoryListQueryReqDTO.java rename product/product-biz/src/main/java/cn/iocoder/mall/product/biz/bo/category/ProductCategoryBO.java => product-service-project/product-service-api/src/main/java/cn/iocoder/mall/productservice/rpc/category/dto/ProductCategoryRespDTO.java (63%) create mode 100644 product-service-project/product-service-api/src/main/java/cn/iocoder/mall/productservice/rpc/category/dto/ProductCategoryUpdateReqDTO.java create mode 100644 product-service-project/product-service-app/src/main/java/cn/iocoder/mall/productservice/manager/category/ProductCategoryManager.java create mode 100644 product-service-project/product-service-app/src/main/java/cn/iocoder/mall/productservice/rpc/category/ProductCategoryRpcImpl.java create mode 100644 product-service-project/product-service-app/src/main/java/cn/iocoder/mall/productservice/service/category/bo/ProductCategoryListQueryBO.java delete mode 100644 product/product-biz/src/main/java/cn/iocoder/mall/product/biz/bo/package-info.java delete mode 100644 product/product-biz/src/main/java/cn/iocoder/mall/product/biz/config/DatabaseConfiguration.java delete mode 100644 product/product-biz/src/main/java/cn/iocoder/mall/product/biz/convert/category/ProductCategoryConvert.java delete mode 100644 product/product-biz/src/main/java/cn/iocoder/mall/product/biz/convert/package-info.java delete mode 100644 product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dao/category/ProductCategoryMapper.java delete mode 100644 product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dao/package-info.java delete mode 100644 product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dataobject/category/ProductCategoryDO.java delete mode 100644 product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dataobject/package-info.java delete mode 100644 product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/category/ProductCategoryAddDTO.java delete mode 100644 product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/category/ProductCategoryDeleteDTO.java delete mode 100644 product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/category/ProductCategoryUpdateDTO.java delete mode 100644 product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/category/ProductCategoryUpdateStatusDTO.java delete mode 100644 product/product-biz/src/main/java/cn/iocoder/mall/product/biz/service/category/ProductCategoryService.java delete mode 100644 product/product-biz/src/main/java/cn/iocoder/mall/product/biz/service/category/ProductCategoryServiceImpl.java delete mode 100644 product/product-biz/src/main/java/cn/iocoder/mall/product/biz/service/package-info.java delete mode 100644 product/product-rest/src/main/java/cn/iocoder/mall/product/rest/convert/category/AdminsProductCategoryConvert.java delete mode 100644 product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/category/AdminsProductCategoryAddRequest.java delete mode 100644 product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/category/AdminsProductCategoryUpdateRequest.java delete mode 100644 product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/category/AdminsProductCategoryUpdateStatusRequest.java diff --git a/management-web-app/pom.xml b/management-web-app/pom.xml index 70ef8d3eb..2a1025e36 100644 --- a/management-web-app/pom.xml +++ b/management-web-app/pom.xml @@ -60,6 +60,12 @@ system-service-api 1.0-SNAPSHOT + + + cn.iocoder.mall + product-service-api + 1.0-SNAPSHOT + diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/product/ProductCategoryController.java b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/product/ProductCategoryController.java new file mode 100644 index 000000000..5b12cfa7f --- /dev/null +++ b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/product/ProductCategoryController.java @@ -0,0 +1,54 @@ +package cn.iocoder.mall.managementweb.controller.product; + +import cn.iocoder.common.framework.vo.CommonResult; +import cn.iocoder.mall.managementweb.controller.product.vo.category.ProductCategoryCreateReqVO; +import cn.iocoder.mall.managementweb.controller.product.vo.category.ProductCategoryUpdateReqVO; +import cn.iocoder.mall.managementweb.manager.product.ProductCategoryManager; +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.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import javax.validation.Valid; + +import static cn.iocoder.common.framework.vo.CommonResult.success; + +/** +* 商品分类 Controller +*/ +@RestController +@RequestMapping("/product_category") +@Api(tags = "商品分类") +@Validated +public class ProductCategoryController { + + @Autowired + private ProductCategoryManager productCategoryManager; + + @PostMapping("/create") + @ApiOperation("创建商品分类") + public CommonResult createProductCategory(@Valid ProductCategoryCreateReqVO createVO) { + return success(productCategoryManager.createProductCategory(createVO)); + } + + @PostMapping("/update") + @ApiOperation("更新商品分类") + public CommonResult updateProductCategory(@Valid ProductCategoryUpdateReqVO updateVO) { + productCategoryManager.updateProductCategory(updateVO); + return success(true); + } + + @PostMapping("/delete") + @ApiOperation("删除商品分类") + @ApiImplicitParam(name = "productCategoryId", value = "商品分类编号", required = true) + public CommonResult deleteProductCategory(@RequestParam("productCategoryId") Integer productCategoryId) { + productCategoryManager.deleteProductCategory(productCategoryId); + return success(true); + } + +} diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/product/vo/category/ProductCategoryCreateReqVO.java b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/product/vo/category/ProductCategoryCreateReqVO.java new file mode 100644 index 000000000..bb5535e2b --- /dev/null +++ b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/product/vo/category/ProductCategoryCreateReqVO.java @@ -0,0 +1,34 @@ +package cn.iocoder.mall.managementweb.controller.product.vo.category; + +import cn.iocoder.common.framework.enums.CommonStatusEnum; +import cn.iocoder.common.framework.validator.InEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; + +@ApiModel("商品分类创建 Request VO") +@Data +public class ProductCategoryCreateReqVO { + + @ApiModelProperty(value = "父分类编号", required = true, example = "0") + @NotNull(message = "父分类编号不能为空") + private Integer pid; + @ApiModelProperty(value = "分类名称", required = true, example = "手机") + @NotEmpty(message = "分类名称不能为空") + private String name; + @ApiModelProperty(value = "分类描述", required = true, example = "这个商品很吊") + private String description; + @ApiModelProperty(value = "分类图片", notes = "一般情况下,只有根分类才有图片", example = "http://www.iocoder.cn/xx.jpg") + private String picUrl; + @ApiModelProperty(value = "分类排序", required = true, example = "10") + @NotNull(message = "分类排序不能为空") + private Integer sort; + @ApiModelProperty(value = "状态", required = true, example = "1", notes = "见 CommonStatusEnum 枚举") + @NotNull(message = "状态不能为空") + @InEnum(value = CommonStatusEnum.class, message = "修改状态必须是 {value}") + private Integer status; + +} diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/product/vo/category/ProductCategoryRespVO.java b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/product/vo/category/ProductCategoryRespVO.java new file mode 100644 index 000000000..e345d0cd4 --- /dev/null +++ b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/product/vo/category/ProductCategoryRespVO.java @@ -0,0 +1,26 @@ +package cn.iocoder.mall.managementweb.controller.product.vo.category; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@ApiModel("商品分类 Response VO") +@Data +public class ProductCategoryRespVO { + + @ApiModelProperty(value = "分类编号", required = true, example = "1") + private Integer id; + @ApiModelProperty(value = "父分类编号", required = true, example = "0") + private Integer pid; + @ApiModelProperty(value = "分类名称", required = true, example = "手机") + private String name; + @ApiModelProperty(value = "分类描述", required = true, example = "这个商品很吊") + private String description; + @ApiModelProperty(value = "分类图片", notes = "一般情况下,只有根分类才有图片", example = "http://www.iocoder.cn/xx.jpg") + private String picUrl; + @ApiModelProperty(value = "分类排序", required = true, example = "10") + private Integer sort; + @ApiModelProperty(value = "状态", required = true, example = "1", notes = "见 CommonStatusEnum 枚举") + private Integer status; + +} diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/product/vo/category/ProductCategoryTreeNodeRespVO.java b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/product/vo/category/ProductCategoryTreeNodeRespVO.java new file mode 100644 index 000000000..503e3edd7 --- /dev/null +++ b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/product/vo/category/ProductCategoryTreeNodeRespVO.java @@ -0,0 +1,33 @@ +package cn.iocoder.mall.managementweb.controller.product.vo.category; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@ApiModel("商品分类 Response VO") +@Data +public class ProductCategoryTreeNodeRespVO { + + @ApiModelProperty(value = "分类编号", required = true, example = "1") + private Integer id; + @ApiModelProperty(value = "父分类编号", required = true, example = "0") + private Integer pid; + @ApiModelProperty(value = "分类名称", required = true, example = "手机") + private String name; + @ApiModelProperty(value = "分类描述", required = true, example = "这个商品很吊") + private String description; + @ApiModelProperty(value = "分类图片", notes = "一般情况下,只有根分类才有图片", example = "http://www.iocoder.cn/xx.jpg") + private String picUrl; + @ApiModelProperty(value = "分类排序", required = true, example = "10") + private Integer sort; + @ApiModelProperty(value = "状态", required = true, example = "1", notes = "见 CommonStatusEnum 枚举") + private Integer status; + + /** + * 子节点 + */ + private List children; + +} diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/product/vo/category/ProductCategoryUpdateReqVO.java b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/product/vo/category/ProductCategoryUpdateReqVO.java new file mode 100644 index 000000000..dd358ef00 --- /dev/null +++ b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/controller/product/vo/category/ProductCategoryUpdateReqVO.java @@ -0,0 +1,37 @@ +package cn.iocoder.mall.managementweb.controller.product.vo.category; + +import cn.iocoder.common.framework.enums.CommonStatusEnum; +import cn.iocoder.common.framework.validator.InEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; + +@ApiModel("商品分类更新 Request VO") +@Data +public class ProductCategoryUpdateReqVO { + + @ApiModelProperty(value = "分类编号", required = true, example = "1") + @NotNull(message = "分类编号不能为空") + private Integer id; + @ApiModelProperty(value = "父分类编号", required = true, example = "0") + @NotNull(message = "父分类编号不能为空") + private Integer pid; + @ApiModelProperty(value = "分类名称", required = true, example = "手机") + @NotEmpty(message = "分类名称不能为空") + private String name; + @ApiModelProperty(value = "分类描述", required = true, example = "这个商品很吊") + private String description; + @ApiModelProperty(value = "分类图片", notes = "一般情况下,只有根分类才有图片", example = "http://www.iocoder.cn/xx.jpg") + private String picUrl; + @ApiModelProperty(value = "分类排序", required = true, example = "10") + @NotNull(message = "分类排序不能为空") + private Integer sort; + @ApiModelProperty(value = "状态", required = true, example = "1", notes = "见 CommonStatusEnum 枚举") + @NotNull(message = "状态不能为空") + @InEnum(value = CommonStatusEnum.class, message = "修改状态必须是 {value}") + private Integer status; + +} diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/convert/product/ProductCategoryConvert.java b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/convert/product/ProductCategoryConvert.java new file mode 100644 index 000000000..570c86567 --- /dev/null +++ b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/convert/product/ProductCategoryConvert.java @@ -0,0 +1,26 @@ +package cn.iocoder.mall.managementweb.convert.product; + +import cn.iocoder.mall.managementweb.controller.product.vo.category.ProductCategoryCreateReqVO; +import cn.iocoder.mall.managementweb.controller.product.vo.category.ProductCategoryRespVO; +import cn.iocoder.mall.managementweb.controller.product.vo.category.ProductCategoryTreeNodeRespVO; +import cn.iocoder.mall.managementweb.controller.product.vo.category.ProductCategoryUpdateReqVO; +import cn.iocoder.mall.productservice.rpc.category.dto.ProductCategoryCreateReqDTO; +import cn.iocoder.mall.productservice.rpc.category.dto.ProductCategoryRespDTO; +import cn.iocoder.mall.productservice.rpc.category.dto.ProductCategoryUpdateReqDTO; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +@Mapper +public interface ProductCategoryConvert { + + ProductCategoryConvert INSTANCE = Mappers.getMapper(ProductCategoryConvert.class); + + ProductCategoryCreateReqDTO convert(ProductCategoryCreateReqVO bean); + + ProductCategoryUpdateReqDTO convert(ProductCategoryUpdateReqVO bean); + + ProductCategoryRespVO convert(ProductCategoryRespDTO bean); + + ProductCategoryTreeNodeRespVO convertTreeNode(ProductCategoryRespDTO bean); + +} diff --git a/management-web-app/src/main/java/cn/iocoder/mall/managementweb/manager/product/ProductCategoryManager.java b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/manager/product/ProductCategoryManager.java new file mode 100644 index 000000000..59ffbb490 --- /dev/null +++ b/management-web-app/src/main/java/cn/iocoder/mall/managementweb/manager/product/ProductCategoryManager.java @@ -0,0 +1,106 @@ +package cn.iocoder.mall.managementweb.manager.product; + +import cn.iocoder.common.framework.vo.CommonResult; +import cn.iocoder.mall.managementweb.controller.product.vo.category.ProductCategoryCreateReqVO; +import cn.iocoder.mall.managementweb.controller.product.vo.category.ProductCategoryTreeNodeRespVO; +import cn.iocoder.mall.managementweb.controller.product.vo.category.ProductCategoryUpdateReqVO; +import cn.iocoder.mall.managementweb.convert.product.ProductCategoryConvert; +import cn.iocoder.mall.productservice.enums.category.ProductCategoryIdEnum; +import cn.iocoder.mall.productservice.rpc.category.ProductCategoryRpc; +import cn.iocoder.mall.productservice.rpc.category.dto.ProductCategoryListQueryReqDTO; +import cn.iocoder.mall.productservice.rpc.category.dto.ProductCategoryRespDTO; +import lombok.extern.slf4j.Slf4j; +import org.apache.dubbo.config.annotation.Reference; +import org.springframework.stereotype.Service; + +import java.util.*; +import java.util.stream.Collectors; + +/** +* 商品分类表 Manager +*/ +@Service +@Slf4j +public class ProductCategoryManager { + + @Reference(version = "${dubbo.consumer.ProductCategoryRpc.version}") + private ProductCategoryRpc productCategoryRpc; + + /** + * 创建商品分类表 + * + * @param createVO 创建商品分类表 VO + * @return 商品分类表 + */ + public Integer createProductCategory(ProductCategoryCreateReqVO createVO) { + CommonResult createProductCategoryResult = productCategoryRpc.createProductCategory(ProductCategoryConvert.INSTANCE.convert(createVO)); + createProductCategoryResult.checkError(); + return createProductCategoryResult.getData(); + } + + /** + * 更新商品分类表 + * + * @param updateVO 更新商品分类表 VO + */ + public void updateProductCategory(ProductCategoryUpdateReqVO updateVO) { + CommonResult updateProductCategoryResult = productCategoryRpc.updateProductCategory(ProductCategoryConvert.INSTANCE.convert(updateVO)); + updateProductCategoryResult.checkError(); + } + + /** + * 删除商品分类表 + * + * @param productCategoryId 商品分类表编号 + */ + public void deleteProductCategory(Integer productCategoryId) { + CommonResult deleteProductCategoryResult = productCategoryRpc.deleteProductCategory(productCategoryId); + deleteProductCategoryResult.checkError(); + } + + /** + * 获得商品分类树结构 + * + * @return 商品分类树结构 + */ + public List treeProductCategory() { + // 获得商品分类全列表 + CommonResult> listProductCategories = productCategoryRpc.listProductCategories(new ProductCategoryListQueryReqDTO()); + listProductCategories.checkError(); + // 构建菜单树 + return buildProductCategoryTree(listProductCategories.getData()); + } + + /** + * 构建商品分类树 + * + * @param productCategories 商品分类列表 + * @return 商品分类树 + */ + private static List buildProductCategoryTree(List productCategories) { + // 排序,保证菜单的有序性 + productCategories.sort(Comparator.comparing(ProductCategoryRespDTO::getSort)); + // 构建菜单树 + // 使用 LinkedHashMap 的原因,是为了排序 。实际也可以用 Stream API ,就是太丑了。 + Map treeNodeMap = new LinkedHashMap<>(); + productCategories.forEach(category -> treeNodeMap.put(category.getId(), ProductCategoryConvert.INSTANCE.convertTreeNode(category))); + // 处理父子关系 + treeNodeMap.values().stream().filter(node -> !node.getPid().equals(ProductCategoryIdEnum.ROOT.getId())).forEach((childNode) -> { + // 获得父节点 + ProductCategoryTreeNodeRespVO parentNode = treeNodeMap.get(childNode.getPid()); + if (parentNode == null) { + log.error("[buildProductCategoryTree][category({}) 找不到父商品分类({})]", childNode.getId(), childNode.getPid()); + return; + } + // 将自己添加到父节点中 + if (parentNode.getChildren() == null) { + parentNode.setChildren(new ArrayList<>()); + } + parentNode.getChildren().add(childNode); + }); + // 获得到所有的根节点 + return treeNodeMap.values().stream().filter(node -> node.getPid().equals(ProductCategoryIdEnum.ROOT.getId())) + .collect(Collectors.toList()); + } + +} diff --git a/management-web-app/src/main/resources/application.yml b/management-web-app/src/main/resources/application.yml index 0a24c2fd0..181ad02bc 100644 --- a/management-web-app/src/main/resources/application.yml +++ b/management-web-app/src/main/resources/application.yml @@ -49,6 +49,8 @@ dubbo: version: 1.0.0 ErrorCodeRpc: version: 1.0.0 + ProductCategoryRpc: + version: 1.0.0 # Swagger 配置项 swagger: diff --git a/product-service-project/product-service-api/src/main/java/cn/iocoder/mall/productservice/rpc/category/ProductCategoryRpc.java b/product-service-project/product-service-api/src/main/java/cn/iocoder/mall/productservice/rpc/category/ProductCategoryRpc.java new file mode 100644 index 000000000..1c79a7a24 --- /dev/null +++ b/product-service-project/product-service-api/src/main/java/cn/iocoder/mall/productservice/rpc/category/ProductCategoryRpc.java @@ -0,0 +1,61 @@ +package cn.iocoder.mall.productservice.rpc.category; + +import cn.iocoder.common.framework.vo.CommonResult; +import cn.iocoder.mall.productservice.rpc.category.dto.ProductCategoryCreateReqDTO; +import cn.iocoder.mall.productservice.rpc.category.dto.ProductCategoryListQueryReqDTO; +import cn.iocoder.mall.productservice.rpc.category.dto.ProductCategoryRespDTO; +import cn.iocoder.mall.productservice.rpc.category.dto.ProductCategoryUpdateReqDTO; + +import java.util.List; + +/** +* 商品分类 Rpc 接口 +*/ +public interface ProductCategoryRpc { + + /** + * 创建商品分类 + * + * @param createDTO 创建商品分类 DTO + * @return 商品分类编号 + */ + CommonResult createProductCategory(ProductCategoryCreateReqDTO createDTO); + + /** + * 更新商品分类 + * + * @param updateDTO 更新商品分类 DTO + */ + CommonResult updateProductCategory(ProductCategoryUpdateReqDTO updateDTO); + + /** + * 删除商品分类 + * + * @param productCategoryId 商品分类编号 + */ + CommonResult deleteProductCategory(Integer productCategoryId); + + /** + * 获得商品分类 + * + * @param productCategoryId 商品分类编号 + * @return 商品分类 + */ + CommonResult getProductCategory(Integer productCategoryId); + + /** + * 获得商品分类列表 + * + * @param productCategoryIds 商品分类编号列表 + * @return 商品分类列表 + */ + CommonResult> listProductCategories(List productCategoryIds); + + /** + * 获得符合条件的商品分类列表 + * + * @return 商品分类列表 + */ + CommonResult> listProductCategories(ProductCategoryListQueryReqDTO listQueryReqDTO); + +} diff --git a/product-service-project/product-service-api/src/main/java/cn/iocoder/mall/productservice/rpc/category/dto/ProductCategoryCreateReqDTO.java b/product-service-project/product-service-api/src/main/java/cn/iocoder/mall/productservice/rpc/category/dto/ProductCategoryCreateReqDTO.java new file mode 100644 index 000000000..cb895f39d --- /dev/null +++ b/product-service-project/product-service-api/src/main/java/cn/iocoder/mall/productservice/rpc/category/dto/ProductCategoryCreateReqDTO.java @@ -0,0 +1,49 @@ +package cn.iocoder.mall.productservice.rpc.category.dto; + +import cn.iocoder.common.framework.enums.CommonStatusEnum; +import cn.iocoder.common.framework.validator.InEnum; +import lombok.Data; +import lombok.experimental.Accessors; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import java.io.Serializable; + +/** +* 商品分类创建 Request DTO +*/ +@Data +@Accessors(chain = true) +public class ProductCategoryCreateReqDTO implements Serializable { + + /** + * 父分类编号 + */ + @NotNull(message = "父分类编号不能为空") + private Integer pid; + /** + * 分类名称 + */ + @NotEmpty(message = "分类名称不能为空") + private String name; + /** + * 分类描述 + */ + private String description; + /** + * 分类图片 + */ + private String picUrl; + /** + * 分类排序 + */ + @NotNull(message = "分类排序不能为空") + private Integer sort; + /** + * 状态 + */ + @NotNull(message = "状态不能为空") + @InEnum(value = CommonStatusEnum.class, message = "状态必须是 {value}") + private Integer status; + +} diff --git a/product-service-project/product-service-api/src/main/java/cn/iocoder/mall/productservice/rpc/category/dto/ProductCategoryListQueryReqDTO.java b/product-service-project/product-service-api/src/main/java/cn/iocoder/mall/productservice/rpc/category/dto/ProductCategoryListQueryReqDTO.java new file mode 100644 index 000000000..c45856dad --- /dev/null +++ b/product-service-project/product-service-api/src/main/java/cn/iocoder/mall/productservice/rpc/category/dto/ProductCategoryListQueryReqDTO.java @@ -0,0 +1,18 @@ +package cn.iocoder.mall.productservice.rpc.category.dto; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 商品分类列表查询 DTO + */ +@Data +@Accessors(chain = true) +public class ProductCategoryListQueryReqDTO { + + /** + * 父编号 + */ + private Integer pid; + +} diff --git a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/bo/category/ProductCategoryBO.java b/product-service-project/product-service-api/src/main/java/cn/iocoder/mall/productservice/rpc/category/dto/ProductCategoryRespDTO.java similarity index 63% rename from product/product-biz/src/main/java/cn/iocoder/mall/product/biz/bo/category/ProductCategoryBO.java rename to product-service-project/product-service-api/src/main/java/cn/iocoder/mall/productservice/rpc/category/dto/ProductCategoryRespDTO.java index 556d42248..3e40afcf9 100644 --- a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/bo/category/ProductCategoryBO.java +++ b/product-service-project/product-service-api/src/main/java/cn/iocoder/mall/productservice/rpc/category/dto/ProductCategoryRespDTO.java @@ -1,18 +1,17 @@ -package cn.iocoder.mall.product.biz.bo.category; +package cn.iocoder.mall.productservice.rpc.category.dto; import lombok.Data; import lombok.experimental.Accessors; +import java.io.Serializable; import java.util.Date; /** - * @Author: jiangweifan - * @Date: 2020/5/6 - * @Description: 商品分类 - 商品分类统一BO - */ +* 商品分类 Response DTO +*/ @Data @Accessors(chain = true) -public class ProductCategoryBO { +public class ProductCategoryRespDTO implements Serializable { /** * 分类编号 @@ -20,16 +19,14 @@ public class ProductCategoryBO { private Integer id; /** * 父分类编号 - * - * 如果不存在父级,则 pid = 0 。 */ private Integer pid; /** - * 名称 + * 分类名称 */ private String name; /** - * 描述 + * 分类描述 */ private String description; /** @@ -37,14 +34,11 @@ public class ProductCategoryBO { */ private String picUrl; /** - * 排序值 + * 分类排序 */ private Integer sort; /** * 状态 - * - * 1-开启 - * 2-关闭 */ private Integer status; /** diff --git a/product-service-project/product-service-api/src/main/java/cn/iocoder/mall/productservice/rpc/category/dto/ProductCategoryUpdateReqDTO.java b/product-service-project/product-service-api/src/main/java/cn/iocoder/mall/productservice/rpc/category/dto/ProductCategoryUpdateReqDTO.java new file mode 100644 index 000000000..95ab82806 --- /dev/null +++ b/product-service-project/product-service-api/src/main/java/cn/iocoder/mall/productservice/rpc/category/dto/ProductCategoryUpdateReqDTO.java @@ -0,0 +1,54 @@ +package cn.iocoder.mall.productservice.rpc.category.dto; + +import cn.iocoder.common.framework.enums.CommonStatusEnum; +import cn.iocoder.common.framework.validator.InEnum; +import lombok.Data; +import lombok.experimental.Accessors; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import java.io.Serializable; + +/** +* 商品分类更新 Request DTO +*/ +@Data +@Accessors(chain = true) +public class ProductCategoryUpdateReqDTO implements Serializable { + + /** + * 分类编号 + */ + @NotNull(message = "分类编号不能为空") + private Integer id; + /** + * 父分类编号 + */ + @NotNull(message = "父分类编号不能为空") + private Integer pid; + /** + * 分类名称 + */ + @NotEmpty(message = "分类名称不能为空") + private String name; + /** + * 分类描述 + */ + private String description; + /** + * 分类图片 + */ + private String picUrl; + /** + * 分类排序 + */ + @NotNull(message = "分类排序不能为空") + private Integer sort; + /** + * 状态 + */ + @NotNull(message = "状态不能为空") + @InEnum(value = CommonStatusEnum.class, message = "状态必须是 {value}") + private Integer status; + +} diff --git a/product-service-project/product-service-app/src/main/java/cn/iocoder/mall/productservice/convert/category/ProductCategoryConvert.java b/product-service-project/product-service-app/src/main/java/cn/iocoder/mall/productservice/convert/category/ProductCategoryConvert.java index aada2b4d4..29451b12e 100644 --- a/product-service-project/product-service-app/src/main/java/cn/iocoder/mall/productservice/convert/category/ProductCategoryConvert.java +++ b/product-service-project/product-service-app/src/main/java/cn/iocoder/mall/productservice/convert/category/ProductCategoryConvert.java @@ -1,8 +1,13 @@ package cn.iocoder.mall.productservice.convert.category; import cn.iocoder.mall.productservice.dal.mysql.dataobject.category.ProductCategoryDO; +import cn.iocoder.mall.productservice.rpc.category.dto.ProductCategoryCreateReqDTO; +import cn.iocoder.mall.productservice.rpc.category.dto.ProductCategoryListQueryReqDTO; +import cn.iocoder.mall.productservice.rpc.category.dto.ProductCategoryRespDTO; +import cn.iocoder.mall.productservice.rpc.category.dto.ProductCategoryUpdateReqDTO; import cn.iocoder.mall.productservice.service.category.bo.ProductCategoryBO; import cn.iocoder.mall.productservice.service.category.bo.ProductCategoryCreateBO; +import cn.iocoder.mall.productservice.service.category.bo.ProductCategoryListQueryBO; import cn.iocoder.mall.productservice.service.category.bo.ProductCategoryUpdateBO; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; @@ -22,4 +27,14 @@ public interface ProductCategoryConvert { ProductCategoryDO convert(ProductCategoryUpdateBO bean); + ProductCategoryCreateBO convert(ProductCategoryCreateReqDTO bean); + + ProductCategoryUpdateBO convert(ProductCategoryUpdateReqDTO bean); + + ProductCategoryRespDTO convert(ProductCategoryBO bean); + + List convertList02(List list); + + ProductCategoryListQueryBO convert(ProductCategoryListQueryReqDTO bean); + } diff --git a/product-service-project/product-service-app/src/main/java/cn/iocoder/mall/productservice/dal/mysql/dataobject/category/ProductCategoryDO.java b/product-service-project/product-service-app/src/main/java/cn/iocoder/mall/productservice/dal/mysql/dataobject/category/ProductCategoryDO.java index 4ffcc962b..25e5f0a66 100644 --- a/product-service-project/product-service-app/src/main/java/cn/iocoder/mall/productservice/dal/mysql/dataobject/category/ProductCategoryDO.java +++ b/product-service-project/product-service-app/src/main/java/cn/iocoder/mall/productservice/dal/mysql/dataobject/category/ProductCategoryDO.java @@ -9,7 +9,7 @@ import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; /** -* 商品分类表 +* 商品分类 DO */ @TableName("product_category") @Data diff --git a/product-service-project/product-service-app/src/main/java/cn/iocoder/mall/productservice/dal/mysql/mapper/category/ProductCategoryMapper.java b/product-service-project/product-service-app/src/main/java/cn/iocoder/mall/productservice/dal/mysql/mapper/category/ProductCategoryMapper.java index 8d86d1242..5b4e4cd7d 100644 --- a/product-service-project/product-service-app/src/main/java/cn/iocoder/mall/productservice/dal/mysql/mapper/category/ProductCategoryMapper.java +++ b/product-service-project/product-service-app/src/main/java/cn/iocoder/mall/productservice/dal/mysql/mapper/category/ProductCategoryMapper.java @@ -1,10 +1,14 @@ package cn.iocoder.mall.productservice.dal.mysql.mapper.category; +import cn.iocoder.mall.mybatis.core.query.QueryWrapperX; import cn.iocoder.mall.productservice.dal.mysql.dataobject.category.ProductCategoryDO; +import cn.iocoder.mall.productservice.service.category.bo.ProductCategoryListQueryBO; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.springframework.stereotype.Repository; +import java.util.List; + @Repository public interface ProductCategoryMapper extends BaseMapper { @@ -12,4 +16,8 @@ public interface ProductCategoryMapper extends BaseMapper { return selectCount(new QueryWrapper().eq("pid", pid)); } + default List selectList(ProductCategoryListQueryBO listQueryBO) { + return selectList(new QueryWrapperX().eqIfPresent("pid", listQueryBO.getPid())); + } + } diff --git a/product-service-project/product-service-app/src/main/java/cn/iocoder/mall/productservice/manager/category/ProductCategoryManager.java b/product-service-project/product-service-app/src/main/java/cn/iocoder/mall/productservice/manager/category/ProductCategoryManager.java new file mode 100644 index 000000000..e39ebb21b --- /dev/null +++ b/product-service-project/product-service-app/src/main/java/cn/iocoder/mall/productservice/manager/category/ProductCategoryManager.java @@ -0,0 +1,86 @@ +package cn.iocoder.mall.productservice.manager.category; + +import cn.iocoder.mall.productservice.convert.category.ProductCategoryConvert; +import cn.iocoder.mall.productservice.rpc.category.dto.ProductCategoryCreateReqDTO; +import cn.iocoder.mall.productservice.rpc.category.dto.ProductCategoryListQueryReqDTO; +import cn.iocoder.mall.productservice.rpc.category.dto.ProductCategoryRespDTO; +import cn.iocoder.mall.productservice.rpc.category.dto.ProductCategoryUpdateReqDTO; +import cn.iocoder.mall.productservice.service.category.ProductCategoryService; +import cn.iocoder.mall.productservice.service.category.bo.ProductCategoryBO; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** +* 商品分类 Manager +*/ +@Service +public class ProductCategoryManager { + + @Autowired + private ProductCategoryService productCategoryService; + + /** + * 创建商品分类 + * + * @param createDTO 创建商品分类 DTO + * @return 商品分类 + */ + public Integer createProductCategory(ProductCategoryCreateReqDTO createDTO) { + ProductCategoryBO productCategoryBO = productCategoryService.createProductCategory(ProductCategoryConvert.INSTANCE.convert(createDTO)); + return productCategoryBO.getId(); + } + + /** + * 更新商品分类 + * + * @param updateDTO 更新商品分类 DTO + */ + public void updateProductCategory(ProductCategoryUpdateReqDTO updateDTO) { + productCategoryService.updateProductCategory(ProductCategoryConvert.INSTANCE.convert(updateDTO)); + } + + /** + * 删除商品分类 + * + * @param productCategoryId 商品分类编号 + */ + public void deleteProductCategory(Integer productCategoryId) { + productCategoryService.deleteProductCategory(productCategoryId); + } + + /** + * 获得商品分类 + * + * @param productCategoryId 商品分类编号 + * @return 商品分类 + */ + public ProductCategoryRespDTO getProductCategory(Integer productCategoryId) { + ProductCategoryBO productCategoryBO = productCategoryService.getProductCategory(productCategoryId); + return ProductCategoryConvert.INSTANCE.convert(productCategoryBO); + } + + /** + * 获得商品分类列表 + * + * @param productCategoryIds 商品分类编号列表 + * @return 商品分类列表 + */ + public List listProductCategories(List productCategoryIds) { + List productCategoryBOs = productCategoryService.listProductCategories(productCategoryIds); + return ProductCategoryConvert.INSTANCE.convertList02(productCategoryBOs); + } + + /** + * 获得商品分类全列表 + * + * @return 商品分类全列表 + */ + public List listProductCategories(ProductCategoryListQueryReqDTO listQueryReqDTO) { + List productCategoryBOs = productCategoryService.listProductCategories( + ProductCategoryConvert.INSTANCE.convert(listQueryReqDTO)); + return ProductCategoryConvert.INSTANCE.convertList02(productCategoryBOs); + } + +} diff --git a/product-service-project/product-service-app/src/main/java/cn/iocoder/mall/productservice/rpc/category/ProductCategoryRpcImpl.java b/product-service-project/product-service-app/src/main/java/cn/iocoder/mall/productservice/rpc/category/ProductCategoryRpcImpl.java new file mode 100644 index 000000000..65eb1ed20 --- /dev/null +++ b/product-service-project/product-service-app/src/main/java/cn/iocoder/mall/productservice/rpc/category/ProductCategoryRpcImpl.java @@ -0,0 +1,57 @@ +package cn.iocoder.mall.productservice.rpc.category; + +import cn.iocoder.common.framework.vo.CommonResult; +import cn.iocoder.mall.productservice.manager.category.ProductCategoryManager; +import cn.iocoder.mall.productservice.rpc.category.dto.ProductCategoryCreateReqDTO; +import cn.iocoder.mall.productservice.rpc.category.dto.ProductCategoryListQueryReqDTO; +import cn.iocoder.mall.productservice.rpc.category.dto.ProductCategoryRespDTO; +import cn.iocoder.mall.productservice.rpc.category.dto.ProductCategoryUpdateReqDTO; +import org.apache.dubbo.config.annotation.DubboService; +import org.springframework.beans.factory.annotation.Autowired; + +import java.util.List; + +import static cn.iocoder.common.framework.vo.CommonResult.success; + +/** +* 商品分类 Rpc 实现类 +*/ +@DubboService(version = "${dubbo.provider.ProductCategoryRpc.version}") +public class ProductCategoryRpcImpl implements ProductCategoryRpc { + + @Autowired + private ProductCategoryManager productCategoryManager; + + @Override + public CommonResult createProductCategory(ProductCategoryCreateReqDTO createDTO) { + return success(productCategoryManager.createProductCategory(createDTO)); + } + + @Override + public CommonResult updateProductCategory(ProductCategoryUpdateReqDTO updateDTO) { + productCategoryManager.updateProductCategory(updateDTO); + return success(true); + } + + @Override + public CommonResult deleteProductCategory(Integer productCategoryId) { + productCategoryManager.deleteProductCategory(productCategoryId); + return success(true); + } + + @Override + public CommonResult getProductCategory(Integer productCategoryId) { + return success(productCategoryManager.getProductCategory(productCategoryId)); + } + + @Override + public CommonResult> listProductCategories(List productCategoryIds) { + return success(productCategoryManager.listProductCategories(productCategoryIds)); + } + + @Override + public CommonResult> listProductCategories(ProductCategoryListQueryReqDTO listQueryReqDTO) { + return success(productCategoryManager.listProductCategories(listQueryReqDTO)); + } + +} diff --git a/product-service-project/product-service-app/src/main/java/cn/iocoder/mall/productservice/service/category/ProductCategoryService.java b/product-service-project/product-service-app/src/main/java/cn/iocoder/mall/productservice/service/category/ProductCategoryService.java index 722da2c55..ac862a4ee 100644 --- a/product-service-project/product-service-app/src/main/java/cn/iocoder/mall/productservice/service/category/ProductCategoryService.java +++ b/product-service-project/product-service-app/src/main/java/cn/iocoder/mall/productservice/service/category/ProductCategoryService.java @@ -7,6 +7,7 @@ import cn.iocoder.mall.productservice.dal.mysql.mapper.category.ProductCategoryM import cn.iocoder.mall.productservice.enums.category.ProductCategoryIdEnum; import cn.iocoder.mall.productservice.service.category.bo.ProductCategoryBO; import cn.iocoder.mall.productservice.service.category.bo.ProductCategoryCreateBO; +import cn.iocoder.mall.productservice.service.category.bo.ProductCategoryListQueryBO; import cn.iocoder.mall.productservice.service.category.bo.ProductCategoryUpdateBO; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -18,7 +19,7 @@ import java.util.List; import static cn.iocoder.mall.productservice.enums.ProductErrorCodeConstants.*; /** -* 商品分类表 Service +* 商品分类 Service */ @Service @Validated @@ -28,10 +29,10 @@ public class ProductCategoryService { private ProductCategoryMapper productCategoryMapper; /** - * 创建商品分类表 + * 创建商品分类 * - * @param createBO 创建商品分类表 BO - * @return 商品分类表 + * @param createBO 创建商品分类 BO + * @return 商品分类 */ public ProductCategoryBO createProductCategory(@Valid ProductCategoryCreateBO createBO) { // 校验父分类 @@ -44,9 +45,9 @@ public class ProductCategoryService { } /** - * 更新商品分类表 + * 更新商品分类 * - * @param updateBO 更新商品分类表 BO + * @param updateBO 更新商品分类 BO */ public void updateProductCategory(@Valid ProductCategoryUpdateBO updateBO) { // 校验父分类 @@ -55,7 +56,7 @@ public class ProductCategoryService { if (updateBO.getId().equals(updateBO.getPid())) { throw ServiceExceptionUtil.exception(PRODUCT_CATEGORY_PARENT_NOT_SELF); } - // 校验更新的商品分类表是否存在 + // 校验更新的商品分类是否存在 if (productCategoryMapper.selectById(updateBO.getId()) == null) { throw ServiceExceptionUtil.exception(PRODUCT_CATEGORY_NOT_EXISTS); } @@ -65,12 +66,12 @@ public class ProductCategoryService { } /** - * 删除商品分类表 + * 删除商品分类 * - * @param productCategoryId 商品分类表编号 + * @param productCategoryId 商品分类编号 */ public void deleteProductCategory(Integer productCategoryId) { - // 校验删除的商品分类表是否存在 + // 校验删除的商品分类是否存在 if (productCategoryMapper.selectById(productCategoryId) == null) { throw ServiceExceptionUtil.exception(PRODUCT_CATEGORY_NOT_EXISTS); } @@ -85,10 +86,10 @@ public class ProductCategoryService { } /** - * 获得商品分类表 + * 获得商品分类 * - * @param productCategoryId 商品分类表编号 - * @return 商品分类表 + * @param productCategoryId 商品分类编号 + * @return 商品分类 */ public ProductCategoryBO getProductCategory(Integer productCategoryId) { ProductCategoryDO productCategoryDO = productCategoryMapper.selectById(productCategoryId); @@ -96,16 +97,26 @@ public class ProductCategoryService { } /** - * 获得商品分类表列表 + * 获得商品分类列表 * - * @param productCategoryIds 商品分类表编号列表 - * @return 商品分类表列表 + * @param productCategoryIds 商品分类编号列表 + * @return 商品分类列表 */ public List listProductCategories(List productCategoryIds) { List productCategoryDOs = productCategoryMapper.selectBatchIds(productCategoryIds); return ProductCategoryConvert.INSTANCE.convertList(productCategoryDOs); } + /** + * 获得商品分类全列表 + * + * @return 商品分类全列表 + */ + public List listProductCategories(ProductCategoryListQueryBO listQueryBO) { + List resourceDOs = productCategoryMapper.selectList(listQueryBO); + return ProductCategoryConvert.INSTANCE.convertList(resourceDOs); + } + private void validParent(Integer pid) { if (!ProductCategoryIdEnum.ROOT.getId().equals(pid)) { ProductCategoryDO parentCategory = productCategoryMapper.selectById(pid); @@ -120,10 +131,4 @@ public class ProductCategoryService { } } -// @Override -// public List getListByPid(Integer pid) { -// List categoryList = productCategoryMapper.selectListByPidAndStatusOrderBySort(pid, ProductCategoryConstants.STATUS_ENABLE); -// return ProductCategoryConvert.INSTANCE.convertToBO(categoryList); -// } - } diff --git a/product-service-project/product-service-app/src/main/java/cn/iocoder/mall/productservice/service/category/bo/ProductCategoryBO.java b/product-service-project/product-service-app/src/main/java/cn/iocoder/mall/productservice/service/category/bo/ProductCategoryBO.java index c09bb3719..c7fc7152f 100644 --- a/product-service-project/product-service-app/src/main/java/cn/iocoder/mall/productservice/service/category/bo/ProductCategoryBO.java +++ b/product-service-project/product-service-app/src/main/java/cn/iocoder/mall/productservice/service/category/bo/ProductCategoryBO.java @@ -6,7 +6,7 @@ import lombok.experimental.Accessors; import java.util.Date; /** -* 商品分类表 BO +* 商品分类 BO */ @Data @Accessors(chain = true) diff --git a/product-service-project/product-service-app/src/main/java/cn/iocoder/mall/productservice/service/category/bo/ProductCategoryCreateBO.java b/product-service-project/product-service-app/src/main/java/cn/iocoder/mall/productservice/service/category/bo/ProductCategoryCreateBO.java index d6b0610fb..82149482c 100644 --- a/product-service-project/product-service-app/src/main/java/cn/iocoder/mall/productservice/service/category/bo/ProductCategoryCreateBO.java +++ b/product-service-project/product-service-app/src/main/java/cn/iocoder/mall/productservice/service/category/bo/ProductCategoryCreateBO.java @@ -7,7 +7,7 @@ import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; /** -* 商品分类表创建 BO +* 商品分类创建 BO */ @Data @Accessors(chain = true) diff --git a/product-service-project/product-service-app/src/main/java/cn/iocoder/mall/productservice/service/category/bo/ProductCategoryListQueryBO.java b/product-service-project/product-service-app/src/main/java/cn/iocoder/mall/productservice/service/category/bo/ProductCategoryListQueryBO.java new file mode 100644 index 000000000..c843eafaa --- /dev/null +++ b/product-service-project/product-service-app/src/main/java/cn/iocoder/mall/productservice/service/category/bo/ProductCategoryListQueryBO.java @@ -0,0 +1,18 @@ +package cn.iocoder.mall.productservice.service.category.bo; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 商品分类列表查询 BO + */ +@Data +@Accessors(chain = true) +public class ProductCategoryListQueryBO { + + /** + * 父编号 + */ + private Integer pid; + +} diff --git a/product-service-project/product-service-app/src/main/java/cn/iocoder/mall/productservice/service/category/bo/ProductCategoryUpdateBO.java b/product-service-project/product-service-app/src/main/java/cn/iocoder/mall/productservice/service/category/bo/ProductCategoryUpdateBO.java index 5268602e3..45eb63f59 100644 --- a/product-service-project/product-service-app/src/main/java/cn/iocoder/mall/productservice/service/category/bo/ProductCategoryUpdateBO.java +++ b/product-service-project/product-service-app/src/main/java/cn/iocoder/mall/productservice/service/category/bo/ProductCategoryUpdateBO.java @@ -7,7 +7,7 @@ import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; /** -* 商品分类表更新 BO +* 商品分类更新 BO */ @Data @Accessors(chain = true) diff --git a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/bo/package-info.java b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/bo/package-info.java deleted file mode 100644 index 943d9070b..000000000 --- a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/bo/package-info.java +++ /dev/null @@ -1,5 +0,0 @@ -/** - * author: sin - * time: 2020/5/3 8:31 下午 - */ -package cn.iocoder.mall.product.biz.bo; \ No newline at end of file diff --git a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/config/DatabaseConfiguration.java b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/config/DatabaseConfiguration.java deleted file mode 100644 index d2e6ca7ad..000000000 --- a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/config/DatabaseConfiguration.java +++ /dev/null @@ -1,26 +0,0 @@ -package cn.iocoder.mall.product.biz.config; - -import com.baomidou.mybatisplus.core.injector.DefaultSqlInjector; -import com.baomidou.mybatisplus.core.injector.ISqlInjector; -import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor; -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -@Configuration -@MapperScan("cn.iocoder.mall.product.biz.dao") // 扫描对应的 Mapper 接口 -@EnableTransactionManagement(proxyTargetClass = true) -// 启动事务管理。为什么使用 proxyTargetClass 参数,参见 https://blog.csdn.net/huang_550/article/details/76492600 -public class DatabaseConfiguration { - @Bean - public ISqlInjector sqlInjector() { - return new DefaultSqlInjector(); // MyBatis Plus 逻辑删除 - } - - @Bean - public PaginationInterceptor paginationInterceptor() { - return new PaginationInterceptor(); // MyBatis Plus 分页插件 - } - -} diff --git a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/convert/category/ProductCategoryConvert.java b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/convert/category/ProductCategoryConvert.java deleted file mode 100644 index 47d7fd2fa..000000000 --- a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/convert/category/ProductCategoryConvert.java +++ /dev/null @@ -1,58 +0,0 @@ -package cn.iocoder.mall.product.biz.convert.category; - -import cn.iocoder.mall.product.biz.bo.category.ProductCategoryBO; -import cn.iocoder.mall.product.biz.dataobject.category.ProductCategoryDO; -import cn.iocoder.mall.product.biz.dto.category.ProductCategoryAddDTO; -import cn.iocoder.mall.product.biz.dto.category.ProductCategoryUpdateDTO; -import cn.iocoder.mall.product.biz.dto.category.ProductCategoryUpdateStatusDTO; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; -import java.util.List; - -/** - * @Author: jiangweifan - * @Date: 2020/5/6 - * @Description: 商品分类 - 服务层数据转换 - */ -@Mapper -public interface ProductCategoryConvert { - - ProductCategoryConvert INSTANCE = Mappers.getMapper(ProductCategoryConvert.class); - - /** - * 商品分类统一DO转BO - * @param category - * @return - */ - ProductCategoryBO convertToBO(ProductCategoryDO category); - - - /** - * 商品分类列表 - DO转换BO {@link #convertToBO(ProductCategoryDO)} - * @param category - * @return - */ - List convertToAllListBO(List category); - - /** - * 新增商品分类 - DTO转换DO - * @param productCategoryAddDTO - * @return - */ - ProductCategoryDO convertToDO(ProductCategoryAddDTO productCategoryAddDTO); - - /** - * 更新商品分类 - DTO转换DO - * @param productCategoryUpdateDTO - * @return - */ - ProductCategoryDO convertToDO(ProductCategoryUpdateDTO productCategoryUpdateDTO); - - /** - * 更新商品分类状态 - DTO转换DO - * @param productCategoryUpdateStatusDTO - * @return - */ - ProductCategoryDO convertToDO(ProductCategoryUpdateStatusDTO productCategoryUpdateStatusDTO); - -} \ No newline at end of file diff --git a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/convert/package-info.java b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/convert/package-info.java deleted file mode 100644 index 7f8ec0164..000000000 --- a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/convert/package-info.java +++ /dev/null @@ -1,5 +0,0 @@ -/** - * author: sin - * time: 2020/5/3 8:31 下午 - */ -package cn.iocoder.mall.product.biz.convert; \ No newline at end of file diff --git a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dao/category/ProductCategoryMapper.java b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dao/category/ProductCategoryMapper.java deleted file mode 100644 index 1dd557202..000000000 --- a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dao/category/ProductCategoryMapper.java +++ /dev/null @@ -1,25 +0,0 @@ -package cn.iocoder.mall.product.biz.dao.category; - -import cn.iocoder.mall.product.biz.dataobject.category.ProductCategoryDO; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import org.springframework.stereotype.Repository; - -/** - * @Author: jiangweifan - * @Date: 2020/5/6 - * @Description: 商品分类数据持久层 - */ -@Repository -public interface ProductCategoryMapper extends BaseMapper { - /** - * 查询商品分类的下一级子分类数量 - * @param productCategoryId - * @return - */ - default Integer selectChildCategoryCount(Integer productCategoryId) { - return this.selectCount( - Wrappers.lambdaQuery().eq(ProductCategoryDO::getPid, productCategoryId) - ); - } -} diff --git a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dao/package-info.java b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dao/package-info.java deleted file mode 100644 index d6ee2fb59..000000000 --- a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dao/package-info.java +++ /dev/null @@ -1,5 +0,0 @@ -/** - * author: sin - * time: 2020/5/3 8:28 下午 - */ -package cn.iocoder.mall.product.biz.dao; \ No newline at end of file diff --git a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dataobject/category/ProductCategoryDO.java b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dataobject/category/ProductCategoryDO.java deleted file mode 100644 index 317684f5a..000000000 --- a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dataobject/category/ProductCategoryDO.java +++ /dev/null @@ -1,50 +0,0 @@ -package cn.iocoder.mall.product.biz.dataobject.category; - -import cn.iocoder.mall.mybatis.core.dataobject.DeletableDO; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import lombok.experimental.Accessors; - -/** - * 商品分类 - */ -@Data -@Accessors(chain = true) -@TableName("product_category") -public class ProductCategoryDO extends DeletableDO { - - /** - * 分类编号 - */ - private Integer id; - /** - * 父分类编号 - * - * 如果不存在父级,则 pid = 0 。 - */ - private Integer pid; - /** - * 名称 - */ - private String name; - /** - * 描述 - */ - private String description; - /** - * 分类图片 - */ - private String picUrl; - /** - * 排序值 - */ - private Integer sort; - /** - * 状态 - * - * 1-开启 - * 2-关闭 - */ - private Integer status; - -} diff --git a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dataobject/package-info.java b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dataobject/package-info.java deleted file mode 100644 index a182cf975..000000000 --- a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dataobject/package-info.java +++ /dev/null @@ -1,5 +0,0 @@ -/** - * author: sin - * time: 2020/5/3 8:27 下午 - */ -package cn.iocoder.mall.product.biz.dataobject; \ No newline at end of file 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 deleted file mode 100644 index f997a9655..000000000 --- a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/category/ProductCategoryAddDTO.java +++ /dev/null @@ -1,48 +0,0 @@ -package cn.iocoder.mall.product.biz.dto.category; - -import lombok.Data; -import lombok.experimental.Accessors; - -import javax.validation.constraints.NotNull; - -/** - * @Author: jiangweifan - * @Date: 2020/5/6 - * @Description: 商品分类 - 创建商品分类DTO - */ -@Data -@Accessors(chain = true) -public class ProductCategoryAddDTO { - - /** - * 管理员id - */ - @NotNull(message = "管理员id不能为空") - private Integer adminId; - - /** - * 父分类编号 - */ - @NotNull(message = "父分类编号不能为空") - private Integer pid; - /** - * 名称 - */ - @NotNull(message = "名称不能为空") - private String name; - /** - * 描述 - */ - @NotNull(message = "描述不能为空") - private String description; - /** - * 分类图片 - */ - private String picUrl; - /** - * 排序值 - */ - @NotNull(message = "排序值不能为空") - private Integer sort; - -} diff --git a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/category/ProductCategoryDeleteDTO.java b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/category/ProductCategoryDeleteDTO.java deleted file mode 100644 index 0f48ee4ca..000000000 --- a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/category/ProductCategoryDeleteDTO.java +++ /dev/null @@ -1,28 +0,0 @@ -package cn.iocoder.mall.product.biz.dto.category; - -import lombok.Data; -import lombok.experimental.Accessors; - -import javax.validation.constraints.NotNull; - -/** - * @Author: jiangweifan - * @Date: 2020/5/6 - * @Description: 商品分类 - 删除商品分类DTO - */ -@Data -@Accessors(chain = true) -public class ProductCategoryDeleteDTO { - - /** - * 管理员id - */ - @NotNull(message = "管理员id不能为空") - private Integer adminId; - /** - * 商品分类编号 - */ - @NotNull(message = "编号不能为空") - private Integer id; - -} diff --git a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/category/ProductCategoryUpdateDTO.java b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/category/ProductCategoryUpdateDTO.java deleted file mode 100644 index e007878b0..000000000 --- a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/category/ProductCategoryUpdateDTO.java +++ /dev/null @@ -1,52 +0,0 @@ -package cn.iocoder.mall.product.biz.dto.category; - -import lombok.Data; -import lombok.experimental.Accessors; - -import javax.validation.constraints.NotNull; - -/** - * @Author: jiangweifan - * @Date: 2020/5/6 - * @Description: 商品分类 - 更新商品分类DTO - */ -@Data -@Accessors(chain = true) -public class ProductCategoryUpdateDTO { - - /** - * 管理员id - */ - @NotNull(message = "管理员id不能为空") - private Integer adminId; - /** - * 编号 - */ - @NotNull(message = "编号不能为空") - private Integer id; - /** - * 父分类编号 - */ - @NotNull(message = "父分类编号不能为空") - private Integer pid; - /** - * 名称 - */ - @NotNull(message = "名称不能为空") - private String name; - /** - * 描述 - */ - @NotNull(message = "描述不能为空") - private String description; - /** - * 分类图片 - */ - private String picUrl; - /** - * 排序值 - */ - @NotNull(message = "描述不能为空") - private Integer sort; - -} diff --git a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/category/ProductCategoryUpdateStatusDTO.java b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/category/ProductCategoryUpdateStatusDTO.java deleted file mode 100644 index 9bd7f57e7..000000000 --- a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/category/ProductCategoryUpdateStatusDTO.java +++ /dev/null @@ -1,33 +0,0 @@ -package cn.iocoder.mall.product.biz.dto.category; - -import lombok.Data; -import lombok.experimental.Accessors; - -import javax.validation.constraints.NotNull; - -/** - * @Author: jiangweifan - * @Date: 2020/5/6 - * @Description: 商品分类 - 更新商品分类状态DTO - */ -@Data -@Accessors(chain = true) -public class ProductCategoryUpdateStatusDTO { - - /** - * 管理员id - */ - @NotNull(message = "管理员id不能为空") - private Integer adminId; - /** - * 商品分类编号 - */ - @NotNull(message = "编号不能为空") - private Integer id; - /** - * 状态 - */ - @NotNull(message = "状态不能为空") - private Integer status; - -} diff --git a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/service/category/ProductCategoryService.java b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/service/category/ProductCategoryService.java deleted file mode 100644 index 124b4f00e..000000000 --- a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/service/category/ProductCategoryService.java +++ /dev/null @@ -1,69 +0,0 @@ -package cn.iocoder.mall.product.biz.service.category; - -import cn.iocoder.mall.product.biz.bo.category.ProductCategoryBO; -import cn.iocoder.mall.product.biz.dataobject.category.ProductCategoryDO; -import cn.iocoder.mall.product.biz.dto.category.ProductCategoryAddDTO; -import cn.iocoder.mall.product.biz.dto.category.ProductCategoryDeleteDTO; -import cn.iocoder.mall.product.biz.dto.category.ProductCategoryUpdateDTO; -import cn.iocoder.mall.product.biz.dto.category.ProductCategoryUpdateStatusDTO; -import org.springframework.validation.annotation.Validated; - -import javax.validation.Valid; -import java.util.List; - - -/** - * @Author: jiangweifan - * @Date: 2020/5/6 - * @Description: 商品分类 - 服务层 - */ -@Validated -public interface ProductCategoryService { - - /** - * 获取所有商品分类 - * - * @return - */ - List getAllProductCategory(); - - /** - * 新增商品分类 - * - * @param productCategoryAddDTO - * @return - */ - ProductCategoryBO addProductCategory(@Valid ProductCategoryAddDTO productCategoryAddDTO); - - /** - * 更新商品分类 - * - * @param productCategoryUpdateDTO - * @return - */ - Boolean updateProductCategory(@Valid ProductCategoryUpdateDTO productCategoryUpdateDTO); - - /** - * 更新商品分类状态 - * - * @param productCategoryUpdateStatusDTO - * @return - */ - Boolean updateProductCategoryStatus(@Valid ProductCategoryUpdateStatusDTO productCategoryUpdateStatusDTO); - - /** - * 删除商品分类 - * - * @param productCategoryDeleteDTO - * @return - */ - Boolean deleteProductCategory(@Valid ProductCategoryDeleteDTO productCategoryDeleteDTO); - - /** - * 校验分类是否可用 - * - * @param productCategoryId 分类ID - * @return 商品分类 - */ - ProductCategoryDO validProductCategory(Integer productCategoryId); -} diff --git a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/service/category/ProductCategoryServiceImpl.java b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/service/category/ProductCategoryServiceImpl.java deleted file mode 100644 index 447f92d04..000000000 --- a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/service/category/ProductCategoryServiceImpl.java +++ /dev/null @@ -1,42 +0,0 @@ -package cn.iocoder.mall.product.biz.service.category; - -import cn.iocoder.common.framework.util.ServiceExceptionUtil; -import cn.iocoder.mall.mybatis.core.enums.DeletedStatusEnum; -import cn.iocoder.mall.product.biz.bo.category.ProductCategoryBO; -import cn.iocoder.mall.product.biz.convert.category.ProductCategoryConvert; -import cn.iocoder.mall.product.biz.dao.category.ProductCategoryMapper; -import cn.iocoder.mall.product.biz.dataobject.category.ProductCategoryDO; -import cn.iocoder.mall.product.biz.dto.category.ProductCategoryAddDTO; -import cn.iocoder.mall.product.biz.dto.category.ProductCategoryDeleteDTO; -import cn.iocoder.mall.product.biz.dto.category.ProductCategoryUpdateDTO; -import cn.iocoder.mall.product.biz.dto.category.ProductCategoryUpdateStatusDTO; -import cn.iocoder.mall.product.biz.enums.ProductErrorCodeEnum; -import cn.iocoder.mall.product.biz.enums.category.ProductCategoryNodeEnum; -import cn.iocoder.mall.product.biz.enums.category.ProductCategoryStatusEnum; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import java.util.Arrays; -import java.util.Date; -import java.util.List; - -import static cn.iocoder.mall.product.biz.enums.ProductErrorCodeEnum.*; - -/** - * @Author: jiangweifan - * @Date: 2020/5/6 - * @Description: 商品分类 - 服务实现层 - */ -@Service -public class ProductCategoryServiceImpl implements ProductCategoryService { - - @Autowired - private ProductCategoryMapper productCategoryMapper; - - @Override - public List getAllProductCategory() { - List categoryList = productCategoryMapper.selectList(null); - return ProductCategoryConvert.INSTANCE.convertToAllListBO(categoryList); - } - -} diff --git a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/service/package-info.java b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/service/package-info.java deleted file mode 100644 index 4a008b3e1..000000000 --- a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/service/package-info.java +++ /dev/null @@ -1,5 +0,0 @@ -/** - * author: sin - * time: 2020/5/3 8:31 下午 - */ -package cn.iocoder.mall.product.biz.service; \ No newline at end of file diff --git a/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/convert/category/AdminsProductCategoryConvert.java b/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/convert/category/AdminsProductCategoryConvert.java deleted file mode 100644 index 200119eab..000000000 --- a/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/convert/category/AdminsProductCategoryConvert.java +++ /dev/null @@ -1,69 +0,0 @@ -package cn.iocoder.mall.product.rest.convert.category; - -import cn.iocoder.mall.product.biz.bo.category.ProductCategoryBO; -import cn.iocoder.mall.product.biz.dto.category.ProductCategoryAddDTO; -import cn.iocoder.mall.product.biz.dto.category.ProductCategoryDeleteDTO; -import cn.iocoder.mall.product.biz.dto.category.ProductCategoryUpdateDTO; -import cn.iocoder.mall.product.biz.dto.category.ProductCategoryUpdateStatusDTO; -import cn.iocoder.mall.product.rest.request.category.AdminsProductCategoryAddRequest; -import cn.iocoder.mall.product.rest.request.category.AdminsProductCategoryUpdateRequest; -import cn.iocoder.mall.product.rest.request.category.AdminsProductCategoryUpdateStatusRequest; -import cn.iocoder.mall.product.rest.response.category.AdminsProductCategoryAddResponse; -import cn.iocoder.mall.product.rest.response.category.AdminsProductCategoryTreeNodeResponse; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; - -/** - * @Author: jiangweifan - * @Date: 2020/5/6 - * @Description: 管理员 - 商品分类 - API层数据转换 - */ -@Mapper -public interface AdminsProductCategoryConvert { - - AdminsProductCategoryConvert INSTANCE = Mappers.getMapper(AdminsProductCategoryConvert.class); - - /** - * 商品分类列表 - BO转换Response - * @param productCategoryAllListBO - * @return - */ - AdminsProductCategoryTreeNodeResponse convertToTreeNodeResponse(ProductCategoryBO productCategoryAllListBO); - - - /** - * 新增商品分类 - Request转DTO - * @param adminsProductCategoryAddRequest - * @return - */ - ProductCategoryAddDTO convertToAddDTO(Integer adminId, AdminsProductCategoryAddRequest adminsProductCategoryAddRequest); - - /** - * 新增商品分类 - BO转Response - * @param productCategoryAddBO - * @return - */ - AdminsProductCategoryAddResponse convertToAddResponse(ProductCategoryBO productCategoryAddBO); - - /** - * 更新商品分类 - Request转DTO - * @param adminsProductCategoryUpdateRequest - * @return - */ - ProductCategoryUpdateDTO convertToUpdateDTO(Integer adminId, AdminsProductCategoryUpdateRequest adminsProductCategoryUpdateRequest); - - /** - * 更新商品分类状态 - Request转DTO - * @param adminsProductCategoryUpdateStatusRequest - * @return - */ - ProductCategoryUpdateStatusDTO convertToUpdateStatusDTO(Integer adminId, AdminsProductCategoryUpdateStatusRequest adminsProductCategoryUpdateStatusRequest); - - /** - * 删除商品分类 - Request转DTO - * @param adminId 管理员id - * @param id 商品分类id - * @return - */ - ProductCategoryDeleteDTO convertToDeleteDTO(Integer adminId, Integer id); -} 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 deleted file mode 100644 index 65e9e4cfe..000000000 --- a/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/category/AdminsProductCategoryAddRequest.java +++ /dev/null @@ -1,38 +0,0 @@ -package cn.iocoder.mall.product.rest.request.category; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import lombok.experimental.Accessors; - -import javax.validation.constraints.NotNull; - -/** - * @Author: jiangweifan - * @Date: 2020/5/6 - * @Description: 管理员 - 商品分类 - 创建商品分类Request - */ -@ApiModel("创建商品分类Request") -@Data -@Accessors(chain = true) -public class AdminsProductCategoryAddRequest { - - @ApiModelProperty(name = "pid", value = "父级分类编号", required = true, example = "1") - @NotNull(message = "父分类编号不能为空") - private Integer pid; - - @ApiModelProperty(name = "name", value = "分类名字(标识)", required = true, example = "admin/info") - @NotNull(message = "名称不能为空") - private String name; - - @ApiModelProperty(name = "description", value = "描述", required = true, example = "1") - @NotNull(message = "描述不能为空") - private String description; - - @ApiModelProperty(name = "picUrl", value = "分类图片", example = "http://www.iocoder.cn/images/common/wechat_mp_2017_07_31_bak.jpg/") - private String picUrl; - - @ApiModelProperty(name = "sort", value = "排序", required = true, example = "1") - @NotNull(message = "排序值不能为空") - private Integer sort; -} diff --git a/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/category/AdminsProductCategoryUpdateRequest.java b/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/category/AdminsProductCategoryUpdateRequest.java deleted file mode 100644 index c16e4abbf..000000000 --- a/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/category/AdminsProductCategoryUpdateRequest.java +++ /dev/null @@ -1,42 +0,0 @@ -package cn.iocoder.mall.product.rest.request.category; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import lombok.experimental.Accessors; - -import javax.validation.constraints.NotNull; - -/** - * @Author: jiangweifan - * @Date: 2020/5/6 - * @Description: 管理员 - 商品分类 - 更新商品分类Request - */ -@ApiModel("更新商品分类Request") -@Data -@Accessors(chain = true) -public class AdminsProductCategoryUpdateRequest { - - @ApiModelProperty(name = "id", value = "分类编号", required = true, example = "1") - @NotNull(message = "编号不能为空") - private Integer id; - - @ApiModelProperty(name = "pid", value = "父级分类编号", required = true, example = "1") - @NotNull(message = "父分类编号不能为空") - private Integer pid; - - @ApiModelProperty(name = "name", value = "分类名字(标识)", required = true, example = "admin/info") - @NotNull(message = "名称不能为空") - private String name; - - @ApiModelProperty(name = "description", value = "描述", required = true, example = "1") - @NotNull(message = "描述不能为空") - private String description; - - @ApiModelProperty(name = "picUrl", value = "分类图片", example = "http://www.iocoder.cn/images/common/wechat_mp_2017_07_31_bak.jpg/") - private String picUrl; - - @ApiModelProperty(name = "sort", value = "排序", required = true, example = "1") - @NotNull(message = "排序值不能为空") - private Integer sort; -} diff --git a/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/category/AdminsProductCategoryUpdateStatusRequest.java b/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/category/AdminsProductCategoryUpdateStatusRequest.java deleted file mode 100644 index 82106b636..000000000 --- a/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/category/AdminsProductCategoryUpdateStatusRequest.java +++ /dev/null @@ -1,27 +0,0 @@ -package cn.iocoder.mall.product.rest.request.category; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import lombok.experimental.Accessors; - -import javax.validation.constraints.NotNull; - -/** - * @Author: jiangweifan - * @Date: 2020/5/6 - * @Description: 管理员 - 商品分类 - 更新商品分类状态Request - */ -@ApiModel("更新商品分类状态Request") -@Data -@Accessors(chain = true) -public class AdminsProductCategoryUpdateStatusRequest { - - @ApiModelProperty(name = "id", value = "分类编号", required = true, example = "1") - @NotNull(message = "编号不能为空") - private Integer id; - - @ApiModelProperty(name = "status", value = "状态。1 - 开启;2 - 禁用", required = true, example = "1") - @NotNull(message = "状态不能为空") - private Integer status; -} diff --git a/system-service-project/system-service-app/src/main/java/cn/iocoder/mall/systemservice/service/permission/ResourceService.java b/system-service-project/system-service-app/src/main/java/cn/iocoder/mall/systemservice/service/permission/ResourceService.java index 64ef9c91c..ce7998511 100644 --- a/system-service-project/system-service-app/src/main/java/cn/iocoder/mall/systemservice/service/permission/ResourceService.java +++ b/system-service-project/system-service-app/src/main/java/cn/iocoder/mall/systemservice/service/permission/ResourceService.java @@ -122,9 +122,9 @@ public class ResourceService { } /** - * 获得资源树结构 + * 获得资源全列表 * - * @return 资源树结构 + * @return 资源全列表 */ public List listResources() { List resourceDOs = resourceMapper.selectList(null);