Commit dfffc935849e4c9cd99bb43039f899cbfbfc19bc
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
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/framework/package-info.java deleted
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/framework/web/package-info.java deleted
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