Commit dfffc935849e4c9cd99bb43039f899cbfbfc19bc

Authored by YunaiV
1 parent 31b8ee42

reactor:移除 mall-trade 的 api 包

Showing 345 changed files with 3845 additions and 3841 deletions

Too many changes.

To preserve performance only 100 of 345 files are displayed.

yudao-module-mall/pom.xml
@@ -20,7 +20,7 @@ @@ -20,7 +20,7 @@
20 <modules> 20 <modules>
21 <module>yudao-module-product</module> 21 <module>yudao-module-product</module>
22 <module>yudao-module-promotion</module> 22 <module>yudao-module-promotion</module>
23 - <module>yudao-module-trade-biz</module> 23 + <module>yudao-module-trade</module>
24 <module>yudao-module-statistics</module> 24 <module>yudao-module-statistics</module>
25 <!-- 25 <!--
26 特殊:为什么会有 yudao-module-trade-api 呢? 26 特殊:为什么会有 yudao-module-trade-api 呢?
yudao-module-mall/yudao-module-promotion/src/main/java/cn/iocoder/yudao/module/promotion/api/package-info.java 0 → 100644
  1 +/**
  2 + * promotion API 包,定义并实现提供给其它模块的 API
  3 + */
  4 +package cn.iocoder.yudao.module.promotion.api;
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/framework/package-info.java deleted
1 -/**  
2 - * 属于 trade 模块的 framework 封装  
3 - *  
4 - * @author 芋道源码  
5 - */  
6 -package cn.iocoder.yudao.module.trade.framework;  
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/framework/web/package-info.java deleted
1 -/**  
2 - * trade 模块的 web 配置  
3 - */  
4 -package cn.iocoder.yudao.module.trade.framework.web;  
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/aftersale/AfterSaleLogServiceImpl.java deleted
1 -package cn.iocoder.yudao.module.trade.service.aftersale;  
2 -  
3 -import cn.iocoder.yudao.module.trade.convert.aftersale.AfterSaleLogConvert;  
4 -import cn.iocoder.yudao.module.trade.dal.dataobject.aftersale.AfterSaleLogDO;  
5 -import cn.iocoder.yudao.module.trade.dal.mysql.aftersale.AfterSaleLogMapper;  
6 -import cn.iocoder.yudao.module.trade.service.aftersale.bo.AfterSaleLogCreateReqBO;  
7 -import org.springframework.stereotype.Service;  
8 -import org.springframework.validation.annotation.Validated;  
9 -  
10 -import jakarta.annotation.Resource;  
11 -import java.util.List;  
12 -  
13 -/**  
14 - * 交易售后日志 Service 实现类  
15 - *  
16 - * @author 芋道源码  
17 - */  
18 -@Service  
19 -@Validated  
20 -public class AfterSaleLogServiceImpl implements AfterSaleLogService {  
21 -  
22 - @Resource  
23 - private AfterSaleLogMapper afterSaleLogMapper;  
24 -  
25 - @Override  
26 - public void createAfterSaleLog(AfterSaleLogCreateReqBO createReqBO) {  
27 - AfterSaleLogDO afterSaleLog = AfterSaleLogConvert.INSTANCE.convert(createReqBO);  
28 - afterSaleLogMapper.insert(afterSaleLog);  
29 - }  
30 -  
31 - @Override  
32 - public List<AfterSaleLogDO> getAfterSaleLogList(Long afterSaleId) {  
33 - return afterSaleLogMapper.selectListByAfterSaleId(afterSaleId);  
34 - }  
35 -  
36 -}  
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/aftersale/AfterSaleService.java deleted
1 -package cn.iocoder.yudao.module.trade.service.aftersale;  
2 -  
3 -import cn.iocoder.yudao.framework.common.pojo.PageResult;  
4 -import cn.iocoder.yudao.module.trade.controller.admin.aftersale.vo.AfterSaleDisagreeReqVO;  
5 -import cn.iocoder.yudao.module.trade.controller.admin.aftersale.vo.AfterSalePageReqVO;  
6 -import cn.iocoder.yudao.module.trade.controller.admin.aftersale.vo.AfterSaleRefuseReqVO;  
7 -import cn.iocoder.yudao.module.trade.controller.app.aftersale.vo.AppAfterSaleCreateReqVO;  
8 -import cn.iocoder.yudao.module.trade.controller.app.aftersale.vo.AppAfterSaleDeliveryReqVO;  
9 -import cn.iocoder.yudao.module.trade.controller.app.aftersale.vo.AppAfterSalePageReqVO;  
10 -import cn.iocoder.yudao.module.trade.dal.dataobject.aftersale.AfterSaleDO;  
11 -  
12 -/**  
13 - * 售后订单 Service 接口  
14 - *  
15 - * @author 芋道源码  
16 - */  
17 -public interface AfterSaleService {  
18 -  
19 - /**  
20 - * 【管理员】获得售后订单分页  
21 - *  
22 - * @param pageReqVO 分页查询  
23 - * @return 售后订单分页  
24 - */  
25 - PageResult<AfterSaleDO> getAfterSalePage(AfterSalePageReqVO pageReqVO);  
26 -  
27 - /**  
28 - * 【会员】获得售后订单分页  
29 - *  
30 - * @param userId 用户编号  
31 - * @param pageReqVO 分页参数  
32 - * @return 售后订单分页  
33 - */  
34 - PageResult<AfterSaleDO> getAfterSalePage(Long userId, AppAfterSalePageReqVO pageReqVO);  
35 -  
36 - /**  
37 - * 【会员】获得售后单  
38 - *  
39 - * @param userId 用户编号  
40 - * @param id 售后编号  
41 - * @return 售后订单  
42 - */  
43 - AfterSaleDO getAfterSale(Long userId, Long id);  
44 -  
45 - /**  
46 - * 【管理员】获得售后单  
47 - *  
48 - * @param id 售后编号  
49 - * @return 售后订单  
50 - */  
51 - AfterSaleDO getAfterSale(Long id);  
52 -  
53 - /**  
54 - * 【会员】创建售后订单  
55 - *  
56 - * @param userId 会员用户编号  
57 - * @param createReqVO 创建 Request 信息  
58 - * @return 售后编号  
59 - */  
60 - Long createAfterSale(Long userId, AppAfterSaleCreateReqVO createReqVO);  
61 -  
62 - /**  
63 - * 【管理员】同意售后订单  
64 - *  
65 - * @param userId 管理员用户编号  
66 - * @param id 售后编号  
67 - */  
68 - void agreeAfterSale(Long userId, Long id);  
69 -  
70 - /**  
71 - * 【管理员】拒绝售后订单  
72 - *  
73 - * @param userId 管理员用户编号  
74 - * @param auditReqVO 审批 Request 信息  
75 - */  
76 - void disagreeAfterSale(Long userId, AfterSaleDisagreeReqVO auditReqVO);  
77 -  
78 - /**  
79 - * 【会员】退回货物  
80 - *  
81 - * @param userId 会员用户编号  
82 - * @param deliveryReqVO 退货 Request 信息  
83 - */  
84 - void deliveryAfterSale(Long userId, AppAfterSaleDeliveryReqVO deliveryReqVO);  
85 -  
86 - /**  
87 - * 【管理员】确认收货  
88 - *  
89 - * @param userId 管理员编号  
90 - * @param id 售后编号  
91 - */  
92 - void receiveAfterSale(Long userId, Long id);  
93 -  
94 - /**  
95 - * 【管理员】拒绝收货  
96 - *  
97 - * @param userId 管理员用户编号  
98 - * @param refuseReqVO 拒绝收货 Request 信息  
99 - */  
100 - void refuseAfterSale(Long userId, AfterSaleRefuseReqVO refuseReqVO);  
101 -  
102 - /**  
103 - * 【管理员】确认退款  
104 - *  
105 - * @param userId 管理员用户编号  
106 - * @param userIp 管理员用户 IP  
107 - * @param id 售后编号  
108 - */  
109 - void refundAfterSale(Long userId, String userIp, Long id);  
110 -  
111 - /**  
112 - * 更新售后订单为已退款  
113 - *  
114 - * @param id 售后编号  
115 - * @param orderId 订单编号  
116 - * @param payRefundId 支付退款编号  
117 - */  
118 - void updateAfterSaleRefunded(Long id, Long orderId, Long payRefundId);  
119 -  
120 - /**  
121 - * 【会员】取消售后  
122 - *  
123 - * @param userId 会员用户编号  
124 - * @param id 售后编号  
125 - */  
126 - void cancelAfterSale(Long userId, Long id);  
127 -  
128 - /**  
129 - * 【会员】获得正在进行中的售后订单数量  
130 - *  
131 - * @param userId 用户编号  
132 - * @return 数量  
133 - */  
134 - Long getApplyingAfterSaleCount(Long userId);  
135 -  
136 -}  
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/aftersale/bo/AfterSaleLogCreateReqBO.java deleted
1 -package cn.iocoder.yudao.module.trade.service.aftersale.bo;  
2 -  
3 -import lombok.AllArgsConstructor;  
4 -import lombok.Data;  
5 -import lombok.NoArgsConstructor;  
6 -  
7 -import jakarta.validation.constraints.NotEmpty;  
8 -import jakarta.validation.constraints.NotNull;  
9 -  
10 -/**  
11 - * 售后日志的创建 Request BO  
12 - *  
13 - * @author 陈賝  
14 - * @since 2023/6/19 09:54  
15 - */  
16 -@Data  
17 -@NoArgsConstructor  
18 -@AllArgsConstructor  
19 -public class AfterSaleLogCreateReqBO {  
20 -  
21 - /**  
22 - * 用户编号  
23 - */  
24 - @NotNull(message = "用户编号不能为空")  
25 - private Long userId;  
26 - /**  
27 - * 用户类型  
28 - */  
29 - @NotNull(message = "用户类型不能为空")  
30 - private Integer userType;  
31 -  
32 - /**  
33 - * 售后编号  
34 - */  
35 - @NotNull(message = "售后编号不能为空")  
36 - private Long afterSaleId;  
37 - /**  
38 - * 操作前状态  
39 - */  
40 - private Integer beforeStatus;  
41 - /**  
42 - * 操作后状态  
43 - */  
44 - @NotNull(message = "操作后的状态不能为空")  
45 - private Integer afterStatus;  
46 -  
47 - /**  
48 - * 操作类型  
49 - */  
50 - @NotNull(message = "操作类型不能为空")  
51 - private Integer operateType;  
52 - /**  
53 - * 操作明细  
54 - */  
55 - @NotEmpty(message = "操作明细不能为空")  
56 - private String content;  
57 -}  
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/brokerage/BrokerageUserService.java deleted
1 -package cn.iocoder.yudao.module.trade.service.brokerage;  
2 -  
3 -import cn.iocoder.yudao.framework.common.pojo.PageResult;  
4 -import cn.iocoder.yudao.module.trade.controller.admin.brokerage.vo.user.BrokerageUserCreateReqVO;  
5 -import cn.iocoder.yudao.module.trade.controller.admin.brokerage.vo.user.BrokerageUserPageReqVO;  
6 -import cn.iocoder.yudao.module.trade.controller.app.brokerage.vo.user.AppBrokerageUserChildSummaryPageReqVO;  
7 -import cn.iocoder.yudao.module.trade.controller.app.brokerage.vo.user.AppBrokerageUserChildSummaryRespVO;  
8 -import cn.iocoder.yudao.module.trade.controller.app.brokerage.vo.user.AppBrokerageUserRankByUserCountRespVO;  
9 -import cn.iocoder.yudao.module.trade.controller.app.brokerage.vo.user.AppBrokerageUserRankPageReqVO;  
10 -import cn.iocoder.yudao.module.trade.dal.dataobject.brokerage.BrokerageUserDO;  
11 -import jakarta.validation.Valid;  
12 -import jakarta.validation.constraints.NotNull;  
13 -  
14 -/**  
15 - * 分销用户 Service 接口  
16 - *  
17 - * @author owen  
18 - */  
19 -public interface BrokerageUserService {  
20 -  
21 - /**  
22 - * 获得分销用户  
23 - *  
24 - * @param id 编号  
25 - * @return 分销用户  
26 - */  
27 - BrokerageUserDO getBrokerageUser(Long id);  
28 -  
29 - /**  
30 - * 获得分销用户分页  
31 - *  
32 - * @param pageReqVO 分页查询  
33 - * @return 分销用户分页  
34 - */  
35 - PageResult<BrokerageUserDO> getBrokerageUserPage(BrokerageUserPageReqVO pageReqVO);  
36 -  
37 - /**  
38 - * 修改推广员编号  
39 - *  
40 - * @param id 用户编号  
41 - * @param bindUserId 推广员编号  
42 - */  
43 - void updateBrokerageUserId(Long id, Long bindUserId);  
44 -  
45 - /**  
46 - * 修改推广资格  
47 - *  
48 - * @param id 用户编号  
49 - * @param enabled 推广资格  
50 - */  
51 - void updateBrokerageUserEnabled(Long id, Boolean enabled);  
52 -  
53 - /**  
54 - * 获得用户的推广人  
55 - *  
56 - * @param id 用户编号  
57 - * @return 用户的推广人  
58 - */  
59 - BrokerageUserDO getBindBrokerageUser(Long id);  
60 -  
61 - /**  
62 - * 获得或创建分销用户  
63 - *  
64 - * @param id 用户编号  
65 - * @return 分销用户  
66 - */  
67 - BrokerageUserDO getOrCreateBrokerageUser(Long id);  
68 -  
69 - /**  
70 - * 更新用户佣金  
71 - *  
72 - * @param id 用户编号  
73 - * @param price 用户可用佣金  
74 - * @return 更新结果  
75 - */  
76 - boolean updateUserPrice(Long id, Integer price);  
77 -  
78 - /**  
79 - * 更新用户冻结佣金  
80 - *  
81 - * @param id 用户编号  
82 - * @param frozenPrice 用户冻结佣金  
83 - */  
84 - void updateUserFrozenPrice(Long id, Integer frozenPrice);  
85 -  
86 - /**  
87 - * 更新用户冻结佣金(减少),更新用户佣金(增加)  
88 - *  
89 - * @param id 用户编号  
90 - * @param frozenPrice 减少冻结佣金(负数)  
91 - */  
92 - void updateFrozenPriceDecrAndPriceIncr(Long id, Integer frozenPrice);  
93 -  
94 - /**  
95 - * 获得推广用户数量  
96 - *  
97 - * @param bindUserId 绑定的推广员编号  
98 - * @param level 推广用户等级  
99 - * @return 推广用户数量  
100 - */  
101 - Long getBrokerageUserCountByBindUserId(Long bindUserId, Integer level);  
102 -  
103 - /**  
104 - * 【会员】绑定推广员  
105 - *  
106 - * @param userId 用户编号  
107 - * @param bindUserId 推广员编号  
108 - * @return 是否绑定  
109 - */  
110 - boolean bindBrokerageUser(@NotNull Long userId, @NotNull Long bindUserId);  
111 -  
112 - /**  
113 - * 【管理员】创建分销用户  
114 - *  
115 - * @param createReqVO 请求  
116 - * @return 编号  
117 - */  
118 - Long createBrokerageUser(@Valid BrokerageUserCreateReqVO createReqVO);  
119 -  
120 - /**  
121 - * 获取用户是否有分销资格  
122 - *  
123 - * @param userId 用户编号  
124 - * @return 是否有分销资格  
125 - */  
126 - Boolean getUserBrokerageEnabled(Long userId);  
127 -  
128 - /**  
129 - * 获得推广人排行  
130 - *  
131 - * @param pageReqVO 分页查询  
132 - * @return 推广人排行  
133 - */  
134 - PageResult<AppBrokerageUserRankByUserCountRespVO> getBrokerageUserRankPageByUserCount(AppBrokerageUserRankPageReqVO pageReqVO);  
135 -  
136 - /**  
137 - * 获得下级分销统计分页  
138 - *  
139 - * @param pageReqVO 分页查询  
140 - * @param userId 用户编号  
141 - * @return 下级分销统计分页  
142 - */  
143 - PageResult<AppBrokerageUserChildSummaryRespVO> getBrokerageUserChildSummaryPage(AppBrokerageUserChildSummaryPageReqVO pageReqVO, Long userId);  
144 -  
145 -}  
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/brokerage/BrokerageWithdrawService.java deleted
1 -package cn.iocoder.yudao.module.trade.service.brokerage;  
2 -  
3 -import cn.iocoder.yudao.framework.common.pojo.PageResult;  
4 -import cn.iocoder.yudao.module.trade.controller.admin.brokerage.vo.withdraw.BrokerageWithdrawPageReqVO;  
5 -import cn.iocoder.yudao.module.trade.controller.app.brokerage.vo.withdraw.AppBrokerageWithdrawCreateReqVO;  
6 -import cn.iocoder.yudao.module.trade.dal.dataobject.brokerage.BrokerageWithdrawDO;  
7 -import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageWithdrawStatusEnum;  
8 -import cn.iocoder.yudao.module.trade.service.brokerage.bo.BrokerageWithdrawSummaryRespBO;  
9 -  
10 -import java.util.Collection;  
11 -import java.util.List;  
12 -import java.util.Map;  
13 -import java.util.Set;  
14 -  
15 -import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap;  
16 -  
17 -/**  
18 - * 佣金提现 Service 接口  
19 - *  
20 - * @author 芋道源码  
21 - */  
22 -public interface BrokerageWithdrawService {  
23 -  
24 - /**  
25 - * 【管理员】审核佣金提现  
26 - *  
27 - * @param id 佣金编号  
28 - * @param status 审核状态  
29 - * @param auditReason 驳回原因  
30 - * @param userIp 操作 IP  
31 - */  
32 - void auditBrokerageWithdraw(Long id, BrokerageWithdrawStatusEnum status, String auditReason, String userIp);  
33 -  
34 - /**  
35 - * 获得佣金提现  
36 - *  
37 - * @param id 编号  
38 - * @return 佣金提现  
39 - */  
40 - BrokerageWithdrawDO getBrokerageWithdraw(Long id);  
41 -  
42 - /**  
43 - * 获得佣金提现分页  
44 - *  
45 - * @param pageReqVO 分页查询  
46 - * @return 佣金提现分页  
47 - */  
48 - PageResult<BrokerageWithdrawDO> getBrokerageWithdrawPage(BrokerageWithdrawPageReqVO pageReqVO);  
49 -  
50 - /**  
51 - * 【会员】创建佣金提现  
52 - *  
53 - * @param userId 会员用户编号  
54 - * @param createReqVO 创建信息  
55 - * @return 佣金提现编号  
56 - */  
57 - Long createBrokerageWithdraw(Long userId, AppBrokerageWithdrawCreateReqVO createReqVO);  
58 -  
59 - /**  
60 - * 【API】更新佣金提现的转账结果  
61 - *  
62 - * 目前用于支付回调,标记提现转账结果  
63 - *  
64 - * @param id 提现编号  
65 - * @param payTransferId 转账订单编号  
66 - */  
67 - void updateBrokerageWithdrawTransferred(Long id, Long payTransferId);  
68 -  
69 - /**  
70 - * 按照 userId,汇总每个用户的提现  
71 - *  
72 - * @param userIds 用户编号  
73 - * @param status 提现状态  
74 - * @return 用户提现汇总 List  
75 - */  
76 - List<BrokerageWithdrawSummaryRespBO> getWithdrawSummaryListByUserId(Collection<Long> userIds,  
77 - Collection<BrokerageWithdrawStatusEnum> status);  
78 -  
79 - /**  
80 - * 按照 userId,汇总每个用户的提现  
81 - *  
82 - * @param userIds 用户编号  
83 - * @param status 提现状态  
84 - * @return 用户提现汇总 Map  
85 - */  
86 - default Map<Long, BrokerageWithdrawSummaryRespBO> getWithdrawSummaryMapByUserId(Set<Long> userIds,  
87 - Collection<BrokerageWithdrawStatusEnum> status) {  
88 - return convertMap(getWithdrawSummaryListByUserId(userIds, status), BrokerageWithdrawSummaryRespBO::getUserId);  
89 - }  
90 -  
91 -}  
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/brokerage/bo/BrokerageAddReqBO.java deleted
1 -package cn.iocoder.yudao.module.trade.service.brokerage.bo;  
2 -  
3 -import lombok.AllArgsConstructor;  
4 -import lombok.Data;  
5 -import lombok.NoArgsConstructor;  
6 -  
7 -import jakarta.validation.constraints.NotBlank;  
8 -import jakarta.validation.constraints.NotEmpty;  
9 -import jakarta.validation.constraints.NotNull;  
10 -  
11 -/**  
12 - * 佣金 增加 Request BO  
13 - *  
14 - * @author owen  
15 - */  
16 -@Data  
17 -@NoArgsConstructor  
18 -@AllArgsConstructor  
19 -public class BrokerageAddReqBO {  
20 -  
21 - /**  
22 - * 业务编号  
23 - */  
24 - @NotBlank(message = "业务编号不能为空")  
25 - private String bizId;  
26 - /**  
27 - * 佣金基数  
28 - */  
29 - @NotNull(message = "佣金基数不能为空")  
30 - private Integer basePrice;  
31 - /**  
32 - * 一级佣金(固定)  
33 - */  
34 - @NotNull(message = "一级佣金(固定)不能为空")  
35 - private Integer firstFixedPrice;  
36 - /**  
37 - * 二级佣金(固定)  
38 - */  
39 - private Integer secondFixedPrice;  
40 -  
41 - /**  
42 - * 来源用户编号  
43 - */  
44 - @NotNull(message = "来源用户编号不能为空")  
45 - private Long sourceUserId;  
46 -  
47 - /**  
48 - * 佣金记录标题  
49 - */  
50 - @NotEmpty(message = "佣金记录标题不能为空")  
51 - private String title;  
52 -  
53 -}  
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/cart/CartService.java deleted
1 -package cn.iocoder.yudao.module.trade.service.cart;  
2 -  
3 -import cn.iocoder.yudao.module.trade.controller.app.cart.vo.*;  
4 -import cn.iocoder.yudao.module.trade.dal.dataobject.cart.CartDO;  
5 -  
6 -import jakarta.validation.Valid;  
7 -import java.util.Collection;  
8 -import java.util.List;  
9 -import java.util.Set;  
10 -  
11 -/**  
12 - * 购物车 Service 接口  
13 - *  
14 - * @author 芋道源码  
15 - */  
16 -public interface CartService {  
17 -  
18 - /**  
19 - * 添加商品到购物车  
20 - *  
21 - * @param userId 用户编号  
22 - * @param addReqVO 添加信息  
23 - * @return 购物项的编号  
24 - */  
25 - Long addCart(Long userId, @Valid AppCartAddReqVO addReqVO);  
26 -  
27 - /**  
28 - * 更新购物车商品数量  
29 - *  
30 - * @param userId 用户编号  
31 - * @param updateCountReqVO 更新信息  
32 - */  
33 - void updateCartCount(Long userId, AppCartUpdateCountReqVO updateCountReqVO);  
34 -  
35 - /**  
36 - * 更新购物车选中状态  
37 - *  
38 - * @param userId 用户编号  
39 - * @param updateSelectedReqVO 更新信息  
40 - */  
41 - void updateCartSelected(Long userId, @Valid AppCartUpdateSelectedReqVO updateSelectedReqVO);  
42 -  
43 - /**  
44 - * 重置购物车商品  
45 - *  
46 - * 使用场景:在一个购物车项对应的商品失效(例如说 SPU 被下架),可以重新选择对应的 SKU  
47 - *  
48 - * @param userId 用户编号  
49 - * @param updateReqVO 重置信息  
50 - */  
51 - void resetCart(Long userId, AppCartResetReqVO updateReqVO);  
52 -  
53 - /**  
54 - * 删除购物车商品  
55 - *  
56 - * @param userId 用户编号  
57 - * @param ids 购物项的编号  
58 - */  
59 - void deleteCart(Long userId, Collection<Long> ids);  
60 -  
61 - /**  
62 - * 查询用户在购物车中的商品数量  
63 - *  
64 - * @param userId 用户编号  
65 - * @return 商品数量  
66 - */  
67 - Integer getCartCount(Long userId);  
68 -  
69 - /**  
70 - * 查询用户的购物车列表  
71 - *  
72 - * @param userId 用户编号  
73 - * @return 购物车列表  
74 - */  
75 - AppCartListRespVO getCartList(Long userId);  
76 -  
77 - /**  
78 - * 查询用户的购物车列表  
79 - *  
80 - * @param userId 用户编号  
81 - * @param ids 购物项的编号  
82 - * @return 购物车列表  
83 - */  
84 - List<CartDO> getCartList(Long userId, Set<Long> ids);  
85 -  
86 -}  
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/config/TradeConfigService.java deleted
1 -package cn.iocoder.yudao.module.trade.service.config;  
2 -  
3 -import cn.iocoder.yudao.module.trade.controller.admin.config.vo.TradeConfigSaveReqVO;  
4 -import cn.iocoder.yudao.module.trade.dal.dataobject.config.TradeConfigDO;  
5 -  
6 -import jakarta.validation.Valid;  
7 -  
8 -/**  
9 - * 交易中心配置 Service 接口  
10 - *  
11 - * @author owen  
12 - */  
13 -public interface TradeConfigService {  
14 -  
15 - /**  
16 - * 更新交易中心配置  
17 - *  
18 - * @param updateReqVO 更新信息  
19 - */  
20 - void saveTradeConfig(@Valid TradeConfigSaveReqVO updateReqVO);  
21 -  
22 - /**  
23 - * 获得交易中心配置  
24 - *  
25 - * @return 交易中心配置  
26 - */  
27 - TradeConfigDO getTradeConfig();  
28 -  
29 -}  
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/config/TradeConfigServiceImpl.java deleted
1 -package cn.iocoder.yudao.module.trade.service.config;  
2 -  
3 -import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;  
4 -import cn.iocoder.yudao.module.trade.controller.admin.config.vo.TradeConfigSaveReqVO;  
5 -import cn.iocoder.yudao.module.trade.convert.config.TradeConfigConvert;  
6 -import cn.iocoder.yudao.module.trade.dal.dataobject.config.TradeConfigDO;  
7 -import cn.iocoder.yudao.module.trade.dal.mysql.config.TradeConfigMapper;  
8 -import org.springframework.stereotype.Service;  
9 -import org.springframework.validation.annotation.Validated;  
10 -  
11 -import jakarta.annotation.Resource;  
12 -import java.util.List;  
13 -  
14 -/**  
15 - * 交易中心配置 Service 实现类  
16 - *  
17 - * @author owen  
18 - */  
19 -@Service  
20 -@Validated  
21 -public class TradeConfigServiceImpl implements TradeConfigService {  
22 -  
23 - @Resource  
24 - private TradeConfigMapper tradeConfigMapper;  
25 -  
26 - @Override  
27 - public void saveTradeConfig(TradeConfigSaveReqVO saveReqVO) {  
28 - // 存在,则进行更新  
29 - TradeConfigDO dbConfig = getTradeConfig();  
30 - if (dbConfig != null) {  
31 - tradeConfigMapper.updateById(TradeConfigConvert.INSTANCE.convert(saveReqVO).setId(dbConfig.getId()));  
32 - return;  
33 - }  
34 - // 不存在,则进行插入  
35 - tradeConfigMapper.insert(TradeConfigConvert.INSTANCE.convert(saveReqVO));  
36 - }  
37 -  
38 - @Override  
39 - public TradeConfigDO getTradeConfig() {  
40 - List<TradeConfigDO> list = tradeConfigMapper.selectList();  
41 - return CollectionUtils.getFirst(list);  
42 - }  
43 -  
44 -}  
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/delivery/DeliveryExpressService.java deleted
1 -package cn.iocoder.yudao.module.trade.service.delivery;  
2 -  
3 -import cn.iocoder.yudao.framework.common.pojo.PageResult;  
4 -import cn.iocoder.yudao.module.trade.controller.admin.delivery.vo.express.DeliveryExpressCreateReqVO;  
5 -import cn.iocoder.yudao.module.trade.controller.admin.delivery.vo.express.DeliveryExpressExportReqVO;  
6 -import cn.iocoder.yudao.module.trade.controller.admin.delivery.vo.express.DeliveryExpressPageReqVO;  
7 -import cn.iocoder.yudao.module.trade.controller.admin.delivery.vo.express.DeliveryExpressUpdateReqVO;  
8 -import cn.iocoder.yudao.module.trade.dal.dataobject.delivery.DeliveryExpressDO;  
9 -  
10 -import jakarta.validation.Valid;  
11 -import java.util.List;  
12 -  
13 -/**  
14 - * 快递公司 Service 接口  
15 - *  
16 - * @author jason  
17 - */  
18 -public interface DeliveryExpressService {  
19 -  
20 - /**  
21 - * 创建快递公司  
22 - *  
23 - * @param createReqVO 创建信息  
24 - * @return 编号  
25 - */  
26 - Long createDeliveryExpress(@Valid DeliveryExpressCreateReqVO createReqVO);  
27 -  
28 - /**  
29 - * 更新快递公司  
30 - *  
31 - * @param updateReqVO 更新信息  
32 - */  
33 - void updateDeliveryExpress(@Valid DeliveryExpressUpdateReqVO updateReqVO);  
34 -  
35 - /**  
36 - * 删除快递公司  
37 - *  
38 - * @param id 编号  
39 - */  
40 - void deleteDeliveryExpress(Long id);  
41 -  
42 - /**  
43 - * 获得快递公司  
44 - *  
45 - * @param id 编号  
46 - * @return 快递公司  
47 - */  
48 - DeliveryExpressDO getDeliveryExpress(Long id);  
49 -  
50 - /**  
51 - * 校验快递公司是否合法  
52 - *  
53 - * @param id 编号  
54 - * @return 快递公司  
55 - */  
56 - DeliveryExpressDO validateDeliveryExpress(Long id);  
57 -  
58 - /**  
59 - * 获得快递公司分页  
60 - *  
61 - * @param pageReqVO 分页查询  
62 - * @return 快递公司分页  
63 - */  
64 - PageResult<DeliveryExpressDO> getDeliveryExpressPage(DeliveryExpressPageReqVO pageReqVO);  
65 -  
66 - /**  
67 - * 获得快递公司列表, 用于 Excel 导出  
68 - *  
69 - * @param exportReqVO 查询条件  
70 - * @return 快递公司列表  
71 - */  
72 - List<DeliveryExpressDO> getDeliveryExpressList(DeliveryExpressExportReqVO exportReqVO);  
73 -  
74 - /**  
75 - * 获取指定状态的快递公司列表  
76 - *  
77 - * @param status 状态  
78 - * @return 快递公司列表  
79 - */  
80 - List<DeliveryExpressDO> getDeliveryExpressListByStatus(Integer status);  
81 -  
82 -}  
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/delivery/DeliveryExpressServiceImpl.java deleted
1 -package cn.iocoder.yudao.module.trade.service.delivery;  
2 -  
3 -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;  
4 -import cn.iocoder.yudao.framework.common.pojo.PageResult;  
5 -import cn.iocoder.yudao.module.trade.controller.admin.delivery.vo.express.DeliveryExpressCreateReqVO;  
6 -import cn.iocoder.yudao.module.trade.controller.admin.delivery.vo.express.DeliveryExpressExportReqVO;  
7 -import cn.iocoder.yudao.module.trade.controller.admin.delivery.vo.express.DeliveryExpressPageReqVO;  
8 -import cn.iocoder.yudao.module.trade.controller.admin.delivery.vo.express.DeliveryExpressUpdateReqVO;  
9 -import cn.iocoder.yudao.module.trade.convert.delivery.DeliveryExpressConvert;  
10 -import cn.iocoder.yudao.module.trade.dal.dataobject.delivery.DeliveryExpressDO;  
11 -import cn.iocoder.yudao.module.trade.dal.mysql.delivery.DeliveryExpressMapper;  
12 -import org.springframework.stereotype.Service;  
13 -import org.springframework.validation.annotation.Validated;  
14 -  
15 -import jakarta.annotation.Resource;  
16 -import java.util.List;  
17 -  
18 -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;  
19 -import static cn.iocoder.yudao.module.trade.enums.ErrorCodeConstants.*;  
20 -  
21 -/**  
22 - * 快递公司 Service 实现类  
23 - *  
24 - * @author jason  
25 - */  
26 -@Service  
27 -@Validated  
28 -public class DeliveryExpressServiceImpl implements DeliveryExpressService {  
29 -  
30 - @Resource  
31 - private DeliveryExpressMapper deliveryExpressMapper;  
32 -  
33 - @Override  
34 - public Long createDeliveryExpress(DeliveryExpressCreateReqVO createReqVO) {  
35 - //校验编码是否唯一  
36 - validateExpressCodeUnique(createReqVO.getCode(), null);  
37 - // 插入  
38 - DeliveryExpressDO deliveryExpress = DeliveryExpressConvert.INSTANCE.convert(createReqVO);  
39 - deliveryExpressMapper.insert(deliveryExpress);  
40 - // 返回  
41 - return deliveryExpress.getId();  
42 - }  
43 -  
44 - @Override  
45 - public void updateDeliveryExpress(DeliveryExpressUpdateReqVO updateReqVO) {  
46 - // 校验存在  
47 - validateDeliveryExpressExists(updateReqVO.getId());  
48 - //校验编码是否唯一  
49 - validateExpressCodeUnique(updateReqVO.getCode(), updateReqVO.getId());  
50 - // 更新  
51 - DeliveryExpressDO updateObj = DeliveryExpressConvert.INSTANCE.convert(updateReqVO);  
52 - deliveryExpressMapper.updateById(updateObj);  
53 - }  
54 -  
55 - @Override  
56 - public void deleteDeliveryExpress(Long id) {  
57 - // 校验存在  
58 - validateDeliveryExpressExists(id);  
59 - // 删除  
60 - deliveryExpressMapper.deleteById(id);  
61 - }  
62 -  
63 - private void validateExpressCodeUnique(String code, Long id) {  
64 - DeliveryExpressDO express = deliveryExpressMapper.selectByCode(code);  
65 - if (express == null) {  
66 - return;  
67 - }  
68 - // 如果 id 为空,说明不用比较是否为相同 id 的快递公司  
69 - if (id == null) {  
70 - throw exception(EXPRESS_CODE_DUPLICATE);  
71 - }  
72 - if (!express.getId().equals(id)) {  
73 - throw exception(EXPRESS_CODE_DUPLICATE);  
74 - }  
75 - }  
76 - private void validateDeliveryExpressExists(Long id) {  
77 - if (deliveryExpressMapper.selectById(id) == null) {  
78 - throw exception(EXPRESS_NOT_EXISTS);  
79 - }  
80 - }  
81 -  
82 - @Override  
83 - public DeliveryExpressDO getDeliveryExpress(Long id) {  
84 - return deliveryExpressMapper.selectById(id);  
85 - }  
86 -  
87 - @Override  
88 - public DeliveryExpressDO validateDeliveryExpress(Long id) {  
89 - DeliveryExpressDO deliveryExpress = deliveryExpressMapper.selectById(id);  
90 - if (deliveryExpress == null) {  
91 - throw exception(EXPRESS_NOT_EXISTS);  
92 - }  
93 - if (deliveryExpress.getStatus().equals(CommonStatusEnum.DISABLE.getStatus())) {  
94 - throw exception(EXPRESS_STATUS_NOT_ENABLE);  
95 - }  
96 - return deliveryExpress;  
97 - }  
98 -  
99 - @Override  
100 - public PageResult<DeliveryExpressDO> getDeliveryExpressPage(DeliveryExpressPageReqVO pageReqVO) {  
101 - return deliveryExpressMapper.selectPage(pageReqVO);  
102 - }  
103 -  
104 - @Override  
105 - public List<DeliveryExpressDO> getDeliveryExpressList(DeliveryExpressExportReqVO exportReqVO) {  
106 - return deliveryExpressMapper.selectList(exportReqVO);  
107 - }  
108 -  
109 - @Override  
110 - public List<DeliveryExpressDO> getDeliveryExpressListByStatus(Integer status) {  
111 - return deliveryExpressMapper.selectListByStatus(status);  
112 - }  
113 -  
114 -}  
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/delivery/DeliveryExpressTemplateService.java deleted
1 -package cn.iocoder.yudao.module.trade.service.delivery;  
2 -  
3 -import cn.iocoder.yudao.framework.common.pojo.PageResult;  
4 -import cn.iocoder.yudao.module.trade.controller.admin.delivery.vo.expresstemplate.DeliveryExpressTemplateCreateReqVO;  
5 -import cn.iocoder.yudao.module.trade.controller.admin.delivery.vo.expresstemplate.DeliveryExpressTemplateDetailRespVO;  
6 -import cn.iocoder.yudao.module.trade.controller.admin.delivery.vo.expresstemplate.DeliveryExpressTemplatePageReqVO;  
7 -import cn.iocoder.yudao.module.trade.controller.admin.delivery.vo.expresstemplate.DeliveryExpressTemplateUpdateReqVO;  
8 -import cn.iocoder.yudao.module.trade.dal.dataobject.delivery.DeliveryExpressTemplateDO;  
9 -import cn.iocoder.yudao.module.trade.service.delivery.bo.DeliveryExpressTemplateRespBO;  
10 -  
11 -import jakarta.validation.Valid;  
12 -import java.util.Collection;  
13 -import java.util.List;  
14 -import java.util.Map;  
15 -  
16 -/**  
17 - * 快递运费模板 Service 接口  
18 - *  
19 - * @author jason  
20 - */  
21 -public interface DeliveryExpressTemplateService {  
22 -  
23 - /**  
24 - * 创建快递运费模板  
25 - *  
26 - * @param createReqVO 创建信息  
27 - * @return 编号  
28 - */  
29 - Long createDeliveryExpressTemplate(@Valid DeliveryExpressTemplateCreateReqVO createReqVO);  
30 -  
31 - /**  
32 - * 更新快递运费模板  
33 - *  
34 - * @param updateReqVO 更新信息  
35 - */  
36 - void updateDeliveryExpressTemplate(@Valid DeliveryExpressTemplateUpdateReqVO updateReqVO);  
37 -  
38 - /**  
39 - * 删除快递运费模板  
40 - *  
41 - * @param id 编号  
42 - */  
43 - void deleteDeliveryExpressTemplate(Long id);  
44 -  
45 - /**  
46 - * 获得快递运费模板  
47 - *  
48 - * @param id 编号  
49 - * @return 快递运费模板详情  
50 - */  
51 - DeliveryExpressTemplateDetailRespVO getDeliveryExpressTemplate(Long id);  
52 -  
53 - /**  
54 - * 获得快递运费模板列表  
55 - *  
56 - * @param ids 编号  
57 - * @return 快递运费模板列表  
58 - */  
59 - List<DeliveryExpressTemplateDO> getDeliveryExpressTemplateList(Collection<Long> ids);  
60 -  
61 - /**  
62 - * 获得快递运费模板列表  
63 - *  
64 - * @return 快递运费模板列表  
65 - */  
66 - List<DeliveryExpressTemplateDO> getDeliveryExpressTemplateList();  
67 -  
68 - /**  
69 - * 获得快递运费模板分页  
70 - *  
71 - * @param pageReqVO 分页查询  
72 - * @return 快递运费模板分页  
73 - */  
74 - PageResult<DeliveryExpressTemplateDO> getDeliveryExpressTemplatePage(DeliveryExpressTemplatePageReqVO pageReqVO);  
75 -  
76 - /**  
77 - * 校验快递运费模板  
78 - *  
79 - * 如果校验不通过,抛出 {@link cn.iocoder.yudao.framework.common.exception.ServiceException} 异常  
80 - *  
81 - * @param templateId 模板编号  
82 - * @return 快递运费模板  
83 - */  
84 - DeliveryExpressTemplateDO validateDeliveryExpressTemplate(Long templateId);  
85 -  
86 - /**  
87 - * 基于运费模板编号数组和收件人地址区域编号,获取匹配运费模板  
88 - *  
89 - * @param ids 编号列表  
90 - * @param areaId 区域编号  
91 - * @return Map (templateId -> 运费模板设置)  
92 - */  
93 - Map<Long, DeliveryExpressTemplateRespBO> getExpressTemplateMapByIdsAndArea(Collection<Long> ids, Integer areaId);  
94 -  
95 -}  
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/delivery/DeliveryPickUpStoreService.java deleted
1 -package cn.iocoder.yudao.module.trade.service.delivery;  
2 -  
3 -import cn.iocoder.yudao.framework.common.pojo.PageResult;  
4 -import cn.iocoder.yudao.module.trade.controller.admin.delivery.vo.pickup.*;  
5 -import cn.iocoder.yudao.module.trade.dal.dataobject.delivery.DeliveryPickUpStoreDO;  
6 -  
7 -import jakarta.validation.Valid;  
8 -import java.util.Collection;  
9 -import java.util.List;  
10 -  
11 -/**  
12 - * 自提门店 Service 接口  
13 - *  
14 - * @author jason  
15 - */  
16 -public interface DeliveryPickUpStoreService {  
17 -  
18 - /**  
19 - * 创建自提门店  
20 - *  
21 - * @param createReqVO 创建信息  
22 - * @return 编号  
23 - */  
24 - Long createDeliveryPickUpStore(@Valid DeliveryPickUpStoreCreateReqVO createReqVO);  
25 -  
26 - /**  
27 - * 更新自提门店  
28 - *  
29 - * @param updateReqVO 更新信息  
30 - */  
31 - void updateDeliveryPickUpStore(@Valid DeliveryPickUpStoreUpdateReqVO updateReqVO);  
32 -  
33 - /**  
34 - * 删除自提门店  
35 - *  
36 - * @param id 编号  
37 - */  
38 - void deleteDeliveryPickUpStore(Long id);  
39 -  
40 - /**  
41 - * 获得自提门店  
42 - *  
43 - * @param id 编号  
44 - * @return 自提门店  
45 - */  
46 - DeliveryPickUpStoreDO getDeliveryPickUpStore(Long id);  
47 -  
48 - /**  
49 - * 获得自提门店列表  
50 - *  
51 - * @param ids 编号  
52 - * @return 自提门店列表  
53 - */  
54 - List<DeliveryPickUpStoreDO> getDeliveryPickUpStoreList(Collection<Long> ids);  
55 -  
56 - /**  
57 - * 获得指定状态的自提门店列表  
58 - *  
59 - * @param status 状态  
60 - * @return 自提门店列表  
61 - */  
62 - List<DeliveryPickUpStoreDO> getDeliveryPickUpStoreListByStatus(Integer status);  
63 -  
64 - /**  
65 - * 获得自提门店分页  
66 - *  
67 - * @param pageReqVO 分页查询  
68 - * @return 自提门店分页  
69 - */  
70 - PageResult<DeliveryPickUpStoreDO> getDeliveryPickUpStorePage(DeliveryPickUpStorePageReqVO pageReqVO);  
71 -  
72 - /**  
73 - * 绑定自提店员  
74 - *  
75 - * @param bindReqVO 绑定数据  
76 - */  
77 - void bindDeliveryPickUpStore(DeliveryPickUpBindReqVO bindReqVO);  
78 -  
79 -}  
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/delivery/DeliveryPickUpStoreServiceImpl.java deleted
1 -package cn.iocoder.yudao.module.trade.service.delivery;  
2 -  
3 -import cn.iocoder.yudao.framework.common.pojo.PageResult;  
4 -import cn.iocoder.yudao.framework.common.util.object.BeanUtils;  
5 -import cn.iocoder.yudao.module.system.api.user.AdminUserApi;  
6 -import cn.iocoder.yudao.module.trade.controller.admin.delivery.vo.pickup.DeliveryPickUpBindReqVO;  
7 -import cn.iocoder.yudao.module.trade.controller.admin.delivery.vo.pickup.DeliveryPickUpStoreCreateReqVO;  
8 -import cn.iocoder.yudao.module.trade.controller.admin.delivery.vo.pickup.DeliveryPickUpStorePageReqVO;  
9 -import cn.iocoder.yudao.module.trade.controller.admin.delivery.vo.pickup.DeliveryPickUpStoreUpdateReqVO;  
10 -import cn.iocoder.yudao.module.trade.convert.delivery.DeliveryPickUpStoreConvert;  
11 -import cn.iocoder.yudao.module.trade.dal.dataobject.delivery.DeliveryPickUpStoreDO;  
12 -import cn.iocoder.yudao.module.trade.dal.mysql.delivery.DeliveryPickUpStoreMapper;  
13 -import jakarta.annotation.Resource;  
14 -import org.springframework.stereotype.Service;  
15 -import org.springframework.validation.annotation.Validated;  
16 -  
17 -import java.util.Collection;  
18 -import java.util.List;  
19 -  
20 -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;  
21 -import static cn.iocoder.yudao.module.trade.enums.ErrorCodeConstants.PICK_UP_STORE_NOT_EXISTS;  
22 -  
23 -/**  
24 - * 自提门店 Service 实现类  
25 - *  
26 - * @author jason  
27 - */  
28 -@Service  
29 -@Validated  
30 -public class DeliveryPickUpStoreServiceImpl implements DeliveryPickUpStoreService {  
31 -  
32 - @Resource  
33 - private DeliveryPickUpStoreMapper deliveryPickUpStoreMapper;  
34 -  
35 - @Resource  
36 - private AdminUserApi adminUserApi;  
37 -  
38 - @Override  
39 - public Long createDeliveryPickUpStore(DeliveryPickUpStoreCreateReqVO createReqVO) {  
40 - // 插入  
41 - DeliveryPickUpStoreDO deliveryPickUpStore = DeliveryPickUpStoreConvert.INSTANCE.convert(createReqVO);  
42 - deliveryPickUpStoreMapper.insert(deliveryPickUpStore);  
43 - // 返回  
44 - return deliveryPickUpStore.getId();  
45 - }  
46 -  
47 - @Override  
48 - public void updateDeliveryPickUpStore(DeliveryPickUpStoreUpdateReqVO updateReqVO) {  
49 - // 校验存在  
50 - validateDeliveryPickUpStoreExists(updateReqVO.getId());  
51 - // 更新  
52 - DeliveryPickUpStoreDO updateObj = DeliveryPickUpStoreConvert.INSTANCE.convert(updateReqVO);  
53 - deliveryPickUpStoreMapper.updateById(updateObj);  
54 - }  
55 -  
56 - @Override  
57 - public void deleteDeliveryPickUpStore(Long id) {  
58 - // 校验存在  
59 - validateDeliveryPickUpStoreExists(id);  
60 - // 删除  
61 - deliveryPickUpStoreMapper.deleteById(id);  
62 - }  
63 -  
64 - private void validateDeliveryPickUpStoreExists(Long id) {  
65 - DeliveryPickUpStoreDO deliveryPickUpStore = deliveryPickUpStoreMapper.selectById(id);  
66 - if (deliveryPickUpStore == null) {  
67 - throw exception(PICK_UP_STORE_NOT_EXISTS);  
68 - }  
69 - }  
70 -  
71 - @Override  
72 - public DeliveryPickUpStoreDO getDeliveryPickUpStore(Long id) {  
73 - return deliveryPickUpStoreMapper.selectById(id);  
74 - }  
75 -  
76 - @Override  
77 - public List<DeliveryPickUpStoreDO> getDeliveryPickUpStoreList(Collection<Long> ids) {  
78 - return deliveryPickUpStoreMapper.selectBatchIds(ids);  
79 - }  
80 -  
81 - @Override  
82 - public List<DeliveryPickUpStoreDO> getDeliveryPickUpStoreListByStatus(Integer status) {  
83 - return deliveryPickUpStoreMapper.selectListByStatus(status);  
84 - }  
85 -  
86 - @Override  
87 - public PageResult<DeliveryPickUpStoreDO> getDeliveryPickUpStorePage(DeliveryPickUpStorePageReqVO pageReqVO) {  
88 - return deliveryPickUpStoreMapper.selectPage(pageReqVO);  
89 - }  
90 -  
91 - @Override  
92 - public void bindDeliveryPickUpStore(DeliveryPickUpBindReqVO bindReqVO) {  
93 - // 1.1 校验门店存在  
94 - validateDeliveryPickUpStoreExists(bindReqVO.getId());  
95 - // 1.2 校验用户存在  
96 - adminUserApi.validateUserList(bindReqVO.getVerifyUserIds());  
97 -  
98 - // 2. 更新  
99 - DeliveryPickUpStoreDO updateObj = BeanUtils.toBean(bindReqVO, DeliveryPickUpStoreDO.class);  
100 - deliveryPickUpStoreMapper.updateById(updateObj);  
101 - }  
102 -  
103 -}  
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/delivery/bo/DeliveryExpressTemplateRespBO.java deleted
1 -package cn.iocoder.yudao.module.trade.service.delivery.bo;  
2 -  
3 -import cn.iocoder.yudao.module.trade.enums.delivery.DeliveryExpressChargeModeEnum;  
4 -import lombok.Data;  
5 -  
6 -/**  
7 - * 运费模板配置 Resp BO  
8 - *  
9 - * @author jason  
10 - */  
11 -@Data  
12 -public class DeliveryExpressTemplateRespBO {  
13 -  
14 - /**  
15 - * 配送计费方式  
16 - *  
17 - * 枚举 {@link DeliveryExpressChargeModeEnum}  
18 - */  
19 - private Integer chargeMode;  
20 -  
21 - /**  
22 - * 运费模板快递运费设置  
23 - */  
24 - private Charge charge;  
25 -  
26 - /**  
27 - * 运费模板包邮设置  
28 - */  
29 - private Free free;  
30 -  
31 - /**  
32 - * 快递运费模板费用配置 BO  
33 - *  
34 - * @author jason  
35 - */  
36 - @Data  
37 - public static class Charge {  
38 -  
39 - /**  
40 - * 首件数量(件数,重量,或体积)  
41 - */  
42 - private Double startCount;  
43 - /**  
44 - * 起步价,单位:分  
45 - */  
46 - private Integer startPrice;  
47 - /**  
48 - * 续件数量(件, 重量,或体积)  
49 - */  
50 - private Double extraCount;  
51 - /**  
52 - * 额外价,单位:分  
53 - */  
54 - private Integer extraPrice;  
55 - }  
56 -  
57 - /**  
58 - * 快递运费模板包邮配置 BO  
59 - *  
60 - * @author jason  
61 - */  
62 - @Data  
63 - public static class Free {  
64 -  
65 - /**  
66 - * 包邮金额,单位:分  
67 - *  
68 - * 订单总金额 > 包邮金额时,才免运费  
69 - */  
70 - private Integer freePrice;  
71 -  
72 - /**  
73 - * 包邮件数  
74 - *  
75 - * 订单总件数 > 包邮件数时,才免运费  
76 - */  
77 - private Integer freeCount;  
78 - }  
79 -  
80 -}  
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/message/TradeMessageServiceImpl.java deleted
1 -package cn.iocoder.yudao.module.trade.service.message;  
2 -  
3 -import cn.iocoder.yudao.module.system.api.notify.NotifyMessageSendApi;  
4 -import cn.iocoder.yudao.module.system.api.notify.dto.NotifySendSingleToUserReqDTO;  
5 -import cn.iocoder.yudao.module.trade.enums.MessageTemplateConstants;  
6 -import cn.iocoder.yudao.module.trade.service.message.bo.TradeOrderMessageWhenDeliveryOrderReqBO;  
7 -import org.springframework.stereotype.Service;  
8 -import org.springframework.validation.annotation.Validated;  
9 -  
10 -import jakarta.annotation.Resource;  
11 -import java.util.HashMap;  
12 -import java.util.Map;  
13 -  
14 -/**  
15 - * Trade 消息 service 实现类  
16 - *  
17 - * @author HUIHUI  
18 - */  
19 -@Service  
20 -@Validated  
21 -public class TradeMessageServiceImpl implements TradeMessageService {  
22 -  
23 - @Resource  
24 - private NotifyMessageSendApi notifyMessageSendApi;  
25 -  
26 - @Override  
27 - public void sendMessageWhenDeliveryOrder(TradeOrderMessageWhenDeliveryOrderReqBO reqBO) {  
28 - if (true) {  
29 - return;  
30 - }  
31 - // 1、构造消息  
32 - Map<String, Object> msgMap = new HashMap<>(2);  
33 - msgMap.put("orderId", reqBO.getOrderId());  
34 - msgMap.put("deliveryMessage", reqBO.getMessage());  
35 - // TODO 芋艿:看下模版  
36 - // 2、发送站内信  
37 - notifyMessageSendApi.sendSingleMessageToMember(  
38 - new NotifySendSingleToUserReqDTO()  
39 - .setUserId(reqBO.getUserId())  
40 - .setTemplateCode(MessageTemplateConstants.SMS_ORDER_DELIVERY)  
41 - .setTemplateParams(msgMap));  
42 - }  
43 -  
44 -}  
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/message/bo/TradeOrderMessageWhenDeliveryOrderReqBO.java deleted
1 -package cn.iocoder.yudao.module.trade.service.message.bo;  
2 -  
3 -import lombok.Data;  
4 -  
5 -import jakarta.validation.constraints.NotEmpty;  
6 -import jakarta.validation.constraints.NotNull;  
7 -  
8 -/**  
9 - * 订单发货时通知创建 Req BO  
10 - *  
11 - * @author HUIHUI  
12 - */  
13 -@Data  
14 -public class TradeOrderMessageWhenDeliveryOrderReqBO {  
15 -  
16 - /**  
17 - * 订单编号  
18 - */  
19 - @NotNull(message = "订单编号不能为空")  
20 - private Long orderId;  
21 - /**  
22 - * 用户编号  
23 - */  
24 - @NotNull(message = "用户编号不能为空")  
25 - private Long userId;  
26 - /**  
27 - * 消息  
28 - */  
29 - @NotEmpty(message = "发送消息不能为空")  
30 - private String message;  
31 -  
32 -}  
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderLogService.java deleted
1 -package cn.iocoder.yudao.module.trade.service.order;  
2 -  
3 -import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderLogDO;  
4 -import cn.iocoder.yudao.module.trade.service.order.bo.TradeOrderLogCreateReqBO;  
5 -import org.springframework.scheduling.annotation.Async;  
6 -  
7 -import java.util.List;  
8 -  
9 -/**  
10 - * 交易下单日志 Service 接口  
11 - *  
12 - * @author 陈賝  
13 - * @since 2023/7/6 15:44  
14 - */  
15 -public interface TradeOrderLogService {  
16 -  
17 - /**  
18 - * 创建交易下单日志  
19 - *  
20 - * @param logDTO 日志记录  
21 - * @author 陈賝  
22 - * @since 2023/7/6 15:45  
23 - */  
24 - @Async  
25 - void createOrderLog(TradeOrderLogCreateReqBO logDTO);  
26 -  
27 - /**  
28 - * 获得交易订单日志列表  
29 - *  
30 - * @param orderId 订单编号  
31 - * @return 交易订单日志列表  
32 - */  
33 - List<TradeOrderLogDO> getOrderLogListByOrderId(Long orderId);  
34 -  
35 -}  
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderLogServiceImpl.java deleted
1 -package cn.iocoder.yudao.module.trade.service.order;  
2 -  
3 -import cn.iocoder.yudao.module.trade.convert.order.TradeOrderLogConvert;  
4 -import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderLogDO;  
5 -import cn.iocoder.yudao.module.trade.dal.mysql.order.TradeOrderLogMapper;  
6 -import cn.iocoder.yudao.module.trade.service.order.bo.TradeOrderLogCreateReqBO;  
7 -import org.springframework.stereotype.Service;  
8 -  
9 -import jakarta.annotation.Resource;  
10 -import java.util.List;  
11 -  
12 -/**  
13 - * 交易下单日志 Service 实现类  
14 - *  
15 - * @author 陈賝  
16 - * @since 2023/7/6 15:44  
17 - */  
18 -@Service  
19 -public class TradeOrderLogServiceImpl implements TradeOrderLogService {  
20 -  
21 - @Resource  
22 - private TradeOrderLogMapper tradeOrderLogMapper;  
23 -  
24 - @Override  
25 - public void createOrderLog(TradeOrderLogCreateReqBO createReqBO) {  
26 - tradeOrderLogMapper.insert(TradeOrderLogConvert.INSTANCE.convert(createReqBO));  
27 - }  
28 -  
29 - @Override  
30 - public List<TradeOrderLogDO> getOrderLogListByOrderId(Long orderId) {  
31 - return tradeOrderLogMapper.selectListByOrderId(orderId);  
32 - }  
33 -  
34 -}  
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderQueryService.java deleted
1 -package cn.iocoder.yudao.module.trade.service.order;  
2 -  
3 -import cn.iocoder.yudao.framework.common.pojo.PageResult;  
4 -import cn.iocoder.yudao.module.trade.controller.admin.order.vo.TradeOrderPageReqVO;  
5 -import cn.iocoder.yudao.module.trade.controller.admin.order.vo.TradeOrderSummaryRespVO;  
6 -import cn.iocoder.yudao.module.trade.controller.app.order.vo.AppTradeOrderPageReqVO;  
7 -import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO;  
8 -import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderItemDO;  
9 -import cn.iocoder.yudao.module.trade.enums.order.TradeOrderTypeEnum;  
10 -import cn.iocoder.yudao.module.trade.framework.delivery.core.client.dto.ExpressTrackRespDTO;  
11 -  
12 -import java.util.Collection;  
13 -import java.util.List;  
14 -  
15 -import static java.util.Collections.singleton;  
16 -  
17 -/**  
18 - * 交易订单【读】 Service 接口  
19 - *  
20 - * @author 芋道源码  
21 - */  
22 -public interface TradeOrderQueryService {  
23 -  
24 - // =================== Order ===================  
25 -  
26 - /**  
27 - * 获得指定编号的交易订单  
28 - *  
29 - * @param id 交易订单编号  
30 - * @return 交易订单  
31 - */  
32 - TradeOrderDO getOrder(Long id);  
33 -  
34 - /**  
35 - * 获得指定用户,指定的交易订单  
36 - *  
37 - * @param userId 用户编号  
38 - * @param id 交易订单编号  
39 - * @return 交易订单  
40 - */  
41 - TradeOrderDO getOrder(Long userId, Long id);  
42 -  
43 - /**  
44 - * 获得指定用户,指定活动,指定状态的交易订单  
45 - *  
46 - * @param userId 用户编号  
47 - * @param combinationActivityId 活动编号  
48 - * @param status 订单状态  
49 - * @return 交易订单  
50 - */  
51 - TradeOrderDO getOrderByUserIdAndStatusAndCombination(Long userId, Long combinationActivityId, Integer status);  
52 -  
53 - /**  
54 - * 获得订单列表  
55 - *  
56 - * @param ids 订单编号数组  
57 - * @return 订单列表  
58 - */  
59 - List<TradeOrderDO> getOrderList(Collection<Long> ids);  
60 -  
61 - /**  
62 - * 【管理员】获得交易订单分页  
63 - *  
64 - * @param reqVO 分页请求  
65 - * @return 交易订单  
66 - */  
67 - PageResult<TradeOrderDO> getOrderPage(TradeOrderPageReqVO reqVO);  
68 -  
69 - /**  
70 - * 获得订单统计  
71 - *  
72 - * @param reqVO 请求参数  
73 - * @return 订单统计  
74 - */  
75 - TradeOrderSummaryRespVO getOrderSummary(TradeOrderPageReqVO reqVO);  
76 -  
77 - /**  
78 - * 【会员】获得交易订单分页  
79 - *  
80 - * @param userId 用户编号  
81 - * @param reqVO 分页请求  
82 - * @return 交易订单  
83 - */  
84 - PageResult<TradeOrderDO> getOrderPage(Long userId, AppTradeOrderPageReqVO reqVO);  
85 -  
86 - /**  
87 - * 【会员】获得交易订单数量  
88 - *  
89 - * @param userId 用户编号  
90 - * @param status 订单状态。如果为空,则不进行筛选  
91 - * @param commonStatus 评价状态。如果为空,则不进行筛选  
92 - * @return 订单数量  
93 - */  
94 - Long getOrderCount(Long userId, Integer status, Boolean commonStatus);  
95 -  
96 - /**  
97 - * 【前台】获得订单的物流轨迹  
98 - *  
99 - * @param id 订单编号  
100 - * @param userId 用户编号  
101 - * @return 物流轨迹数组  
102 - */  
103 - List<ExpressTrackRespDTO> getExpressTrackList(Long id, Long userId);  
104 -  
105 - /**  
106 - * 【后台】获得订单的物流轨迹  
107 - *  
108 - * @param id 订单编号  
109 - * @return 物流轨迹数组  
110 - */  
111 - List<ExpressTrackRespDTO> getExpressTrackList(Long id);  
112 -  
113 - /**  
114 - * 【会员】在指定活动下,用户购买的商品数量  
115 - *  
116 - * @param userId 用户编号  
117 - * @param activityId 活动编号  
118 - * @param type 订单类型  
119 - * @return 活动商品数量  
120 - */  
121 - int getActivityProductCount(Long userId, Long activityId, TradeOrderTypeEnum type);  
122 -  
123 - // =================== Order Item ===================  
124 -  
125 - /**  
126 - * 获得指定用户,指定的交易订单项  
127 - *  
128 - * @param userId 用户编号  
129 - * @param itemId 交易订单项编号  
130 - * @return 交易订单项  
131 - */  
132 - TradeOrderItemDO getOrderItem(Long userId, Long itemId);  
133 -  
134 - /**  
135 - * 获得交易订单项  
136 - *  
137 - * @param id 交易订单项编号 itemId  
138 - * @return 交易订单项  
139 - */  
140 - TradeOrderItemDO getOrderItem(Long id);  
141 -  
142 - /**  
143 - * 根据交易订单编号,查询交易订单项  
144 - *  
145 - * @param orderId 交易订单编号  
146 - * @return 交易订单项数组  
147 - */  
148 - default List<TradeOrderItemDO> getOrderItemListByOrderId(Long orderId) {  
149 - return getOrderItemListByOrderId(singleton(orderId));  
150 - }  
151 -  
152 - /**  
153 - * 根据交易订单编号数组,查询交易订单项  
154 - *  
155 - * @param orderIds 交易订单编号数组  
156 - * @return 交易订单项数组  
157 - */  
158 - List<TradeOrderItemDO> getOrderItemListByOrderId(Collection<Long> orderIds);  
159 -  
160 -}  
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/bo/TradeOrderLogCreateReqBO.java deleted
1 -package cn.iocoder.yudao.module.trade.service.order.bo;  
2 -  
3 -import lombok.Data;  
4 -  
5 -import jakarta.validation.constraints.NotEmpty;  
6 -import jakarta.validation.constraints.NotNull;  
7 -  
8 -/**  
9 - * 订单日志的创建 Request BO  
10 - *  
11 - * @author 陈賝  
12 - * @since 2023/7/6 15:27  
13 - */  
14 -@Data  
15 -public class TradeOrderLogCreateReqBO {  
16 -  
17 - /**  
18 - * 用户编号  
19 - */  
20 - @NotNull(message = "用户编号不能为空")  
21 - private Long userId;  
22 - /**  
23 - * 用户类型  
24 - */  
25 - @NotNull(message = "用户类型不能为空")  
26 - private Integer userType;  
27 -  
28 - /**  
29 - * 订单编号  
30 - */  
31 - @NotNull(message = "订单编号不能为空")  
32 - private Long orderId;  
33 - /**  
34 - * 操作前状态  
35 - */  
36 - private Integer beforeStatus;  
37 - /**  
38 - * 操作后状态  
39 - */  
40 - @NotNull(message = "操作后的状态不能为空")  
41 - private Integer afterStatus;  
42 -  
43 - /**  
44 - * 操作类型  
45 - */  
46 - @NotNull(message = "操作类型不能为空")  
47 - private Integer operateType;  
48 - /**  
49 - * 操作明细  
50 - */  
51 - @NotEmpty(message = "操作明细不能为空")  
52 - private String content;  
53 -  
54 -}  
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/handler/TradeBargainOrderHandler.java deleted
1 -package cn.iocoder.yudao.module.trade.service.order.handler;  
2 -  
3 -import cn.hutool.core.collection.CollUtil;  
4 -import cn.hutool.core.lang.Assert;  
5 -import cn.iocoder.yudao.module.promotion.api.bargain.BargainActivityApi;  
6 -import cn.iocoder.yudao.module.promotion.api.bargain.BargainRecordApi;  
7 -import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO;  
8 -import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderItemDO;  
9 -import cn.iocoder.yudao.module.trade.enums.order.TradeOrderTypeEnum;  
10 -import org.springframework.stereotype.Component;  
11 -  
12 -import jakarta.annotation.Resource;  
13 -import java.util.List;  
14 -  
15 -/**  
16 - * 砍价订单的 {@link TradeOrderHandler} 实现类  
17 - *  
18 - * @author HUIHUI  
19 - */  
20 -@Component  
21 -public class TradeBargainOrderHandler implements TradeOrderHandler {  
22 -  
23 - @Resource  
24 - private BargainActivityApi bargainActivityApi;  
25 - @Resource  
26 - private BargainRecordApi bargainRecordApi;  
27 -  
28 - @Override  
29 - public void beforeOrderCreate(TradeOrderDO order, List<TradeOrderItemDO> orderItems) {  
30 - if (!TradeOrderTypeEnum.isBargain(order.getType())) {  
31 - return;  
32 - }  
33 - // 明确校验一下  
34 - Assert.isTrue(orderItems.size() == 1, "砍价时,只允许选择一个商品");  
35 -  
36 - // 扣减砍价活动的库存  
37 - bargainActivityApi.updateBargainActivityStock(order.getBargainActivityId(),  
38 - -orderItems.get(0).getCount());  
39 - }  
40 -  
41 - @Override  
42 - public void afterOrderCreate(TradeOrderDO order, List<TradeOrderItemDO> orderItems) {  
43 - if (!TradeOrderTypeEnum.isBargain(order.getType())) {  
44 - return;  
45 - }  
46 - // 明确校验一下  
47 - Assert.isTrue(orderItems.size() == 1, "砍价时,只允许选择一个商品");  
48 -  
49 - // 记录砍价记录对应的订单编号  
50 - bargainRecordApi.updateBargainRecordOrderId(order.getBargainRecordId(), order.getId());  
51 - }  
52 -  
53 - @Override  
54 - public void afterCancelOrder(TradeOrderDO order, List<TradeOrderItemDO> orderItems) {  
55 - if (!TradeOrderTypeEnum.isBargain(order.getType())) {  
56 - return;  
57 - }  
58 - // 明确校验一下  
59 - Assert.isTrue(orderItems.size() == 1, "砍价时,只允许选择一个商品");  
60 -  
61 - // 售后的订单项,已经在 afterCancelOrderItem 回滚库存,所以这里不需要重复回滚  
62 - orderItems = filterOrderItemListByNoneAfterSale(orderItems);  
63 - if (CollUtil.isEmpty(orderItems)) {  
64 - return;  
65 - }  
66 - afterCancelOrderItem(order, orderItems.get(0));  
67 - }  
68 -  
69 - @Override  
70 - public void afterCancelOrderItem(TradeOrderDO order, TradeOrderItemDO orderItem) {  
71 - if (!TradeOrderTypeEnum.isBargain(order.getType())) {  
72 - return;  
73 - }  
74 - // 恢复(增加)砍价活动的库存  
75 - bargainActivityApi.updateBargainActivityStock(order.getBargainActivityId(), orderItem.getCount());  
76 - }  
77 -  
78 -}  
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/handler/TradeBrokerageOrderHandler.java deleted
1 -package cn.iocoder.yudao.module.trade.service.order.handler;  
2 -  
3 -import cn.hutool.core.collection.CollUtil;  
4 -import cn.hutool.core.lang.Assert;  
5 -import cn.iocoder.yudao.module.member.api.user.MemberUserApi;  
6 -import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO;  
7 -import cn.iocoder.yudao.module.product.api.sku.ProductSkuApi;  
8 -import cn.iocoder.yudao.module.product.api.sku.dto.ProductSkuRespDTO;  
9 -import cn.iocoder.yudao.module.product.api.spu.ProductSpuApi;  
10 -import cn.iocoder.yudao.module.product.api.spu.dto.ProductSpuRespDTO;  
11 -import cn.iocoder.yudao.module.trade.convert.order.TradeOrderConvert;  
12 -import cn.iocoder.yudao.module.trade.dal.dataobject.brokerage.BrokerageUserDO;  
13 -import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO;  
14 -import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderItemDO;  
15 -import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageRecordBizTypeEnum;  
16 -import cn.iocoder.yudao.module.trade.service.brokerage.BrokerageRecordService;  
17 -import cn.iocoder.yudao.module.trade.service.brokerage.BrokerageUserService;  
18 -import cn.iocoder.yudao.module.trade.service.brokerage.bo.BrokerageAddReqBO;  
19 -import org.springframework.stereotype.Component;  
20 -  
21 -import jakarta.annotation.Resource;  
22 -import java.util.List;  
23 -import java.util.Map;  
24 -  
25 -import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList;  
26 -  
27 -/**  
28 - * 订单分销的 {@link TradeOrderHandler} 实现类  
29 - *  
30 - * @author 芋道源码  
31 - */  
32 -@Component  
33 -public class TradeBrokerageOrderHandler implements TradeOrderHandler {  
34 -  
35 - @Resource  
36 - private MemberUserApi memberUserApi;  
37 - @Resource  
38 - private ProductSpuApi productSpuApi;  
39 - @Resource  
40 - private ProductSkuApi productSkuApi;  
41 -  
42 - @Resource  
43 - private BrokerageRecordService brokerageRecordService;  
44 - @Resource  
45 - private BrokerageUserService brokerageUserService;  
46 -  
47 - @Override  
48 - public void beforeOrderCreate(TradeOrderDO order, List<TradeOrderItemDO> orderItems) {  
49 - // 设置订单推广人  
50 - BrokerageUserDO brokerageUser = brokerageUserService.getBrokerageUser(order.getUserId());  
51 - if (brokerageUser != null && brokerageUser.getBindUserId() != null) {  
52 - order.setBrokerageUserId(brokerageUser.getBindUserId());  
53 - }  
54 - }  
55 -  
56 - @Override  
57 - public void afterPayOrder(TradeOrderDO order, List<TradeOrderItemDO> orderItems) {  
58 - if (order.getBrokerageUserId() == null) {  
59 - return;  
60 - }  
61 - addBrokerage(order.getUserId(), orderItems);  
62 - }  
63 -  
64 - @Override  
65 - public void afterCancelOrder(TradeOrderDO order, List<TradeOrderItemDO> orderItems) {  
66 - // 如果是未支付的订单,不会产生分销结果,所以直接 return  
67 - if (!order.getPayStatus()) {  
68 - return;  
69 - }  
70 - if (order.getBrokerageUserId() == null) {  
71 - return;  
72 - }  
73 -  
74 - // 售后的订单项,已经在 afterCancelOrderItem 回滚库存,所以这里不需要重复回滚  
75 - orderItems = filterOrderItemListByNoneAfterSale(orderItems);  
76 - if (CollUtil.isEmpty(orderItems)) {  
77 - return;  
78 - }  
79 - orderItems.forEach(orderItem -> afterCancelOrderItem(order, orderItem));  
80 - }  
81 -  
82 - @Override  
83 - public void afterCancelOrderItem(TradeOrderDO order, TradeOrderItemDO orderItem) {  
84 - if (order.getBrokerageUserId() == null) {  
85 - return;  
86 - }  
87 - brokerageRecordService.cancelBrokerage(BrokerageRecordBizTypeEnum.ORDER, String.valueOf(orderItem.getId()));  
88 - }  
89 -  
90 - /**  
91 - * 创建分销记录  
92 - * <p>  
93 - * 目前是支付成功后,就会创建分销记录。  
94 - * <p>  
95 - * 业内还有两种做法,可以根据自己的业务调整:  
96 - * 1. 确认收货后,才创建分销记录  
97 - * 2. 支付 or 下单成功时,创建分销记录(冻结),确认收货解冻或者 n 天后解冻  
98 - *  
99 - * @param userId 用户编号  
100 - * @param orderItems 订单项  
101 - */  
102 - protected void addBrokerage(Long userId, List<TradeOrderItemDO> orderItems) {  
103 - MemberUserRespDTO user = memberUserApi.getUser(userId);  
104 - Assert.notNull(user);  
105 - Map<Long, ProductSpuRespDTO> spusMap = productSpuApi.getSpuMap(convertList(orderItems, TradeOrderItemDO::getSpuId));  
106 - Map<Long, ProductSkuRespDTO> skusMap = productSkuApi.getSkuMap(convertList(orderItems, TradeOrderItemDO::getSkuId));  
107 -  
108 - // 每一个订单项,都会去生成分销记录  
109 - List<BrokerageAddReqBO> addList = convertList(orderItems, item -> {  
110 - ProductSpuRespDTO spu = spusMap.get(item.getSpuId());  
111 - Assert.notNull(spu);  
112 - ProductSkuRespDTO sku = skusMap.get(item.getSkuId());  
113 - Assert.notNull(sku);  
114 - return TradeOrderConvert.INSTANCE.convert(user, item, spu, sku);  
115 - });  
116 - brokerageRecordService.addBrokerage(userId, BrokerageRecordBizTypeEnum.ORDER, addList);  
117 - }  
118 -  
119 -}  
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/handler/TradeCombinationOrderHandler.java deleted
1 -package cn.iocoder.yudao.module.trade.service.order.handler;  
2 -  
3 -import cn.hutool.core.lang.Assert;  
4 -import cn.iocoder.yudao.module.promotion.api.combination.CombinationRecordApi;  
5 -import cn.iocoder.yudao.module.promotion.api.combination.dto.CombinationRecordCreateRespDTO;  
6 -import cn.iocoder.yudao.module.promotion.api.combination.dto.CombinationRecordRespDTO;  
7 -import cn.iocoder.yudao.module.promotion.enums.combination.CombinationRecordStatusEnum;  
8 -import cn.iocoder.yudao.module.trade.convert.order.TradeOrderConvert;  
9 -import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO;  
10 -import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderItemDO;  
11 -import cn.iocoder.yudao.module.trade.enums.order.TradeOrderStatusEnum;  
12 -import cn.iocoder.yudao.module.trade.enums.order.TradeOrderTypeEnum;  
13 -import cn.iocoder.yudao.module.trade.service.order.TradeOrderQueryService;  
14 -import cn.iocoder.yudao.module.trade.service.order.TradeOrderUpdateService;  
15 -import org.springframework.context.annotation.Lazy;  
16 -import org.springframework.stereotype.Component;  
17 -  
18 -import jakarta.annotation.Resource;  
19 -import java.util.List;  
20 -  
21 -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;  
22 -import static cn.iocoder.yudao.module.trade.enums.ErrorCodeConstants.ORDER_CREATE_FAIL_EXIST_UNPAID;  
23 -import static cn.iocoder.yudao.module.trade.enums.ErrorCodeConstants.ORDER_DELIVERY_FAIL_COMBINATION_RECORD_STATUS_NOT_SUCCESS;  
24 -  
25 -/**  
26 - * 拼团订单的 {@link TradeOrderHandler} 实现类  
27 - *  
28 - * @author HUIHUI  
29 - */  
30 -@Component  
31 -public class TradeCombinationOrderHandler implements TradeOrderHandler {  
32 -  
33 - @Resource  
34 - @Lazy // 延迟加载,避免循环依赖  
35 - private TradeOrderUpdateService orderUpdateService;  
36 - @Resource  
37 - private TradeOrderQueryService orderQueryService;  
38 -  
39 - @Resource  
40 - @Lazy // 延迟加载,避免循环依赖  
41 - private CombinationRecordApi combinationRecordApi;  
42 -  
43 - @Override  
44 - public void beforeOrderCreate(TradeOrderDO order, List<TradeOrderItemDO> orderItems) {  
45 - // 如果不是拼团订单则结束  
46 - if (!TradeOrderTypeEnum.isCombination(order.getType())) {  
47 - return;  
48 - }  
49 - Assert.isTrue(orderItems.size() == 1, "拼团时,只允许选择一个商品");  
50 -  
51 - // 1. 校验是否满足拼团活动相关限制  
52 - TradeOrderItemDO item = orderItems.get(0);  
53 - combinationRecordApi.validateCombinationRecord(order.getUserId(), order.getCombinationActivityId(),  
54 - order.getCombinationHeadId(), item.getSkuId(), item.getCount());  
55 -  
56 - // 2. 校验该用户是否存在未支付的拼团活动订单,避免一个拼团可以下多个单子了  
57 - TradeOrderDO activityOrder = orderQueryService.getOrderByUserIdAndStatusAndCombination(  
58 - order.getUserId(), order.getCombinationActivityId(), TradeOrderStatusEnum.UNPAID.getStatus());  
59 - if (activityOrder != null) {  
60 - throw exception(ORDER_CREATE_FAIL_EXIST_UNPAID);  
61 - }  
62 - }  
63 -  
64 - @Override  
65 - public void afterPayOrder(TradeOrderDO order, List<TradeOrderItemDO> orderItems) {  
66 - // 1.如果不是拼团订单则结束  
67 - if (!TradeOrderTypeEnum.isCombination(order.getType())) {  
68 - return;  
69 - }  
70 - Assert.isTrue(orderItems.size() == 1, "拼团时,只允许选择一个商品");  
71 -  
72 - // 2. 创建拼团记录  
73 - TradeOrderItemDO item = orderItems.get(0);  
74 - CombinationRecordCreateRespDTO combinationRecord = combinationRecordApi.createCombinationRecord(  
75 - TradeOrderConvert.INSTANCE.convert(order, item));  
76 -  
77 - // 3. 更新拼团相关信息到订单。为什么几个字段都要更新?  
78 - // 原因是:如果创建订单时自己是团长的情况下 combinationHeadId 是为 null 的,设置团长编号这个操作时在订单是否后创建拼团记录时才设置的。  
79 - orderUpdateService.updateOrderCombinationInfo(order.getId(), order.getCombinationActivityId(),  
80 - combinationRecord.getCombinationRecordId(), combinationRecord.getCombinationHeadId());  
81 - }  
82 -  
83 - @Override  
84 - public void beforeDeliveryOrder(TradeOrderDO order) {  
85 - if (!TradeOrderTypeEnum.isCombination(order.getType())) {  
86 - return;  
87 - }  
88 - // 校验订单拼团是否成功  
89 - CombinationRecordRespDTO combinationRecord = combinationRecordApi.getCombinationRecordByOrderId(order.getUserId(), order.getId());  
90 - Assert.notNull(combinationRecord, "订单({})对应的拼团记录不存在", order.getId());  
91 - if (!CombinationRecordStatusEnum.isSuccess(combinationRecord.getStatus())) {  
92 - throw exception(ORDER_DELIVERY_FAIL_COMBINATION_RECORD_STATUS_NOT_SUCCESS);  
93 - }  
94 - }  
95 -  
96 -}  
97 -  
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/handler/TradeCouponOrderHandler.java deleted
1 -package cn.iocoder.yudao.module.trade.service.order.handler;  
2 -  
3 -import cn.hutool.core.collection.CollUtil;  
4 -import cn.iocoder.yudao.module.promotion.api.coupon.CouponApi;  
5 -import cn.iocoder.yudao.module.promotion.api.coupon.dto.CouponUseReqDTO;  
6 -import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO;  
7 -import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderItemDO;  
8 -import cn.iocoder.yudao.module.trade.service.order.TradeOrderQueryService;  
9 -import cn.iocoder.yudao.module.trade.service.order.TradeOrderUpdateService;  
10 -import jakarta.annotation.Resource;  
11 -import lombok.extern.slf4j.Slf4j;  
12 -import org.springframework.context.annotation.Lazy;  
13 -import org.springframework.stereotype.Component;  
14 -  
15 -import java.util.List;  
16 -  
17 -/**  
18 - * 优惠劵的 {@link TradeOrderHandler} 实现类  
19 - *  
20 - * @author 芋道源码  
21 - */  
22 -@Component  
23 -@Slf4j  
24 -public class TradeCouponOrderHandler implements TradeOrderHandler {  
25 -  
26 - @Resource  
27 - @Lazy // 延迟加载,避免循环依赖  
28 - private TradeOrderUpdateService orderUpdateService;  
29 - @Resource  
30 - private TradeOrderQueryService orderQueryService;  
31 -  
32 - @Resource  
33 - private CouponApi couponApi;  
34 -  
35 - @Override  
36 - public void afterOrderCreate(TradeOrderDO order, List<TradeOrderItemDO> orderItems) {  
37 - if (order.getCouponId() == null || order.getCouponId() <= 0) {  
38 - return;  
39 - }  
40 - // 不在前置扣减的原因,是因为优惠劵要记录使用的订单号  
41 - couponApi.useCoupon(new CouponUseReqDTO().setId(order.getCouponId()).setUserId(order.getUserId())  
42 - .setOrderId(order.getId()));  
43 - }  
44 -  
45 - @Override  
46 - public void afterPayOrder(TradeOrderDO order, List<TradeOrderItemDO> orderItems) {  
47 - if (CollUtil.isEmpty(order.getGiveCouponTemplateCounts())) {  
48 - return;  
49 - }  
50 - // 赠送优惠券  
51 - try {  
52 - List<Long> couponIds = couponApi.takeCouponsByAdmin(order.getGiveCouponTemplateCounts(), order.getUserId());  
53 - if (CollUtil.isEmpty(couponIds)) {  
54 - return;  
55 - }  
56 - orderUpdateService.updateOrderGiveCouponIds(order.getUserId(), order.getId(), couponIds);  
57 - } catch (Exception e) {  
58 - log.error("[afterPayOrder][order({}) 赠送优惠券({})失败,需要手工补偿]", order.getId(), order.getGiveCouponTemplateCounts(), e);  
59 - }  
60 - }  
61 -  
62 - @Override  
63 - public void afterCancelOrder(TradeOrderDO order, List<TradeOrderItemDO> orderItems) {  
64 - // 情况一:退还订单使用的优惠券  
65 - if (order.getCouponId() != null && order.getCouponId() > 0) {  
66 - // 退回优惠劵  
67 - couponApi.returnUsedCoupon(order.getCouponId());  
68 - }  
69 - // 情况二:收回赠送的优惠券  
70 - if (CollUtil.isEmpty(order.getGiveCouponIds())) {  
71 - return;  
72 - }  
73 - couponApi.invalidateCouponsByAdmin(order.getGiveCouponIds(), order.getUserId());  
74 - }  
75 -  
76 -}  
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/handler/TradeMemberPointOrderHandler.java deleted
1 -package cn.iocoder.yudao.module.trade.service.order.handler;  
2 -  
3 -import cn.hutool.core.collection.CollUtil;  
4 -import cn.iocoder.yudao.module.member.api.level.MemberLevelApi;  
5 -import cn.iocoder.yudao.module.member.api.point.MemberPointApi;  
6 -import cn.iocoder.yudao.module.member.enums.MemberExperienceBizTypeEnum;  
7 -import cn.iocoder.yudao.module.member.enums.point.MemberPointBizTypeEnum;  
8 -import cn.iocoder.yudao.module.trade.dal.dataobject.aftersale.AfterSaleDO;  
9 -import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO;  
10 -import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderItemDO;  
11 -import cn.iocoder.yudao.module.trade.service.aftersale.AfterSaleService;  
12 -import org.springframework.stereotype.Component;  
13 -  
14 -import jakarta.annotation.Resource;  
15 -import java.util.List;  
16 -  
17 -import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.getSumValue;  
18 -  
19 -/**  
20 - * 会员积分、等级的 {@link TradeOrderHandler} 实现类  
21 - *  
22 - * @author owen  
23 - */  
24 -@Component  
25 -public class TradeMemberPointOrderHandler implements TradeOrderHandler {  
26 -  
27 - @Resource  
28 - private MemberPointApi memberPointApi;  
29 - @Resource  
30 - private MemberLevelApi memberLevelApi;  
31 -  
32 - @Resource  
33 - private AfterSaleService afterSaleService;  
34 -  
35 - @Override  
36 - public void afterOrderCreate(TradeOrderDO order, List<TradeOrderItemDO> orderItems) {  
37 - // 扣减用户积分(订单抵扣)。不在前置扣减的原因,是因为积分扣减时,需要记录关联业务  
38 - reducePoint(order.getUserId(), order.getUsePoint(), MemberPointBizTypeEnum.ORDER_USE, order.getId());  
39 - }  
40 -  
41 - @Override  
42 - public void afterPayOrder(TradeOrderDO order, List<TradeOrderItemDO> orderItems) {  
43 - // 增加用户积分(订单赠送)  
44 - addPoint(order.getUserId(), order.getGivePoint(), MemberPointBizTypeEnum.ORDER_GIVE,  
45 - order.getId());  
46 -  
47 - // 增加用户经验  
48 - memberLevelApi.addExperience(order.getUserId(), order.getPayPrice(),  
49 - MemberExperienceBizTypeEnum.ORDER_GIVE.getType(), String.valueOf(order.getId()));  
50 - }  
51 -  
52 - @Override  
53 - public void afterCancelOrder(TradeOrderDO order, List<TradeOrderItemDO> orderItems) {  
54 - // 售后的订单项,已经在 afterCancelOrderItem 回滚库存,所以这里不需要重复回滚  
55 - orderItems = filterOrderItemListByNoneAfterSale(orderItems);  
56 - if (CollUtil.isEmpty(orderItems)) {  
57 - return;  
58 - }  
59 -  
60 - // 增加(回滚)用户积分(订单抵扣)  
61 - Integer usePoint = getSumValue(orderItems, TradeOrderItemDO::getUsePoint, Integer::sum);  
62 - addPoint(order.getUserId(), usePoint, MemberPointBizTypeEnum.ORDER_USE_CANCEL,  
63 - order.getId());  
64 -  
65 - // 如下的返还,需要经过支持,也就是经历 afterPayOrder 流程  
66 - if (!order.getPayStatus()) {  
67 - return;  
68 - }  
69 - // 扣减(回滚)积分(订单赠送)  
70 - Integer givePoint = getSumValue(orderItems, TradeOrderItemDO::getGivePoint, Integer::sum);  
71 - reducePoint(order.getUserId(), givePoint, MemberPointBizTypeEnum.ORDER_GIVE_CANCEL,  
72 - order.getId());  
73 - // 扣减(回滚)用户经验  
74 - int payPrice = order.getPayPrice() - order.getRefundPrice();  
75 - memberLevelApi.addExperience(order.getUserId(), payPrice,  
76 - MemberExperienceBizTypeEnum.ORDER_GIVE_CANCEL.getType(), String.valueOf(order.getId()));  
77 - }  
78 -  
79 - @Override  
80 - public void afterCancelOrderItem(TradeOrderDO order, TradeOrderItemDO orderItem) {  
81 - // 增加(回滚)积分(订单抵扣)  
82 - addPoint(order.getUserId(), orderItem.getUsePoint(), MemberPointBizTypeEnum.ORDER_USE_CANCEL_ITEM, orderItem.getId());  
83 - // 扣减(回滚)积分(订单赠送)  
84 - reducePoint(order.getUserId(), orderItem.getGivePoint(), MemberPointBizTypeEnum.ORDER_GIVE_CANCEL_ITEM, orderItem.getId());  
85 -  
86 - // 扣减(回滚)用户经验  
87 - AfterSaleDO afterSale = afterSaleService.getAfterSale(orderItem.getAfterSaleId());  
88 - memberLevelApi.reduceExperience(order.getUserId(), afterSale.getRefundPrice(),  
89 - MemberExperienceBizTypeEnum.ORDER_GIVE_CANCEL_ITEM.getType(), String.valueOf(orderItem.getId()));  
90 - }  
91 -  
92 - /**  
93 - * 添加用户积分  
94 - * <p>  
95 - * 目前是支付成功后,就会创建积分记录。  
96 - * <p>  
97 - * 业内还有两种做法,可以根据自己的业务调整:  
98 - * 1. 确认收货后,才创建积分记录  
99 - * 2. 支付 or 下单成功时,创建积分记录(冻结),确认收货解冻或者 n 天后解冻  
100 - *  
101 - * @param userId 用户编号  
102 - * @param point 增加积分数量  
103 - * @param bizType 业务编号  
104 - * @param bizId 业务编号  
105 - */  
106 - protected void addPoint(Long userId, Integer point, MemberPointBizTypeEnum bizType, Long bizId) {  
107 - if (point != null && point > 0) {  
108 - memberPointApi.addPoint(userId, point, bizType.getType(), String.valueOf(bizId));  
109 - }  
110 - }  
111 -  
112 - protected void reducePoint(Long userId, Integer point, MemberPointBizTypeEnum bizType, Long bizId) {  
113 - if (point != null && point > 0) {  
114 - memberPointApi.reducePoint(userId, point, bizType.getType(), String.valueOf(bizId));  
115 - }  
116 - }  
117 -  
118 -}  
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/handler/TradeOrderHandler.java deleted
1 -package cn.iocoder.yudao.module.trade.service.order.handler;  
2 -  
3 -import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;  
4 -import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO;  
5 -import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderItemDO;  
6 -import cn.iocoder.yudao.module.trade.enums.order.TradeOrderItemAfterSaleStatusEnum;  
7 -  
8 -import java.util.List;  
9 -  
10 -/**  
11 - * 订单活动特殊逻辑处理器 handler 接口  
12 - * 提供订单生命周期钩子接口;订单创建前、订单创建后、订单支付后、订单取消  
13 - *  
14 - * @author HUIHUI  
15 - */  
16 -public interface TradeOrderHandler {  
17 -  
18 - /**  
19 - * 订单创建前  
20 - *  
21 - * @param order 订单  
22 - * @param orderItems 订单项  
23 - */  
24 - default void beforeOrderCreate(TradeOrderDO order, List<TradeOrderItemDO> orderItems) {}  
25 -  
26 - /**  
27 - * 订单创建后  
28 - *  
29 - * @param order 订单  
30 - * @param orderItems 订单项  
31 - */  
32 - default void afterOrderCreate(TradeOrderDO order, List<TradeOrderItemDO> orderItems) {}  
33 -  
34 - /**  
35 - * 支付订单后  
36 - *  
37 - * @param order 订单  
38 - * @param orderItems 订单项  
39 - */  
40 - default void afterPayOrder(TradeOrderDO order, List<TradeOrderItemDO> orderItems) {}  
41 -  
42 - /**  
43 - * 订单取消后  
44 - *  
45 - * @param order 订单  
46 - * @param orderItems 订单项  
47 - */  
48 - default void afterCancelOrder(TradeOrderDO order, List<TradeOrderItemDO> orderItems) {}  
49 -  
50 - /**  
51 - * 订单项取消后  
52 - *  
53 - * @param order 订单  
54 - * @param orderItem 订单项  
55 - */  
56 - default void afterCancelOrderItem(TradeOrderDO order, TradeOrderItemDO orderItem) {}  
57 -  
58 - /**  
59 - * 订单发货前  
60 - *  
61 - * @param order 订单  
62 - */  
63 - default void beforeDeliveryOrder(TradeOrderDO order) {}  
64 -  
65 - /**  
66 - * 订单发货后  
67 - *  
68 - * @param order 订单  
69 - */  
70 - default void afterDeliveryOrder(TradeOrderDO order) {}  
71 -  
72 - /**  
73 - * 订单收货前  
74 - *  
75 - * @param order 订单  
76 - */  
77 - default void beforeReceiveOrder(TradeOrderDO order) {}  
78 -  
79 - /**  
80 - * 订单收货后  
81 - *  
82 - * @param order 订单  
83 - */  
84 - default void afterReceiveOrder(TradeOrderDO order) {}  
85 -  
86 - // ========== 公用方法 ==========  
87 -  
88 - /**  
89 - * 过滤“未售后”的订单项列表  
90 - *  
91 - * @param orderItems 订单项列表  
92 - * @return 过滤后的订单项列表  
93 - */  
94 - default List<TradeOrderItemDO> filterOrderItemListByNoneAfterSale(List<TradeOrderItemDO> orderItems) {  
95 - return CollectionUtils.filterList(orderItems,  
96 - item -> TradeOrderItemAfterSaleStatusEnum.isNone(item.getAfterSaleStatus()));  
97 - }  
98 -  
99 -}  
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/handler/TradePointOrderHandler.java deleted
1 -package cn.iocoder.yudao.module.trade.service.order.handler;  
2 -  
3 -import cn.hutool.core.collection.CollUtil;  
4 -import cn.hutool.core.lang.Assert;  
5 -import cn.iocoder.yudao.module.member.api.user.MemberUserApi;  
6 -import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO;  
7 -import cn.iocoder.yudao.module.promotion.api.point.PointActivityApi;  
8 -import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO;  
9 -import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderItemDO;  
10 -import cn.iocoder.yudao.module.trade.enums.order.TradeOrderStatusEnum;  
11 -import cn.iocoder.yudao.module.trade.enums.order.TradeOrderTypeEnum;  
12 -import jakarta.annotation.Resource;  
13 -import org.springframework.stereotype.Component;  
14 -  
15 -import java.util.List;  
16 -import java.util.Objects;  
17 -  
18 -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;  
19 -import static cn.iocoder.yudao.module.trade.enums.ErrorCodeConstants.ORDER_CREATE_FAIL_INSUFFICIENT_USER_POINTS;  
20 -  
21 -/**  
22 - * 积分商城活动订单的 {@link TradeOrderHandler} 实现类  
23 - *  
24 - * @author HUIHUI  
25 - */  
26 -@Component  
27 -public class TradePointOrderHandler implements TradeOrderHandler {  
28 -  
29 - @Resource  
30 - private PointActivityApi pointActivityApi;  
31 - @Resource  
32 - private MemberUserApi memberUserApi;  
33 -  
34 - @Override  
35 - public void beforeOrderCreate(TradeOrderDO order, List<TradeOrderItemDO> orderItems) {  
36 - if (!TradeOrderTypeEnum.isPoint(order.getType())) {  
37 - return;  
38 - }  
39 - // 明确校验一下  
40 - Assert.isTrue(orderItems.size() == 1, "积分商城活动兑换商品兑换时,只允许选择一个商品");  
41 - // 校验用户剩余积分是否足够兑换商品  
42 - MemberUserRespDTO user = memberUserApi.getUser(order.getUserId());  
43 - if (user.getPoint() < order.getUsePoint()) {  
44 - throw exception(ORDER_CREATE_FAIL_INSUFFICIENT_USER_POINTS);  
45 - }  
46 -  
47 - // 扣减积分商城活动的库存  
48 - pointActivityApi.updatePointStockDecr(order.getPointActivityId(),  
49 - orderItems.get(0).getSkuId(), orderItems.get(0).getCount());  
50 -  
51 - // 如果支付金额为 0,则直接设置为已支付  
52 - if (Objects.equals(order.getPayPrice(), 0)) {  
53 - order.setPayStatus(true).setStatus(TradeOrderStatusEnum.UNDELIVERED.getStatus());  
54 - }  
55 - }  
56 -  
57 - @Override  
58 - public void afterCancelOrder(TradeOrderDO order, List<TradeOrderItemDO> orderItems) {  
59 - if (!TradeOrderTypeEnum.isPoint(order.getType())) {  
60 - return;  
61 - }  
62 - // 明确校验一下  
63 - Assert.isTrue(orderItems.size() == 1, "积分商城活动兑换商品兑换时,只允许选择一个商品");  
64 -  
65 - // 售后的订单项,已经在 afterCancelOrderItem 回滚库存,所以这里不需要重复回滚  
66 - orderItems = filterOrderItemListByNoneAfterSale(orderItems);  
67 - if (CollUtil.isEmpty(orderItems)) {  
68 - return;  
69 - }  
70 - afterCancelOrderItem(order, orderItems.get(0));  
71 - }  
72 -  
73 - @Override  
74 - public void afterCancelOrderItem(TradeOrderDO order, TradeOrderItemDO orderItem) {  
75 - if (!TradeOrderTypeEnum.isPoint(order.getType())) {  
76 - return;  
77 - }  
78 - // 恢复积分商城活动的库存  
79 - pointActivityApi.updatePointStockIncr(order.getPointActivityId(),  
80 - orderItem.getSkuId(), orderItem.getCount());  
81 - }  
82 -  
83 -}  
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/handler/TradeProductSkuOrderHandler.java deleted
1 -package cn.iocoder.yudao.module.trade.service.order.handler;  
2 -  
3 -import cn.hutool.core.collection.CollUtil;  
4 -import cn.iocoder.yudao.module.product.api.sku.ProductSkuApi;  
5 -import cn.iocoder.yudao.module.trade.convert.order.TradeOrderConvert;  
6 -import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO;  
7 -import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderItemDO;  
8 -import org.springframework.stereotype.Component;  
9 -  
10 -import jakarta.annotation.Resource;  
11 -import java.util.List;  
12 -  
13 -import static java.util.Collections.singletonList;  
14 -  
15 -/**  
16 - * 商品 SKU 库存的 {@link TradeOrderHandler} 实现类  
17 - *  
18 - * @author 芋道源码  
19 - */  
20 -@Component  
21 -public class TradeProductSkuOrderHandler implements TradeOrderHandler {  
22 -  
23 - @Resource  
24 - private ProductSkuApi productSkuApi;  
25 -  
26 - @Override  
27 - public void beforeOrderCreate(TradeOrderDO order, List<TradeOrderItemDO> orderItems) {  
28 - productSkuApi.updateSkuStock(TradeOrderConvert.INSTANCE.convertNegative(orderItems));  
29 - }  
30 -  
31 - @Override  
32 - public void afterCancelOrder(TradeOrderDO order, List<TradeOrderItemDO> orderItems) {  
33 - // 售后的订单项,已经在 afterCancelOrderItem 回滚库存,所以这里不需要重复回滚  
34 - orderItems = filterOrderItemListByNoneAfterSale(orderItems);  
35 - if (CollUtil.isEmpty(orderItems)) {  
36 - return;  
37 - }  
38 - productSkuApi.updateSkuStock(TradeOrderConvert.INSTANCE.convert(orderItems));  
39 - }  
40 -  
41 - @Override  
42 - public void afterCancelOrderItem(TradeOrderDO order, TradeOrderItemDO orderItem) {  
43 - productSkuApi.updateSkuStock(TradeOrderConvert.INSTANCE.convert(singletonList(orderItem)));  
44 - }  
45 -  
46 -}  
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/handler/TradeSeckillOrderHandler.java deleted
1 -package cn.iocoder.yudao.module.trade.service.order.handler;  
2 -  
3 -import cn.hutool.core.collection.CollUtil;  
4 -import cn.hutool.core.lang.Assert;  
5 -import cn.iocoder.yudao.module.promotion.api.seckill.SeckillActivityApi;  
6 -import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO;  
7 -import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderItemDO;  
8 -import cn.iocoder.yudao.module.trade.enums.order.TradeOrderTypeEnum;  
9 -import org.springframework.stereotype.Component;  
10 -  
11 -import jakarta.annotation.Resource;  
12 -import java.util.List;  
13 -  
14 -/**  
15 - * 秒杀订单的 {@link TradeOrderHandler} 实现类  
16 - *  
17 - * @author HUIHUI  
18 - */  
19 -@Component  
20 -public class TradeSeckillOrderHandler implements TradeOrderHandler {  
21 -  
22 - @Resource  
23 - private SeckillActivityApi seckillActivityApi;  
24 -  
25 - @Override  
26 - public void beforeOrderCreate(TradeOrderDO order, List<TradeOrderItemDO> orderItems) {  
27 - if (!TradeOrderTypeEnum.isSeckill(order.getType())) {  
28 - return;  
29 - }  
30 - // 明确校验一下  
31 - Assert.isTrue(orderItems.size() == 1, "秒杀时,只允许选择一个商品");  
32 -  
33 - // 扣减秒杀活动的库存  
34 - seckillActivityApi.updateSeckillStockDecr(order.getSeckillActivityId(),  
35 - orderItems.get(0).getSkuId(), orderItems.get(0).getCount());  
36 - }  
37 -  
38 - @Override  
39 - public void afterCancelOrder(TradeOrderDO order, List<TradeOrderItemDO> orderItems) {  
40 - if (!TradeOrderTypeEnum.isSeckill(order.getType())) {  
41 - return;  
42 - }  
43 - // 明确校验一下  
44 - Assert.isTrue(orderItems.size() == 1, "秒杀时,只允许选择一个商品");  
45 -  
46 - // 售后的订单项,已经在 afterCancelOrderItem 回滚库存,所以这里不需要重复回滚  
47 - orderItems = filterOrderItemListByNoneAfterSale(orderItems);  
48 - if (CollUtil.isEmpty(orderItems)) {  
49 - return;  
50 - }  
51 - afterCancelOrderItem(order, orderItems.get(0));  
52 - }  
53 -  
54 - @Override  
55 - public void afterCancelOrderItem(TradeOrderDO order, TradeOrderItemDO orderItem) {  
56 - if (!TradeOrderTypeEnum.isSeckill(order.getType())) {  
57 - return;  
58 - }  
59 - // 恢复秒杀活动的库存  
60 - seckillActivityApi.updateSeckillStockIncr(order.getSeckillActivityId(),  
61 - orderItem.getSkuId(), orderItem.getCount());  
62 - }  
63 -  
64 -}  
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/handler/TradeStatusSyncToWxaOrderHandler.java deleted
1 -package cn.iocoder.yudao.module.trade.service.order.handler;  
2 -  
3 -import cn.hutool.core.util.ObjUtil;  
4 -import cn.hutool.core.util.StrUtil;  
5 -import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;  
6 -import cn.iocoder.yudao.module.pay.api.order.PayOrderApi;  
7 -import cn.iocoder.yudao.module.pay.api.order.dto.PayOrderRespDTO;  
8 -import cn.iocoder.yudao.module.pay.enums.PayChannelEnum;  
9 -import cn.iocoder.yudao.module.system.api.social.SocialClientApi;  
10 -import cn.iocoder.yudao.module.system.api.social.dto.SocialWxaOrderNotifyConfirmReceiveReqDTO;  
11 -import cn.iocoder.yudao.module.system.api.social.dto.SocialWxaOrderUploadShippingInfoReqDTO;  
12 -import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO;  
13 -import cn.iocoder.yudao.module.trade.enums.delivery.DeliveryTypeEnum;  
14 -import cn.iocoder.yudao.module.trade.service.delivery.DeliveryExpressService;  
15 -import jakarta.annotation.Resource;  
16 -import lombok.extern.slf4j.Slf4j;  
17 -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;  
18 -import org.springframework.stereotype.Component;  
19 -  
20 -/**  
21 - * 同步订单状态到微信小程序的 {@link TradeOrderHandler} 实现类  
22 - *  
23 - * 背景:电商类目的微信小程序需要上传发货信息,不然微信支付会被封 = =!  
24 - * 注意:微信小程序开发环境下的订单不能用来发货。只有小程序正式版才会有发货,所以体验版无法调通,提示订单不存在。注意别踩坑。  
25 - */  
26 -@Slf4j  
27 -@Component  
28 -@ConditionalOnProperty(prefix = "yudao.trade.order", value = "status-sync-to-wxa-enable")  
29 -public class TradeStatusSyncToWxaOrderHandler implements TradeOrderHandler {  
30 -  
31 - @Resource  
32 - private PayOrderApi payOrderApi;  
33 - @Resource  
34 - private SocialClientApi socialClientApi;  
35 -  
36 - @Resource  
37 - private DeliveryExpressService expressService;  
38 -  
39 - @Override  
40 - public void afterDeliveryOrder(TradeOrderDO order) {  
41 - // 注意:只有微信小程序支付的订单,才需要同步  
42 - if (ObjUtil.notEqual(order.getPayChannelCode(), PayChannelEnum.WX_LITE.getCode())) {  
43 - return;  
44 - }  
45 - PayOrderRespDTO payOrder = payOrderApi.getOrder(order.getPayOrderId());  
46 - SocialWxaOrderUploadShippingInfoReqDTO reqDTO = new SocialWxaOrderUploadShippingInfoReqDTO()  
47 - .setTransactionId(payOrder.getChannelOrderNo())  
48 - .setOpenid(payOrder.getChannelUserId())  
49 - .setItemDesc(payOrder.getSubject())  
50 - .setReceiverContact(order.getReceiverMobile());  
51 - if (DeliveryTypeEnum.EXPRESS.getType().equals(order.getDeliveryType()) && StrUtil.isNotEmpty(order.getLogisticsNo())) {  
52 - reqDTO.setLogisticsType(SocialWxaOrderUploadShippingInfoReqDTO.LOGISTICS_TYPE_EXPRESS)  
53 - .setExpressCompany(expressService.getDeliveryExpress(order.getLogisticsId()).getCode())  
54 - .setLogisticsNo(order.getLogisticsNo());  
55 - } else if (DeliveryTypeEnum.PICK_UP.getType().equals(order.getDeliveryType())) {  
56 - reqDTO.setLogisticsType(SocialWxaOrderUploadShippingInfoReqDTO.LOGISTICS_TYPE_PICK_UP);  
57 - } else {  
58 - reqDTO.setLogisticsType(SocialWxaOrderUploadShippingInfoReqDTO.LOGISTICS_TYPE_VIRTUAL);  
59 - }  
60 - try {  
61 - socialClientApi.uploadWxaOrderShippingInfo(UserTypeEnum.MEMBER.getValue(), reqDTO);  
62 - } catch (Exception ex) {  
63 - log.error("[afterDeliveryOrder][订单({}) 上传订单物流信息到微信小程序失败]", order, ex);  
64 - }  
65 - }  
66 -  
67 - @Override  
68 - public void afterReceiveOrder(TradeOrderDO order) {  
69 - // 注意:只有微信小程序支付的订单,才需要同步  
70 - if (ObjUtil.notEqual(order.getPayChannelCode(), PayChannelEnum.WX_LITE.getCode())) {  
71 - return;  
72 - }  
73 - PayOrderRespDTO payOrder = payOrderApi.getOrder(order.getPayOrderId());  
74 - SocialWxaOrderNotifyConfirmReceiveReqDTO reqDTO = new SocialWxaOrderNotifyConfirmReceiveReqDTO()  
75 - .setTransactionId(payOrder.getChannelOrderNo())  
76 - .setReceivedTime(order.getReceiveTime());  
77 - try {  
78 - socialClientApi.notifyWxaOrderConfirmReceive(UserTypeEnum.MEMBER.getValue(), reqDTO);  
79 - } catch (Exception ex) {  
80 - log.error("[afterReceiveOrder][订单({}) 通知订单收货到微信小程序失败]", order, ex);  
81 - }  
82 - }  
83 -  
84 - // TODO @芋艿:【设置路径】 https://developers.weixin.qq.com/miniprogram/dev/platform-capabilities/business-capabilities/order-shipping/order-shipping.html#%E5%85%AD%E3%80%81%E6%B6%88%E6%81%AF%E8%B7%B3%E8%BD%AC%E8%B7%AF%E5%BE%84%E8%AE%BE%E7%BD%AE%E6%8E%A5%E5%8F%A3  
85 -  
86 -}  
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/TradePriceService.java deleted
1 -package cn.iocoder.yudao.module.trade.service.price;  
2 -  
3 -import cn.iocoder.yudao.module.trade.controller.app.order.vo.AppTradeProductSettlementRespVO;  
4 -import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateReqBO;  
5 -import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateRespBO;  
6 -import jakarta.validation.Valid;  
7 -  
8 -import java.util.List;  
9 -  
10 -/**  
11 - * 价格计算 Service 接口  
12 - *  
13 - * @author 芋道源码  
14 - */  
15 -public interface TradePriceService {  
16 -  
17 - /**  
18 - * 【订单】价格计算  
19 - *  
20 - * @param calculateReqDTO 计算信息  
21 - * @return 计算结果  
22 - */  
23 - TradePriceCalculateRespBO calculateOrderPrice(@Valid TradePriceCalculateReqBO calculateReqDTO);  
24 -  
25 - /**  
26 - * 【商品】价格计算,用于商品列表、商品详情  
27 - *  
28 - * @param userId 用户编号,允许为空  
29 - * @param spuIds 商品 SPU 编号数组  
30 - * @return 计算结果  
31 - */  
32 - List<AppTradeProductSettlementRespVO> calculateProductPrice(Long userId, List<Long> spuIds);  
33 -  
34 -}  
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/bo/TradePriceCalculateReqBO.java deleted
1 -package cn.iocoder.yudao.module.trade.service.price.bo;  
2 -  
3 -import cn.iocoder.yudao.module.trade.enums.delivery.DeliveryTypeEnum;  
4 -import jakarta.validation.Valid;  
5 -import jakarta.validation.constraints.Min;  
6 -import jakarta.validation.constraints.NotNull;  
7 -import lombok.Data;  
8 -  
9 -import java.util.List;  
10 -  
11 -/**  
12 - * 价格计算 Request BO  
13 - *  
14 - * @author yudao源码  
15 - */  
16 -@Data  
17 -public class TradePriceCalculateReqBO {  
18 -  
19 - /**  
20 - * 用户编号  
21 - *  
22 - * 对应 MemberUserDO 的 id 编号  
23 - */  
24 - private Long userId;  
25 -  
26 - /**  
27 - * 优惠劵编号  
28 - *  
29 - * 对应 CouponDO 的 id 编号  
30 - */  
31 - private Long couponId;  
32 -  
33 - /**  
34 - * 是否使用积分  
35 - */  
36 - @NotNull(message = "是否使用积分不能为空")  
37 - private Boolean pointStatus;  
38 -  
39 - /**  
40 - * 配送方式  
41 - *  
42 - * 枚举 {@link DeliveryTypeEnum}  
43 - */  
44 - private Integer deliveryType;  
45 - /**  
46 - * 收货地址编号  
47 - *  
48 - * 对应 MemberAddressDO 的 id 编号  
49 - */  
50 - private Long addressId;  
51 - /**  
52 - * 自提门店编号  
53 - *  
54 - * 对应 PickUpStoreDO 的 id 编号  
55 - */  
56 - private Long pickUpStoreId;  
57 -  
58 - /**  
59 - * 商品 SKU 数组  
60 - */  
61 - @NotNull(message = "商品数组不能为空")  
62 - private List<Item> items;  
63 -  
64 - // ========== 秒杀活动相关字段 ==========  
65 - /**  
66 - * 秒杀活动编号  
67 - */  
68 - private Long seckillActivityId;  
69 -  
70 - // ========== 拼团活动相关字段 ==========  
71 - /**  
72 - * 拼团活动编号  
73 - */  
74 - private Long combinationActivityId;  
75 -  
76 - /**  
77 - * 拼团团长编号  
78 - */  
79 - private Long combinationHeadId;  
80 -  
81 - // ========== 砍价活动相关字段 ==========  
82 - /**  
83 - * 砍价记录编号  
84 - */  
85 - private Long bargainRecordId;  
86 -  
87 - // ========== 积分商城活动相关字段 ==========  
88 - /**  
89 - * 积分商城活动编号  
90 - */  
91 - private Long pointActivityId;  
92 -  
93 - /**  
94 - * 商品 SKU  
95 - */  
96 - @Data  
97 - @Valid  
98 - public static class Item {  
99 -  
100 - /**  
101 - * SKU 编号  
102 - */  
103 - @NotNull(message = "商品 SKU 编号不能为空")  
104 - private Long skuId;  
105 -  
106 - /**  
107 - * SKU 数量  
108 - */  
109 - @NotNull(message = "商品 SKU 数量不能为空")  
110 - @Min(value = 0L, message = "商品 SKU 数量必须大于等于 0")  
111 - private Integer count;  
112 -  
113 - /**  
114 - * 购物车项的编号  
115 - */  
116 - private Long cartId;  
117 -  
118 - /**  
119 - * 是否选中  
120 - */  
121 - @NotNull(message = "是否选中不能为空")  
122 - private Boolean selected;  
123 -  
124 - }  
125 -}  
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradeBargainActivityPriceCalculator.java deleted
1 -package cn.iocoder.yudao.module.trade.service.price.calculator;  
2 -  
3 -import cn.hutool.core.lang.Assert;  
4 -import cn.hutool.core.util.ObjectUtil;  
5 -import cn.hutool.core.util.StrUtil;  
6 -import cn.iocoder.yudao.module.promotion.api.bargain.BargainRecordApi;  
7 -import cn.iocoder.yudao.module.promotion.api.bargain.dto.BargainValidateJoinRespDTO;  
8 -import cn.iocoder.yudao.module.promotion.enums.common.PromotionTypeEnum;  
9 -import cn.iocoder.yudao.module.trade.enums.order.TradeOrderTypeEnum;  
10 -import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateReqBO;  
11 -import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateRespBO;  
12 -import org.springframework.core.annotation.Order;  
13 -import org.springframework.stereotype.Component;  
14 -  
15 -import jakarta.annotation.Resource;  
16 -  
17 -// TODO huihui:单测需要补充  
18 -/**  
19 - * 砍价活动的 {@link TradePriceCalculator} 实现类  
20 - *  
21 - * @author 芋道源码  
22 - */  
23 -@Component  
24 -@Order(TradePriceCalculator.ORDER_BARGAIN_ACTIVITY)  
25 -public class TradeBargainActivityPriceCalculator implements TradePriceCalculator {  
26 -  
27 - @Resource  
28 - private BargainRecordApi bargainRecordApi;  
29 -  
30 - @Override  
31 - public void calculate(TradePriceCalculateReqBO param, TradePriceCalculateRespBO result) {  
32 - // 1. 判断订单类型和是否具有拼团记录编号  
33 - if (ObjectUtil.notEqual(result.getType(), TradeOrderTypeEnum.BARGAIN.getType())) {  
34 - return;  
35 - }  
36 - Assert.isTrue(param.getItems().size() == 1, "砍价时,只允许选择一个商品");  
37 - Assert.isTrue(param.getItems().get(0).getCount() == 1, "砍价时,只允许选择一个商品");  
38 - // 2. 校验是否可以参与砍价  
39 - TradePriceCalculateRespBO.OrderItem orderItem = result.getItems().get(0);  
40 - BargainValidateJoinRespDTO bargainActivity = bargainRecordApi.validateJoinBargain(  
41 - param.getUserId(), param.getBargainRecordId(), orderItem.getSkuId());  
42 -  
43 - // 3.1 记录优惠明细  
44 - Integer discountPrice = orderItem.getPayPrice() - bargainActivity.getBargainPrice() * orderItem.getCount();  
45 - // TODO 芋艿:极端情况,优惠金额为负数,需要处理  
46 - TradePriceCalculatorHelper.addPromotion(result, orderItem,  
47 - param.getSeckillActivityId(), bargainActivity.getName(), PromotionTypeEnum.BARGAIN_ACTIVITY.getType(),  
48 - StrUtil.format("砍价活动:省 {} 元", TradePriceCalculatorHelper.formatPrice(discountPrice)),  
49 - discountPrice);  
50 - // 3.2 更新 SKU 优惠金额  
51 - orderItem.setDiscountPrice(orderItem.getDiscountPrice() + discountPrice);  
52 - TradePriceCalculatorHelper.recountPayPrice(orderItem);  
53 - TradePriceCalculatorHelper.recountAllPrice(result);  
54 - // 4. 特殊:设置对应的砍价活动编号  
55 - result.setBargainActivityId(bargainActivity.getActivityId());  
56 - }  
57 -  
58 -}  
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradeCombinationActivityPriceCalculator.java deleted
1 -package cn.iocoder.yudao.module.trade.service.price.calculator;  
2 -  
3 -import cn.hutool.core.lang.Assert;  
4 -import cn.hutool.core.util.StrUtil;  
5 -import cn.iocoder.yudao.module.promotion.api.combination.CombinationRecordApi;  
6 -import cn.iocoder.yudao.module.promotion.api.combination.dto.CombinationValidateJoinRespDTO;  
7 -import cn.iocoder.yudao.module.promotion.enums.common.PromotionTypeEnum;  
8 -import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateReqBO;  
9 -import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateRespBO;  
10 -import org.springframework.core.annotation.Order;  
11 -import org.springframework.stereotype.Component;  
12 -  
13 -import jakarta.annotation.Resource;  
14 -  
15 -// TODO @puhui999:单测可以后补下  
16 -  
17 -/**  
18 - * 拼团活动的 {@link TradePriceCalculator} 实现类  
19 - *  
20 - * @author HUIHUI  
21 - */  
22 -@Component  
23 -@Order(TradePriceCalculator.ORDER_COMBINATION_ACTIVITY)  
24 -public class TradeCombinationActivityPriceCalculator implements TradePriceCalculator {  
25 -  
26 - @Resource  
27 - private CombinationRecordApi combinationRecordApi;  
28 -  
29 - @Override  
30 - public void calculate(TradePriceCalculateReqBO param, TradePriceCalculateRespBO result) {  
31 - // 1. 判断订单类型和是否具有拼团活动编号  
32 - if (param.getCombinationActivityId() == null) {  
33 - return;  
34 - }  
35 - Assert.isTrue(param.getItems().size() == 1, "拼团时,只允许选择一个商品");  
36 - // 2. 校验是否可以参与拼团  
37 - TradePriceCalculateRespBO.OrderItem orderItem = result.getItems().get(0);  
38 - CombinationValidateJoinRespDTO combinationActivity = combinationRecordApi.validateJoinCombination(  
39 - param.getUserId(), param.getCombinationActivityId(), param.getCombinationHeadId(),  
40 - orderItem.getSkuId(), orderItem.getCount());  
41 -  
42 - // 3.1 记录优惠明细  
43 - Integer discountPrice = orderItem.getPayPrice() - combinationActivity.getCombinationPrice() * orderItem.getCount();  
44 - TradePriceCalculatorHelper.addPromotion(result, orderItem,  
45 - param.getCombinationActivityId(), combinationActivity.getName(), PromotionTypeEnum.COMBINATION_ACTIVITY.getType(),  
46 - StrUtil.format("拼团活动:省 {} 元", TradePriceCalculatorHelper.formatPrice(discountPrice)),  
47 - discountPrice);  
48 - // 3.2 更新 SKU 优惠金额  
49 - orderItem.setDiscountPrice(orderItem.getDiscountPrice() + discountPrice);  
50 - TradePriceCalculatorHelper.recountPayPrice(orderItem);  
51 - TradePriceCalculatorHelper.recountAllPrice(result);  
52 - }  
53 -  
54 -}  
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradePointActivityPriceCalculator.java deleted
1 -package cn.iocoder.yudao.module.trade.service.price.calculator;  
2 -  
3 -import cn.hutool.core.lang.Assert;  
4 -import cn.hutool.core.util.ObjectUtil;  
5 -import cn.hutool.core.util.StrUtil;  
6 -import cn.iocoder.yudao.module.member.api.user.MemberUserApi;  
7 -import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO;  
8 -import cn.iocoder.yudao.module.promotion.api.point.PointActivityApi;  
9 -import cn.iocoder.yudao.module.promotion.api.point.dto.PointValidateJoinRespDTO;  
10 -import cn.iocoder.yudao.module.promotion.enums.common.PromotionTypeEnum;  
11 -import cn.iocoder.yudao.module.trade.enums.order.TradeOrderTypeEnum;  
12 -import cn.iocoder.yudao.module.trade.service.order.TradeOrderQueryService;  
13 -import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateReqBO;  
14 -import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateRespBO;  
15 -import jakarta.annotation.Resource;  
16 -import lombok.extern.slf4j.Slf4j;  
17 -import org.springframework.core.annotation.Order;  
18 -import org.springframework.stereotype.Component;  
19 -  
20 -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;  
21 -import static cn.iocoder.yudao.module.trade.enums.ErrorCodeConstants.PRICE_CALCULATE_POINT_TOTAL_LIMIT_COUNT;  
22 -  
23 -/**  
24 - * 积分商城的 {@link TradePriceCalculator} 实现类  
25 - *  
26 - * @author owen  
27 - */  
28 -@Component  
29 -@Order(TradePriceCalculator.ORDER_POINT_ACTIVITY)  
30 -@Slf4j  
31 -public class TradePointActivityPriceCalculator implements TradePriceCalculator {  
32 -  
33 - @Resource  
34 - private PointActivityApi pointActivityApi;  
35 - @Resource  
36 - private MemberUserApi memberUserApi;  
37 -  
38 - @Resource  
39 - private TradeOrderQueryService tradeOrderQueryService;  
40 -  
41 - @Override  
42 - public void calculate(TradePriceCalculateReqBO param, TradePriceCalculateRespBO result) {  
43 - // 1.1 判断订单类型是否为积分商城活动  
44 - if (ObjectUtil.notEqual(result.getType(), TradeOrderTypeEnum.POINT.getType())) {  
45 - return;  
46 - }  
47 - // 1.2 初始化积分  
48 - MemberUserRespDTO user = memberUserApi.getUser(param.getUserId());  
49 - result.setTotalPoint(user.getPoint()).setUsePoint(0);  
50 -  
51 - // 1.3 校验用户积分余额  
52 - if (user.getPoint() == null || user.getPoint() <= 0) {  
53 - return;  
54 - }  
55 -  
56 - Assert.isTrue(param.getItems().size() == 1, "积分商城兑换商品时,只允许选择一个商品");  
57 - // 2. 校验是否可以参与积分商城活动  
58 - TradePriceCalculateRespBO.OrderItem orderItem = result.getItems().get(0);  
59 - PointValidateJoinRespDTO activity = validateJoinPointActivity(  
60 - param.getUserId(), param.getPointActivityId(),  
61 - orderItem.getSkuId(), orderItem.getCount());  
62 -  
63 - // 3.0 积分兑换前置校验  
64 - Assert.isTrue(activity.getPoint() >= 1, "积分商城商品兑换积分必须大于 1");  
65 - // 3.1 记录优惠明细  
66 - int usePoint = activity.getPoint() * orderItem.getCount();  
67 - result.setUsePoint(usePoint);  
68 - orderItem.setUsePoint(usePoint);  
69 - int discountPrice = orderItem.getPayPrice(); // 情况一:单使用积分兑换  
70 - if (activity.getPrice() != null && activity.getPrice() > 0) { // 情况二:积分 + 金额  
71 - discountPrice = orderItem.getPayPrice() - activity.getPrice() * orderItem.getCount();  
72 - }  
73 - TradePriceCalculatorHelper.addPromotion(result, orderItem,  
74 - param.getPointActivityId(), "积分商城活动", PromotionTypeEnum.POINT.getType(),  
75 - StrUtil.format("积分商城活动:省 {} 元", TradePriceCalculatorHelper.formatPrice(discountPrice)),  
76 - discountPrice);  
77 - // 3.2 更新 SKU 优惠金额  
78 - orderItem.setDiscountPrice(orderItem.getDiscountPrice() + discountPrice);  
79 - TradePriceCalculatorHelper.recountPayPrice(orderItem);  
80 - TradePriceCalculatorHelper.recountAllPrice(result);  
81 - }  
82 -  
83 - private PointValidateJoinRespDTO validateJoinPointActivity(Long userId, Long activityId, Long skuId, Integer count) {  
84 - // 1. 校验是否可以参与积分商城活动  
85 - PointValidateJoinRespDTO pointValidateJoinRespDTO = pointActivityApi.validateJoinPointActivity(activityId, skuId, count);  
86 - // 2. 校验总限购数量,目前只有 trade 有具体下单的数据,需要交给 trade 价格计算使用  
87 - int pointProductCount = tradeOrderQueryService.getActivityProductCount(userId, activityId, TradeOrderTypeEnum.POINT);  
88 - if (pointProductCount + count > pointValidateJoinRespDTO.getCount()) {  
89 - throw exception(PRICE_CALCULATE_POINT_TOTAL_LIMIT_COUNT);  
90 - }  
91 - return pointValidateJoinRespDTO;  
92 - }  
93 -  
94 -}  
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradePointGiveCalculator.java deleted
1 -package cn.iocoder.yudao.module.trade.service.price.calculator;  
2 -  
3 -import cn.hutool.core.util.BooleanUtil;  
4 -import cn.iocoder.yudao.framework.common.util.number.MoneyUtils;  
5 -import cn.iocoder.yudao.module.member.api.config.MemberConfigApi;  
6 -import cn.iocoder.yudao.module.member.api.config.dto.MemberConfigRespDTO;  
7 -import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateReqBO;  
8 -import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateRespBO;  
9 -import lombok.extern.slf4j.Slf4j;  
10 -import org.springframework.core.annotation.Order;  
11 -import org.springframework.stereotype.Component;  
12 -  
13 -import jakarta.annotation.Resource;  
14 -import java.util.List;  
15 -import java.util.Optional;  
16 -  
17 -import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.filterList;  
18 -  
19 -/**  
20 - * 赠送积分的 {@link TradePriceCalculator} 实现类  
21 - *  
22 - * @author owen  
23 - */  
24 -@Component  
25 -@Order(TradePriceCalculator.ORDER_POINT_GIVE)  
26 -@Slf4j  
27 -public class TradePointGiveCalculator implements TradePriceCalculator {  
28 -  
29 - @Resource  
30 - private MemberConfigApi memberConfigApi;  
31 -  
32 - @Override  
33 - public void calculate(TradePriceCalculateReqBO param, TradePriceCalculateRespBO result) {  
34 - // 1.1 校验积分功能是否开启  
35 - int givePointPerYuan = Optional.ofNullable(memberConfigApi.getConfig())  
36 - .filter(config -> BooleanUtil.isTrue(config.getPointTradeDeductEnable()))  
37 - .map(MemberConfigRespDTO::getPointTradeGivePoint)  
38 - .orElse(0);  
39 - if (givePointPerYuan <= 0) {  
40 - return;  
41 - }  
42 - // 1.2 校验支付金额  
43 - if (result.getPrice().getPayPrice() <= 0) {  
44 - return;  
45 - }  
46 -  
47 - // 2.1 计算赠送积分  
48 - int givePoint = MoneyUtils.calculateRatePriceFloor(result.getPrice().getPayPrice(), (double) givePointPerYuan);  
49 - // 2.2 计算分摊的赠送积分  
50 - List<TradePriceCalculateRespBO.OrderItem> orderItems = filterList(result.getItems(), TradePriceCalculateRespBO.OrderItem::getSelected);  
51 - List<Integer> dividePoints = TradePriceCalculatorHelper.dividePrice(orderItems, givePoint);  
52 -  
53 - // 3.2 更新 SKU 赠送积分  
54 - for (int i = 0; i < orderItems.size(); i++) {  
55 - TradePriceCalculateRespBO.OrderItem orderItem = orderItems.get(i);  
56 - // 商品可能赠送了积分,所以这里要加上  
57 - orderItem.setGivePoint(orderItem.getGivePoint() + dividePoints.get(i));  
58 - }  
59 - // 3.3 更新订单赠送积分  
60 - TradePriceCalculatorHelper.recountAllGivePoint(result);  
61 - }  
62 -  
63 -}  
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradePointUsePriceCalculator.java deleted
1 -package cn.iocoder.yudao.module.trade.service.price.calculator;  
2 -  
3 -import cn.hutool.core.util.BooleanUtil;  
4 -import cn.hutool.core.util.ObjectUtil;  
5 -import cn.hutool.core.util.StrUtil;  
6 -import cn.iocoder.yudao.module.member.api.config.MemberConfigApi;  
7 -import cn.iocoder.yudao.module.member.api.config.dto.MemberConfigRespDTO;  
8 -import cn.iocoder.yudao.module.member.api.user.MemberUserApi;  
9 -import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO;  
10 -import cn.iocoder.yudao.module.promotion.enums.common.PromotionTypeEnum;  
11 -import cn.iocoder.yudao.module.trade.enums.order.TradeOrderTypeEnum;  
12 -import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateReqBO;  
13 -import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateRespBO;  
14 -import jakarta.annotation.Resource;  
15 -import lombok.extern.slf4j.Slf4j;  
16 -import org.springframework.core.annotation.Order;  
17 -import org.springframework.stereotype.Component;  
18 -  
19 -import java.util.List;  
20 -  
21 -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;  
22 -import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.filterList;  
23 -import static cn.iocoder.yudao.module.trade.enums.ErrorCodeConstants.PRICE_CALCULATE_PAY_PRICE_ILLEGAL;  
24 -  
25 -/**  
26 - * 使用积分的 {@link TradePriceCalculator} 实现类  
27 - *  
28 - * @author owen  
29 - */  
30 -@Component  
31 -@Order(TradePriceCalculator.ORDER_POINT_USE)  
32 -@Slf4j  
33 -public class TradePointUsePriceCalculator implements TradePriceCalculator {  
34 -  
35 - @Resource  
36 - private MemberConfigApi memberConfigApi;  
37 - @Resource  
38 - private MemberUserApi memberUserApi;  
39 -  
40 - @Override  
41 - public void calculate(TradePriceCalculateReqBO param, TradePriceCalculateRespBO result) {  
42 - // 判断订单类型是否不为积分商城活动  
43 - if (ObjectUtil.equal(result.getType(), TradeOrderTypeEnum.POINT.getType())) {  
44 - return;  
45 - }  
46 - // 0. 初始化积分  
47 - MemberUserRespDTO user = memberUserApi.getUser(param.getUserId());  
48 - result.setTotalPoint(user.getPoint()).setUsePoint(0);  
49 -  
50 - // 1.1 校验是否使用积分  
51 - if (!BooleanUtil.isTrue(param.getPointStatus())) {  
52 - return;  
53 - }  
54 - // 1.2 校验积分抵扣是否开启  
55 - MemberConfigRespDTO config = memberConfigApi.getConfig();  
56 - if (!isDeductPointEnable(config)) {  
57 - return;  
58 - }  
59 - // 1.3 校验用户积分余额  
60 - if (user.getPoint() == null || user.getPoint() <= 0) {  
61 - return;  
62 - }  
63 -  
64 - // 2.1 计算积分优惠金额  
65 - int pointPrice = calculatePointPrice(config, user.getPoint(), result);  
66 - // 2.2 计算分摊的积分、抵扣金额  
67 - List<TradePriceCalculateRespBO.OrderItem> orderItems = filterList(result.getItems(), TradePriceCalculateRespBO.OrderItem::getSelected);  
68 - List<Integer> dividePointPrices = TradePriceCalculatorHelper.dividePrice(orderItems, pointPrice);  
69 - List<Integer> divideUsePoints = TradePriceCalculatorHelper.dividePrice(orderItems, result.getUsePoint());  
70 -  
71 - // 3.1 记录优惠明细  
72 - TradePriceCalculatorHelper.addPromotion(result, orderItems,  
73 - param.getUserId(), "积分抵扣", PromotionTypeEnum.POINT.getType(),  
74 - StrUtil.format("积分抵扣:省 {} 元", TradePriceCalculatorHelper.formatPrice(pointPrice)),  
75 - dividePointPrices);  
76 - // 3.2 更新 SKU 优惠金额  
77 - for (int i = 0; i < orderItems.size(); i++) {  
78 - TradePriceCalculateRespBO.OrderItem orderItem = orderItems.get(i);  
79 - orderItem.setPointPrice(dividePointPrices.get(i));  
80 - orderItem.setUsePoint(divideUsePoints.get(i));  
81 - TradePriceCalculatorHelper.recountPayPrice(orderItem);  
82 - }  
83 - TradePriceCalculatorHelper.recountAllPrice(result);  
84 - }  
85 -  
86 - private boolean isDeductPointEnable(MemberConfigRespDTO config) {  
87 - return config != null &&  
88 - BooleanUtil.isTrue(config.getPointTradeDeductEnable()) && // 积分功能是否启用  
89 - config.getPointTradeDeductUnitPrice() != null && config.getPointTradeDeductUnitPrice() > 0; // 有没有配置:1 积分抵扣多少分  
90 - }  
91 -  
92 - private Integer calculatePointPrice(MemberConfigRespDTO config, Integer usePoint, TradePriceCalculateRespBO result) {  
93 - // 每个订单最多可以使用的积分数量  
94 - if (config.getPointTradeDeductMaxPrice() != null && config.getPointTradeDeductMaxPrice() > 0) {  
95 - usePoint = Math.min(usePoint, config.getPointTradeDeductMaxPrice());  
96 - }  
97 - // TODO @疯狂:这里应该是,抵扣到只剩下 0.01;  
98 - // 积分优惠金额(分)  
99 - int pointPrice = usePoint * config.getPointTradeDeductUnitPrice();  
100 - if (result.getPrice().getPayPrice() <= pointPrice) {  
101 - // 禁止 0 元购  
102 - throw exception(PRICE_CALCULATE_PAY_PRICE_ILLEGAL);  
103 - }  
104 -// // 允许0 元购!!!:用户积分比较多时,积分可以抵扣的金额要大于支付金额,这时需要根据支付金额反推使用多少积分  
105 -// if (result.getPrice().getPayPrice() < pointPrice) {  
106 -// pointPrice = result.getPrice().getPayPrice();  
107 -// // 反推需要扣除的积分  
108 -// usePoint = NumberUtil.toBigDecimal(pointPrice)  
109 -// .divide(NumberUtil.toBigDecimal(config.getPointTradeDeductUnitPrice()), 0, RoundingMode.HALF_UP)  
110 -// .intValue();  
111 -// }  
112 - // 记录使用的积分  
113 - result.setUsePoint(usePoint);  
114 - return pointPrice;  
115 - }  
116 -  
117 -}  
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradePriceCalculator.java deleted
1 -package cn.iocoder.yudao.module.trade.service.price.calculator;  
2 -  
3 -import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateReqBO;  
4 -import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateRespBO;  
5 -  
6 -/**  
7 - * 价格计算的计算器接口  
8 - *  
9 - * 优惠计算顺序:  
10 - * 1. <a href="https://help.youzan.com/displaylist/detail_4_4-1-53316">积分抵现、会员价、优惠券、粉丝专享价、满减送哪个优先计算?</>  
11 - *  
12 - * @author 芋道源码  
13 - */  
14 -public interface TradePriceCalculator {  
15 -  
16 - int ORDER_SECKILL_ACTIVITY = 8;  
17 - int ORDER_BARGAIN_ACTIVITY = 8;  
18 - int ORDER_COMBINATION_ACTIVITY = 8;  
19 - int ORDER_POINT_ACTIVITY = 8;  
20 -  
21 - int ORDER_DISCOUNT_ACTIVITY = 10;  
22 - int ORDER_REWARD_ACTIVITY = 20;  
23 - int ORDER_COUPON = 30;  
24 - int ORDER_POINT_USE = 40;  
25 - /**  
26 - * 快递运费的计算  
27 - *  
28 - * 放在各种营销活动、优惠劵后面  
29 - */  
30 - int ORDER_DELIVERY = 50;  
31 - /**  
32 - * 赠送积分,放最后  
33 - *  
34 - * 放在 {@link #ORDER_DELIVERY} 后面的原因,是运费也会产生费用,需要赠送对应积分  
35 - */  
36 - int ORDER_POINT_GIVE = 999;  
37 -  
38 - void calculate(TradePriceCalculateReqBO param, TradePriceCalculateRespBO result);  
39 -  
40 -}  
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradeSeckillActivityPriceCalculator.java deleted
1 -package cn.iocoder.yudao.module.trade.service.price.calculator;  
2 -  
3 -import cn.hutool.core.lang.Assert;  
4 -import cn.hutool.core.util.StrUtil;  
5 -import cn.iocoder.yudao.module.promotion.api.seckill.SeckillActivityApi;  
6 -import cn.iocoder.yudao.module.promotion.api.seckill.dto.SeckillValidateJoinRespDTO;  
7 -import cn.iocoder.yudao.module.promotion.enums.common.PromotionTypeEnum;  
8 -import cn.iocoder.yudao.module.trade.enums.order.TradeOrderTypeEnum;  
9 -import cn.iocoder.yudao.module.trade.service.order.TradeOrderQueryService;  
10 -import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateReqBO;  
11 -import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateRespBO;  
12 -import jakarta.annotation.Resource;  
13 -import org.springframework.core.annotation.Order;  
14 -import org.springframework.stereotype.Component;  
15 -  
16 -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;  
17 -import static cn.iocoder.yudao.module.trade.enums.ErrorCodeConstants.PRICE_CALCULATE_SECKILL_TOTAL_LIMIT_COUNT;  
18 -  
19 -// TODO huihui:单测需要补充  
20 -/**  
21 - * 秒杀活动的 {@link TradePriceCalculator} 实现类  
22 - *  
23 - * @author HUIHUI  
24 - */  
25 -@Component  
26 -@Order(TradePriceCalculator.ORDER_SECKILL_ACTIVITY)  
27 -public class TradeSeckillActivityPriceCalculator implements TradePriceCalculator {  
28 -  
29 - @Resource  
30 - private SeckillActivityApi seckillActivityApi;  
31 -  
32 - @Resource  
33 - private TradeOrderQueryService tradeOrderQueryService;  
34 -  
35 - @Override  
36 - public void calculate(TradePriceCalculateReqBO param, TradePriceCalculateRespBO result) {  
37 - // 1. 判断订单类型和是否具有秒杀活动编号  
38 - if (param.getSeckillActivityId() == null) {  
39 - return;  
40 - }  
41 - Assert.isTrue(param.getItems().size() == 1, "秒杀时,只允许选择一个商品");  
42 - // 2. 校验是否可以参与秒杀  
43 - TradePriceCalculateRespBO.OrderItem orderItem = result.getItems().get(0);  
44 - SeckillValidateJoinRespDTO seckillActivity = validateJoinSeckill(  
45 - param.getUserId(), param.getSeckillActivityId(),  
46 - orderItem.getSkuId(), orderItem.getCount());  
47 -  
48 - // 3.1 记录优惠明细  
49 - Integer discountPrice = orderItem.getPayPrice() - seckillActivity.getSeckillPrice() * orderItem.getCount();  
50 - TradePriceCalculatorHelper.addPromotion(result, orderItem,  
51 - param.getSeckillActivityId(), seckillActivity.getName(), PromotionTypeEnum.SECKILL_ACTIVITY.getType(),  
52 - StrUtil.format("秒杀活动:省 {} 元", TradePriceCalculatorHelper.formatPrice(discountPrice)),  
53 - discountPrice);  
54 - // 3.2 更新 SKU 优惠金额  
55 - orderItem.setDiscountPrice(orderItem.getDiscountPrice() + discountPrice);  
56 - TradePriceCalculatorHelper.recountPayPrice(orderItem);  
57 - TradePriceCalculatorHelper.recountAllPrice(result);  
58 - }  
59 -  
60 - private SeckillValidateJoinRespDTO validateJoinSeckill(Long userId, Long activityId, Long skuId, Integer count) {  
61 - // 1. 校验是否可以参与秒杀  
62 - SeckillValidateJoinRespDTO seckillActivity = seckillActivityApi.validateJoinSeckill(activityId, skuId, count);  
63 - // 2. 校验总限购数量,目前只有 trade 有具体下单的数据,需要交给 trade 价格计算使用  
64 - int seckillProductCount = tradeOrderQueryService.getActivityProductCount(userId, activityId, TradeOrderTypeEnum.SECKILL);  
65 - if (seckillProductCount + count > seckillActivity.getTotalLimitCount()) {  
66 - throw exception(PRICE_CALCULATE_SECKILL_TOTAL_LIMIT_COUNT);  
67 - }  
68 - return seckillActivity;  
69 - }  
70 -  
71 -}  
yudao-module-mall/yudao-module-trade-biz/src/main/resources/mapper/brokerage/BrokerageUserMapper.xml deleted
1 -<?xml version="1.0" encoding="UTF-8"?>  
2 -<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">  
3 -<mapper namespace="cn.iocoder.yudao.module.trade.dal.mysql.brokerage.BrokerageUserMapper">  
4 -  
5 - <select id="selectSummaryPageByUserId"  
6 - resultType="cn.iocoder.yudao.module.trade.controller.app.brokerage.vo.user.AppBrokerageUserChildSummaryRespVO">  
7 -  
8 - SELECT bu.id, bu.bind_user_time AS brokerageTime,  
9 - (SELECT SUM(price) FROM trade_brokerage_record r  
10 - WHERE r.user_id = bu.id AND biz_type = #{bizType} AND r.status = #{status} AND r.deleted = FALSE) AS brokeragePrice,  
11 - (SELECT COUNT(1) FROM trade_brokerage_record r  
12 - WHERE r.user_id = bu.id AND biz_type = #{bizType} AND r.status = #{status} AND r.deleted = FALSE) AS brokerageOrderCount,  
13 - (SELECT COUNT(1) FROM trade_brokerage_user c  
14 - WHERE c.bind_user_id = bu.id AND c.deleted = FALSE) AS brokerageUserCount  
15 - FROM trade_brokerage_user AS bu  
16 - <where>  
17 - bu.deleted = false  
18 - <if test="ids != null and ids.size() > 0">  
19 - and bu.id in  
20 - <foreach collection="ids" open="(" item="id" separator="," close=")">  
21 - #{id}  
22 - </foreach>  
23 - </if>  
24 - </where>  
25 - <choose>  
26 - <when test="sortingField.field == 'userCount'">  
27 - ORDER BY brokerageUserCount ${sortingField.order}  
28 - </when>  
29 - <when test="sortingField.field == 'orderCount'">  
30 - ORDER BY brokerageOrderCount ${sortingField.order}  
31 - </when>  
32 - <when test="sortingField.field == 'price'">  
33 - ORDER BY brokeragePrice ${sortingField.order}  
34 - </when>  
35 - <otherwise>  
36 - ORDER BY bu.bind_user_time DESC  
37 - </otherwise>  
38 - </choose>  
39 - </select>  
40 -  
41 -</mapper>  
yudao-module-mall/yudao-module-trade-biz/src/test/java/cn/iocoder/yudao/module/trade/framework/delivery/core/client/impl/Kd100ExpressClientIntegrationTest.java deleted
1 -package cn.iocoder.yudao.module.trade.framework.delivery.core.client.impl;  
2 -  
3 -import cn.iocoder.yudao.framework.common.util.json.JsonUtils;  
4 -import cn.iocoder.yudao.module.trade.framework.delivery.config.TradeExpressProperties;  
5 -import cn.iocoder.yudao.module.trade.framework.delivery.core.client.dto.ExpressTrackQueryReqDTO;  
6 -import cn.iocoder.yudao.module.trade.framework.delivery.core.client.dto.ExpressTrackRespDTO;  
7 -import cn.iocoder.yudao.module.trade.framework.delivery.core.client.impl.kd100.Kd100ExpressClient;  
8 -import lombok.extern.slf4j.Slf4j;  
9 -import org.junit.jupiter.api.BeforeEach;  
10 -import org.junit.jupiter.api.Disabled;  
11 -import org.junit.jupiter.api.Test;  
12 -import org.springframework.boot.web.client.RestTemplateBuilder;  
13 -import org.springframework.web.client.RestTemplate;  
14 -  
15 -import java.util.List;  
16 -  
17 -/**  
18 - * {@link Kd100ExpressClient} 的集成测试  
19 - *  
20 - * @author jason  
21 - */  
22 -@Slf4j  
23 -public class Kd100ExpressClientIntegrationTest {  
24 -  
25 - private Kd100ExpressClient client;  
26 -  
27 - @BeforeEach  
28 - public void init() {  
29 - RestTemplate restTemplate = new RestTemplateBuilder().build();  
30 - TradeExpressProperties.Kd100Config config = new TradeExpressProperties.Kd100Config()  
31 - .setKey("pLXUGAwK5305")  
32 - .setCustomer("E77DF18BE109F454A5CD319E44BF5177");  
33 - client = new Kd100ExpressClient(restTemplate, config);  
34 - }  
35 -  
36 - @Test  
37 - @Disabled("集成测试,暂时忽略")  
38 - public void testGetExpressTrackList() {  
39 - ExpressTrackQueryReqDTO reqDTO = new ExpressTrackQueryReqDTO();  
40 - reqDTO.setExpressCode("STO");  
41 - reqDTO.setLogisticsNo("773220402764314");  
42 - List<ExpressTrackRespDTO> tracks = client.getExpressTrackList(reqDTO);  
43 - System.out.println(JsonUtils.toJsonPrettyString(tracks));  
44 - }  
45 -  
46 -}  
yudao-module-mall/yudao-module-trade-biz/src/test/java/cn/iocoder/yudao/module/trade/framework/delivery/core/client/impl/KdNiaoExpressClientIntegrationTest.java deleted
1 -package cn.iocoder.yudao.module.trade.framework.delivery.core.client.impl;  
2 -  
3 -import cn.iocoder.yudao.framework.common.util.json.JsonUtils;  
4 -import cn.iocoder.yudao.module.trade.framework.delivery.config.TradeExpressProperties;  
5 -import cn.iocoder.yudao.module.trade.framework.delivery.core.client.dto.ExpressTrackQueryReqDTO;  
6 -import cn.iocoder.yudao.module.trade.framework.delivery.core.client.dto.ExpressTrackRespDTO;  
7 -import cn.iocoder.yudao.module.trade.framework.delivery.core.client.impl.kdniao.KdNiaoExpressClient;  
8 -import lombok.extern.slf4j.Slf4j;  
9 -import org.junit.jupiter.api.BeforeEach;  
10 -import org.junit.jupiter.api.Disabled;  
11 -import org.junit.jupiter.api.Test;  
12 -import org.springframework.boot.web.client.RestTemplateBuilder;  
13 -import org.springframework.web.client.RestTemplate;  
14 -  
15 -import java.util.List;  
16 -  
17 -/**  
18 - * {@link KdNiaoExpressClient} 的集成测试  
19 - *  
20 - * @author jason  
21 - */  
22 -@Slf4j  
23 -public class KdNiaoExpressClientIntegrationTest {  
24 -  
25 - private KdNiaoExpressClient client;  
26 -  
27 - @BeforeEach  
28 - public void init() {  
29 - RestTemplate restTemplate = new RestTemplateBuilder().build();  
30 - TradeExpressProperties.KdNiaoConfig config = new TradeExpressProperties.KdNiaoConfig()  
31 - .setApiKey("cb022f1e-48f1-4c4a-a723-9001ac9676b8")  
32 - .setBusinessId("1809751");  
33 - client = new KdNiaoExpressClient(restTemplate, config);  
34 - }  
35 -  
36 - @Test  
37 - @Disabled("集成测试,暂时忽略")  
38 - public void testGetExpressTrackList() {  
39 - ExpressTrackQueryReqDTO reqDTO = new ExpressTrackQueryReqDTO();  
40 - reqDTO.setExpressCode("STO");  
41 - reqDTO.setLogisticsNo("777168349863987");  
42 - List<ExpressTrackRespDTO> tracks = client.getExpressTrackList(reqDTO);  
43 - System.out.println(JsonUtils.toJsonPrettyString(tracks));  
44 - }  
45 -  
46 -}  
yudao-module-mall/yudao-module-trade-biz/src/test/java/cn/iocoder/yudao/module/trade/service/brokerage/BrokerageRecordServiceImplTest.java deleted
1 -package cn.iocoder.yudao.module.trade.service.brokerage;  
2 -  
3 -import cn.hutool.core.util.NumberUtil;  
4 -import cn.iocoder.yudao.framework.common.pojo.PageResult;  
5 -import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;  
6 -import cn.iocoder.yudao.module.trade.controller.admin.brokerage.vo.record.BrokerageRecordPageReqVO;  
7 -import cn.iocoder.yudao.module.trade.dal.dataobject.brokerage.BrokerageRecordDO;  
8 -import cn.iocoder.yudao.module.trade.dal.mysql.brokerage.BrokerageRecordMapper;  
9 -import cn.iocoder.yudao.module.trade.service.config.TradeConfigService;  
10 -import org.junit.jupiter.api.Disabled;  
11 -import org.junit.jupiter.api.Test;  
12 -import org.springframework.boot.test.mock.mockito.MockBean;  
13 -import org.springframework.context.annotation.Import;  
14 -  
15 -import jakarta.annotation.Resource;  
16 -import java.math.RoundingMode;  
17 -  
18 -import static cn.hutool.core.util.RandomUtil.randomEle;  
19 -import static cn.hutool.core.util.RandomUtil.randomInt;  
20 -import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildBetweenTime;  
21 -import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId;  
22 -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals;  
23 -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomInteger;  
24 -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo;  
25 -import static org.junit.jupiter.api.Assertions.assertEquals;  
26 -  
27 -// TODO @芋艿:单测后续看看  
28 -/**  
29 - * {@link BrokerageRecordServiceImpl} 的单元测试类  
30 - *  
31 - * @author owen  
32 - */  
33 -@Disabled // TODO 芋艿:后续 fix 补充的单测  
34 -@Import(BrokerageRecordServiceImpl.class)  
35 -public class BrokerageRecordServiceImplTest extends BaseDbUnitTest {  
36 -  
37 - @Resource  
38 - private BrokerageRecordServiceImpl brokerageRecordService;  
39 - @Resource  
40 - private BrokerageRecordMapper brokerageRecordMapper;  
41 -  
42 - @MockBean  
43 - private TradeConfigService tradeConfigService;  
44 - @MockBean  
45 - private BrokerageUserService brokerageUserService;  
46 -  
47 - @Test  
48 - @Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解  
49 - public void testGetBrokerageRecordPage() {  
50 - // mock 数据  
51 - BrokerageRecordDO dbBrokerageRecord = randomPojo(BrokerageRecordDO.class, o -> { // 等会查询到  
52 - o.setUserId(null);  
53 - o.setBizType(null);  
54 - o.setStatus(null);  
55 - o.setCreateTime(null);  
56 - });  
57 - brokerageRecordMapper.insert(dbBrokerageRecord);  
58 - // 测试 userId 不匹配  
59 - brokerageRecordMapper.insert(cloneIgnoreId(dbBrokerageRecord, o -> o.setUserId(null)));  
60 - // 测试 bizType 不匹配  
61 - brokerageRecordMapper.insert(cloneIgnoreId(dbBrokerageRecord, o -> o.setBizType(null)));  
62 - // 测试 status 不匹配  
63 - brokerageRecordMapper.insert(cloneIgnoreId(dbBrokerageRecord, o -> o.setStatus(null)));  
64 - // 测试 createTime 不匹配  
65 - brokerageRecordMapper.insert(cloneIgnoreId(dbBrokerageRecord, o -> o.setCreateTime(null)));  
66 - // 准备参数  
67 - BrokerageRecordPageReqVO reqVO = new BrokerageRecordPageReqVO();  
68 - reqVO.setUserId(null);  
69 - reqVO.setBizType(null);  
70 - reqVO.setStatus(null);  
71 - reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));  
72 -  
73 - // 调用  
74 - PageResult<BrokerageRecordDO> pageResult = brokerageRecordService.getBrokerageRecordPage(reqVO);  
75 - // 断言  
76 - assertEquals(1, pageResult.getTotal());  
77 - assertEquals(1, pageResult.getList().size());  
78 - assertPojoEquals(dbBrokerageRecord, pageResult.getList().get(0));  
79 - }  
80 -  
81 - @Test  
82 - public void testCalculatePrice_useFixedPrice() {  
83 - // mock 数据  
84 - Integer payPrice = randomInteger();  
85 - Integer percent = randomInt(1, 101);  
86 - Integer fixedPrice = randomInt();  
87 - // 调用  
88 - int brokerage = brokerageRecordService.calculatePrice(payPrice, percent, fixedPrice);  
89 - // 断言  
90 - assertEquals(brokerage, fixedPrice);  
91 - }  
92 -  
93 - @Test  
94 - public void testCalculatePrice_usePercent() {  
95 - // mock 数据  
96 - Integer payPrice = randomInteger();  
97 - Integer percent = randomInt(1, 101);  
98 - Integer fixedPrice = randomEle(new Integer[]{0, null});  
99 - System.out.println("fixedPrice=" + fixedPrice);  
100 - // 调用  
101 - int brokerage = brokerageRecordService.calculatePrice(payPrice, percent, fixedPrice);  
102 - // 断言  
103 - assertEquals(brokerage, NumberUtil.div(NumberUtil.mul(payPrice, percent), 100, 0, RoundingMode.DOWN).intValue());  
104 - }  
105 -  
106 - @Test  
107 - public void testCalculatePrice_equalsZero() {  
108 - // mock 数据  
109 - Integer payPrice = null;  
110 - Integer percent = null;  
111 - Integer fixedPrice = null;  
112 - // 调用  
113 - int brokerage = brokerageRecordService.calculatePrice(payPrice, percent, fixedPrice);  
114 - // 断言  
115 - assertEquals(brokerage, 0);  
116 - }  
117 -}  
yudao-module-mall/yudao-module-trade-biz/src/test/java/cn/iocoder/yudao/module/trade/service/brokerage/BrokerageUserServiceImplTest.java deleted
1 -package cn.iocoder.yudao.module.trade.service.brokerage;  
2 -  
3 -import cn.iocoder.yudao.framework.common.pojo.PageResult;  
4 -import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;  
5 -import cn.iocoder.yudao.module.trade.controller.admin.brokerage.vo.user.BrokerageUserPageReqVO;  
6 -import cn.iocoder.yudao.module.trade.dal.dataobject.brokerage.BrokerageUserDO;  
7 -import cn.iocoder.yudao.module.trade.dal.mysql.brokerage.BrokerageUserMapper;  
8 -import org.junit.jupiter.api.Disabled;  
9 -import org.junit.jupiter.api.Test;  
10 -import org.springframework.context.annotation.Import;  
11 -  
12 -import jakarta.annotation.Resource;  
13 -  
14 -import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildBetweenTime;  
15 -import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId;  
16 -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals;  
17 -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo;  
18 -import static org.junit.jupiter.api.Assertions.assertEquals;  
19 -  
20 -// TODO @芋艿:单测后续看看  
21 -/**  
22 - * {@link BrokerageUserServiceImpl} 的单元测试类  
23 - *  
24 - * @author owen  
25 - */  
26 -@Disabled // TODO 芋艿:后续 fix 补充的单测  
27 -@Import(BrokerageUserServiceImpl.class)  
28 -public class BrokerageUserServiceImplTest extends BaseDbUnitTest {  
29 -  
30 - @Resource  
31 - private BrokerageUserServiceImpl brokerageUserService;  
32 -  
33 - @Resource  
34 - private BrokerageUserMapper brokerageUserMapper;  
35 -  
36 - @Test  
37 - @Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解  
38 - public void testGetBrokerageUserPage() {  
39 - // mock 数据  
40 - BrokerageUserDO dbBrokerageUser = randomPojo(BrokerageUserDO.class, o -> { // 等会查询到  
41 - o.setBindUserId(null);  
42 - o.setBrokerageEnabled(null);  
43 - o.setCreateTime(null);  
44 - });  
45 - brokerageUserMapper.insert(dbBrokerageUser);  
46 - // 测试 brokerageUserId 不匹配  
47 - brokerageUserMapper.insert(cloneIgnoreId(dbBrokerageUser, o -> o.setBindUserId(null)));  
48 - // 测试 brokerageEnabled 不匹配  
49 - brokerageUserMapper.insert(cloneIgnoreId(dbBrokerageUser, o -> o.setBrokerageEnabled(null)));  
50 - // 测试 createTime 不匹配  
51 - brokerageUserMapper.insert(cloneIgnoreId(dbBrokerageUser, o -> o.setCreateTime(null)));  
52 - // 准备参数  
53 - BrokerageUserPageReqVO reqVO = new BrokerageUserPageReqVO();  
54 - reqVO.setBindUserId(null);  
55 - reqVO.setBrokerageEnabled(null);  
56 - reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));  
57 -  
58 - // 调用  
59 - PageResult<BrokerageUserDO> pageResult = brokerageUserService.getBrokerageUserPage(reqVO);  
60 - // 断言  
61 - assertEquals(1, pageResult.getTotal());  
62 - assertEquals(1, pageResult.getList().size());  
63 - assertPojoEquals(dbBrokerageUser, pageResult.getList().get(0));  
64 - }  
65 -  
66 -}  
yudao-module-mall/yudao-module-trade-biz/src/test/java/cn/iocoder/yudao/module/trade/service/brokerage/BrokerageWithdrawServiceImplTest.java deleted
1 -package cn.iocoder.yudao.module.trade.service.brokerage;  
2 -  
3 -import cn.iocoder.yudao.framework.common.pojo.PageResult;  
4 -import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;  
5 -import cn.iocoder.yudao.module.system.api.notify.NotifyMessageSendApi;  
6 -import cn.iocoder.yudao.module.trade.controller.admin.brokerage.vo.withdraw.BrokerageWithdrawPageReqVO;  
7 -import cn.iocoder.yudao.module.trade.dal.dataobject.brokerage.BrokerageWithdrawDO;  
8 -import cn.iocoder.yudao.module.trade.dal.mysql.brokerage.BrokerageWithdrawMapper;  
9 -import cn.iocoder.yudao.module.trade.service.config.TradeConfigService;  
10 -import jakarta.annotation.Resource;  
11 -import jakarta.validation.Validator;  
12 -import org.junit.jupiter.api.Disabled;  
13 -import org.junit.jupiter.api.Test;  
14 -import org.springframework.boot.test.mock.mockito.MockBean;  
15 -import org.springframework.context.annotation.Import;  
16 -  
17 -import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildBetweenTime;  
18 -import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId;  
19 -import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals;  
20 -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo;  
21 -import static org.junit.jupiter.api.Assertions.assertEquals;  
22 -  
23 -// TODO 芋艿:后续 review  
24 -/**  
25 - * {@link BrokerageWithdrawServiceImpl} 的单元测试类  
26 - *  
27 - * @author 芋道源码  
28 - */  
29 -@Disabled // TODO 芋艿:后续 fix 补充的单测  
30 -@Import(BrokerageWithdrawServiceImpl.class)  
31 -public class BrokerageWithdrawServiceImplTest extends BaseDbUnitTest {  
32 -  
33 - @Resource  
34 - private BrokerageWithdrawServiceImpl brokerageWithdrawService;  
35 -  
36 - @Resource  
37 - private BrokerageWithdrawMapper brokerageWithdrawMapper;  
38 -  
39 - @MockBean  
40 - private BrokerageRecordService brokerageRecordService;  
41 - @MockBean  
42 - private BrokerageUserService brokerageUserService;  
43 - @MockBean  
44 - private TradeConfigService tradeConfigService;  
45 -  
46 - @MockBean  
47 - private NotifyMessageSendApi notifyMessageSendApi;  
48 -  
49 - @Resource  
50 - private Validator validator;  
51 -  
52 - @Test  
53 - @Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解  
54 - public void testGetBrokerageWithdrawPage() {  
55 - // mock 数据  
56 - BrokerageWithdrawDO dbBrokerageWithdraw = randomPojo(BrokerageWithdrawDO.class, o -> { // 等会查询到  
57 - o.setUserId(null);  
58 - o.setType(null);  
59 - o.setUserName(null);  
60 - o.setUserAccount(null);  
61 - o.setBankName(null);  
62 - o.setStatus(null);  
63 - o.setCreateTime(null);  
64 - });  
65 - brokerageWithdrawMapper.insert(dbBrokerageWithdraw);  
66 - // 测试 userId 不匹配  
67 - brokerageWithdrawMapper.insert(cloneIgnoreId(dbBrokerageWithdraw, o -> o.setUserId(null)));  
68 - // 测试 type 不匹配  
69 - brokerageWithdrawMapper.insert(cloneIgnoreId(dbBrokerageWithdraw, o -> o.setType(null)));  
70 - // 测试 name 不匹配  
71 - brokerageWithdrawMapper.insert(cloneIgnoreId(dbBrokerageWithdraw, o -> o.setUserName(null)));  
72 - // 测试 accountNo 不匹配  
73 - brokerageWithdrawMapper.insert(cloneIgnoreId(dbBrokerageWithdraw, o -> o.setUserAccount(null)));  
74 - // 测试 bankName 不匹配  
75 - brokerageWithdrawMapper.insert(cloneIgnoreId(dbBrokerageWithdraw, o -> o.setBankName(null)));  
76 - // 测试 status 不匹配  
77 - brokerageWithdrawMapper.insert(cloneIgnoreId(dbBrokerageWithdraw, o -> o.setStatus(null)));  
78 - // 测试 auditReason 不匹配  
79 - brokerageWithdrawMapper.insert(cloneIgnoreId(dbBrokerageWithdraw, o -> o.setAuditReason(null)));  
80 - // 测试 auditTime 不匹配  
81 - brokerageWithdrawMapper.insert(cloneIgnoreId(dbBrokerageWithdraw, o -> o.setAuditTime(null)));  
82 - // 测试 remark 不匹配  
83 - brokerageWithdrawMapper.insert(cloneIgnoreId(dbBrokerageWithdraw, o -> o.setRemark(null)));  
84 - // 测试 createTime 不匹配  
85 - brokerageWithdrawMapper.insert(cloneIgnoreId(dbBrokerageWithdraw, o -> o.setCreateTime(null)));  
86 - // 准备参数  
87 - BrokerageWithdrawPageReqVO reqVO = new BrokerageWithdrawPageReqVO();  
88 - reqVO.setUserId(null);  
89 - reqVO.setType(null);  
90 - reqVO.setUserName(null);  
91 - reqVO.setUserAccount(null);  
92 - reqVO.setBankName(null);  
93 - reqVO.setStatus(null);  
94 - reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));  
95 -  
96 - // 调用  
97 - PageResult<BrokerageWithdrawDO> pageResult = brokerageWithdrawService.getBrokerageWithdrawPage(reqVO);  
98 - // 断言  
99 - assertEquals(1, pageResult.getTotal());  
100 - assertEquals(1, pageResult.getList().size());  
101 - assertPojoEquals(dbBrokerageWithdraw, pageResult.getList().get(0));  
102 - }  
103 -  
104 - @Test  
105 - public void testCalculateFeePrice() {  
106 - //Integer withdrawPrice = 100;  
107 - //// 测试手续费比例未设置  
108 - //Integer percent = null;  
109 - //assertEquals(brokerageWithdrawService.calculateFeePrice(withdrawPrice, percent), 0);  
110 - //// 测试手续费给为0  
111 - //percent = 0;  
112 - //assertEquals(brokerageWithdrawService.calculateFeePrice(withdrawPrice, percent), 0);  
113 - //// 测试手续费  
114 - //percent = 1;  
115 - //assertEquals(brokerageWithdrawService.calculateFeePrice(withdrawPrice, percent), 1);  
116 - }  
117 -}  
yudao-module-mall/yudao-module-trade-biz/src/test/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradeDiscountActivityPriceCalculatorTest.java deleted
1 -package cn.iocoder.yudao.module.trade.service.price.calculator;  
2 -  
3 -import cn.iocoder.yudao.framework.test.core.ut.BaseMockitoUnitTest;  
4 -import cn.iocoder.yudao.module.promotion.api.discount.DiscountActivityApi;  
5 -import cn.iocoder.yudao.module.promotion.api.discount.dto.DiscountProductRespDTO;  
6 -import cn.iocoder.yudao.module.promotion.enums.common.PromotionDiscountTypeEnum;  
7 -import cn.iocoder.yudao.module.promotion.enums.common.PromotionTypeEnum;  
8 -import cn.iocoder.yudao.module.trade.enums.order.TradeOrderTypeEnum;  
9 -import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateReqBO;  
10 -import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateRespBO;  
11 -import org.junit.jupiter.api.Disabled;  
12 -import org.junit.jupiter.api.Test;  
13 -import org.mockito.InjectMocks;  
14 -import org.mockito.Mock;  
15 -  
16 -import java.util.ArrayList;  
17 -  
18 -import static cn.iocoder.yudao.framework.common.util.collection.SetUtils.asSet;  
19 -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo;  
20 -import static java.util.Arrays.asList;  
21 -import static org.junit.jupiter.api.Assertions.*;  
22 -import static org.mockito.ArgumentMatchers.eq;  
23 -import static org.mockito.Mockito.when;  
24 -  
25 -/**  
26 - * {@link TradeDiscountActivityPriceCalculator} 的单元测试类  
27 - *  
28 - * @author 芋道源码  
29 - */  
30 -@Disabled // TODO 芋艿:后续修复  
31 -public class TradeDiscountActivityPriceCalculatorTest extends BaseMockitoUnitTest {  
32 -  
33 - @InjectMocks  
34 - private TradeDiscountActivityPriceCalculator tradeDiscountActivityPriceCalculator;  
35 -  
36 - @Mock  
37 - private DiscountActivityApi discountActivityApi;  
38 -  
39 - @Test  
40 - public void testCalculate() {  
41 - // 准备参数  
42 - TradePriceCalculateReqBO param = new TradePriceCalculateReqBO()  
43 - .setItems(asList(  
44 - new TradePriceCalculateReqBO.Item().setSkuId(10L).setCount(2).setSelected(true), // 匹配活动,且已选中  
45 - new TradePriceCalculateReqBO.Item().setSkuId(20L).setCount(3).setSelected(false) // 匹配活动,但未选中  
46 - ));  
47 - TradePriceCalculateRespBO result = new TradePriceCalculateRespBO()  
48 - .setType(TradeOrderTypeEnum.NORMAL.getType())  
49 - .setPrice(new TradePriceCalculateRespBO.Price())  
50 - .setPromotions(new ArrayList<>())  
51 - .setItems(asList(  
52 - new TradePriceCalculateRespBO.OrderItem().setSkuId(10L).setCount(2).setSelected(true)  
53 - .setPrice(100),  
54 - new TradePriceCalculateRespBO.OrderItem().setSkuId(20L).setCount(3).setSelected(false)  
55 - .setPrice(50)  
56 - ));  
57 - // 保证价格被初始化上  
58 - TradePriceCalculatorHelper.recountPayPrice(result.getItems());  
59 - TradePriceCalculatorHelper.recountAllPrice(result);  
60 -  
61 - // mock 方法(限时折扣活动)  
62 - when(discountActivityApi.getMatchDiscountProductListBySkuIds(eq(asSet(10L, 20L)))).thenReturn(asList(  
63 - randomPojo(DiscountProductRespDTO.class, o -> o.setActivityId(1000L)  
64 - .setActivityName("活动 1000 号").setSkuId(10L)  
65 - .setDiscountType(PromotionDiscountTypeEnum.PRICE.getType()).setDiscountPrice(40)),  
66 - randomPojo(DiscountProductRespDTO.class, o -> o.setActivityId(2000L)  
67 - .setActivityName("活动 2000 号").setSkuId(20L)  
68 - .setDiscountType(PromotionDiscountTypeEnum.PERCENT.getType()).setDiscountPercent(60))  
69 - ));  
70 - // 10L: 100 * 2 - 40 * 2 = 120  
71 - // 20L:50 * 3 - 50 * 3 * 0.4 = 90  
72 -  
73 - // 调用  
74 - tradeDiscountActivityPriceCalculator.calculate(param, result);  
75 - // 断言:Price 部分  
76 - TradePriceCalculateRespBO.Price price = result.getPrice();  
77 - assertEquals(price.getTotalPrice(), 200);  
78 - assertEquals(price.getDiscountPrice(), 80);  
79 - assertEquals(price.getPointPrice(), 0);  
80 - assertEquals(price.getDeliveryPrice(), 0);  
81 - assertEquals(price.getCouponPrice(), 0);  
82 - assertEquals(price.getPayPrice(), 120);  
83 - assertNull(result.getCouponId());  
84 - // 断言:SKU 1  
85 - assertEquals(result.getItems().size(), 2);  
86 - TradePriceCalculateRespBO.OrderItem orderItem01 = result.getItems().get(0);  
87 - assertEquals(orderItem01.getSkuId(), 10L);  
88 - assertEquals(orderItem01.getCount(), 2);  
89 - assertEquals(orderItem01.getPrice(), 100);  
90 - assertEquals(orderItem01.getDiscountPrice(), 80);  
91 - assertEquals(orderItem01.getDeliveryPrice(), 0);  
92 - assertEquals(orderItem01.getCouponPrice(), 0);  
93 - assertEquals(orderItem01.getPointPrice(), 0);  
94 - assertEquals(orderItem01.getPayPrice(), 120);  
95 - // 断言:SKU 2  
96 - TradePriceCalculateRespBO.OrderItem orderItem02 = result.getItems().get(1);  
97 - assertEquals(orderItem02.getSkuId(), 20L);  
98 - assertEquals(orderItem02.getCount(), 3);  
99 - assertEquals(orderItem02.getPrice(), 50);  
100 - assertEquals(orderItem02.getDiscountPrice(), 60);  
101 - assertEquals(orderItem02.getDeliveryPrice(), 0);  
102 - assertEquals(orderItem02.getCouponPrice(), 0);  
103 - assertEquals(orderItem02.getPointPrice(), 0);  
104 - assertEquals(orderItem02.getPayPrice(), 90);  
105 - // 断言:Promotion 部分  
106 - assertEquals(result.getPromotions().size(), 1);  
107 - TradePriceCalculateRespBO.Promotion promotion01 = result.getPromotions().get(0);  
108 - assertEquals(promotion01.getId(), 1000L);  
109 - assertEquals(promotion01.getName(), "活动 1000 号");  
110 - assertEquals(promotion01.getType(), PromotionTypeEnum.DISCOUNT_ACTIVITY.getType());  
111 - assertEquals(promotion01.getTotalPrice(), 200);  
112 - assertEquals(promotion01.getDiscountPrice(), 80);  
113 - assertTrue(promotion01.getMatch());  
114 - assertEquals(promotion01.getDescription(), "限时折扣:省 0.80 元");  
115 - TradePriceCalculateRespBO.PromotionItem promotionItem01 = promotion01.getItems().get(0);  
116 - assertEquals(promotion01.getItems().size(), 1);  
117 - assertEquals(promotionItem01.getSkuId(), 10L);  
118 - assertEquals(promotionItem01.getTotalPrice(), 200);  
119 - assertEquals(promotionItem01.getDiscountPrice(), 80);  
120 - }  
121 -  
122 -}  
yudao-module-mall/yudao-module-trade-biz/src/test/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradePointGiveCalculatorTest.java deleted
1 -package cn.iocoder.yudao.module.trade.service.price.calculator;  
2 -  
3 -import cn.iocoder.yudao.framework.test.core.ut.BaseMockitoUnitTest;  
4 -import cn.iocoder.yudao.module.member.api.config.MemberConfigApi;  
5 -import cn.iocoder.yudao.module.member.api.config.dto.MemberConfigRespDTO;  
6 -import cn.iocoder.yudao.module.trade.enums.order.TradeOrderTypeEnum;  
7 -import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateReqBO;  
8 -import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateRespBO;  
9 -import org.junit.jupiter.api.Test;  
10 -import org.mockito.InjectMocks;  
11 -import org.mockito.Mock;  
12 -  
13 -import java.util.ArrayList;  
14 -  
15 -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo;  
16 -import static java.util.Arrays.asList;  
17 -import static org.junit.jupiter.api.Assertions.assertEquals;  
18 -import static org.mockito.Mockito.when;  
19 -  
20 -// TODO 芋艿:晚点 review  
21 -/**  
22 - * {@link TradePointGiveCalculator} 的单元测试类  
23 - *  
24 - * @author owen  
25 - */  
26 -public class TradePointGiveCalculatorTest extends BaseMockitoUnitTest {  
27 -  
28 - @InjectMocks  
29 - private TradePointGiveCalculator tradePointGiveCalculator;  
30 -  
31 - @Mock  
32 - private MemberConfigApi memberConfigApi;  
33 -  
34 - @Test  
35 - public void testCalculate() {  
36 -  
37 - // 准备参数  
38 - TradePriceCalculateReqBO param = new TradePriceCalculateReqBO()  
39 - .setUserId(233L)  
40 - .setItems(asList(  
41 - new TradePriceCalculateReqBO.Item().setSkuId(10L).setCount(2).setSelected(true), // 全局积分  
42 - new TradePriceCalculateReqBO.Item().setSkuId(20L).setCount(3).setSelected(true), // 全局积分 + SKU 积分  
43 - new TradePriceCalculateReqBO.Item().setSkuId(30L).setCount(4).setSelected(false), // 全局积分,但是未选中  
44 - new TradePriceCalculateReqBO.Item().setSkuId(40L).setCount(5).setSelected(false) // 全局积分 + SKU 积分,但是未选中  
45 - ));  
46 - TradePriceCalculateRespBO result = new TradePriceCalculateRespBO()  
47 - .setType(TradeOrderTypeEnum.NORMAL.getType())  
48 - .setPrice(new TradePriceCalculateRespBO.Price())  
49 - .setPromotions(new ArrayList<>())  
50 - .setItems(asList(  
51 - new TradePriceCalculateRespBO.OrderItem().setSkuId(10L).setCount(2).setSelected(true)  
52 - .setPrice(100).setSpuId(1L).setGivePoint(0),  
53 - new TradePriceCalculateRespBO.OrderItem().setSkuId(20L).setCount(3).setSelected(true)  
54 - .setPrice(50).setSpuId(2L).setGivePoint(100),  
55 - new TradePriceCalculateRespBO.OrderItem().setSkuId(30L).setCount(4).setSelected(false)  
56 - .setPrice(30).setSpuId(3L).setGivePoint(0),  
57 - new TradePriceCalculateRespBO.OrderItem().setSkuId(40L).setCount(5).setSelected(false)  
58 - .setPrice(60).setSpuId(1L).setGivePoint(100)  
59 - ));  
60 - // 保证价格被初始化上  
61 - TradePriceCalculatorHelper.recountPayPrice(result.getItems());  
62 - TradePriceCalculatorHelper.recountAllPrice(result);  
63 -  
64 - // mock 方法(积分配置 信息)  
65 - MemberConfigRespDTO memberConfig = randomPojo(MemberConfigRespDTO.class,  
66 - o -> o.setPointTradeDeductEnable(true) // 启用积分折扣  
67 - .setPointTradeGivePoint(100)); // 1 元赠送多少分  
68 - when(memberConfigApi.getConfig()).thenReturn(memberConfig);  
69 -  
70 - // 调用  
71 - tradePointGiveCalculator.calculate(param, result);  
72 - // 断言:Price 部分  
73 - assertEquals(result.getGivePoint(), 2 * 100 + 3 * 50 + 100);  
74 - // 断言:SKU 1  
75 - TradePriceCalculateRespBO.OrderItem orderItem01 = result.getItems().get(0);  
76 - assertEquals(orderItem01.getSkuId(), 10L);  
77 - assertEquals(orderItem01.getCount(), 2);  
78 - assertEquals(orderItem01.getPrice(), 100);  
79 - assertEquals(orderItem01.getGivePoint(), 2 * 100); // 全局积分  
80 - // 断言:SKU 2  
81 - TradePriceCalculateRespBO.OrderItem orderItem02 = result.getItems().get(1);  
82 - assertEquals(orderItem02.getSkuId(), 20L);  
83 - assertEquals(orderItem02.getCount(), 3);  
84 - assertEquals(orderItem02.getPrice(), 50);  
85 - assertEquals(orderItem02.getGivePoint(), 3 * 50 + 100); // 全局积分 + SKU 积分  
86 - // 断言:SKU 3  
87 - TradePriceCalculateRespBO.OrderItem orderItem03 = result.getItems().get(2);  
88 - assertEquals(orderItem03.getSkuId(), 30L);  
89 - assertEquals(orderItem03.getCount(), 4);  
90 - assertEquals(orderItem03.getPrice(), 30);  
91 - assertEquals(orderItem03.getGivePoint(), 0); // 全局积分,但是未选中  
92 - // 断言:SKU 4  
93 - TradePriceCalculateRespBO.OrderItem orderItem04 = result.getItems().get(3);  
94 - assertEquals(orderItem04.getSkuId(), 40L);  
95 - assertEquals(orderItem04.getCount(), 5);  
96 - assertEquals(orderItem04.getPrice(), 60);  
97 - assertEquals(orderItem04.getGivePoint(), 100); // 全局积分 + SKU 积分,但是未选中  
98 - }  
99 -}  
yudao-module-mall/yudao-module-trade-biz/src/test/resources/application-unit-test.yaml deleted
1 -spring:  
2 - main:  
3 - lazy-initialization: true # 开启懒加载,加快速度  
4 - banner-mode: off # 单元测试,禁用 Banner  
5 -  
6 ---- #################### 数据库相关配置 ####################  
7 -  
8 -spring:  
9 - # 数据源配置项  
10 - datasource:  
11 - name: ruoyi-vue-pro  
12 - url: jdbc:h2:mem:testdb;MODE=MYSQL;DATABASE_TO_UPPER=false;NON_KEYWORDS=value; # MODE 使用 MySQL 模式;DATABASE_TO_UPPER 配置表和字段使用小写  
13 - driver-class-name: org.h2.Driver  
14 - username: sa  
15 - password:  
16 - druid:  
17 - async-init: true # 单元测试,异步初始化 Druid 连接池,提升启动速度  
18 - initial-size: 1 # 单元测试,配置为 1,提升启动速度  
19 - sql:  
20 - init:  
21 - schema-locations: classpath:/sql/create_tables.sql  
22 -  
23 - # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优  
24 - data:  
25 - redis:  
26 - host: 127.0.0.1 # 地址  
27 - port: 16379 # 端口(单元测试,使用 16379 端口)  
28 - database: 0 # 数据库索引  
29 -  
30 -mybatis:  
31 - lazy-initialization: true # 单元测试,设置 MyBatis Mapper 延迟加载,加速每个单元测试  
32 -  
33 ---- #################### 定时任务相关配置 ####################  
34 -  
35 ---- #################### 配置中心相关配置 ####################  
36 -  
37 ---- #################### 服务保障相关配置 ####################  
38 -  
39 -# Lock4j 配置项(单元测试,禁用 Lock4j)  
40 -  
41 ---- #################### 监控相关配置 ####################  
42 -  
43 ---- #################### 芋道相关配置 ####################  
44 -  
45 -# 芋道配置项,设置当前项目所有自定义的配置  
46 -yudao:  
47 - info:  
48 - base-package: cn.iocoder.yudao.module  
49 - trade:  
50 - order:  
51 - app-id: 1  
52 - merchant-order-id: 1  
53 - express:  
54 - kd-niao:  
55 - api-key: xxxx  
56 - business-id: xxxxx  
57 - kd100:  
58 - customer: xxxxx  
59 - key: xxxxx  
60 - client: not_provide  
61 \ No newline at end of file 0 \ No newline at end of file
yudao-module-mall/yudao-module-trade-biz/pom.xml renamed to yudao-module-mall/yudao-module-trade/pom.xml
@@ -8,7 +8,7 @@ @@ -8,7 +8,7 @@
8 <version>${revision}</version> 8 <version>${revision}</version>
9 </parent> 9 </parent>
10 <modelVersion>4.0.0</modelVersion> 10 <modelVersion>4.0.0</modelVersion>
11 - <artifactId>yudao-module-trade-biz</artifactId> 11 + <artifactId>yudao-module-trade</artifactId>
12 <packaging>jar</packaging> 12 <packaging>jar</packaging>
13 13
14 <name>${project.artifactId}</name> 14 <name>${project.artifactId}</name>
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/api/order/TradeOrderApiImpl.java renamed to yudao-module-mall/yudao-module-trade/src/main/java/cn/iocoder/yudao/module/trade/api/order/TradeOrderApiImpl.java
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/api/package-info.java renamed to yudao-module-mall/yudao-module-trade/src/main/java/cn/iocoder/yudao/module/trade/api/package-info.java
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/aftersale/AfterSaleController.java renamed to yudao-module-mall/yudao-module-trade/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/aftersale/AfterSaleController.java
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/aftersale/TradeAfterSaleController.http renamed to yudao-module-mall/yudao-module-trade/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/aftersale/TradeAfterSaleController.http
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/aftersale/vo/AfterSaleBaseVO.java renamed to yudao-module-mall/yudao-module-trade/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/aftersale/vo/AfterSaleBaseVO.java
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/aftersale/vo/AfterSaleDetailRespVO.java renamed to yudao-module-mall/yudao-module-trade/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/aftersale/vo/AfterSaleDetailRespVO.java
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/aftersale/vo/AfterSaleDisagreeReqVO.java renamed to yudao-module-mall/yudao-module-trade/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/aftersale/vo/AfterSaleDisagreeReqVO.java
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/aftersale/vo/AfterSalePageReqVO.java renamed to yudao-module-mall/yudao-module-trade/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/aftersale/vo/AfterSalePageReqVO.java
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/aftersale/vo/AfterSaleRefuseReqVO.java renamed to yudao-module-mall/yudao-module-trade/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/aftersale/vo/AfterSaleRefuseReqVO.java
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/aftersale/vo/AfterSaleRespPageItemVO.java renamed to yudao-module-mall/yudao-module-trade/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/aftersale/vo/AfterSaleRespPageItemVO.java
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/aftersale/vo/log/AfterSaleLogRespVO.java renamed to yudao-module-mall/yudao-module-trade/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/aftersale/vo/log/AfterSaleLogRespVO.java
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/base/member/package-info.java renamed to yudao-module-mall/yudao-module-trade/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/base/member/package-info.java
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/base/member/user/MemberUserRespVO.java renamed to yudao-module-mall/yudao-module-trade/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/base/member/user/MemberUserRespVO.java
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/base/package-info.java renamed to yudao-module-mall/yudao-module-trade/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/base/package-info.java
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/base/product/property/ProductPropertyValueDetailRespVO.java renamed to yudao-module-mall/yudao-module-trade/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/base/product/property/ProductPropertyValueDetailRespVO.java
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/base/system/package-info.java renamed to yudao-module-mall/yudao-module-trade/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/base/system/package-info.java
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/base/system/user/UserSimpleBaseVO.java renamed to yudao-module-mall/yudao-module-trade/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/base/system/user/UserSimpleBaseVO.java
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/brokerage/BrokerageRecordController.java renamed to yudao-module-mall/yudao-module-trade/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/brokerage/BrokerageRecordController.java
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/brokerage/BrokerageUserController.java renamed to yudao-module-mall/yudao-module-trade/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/brokerage/BrokerageUserController.java
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/brokerage/BrokerageWithdrawController.java renamed to yudao-module-mall/yudao-module-trade/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/brokerage/BrokerageWithdrawController.java
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/brokerage/vo/record/BrokerageRecordBaseVO.java renamed to yudao-module-mall/yudao-module-trade/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/brokerage/vo/record/BrokerageRecordBaseVO.java
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/brokerage/vo/record/BrokerageRecordPageReqVO.java renamed to yudao-module-mall/yudao-module-trade/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/brokerage/vo/record/BrokerageRecordPageReqVO.java
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/brokerage/vo/record/BrokerageRecordRespVO.java renamed to yudao-module-mall/yudao-module-trade/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/brokerage/vo/record/BrokerageRecordRespVO.java
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/brokerage/vo/user/BrokerageUserBaseVO.java renamed to yudao-module-mall/yudao-module-trade/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/brokerage/vo/user/BrokerageUserBaseVO.java
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/brokerage/vo/user/BrokerageUserClearBrokerageUserReqVO.java renamed to yudao-module-mall/yudao-module-trade/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/brokerage/vo/user/BrokerageUserClearBrokerageUserReqVO.java
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/brokerage/vo/user/BrokerageUserCreateReqVO.java renamed to yudao-module-mall/yudao-module-trade/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/brokerage/vo/user/BrokerageUserCreateReqVO.java
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/brokerage/vo/user/BrokerageUserPageReqVO.java renamed to yudao-module-mall/yudao-module-trade/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/brokerage/vo/user/BrokerageUserPageReqVO.java
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/brokerage/vo/user/BrokerageUserRespVO.java renamed to yudao-module-mall/yudao-module-trade/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/brokerage/vo/user/BrokerageUserRespVO.java
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/brokerage/vo/user/BrokerageUserUpdateBrokerageEnabledReqVO.java renamed to yudao-module-mall/yudao-module-trade/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/brokerage/vo/user/BrokerageUserUpdateBrokerageEnabledReqVO.java
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/brokerage/vo/user/BrokerageUserUpdateBrokerageUserReqVO.java renamed to yudao-module-mall/yudao-module-trade/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/brokerage/vo/user/BrokerageUserUpdateBrokerageUserReqVO.java
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/brokerage/vo/withdraw/BrokerageWithdrawPageReqVO.java renamed to yudao-module-mall/yudao-module-trade/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/brokerage/vo/withdraw/BrokerageWithdrawPageReqVO.java
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/brokerage/vo/withdraw/BrokerageWithdrawRejectReqVO.java renamed to yudao-module-mall/yudao-module-trade/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/brokerage/vo/withdraw/BrokerageWithdrawRejectReqVO.java
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/brokerage/vo/withdraw/BrokerageWithdrawRespVO.java renamed to yudao-module-mall/yudao-module-trade/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/brokerage/vo/withdraw/BrokerageWithdrawRespVO.java
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/config/TradeConfigController.java renamed to yudao-module-mall/yudao-module-trade/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/config/TradeConfigController.java
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/config/vo/TradeConfigBaseVO.java renamed to yudao-module-mall/yudao-module-trade/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/config/vo/TradeConfigBaseVO.java
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/config/vo/TradeConfigRespVO.java renamed to yudao-module-mall/yudao-module-trade/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/config/vo/TradeConfigRespVO.java
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/config/vo/TradeConfigSaveReqVO.java renamed to yudao-module-mall/yudao-module-trade/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/config/vo/TradeConfigSaveReqVO.java
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/delivery/DeliveryExpressController.java renamed to yudao-module-mall/yudao-module-trade/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/delivery/DeliveryExpressController.java
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/delivery/DeliveryExpressTemplateController.java renamed to yudao-module-mall/yudao-module-trade/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/delivery/DeliveryExpressTemplateController.java
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/delivery/DeliveryPickUpStoreController.java renamed to yudao-module-mall/yudao-module-trade/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/delivery/DeliveryPickUpStoreController.java
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/delivery/vo/express/DeliveryExpressBaseVO.java renamed to yudao-module-mall/yudao-module-trade/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/delivery/vo/express/DeliveryExpressBaseVO.java
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/delivery/vo/express/DeliveryExpressCreateReqVO.java renamed to yudao-module-mall/yudao-module-trade/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/delivery/vo/express/DeliveryExpressCreateReqVO.java
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/delivery/vo/express/DeliveryExpressExcelVO.java renamed to yudao-module-mall/yudao-module-trade/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/delivery/vo/express/DeliveryExpressExcelVO.java
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/delivery/vo/express/DeliveryExpressExportReqVO.java renamed to yudao-module-mall/yudao-module-trade/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/delivery/vo/express/DeliveryExpressExportReqVO.java
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/delivery/vo/express/DeliveryExpressPageReqVO.java renamed to yudao-module-mall/yudao-module-trade/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/delivery/vo/express/DeliveryExpressPageReqVO.java
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/delivery/vo/express/DeliveryExpressRespVO.java renamed to yudao-module-mall/yudao-module-trade/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/delivery/vo/express/DeliveryExpressRespVO.java