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 20 <modules>
21 21 <module>yudao-module-product</module>
22 22 <module>yudao-module-promotion</module>
23   - <module>yudao-module-trade-biz</module>
  23 + <module>yudao-module-trade</module>
24 24 <module>yudao-module-statistics</module>
25 25 <!--
26 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 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 8 <version>${revision}</version>
9 9 </parent>
10 10 <modelVersion>4.0.0</modelVersion>
11   - <artifactId>yudao-module-trade-biz</artifactId>
  11 + <artifactId>yudao-module-trade</artifactId>
12 12 <packaging>jar</packaging>
13 13  
14 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