Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
Y
yudao-cloud
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
hblj
yudao-cloud
Commits
84cc2728
提交
84cc2728
authored
8月 07, 2020
作者:
YunaiV
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
迁移 cart 的 web api
解决 promotion-service 模块的启动
上级
5714ddcb
隐藏空白字符变更
内嵌
并排
正在显示
22 个修改的文件
包含
346 行增加
和
129 行删除
+346
-129
CartItemMapper.java
...ll/orderservice/dal/mysql/mapper/cart/CartItemMapper.java
+2
-1
CartManager.java
...n/iocoder/mall/orderservice/manager/cart/CartManager.java
+1
-1
CartItemAddBO.java
...oder/mall/orderservice/service/cart/bo/CartItemAddBO.java
+1
-1
application.yaml
...ect/order-service-app/src/main/resources/application.yaml
+2
-0
UsersCartController.java
.../mall/order/rest/controller/cart/UsersCartController.java
+2
-13
CartServiceImpl.java
...va/cn/iocoder/mall/order/biz/service/CartServiceImpl.java
+1
-1
pom.xml
pom.xml
+1
-3
pom.xml
promotion-service-project/promotion-service-api/pom.xml
+1
-1
PromotionErrorCodeConstants.java
...mall/promotion/api/enums/PromotionErrorCodeConstants.java
+37
-0
PromotionErrorCodeEnum.java
...oder/mall/promotion/api/enums/PromotionErrorCodeEnum.java
+0
-53
pom.xml
promotion-service-project/promotion-service-app/pom.xml
+60
-10
BannerService.java
...r/mall/promotionservice/service/banner/BannerService.java
+4
-11
CouponService.java
...r/mall/promotionservice/service/coupon/CouponService.java
+22
-23
ProductRecommendService.java
...ionservice/service/recommend/ProductRecommendService.java
+8
-9
application-dev.yaml
...otion-service-app/src/main/resources/application-dev.yaml
+21
-0
application-local.yaml
...ion-service-app/src/main/resources/application-local.yaml
+24
-0
application.yaml
...promotion-service-app/src/main/resources/application.yaml
+64
-0
pom.xml
shop-web-app/pom.xml
+6
-0
CartController.java
...iocoder/mall/shopweb/controller/order/CartController.java
+43
-0
CartManager.java
.../iocoder/mall/shopweb/manager/order/cart/CartManager.java
+43
-0
package-info.java
...a/cn/iocoder/mall/shopweb/manager/order/package-info.java
+1
-0
ProductCategoryManager.java
.../mall/shopweb/manager/product/ProductCategoryManager.java
+2
-2
没有找到文件。
order-service-project/order-service-app/src/main/java/cn/iocoder/mall/orderservice/dal/mysql/mapper/cart/CartItemMapper.java
浏览文件 @
84cc2728
...
...
@@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import
org.apache.ibatis.annotations.Param
;
import
org.springframework.stereotype.Repository
;
import
java.math.BigDecimal
;
import
java.util.Collection
;
import
java.util.List
;
import
java.util.Map
;
...
...
@@ -37,7 +38,7 @@ public interface CartItemMapper extends BaseMapper<CartItemDO> {
.
select
(
"SUM(quantity) AS sumQuantity"
)
.
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
)
{
...
...
order-service-project/order-service-app/src/main/java/cn/iocoder/mall/orderservice/manager/cart/CartManager.java
浏览文件 @
84cc2728
...
...
@@ -38,7 +38,7 @@ public class CartManager {
// 校验商品 SKU 是否合法
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
());
}
/**
...
...
order-service-project/order-service-app/src/main/java/cn/iocoder/mall/orderservice/service/cart/bo/CartItemAddBO.java
浏览文件 @
84cc2728
...
...
@@ -10,7 +10,7 @@ import javax.validation.constraints.NotNull;
* 购物车添加购物项 Request DTO
*/
@Data
@Accessors
@Accessors
(
chain
=
true
)
public
class
CartItemAddBO
{
/**
...
...
order-service-project/order-service-app/src/main/resources/application.yaml
浏览文件 @
84cc2728
...
...
@@ -39,6 +39,8 @@ dubbo:
consumer
:
ErrorCodeRpc
:
version
:
1.0.0
ProductSkuRpc
:
version
:
1.0.0
# RocketMQ 配置项
rocketmq
:
...
...
order/order-rest/src/main/java/cn/iocoder/mall/order/rest/controller/cart/UsersCartController.java
浏览文件 @
84cc2728
...
...
@@ -16,14 +16,7 @@ public class UsersCartController {
// @Reference(validation = "true", version = "${dubbo.consumer.CouponService.version}")
// 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")
// public CommonResult<UsersCartDetailVO> updateQuantity(@RequestParam("skuId") Integer skuId, // TODO 芋艿,先暂用这个 VO 。等促销活动出来后,做调整
...
...
@@ -43,11 +36,7 @@ public class UsersCartController {
// // 获得目前购物车明细
// return getCartDetail();
// }
//
// @GetMapping("count")
// public CommonResult<Integer> count() {
// return success(cartService.count(UserSecurityContextHolder.getContext().getUserId()));
// }
//
// @GetMapping("/list")
// public CommonResult<UsersCartDetailVO> list() { // TODO 芋艿,先暂用这个 VO 。等促销活动出来后,做调整
...
...
order/order-service-impl/src/main/java/cn/iocoder/mall/order/biz/service/CartServiceImpl.java
浏览文件 @
84cc2728
...
...
@@ -239,7 +239,7 @@ public class CartServiceImpl implements CartService {
// 判断是否符合条件
int
originalTotal
=
items
.
stream
().
mapToInt
(
CalcOrderPriceBO
.
Item
::
getPresentTotal
).
sum
();
// 此处,指的是以优惠劵视角的原价
if
(
originalTotal
==
0
||
originalTotal
<
couponCard
.
getPriceAvailable
())
{
throw
ServiceExceptionUtil
.
exception
(
PromotionErrorCode
Enum
.
COUPON_CARD_NOT_MATCH
.
getCode
());
// TODO 芋艿,这种情况,会出现错误码的提示,无法格式化出来。另外,这块的最佳实践,找人讨论下。
throw
ServiceExceptionUtil
.
exception
(
PromotionErrorCode
Constants
.
COUPON_CARD_NOT_MATCH
.
getCode
());
// TODO 芋艿,这种情况,会出现错误码的提示,无法格式化出来。另外,这块的最佳实践,找人讨论下。
}
// 计算价格
// 获得到优惠信息,进行价格计算
...
...
pom.xml
浏览文件 @
84cc2728
...
...
@@ -16,10 +16,8 @@
<modules>
<module>
order
</module>
<module>
common
</module>
<!-- <module>system</module>-->
<!-- <module>ops</module>-->
<!-- <module>pay</module>-->
<!-- <module>promotion</module>-->
<module>
mall-dependencies
</module>
<module>
user-service-project
</module>
<module>
user-web-app
</module>
...
...
@@ -28,7 +26,7 @@
<module>
management-web-app
</module>
<module>
shop-web-app
</module>
<module>
product-service-project
</module>
<!-- <module>promotion-service-project</module>--
>
<module>
promotion-service-project
</module
>
<module>
search-service-project
</module>
<module>
order-service-project
</module>
</modules>
...
...
promotion-service-project/promotion-service-api/pom.xml
浏览文件 @
84cc2728
...
...
@@ -3,7 +3,7 @@
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
>
<parent>
<artifactId>
promotion
</artifactId>
<artifactId>
promotion
-service-project
</artifactId>
<groupId>
cn.iocoder.mall
</groupId>
<version>
1.0-SNAPSHOT
</version>
</parent>
...
...
promotion-service-project/promotion-service-api/src/main/java/cn/iocoder/mall/promotion/api/enums/PromotionErrorCodeConstants.java
0 → 100644
浏览文件 @
84cc2728
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
,
"优惠劵不处于已使用状态"
);
}
promotion-service-project/promotion-service-api/src/main/java/cn/iocoder/mall/promotion/api/enums/PromotionErrorCodeEnum.java
deleted
100644 → 0
浏览文件 @
5714ddcb
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
;
}
}
promotion-service-project/promotion-service-app/pom.xml
浏览文件 @
84cc2728
...
...
@@ -12,26 +12,45 @@
<artifactId>
promotion-service-app
</artifactId>
<dependencies>
<!-- RPC 相关 -->
<dependency>
<groupId>
cn.iocoder.mall
</groupId>
<artifactId>
mall-spring-boot-starter-dubbo
</artifactId>
</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>
<artifactId>
promotion-service-api
</artifactId>
</dependency>
<!-- Web 相关 -->
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot
</artifactId
>
<artifactId>
spring-boot
-starter-web
</artifactId>
<!-- 需要开启 Web 容器,因为 Actuator 需要使用到 --
>
</dependency>
<!-- Registry 和 Config 相关 -->
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-
boot-autoconfigure
</artifactId>
<groupId>
com.alibaba.cloud
</groupId>
<artifactId>
spring-
cloud-starter-alibaba-nacos-discovery
</artifactId>
</dependency>
<!-- DB 相关 -->
<dependency>
<groupId>
mysql
</groupId>
<artifactId>
mysql-connector-java
</artifactId>
...
...
@@ -46,12 +65,44 @@
<groupId>
cn.iocoder.mall
</groupId>
<artifactId>
mall-spring-boot-starter-mybatis
</artifactId>
</dependency>
<!-- 工具类相关 -->
<dependency>
<groupId>
cn.iocoder.mall
</groupId>
<artifactId>
product-service-api
</artifactId>
<version>
1.0-SNAPSHOT
</version>
<scope>
compile
</scope>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-validation
</artifactId>
</dependency>
<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>
</dependencies>
</project>
\ No newline at end of file
<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>
promotion-service-project/promotion-service-app/src/main/java/cn/iocoder/mall/promotionservice/service/banner/BannerService.java
浏览文件 @
84cc2728
...
...
@@ -3,24 +3,17 @@ package cn.iocoder.mall.promotionservice.service.banner;
import
cn.iocoder.common.framework.enums.CommonStatusEnum
;
import
cn.iocoder.common.framework.exception.util.ServiceExceptionUtil
;
import
cn.iocoder.mall.mybatis.core.enums.DeletedStatusEnum
;
import
cn.iocoder.mall.promotion.api.enums.PromotionActivityTypeEnum
;
import
cn.iocoder.mall.promotion.api.enums.PromotionErrorCodeEnum
;
import
cn.iocoder.mall.promotion.api.enums.RangeTypeEnum
;
import
cn.iocoder.mall.promotion.api.enums.PromotionErrorCodeConstants
;
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.dal.mysql.dataobject.activity.PromotionActivityDO
;
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.service.activity.bo.PromotionActivityPageBO
;
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.BannerPageBO
;
import
cn.iocoder.mall.promotionservice.service.banner.bo.BannerUpdateBO
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.util.Assert
;
import
org.springframework.validation.annotation.Validated
;
import
java.util.*
;
...
...
@@ -61,7 +54,7 @@ public class BannerService {
public
Boolean
updateBanner
(
Integer
adminId
,
BannerUpdateBO
bannerUpdateDTO
)
{
// 校验 Banner 存在
if
(
bannerMapper
.
selectById
(
bannerUpdateDTO
.
getId
())
==
null
)
{
throw
ServiceExceptionUtil
.
exception
(
PromotionErrorCode
Enum
.
BANNER_NOT_EXISTS
.
getCode
());
throw
ServiceExceptionUtil
.
exception
(
PromotionErrorCode
Constants
.
BANNER_NOT_EXISTS
.
getCode
());
}
// 更新到数据库
BannerDO
updateBanner
=
BannerConvert
.
INSTANCE
.
convert
(
bannerUpdateDTO
);
...
...
@@ -73,7 +66,7 @@ public class BannerService {
public
Boolean
updateBannerStatus
(
Integer
adminId
,
Integer
bannerId
,
Integer
status
)
{
// 校验 Banner 存在
if
(
bannerMapper
.
selectById
(
bannerId
)
==
null
)
{
throw
ServiceExceptionUtil
.
exception
(
PromotionErrorCode
Enum
.
BANNER_NOT_EXISTS
.
getCode
());
throw
ServiceExceptionUtil
.
exception
(
PromotionErrorCode
Constants
.
BANNER_NOT_EXISTS
.
getCode
());
}
// 更新到数据库
BannerDO
updateBanner
=
new
BannerDO
().
setId
(
bannerId
).
setStatus
(
status
);
...
...
@@ -85,7 +78,7 @@ public class BannerService {
public
Boolean
deleteBanner
(
Integer
adminId
,
Integer
bannerId
)
{
// 校验 Banner 存在
if
(
bannerMapper
.
selectById
(
bannerId
)
==
null
)
{
throw
ServiceExceptionUtil
.
exception
(
PromotionErrorCode
Enum
.
BANNER_NOT_EXISTS
.
getCode
());
throw
ServiceExceptionUtil
.
exception
(
PromotionErrorCode
Constants
.
BANNER_NOT_EXISTS
.
getCode
());
}
// 更新到数据库
BannerDO
updateBanner
=
new
BannerDO
().
setId
(
bannerId
);
...
...
promotion-service-project/promotion-service-app/src/main/java/cn/iocoder/mall/promotionservice/service/coupon/CouponService.java
浏览文件 @
84cc2728
...
...
@@ -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.service.coupon.bo.*
;
import
cn.iocoder.common.framework.util.*
;
import
io.netty.util.internal.StringUtil
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
...
...
@@ -80,15 +79,15 @@ public class CouponService {
// 校验 CouponCardTemplate 存在
CouponTemplateDO
template
=
couponTemplateMapper
.
selectById
(
couponCardTemplateUpdateDTO
.
getId
());
if
(
template
==
null
)
{
throw
ServiceExceptionUtil
.
exception
(
PromotionErrorCode
Enum
.
COUPON_TEMPLATE_NOT_EXISTS
.
getCode
());
throw
ServiceExceptionUtil
.
exception
(
PromotionErrorCode
Constants
.
COUPON_TEMPLATE_NOT_EXISTS
.
getCode
());
}
// 校验 CouponCardTemplate 是 CARD
if
(!
CouponTemplateTypeEnum
.
CARD
.
getValue
().
equals
(
template
.
getType
()))
{
throw
ServiceExceptionUtil
.
exception
(
PromotionErrorCode
Enum
.
COUPON_TEMPLATE_NOT_CARD
.
getCode
());
throw
ServiceExceptionUtil
.
exception
(
PromotionErrorCode
Constants
.
COUPON_TEMPLATE_NOT_CARD
.
getCode
());
}
// 校验发放数量不能减少
if
(
couponCardTemplateUpdateDTO
.
getTotal
()
<
template
.
getTotal
())
{
throw
ServiceExceptionUtil
.
exception
(
PromotionErrorCode
Enum
.
COUPON_TEMPLATE_TOTAL_CAN_NOT_REDUCE
.
getCode
());
throw
ServiceExceptionUtil
.
exception
(
PromotionErrorCode
Constants
.
COUPON_TEMPLATE_TOTAL_CAN_NOT_REDUCE
.
getCode
());
}
// 更新优惠劵模板到数据库
CouponTemplateDO
updateTemplateDO
=
CouponTemplateConvert
.
INSTANCE
.
convert
(
couponCardTemplateUpdateDTO
);
...
...
@@ -101,7 +100,7 @@ public class CouponService {
// 校验 CouponCardTemplate 存在
CouponTemplateDO
template
=
couponTemplateMapper
.
selectById
(
couponTemplateId
);
if
(
template
==
null
)
{
throw
ServiceExceptionUtil
.
exception
(
PromotionErrorCode
Enum
.
COUPON_TEMPLATE_NOT_EXISTS
.
getCode
());
throw
ServiceExceptionUtil
.
exception
(
PromotionErrorCode
Constants
.
COUPON_TEMPLATE_NOT_EXISTS
.
getCode
());
}
// 更新到数据库
CouponTemplateDO
updateTemplateDO
=
new
CouponTemplateDO
().
setId
(
couponTemplateId
).
setStatus
(
status
);
...
...
@@ -173,28 +172,28 @@ public class CouponService {
// 校验 CouponCardTemplate 存在
CouponTemplateDO
template
=
couponTemplateMapper
.
selectById
(
couponTemplateId
);
if
(
template
==
null
)
{
throw
ServiceExceptionUtil
.
exception
(
PromotionErrorCode
Enum
.
COUPON_TEMPLATE_NOT_EXISTS
.
getCode
());
throw
ServiceExceptionUtil
.
exception
(
PromotionErrorCode
Constants
.
COUPON_TEMPLATE_NOT_EXISTS
.
getCode
());
}
// 校验 CouponCardTemplate 是 CARD
if
(!
CouponTemplateTypeEnum
.
CARD
.
getValue
().
equals
(
template
.
getType
()))
{
throw
ServiceExceptionUtil
.
exception
(
PromotionErrorCode
Enum
.
COUPON_TEMPLATE_NOT_CARD
.
getCode
());
throw
ServiceExceptionUtil
.
exception
(
PromotionErrorCode
Constants
.
COUPON_TEMPLATE_NOT_CARD
.
getCode
());
}
// 校验 CouponCardTemplate 状态是否开启
if
(!
CouponTemplateStatusEnum
.
ENABLE
.
getValue
().
equals
(
template
.
getStatus
()))
{
throw
ServiceExceptionUtil
.
exception
(
PromotionErrorCode
Enum
.
COUPON_TEMPLATE_STATUS_NOT_ENABLE
.
getCode
());
throw
ServiceExceptionUtil
.
exception
(
PromotionErrorCode
Constants
.
COUPON_TEMPLATE_STATUS_NOT_ENABLE
.
getCode
());
}
// 校验 CouponCardTemplate 是否到达可领取的上限
if
(
template
.
getStatFetchNum
()
>
template
.
getTotal
())
{
throw
ServiceExceptionUtil
.
exception
(
PromotionErrorCode
Enum
.
COUPON_TEMPLATE_TOTAL_NOT_ENOUGH
.
getCode
());
throw
ServiceExceptionUtil
.
exception
(
PromotionErrorCode
Constants
.
COUPON_TEMPLATE_TOTAL_NOT_ENOUGH
.
getCode
());
}
// 校验单人可领取优惠劵是否到达上限
if
(
couponCardMapper
.
selectCountByUserIdAndTemplateId
(
userId
,
couponTemplateId
)
>
template
.
getQuota
())
{
throw
ServiceExceptionUtil
.
exception
(
PromotionErrorCode
Enum
.
COUPON_TEMPLATE_CARD_ADD_EXCEED_QUOTA
.
getCode
());
throw
ServiceExceptionUtil
.
exception
(
PromotionErrorCode
Constants
.
COUPON_TEMPLATE_CARD_ADD_EXCEED_QUOTA
.
getCode
());
}
// 增加优惠劵已领取量
int
updateTemplateCount
=
couponTemplateMapper
.
updateStatFetchNumIncr
(
couponTemplateId
);
if
(
updateTemplateCount
==
0
)
{
// 超过 CouponCardTemplate 发放量
throw
ServiceExceptionUtil
.
exception
(
PromotionErrorCode
Enum
.
COUPON_TEMPLATE_CARD_ADD_EXCEED_QUOTA
.
getCode
());
throw
ServiceExceptionUtil
.
exception
(
PromotionErrorCode
Constants
.
COUPON_TEMPLATE_CARD_ADD_EXCEED_QUOTA
.
getCode
());
}
// 创建优惠劵
// 1. 基本信息 + 领取情况
...
...
@@ -222,22 +221,22 @@ public class CouponService {
// 查询优惠劵
CouponCardDO
card
=
couponCardMapper
.
selectById
(
couponCardId
);
if
(
card
==
null
)
{
throw
ServiceExceptionUtil
.
exception
(
PromotionErrorCode
Enum
.
COUPON_CARD_NOT_EXISTS
.
getCode
());
throw
ServiceExceptionUtil
.
exception
(
PromotionErrorCode
Constants
.
COUPON_CARD_NOT_EXISTS
.
getCode
());
}
if
(!
userId
.
equals
(
card
.
getUserId
()))
{
throw
ServiceExceptionUtil
.
exception
(
PromotionErrorCode
Enum
.
COUPON_CARD_ERROR_USER
.
getCode
());
throw
ServiceExceptionUtil
.
exception
(
PromotionErrorCode
Constants
.
COUPON_CARD_ERROR_USER
.
getCode
());
}
if
(!
CouponCardStatusEnum
.
UNUSED
.
getValue
().
equals
(
card
.
getStatus
()))
{
throw
ServiceExceptionUtil
.
exception
(
PromotionErrorCode
Enum
.
COUPON_CARD_STATUS_NOT_UNUSED
.
getCode
());
throw
ServiceExceptionUtil
.
exception
(
PromotionErrorCode
Constants
.
COUPON_CARD_STATUS_NOT_UNUSED
.
getCode
());
}
if
(
DateUtil
.
isBetween
(
card
.
getValidStartTime
(),
card
.
getValidEndTime
()))
{
// 为避免定时器没跑,实际优惠劵已经过期
throw
ServiceExceptionUtil
.
exception
(
PromotionErrorCode
Enum
.
COUPON_CARD_STATUS_NOT_UNUSED
.
getCode
());
throw
ServiceExceptionUtil
.
exception
(
PromotionErrorCode
Constants
.
COUPON_CARD_STATUS_NOT_UNUSED
.
getCode
());
}
// 更新优惠劵已使用
int
updateCount
=
couponCardMapper
.
updateByIdAndStatus
(
card
.
getId
(),
CouponCardStatusEnum
.
UNUSED
.
getValue
(),
new
CouponCardDO
().
setStatus
(
CouponCardStatusEnum
.
USED
.
getValue
()).
setUsedTime
(
new
Date
()));
if
(
updateCount
==
0
)
{
throw
ServiceExceptionUtil
.
exception
(
PromotionErrorCode
Enum
.
COUPON_CARD_STATUS_NOT_UNUSED
.
getCode
());
throw
ServiceExceptionUtil
.
exception
(
PromotionErrorCode
Constants
.
COUPON_CARD_STATUS_NOT_UNUSED
.
getCode
());
}
return
true
;
}
...
...
@@ -246,19 +245,19 @@ public class CouponService {
// 查询优惠劵
CouponCardDO
card
=
couponCardMapper
.
selectById
(
couponCardId
);
if
(
card
==
null
)
{
throw
ServiceExceptionUtil
.
exception
(
PromotionErrorCode
Enum
.
COUPON_CARD_NOT_EXISTS
.
getCode
());
throw
ServiceExceptionUtil
.
exception
(
PromotionErrorCode
Constants
.
COUPON_CARD_NOT_EXISTS
.
getCode
());
}
if
(!
userId
.
equals
(
card
.
getUserId
()))
{
throw
ServiceExceptionUtil
.
exception
(
PromotionErrorCode
Enum
.
COUPON_CARD_ERROR_USER
.
getCode
());
throw
ServiceExceptionUtil
.
exception
(
PromotionErrorCode
Constants
.
COUPON_CARD_ERROR_USER
.
getCode
());
}
if
(!
CouponCardStatusEnum
.
USED
.
getValue
().
equals
(
card
.
getStatus
()))
{
throw
ServiceExceptionUtil
.
exception
(
PromotionErrorCode
Enum
.
COUPON_CARD_STATUS_NOT_USED
.
getCode
());
throw
ServiceExceptionUtil
.
exception
(
PromotionErrorCode
Constants
.
COUPON_CARD_STATUS_NOT_USED
.
getCode
());
}
// 更新优惠劵已使用
int
updateCount
=
couponCardMapper
.
updateByIdAndStatus
(
card
.
getId
(),
CouponCardStatusEnum
.
USED
.
getValue
(),
new
CouponCardDO
().
setStatus
(
CouponCardStatusEnum
.
UNUSED
.
getValue
()));
// TODO 芋艿,usedTime 未设置空,后面处理。
if
(
updateCount
==
0
)
{
throw
ServiceExceptionUtil
.
exception
(
PromotionErrorCode
Enum
.
COUPON_CARD_STATUS_NOT_USED
.
getCode
());
throw
ServiceExceptionUtil
.
exception
(
PromotionErrorCode
Constants
.
COUPON_CARD_STATUS_NOT_USED
.
getCode
());
}
// 有一点要注意,更新会未使用时,优惠劵可能已经过期了,直接让定时器跑过期,这里不做处理。
return
true
;
...
...
@@ -268,15 +267,15 @@ public class CouponService {
// 查询优惠劵
CouponCardDO
card
=
couponCardMapper
.
selectById
(
couponCardId
);
if
(
card
==
null
)
{
throw
ServiceExceptionUtil
.
exception
(
PromotionErrorCode
Enum
.
COUPON_CARD_NOT_EXISTS
.
getCode
());
throw
ServiceExceptionUtil
.
exception
(
PromotionErrorCode
Constants
.
COUPON_CARD_NOT_EXISTS
.
getCode
());
}
if
(!
userId
.
equals
(
card
.
getUserId
()))
{
throw
ServiceExceptionUtil
.
exception
(
PromotionErrorCode
Enum
.
COUPON_CARD_ERROR_USER
.
getCode
());
throw
ServiceExceptionUtil
.
exception
(
PromotionErrorCode
Constants
.
COUPON_CARD_ERROR_USER
.
getCode
());
}
// 查询优惠劵模板
CouponTemplateDO
template
=
couponTemplateMapper
.
selectById
(
card
.
getTemplateId
());
if
(
template
==
null
)
{
throw
ServiceExceptionUtil
.
exception
(
PromotionErrorCode
Enum
.
COUPON_TEMPLATE_NOT_EXISTS
.
getCode
());
throw
ServiceExceptionUtil
.
exception
(
PromotionErrorCode
Constants
.
COUPON_TEMPLATE_NOT_EXISTS
.
getCode
());
}
// 拼接结果
CouponCardDetailRespDTO
detail
=
CouponCardConvert
.
INSTANCE
.
convert2
(
card
);
...
...
promotion-service-project/promotion-service-app/src/main/java/cn/iocoder/mall/promotionservice/service/recommend/ProductRecommendService.java
浏览文件 @
84cc2728
...
...
@@ -4,7 +4,7 @@ import cn.iocoder.common.framework.enums.CommonStatusEnum;
import
cn.iocoder.common.framework.exception.util.ServiceExceptionUtil
;
import
cn.iocoder.mall.mybatis.core.enums.DeletedStatusEnum
;
import
cn.iocoder.mall.productservice.rpc.spu.ProductSpuRpc
;
import
cn.iocoder.mall.promotion.api.enums.PromotionErrorCode
Enum
;
import
cn.iocoder.mall.promotion.api.enums.PromotionErrorCode
Constants
;
import
cn.iocoder.mall.promotion.api.rpc.recommend.dto.ProductRecommendPageReqDTO
;
import
cn.iocoder.mall.promotion.api.rpc.recommend.dto.ProductRecommendPageRespDTO
;
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.service.recommend.bo.ProductRecommendAddBO
;
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
org.apache.dubbo.config.annotation.Reference
;
import
org.springframework.beans.factory.annotation.Autowired
;
...
...
@@ -51,11 +50,11 @@ public class ProductRecommendService {
public
ProductRecommendBO
addProductRecommend
(
Integer
adminId
,
ProductRecommendAddBO
productRecommendAddDTO
)
{
// 校验商品不存在
if
(
productSpuRpc
.
getProductSpu
(
productRecommendAddDTO
.
getProductSpuId
())
==
null
)
{
throw
ServiceExceptionUtil
.
exception
(
PromotionErrorCode
Enum
.
PRODUCT_RECOMMEND_PRODUCT_NOT_EXISTS
.
getCode
());
throw
ServiceExceptionUtil
.
exception
(
PromotionErrorCode
Constants
.
PRODUCT_RECOMMEND_PRODUCT_NOT_EXISTS
.
getCode
());
}
// 校验商品是否已经推荐
if
(
productRecommendMapper
.
selectByProductSpuIdAndType
(
productRecommendAddDTO
.
getProductSpuId
(),
productRecommendAddDTO
.
getType
())
!=
null
)
{
throw
ServiceExceptionUtil
.
exception
(
PromotionErrorCode
Enum
.
PRODUCT_RECOMMEND_EXISTS
.
getCode
());
throw
ServiceExceptionUtil
.
exception
(
PromotionErrorCode
Constants
.
PRODUCT_RECOMMEND_EXISTS
.
getCode
());
}
// 保存到数据库
ProductRecommendDO
productRecommend
=
ProductRecommendConvert
.
INSTANCE
.
convert
(
productRecommendAddDTO
).
setStatus
(
CommonStatusEnum
.
ENABLE
.
getValue
());
...
...
@@ -68,16 +67,16 @@ public class ProductRecommendService {
public
Boolean
updateProductRecommend
(
Integer
adminId
,
ProductRecommendUpdateBO
productRecommendUpdateDTO
)
{
// 校验更新的商品推荐存在
if
(
productRecommendMapper
.
selectById
(
productRecommendUpdateDTO
.
getId
())
==
null
)
{
throw
ServiceExceptionUtil
.
exception
(
PromotionErrorCode
Enum
.
PRODUCT_RECOMMEND_NOT_EXISTS
.
getCode
());
throw
ServiceExceptionUtil
.
exception
(
PromotionErrorCode
Constants
.
PRODUCT_RECOMMEND_NOT_EXISTS
.
getCode
());
}
// 校验商品不存在
if
(
productSpuRpc
.
getProductSpu
(
productRecommendUpdateDTO
.
getProductSpuId
())
==
null
)
{
throw
ServiceExceptionUtil
.
exception
(
PromotionErrorCode
Enum
.
PRODUCT_RECOMMEND_PRODUCT_NOT_EXISTS
.
getCode
());
throw
ServiceExceptionUtil
.
exception
(
PromotionErrorCode
Constants
.
PRODUCT_RECOMMEND_PRODUCT_NOT_EXISTS
.
getCode
());
}
// 校验商品是否已经推荐
ProductRecommendDO
existProductRecommend
=
productRecommendMapper
.
selectByProductSpuIdAndType
(
productRecommendUpdateDTO
.
getProductSpuId
(),
productRecommendUpdateDTO
.
getType
());
if
(
existProductRecommend
!=
null
&&
!
existProductRecommend
.
getId
().
equals
(
productRecommendUpdateDTO
.
getId
()))
{
throw
ServiceExceptionUtil
.
exception
(
PromotionErrorCode
Enum
.
PRODUCT_RECOMMEND_EXISTS
.
getCode
());
throw
ServiceExceptionUtil
.
exception
(
PromotionErrorCode
Constants
.
PRODUCT_RECOMMEND_EXISTS
.
getCode
());
}
// 更新到数据库
ProductRecommendDO
updateProductRecommend
=
ProductRecommendConvert
.
INSTANCE
.
convert
(
productRecommendUpdateDTO
);
...
...
@@ -89,7 +88,7 @@ public class ProductRecommendService {
public
Boolean
updateProductRecommendStatus
(
Integer
adminId
,
Integer
productRecommendId
,
Integer
status
)
{
// 校验更新的商品推荐存在
if
(
productRecommendMapper
.
selectById
(
productRecommendId
)
==
null
)
{
throw
ServiceExceptionUtil
.
exception
(
PromotionErrorCode
Enum
.
PRODUCT_RECOMMEND_NOT_EXISTS
.
getCode
());
throw
ServiceExceptionUtil
.
exception
(
PromotionErrorCode
Constants
.
PRODUCT_RECOMMEND_NOT_EXISTS
.
getCode
());
}
// 更新到数据库
ProductRecommendDO
updateProductRecommend
=
new
ProductRecommendDO
().
setId
(
productRecommendId
).
setStatus
(
status
);
...
...
@@ -101,7 +100,7 @@ public class ProductRecommendService {
public
Boolean
deleteProductRecommend
(
Integer
adminId
,
Integer
productRecommendId
)
{
// 校验更新的商品推荐存在
if
(
productRecommendMapper
.
selectById
(
productRecommendId
)
==
null
)
{
throw
ServiceExceptionUtil
.
exception
(
PromotionErrorCode
Enum
.
PRODUCT_RECOMMEND_NOT_EXISTS
.
getCode
());
throw
ServiceExceptionUtil
.
exception
(
PromotionErrorCode
Constants
.
PRODUCT_RECOMMEND_NOT_EXISTS
.
getCode
());
}
// 更新到数据库
ProductRecommendDO
updateProductRecommend
=
new
ProductRecommendDO
().
setId
(
productRecommendId
);
...
...
promotion-service-project/promotion-service-app/src/main/resources/application-dev.yaml
0 → 100644
浏览文件 @
84cc2728
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 服务注册中心的地址
promotion-service-project/promotion-service-app/src/main/resources/application-local.yaml
0 → 100644
浏览文件 @
84cc2728
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 路由分组
promotion-service-project/promotion-service-app/src/main/resources/application.yaml
0 → 100644
浏览文件 @
84cc2728
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
shop-web-app/pom.xml
浏览文件 @
84cc2728
...
...
@@ -66,6 +66,12 @@
<artifactId>
search-service-api
</artifactId>
<version>
1.0-SNAPSHOT
</version>
</dependency>
<dependency>
<!-- 订单服务 -->
<groupId>
cn.iocoder.mall
</groupId>
<artifactId>
order-service-api
</artifactId>
<version>
1.0-SNAPSHOT
</version>
</dependency>
<dependency>
<!-- 系统服务 -->
<groupId>
cn.iocoder.mall
</groupId>
...
...
shop-web-app/src/main/java/cn/iocoder/mall/shopweb/controller/order/CartController.java
0 → 100644
浏览文件 @
84cc2728
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
()));
}
}
shop-web-app/src/main/java/cn/iocoder/mall/shopweb/manager/order/cart/CartManager.java
0 → 100644
浏览文件 @
84cc2728
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
();
}
}
shop-web-app/src/main/java/cn/iocoder/mall/shopweb/manager/order/package-info.java
0 → 100644
浏览文件 @
84cc2728
package
cn
.
iocoder
.
mall
.
shopweb
.
manager
.
order
;
shop-web-app/src/main/java/cn/iocoder/mall/shopweb/manager/product/ProductCategoryManager.java
浏览文件 @
84cc2728
...
...
@@ -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.shopweb.controller.product.vo.category.ProductCategoryRespVO
;
import
cn.iocoder.mall.shopweb.convert.product.ProductCategoryConvert
;
import
org.apache.dubbo.config.annotation.Reference
;
import
org.apache.dubbo.config.annotation.
Dubbo
Reference
;
import
org.springframework.stereotype.Service
;
import
org.springframework.validation.annotation.Validated
;
...
...
@@ -20,7 +20,7 @@ import java.util.List;
@Validated
public
class
ProductCategoryManager
{
@Reference
(
version
=
"${dubbo.consumer.ProductCategoryRpc.version}"
)
@
Dubbo
Reference
(
version
=
"${dubbo.consumer.ProductCategoryRpc.version}"
)
private
ProductCategoryRpc
productCategoryRpc
;
public
List
<
ProductCategoryRespVO
>
listProductCategories
(
Integer
pid
)
{
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论