迁移 cart 的 web api
解决 promotion-service 模块的启动
This commit is contained in:
parent
5714ddcbe8
commit
84cc2728bd
@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
|||||||
import org.apache.ibatis.annotations.Param;
|
import org.apache.ibatis.annotations.Param;
|
||||||
import org.springframework.stereotype.Repository;
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@ -37,7 +38,7 @@ public interface CartItemMapper extends BaseMapper<CartItemDO> {
|
|||||||
.select("SUM(quantity) AS sumQuantity")
|
.select("SUM(quantity) AS sumQuantity")
|
||||||
.eq("user_id", userId));
|
.eq("user_id", userId));
|
||||||
// 获得数量
|
// 获得数量
|
||||||
return (Integer) result.get(0).get("sumQuantity");
|
return ((BigDecimal) result.get(0).get("sumQuantity")).intValue();
|
||||||
}
|
}
|
||||||
|
|
||||||
default List<CartItemDO> selectList(CartItemListQueryBO queryBO) {
|
default List<CartItemDO> selectList(CartItemListQueryBO queryBO) {
|
||||||
|
@ -38,7 +38,7 @@ public class CartManager {
|
|||||||
// 校验商品 SKU 是否合法
|
// 校验商品 SKU 是否合法
|
||||||
ProductSkuRespDTO skuDTO = this.checkProductSku(addReqDTO.getSkuId());
|
ProductSkuRespDTO skuDTO = this.checkProductSku(addReqDTO.getSkuId());
|
||||||
// 添加购物车项
|
// 添加购物车项
|
||||||
cartService.addCartItem(CartConvert.INSTANCE.convert(addReqDTO), skuDTO.getQuantity());
|
cartService.addCartItem(CartConvert.INSTANCE.convert(addReqDTO).setSpuId(skuDTO.getSpuId()), skuDTO.getQuantity());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -10,7 +10,7 @@ import javax.validation.constraints.NotNull;
|
|||||||
* 购物车添加购物项 Request DTO
|
* 购物车添加购物项 Request DTO
|
||||||
*/
|
*/
|
||||||
@Data
|
@Data
|
||||||
@Accessors
|
@Accessors(chain = true)
|
||||||
public class CartItemAddBO {
|
public class CartItemAddBO {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -39,6 +39,8 @@ dubbo:
|
|||||||
consumer:
|
consumer:
|
||||||
ErrorCodeRpc:
|
ErrorCodeRpc:
|
||||||
version: 1.0.0
|
version: 1.0.0
|
||||||
|
ProductSkuRpc:
|
||||||
|
version: 1.0.0
|
||||||
|
|
||||||
# RocketMQ 配置项
|
# RocketMQ 配置项
|
||||||
rocketmq:
|
rocketmq:
|
||||||
|
@ -16,14 +16,7 @@ public class UsersCartController {
|
|||||||
// @Reference(validation = "true", version = "${dubbo.consumer.CouponService.version}")
|
// @Reference(validation = "true", version = "${dubbo.consumer.CouponService.version}")
|
||||||
// private CouponService couponService;
|
// private CouponService couponService;
|
||||||
//
|
//
|
||||||
// @PostMapping("add")
|
|
||||||
// public CommonResult<Integer> add(@RequestParam("skuId") Integer skuId,
|
|
||||||
// @RequestParam("quantity") Integer quantity) {
|
|
||||||
// // 添加到购物车
|
|
||||||
// cartService.add(UserSecurityContextHolder.getContext().getUserId(), skuId, quantity);
|
|
||||||
// // 获得目前购物车商品总数量
|
|
||||||
// return success(cartService.count(UserSecurityContextHolder.getContext().getUserId()));
|
|
||||||
// }
|
|
||||||
//
|
//
|
||||||
// @PostMapping("update_quantity")
|
// @PostMapping("update_quantity")
|
||||||
// public CommonResult<UsersCartDetailVO> updateQuantity(@RequestParam("skuId") Integer skuId, // TODO 芋艿,先暂用这个 VO 。等促销活动出来后,做调整
|
// public CommonResult<UsersCartDetailVO> updateQuantity(@RequestParam("skuId") Integer skuId, // TODO 芋艿,先暂用这个 VO 。等促销活动出来后,做调整
|
||||||
@ -43,11 +36,7 @@ public class UsersCartController {
|
|||||||
// // 获得目前购物车明细
|
// // 获得目前购物车明细
|
||||||
// return getCartDetail();
|
// return getCartDetail();
|
||||||
// }
|
// }
|
||||||
//
|
|
||||||
// @GetMapping("count")
|
|
||||||
// public CommonResult<Integer> count() {
|
|
||||||
// return success(cartService.count(UserSecurityContextHolder.getContext().getUserId()));
|
|
||||||
// }
|
|
||||||
//
|
//
|
||||||
// @GetMapping("/list")
|
// @GetMapping("/list")
|
||||||
// public CommonResult<UsersCartDetailVO> list() { // TODO 芋艿,先暂用这个 VO 。等促销活动出来后,做调整
|
// public CommonResult<UsersCartDetailVO> list() { // TODO 芋艿,先暂用这个 VO 。等促销活动出来后,做调整
|
||||||
|
@ -239,7 +239,7 @@ public class CartServiceImpl implements CartService {
|
|||||||
// 判断是否符合条件
|
// 判断是否符合条件
|
||||||
int originalTotal = items.stream().mapToInt(CalcOrderPriceBO.Item::getPresentTotal).sum(); // 此处,指的是以优惠劵视角的原价
|
int originalTotal = items.stream().mapToInt(CalcOrderPriceBO.Item::getPresentTotal).sum(); // 此处,指的是以优惠劵视角的原价
|
||||||
if (originalTotal == 0 || originalTotal < couponCard.getPriceAvailable()) {
|
if (originalTotal == 0 || originalTotal < couponCard.getPriceAvailable()) {
|
||||||
throw ServiceExceptionUtil.exception(PromotionErrorCodeEnum.COUPON_CARD_NOT_MATCH.getCode()); // TODO 芋艿,这种情况,会出现错误码的提示,无法格式化出来。另外,这块的最佳实践,找人讨论下。
|
throw ServiceExceptionUtil.exception(PromotionErrorCodeConstants.COUPON_CARD_NOT_MATCH.getCode()); // TODO 芋艿,这种情况,会出现错误码的提示,无法格式化出来。另外,这块的最佳实践,找人讨论下。
|
||||||
}
|
}
|
||||||
// 计算价格
|
// 计算价格
|
||||||
// 获得到优惠信息,进行价格计算
|
// 获得到优惠信息,进行价格计算
|
||||||
|
4
pom.xml
4
pom.xml
@ -16,10 +16,8 @@
|
|||||||
<modules>
|
<modules>
|
||||||
<module>order</module>
|
<module>order</module>
|
||||||
<module>common</module>
|
<module>common</module>
|
||||||
<!-- <module>system</module>-->
|
|
||||||
<!-- <module>ops</module>-->
|
<!-- <module>ops</module>-->
|
||||||
<!-- <module>pay</module>-->
|
<!-- <module>pay</module>-->
|
||||||
<!-- <module>promotion</module>-->
|
|
||||||
<module>mall-dependencies</module>
|
<module>mall-dependencies</module>
|
||||||
<module>user-service-project</module>
|
<module>user-service-project</module>
|
||||||
<module>user-web-app</module>
|
<module>user-web-app</module>
|
||||||
@ -28,7 +26,7 @@
|
|||||||
<module>management-web-app</module>
|
<module>management-web-app</module>
|
||||||
<module>shop-web-app</module>
|
<module>shop-web-app</module>
|
||||||
<module>product-service-project</module>
|
<module>product-service-project</module>
|
||||||
<!-- <module>promotion-service-project</module>-->
|
<module>promotion-service-project</module>
|
||||||
<module>search-service-project</module>
|
<module>search-service-project</module>
|
||||||
<module>order-service-project</module>
|
<module>order-service-project</module>
|
||||||
</modules>
|
</modules>
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
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">
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
<parent>
|
<parent>
|
||||||
<artifactId>promotion</artifactId>
|
<artifactId>promotion-service-project</artifactId>
|
||||||
<groupId>cn.iocoder.mall</groupId>
|
<groupId>cn.iocoder.mall</groupId>
|
||||||
<version>1.0-SNAPSHOT</version>
|
<version>1.0-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
@ -0,0 +1,37 @@
|
|||||||
|
package cn.iocoder.mall.promotion.api.enums;
|
||||||
|
|
||||||
|
import cn.iocoder.common.framework.exception.ErrorCode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 错误码枚举类
|
||||||
|
*
|
||||||
|
* 营销系统,使用 1-006-000-000 段
|
||||||
|
*/
|
||||||
|
public interface PromotionErrorCodeConstants {
|
||||||
|
|
||||||
|
// ========== Banner 模块 ==========
|
||||||
|
ErrorCode BANNER_NOT_EXISTS = new ErrorCode(1006000000, "账号不存在");
|
||||||
|
|
||||||
|
// ========== PRODUCT RECOMMEND 模块 ==========
|
||||||
|
ErrorCode PRODUCT_RECOMMEND_NOT_EXISTS = new ErrorCode(1006001000, "商品推荐不存在");
|
||||||
|
ErrorCode PRODUCT_RECOMMEND_PRODUCT_NOT_EXISTS = new ErrorCode(1006001001, "商品不存在");
|
||||||
|
ErrorCode PRODUCT_RECOMMEND_EXISTS = new ErrorCode(1006001002, "该商品推荐已经存在");
|
||||||
|
|
||||||
|
|
||||||
|
// ========== COUPON TEMPLATE 模块 ==========
|
||||||
|
ErrorCode COUPON_TEMPLATE_NOT_EXISTS = new ErrorCode(1006002000, "优惠劵模板(码)不存在");
|
||||||
|
ErrorCode COUPON_TEMPLATE_NOT_CARD = new ErrorCode(1006002001, "不是优惠劵模板");
|
||||||
|
ErrorCode COUPON_TEMPLATE_NOT_CODE = new ErrorCode(1006002002, "不是优惠码模板");
|
||||||
|
ErrorCode COUPON_TEMPLATE_TOTAL_CAN_NOT_REDUCE = new ErrorCode(1006002003, "优惠劵(码)模板的发放数量不能减小");
|
||||||
|
ErrorCode COUPON_TEMPLATE_STATUS_NOT_ENABLE = new ErrorCode(1006002004, "优惠劵模板(码)未开启");
|
||||||
|
ErrorCode COUPON_TEMPLATE_TOTAL_NOT_ENOUGH = new ErrorCode(1006002005, "优惠劵(码)模板的发放量不足");
|
||||||
|
ErrorCode COUPON_TEMPLATE_CARD_ADD_EXCEED_QUOTA = new ErrorCode(1006002006, "优惠劵领取到达上限");
|
||||||
|
|
||||||
|
// ========== COUPON CARD 模块 ==========
|
||||||
|
ErrorCode COUPON_CARD_NOT_EXISTS = new ErrorCode(1006003000, "优惠劵不存在");
|
||||||
|
ErrorCode COUPON_CARD_ERROR_USER = new ErrorCode(1006003001, "优惠劵不属于当前用户");
|
||||||
|
ErrorCode COUPON_CARD_NOT_MATCH = new ErrorCode(1006003002, "优惠劵不匹配,无法使用");
|
||||||
|
ErrorCode COUPON_CARD_STATUS_NOT_UNUSED = new ErrorCode(1006003003, "优惠劵不处于待使用状态");
|
||||||
|
ErrorCode COUPON_CARD_STATUS_NOT_USED = new ErrorCode( 1006003004, "优惠劵不处于已使用状态");
|
||||||
|
|
||||||
|
}
|
@ -1,53 +0,0 @@
|
|||||||
package cn.iocoder.mall.promotion.api.enums;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 错误码枚举类
|
|
||||||
*
|
|
||||||
* 营销系统,使用 1-006-000-000 段
|
|
||||||
*/
|
|
||||||
public enum PromotionErrorCodeEnum {
|
|
||||||
|
|
||||||
// ========== Banner 模块 ==========
|
|
||||||
BANNER_NOT_EXISTS(1006000000, "账号不存在"),
|
|
||||||
|
|
||||||
// ========== PRODUCT RECOMMEND 模块 ==========
|
|
||||||
PRODUCT_RECOMMEND_NOT_EXISTS(1006001000, "商品推荐不存在"),
|
|
||||||
PRODUCT_RECOMMEND_PRODUCT_NOT_EXISTS(1006001001, "商品不存在"),
|
|
||||||
PRODUCT_RECOMMEND_EXISTS(1006001002, "该商品推荐已经存在"),
|
|
||||||
|
|
||||||
|
|
||||||
// ========== COUPON TEMPLATE 模块 ==========
|
|
||||||
COUPON_TEMPLATE_NOT_EXISTS(1006002000, "优惠劵模板(码)不存在"),
|
|
||||||
COUPON_TEMPLATE_NOT_CARD(1006002001, "不是优惠劵模板"),
|
|
||||||
COUPON_TEMPLATE_NOT_CODE(1006002002, "不是优惠码模板"),
|
|
||||||
COUPON_TEMPLATE_TOTAL_CAN_NOT_REDUCE(1006002003, "优惠劵(码)模板的发放数量不能减小"),
|
|
||||||
COUPON_TEMPLATE_STATUS_NOT_ENABLE(1006002004, "优惠劵模板(码)未开启"),
|
|
||||||
COUPON_TEMPLATE_TOTAL_NOT_ENOUGH(1006002005, "优惠劵(码)模板的发放量不足"),
|
|
||||||
COUPON_TEMPLATE_CARD_ADD_EXCEED_QUOTA(1006002006, "优惠劵领取到达上限"),
|
|
||||||
|
|
||||||
// ========== COUPON CARD 模块 ==========
|
|
||||||
COUPON_CARD_NOT_EXISTS(1006003000, "优惠劵不存在"),
|
|
||||||
COUPON_CARD_ERROR_USER(1006003001, "优惠劵不属于当前用户"),
|
|
||||||
COUPON_CARD_NOT_MATCH(1006003002, "优惠劵不匹配,无法使用"),
|
|
||||||
COUPON_CARD_STATUS_NOT_UNUSED(1006003003, "优惠劵不处于待使用状态"),
|
|
||||||
COUPON_CARD_STATUS_NOT_USED(1006003004, "优惠劵不处于已使用状态"),
|
|
||||||
;
|
|
||||||
|
|
||||||
|
|
||||||
private final int code;
|
|
||||||
private final String message;
|
|
||||||
|
|
||||||
PromotionErrorCodeEnum(int code, String message) {
|
|
||||||
this.code = code;
|
|
||||||
this.message = message;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getCode() {
|
|
||||||
return code;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getMessage() {
|
|
||||||
return message;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -12,26 +12,45 @@
|
|||||||
<artifactId>promotion-service-app</artifactId>
|
<artifactId>promotion-service-app</artifactId>
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
|
<!-- RPC 相关 -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>cn.iocoder.mall</groupId>
|
<groupId>cn.iocoder.mall</groupId>
|
||||||
<artifactId>mall-spring-boot-starter-dubbo</artifactId>
|
<artifactId>mall-spring-boot-starter-dubbo</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
|
<!-- 系统服务 -->
|
||||||
|
<groupId>cn.iocoder.mall</groupId>
|
||||||
|
<artifactId>system-service-api</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<!-- 商品服务 -->
|
||||||
|
<groupId>cn.iocoder.mall</groupId>
|
||||||
|
<artifactId>product-service-api</artifactId>
|
||||||
|
<version>1.0-SNAPSHOT</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<!-- 营销服务 -->
|
||||||
<groupId>cn.iocoder.mall</groupId>
|
<groupId>cn.iocoder.mall</groupId>
|
||||||
<artifactId>promotion-service-api</artifactId>
|
<artifactId>promotion-service-api</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<!-- Web 相关 -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.springframework.boot</groupId>
|
<groupId>org.springframework.boot</groupId>
|
||||||
<artifactId>spring-boot</artifactId>
|
<artifactId>spring-boot-starter-web</artifactId> <!-- 需要开启 Web 容器,因为 Actuator 需要使用到 -->
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.springframework.boot</groupId>
|
|
||||||
<artifactId>spring-boot-autoconfigure</artifactId>
|
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<!-- Registry 和 Config 相关 -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.alibaba.cloud</groupId>
|
||||||
|
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- DB 相关 -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>mysql</groupId>
|
<groupId>mysql</groupId>
|
||||||
<artifactId>mysql-connector-java</artifactId>
|
<artifactId>mysql-connector-java</artifactId>
|
||||||
@ -46,12 +65,44 @@
|
|||||||
<groupId>cn.iocoder.mall</groupId>
|
<groupId>cn.iocoder.mall</groupId>
|
||||||
<artifactId>mall-spring-boot-starter-mybatis</artifactId>
|
<artifactId>mall-spring-boot-starter-mybatis</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<!-- 工具类相关 -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>cn.iocoder.mall</groupId>
|
<groupId>org.springframework.boot</groupId>
|
||||||
<artifactId>product-service-api</artifactId>
|
<artifactId>spring-boot-starter-validation</artifactId>
|
||||||
<version>1.0-SNAPSHOT</version>
|
</dependency>
|
||||||
<scope>compile</scope>
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.projectlombok</groupId>
|
||||||
|
<artifactId>lombok</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.mapstruct</groupId>
|
||||||
|
<artifactId>mapstruct</artifactId> <!-- use mapstruct-jdk8 for Java 8 or higher -->
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.mapstruct</groupId>
|
||||||
|
<artifactId>mapstruct-jdk8</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.aspectj</groupId>
|
||||||
|
<artifactId>aspectjweaver</artifactId>
|
||||||
|
<version>1.9.6</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
</project>
|
<build>
|
||||||
|
<!-- 设置构建的 jar 包名 -->
|
||||||
|
<finalName>${project.artifactId}</finalName>
|
||||||
|
<!-- 使用 spring-boot-maven-plugin 插件打包 -->
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
|
||||||
|
</project>
|
||||||
|
@ -3,24 +3,17 @@ package cn.iocoder.mall.promotionservice.service.banner;
|
|||||||
import cn.iocoder.common.framework.enums.CommonStatusEnum;
|
import cn.iocoder.common.framework.enums.CommonStatusEnum;
|
||||||
import cn.iocoder.common.framework.exception.util.ServiceExceptionUtil;
|
import cn.iocoder.common.framework.exception.util.ServiceExceptionUtil;
|
||||||
import cn.iocoder.mall.mybatis.core.enums.DeletedStatusEnum;
|
import cn.iocoder.mall.mybatis.core.enums.DeletedStatusEnum;
|
||||||
import cn.iocoder.mall.promotion.api.enums.PromotionActivityTypeEnum;
|
import cn.iocoder.mall.promotion.api.enums.PromotionErrorCodeConstants;
|
||||||
import cn.iocoder.mall.promotion.api.enums.PromotionErrorCodeEnum;
|
|
||||||
import cn.iocoder.mall.promotion.api.enums.RangeTypeEnum;
|
|
||||||
import cn.iocoder.mall.promotion.api.rpc.banner.dto.BannerPageDTO;
|
import cn.iocoder.mall.promotion.api.rpc.banner.dto.BannerPageDTO;
|
||||||
import cn.iocoder.mall.promotionservice.convert.activity.PromotionActivityConvert;
|
|
||||||
import cn.iocoder.mall.promotionservice.convert.banner.BannerConvert;
|
import cn.iocoder.mall.promotionservice.convert.banner.BannerConvert;
|
||||||
import cn.iocoder.mall.promotionservice.dal.mysql.dataobject.activity.PromotionActivityDO;
|
|
||||||
import cn.iocoder.mall.promotionservice.dal.mysql.dataobject.banner.BannerDO;
|
import cn.iocoder.mall.promotionservice.dal.mysql.dataobject.banner.BannerDO;
|
||||||
import cn.iocoder.mall.promotionservice.dal.mysql.mapper.activity.PromotionActivityMapper;
|
|
||||||
import cn.iocoder.mall.promotionservice.dal.mysql.mapper.banner.BannerMapper;
|
import cn.iocoder.mall.promotionservice.dal.mysql.mapper.banner.BannerMapper;
|
||||||
import cn.iocoder.mall.promotionservice.service.activity.bo.PromotionActivityPageBO;
|
|
||||||
import cn.iocoder.mall.promotionservice.service.banner.bo.BannerAddBO;
|
import cn.iocoder.mall.promotionservice.service.banner.bo.BannerAddBO;
|
||||||
import cn.iocoder.mall.promotionservice.service.banner.bo.BannerBO;
|
import cn.iocoder.mall.promotionservice.service.banner.bo.BannerBO;
|
||||||
import cn.iocoder.mall.promotionservice.service.banner.bo.BannerPageBO;
|
import cn.iocoder.mall.promotionservice.service.banner.bo.BannerPageBO;
|
||||||
import cn.iocoder.mall.promotionservice.service.banner.bo.BannerUpdateBO;
|
import cn.iocoder.mall.promotionservice.service.banner.bo.BannerUpdateBO;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.util.Assert;
|
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
@ -61,7 +54,7 @@ public class BannerService {
|
|||||||
public Boolean updateBanner(Integer adminId, BannerUpdateBO bannerUpdateDTO) {
|
public Boolean updateBanner(Integer adminId, BannerUpdateBO bannerUpdateDTO) {
|
||||||
// 校验 Banner 存在
|
// 校验 Banner 存在
|
||||||
if (bannerMapper.selectById(bannerUpdateDTO.getId()) == null) {
|
if (bannerMapper.selectById(bannerUpdateDTO.getId()) == null) {
|
||||||
throw ServiceExceptionUtil.exception(PromotionErrorCodeEnum.BANNER_NOT_EXISTS.getCode());
|
throw ServiceExceptionUtil.exception(PromotionErrorCodeConstants.BANNER_NOT_EXISTS.getCode());
|
||||||
}
|
}
|
||||||
// 更新到数据库
|
// 更新到数据库
|
||||||
BannerDO updateBanner = BannerConvert.INSTANCE.convert(bannerUpdateDTO);
|
BannerDO updateBanner = BannerConvert.INSTANCE.convert(bannerUpdateDTO);
|
||||||
@ -73,7 +66,7 @@ public class BannerService {
|
|||||||
public Boolean updateBannerStatus(Integer adminId, Integer bannerId, Integer status) {
|
public Boolean updateBannerStatus(Integer adminId, Integer bannerId, Integer status) {
|
||||||
// 校验 Banner 存在
|
// 校验 Banner 存在
|
||||||
if (bannerMapper.selectById(bannerId) == null) {
|
if (bannerMapper.selectById(bannerId) == null) {
|
||||||
throw ServiceExceptionUtil.exception(PromotionErrorCodeEnum.BANNER_NOT_EXISTS.getCode());
|
throw ServiceExceptionUtil.exception(PromotionErrorCodeConstants.BANNER_NOT_EXISTS.getCode());
|
||||||
}
|
}
|
||||||
// 更新到数据库
|
// 更新到数据库
|
||||||
BannerDO updateBanner = new BannerDO().setId(bannerId).setStatus(status);
|
BannerDO updateBanner = new BannerDO().setId(bannerId).setStatus(status);
|
||||||
@ -85,7 +78,7 @@ public class BannerService {
|
|||||||
public Boolean deleteBanner(Integer adminId, Integer bannerId) {
|
public Boolean deleteBanner(Integer adminId, Integer bannerId) {
|
||||||
// 校验 Banner 存在
|
// 校验 Banner 存在
|
||||||
if (bannerMapper.selectById(bannerId) == null) {
|
if (bannerMapper.selectById(bannerId) == null) {
|
||||||
throw ServiceExceptionUtil.exception(PromotionErrorCodeEnum.BANNER_NOT_EXISTS.getCode());
|
throw ServiceExceptionUtil.exception(PromotionErrorCodeConstants.BANNER_NOT_EXISTS.getCode());
|
||||||
}
|
}
|
||||||
// 更新到数据库
|
// 更新到数据库
|
||||||
BannerDO updateBanner = new BannerDO().setId(bannerId);
|
BannerDO updateBanner = new BannerDO().setId(bannerId);
|
||||||
|
@ -12,7 +12,6 @@ import cn.iocoder.mall.promotionservice.dal.mysql.mapper.coupon.CouponCardMapper
|
|||||||
import cn.iocoder.mall.promotionservice.dal.mysql.mapper.coupon.CouponTemplateMapper;
|
import cn.iocoder.mall.promotionservice.dal.mysql.mapper.coupon.CouponTemplateMapper;
|
||||||
import cn.iocoder.mall.promotionservice.service.coupon.bo.*;
|
import cn.iocoder.mall.promotionservice.service.coupon.bo.*;
|
||||||
import cn.iocoder.common.framework.util.*;
|
import cn.iocoder.common.framework.util.*;
|
||||||
import io.netty.util.internal.StringUtil;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
@ -80,15 +79,15 @@ public class CouponService {
|
|||||||
// 校验 CouponCardTemplate 存在
|
// 校验 CouponCardTemplate 存在
|
||||||
CouponTemplateDO template = couponTemplateMapper.selectById(couponCardTemplateUpdateDTO.getId());
|
CouponTemplateDO template = couponTemplateMapper.selectById(couponCardTemplateUpdateDTO.getId());
|
||||||
if (template == null) {
|
if (template == null) {
|
||||||
throw ServiceExceptionUtil.exception(PromotionErrorCodeEnum.COUPON_TEMPLATE_NOT_EXISTS.getCode());
|
throw ServiceExceptionUtil.exception(PromotionErrorCodeConstants.COUPON_TEMPLATE_NOT_EXISTS.getCode());
|
||||||
}
|
}
|
||||||
// 校验 CouponCardTemplate 是 CARD
|
// 校验 CouponCardTemplate 是 CARD
|
||||||
if (!CouponTemplateTypeEnum.CARD.getValue().equals(template.getType())) {
|
if (!CouponTemplateTypeEnum.CARD.getValue().equals(template.getType())) {
|
||||||
throw ServiceExceptionUtil.exception(PromotionErrorCodeEnum.COUPON_TEMPLATE_NOT_CARD.getCode());
|
throw ServiceExceptionUtil.exception(PromotionErrorCodeConstants.COUPON_TEMPLATE_NOT_CARD.getCode());
|
||||||
}
|
}
|
||||||
// 校验发放数量不能减少
|
// 校验发放数量不能减少
|
||||||
if (couponCardTemplateUpdateDTO.getTotal() < template.getTotal()) {
|
if (couponCardTemplateUpdateDTO.getTotal() < template.getTotal()) {
|
||||||
throw ServiceExceptionUtil.exception(PromotionErrorCodeEnum.COUPON_TEMPLATE_TOTAL_CAN_NOT_REDUCE.getCode());
|
throw ServiceExceptionUtil.exception(PromotionErrorCodeConstants.COUPON_TEMPLATE_TOTAL_CAN_NOT_REDUCE.getCode());
|
||||||
}
|
}
|
||||||
// 更新优惠劵模板到数据库
|
// 更新优惠劵模板到数据库
|
||||||
CouponTemplateDO updateTemplateDO = CouponTemplateConvert.INSTANCE.convert(couponCardTemplateUpdateDTO);
|
CouponTemplateDO updateTemplateDO = CouponTemplateConvert.INSTANCE.convert(couponCardTemplateUpdateDTO);
|
||||||
@ -101,7 +100,7 @@ public class CouponService {
|
|||||||
// 校验 CouponCardTemplate 存在
|
// 校验 CouponCardTemplate 存在
|
||||||
CouponTemplateDO template = couponTemplateMapper.selectById(couponTemplateId);
|
CouponTemplateDO template = couponTemplateMapper.selectById(couponTemplateId);
|
||||||
if (template == null) {
|
if (template == null) {
|
||||||
throw ServiceExceptionUtil.exception(PromotionErrorCodeEnum.COUPON_TEMPLATE_NOT_EXISTS.getCode());
|
throw ServiceExceptionUtil.exception(PromotionErrorCodeConstants.COUPON_TEMPLATE_NOT_EXISTS.getCode());
|
||||||
}
|
}
|
||||||
// 更新到数据库
|
// 更新到数据库
|
||||||
CouponTemplateDO updateTemplateDO = new CouponTemplateDO().setId(couponTemplateId).setStatus(status);
|
CouponTemplateDO updateTemplateDO = new CouponTemplateDO().setId(couponTemplateId).setStatus(status);
|
||||||
@ -173,28 +172,28 @@ public class CouponService {
|
|||||||
// 校验 CouponCardTemplate 存在
|
// 校验 CouponCardTemplate 存在
|
||||||
CouponTemplateDO template = couponTemplateMapper.selectById(couponTemplateId);
|
CouponTemplateDO template = couponTemplateMapper.selectById(couponTemplateId);
|
||||||
if (template == null) {
|
if (template == null) {
|
||||||
throw ServiceExceptionUtil.exception(PromotionErrorCodeEnum.COUPON_TEMPLATE_NOT_EXISTS.getCode());
|
throw ServiceExceptionUtil.exception(PromotionErrorCodeConstants.COUPON_TEMPLATE_NOT_EXISTS.getCode());
|
||||||
}
|
}
|
||||||
// 校验 CouponCardTemplate 是 CARD
|
// 校验 CouponCardTemplate 是 CARD
|
||||||
if (!CouponTemplateTypeEnum.CARD.getValue().equals(template.getType())) {
|
if (!CouponTemplateTypeEnum.CARD.getValue().equals(template.getType())) {
|
||||||
throw ServiceExceptionUtil.exception(PromotionErrorCodeEnum.COUPON_TEMPLATE_NOT_CARD.getCode());
|
throw ServiceExceptionUtil.exception(PromotionErrorCodeConstants.COUPON_TEMPLATE_NOT_CARD.getCode());
|
||||||
}
|
}
|
||||||
// 校验 CouponCardTemplate 状态是否开启
|
// 校验 CouponCardTemplate 状态是否开启
|
||||||
if (!CouponTemplateStatusEnum.ENABLE.getValue().equals(template.getStatus())) {
|
if (!CouponTemplateStatusEnum.ENABLE.getValue().equals(template.getStatus())) {
|
||||||
throw ServiceExceptionUtil.exception(PromotionErrorCodeEnum.COUPON_TEMPLATE_STATUS_NOT_ENABLE.getCode());
|
throw ServiceExceptionUtil.exception(PromotionErrorCodeConstants.COUPON_TEMPLATE_STATUS_NOT_ENABLE.getCode());
|
||||||
}
|
}
|
||||||
// 校验 CouponCardTemplate 是否到达可领取的上限
|
// 校验 CouponCardTemplate 是否到达可领取的上限
|
||||||
if (template.getStatFetchNum() > template.getTotal()) {
|
if (template.getStatFetchNum() > template.getTotal()) {
|
||||||
throw ServiceExceptionUtil.exception(PromotionErrorCodeEnum.COUPON_TEMPLATE_TOTAL_NOT_ENOUGH.getCode());
|
throw ServiceExceptionUtil.exception(PromotionErrorCodeConstants.COUPON_TEMPLATE_TOTAL_NOT_ENOUGH.getCode());
|
||||||
}
|
}
|
||||||
// 校验单人可领取优惠劵是否到达上限
|
// 校验单人可领取优惠劵是否到达上限
|
||||||
if (couponCardMapper.selectCountByUserIdAndTemplateId(userId, couponTemplateId) > template.getQuota()) {
|
if (couponCardMapper.selectCountByUserIdAndTemplateId(userId, couponTemplateId) > template.getQuota()) {
|
||||||
throw ServiceExceptionUtil.exception(PromotionErrorCodeEnum.COUPON_TEMPLATE_CARD_ADD_EXCEED_QUOTA.getCode());
|
throw ServiceExceptionUtil.exception(PromotionErrorCodeConstants.COUPON_TEMPLATE_CARD_ADD_EXCEED_QUOTA.getCode());
|
||||||
}
|
}
|
||||||
// 增加优惠劵已领取量
|
// 增加优惠劵已领取量
|
||||||
int updateTemplateCount = couponTemplateMapper.updateStatFetchNumIncr(couponTemplateId);
|
int updateTemplateCount = couponTemplateMapper.updateStatFetchNumIncr(couponTemplateId);
|
||||||
if (updateTemplateCount == 0) { // 超过 CouponCardTemplate 发放量
|
if (updateTemplateCount == 0) { // 超过 CouponCardTemplate 发放量
|
||||||
throw ServiceExceptionUtil.exception(PromotionErrorCodeEnum.COUPON_TEMPLATE_CARD_ADD_EXCEED_QUOTA.getCode());
|
throw ServiceExceptionUtil.exception(PromotionErrorCodeConstants.COUPON_TEMPLATE_CARD_ADD_EXCEED_QUOTA.getCode());
|
||||||
}
|
}
|
||||||
// 创建优惠劵
|
// 创建优惠劵
|
||||||
// 1. 基本信息 + 领取情况
|
// 1. 基本信息 + 领取情况
|
||||||
@ -222,22 +221,22 @@ public class CouponService {
|
|||||||
// 查询优惠劵
|
// 查询优惠劵
|
||||||
CouponCardDO card = couponCardMapper.selectById(couponCardId);
|
CouponCardDO card = couponCardMapper.selectById(couponCardId);
|
||||||
if (card == null) {
|
if (card == null) {
|
||||||
throw ServiceExceptionUtil.exception(PromotionErrorCodeEnum.COUPON_CARD_NOT_EXISTS.getCode());
|
throw ServiceExceptionUtil.exception(PromotionErrorCodeConstants.COUPON_CARD_NOT_EXISTS.getCode());
|
||||||
}
|
}
|
||||||
if (!userId.equals(card.getUserId())) {
|
if (!userId.equals(card.getUserId())) {
|
||||||
throw ServiceExceptionUtil.exception(PromotionErrorCodeEnum.COUPON_CARD_ERROR_USER.getCode());
|
throw ServiceExceptionUtil.exception(PromotionErrorCodeConstants.COUPON_CARD_ERROR_USER.getCode());
|
||||||
}
|
}
|
||||||
if (!CouponCardStatusEnum.UNUSED.getValue().equals(card.getStatus())) {
|
if (!CouponCardStatusEnum.UNUSED.getValue().equals(card.getStatus())) {
|
||||||
throw ServiceExceptionUtil.exception(PromotionErrorCodeEnum.COUPON_CARD_STATUS_NOT_UNUSED.getCode());
|
throw ServiceExceptionUtil.exception(PromotionErrorCodeConstants.COUPON_CARD_STATUS_NOT_UNUSED.getCode());
|
||||||
}
|
}
|
||||||
if (DateUtil.isBetween(card.getValidStartTime(), card.getValidEndTime())) { // 为避免定时器没跑,实际优惠劵已经过期
|
if (DateUtil.isBetween(card.getValidStartTime(), card.getValidEndTime())) { // 为避免定时器没跑,实际优惠劵已经过期
|
||||||
throw ServiceExceptionUtil.exception(PromotionErrorCodeEnum.COUPON_CARD_STATUS_NOT_UNUSED.getCode());
|
throw ServiceExceptionUtil.exception(PromotionErrorCodeConstants.COUPON_CARD_STATUS_NOT_UNUSED.getCode());
|
||||||
}
|
}
|
||||||
// 更新优惠劵已使用
|
// 更新优惠劵已使用
|
||||||
int updateCount = couponCardMapper.updateByIdAndStatus(card.getId(), CouponCardStatusEnum.UNUSED.getValue(),
|
int updateCount = couponCardMapper.updateByIdAndStatus(card.getId(), CouponCardStatusEnum.UNUSED.getValue(),
|
||||||
new CouponCardDO().setStatus(CouponCardStatusEnum.USED.getValue()).setUsedTime(new Date()));
|
new CouponCardDO().setStatus(CouponCardStatusEnum.USED.getValue()).setUsedTime(new Date()));
|
||||||
if (updateCount == 0) {
|
if (updateCount == 0) {
|
||||||
throw ServiceExceptionUtil.exception(PromotionErrorCodeEnum.COUPON_CARD_STATUS_NOT_UNUSED.getCode());
|
throw ServiceExceptionUtil.exception(PromotionErrorCodeConstants.COUPON_CARD_STATUS_NOT_UNUSED.getCode());
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -246,19 +245,19 @@ public class CouponService {
|
|||||||
// 查询优惠劵
|
// 查询优惠劵
|
||||||
CouponCardDO card = couponCardMapper.selectById(couponCardId);
|
CouponCardDO card = couponCardMapper.selectById(couponCardId);
|
||||||
if (card == null) {
|
if (card == null) {
|
||||||
throw ServiceExceptionUtil.exception(PromotionErrorCodeEnum.COUPON_CARD_NOT_EXISTS.getCode());
|
throw ServiceExceptionUtil.exception(PromotionErrorCodeConstants.COUPON_CARD_NOT_EXISTS.getCode());
|
||||||
}
|
}
|
||||||
if (!userId.equals(card.getUserId())) {
|
if (!userId.equals(card.getUserId())) {
|
||||||
throw ServiceExceptionUtil.exception(PromotionErrorCodeEnum.COUPON_CARD_ERROR_USER.getCode());
|
throw ServiceExceptionUtil.exception(PromotionErrorCodeConstants.COUPON_CARD_ERROR_USER.getCode());
|
||||||
}
|
}
|
||||||
if (!CouponCardStatusEnum.USED.getValue().equals(card.getStatus())) {
|
if (!CouponCardStatusEnum.USED.getValue().equals(card.getStatus())) {
|
||||||
throw ServiceExceptionUtil.exception(PromotionErrorCodeEnum.COUPON_CARD_STATUS_NOT_USED.getCode());
|
throw ServiceExceptionUtil.exception(PromotionErrorCodeConstants.COUPON_CARD_STATUS_NOT_USED.getCode());
|
||||||
}
|
}
|
||||||
// 更新优惠劵已使用
|
// 更新优惠劵已使用
|
||||||
int updateCount = couponCardMapper.updateByIdAndStatus(card.getId(), CouponCardStatusEnum.USED.getValue(),
|
int updateCount = couponCardMapper.updateByIdAndStatus(card.getId(), CouponCardStatusEnum.USED.getValue(),
|
||||||
new CouponCardDO().setStatus(CouponCardStatusEnum.UNUSED.getValue())); // TODO 芋艿,usedTime 未设置空,后面处理。
|
new CouponCardDO().setStatus(CouponCardStatusEnum.UNUSED.getValue())); // TODO 芋艿,usedTime 未设置空,后面处理。
|
||||||
if (updateCount == 0) {
|
if (updateCount == 0) {
|
||||||
throw ServiceExceptionUtil.exception(PromotionErrorCodeEnum.COUPON_CARD_STATUS_NOT_USED.getCode());
|
throw ServiceExceptionUtil.exception(PromotionErrorCodeConstants.COUPON_CARD_STATUS_NOT_USED.getCode());
|
||||||
}
|
}
|
||||||
// 有一点要注意,更新会未使用时,优惠劵可能已经过期了,直接让定时器跑过期,这里不做处理。
|
// 有一点要注意,更新会未使用时,优惠劵可能已经过期了,直接让定时器跑过期,这里不做处理。
|
||||||
return true;
|
return true;
|
||||||
@ -268,15 +267,15 @@ public class CouponService {
|
|||||||
// 查询优惠劵
|
// 查询优惠劵
|
||||||
CouponCardDO card = couponCardMapper.selectById(couponCardId);
|
CouponCardDO card = couponCardMapper.selectById(couponCardId);
|
||||||
if (card == null) {
|
if (card == null) {
|
||||||
throw ServiceExceptionUtil.exception(PromotionErrorCodeEnum.COUPON_CARD_NOT_EXISTS.getCode());
|
throw ServiceExceptionUtil.exception(PromotionErrorCodeConstants.COUPON_CARD_NOT_EXISTS.getCode());
|
||||||
}
|
}
|
||||||
if (!userId.equals(card.getUserId())) {
|
if (!userId.equals(card.getUserId())) {
|
||||||
throw ServiceExceptionUtil.exception(PromotionErrorCodeEnum.COUPON_CARD_ERROR_USER.getCode());
|
throw ServiceExceptionUtil.exception(PromotionErrorCodeConstants.COUPON_CARD_ERROR_USER.getCode());
|
||||||
}
|
}
|
||||||
// 查询优惠劵模板
|
// 查询优惠劵模板
|
||||||
CouponTemplateDO template = couponTemplateMapper.selectById(card.getTemplateId());
|
CouponTemplateDO template = couponTemplateMapper.selectById(card.getTemplateId());
|
||||||
if (template == null) {
|
if (template == null) {
|
||||||
throw ServiceExceptionUtil.exception(PromotionErrorCodeEnum.COUPON_TEMPLATE_NOT_EXISTS.getCode());
|
throw ServiceExceptionUtil.exception(PromotionErrorCodeConstants.COUPON_TEMPLATE_NOT_EXISTS.getCode());
|
||||||
}
|
}
|
||||||
// 拼接结果
|
// 拼接结果
|
||||||
CouponCardDetailRespDTO detail = CouponCardConvert.INSTANCE.convert2(card);
|
CouponCardDetailRespDTO detail = CouponCardConvert.INSTANCE.convert2(card);
|
||||||
|
@ -4,7 +4,7 @@ import cn.iocoder.common.framework.enums.CommonStatusEnum;
|
|||||||
import cn.iocoder.common.framework.exception.util.ServiceExceptionUtil;
|
import cn.iocoder.common.framework.exception.util.ServiceExceptionUtil;
|
||||||
import cn.iocoder.mall.mybatis.core.enums.DeletedStatusEnum;
|
import cn.iocoder.mall.mybatis.core.enums.DeletedStatusEnum;
|
||||||
import cn.iocoder.mall.productservice.rpc.spu.ProductSpuRpc;
|
import cn.iocoder.mall.productservice.rpc.spu.ProductSpuRpc;
|
||||||
import cn.iocoder.mall.promotion.api.enums.PromotionErrorCodeEnum;
|
import cn.iocoder.mall.promotion.api.enums.PromotionErrorCodeConstants;
|
||||||
import cn.iocoder.mall.promotion.api.rpc.recommend.dto.ProductRecommendPageReqDTO;
|
import cn.iocoder.mall.promotion.api.rpc.recommend.dto.ProductRecommendPageReqDTO;
|
||||||
import cn.iocoder.mall.promotion.api.rpc.recommend.dto.ProductRecommendPageRespDTO;
|
import cn.iocoder.mall.promotion.api.rpc.recommend.dto.ProductRecommendPageRespDTO;
|
||||||
import cn.iocoder.mall.promotionservice.convert.recommend.ProductRecommendConvert;
|
import cn.iocoder.mall.promotionservice.convert.recommend.ProductRecommendConvert;
|
||||||
@ -12,7 +12,6 @@ import cn.iocoder.mall.promotionservice.dal.mysql.dataobject.recommend.ProductRe
|
|||||||
import cn.iocoder.mall.promotionservice.dal.mysql.mapper.recommend.ProductRecommendMapper;
|
import cn.iocoder.mall.promotionservice.dal.mysql.mapper.recommend.ProductRecommendMapper;
|
||||||
import cn.iocoder.mall.promotionservice.service.recommend.bo.ProductRecommendAddBO;
|
import cn.iocoder.mall.promotionservice.service.recommend.bo.ProductRecommendAddBO;
|
||||||
import cn.iocoder.mall.promotionservice.service.recommend.bo.ProductRecommendBO;
|
import cn.iocoder.mall.promotionservice.service.recommend.bo.ProductRecommendBO;
|
||||||
import cn.iocoder.mall.promotionservice.service.recommend.bo.ProductRecommendPageBO;
|
|
||||||
import cn.iocoder.mall.promotionservice.service.recommend.bo.ProductRecommendUpdateBO;
|
import cn.iocoder.mall.promotionservice.service.recommend.bo.ProductRecommendUpdateBO;
|
||||||
import org.apache.dubbo.config.annotation.Reference;
|
import org.apache.dubbo.config.annotation.Reference;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
@ -51,11 +50,11 @@ public class ProductRecommendService {
|
|||||||
public ProductRecommendBO addProductRecommend(Integer adminId, ProductRecommendAddBO productRecommendAddDTO) {
|
public ProductRecommendBO addProductRecommend(Integer adminId, ProductRecommendAddBO productRecommendAddDTO) {
|
||||||
// 校验商品不存在
|
// 校验商品不存在
|
||||||
if (productSpuRpc.getProductSpu(productRecommendAddDTO.getProductSpuId()) == null) {
|
if (productSpuRpc.getProductSpu(productRecommendAddDTO.getProductSpuId()) == null) {
|
||||||
throw ServiceExceptionUtil.exception(PromotionErrorCodeEnum.PRODUCT_RECOMMEND_PRODUCT_NOT_EXISTS.getCode());
|
throw ServiceExceptionUtil.exception(PromotionErrorCodeConstants.PRODUCT_RECOMMEND_PRODUCT_NOT_EXISTS.getCode());
|
||||||
}
|
}
|
||||||
// 校验商品是否已经推荐
|
// 校验商品是否已经推荐
|
||||||
if (productRecommendMapper.selectByProductSpuIdAndType(productRecommendAddDTO.getProductSpuId(), productRecommendAddDTO.getType()) != null) {
|
if (productRecommendMapper.selectByProductSpuIdAndType(productRecommendAddDTO.getProductSpuId(), productRecommendAddDTO.getType()) != null) {
|
||||||
throw ServiceExceptionUtil.exception(PromotionErrorCodeEnum.PRODUCT_RECOMMEND_EXISTS.getCode());
|
throw ServiceExceptionUtil.exception(PromotionErrorCodeConstants.PRODUCT_RECOMMEND_EXISTS.getCode());
|
||||||
}
|
}
|
||||||
// 保存到数据库
|
// 保存到数据库
|
||||||
ProductRecommendDO productRecommend = ProductRecommendConvert.INSTANCE.convert(productRecommendAddDTO).setStatus(CommonStatusEnum.ENABLE.getValue());
|
ProductRecommendDO productRecommend = ProductRecommendConvert.INSTANCE.convert(productRecommendAddDTO).setStatus(CommonStatusEnum.ENABLE.getValue());
|
||||||
@ -68,16 +67,16 @@ public class ProductRecommendService {
|
|||||||
public Boolean updateProductRecommend(Integer adminId, ProductRecommendUpdateBO productRecommendUpdateDTO) {
|
public Boolean updateProductRecommend(Integer adminId, ProductRecommendUpdateBO productRecommendUpdateDTO) {
|
||||||
// 校验更新的商品推荐存在
|
// 校验更新的商品推荐存在
|
||||||
if (productRecommendMapper.selectById(productRecommendUpdateDTO.getId()) == null) {
|
if (productRecommendMapper.selectById(productRecommendUpdateDTO.getId()) == null) {
|
||||||
throw ServiceExceptionUtil.exception(PromotionErrorCodeEnum.PRODUCT_RECOMMEND_NOT_EXISTS.getCode());
|
throw ServiceExceptionUtil.exception(PromotionErrorCodeConstants.PRODUCT_RECOMMEND_NOT_EXISTS.getCode());
|
||||||
}
|
}
|
||||||
// 校验商品不存在
|
// 校验商品不存在
|
||||||
if (productSpuRpc.getProductSpu(productRecommendUpdateDTO.getProductSpuId()) == null) {
|
if (productSpuRpc.getProductSpu(productRecommendUpdateDTO.getProductSpuId()) == null) {
|
||||||
throw ServiceExceptionUtil.exception(PromotionErrorCodeEnum.PRODUCT_RECOMMEND_PRODUCT_NOT_EXISTS.getCode());
|
throw ServiceExceptionUtil.exception(PromotionErrorCodeConstants.PRODUCT_RECOMMEND_PRODUCT_NOT_EXISTS.getCode());
|
||||||
}
|
}
|
||||||
// 校验商品是否已经推荐
|
// 校验商品是否已经推荐
|
||||||
ProductRecommendDO existProductRecommend = productRecommendMapper.selectByProductSpuIdAndType(productRecommendUpdateDTO.getProductSpuId(), productRecommendUpdateDTO.getType());
|
ProductRecommendDO existProductRecommend = productRecommendMapper.selectByProductSpuIdAndType(productRecommendUpdateDTO.getProductSpuId(), productRecommendUpdateDTO.getType());
|
||||||
if (existProductRecommend != null && !existProductRecommend.getId().equals(productRecommendUpdateDTO.getId())) {
|
if (existProductRecommend != null && !existProductRecommend.getId().equals(productRecommendUpdateDTO.getId())) {
|
||||||
throw ServiceExceptionUtil.exception(PromotionErrorCodeEnum.PRODUCT_RECOMMEND_EXISTS.getCode());
|
throw ServiceExceptionUtil.exception(PromotionErrorCodeConstants.PRODUCT_RECOMMEND_EXISTS.getCode());
|
||||||
}
|
}
|
||||||
// 更新到数据库
|
// 更新到数据库
|
||||||
ProductRecommendDO updateProductRecommend = ProductRecommendConvert.INSTANCE.convert(productRecommendUpdateDTO);
|
ProductRecommendDO updateProductRecommend = ProductRecommendConvert.INSTANCE.convert(productRecommendUpdateDTO);
|
||||||
@ -89,7 +88,7 @@ public class ProductRecommendService {
|
|||||||
public Boolean updateProductRecommendStatus(Integer adminId, Integer productRecommendId, Integer status) {
|
public Boolean updateProductRecommendStatus(Integer adminId, Integer productRecommendId, Integer status) {
|
||||||
// 校验更新的商品推荐存在
|
// 校验更新的商品推荐存在
|
||||||
if (productRecommendMapper.selectById(productRecommendId) == null) {
|
if (productRecommendMapper.selectById(productRecommendId) == null) {
|
||||||
throw ServiceExceptionUtil.exception(PromotionErrorCodeEnum.PRODUCT_RECOMMEND_NOT_EXISTS.getCode());
|
throw ServiceExceptionUtil.exception(PromotionErrorCodeConstants.PRODUCT_RECOMMEND_NOT_EXISTS.getCode());
|
||||||
}
|
}
|
||||||
// 更新到数据库
|
// 更新到数据库
|
||||||
ProductRecommendDO updateProductRecommend = new ProductRecommendDO().setId(productRecommendId).setStatus(status);
|
ProductRecommendDO updateProductRecommend = new ProductRecommendDO().setId(productRecommendId).setStatus(status);
|
||||||
@ -101,7 +100,7 @@ public class ProductRecommendService {
|
|||||||
public Boolean deleteProductRecommend(Integer adminId, Integer productRecommendId) {
|
public Boolean deleteProductRecommend(Integer adminId, Integer productRecommendId) {
|
||||||
// 校验更新的商品推荐存在
|
// 校验更新的商品推荐存在
|
||||||
if (productRecommendMapper.selectById(productRecommendId) == null) {
|
if (productRecommendMapper.selectById(productRecommendId) == null) {
|
||||||
throw ServiceExceptionUtil.exception(PromotionErrorCodeEnum.PRODUCT_RECOMMEND_NOT_EXISTS.getCode());
|
throw ServiceExceptionUtil.exception(PromotionErrorCodeConstants.PRODUCT_RECOMMEND_NOT_EXISTS.getCode());
|
||||||
}
|
}
|
||||||
// 更新到数据库
|
// 更新到数据库
|
||||||
ProductRecommendDO updateProductRecommend = new ProductRecommendDO().setId(productRecommendId);
|
ProductRecommendDO updateProductRecommend = new ProductRecommendDO().setId(productRecommendId);
|
||||||
|
@ -0,0 +1,21 @@
|
|||||||
|
spring:
|
||||||
|
# 数据源配置项
|
||||||
|
datasource:
|
||||||
|
url: jdbc:mysql://400-infra.server.iocoder.cn:3306/mall_promotionr?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 服务注册中心的地址
|
@ -0,0 +1,24 @@
|
|||||||
|
spring:
|
||||||
|
# 数据源配置项
|
||||||
|
datasource:
|
||||||
|
url: jdbc:mysql://400-infra.server.iocoder.cn:3306/mall_promotion?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 路由分组
|
@ -0,0 +1,64 @@
|
|||||||
|
spring:
|
||||||
|
# Application 的配置项
|
||||||
|
application:
|
||||||
|
name: promotion-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.promotionservice.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.promotionservice.rpc
|
||||||
|
# Dubbo 服务提供者的配置
|
||||||
|
provider:
|
||||||
|
filter: -exception
|
||||||
|
validation: true # 开启 Provider 参数校验
|
||||||
|
version: 1.0.0 # 服务的版本号
|
||||||
|
# Dubbo 服务消费者的配置
|
||||||
|
consumer:
|
||||||
|
ErrorCodeRpc:
|
||||||
|
version: 1.0.0
|
||||||
|
ProductSkuRpc:
|
||||||
|
version: 1.0.0
|
||||||
|
ProductSpuService:
|
||||||
|
version: 1.0.0
|
||||||
|
|
||||||
|
# RocketMQ 配置项
|
||||||
|
rocketmq:
|
||||||
|
name-server: 400-infra.server.iocoder.cn:9876
|
||||||
|
producer:
|
||||||
|
group: ${spring.application.name}-producer-group
|
||||||
|
|
||||||
|
# Actuator 监控配置项
|
||||||
|
management:
|
||||||
|
server.port: 38085 # 独立端口,避免被暴露出去
|
||||||
|
endpoints.web.exposure.include: '*' # 暴露所有监控端点
|
||||||
|
server.port: ${management.server.port} # 设置使用 Actuator 的服务器端口,因为 RPC 服务不需要 Web 端口
|
||||||
|
|
||||||
|
# Mall 配置项
|
||||||
|
mall:
|
||||||
|
# 错误码配置项对应 ErrorCodeProperties 配置类
|
||||||
|
error-code:
|
||||||
|
group: ${spring.application.name}
|
||||||
|
constants-class: cn.iocoder.mall.promotionservice.enums.PromotionErrorCodeConstants
|
@ -66,6 +66,12 @@
|
|||||||
<artifactId>search-service-api</artifactId>
|
<artifactId>search-service-api</artifactId>
|
||||||
<version>1.0-SNAPSHOT</version>
|
<version>1.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<!-- 订单服务 -->
|
||||||
|
<groupId>cn.iocoder.mall</groupId>
|
||||||
|
<artifactId>order-service-api</artifactId>
|
||||||
|
<version>1.0-SNAPSHOT</version>
|
||||||
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<!-- 系统服务 -->
|
<!-- 系统服务 -->
|
||||||
<groupId>cn.iocoder.mall</groupId>
|
<groupId>cn.iocoder.mall</groupId>
|
||||||
|
@ -0,0 +1,43 @@
|
|||||||
|
package cn.iocoder.mall.shopweb.controller.order;
|
||||||
|
|
||||||
|
import cn.iocoder.common.framework.vo.CommonResult;
|
||||||
|
import cn.iocoder.mall.security.user.core.context.UserSecurityContextHolder;
|
||||||
|
import cn.iocoder.mall.shopweb.manager.order.cart.CartManager;
|
||||||
|
import io.swagger.annotations.Api;
|
||||||
|
import io.swagger.annotations.ApiImplicitParam;
|
||||||
|
import io.swagger.annotations.ApiImplicitParams;
|
||||||
|
import io.swagger.annotations.ApiOperation;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
import static cn.iocoder.common.framework.vo.CommonResult.success;
|
||||||
|
|
||||||
|
@Api(tags = "购物车 API")
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/cart")
|
||||||
|
@Validated
|
||||||
|
public class CartController {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private CartManager cartManager;
|
||||||
|
|
||||||
|
@PostMapping("add")
|
||||||
|
@ApiOperation("添加商品到购物车")
|
||||||
|
@ApiImplicitParams({
|
||||||
|
@ApiImplicitParam(name = "skuId", value = "商品 SKU 编号", required = true, example = "1"),
|
||||||
|
@ApiImplicitParam(name = "quantity", value = "增加数量", required = true, example = "1024")
|
||||||
|
})
|
||||||
|
public CommonResult<Boolean> addCartItem(@RequestParam("skuId") Integer skuId,
|
||||||
|
@RequestParam("quantity") Integer quantity) {
|
||||||
|
cartManager.addCartItem(UserSecurityContextHolder.getUserId(), skuId, quantity);
|
||||||
|
return success(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("sum-quantity")
|
||||||
|
@ApiOperation("查询用户在购物车中的商品数量")
|
||||||
|
public CommonResult<Integer> sumCartItemQuantity() {
|
||||||
|
return success(cartManager.sumCartItemQuantity(UserSecurityContextHolder.getUserId()));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,43 @@
|
|||||||
|
package cn.iocoder.mall.shopweb.manager.order.cart;
|
||||||
|
|
||||||
|
import cn.iocoder.common.framework.vo.CommonResult;
|
||||||
|
import cn.iocoder.mall.orderservice.rpc.cart.CartRpc;
|
||||||
|
import cn.iocoder.mall.orderservice.rpc.cart.dto.CartItemAddReqDTO;
|
||||||
|
import org.apache.dubbo.config.annotation.DubboReference;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 购物车 Manager
|
||||||
|
*/
|
||||||
|
@Service
|
||||||
|
public class CartManager {
|
||||||
|
|
||||||
|
@DubboReference(version = "${dubbo.consumer.ProductCategoryRpc.version}")
|
||||||
|
private CartRpc cartRpc;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 添加商品到购物车
|
||||||
|
*
|
||||||
|
* @param userId 用户编号
|
||||||
|
* @param skuId 商品 SKU 编号
|
||||||
|
* @param quantity 增加数量
|
||||||
|
*/
|
||||||
|
public void addCartItem(Integer userId, Integer skuId, Integer quantity) {
|
||||||
|
CommonResult<Boolean> addCartItemResult = cartRpc.addCartItem(new CartItemAddReqDTO().setUserId(userId)
|
||||||
|
.setSkuId(skuId).setQuantity(quantity));
|
||||||
|
addCartItemResult.checkError();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询用户在购物车中的商品数量
|
||||||
|
*
|
||||||
|
* @param userId 用户编号
|
||||||
|
* @return 商品数量
|
||||||
|
*/
|
||||||
|
public Integer sumCartItemQuantity(Integer userId) {
|
||||||
|
CommonResult<Integer> sumCartItemQuantityResult = cartRpc.sumCartItemQuantity(userId);
|
||||||
|
sumCartItemQuantityResult.checkError();
|
||||||
|
return sumCartItemQuantityResult.getData();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1 @@
|
|||||||
|
package cn.iocoder.mall.shopweb.manager.order;
|
@ -7,7 +7,7 @@ import cn.iocoder.mall.productservice.rpc.category.dto.ProductCategoryListQueryR
|
|||||||
import cn.iocoder.mall.productservice.rpc.category.dto.ProductCategoryRespDTO;
|
import cn.iocoder.mall.productservice.rpc.category.dto.ProductCategoryRespDTO;
|
||||||
import cn.iocoder.mall.shopweb.controller.product.vo.category.ProductCategoryRespVO;
|
import cn.iocoder.mall.shopweb.controller.product.vo.category.ProductCategoryRespVO;
|
||||||
import cn.iocoder.mall.shopweb.convert.product.ProductCategoryConvert;
|
import cn.iocoder.mall.shopweb.convert.product.ProductCategoryConvert;
|
||||||
import org.apache.dubbo.config.annotation.Reference;
|
import org.apache.dubbo.config.annotation.DubboReference;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
|
||||||
@ -20,7 +20,7 @@ import java.util.List;
|
|||||||
@Validated
|
@Validated
|
||||||
public class ProductCategoryManager {
|
public class ProductCategoryManager {
|
||||||
|
|
||||||
@Reference(version = "${dubbo.consumer.ProductCategoryRpc.version}")
|
@DubboReference(version = "${dubbo.consumer.ProductCategoryRpc.version}")
|
||||||
private ProductCategoryRpc productCategoryRpc;
|
private ProductCategoryRpc productCategoryRpc;
|
||||||
|
|
||||||
public List<ProductCategoryRespVO> listProductCategories(Integer pid) {
|
public List<ProductCategoryRespVO> listProductCategories(Integer pid) {
|
||||||
|
Loading…
Reference in New Issue
Block a user