Commit 6f4c04d94491a1000d48e07fc7893def9d16ebad
1 parent
0c1f5c95
trade:完善退款详情
Showing
46 changed files
with
577 additions
and
619 deletions
yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/spring/SpringExpressionUtils.java
| ... | ... | @@ -3,7 +3,6 @@ package cn.iocoder.yudao.framework.common.util.spring; |
| 3 | 3 | import cn.hutool.core.collection.CollUtil; |
| 4 | 4 | import cn.hutool.core.map.MapUtil; |
| 5 | 5 | import cn.hutool.core.util.ArrayUtil; |
| 6 | -import org.aspectj.lang.JoinPoint; | |
| 7 | 6 | import org.aspectj.lang.ProceedingJoinPoint; |
| 8 | 7 | import org.aspectj.lang.reflect.MethodSignature; |
| 9 | 8 | import org.springframework.core.DefaultParameterNameDiscoverer; |
| ... | ... | @@ -87,47 +86,4 @@ public class SpringExpressionUtils { |
| 87 | 86 | return result; |
| 88 | 87 | } |
| 89 | 88 | |
| 90 | - /** | |
| 91 | - * JoinPoint 切面 批量解析 EL 表达式,转换 jspl参数 | |
| 92 | - * | |
| 93 | - * @param joinPoint 切面点 | |
| 94 | - * @param info 返回值 | |
| 95 | - * @param expressionStrings EL 表达式数组 | |
| 96 | - * @return Map<String, Object> 结果 | |
| 97 | - * @author 陈賝 | |
| 98 | - * @since 2023/6/18 11:20 | |
| 99 | - */ | |
| 100 | - // TODO @chenchen: 这个方法,和 parseExpressions 比较接近,是不是可以合并下; | |
| 101 | - public static Map<String, Object> parseExpression(JoinPoint joinPoint, Object info, List<String> expressionStrings) { | |
| 102 | - // 如果为空,则不进行解析 | |
| 103 | - if (CollUtil.isEmpty(expressionStrings)) { | |
| 104 | - return MapUtil.newHashMap(); | |
| 105 | - } | |
| 106 | - | |
| 107 | - // 第一步,构建解析的上下文 EvaluationContext | |
| 108 | - // 通过 joinPoint 获取被注解方法 | |
| 109 | - MethodSignature signature = (MethodSignature) joinPoint.getSignature(); | |
| 110 | - Method method = signature.getMethod(); | |
| 111 | - // 使用 spring 的 ParameterNameDiscoverer 获取方法形参名数组 | |
| 112 | - String[] parameterNames = PARAMETER_NAME_DISCOVERER.getParameterNames(method); | |
| 113 | - // Spring 的表达式上下文对象 | |
| 114 | - EvaluationContext context = new StandardEvaluationContext(); | |
| 115 | - if (ArrayUtil.isNotEmpty(parameterNames)) { | |
| 116 | - //获取方法参数值 | |
| 117 | - Object[] args = joinPoint.getArgs(); | |
| 118 | - for (int i = 0; i < args.length; i++) { | |
| 119 | - // 替换 SP EL 里的变量值为实际值, 比如 #user --> user对象 | |
| 120 | - context.setVariable(parameterNames[i], args[i]); | |
| 121 | - } | |
| 122 | - context.setVariable("info", info); | |
| 123 | - } | |
| 124 | - // 第二步,逐个参数解析 | |
| 125 | - Map<String, Object> result = MapUtil.newHashMap(expressionStrings.size(), true); | |
| 126 | - expressionStrings.forEach(key -> { | |
| 127 | - Object value = EXPRESSION_PARSER.parseExpression(key).getValue(context); | |
| 128 | - result.put(key, value); | |
| 129 | - }); | |
| 130 | - return result; | |
| 131 | - } | |
| 132 | - | |
| 133 | 89 | } | ... | ... |
yudao-module-mall/yudao-module-trade-api/src/main/java/cn/iocoder/yudao/module/trade/enums/aftersale/TradeAfterSaleStatusEnum.java renamed to yudao-module-mall/yudao-module-trade-api/src/main/java/cn/iocoder/yudao/module/trade/enums/aftersale/AfterSaleStatusEnum.java
| ... | ... | @@ -18,7 +18,7 @@ import static cn.hutool.core.util.ArrayUtil.firstMatch; |
| 18 | 18 | */ |
| 19 | 19 | @AllArgsConstructor |
| 20 | 20 | @Getter |
| 21 | -public enum TradeAfterSaleStatusEnum implements IntArrayValuable { | |
| 21 | +public enum AfterSaleStatusEnum implements IntArrayValuable { | |
| 22 | 22 | |
| 23 | 23 | /** |
| 24 | 24 | * 【申请售后】 |
| ... | ... | @@ -54,7 +54,7 @@ public enum TradeAfterSaleStatusEnum implements IntArrayValuable { |
| 54 | 54 | SELLER_REFUSE(63,"卖家拒绝收货", "商家拒绝收货"), // 有赞的状态提示:商家拒绝收货,不同意退款 |
| 55 | 55 | ; |
| 56 | 56 | |
| 57 | - public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(TradeAfterSaleStatusEnum::getStatus).toArray(); | |
| 57 | + public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(AfterSaleStatusEnum::getStatus).toArray(); | |
| 58 | 58 | |
| 59 | 59 | /** |
| 60 | 60 | * 进行中的售后状态 |
| ... | ... | @@ -88,7 +88,7 @@ public enum TradeAfterSaleStatusEnum implements IntArrayValuable { |
| 88 | 88 | return ARRAYS; |
| 89 | 89 | } |
| 90 | 90 | |
| 91 | - public static TradeAfterSaleStatusEnum valueOf(Integer status) { | |
| 91 | + public static AfterSaleStatusEnum valueOf(Integer status) { | |
| 92 | 92 | return firstMatch(value -> value.getStatus().equals(status), values()); |
| 93 | 93 | } |
| 94 | 94 | ... | ... |
yudao-module-mall/yudao-module-trade-api/src/main/java/cn/iocoder/yudao/module/trade/enums/aftersale/TradeAfterSaleTypeEnum.java renamed to yudao-module-mall/yudao-module-trade-api/src/main/java/cn/iocoder/yudao/module/trade/enums/aftersale/AfterSaleTypeEnum.java
| ... | ... | @@ -13,12 +13,12 @@ import java.util.Arrays; |
| 13 | 13 | */ |
| 14 | 14 | @RequiredArgsConstructor |
| 15 | 15 | @Getter |
| 16 | -public enum TradeAfterSaleTypeEnum implements IntArrayValuable { | |
| 16 | +public enum AfterSaleTypeEnum implements IntArrayValuable { | |
| 17 | 17 | |
| 18 | 18 | IN_SALE(10, "售中退款"), // 交易完成前买家申请退款 |
| 19 | 19 | AFTER_SALE(20, "售后退款"); // 交易完成后买家申请退款 |
| 20 | 20 | |
| 21 | - public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(TradeAfterSaleTypeEnum::getType).toArray(); | |
| 21 | + public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(AfterSaleTypeEnum::getType).toArray(); | |
| 22 | 22 | |
| 23 | 23 | /** |
| 24 | 24 | * 类型 | ... | ... |
yudao-module-mall/yudao-module-trade-api/src/main/java/cn/iocoder/yudao/module/trade/enums/aftersale/TradeAfterSaleWayEnum.java renamed to yudao-module-mall/yudao-module-trade-api/src/main/java/cn/iocoder/yudao/module/trade/enums/aftersale/AfterSaleWayEnum.java
| ... | ... | @@ -13,12 +13,12 @@ import java.util.Arrays; |
| 13 | 13 | */ |
| 14 | 14 | @RequiredArgsConstructor |
| 15 | 15 | @Getter |
| 16 | -public enum TradeAfterSaleWayEnum implements IntArrayValuable { | |
| 16 | +public enum AfterSaleWayEnum implements IntArrayValuable { | |
| 17 | 17 | |
| 18 | 18 | REFUND(10, "仅退款"), |
| 19 | 19 | RETURN_AND_REFUND(20, "退货退款"); |
| 20 | 20 | |
| 21 | - public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(TradeAfterSaleWayEnum::getWay).toArray(); | |
| 21 | + public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(AfterSaleWayEnum::getWay).toArray(); | |
| 22 | 22 | |
| 23 | 23 | /** |
| 24 | 24 | * 方式 | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/aftersale/TradeAfterSaleController.java renamed to yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/aftersale/AfterSaleController.java
| ... | ... | @@ -8,13 +8,13 @@ import cn.iocoder.yudao.module.member.api.user.MemberUserApi; |
| 8 | 8 | import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO; |
| 9 | 9 | import cn.iocoder.yudao.module.pay.api.notify.dto.PayRefundNotifyReqDTO; |
| 10 | 10 | import cn.iocoder.yudao.module.trade.controller.admin.aftersale.vo.*; |
| 11 | -import cn.iocoder.yudao.module.trade.controller.admin.aftersale.vo.log.TradeAfterSaleLogRespVO; | |
| 12 | -import cn.iocoder.yudao.module.trade.convert.aftersale.TradeAfterSaleConvert; | |
| 13 | -import cn.iocoder.yudao.module.trade.dal.dataobject.aftersale.TradeAfterSaleDO; | |
| 11 | +import cn.iocoder.yudao.module.trade.convert.aftersale.AfterSaleConvert; | |
| 12 | +import cn.iocoder.yudao.module.trade.dal.dataobject.aftersale.AfterSaleDO; | |
| 13 | +import cn.iocoder.yudao.module.trade.dal.dataobject.aftersale.AfterSaleLogDO; | |
| 14 | 14 | import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO; |
| 15 | 15 | import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderItemDO; |
| 16 | -import cn.iocoder.yudao.module.trade.framework.aftersalelog.core.service.AfterSaleLogService; | |
| 17 | -import cn.iocoder.yudao.module.trade.service.aftersale.TradeAfterSaleService; | |
| 16 | +import cn.iocoder.yudao.module.trade.service.aftersale.AfterSaleLogService; | |
| 17 | +import cn.iocoder.yudao.module.trade.service.aftersale.AfterSaleService; | |
| 18 | 18 | import cn.iocoder.yudao.module.trade.service.order.TradeOrderQueryService; |
| 19 | 19 | import io.swagger.v3.oas.annotations.Operation; |
| 20 | 20 | import io.swagger.v3.oas.annotations.Parameter; |
| ... | ... | @@ -27,8 +27,6 @@ import org.springframework.web.bind.annotation.*; |
| 27 | 27 | import javax.annotation.Resource; |
| 28 | 28 | import javax.annotation.security.PermitAll; |
| 29 | 29 | import javax.validation.Valid; |
| 30 | -import java.time.LocalDateTime; | |
| 31 | -import java.util.ArrayList; | |
| 32 | 30 | import java.util.List; |
| 33 | 31 | import java.util.Map; |
| 34 | 32 | |
| ... | ... | @@ -42,10 +40,10 @@ import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUti |
| 42 | 40 | @RequestMapping("/trade/after-sale") |
| 43 | 41 | @Validated |
| 44 | 42 | @Slf4j |
| 45 | -public class TradeAfterSaleController { | |
| 43 | +public class AfterSaleController { | |
| 46 | 44 | |
| 47 | 45 | @Resource |
| 48 | - private TradeAfterSaleService afterSaleService; | |
| 46 | + private AfterSaleService afterSaleService; | |
| 49 | 47 | @Resource |
| 50 | 48 | private TradeOrderQueryService tradeOrderQueryService; |
| 51 | 49 | @Resource |
| ... | ... | @@ -56,26 +54,26 @@ public class TradeAfterSaleController { |
| 56 | 54 | @GetMapping("/page") |
| 57 | 55 | @Operation(summary = "获得售后订单分页") |
| 58 | 56 | @PreAuthorize("@ss.hasPermission('trade:after-sale:query')") |
| 59 | - public CommonResult<PageResult<TradeAfterSaleRespPageItemVO>> getAfterSalePage(@Valid TradeAfterSalePageReqVO pageVO) { | |
| 57 | + public CommonResult<PageResult<AfterSaleRespPageItemVO>> getAfterSalePage(@Valid AfterSalePageReqVO pageVO) { | |
| 60 | 58 | // 查询售后 |
| 61 | - PageResult<TradeAfterSaleDO> pageResult = afterSaleService.getAfterSalePage(pageVO); | |
| 59 | + PageResult<AfterSaleDO> pageResult = afterSaleService.getAfterSalePage(pageVO); | |
| 62 | 60 | if (CollUtil.isEmpty(pageResult.getList())) { |
| 63 | 61 | return success(PageResult.empty()); |
| 64 | 62 | } |
| 65 | 63 | |
| 66 | 64 | // 查询会员 |
| 67 | 65 | Map<Long, MemberUserRespDTO> memberUsers = memberUserApi.getUserMap( |
| 68 | - convertSet(pageResult.getList(), TradeAfterSaleDO::getUserId)); | |
| 69 | - return success(TradeAfterSaleConvert.INSTANCE.convertPage(pageResult, memberUsers)); | |
| 66 | + convertSet(pageResult.getList(), AfterSaleDO::getUserId)); | |
| 67 | + return success(AfterSaleConvert.INSTANCE.convertPage(pageResult, memberUsers)); | |
| 70 | 68 | } |
| 71 | 69 | |
| 72 | 70 | @GetMapping("/get-detail") |
| 73 | 71 | @Operation(summary = "获得售后订单详情") |
| 74 | 72 | @Parameter(name = "id", description = "售后编号", required = true, example = "1") |
| 75 | 73 | @PreAuthorize("@ss.hasPermission('trade:after-sale:query')") |
| 76 | - public CommonResult<TradeAfterSaleDetailRespVO> getOrderDetail(@RequestParam("id") Long id) { | |
| 74 | + public CommonResult<AfterSaleDetailRespVO> getOrderDetail(@RequestParam("id") Long id) { | |
| 77 | 75 | // 查询订单 |
| 78 | - TradeAfterSaleDO afterSale = afterSaleService.getAfterSale(id); | |
| 76 | + AfterSaleDO afterSale = afterSaleService.getAfterSale(id); | |
| 79 | 77 | if (afterSale == null) { |
| 80 | 78 | return success(null); |
| 81 | 79 | } |
| ... | ... | @@ -83,34 +81,11 @@ public class TradeAfterSaleController { |
| 83 | 81 | // 查询订单 |
| 84 | 82 | TradeOrderDO order = tradeOrderQueryService.getOrder(afterSale.getOrderId()); |
| 85 | 83 | // 查询订单项 |
| 86 | - List<TradeOrderItemDO> orderItems = tradeOrderQueryService.getOrderItemListByOrderId(id); | |
| 84 | + TradeOrderItemDO orderItem = tradeOrderQueryService.getOrderItem(afterSale.getOrderItemId()); | |
| 87 | 85 | // 拼接数据 |
| 88 | 86 | MemberUserRespDTO user = memberUserApi.getUser(afterSale.getUserId()); |
| 89 | - // 获取售后日志 | |
| 90 | - List<TradeAfterSaleLogRespVO> logs = afterSaleLogService.getLog(afterSale.getId()); | |
| 91 | - // TODO 方便测试看效果,review 后移除 | |
| 92 | - if (logs == null) { | |
| 93 | - logs = new ArrayList<>(); | |
| 94 | - } | |
| 95 | - for (int i = 1; i <= 6; i++) { | |
| 96 | - TradeAfterSaleLogRespVO respVO = new TradeAfterSaleLogRespVO(); | |
| 97 | - respVO.setId((long) i); | |
| 98 | - respVO.setUserId((long) i); | |
| 99 | - respVO.setUserType(i % 2 == 0 ? 2 : 1); | |
| 100 | - // 模拟系统操作 | |
| 101 | - if (i == 2) { | |
| 102 | - respVO.setUserType(3); | |
| 103 | - } | |
| 104 | - respVO.setAfterSaleId(id); | |
| 105 | - respVO.setOrderId((long) i); | |
| 106 | - respVO.setOrderItemId((long) i); | |
| 107 | - respVO.setBeforeStatus((i - 1) * 10); | |
| 108 | - respVO.setAfterStatus(i * 10); | |
| 109 | - respVO.setContent("66+6"); | |
| 110 | - respVO.setCreateTime(LocalDateTime.now()); | |
| 111 | - logs.add(respVO); | |
| 112 | - } | |
| 113 | - return success(TradeAfterSaleConvert.INSTANCE.convert(afterSale, order, orderItems, user, logs)); | |
| 87 | + List<AfterSaleLogDO> logs = afterSaleLogService.getAfterSaleLogList(afterSale.getId()); | |
| 88 | + return success(AfterSaleConvert.INSTANCE.convert(afterSale, order, orderItem, user, logs)); | |
| 114 | 89 | } |
| 115 | 90 | |
| 116 | 91 | @PutMapping("/agree") |
| ... | ... | @@ -125,7 +100,7 @@ public class TradeAfterSaleController { |
| 125 | 100 | @PutMapping("/disagree") |
| 126 | 101 | @Operation(summary = "拒绝售后") |
| 127 | 102 | @PreAuthorize("@ss.hasPermission('trade:after-sale:disagree')") |
| 128 | - public CommonResult<Boolean> disagreeAfterSale(@RequestBody TradeAfterSaleDisagreeReqVO confirmReqVO) { | |
| 103 | + public CommonResult<Boolean> disagreeAfterSale(@RequestBody AfterSaleDisagreeReqVO confirmReqVO) { | |
| 129 | 104 | afterSaleService.disagreeAfterSale(getLoginUserId(), confirmReqVO); |
| 130 | 105 | return success(true); |
| 131 | 106 | } |
| ... | ... | @@ -143,7 +118,7 @@ public class TradeAfterSaleController { |
| 143 | 118 | @Operation(summary = "拒绝收货") |
| 144 | 119 | @Parameter(name = "id", description = "售后编号", required = true, example = "1") |
| 145 | 120 | @PreAuthorize("@ss.hasPermission('trade:after-sale:receive')") |
| 146 | - public CommonResult<Boolean> refuseAfterSale(TradeAfterSaleRefuseReqVO refuseReqVO) { | |
| 121 | + public CommonResult<Boolean> refuseAfterSale(AfterSaleRefuseReqVO refuseReqVO) { | |
| 147 | 122 | afterSaleService.refuseAfterSale(getLoginUserId(), refuseReqVO); |
| 148 | 123 | return success(true); |
| 149 | 124 | } | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/aftersale/vo/TradeAfterSaleBaseVO.java renamed to yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/aftersale/vo/AfterSaleBaseVO.java
| ... | ... | @@ -15,7 +15,7 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_ |
| 15 | 15 | * 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成 |
| 16 | 16 | */ |
| 17 | 17 | @Data |
| 18 | -public class TradeAfterSaleBaseVO { | |
| 18 | +public class AfterSaleBaseVO { | |
| 19 | 19 | |
| 20 | 20 | @Schema(description = "售后流水号", requiredMode = Schema.RequiredMode.REQUIRED, example = "202211190847450020500077") |
| 21 | 21 | @NotNull(message = "售后流水号不能为空") |
| ... | ... | @@ -53,7 +53,7 @@ public class TradeAfterSaleBaseVO { |
| 53 | 53 | |
| 54 | 54 | @Schema(description = "订单流水号", requiredMode = Schema.RequiredMode.REQUIRED, example = "2022111917190001") |
| 55 | 55 | @NotNull(message = "订单流水号不能为空") |
| 56 | - private Long orderNo; | |
| 56 | + private String orderNo; | |
| 57 | 57 | |
| 58 | 58 | @Schema(description = "订单项编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "572") |
| 59 | 59 | @NotNull(message = "订单项编号不能为空") | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/aftersale/vo/TradeAfterSaleDetailRespVO.java renamed to yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/aftersale/vo/AfterSaleDetailRespVO.java
| 1 | 1 | package cn.iocoder.yudao.module.trade.controller.admin.aftersale.vo; |
| 2 | 2 | |
| 3 | -import cn.iocoder.yudao.module.trade.controller.admin.aftersale.vo.log.TradeAfterSaleLogRespVO; | |
| 3 | +import cn.iocoder.yudao.module.trade.controller.admin.aftersale.vo.log.AfterSaleLogRespVO; | |
| 4 | 4 | import cn.iocoder.yudao.module.trade.controller.admin.base.member.user.MemberUserRespVO; |
| 5 | 5 | import cn.iocoder.yudao.module.trade.controller.admin.base.product.property.ProductPropertyValueDetailRespVO; |
| 6 | 6 | import cn.iocoder.yudao.module.trade.controller.admin.order.vo.TradeOrderBaseVO; |
| ... | ... | @@ -12,20 +12,21 @@ import java.util.List; |
| 12 | 12 | |
| 13 | 13 | @Schema(description = "管理后台 - 售后订单的详情 Response VO") |
| 14 | 14 | @Data |
| 15 | -public class TradeAfterSaleDetailRespVO extends TradeAfterSaleBaseVO { | |
| 15 | +public class AfterSaleDetailRespVO extends AfterSaleBaseVO { | |
| 16 | 16 | |
| 17 | 17 | @Schema(description = "售后编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") |
| 18 | 18 | private Long id; |
| 19 | 19 | |
| 20 | - /** | |
| 21 | - * 订单项列表 | |
| 22 | - */ | |
| 23 | - private List<Item> items; | |
| 20 | + | |
| 24 | 21 | |
| 25 | 22 | /** |
| 26 | 23 | * 订单基本信息 |
| 27 | 24 | */ |
| 28 | 25 | private TradeOrderBaseVO order; |
| 26 | + /** | |
| 27 | + * 订单项列表 | |
| 28 | + */ | |
| 29 | + private OrderItem orderItem; | |
| 29 | 30 | |
| 30 | 31 | /** |
| 31 | 32 | * 用户信息 |
| ... | ... | @@ -35,11 +36,11 @@ public class TradeAfterSaleDetailRespVO extends TradeAfterSaleBaseVO { |
| 35 | 36 | /** |
| 36 | 37 | * 售后日志 |
| 37 | 38 | */ |
| 38 | - private List<TradeAfterSaleLogRespVO> logs; | |
| 39 | + private List<AfterSaleLogRespVO> logs; | |
| 39 | 40 | |
| 40 | 41 | @Schema(description = "管理后台 - 交易订单的详情的订单项目") |
| 41 | 42 | @Data |
| 42 | - public static class Item extends TradeOrderItemBaseVO { | |
| 43 | + public static class OrderItem extends TradeOrderItemBaseVO { | |
| 43 | 44 | |
| 44 | 45 | /** |
| 45 | 46 | * 属性数组 | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/aftersale/vo/TradeAfterSaleDisagreeReqVO.java renamed to yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/aftersale/vo/AfterSaleDisagreeReqVO.java
| ... | ... | @@ -8,7 +8,7 @@ import javax.validation.constraints.NotNull; |
| 8 | 8 | |
| 9 | 9 | @Schema(description = "管理后台 - 交易售后拒绝 Request VO") |
| 10 | 10 | @Data |
| 11 | -public class TradeAfterSaleDisagreeReqVO { | |
| 11 | +public class AfterSaleDisagreeReqVO { | |
| 12 | 12 | |
| 13 | 13 | @Schema(description = "售后编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") |
| 14 | 14 | @NotNull(message = "售后编号不能为空") | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/aftersale/vo/TradeAfterSalePageReqVO.java renamed to yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/aftersale/vo/AfterSalePageReqVO.java
| ... | ... | @@ -2,9 +2,9 @@ package cn.iocoder.yudao.module.trade.controller.admin.aftersale.vo; |
| 2 | 2 | |
| 3 | 3 | import cn.iocoder.yudao.framework.common.pojo.PageParam; |
| 4 | 4 | import cn.iocoder.yudao.framework.common.validation.InEnum; |
| 5 | -import cn.iocoder.yudao.module.trade.enums.aftersale.TradeAfterSaleStatusEnum; | |
| 6 | -import cn.iocoder.yudao.module.trade.enums.aftersale.TradeAfterSaleTypeEnum; | |
| 7 | -import cn.iocoder.yudao.module.trade.enums.aftersale.TradeAfterSaleWayEnum; | |
| 5 | +import cn.iocoder.yudao.module.trade.enums.aftersale.AfterSaleStatusEnum; | |
| 6 | +import cn.iocoder.yudao.module.trade.enums.aftersale.AfterSaleTypeEnum; | |
| 7 | +import cn.iocoder.yudao.module.trade.enums.aftersale.AfterSaleWayEnum; | |
| 8 | 8 | import io.swagger.v3.oas.annotations.media.Schema; |
| 9 | 9 | import lombok.Data; |
| 10 | 10 | import lombok.EqualsAndHashCode; |
| ... | ... | @@ -19,21 +19,21 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_ |
| 19 | 19 | @Data |
| 20 | 20 | @EqualsAndHashCode(callSuper = true) |
| 21 | 21 | @ToString(callSuper = true) |
| 22 | -public class TradeAfterSalePageReqVO extends PageParam { | |
| 22 | +public class AfterSalePageReqVO extends PageParam { | |
| 23 | 23 | |
| 24 | 24 | @Schema(description = "售后流水号", example = "202211190847450020500077") |
| 25 | 25 | private String no; |
| 26 | 26 | |
| 27 | 27 | @Schema(description = "售后状态", example = "10") |
| 28 | - @InEnum(value = TradeAfterSaleStatusEnum.class, message = "售后状态必须是 {value}") | |
| 28 | + @InEnum(value = AfterSaleStatusEnum.class, message = "售后状态必须是 {value}") | |
| 29 | 29 | private Integer status; |
| 30 | 30 | |
| 31 | 31 | @Schema(description = "售后类型", example = "20") |
| 32 | - @InEnum(value = TradeAfterSaleTypeEnum.class, message = "售后类型必须是 {value}") | |
| 32 | + @InEnum(value = AfterSaleTypeEnum.class, message = "售后类型必须是 {value}") | |
| 33 | 33 | private Integer type; |
| 34 | 34 | |
| 35 | 35 | @Schema(description = "售后方式", example = "10") |
| 36 | - @InEnum(value = TradeAfterSaleWayEnum.class, message = "售后方式必须是 {value}") | |
| 36 | + @InEnum(value = AfterSaleWayEnum.class, message = "售后方式必须是 {value}") | |
| 37 | 37 | private Integer way; |
| 38 | 38 | |
| 39 | 39 | @Schema(description = "订单编号", example = "18078") | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/aftersale/vo/TradeAfterSaleRefuseReqVO.java renamed to yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/aftersale/vo/AfterSaleRefuseReqVO.java
| ... | ... | @@ -7,7 +7,7 @@ import javax.validation.constraints.NotNull; |
| 7 | 7 | |
| 8 | 8 | @Schema(description = "管理后台 - 交易售后拒绝收货 Request VO") |
| 9 | 9 | @Data |
| 10 | -public class TradeAfterSaleRefuseReqVO { | |
| 10 | +public class AfterSaleRefuseReqVO { | |
| 11 | 11 | |
| 12 | 12 | @Schema(description = "售后编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") |
| 13 | 13 | @NotNull(message = "售后编号不能为空") | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/aftersale/vo/TradeAfterSaleRespPageItemVO.java renamed to yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/aftersale/vo/AfterSaleRespPageItemVO.java
| ... | ... | @@ -14,7 +14,7 @@ import java.util.List; |
| 14 | 14 | @Data |
| 15 | 15 | @EqualsAndHashCode(callSuper = true) |
| 16 | 16 | @ToString(callSuper = true) |
| 17 | -public class TradeAfterSaleRespPageItemVO extends TradeAfterSaleBaseVO { | |
| 17 | +public class AfterSaleRespPageItemVO extends AfterSaleBaseVO { | |
| 18 | 18 | |
| 19 | 19 | @Schema(description = "售后编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "27630") |
| 20 | 20 | private Long id; | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/aftersale/vo/log/TradeAfterSaleLogRespVO.java renamed to yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/aftersale/vo/log/AfterSaleLogRespVO.java
| ... | ... | @@ -8,7 +8,7 @@ import java.time.LocalDateTime; |
| 8 | 8 | |
| 9 | 9 | @Schema(description = "管理后台 - 交易售后日志 Response VO") |
| 10 | 10 | @Data |
| 11 | -public class TradeAfterSaleLogRespVO { | |
| 11 | +public class AfterSaleLogRespVO { | |
| 12 | 12 | |
| 13 | 13 | @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "20669") |
| 14 | 14 | private Long id; |
| ... | ... | @@ -25,14 +25,6 @@ public class TradeAfterSaleLogRespVO { |
| 25 | 25 | @NotNull(message = "售后编号不能为空") |
| 26 | 26 | private Long afterSaleId; |
| 27 | 27 | |
| 28 | - @Schema(description = "订单编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "25870") | |
| 29 | - @NotNull(message = "订单编号不能为空") | |
| 30 | - private Long orderId; | |
| 31 | - | |
| 32 | - @Schema(description = "订单项编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "23154") | |
| 33 | - @NotNull(message = "订单项编号不能为空") | |
| 34 | - private Long orderItemId; | |
| 35 | - | |
| 36 | 28 | @Schema(description = "售后状态(之前)", example = "2") |
| 37 | 29 | private Integer beforeStatus; |
| 38 | 30 | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/aftersale/AppTradeAfterSaleController.java renamed to yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/aftersale/AppAfterSaleController.java
| ... | ... | @@ -3,15 +3,11 @@ package cn.iocoder.yudao.module.trade.controller.app.aftersale; |
| 3 | 3 | import cn.iocoder.yudao.framework.common.pojo.CommonResult; |
| 4 | 4 | import cn.iocoder.yudao.framework.common.pojo.PageParam; |
| 5 | 5 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 6 | -import cn.iocoder.yudao.module.trade.controller.app.aftersale.vo.AppTradeAfterSaleCreateReqVO; | |
| 7 | -import cn.iocoder.yudao.module.trade.controller.app.aftersale.vo.AppTradeAfterSaleDeliveryReqVO; | |
| 8 | -import cn.iocoder.yudao.module.trade.controller.app.aftersale.vo.AppTradeAfterSaleRespVO; | |
| 9 | -import cn.iocoder.yudao.module.trade.convert.aftersale.TradeAfterSaleConvert; | |
| 10 | -import cn.iocoder.yudao.module.trade.enums.aftersale.AfterSaleOperateTypeEnum; | |
| 11 | -import cn.iocoder.yudao.module.trade.enums.aftersale.TradeAfterSaleStatusEnum; | |
| 12 | -import cn.iocoder.yudao.module.trade.framework.aftersalelog.core.annotations.AfterSaleLog; | |
| 13 | -import cn.iocoder.yudao.module.trade.framework.aftersalelog.core.util.AfterSaleLogUtils; | |
| 14 | -import cn.iocoder.yudao.module.trade.service.aftersale.TradeAfterSaleService; | |
| 6 | +import cn.iocoder.yudao.module.trade.controller.app.aftersale.vo.AppAfterSaleCreateReqVO; | |
| 7 | +import cn.iocoder.yudao.module.trade.controller.app.aftersale.vo.AppAfterSaleDeliveryReqVO; | |
| 8 | +import cn.iocoder.yudao.module.trade.controller.app.aftersale.vo.AppAfterSaleRespVO; | |
| 9 | +import cn.iocoder.yudao.module.trade.convert.aftersale.AfterSaleConvert; | |
| 10 | +import cn.iocoder.yudao.module.trade.service.aftersale.AfterSaleService; | |
| 15 | 11 | import io.swagger.v3.oas.annotations.Operation; |
| 16 | 12 | import io.swagger.v3.oas.annotations.Parameter; |
| 17 | 13 | import io.swagger.v3.oas.annotations.tags.Tag; |
| ... | ... | @@ -29,23 +25,23 @@ import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUti |
| 29 | 25 | @RequestMapping("/trade/after-sale") |
| 30 | 26 | @Validated |
| 31 | 27 | @Slf4j |
| 32 | -public class AppTradeAfterSaleController { | |
| 28 | +public class AppAfterSaleController { | |
| 33 | 29 | |
| 34 | 30 | @Resource |
| 35 | - private TradeAfterSaleService afterSaleService; | |
| 31 | + private AfterSaleService afterSaleService; | |
| 36 | 32 | |
| 37 | 33 | @GetMapping(value = "/page") |
| 38 | 34 | @Operation(summary = "获得售后分页") |
| 39 | - public CommonResult<PageResult<AppTradeAfterSaleRespVO>> getAfterSalePage(PageParam pageParam) { | |
| 40 | - return success(TradeAfterSaleConvert.INSTANCE.convertPage02( | |
| 35 | + public CommonResult<PageResult<AppAfterSaleRespVO>> getAfterSalePage(PageParam pageParam) { | |
| 36 | + return success(AfterSaleConvert.INSTANCE.convertPage02( | |
| 41 | 37 | afterSaleService.getAfterSalePage(getLoginUserId(), pageParam))); |
| 42 | 38 | } |
| 43 | 39 | |
| 44 | 40 | @GetMapping(value = "/get") |
| 45 | 41 | @Operation(summary = "获得售后订单") |
| 46 | 42 | @Parameter(name = "id", description = "售后编号", required = true, example = "1") |
| 47 | - public CommonResult<AppTradeAfterSaleRespVO> getAfterSale(@RequestParam("id") Long id) { | |
| 48 | - return success(TradeAfterSaleConvert.INSTANCE.convert(afterSaleService.getAfterSale(getLoginUserId(), id))); | |
| 43 | + public CommonResult<AppAfterSaleRespVO> getAfterSale(@RequestParam("id") Long id) { | |
| 44 | + return success(AfterSaleConvert.INSTANCE.convert(afterSaleService.getAfterSale(getLoginUserId(), id))); | |
| 49 | 45 | } |
| 50 | 46 | |
| 51 | 47 | @GetMapping(value = "/get-applying-count") |
| ... | ... | @@ -56,16 +52,13 @@ public class AppTradeAfterSaleController { |
| 56 | 52 | |
| 57 | 53 | @PostMapping(value = "/create") |
| 58 | 54 | @Operation(summary = "申请售后") |
| 59 | - @AfterSaleLog(id = "#info.data", content = "'申请售后:售后编号['+#info.data+'],订单编号['+#createReqVO.orderItemId+'], '", operateType = AfterSaleOperateTypeEnum.MEMBER_CREATE) | |
| 60 | - public CommonResult<Long> createAfterSale(@RequestBody AppTradeAfterSaleCreateReqVO createReqVO) { | |
| 61 | - AfterSaleLogUtils.setBeforeStatus(0); | |
| 62 | - AfterSaleLogUtils.setAfterStatus(TradeAfterSaleStatusEnum.APPLY.getStatus()); | |
| 55 | + public CommonResult<Long> createAfterSale(@RequestBody AppAfterSaleCreateReqVO createReqVO) { | |
| 63 | 56 | return success(afterSaleService.createAfterSale(getLoginUserId(), createReqVO)); |
| 64 | 57 | } |
| 65 | 58 | |
| 66 | 59 | @PutMapping(value = "/delivery") |
| 67 | 60 | @Operation(summary = "退回货物") |
| 68 | - public CommonResult<Boolean> deliveryAfterSale(@RequestBody AppTradeAfterSaleDeliveryReqVO deliveryReqVO) { | |
| 61 | + public CommonResult<Boolean> deliveryAfterSale(@RequestBody AppAfterSaleDeliveryReqVO deliveryReqVO) { | |
| 69 | 62 | afterSaleService.deliveryAfterSale(getLoginUserId(), deliveryReqVO); |
| 70 | 63 | return success(true); |
| 71 | 64 | } | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/aftersale/vo/AppTradeAfterSaleCreateReqVO.java renamed to yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/aftersale/vo/AppAfterSaleCreateReqVO.java
| 1 | 1 | package cn.iocoder.yudao.module.trade.controller.app.aftersale.vo; |
| 2 | 2 | |
| 3 | 3 | import cn.iocoder.yudao.framework.common.validation.InEnum; |
| 4 | -import cn.iocoder.yudao.module.trade.enums.aftersale.TradeAfterSaleWayEnum; | |
| 4 | +import cn.iocoder.yudao.module.trade.enums.aftersale.AfterSaleWayEnum; | |
| 5 | 5 | import io.swagger.v3.oas.annotations.media.Schema; |
| 6 | 6 | import lombok.Data; |
| 7 | 7 | |
| ... | ... | @@ -11,7 +11,7 @@ import java.util.List; |
| 11 | 11 | |
| 12 | 12 | @Schema(description = "用户 App - 交易售后创建 Request VO") |
| 13 | 13 | @Data |
| 14 | -public class AppTradeAfterSaleCreateReqVO { | |
| 14 | +public class AppAfterSaleCreateReqVO { | |
| 15 | 15 | |
| 16 | 16 | @Schema(description = "订单项编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") |
| 17 | 17 | @NotNull(message = "订单项编号不能为空") |
| ... | ... | @@ -19,7 +19,7 @@ public class AppTradeAfterSaleCreateReqVO { |
| 19 | 19 | |
| 20 | 20 | @Schema(description = "售后方式", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") |
| 21 | 21 | @NotNull(message = "售后方式不能为空") |
| 22 | - @InEnum(value = TradeAfterSaleWayEnum.class, message = "售后方式必须是 {value}") | |
| 22 | + @InEnum(value = AfterSaleWayEnum.class, message = "售后方式必须是 {value}") | |
| 23 | 23 | private Integer way; |
| 24 | 24 | |
| 25 | 25 | @Schema(description = "退款金额", requiredMode = Schema.RequiredMode.REQUIRED, example = "100") | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/aftersale/vo/AppTradeAfterSaleDeliveryReqVO.java renamed to yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/aftersale/vo/AppAfterSaleDeliveryReqVO.java
| ... | ... | @@ -7,7 +7,7 @@ import javax.validation.constraints.NotNull; |
| 7 | 7 | |
| 8 | 8 | @Schema(description = "用户 App - 交易售后退回货物 Request VO") |
| 9 | 9 | @Data |
| 10 | -public class AppTradeAfterSaleDeliveryReqVO { | |
| 10 | +public class AppAfterSaleDeliveryReqVO { | |
| 11 | 11 | |
| 12 | 12 | @Schema(description = "售后编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") |
| 13 | 13 | @NotNull(message = "售后编号不能为空") | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/aftersale/vo/AppTradeAfterSaleRespVO.java renamed to yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/aftersale/vo/AppAfterSaleRespVO.java
| ... | ... | @@ -9,7 +9,7 @@ import java.util.List; |
| 9 | 9 | |
| 10 | 10 | @Schema(description = "用户 App - 交易售后 Response VO") |
| 11 | 11 | @Data |
| 12 | -public class AppTradeAfterSaleRespVO { | |
| 12 | +public class AppAfterSaleRespVO { | |
| 13 | 13 | |
| 14 | 14 | @Schema(description = "售后编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") |
| 15 | 15 | private Long id; | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/convert/aftersale/TradeAfterSaleConvert.java renamed to yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/convert/aftersale/AfterSaleConvert.java
| ... | ... | @@ -4,16 +4,16 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 4 | 4 | import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO; |
| 5 | 5 | import cn.iocoder.yudao.module.pay.api.refund.dto.PayRefundCreateReqDTO; |
| 6 | 6 | import cn.iocoder.yudao.module.product.api.property.dto.ProductPropertyValueDetailRespDTO; |
| 7 | -import cn.iocoder.yudao.module.trade.controller.admin.aftersale.vo.TradeAfterSaleDetailRespVO; | |
| 8 | -import cn.iocoder.yudao.module.trade.controller.admin.aftersale.vo.TradeAfterSaleRespPageItemVO; | |
| 9 | -import cn.iocoder.yudao.module.trade.controller.admin.aftersale.vo.log.TradeAfterSaleLogRespVO; | |
| 7 | +import cn.iocoder.yudao.module.trade.controller.admin.aftersale.vo.AfterSaleDetailRespVO; | |
| 8 | +import cn.iocoder.yudao.module.trade.controller.admin.aftersale.vo.AfterSaleRespPageItemVO; | |
| 9 | +import cn.iocoder.yudao.module.trade.controller.admin.aftersale.vo.log.AfterSaleLogRespVO; | |
| 10 | 10 | import cn.iocoder.yudao.module.trade.controller.admin.base.member.user.MemberUserRespVO; |
| 11 | 11 | import cn.iocoder.yudao.module.trade.controller.admin.base.product.property.ProductPropertyValueDetailRespVO; |
| 12 | 12 | import cn.iocoder.yudao.module.trade.controller.admin.order.vo.TradeOrderBaseVO; |
| 13 | -import cn.iocoder.yudao.module.trade.controller.app.aftersale.vo.AppTradeAfterSaleCreateReqVO; | |
| 14 | -import cn.iocoder.yudao.module.trade.controller.app.aftersale.vo.AppTradeAfterSaleRespVO; | |
| 15 | -import cn.iocoder.yudao.module.trade.dal.dataobject.aftersale.TradeAfterSaleDO; | |
| 16 | -import cn.iocoder.yudao.module.trade.dal.dataobject.aftersale.TradeAfterSaleLogDO; | |
| 13 | +import cn.iocoder.yudao.module.trade.controller.app.aftersale.vo.AppAfterSaleCreateReqVO; | |
| 14 | +import cn.iocoder.yudao.module.trade.controller.app.aftersale.vo.AppAfterSaleRespVO; | |
| 15 | +import cn.iocoder.yudao.module.trade.dal.dataobject.aftersale.AfterSaleDO; | |
| 16 | +import cn.iocoder.yudao.module.trade.dal.dataobject.aftersale.AfterSaleLogDO; | |
| 17 | 17 | import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO; |
| 18 | 18 | import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderItemDO; |
| 19 | 19 | import cn.iocoder.yudao.module.trade.framework.order.config.TradeOrderProperties; |
| ... | ... | @@ -26,9 +26,9 @@ import java.util.List; |
| 26 | 26 | import java.util.Map; |
| 27 | 27 | |
| 28 | 28 | @Mapper |
| 29 | -public interface TradeAfterSaleConvert { | |
| 29 | +public interface AfterSaleConvert { | |
| 30 | 30 | |
| 31 | - TradeAfterSaleConvert INSTANCE = Mappers.getMapper(TradeAfterSaleConvert.class); | |
| 31 | + AfterSaleConvert INSTANCE = Mappers.getMapper(AfterSaleConvert.class); | |
| 32 | 32 | |
| 33 | 33 | @Mappings({ |
| 34 | 34 | @Mapping(target = "id", ignore = true), |
| ... | ... | @@ -37,7 +37,7 @@ public interface TradeAfterSaleConvert { |
| 37 | 37 | @Mapping(target = "creator", ignore = true), |
| 38 | 38 | @Mapping(target = "updater", ignore = true), |
| 39 | 39 | }) |
| 40 | - TradeAfterSaleDO convert(AppTradeAfterSaleCreateReqVO createReqVO, TradeOrderItemDO tradeOrderItem); | |
| 40 | + AfterSaleDO convert(AppAfterSaleCreateReqVO createReqVO, TradeOrderItemDO tradeOrderItem); | |
| 41 | 41 | |
| 42 | 42 | @Mappings({ |
| 43 | 43 | @Mapping(source = "afterSale.orderId", target = "merchantOrderId"), |
| ... | ... | @@ -45,16 +45,16 @@ public interface TradeAfterSaleConvert { |
| 45 | 45 | @Mapping(source = "afterSale.applyReason", target = "reason"), |
| 46 | 46 | @Mapping(source = "afterSale.refundPrice", target = "price") |
| 47 | 47 | }) |
| 48 | - PayRefundCreateReqDTO convert(String userIp, TradeAfterSaleDO afterSale, | |
| 48 | + PayRefundCreateReqDTO convert(String userIp, AfterSaleDO afterSale, | |
| 49 | 49 | TradeOrderProperties orderProperties); |
| 50 | 50 | |
| 51 | 51 | MemberUserRespVO convert(MemberUserRespDTO bean); |
| 52 | 52 | |
| 53 | - PageResult<TradeAfterSaleRespPageItemVO> convertPage(PageResult<TradeAfterSaleDO> page); | |
| 53 | + PageResult<AfterSaleRespPageItemVO> convertPage(PageResult<AfterSaleDO> page); | |
| 54 | 54 | |
| 55 | - default PageResult<TradeAfterSaleRespPageItemVO> convertPage(PageResult<TradeAfterSaleDO> pageResult, | |
| 56 | - Map<Long, MemberUserRespDTO> memberUsers) { | |
| 57 | - PageResult<TradeAfterSaleRespPageItemVO> voPageResult = convertPage(pageResult); | |
| 55 | + default PageResult<AfterSaleRespPageItemVO> convertPage(PageResult<AfterSaleDO> pageResult, | |
| 56 | + Map<Long, MemberUserRespDTO> memberUsers) { | |
| 57 | + PageResult<AfterSaleRespPageItemVO> voPageResult = convertPage(pageResult); | |
| 58 | 58 | // 处理会员 |
| 59 | 59 | voPageResult.getList().forEach(afterSale -> afterSale.setUser( |
| 60 | 60 | convert(memberUsers.get(afterSale.getUserId())))); |
| ... | ... | @@ -63,27 +63,26 @@ public interface TradeAfterSaleConvert { |
| 63 | 63 | |
| 64 | 64 | ProductPropertyValueDetailRespVO convert(ProductPropertyValueDetailRespDTO bean); |
| 65 | 65 | |
| 66 | - AppTradeAfterSaleRespVO convert(TradeAfterSaleDO bean); | |
| 66 | + AppAfterSaleRespVO convert(AfterSaleDO bean); | |
| 67 | 67 | |
| 68 | - PageResult<AppTradeAfterSaleRespVO> convertPage02(PageResult<TradeAfterSaleDO> page); | |
| 68 | + PageResult<AppAfterSaleRespVO> convertPage02(PageResult<AfterSaleDO> page); | |
| 69 | 69 | |
| 70 | - List<TradeAfterSaleLogRespVO> convertList(List<TradeAfterSaleLogDO> list); | |
| 71 | - | |
| 72 | - default TradeAfterSaleDetailRespVO convert(TradeAfterSaleDO afterSale, TradeOrderDO order, List<TradeOrderItemDO> orderItems, | |
| 73 | - MemberUserRespDTO user, List<TradeAfterSaleLogRespVO> logs) { | |
| 74 | - TradeAfterSaleDetailRespVO respVO = convert(afterSale, orderItems); | |
| 70 | + default AfterSaleDetailRespVO convert(AfterSaleDO afterSale, TradeOrderDO order, TradeOrderItemDO orderItem, | |
| 71 | + MemberUserRespDTO user, List<AfterSaleLogDO> logs) { | |
| 72 | + AfterSaleDetailRespVO respVO = convert02(afterSale); | |
| 75 | 73 | // 处理用户信息 |
| 76 | 74 | respVO.setUser(convert(user)); |
| 77 | 75 | // 处理订单信息 |
| 78 | 76 | respVO.setOrder(convert(order)); |
| 77 | + respVO.setOrderItem(convert02(orderItem)); | |
| 79 | 78 | // 处理售后日志 |
| 80 | 79 | respVO.setLogs(convertList1(logs)); |
| 81 | 80 | return respVO; |
| 82 | 81 | } |
| 83 | 82 | |
| 84 | - List<TradeAfterSaleLogRespVO> convertList1(List<TradeAfterSaleLogRespVO> list); | |
| 85 | - @Mapping(target = "id", source = "afterSale.id") | |
| 86 | - TradeAfterSaleDetailRespVO convert(TradeAfterSaleDO afterSale, List<TradeOrderItemDO> orderItems); | |
| 87 | - TradeOrderBaseVO convert(TradeOrderDO order); | |
| 83 | + List<AfterSaleLogRespVO> convertList1(List<AfterSaleLogDO> list); | |
| 84 | + AfterSaleDetailRespVO convert02(AfterSaleDO bean); | |
| 85 | + AfterSaleDetailRespVO.OrderItem convert02(TradeOrderItemDO bean); | |
| 86 | + TradeOrderBaseVO convert(TradeOrderDO bean); | |
| 88 | 87 | |
| 89 | 88 | } | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/convert/aftersale/AfterSaleLogConvert.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.trade.convert.aftersale; | |
| 2 | + | |
| 3 | +import cn.iocoder.yudao.module.trade.dal.dataobject.aftersale.AfterSaleLogDO; | |
| 4 | +import cn.iocoder.yudao.module.trade.service.aftersale.bo.AfterSaleLogCreateReqBO; | |
| 5 | +import org.mapstruct.Mapper; | |
| 6 | +import org.mapstruct.factory.Mappers; | |
| 7 | + | |
| 8 | +@Mapper | |
| 9 | +public interface AfterSaleLogConvert { | |
| 10 | + | |
| 11 | + AfterSaleLogConvert INSTANCE = Mappers.getMapper(AfterSaleLogConvert.class); | |
| 12 | + | |
| 13 | + AfterSaleLogDO convert(AfterSaleLogCreateReqBO bean); | |
| 14 | + | |
| 15 | +} | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/convert/order/TradeOrderLogConvert.java
| ... | ... | @@ -10,6 +10,6 @@ public interface TradeOrderLogConvert { |
| 10 | 10 | |
| 11 | 11 | TradeOrderLogConvert INSTANCE = Mappers.getMapper(TradeOrderLogConvert.class); |
| 12 | 12 | |
| 13 | - TradeOrderLogDO convert(TradeOrderLogCreateReqBO createReqBO); | |
| 13 | + TradeOrderLogDO convert(TradeOrderLogCreateReqBO bean); | |
| 14 | 14 | |
| 15 | 15 | } | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/dataobject/aftersale/TradeAfterSaleDO.java renamed to yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/dataobject/aftersale/AfterSaleDO.java
| ... | ... | @@ -3,9 +3,9 @@ package cn.iocoder.yudao.module.trade.dal.dataobject.aftersale; |
| 3 | 3 | import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; |
| 4 | 4 | import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO; |
| 5 | 5 | import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderItemDO; |
| 6 | -import cn.iocoder.yudao.module.trade.enums.aftersale.TradeAfterSaleStatusEnum; | |
| 7 | -import cn.iocoder.yudao.module.trade.enums.aftersale.TradeAfterSaleTypeEnum; | |
| 8 | -import cn.iocoder.yudao.module.trade.enums.aftersale.TradeAfterSaleWayEnum; | |
| 6 | +import cn.iocoder.yudao.module.trade.enums.aftersale.AfterSaleStatusEnum; | |
| 7 | +import cn.iocoder.yudao.module.trade.enums.aftersale.AfterSaleTypeEnum; | |
| 8 | +import cn.iocoder.yudao.module.trade.enums.aftersale.AfterSaleWayEnum; | |
| 9 | 9 | import com.baomidou.mybatisplus.annotation.TableField; |
| 10 | 10 | import com.baomidou.mybatisplus.annotation.TableName; |
| 11 | 11 | import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler; |
| ... | ... | @@ -25,7 +25,7 @@ import java.util.List; |
| 25 | 25 | @Data |
| 26 | 26 | @EqualsAndHashCode(callSuper = true) |
| 27 | 27 | @Accessors(chain = true) |
| 28 | -public class TradeAfterSaleDO extends BaseDO { | |
| 28 | +public class AfterSaleDO extends BaseDO { | |
| 29 | 29 | |
| 30 | 30 | /** |
| 31 | 31 | * 售后编号,主键自增 |
| ... | ... | @@ -40,19 +40,19 @@ public class TradeAfterSaleDO extends BaseDO { |
| 40 | 40 | /** |
| 41 | 41 | * 退款状态 |
| 42 | 42 | * |
| 43 | - * 枚举 {@link TradeAfterSaleStatusEnum} | |
| 43 | + * 枚举 {@link AfterSaleStatusEnum} | |
| 44 | 44 | */ |
| 45 | 45 | private Integer status; |
| 46 | 46 | /** |
| 47 | 47 | * 售后方式 |
| 48 | 48 | * |
| 49 | - * 枚举 {@link TradeAfterSaleWayEnum} | |
| 49 | + * 枚举 {@link AfterSaleWayEnum} | |
| 50 | 50 | */ |
| 51 | 51 | private Integer way; |
| 52 | 52 | /** |
| 53 | 53 | * 售后类型 |
| 54 | 54 | * |
| 55 | - * 枚举 {@link TradeAfterSaleTypeEnum} | |
| 55 | + * 枚举 {@link AfterSaleTypeEnum} | |
| 56 | 56 | */ |
| 57 | 57 | private Integer type; |
| 58 | 58 | /** | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/dataobject/aftersale/TradeAfterSaleLogDO.java renamed to yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/dataobject/aftersale/AfterSaleLogDO.java
| ... | ... | @@ -11,8 +11,6 @@ import lombok.*; |
| 11 | 11 | /** |
| 12 | 12 | * 交易售后日志 DO |
| 13 | 13 | * |
| 14 | - * // TODO 可优化:参考淘宝或者有赞:1)增加 action 表示什么操作;2)content 记录每个操作的明细 | |
| 15 | - * | |
| 16 | 14 | * @author 芋道源码 |
| 17 | 15 | */ |
| 18 | 16 | @TableName("trade_after_sale_log") |
| ... | ... | @@ -23,7 +21,7 @@ import lombok.*; |
| 23 | 21 | @Builder |
| 24 | 22 | @NoArgsConstructor |
| 25 | 23 | @AllArgsConstructor |
| 26 | -public class TradeAfterSaleLogDO extends BaseDO { | |
| 24 | +public class AfterSaleLogDO extends BaseDO { | |
| 27 | 25 | |
| 28 | 26 | /** |
| 29 | 27 | * 编号 |
| ... | ... | @@ -43,19 +41,28 @@ public class TradeAfterSaleLogDO extends BaseDO { |
| 43 | 41 | * 枚举 {@link UserTypeEnum} |
| 44 | 42 | */ |
| 45 | 43 | private Integer userType; |
| 44 | + | |
| 46 | 45 | /** |
| 47 | 46 | * 售后编号 |
| 48 | 47 | * |
| 49 | - * 关联 {@link TradeAfterSaleDO#getId()} | |
| 48 | + * 关联 {@link AfterSaleDO#getId()} | |
| 50 | 49 | */ |
| 51 | 50 | private Long afterSaleId; |
| 52 | - // todo @CHENCHEN: 改成 Integer 哈;主要未来改文案,不好洗 log 存的字段; | |
| 51 | + /** | |
| 52 | + * 操作前状态 | |
| 53 | + */ | |
| 54 | + private Integer beforeStatus; | |
| 55 | + /** | |
| 56 | + * 操作后状态 | |
| 57 | + */ | |
| 58 | + private Integer afterStatus; | |
| 59 | + | |
| 53 | 60 | /** |
| 54 | 61 | * 操作类型 |
| 55 | 62 | * |
| 56 | 63 | * 枚举 {@link AfterSaleOperateTypeEnum} |
| 57 | 64 | */ |
| 58 | - private String operateType; | |
| 65 | + private Integer operateType; | |
| 59 | 66 | /** |
| 60 | 67 | * 操作明细 |
| 61 | 68 | */ | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/dataobject/order/TradeOrderItemDO.java
| ... | ... | @@ -2,7 +2,7 @@ package cn.iocoder.yudao.module.trade.dal.dataobject.order; |
| 2 | 2 | |
| 3 | 3 | import cn.iocoder.yudao.framework.common.util.json.JsonUtils; |
| 4 | 4 | import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; |
| 5 | -import cn.iocoder.yudao.module.trade.dal.dataobject.aftersale.TradeAfterSaleDO; | |
| 5 | +import cn.iocoder.yudao.module.trade.dal.dataobject.aftersale.AfterSaleDO; | |
| 6 | 6 | import cn.iocoder.yudao.module.trade.dal.dataobject.cart.CartDO; |
| 7 | 7 | import cn.iocoder.yudao.module.trade.enums.order.TradeOrderItemAfterSaleStatusEnum; |
| 8 | 8 | import com.baomidou.mybatisplus.annotation.TableField; |
| ... | ... | @@ -166,7 +166,7 @@ public class TradeOrderItemDO extends BaseDO { |
| 166 | 166 | /** |
| 167 | 167 | * 售后单编号 |
| 168 | 168 | * |
| 169 | - * 关联 {@link TradeAfterSaleDO#getId()} 字段 | |
| 169 | + * 关联 {@link AfterSaleDO#getId()} 字段 | |
| 170 | 170 | */ |
| 171 | 171 | private Long afterSaleId; |
| 172 | 172 | /** | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/mysql/aftersale/TradeAfterSaleLogMapper.java renamed to yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/mysql/aftersale/AfterSaleLogMapper.java
| 1 | 1 | package cn.iocoder.yudao.module.trade.dal.mysql.aftersale; |
| 2 | 2 | |
| 3 | 3 | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; |
| 4 | -import cn.iocoder.yudao.module.trade.dal.dataobject.aftersale.TradeAfterSaleLogDO; | |
| 4 | +import cn.iocoder.yudao.module.trade.dal.dataobject.aftersale.AfterSaleLogDO; | |
| 5 | 5 | import org.apache.ibatis.annotations.Mapper; |
| 6 | 6 | |
| 7 | +import java.util.List; | |
| 8 | + | |
| 7 | 9 | @Mapper |
| 8 | -public interface TradeAfterSaleLogMapper extends BaseMapperX<TradeAfterSaleLogDO> { | |
| 10 | +public interface AfterSaleLogMapper extends BaseMapperX<AfterSaleLogDO> { | |
| 11 | + | |
| 12 | + default List<AfterSaleLogDO> selectListByAfterSaleId(Long afterSaleId) { | |
| 13 | + return selectList(AfterSaleLogDO::getAfterSaleId, afterSaleId); | |
| 14 | + } | |
| 15 | + | |
| 9 | 16 | } | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/mysql/aftersale/AfterSaleMapper.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.trade.dal.mysql.aftersale; | |
| 2 | + | |
| 3 | +import cn.iocoder.yudao.framework.common.pojo.PageParam; | |
| 4 | +import cn.iocoder.yudao.framework.common.pojo.PageResult; | |
| 5 | +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; | |
| 6 | +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; | |
| 7 | +import cn.iocoder.yudao.module.trade.controller.admin.aftersale.vo.AfterSalePageReqVO; | |
| 8 | +import cn.iocoder.yudao.module.trade.dal.dataobject.aftersale.AfterSaleDO; | |
| 9 | +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; | |
| 10 | +import org.apache.ibatis.annotations.Mapper; | |
| 11 | + | |
| 12 | +import java.util.Collection; | |
| 13 | + | |
| 14 | +@Mapper | |
| 15 | +public interface AfterSaleMapper extends BaseMapperX<AfterSaleDO> { | |
| 16 | + | |
| 17 | + default PageResult<AfterSaleDO> selectPage(AfterSalePageReqVO reqVO) { | |
| 18 | + return selectPage(reqVO, new LambdaQueryWrapperX<AfterSaleDO>() | |
| 19 | + .likeIfPresent(AfterSaleDO::getNo, reqVO.getNo()) | |
| 20 | + .eqIfPresent(AfterSaleDO::getStatus, reqVO.getStatus()) | |
| 21 | + .eqIfPresent(AfterSaleDO::getType, reqVO.getType()) | |
| 22 | + .eqIfPresent(AfterSaleDO::getWay, reqVO.getWay()) | |
| 23 | + .likeIfPresent(AfterSaleDO::getOrderNo, reqVO.getOrderNo()) | |
| 24 | + .likeIfPresent(AfterSaleDO::getSpuName, reqVO.getSpuName()) | |
| 25 | + .betweenIfPresent(AfterSaleDO::getCreateTime, reqVO.getCreateTime()) | |
| 26 | + .orderByDesc(AfterSaleDO::getId)); | |
| 27 | + } | |
| 28 | + | |
| 29 | + default PageResult<AfterSaleDO> selectPage(Long userId, PageParam pageParam) { | |
| 30 | + return selectPage(pageParam, new LambdaQueryWrapperX<AfterSaleDO>() | |
| 31 | + .eqIfPresent(AfterSaleDO::getUserId, userId) | |
| 32 | + .orderByDesc(AfterSaleDO::getId)); | |
| 33 | + } | |
| 34 | + | |
| 35 | + default int updateByIdAndStatus(Long id, Integer status, AfterSaleDO update) { | |
| 36 | + return update(update, new LambdaUpdateWrapper<AfterSaleDO>() | |
| 37 | + .eq(AfterSaleDO::getId, id).eq(AfterSaleDO::getStatus, status)); | |
| 38 | + } | |
| 39 | + | |
| 40 | + default AfterSaleDO selectByIdAndUserId(Long id, Long userId) { | |
| 41 | + return selectOne(AfterSaleDO::getId, id, | |
| 42 | + AfterSaleDO::getUserId, userId); | |
| 43 | + } | |
| 44 | + | |
| 45 | + default Long selectCountByUserIdAndStatus(Long userId, Collection<Integer> statuses) { | |
| 46 | + return selectCount(new LambdaQueryWrapperX<AfterSaleDO>() | |
| 47 | + .eq(AfterSaleDO::getUserId, userId) | |
| 48 | + .in(AfterSaleDO::getStatus, statuses)); | |
| 49 | + } | |
| 50 | + | |
| 51 | +} | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/mysql/aftersale/TradeAfterSaleMapper.java deleted
| 1 | -package cn.iocoder.yudao.module.trade.dal.mysql.aftersale; | |
| 2 | - | |
| 3 | -import cn.iocoder.yudao.framework.common.pojo.PageParam; | |
| 4 | -import cn.iocoder.yudao.framework.common.pojo.PageResult; | |
| 5 | -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; | |
| 6 | -import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; | |
| 7 | -import cn.iocoder.yudao.module.trade.controller.admin.aftersale.vo.TradeAfterSalePageReqVO; | |
| 8 | -import cn.iocoder.yudao.module.trade.dal.dataobject.aftersale.TradeAfterSaleDO; | |
| 9 | -import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; | |
| 10 | -import org.apache.ibatis.annotations.Mapper; | |
| 11 | - | |
| 12 | -import java.util.Collection; | |
| 13 | - | |
| 14 | -@Mapper | |
| 15 | -public interface TradeAfterSaleMapper extends BaseMapperX<TradeAfterSaleDO> { | |
| 16 | - | |
| 17 | - default PageResult<TradeAfterSaleDO> selectPage(TradeAfterSalePageReqVO reqVO) { | |
| 18 | - return selectPage(reqVO, new LambdaQueryWrapperX<TradeAfterSaleDO>() | |
| 19 | - .likeIfPresent(TradeAfterSaleDO::getNo, reqVO.getNo()) | |
| 20 | - .eqIfPresent(TradeAfterSaleDO::getStatus, reqVO.getStatus()) | |
| 21 | - .eqIfPresent(TradeAfterSaleDO::getType, reqVO.getType()) | |
| 22 | - .eqIfPresent(TradeAfterSaleDO::getWay, reqVO.getWay()) | |
| 23 | - .likeIfPresent(TradeAfterSaleDO::getOrderNo, reqVO.getOrderNo()) | |
| 24 | - .likeIfPresent(TradeAfterSaleDO::getSpuName, reqVO.getSpuName()) | |
| 25 | - .betweenIfPresent(TradeAfterSaleDO::getCreateTime, reqVO.getCreateTime()) | |
| 26 | - .orderByDesc(TradeAfterSaleDO::getId)); | |
| 27 | - } | |
| 28 | - | |
| 29 | - default PageResult<TradeAfterSaleDO> selectPage(Long userId, PageParam pageParam) { | |
| 30 | - return selectPage(pageParam, new LambdaQueryWrapperX<TradeAfterSaleDO>() | |
| 31 | - .eqIfPresent(TradeAfterSaleDO::getUserId, userId) | |
| 32 | - .orderByDesc(TradeAfterSaleDO::getId)); | |
| 33 | - } | |
| 34 | - | |
| 35 | - default int updateByIdAndStatus(Long id, Integer status, TradeAfterSaleDO update) { | |
| 36 | - return update(update, new LambdaUpdateWrapper<TradeAfterSaleDO>() | |
| 37 | - .eq(TradeAfterSaleDO::getId, id).eq(TradeAfterSaleDO::getStatus, status)); | |
| 38 | - } | |
| 39 | - | |
| 40 | - default TradeAfterSaleDO selectByIdAndUserId(Long id, Long userId) { | |
| 41 | - return selectOne(TradeAfterSaleDO::getId, id, | |
| 42 | - TradeAfterSaleDO::getUserId, userId); | |
| 43 | - } | |
| 44 | - | |
| 45 | - default Long selectCountByUserIdAndStatus(Long userId, Collection<Integer> statuses) { | |
| 46 | - return selectCount(new LambdaQueryWrapperX<TradeAfterSaleDO>() | |
| 47 | - .eq(TradeAfterSaleDO::getUserId, userId) | |
| 48 | - .in(TradeAfterSaleDO::getStatus, statuses)); | |
| 49 | - } | |
| 50 | - | |
| 51 | -} |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/redis/RedisKeyConstants.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.trade.dal.redis; | |
| 2 | + | |
| 3 | +/** | |
| 4 | + * 交易 Redis Key 枚举类 | |
| 5 | + * | |
| 6 | + * @author 芋道源码 | |
| 7 | + */ | |
| 8 | +public interface RedisKeyConstants { | |
| 9 | + | |
| 10 | + /** | |
| 11 | + * 交易序号的缓存 | |
| 12 | + * | |
| 13 | + * KEY 格式:trade_no:{prefix} | |
| 14 | + * VALUE 数据格式:编号自增 | |
| 15 | + */ | |
| 16 | + String TRADE_NO = "trade_no:"; | |
| 17 | + | |
| 18 | +} | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/redis/no/TradeOrderNoRedisDAO.java renamed to yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/redis/no/TradeNoRedisDAO.java
| ... | ... | @@ -2,10 +2,12 @@ package cn.iocoder.yudao.module.trade.dal.redis.no; |
| 2 | 2 | |
| 3 | 3 | import cn.hutool.core.date.DatePattern; |
| 4 | 4 | import cn.hutool.core.date.DateUtil; |
| 5 | +import cn.iocoder.yudao.module.trade.dal.redis.RedisKeyConstants; | |
| 5 | 6 | import org.springframework.data.redis.core.StringRedisTemplate; |
| 6 | 7 | import org.springframework.stereotype.Repository; |
| 7 | 8 | |
| 8 | 9 | import javax.annotation.Resource; |
| 10 | +import java.time.Duration; | |
| 9 | 11 | import java.time.LocalDateTime; |
| 10 | 12 | |
| 11 | 13 | /** |
| ... | ... | @@ -14,9 +16,11 @@ import java.time.LocalDateTime; |
| 14 | 16 | * @author HUIHUI |
| 15 | 17 | */ |
| 16 | 18 | @Repository |
| 17 | -public class TradeOrderNoRedisDAO { | |
| 19 | +public class TradeNoRedisDAO { | |
| 18 | 20 | |
| 19 | - public static final String TRADE_ORDER_NO_PREFIX = "O"; | |
| 21 | + public static final String TRADE_ORDER_NO_PREFIX = "o"; | |
| 22 | + | |
| 23 | + public static final String AFTER_SALE_NO_PREFIX = "r"; | |
| 20 | 24 | |
| 21 | 25 | @Resource |
| 22 | 26 | private StringRedisTemplate stringRedisTemplate; |
| ... | ... | @@ -28,8 +32,12 @@ public class TradeOrderNoRedisDAO { |
| 28 | 32 | * @return 序号 |
| 29 | 33 | */ |
| 30 | 34 | public String generate(String prefix) { |
| 35 | + // 递增序号 | |
| 31 | 36 | String noPrefix = prefix + DateUtil.format(LocalDateTime.now(), DatePattern.PURE_DATETIME_PATTERN); |
| 32 | - Long no = stringRedisTemplate.opsForValue().increment(noPrefix); | |
| 37 | + String key = RedisKeyConstants.TRADE_NO + noPrefix; | |
| 38 | + Long no = stringRedisTemplate.opsForValue().increment(key); | |
| 39 | + // 设置过期时间 | |
| 40 | + stringRedisTemplate.expire(key, Duration.ofMinutes(1L)); | |
| 33 | 41 | return noPrefix + no; |
| 34 | 42 | } |
| 35 | 43 | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/framework/aftersalelog/config/AfterSaleLogConfiguration.java renamed to yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/framework/aftersale/config/AfterSaleLogConfiguration.java
| 1 | -package cn.iocoder.yudao.module.trade.framework.aftersalelog.config; | |
| 1 | +package cn.iocoder.yudao.module.trade.framework.aftersale.config; | |
| 2 | 2 | |
| 3 | -import cn.iocoder.yudao.module.trade.framework.aftersalelog.core.aop.AfterSaleLogAspect; | |
| 3 | +import cn.iocoder.yudao.module.trade.framework.aftersale.core.aop.AfterSaleLogAspect; | |
| 4 | 4 | import org.springframework.context.annotation.Bean; |
| 5 | 5 | import org.springframework.context.annotation.Configuration; |
| 6 | 6 | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/framework/aftersalelog/core/annotations/AfterSaleLog.java renamed to yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/framework/aftersale/core/annotations/AfterSaleLog.java
| 1 | -package cn.iocoder.yudao.module.trade.framework.aftersalelog.core.annotations; | |
| 1 | +package cn.iocoder.yudao.module.trade.framework.aftersale.core.annotations; | |
| 2 | 2 | |
| 3 | 3 | import cn.iocoder.yudao.module.trade.enums.aftersale.AfterSaleOperateTypeEnum; |
| 4 | +import cn.iocoder.yudao.module.trade.framework.aftersale.core.aop.AfterSaleLogAspect; | |
| 4 | 5 | |
| 5 | 6 | import java.lang.annotation.*; |
| 6 | 7 | |
| ... | ... | @@ -11,7 +12,7 @@ import java.lang.annotation.*; |
| 11 | 12 | * |
| 12 | 13 | * @author 陈賝 |
| 13 | 14 | * @since 2023/6/8 17:04 |
| 14 | - * @see cn.iocoder.yudao.module.trade.framework.aftersalelog.core.aop.AfterSaleLogAspect | |
| 15 | + * @see AfterSaleLogAspect | |
| 15 | 16 | */ |
| 16 | 17 | @Target({ElementType.METHOD, ElementType.TYPE}) |
| 17 | 18 | @Retention(RetentionPolicy.RUNTIME) |
| ... | ... | @@ -19,20 +20,8 @@ import java.lang.annotation.*; |
| 19 | 20 | public @interface AfterSaleLog { |
| 20 | 21 | |
| 21 | 22 | /** |
| 22 | - * 售后 ID | |
| 23 | - */ | |
| 24 | - @Deprecated | |
| 25 | - String id() default ""; | |
| 26 | - | |
| 27 | - /** | |
| 28 | 23 | * 操作类型 |
| 29 | 24 | */ |
| 30 | 25 | AfterSaleOperateTypeEnum operateType(); |
| 31 | 26 | |
| 32 | - /** | |
| 33 | - * 日志内容 | |
| 34 | - */ | |
| 35 | - @Deprecated | |
| 36 | - String content() default ""; | |
| 37 | - | |
| 38 | 27 | } | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/framework/aftersale/core/aop/AfterSaleLogAspect.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.trade.framework.aftersale.core.aop; | |
| 2 | + | |
| 3 | +import cn.hutool.core.util.ObjectUtil; | |
| 4 | +import cn.hutool.core.util.StrUtil; | |
| 5 | +import cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils; | |
| 6 | +import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderLogDO; | |
| 7 | +import cn.iocoder.yudao.module.trade.framework.aftersale.core.annotations.AfterSaleLog; | |
| 8 | +import cn.iocoder.yudao.module.trade.service.aftersale.AfterSaleLogService; | |
| 9 | +import cn.iocoder.yudao.module.trade.service.aftersale.bo.AfterSaleLogCreateReqBO; | |
| 10 | +import lombok.extern.slf4j.Slf4j; | |
| 11 | +import org.aspectj.lang.JoinPoint; | |
| 12 | +import org.aspectj.lang.annotation.AfterReturning; | |
| 13 | +import org.aspectj.lang.annotation.Aspect; | |
| 14 | + | |
| 15 | +import javax.annotation.Resource; | |
| 16 | +import java.util.Map; | |
| 17 | + | |
| 18 | +import static cn.iocoder.yudao.framework.common.util.json.JsonUtils.toJsonString; | |
| 19 | +import static java.util.Collections.emptyMap; | |
| 20 | + | |
| 21 | +/** | |
| 22 | + * 售后订单的操作记录的 AOP 切面 | |
| 23 | + * | |
| 24 | + * @author 陈賝 | |
| 25 | + * @since 2023/6/13 13:54 | |
| 26 | + */ | |
| 27 | +@Slf4j | |
| 28 | +@Aspect | |
| 29 | +public class AfterSaleLogAspect { | |
| 30 | + | |
| 31 | + /** | |
| 32 | + * 用户编号 | |
| 33 | + * | |
| 34 | + * 目前的使用场景:支付回调时,需要强制设置下用户编号 | |
| 35 | + */ | |
| 36 | + private static final ThreadLocal<Long> USER_ID = new ThreadLocal<>(); | |
| 37 | + /** | |
| 38 | + * 用户类型 | |
| 39 | + */ | |
| 40 | + private static final ThreadLocal<Integer> USER_TYPE = new ThreadLocal<>(); | |
| 41 | + /** | |
| 42 | + * 订单编号 | |
| 43 | + */ | |
| 44 | + private static final ThreadLocal<Long> AFTER_SALE_ID = new ThreadLocal<>(); | |
| 45 | + /** | |
| 46 | + * 操作前的状态 | |
| 47 | + */ | |
| 48 | + private static final ThreadLocal<Integer> BEFORE_STATUS = new ThreadLocal<>(); | |
| 49 | + /** | |
| 50 | + * 操作后的状态 | |
| 51 | + */ | |
| 52 | + private static final ThreadLocal<Integer> AFTER_STATUS = new ThreadLocal<>(); | |
| 53 | + /** | |
| 54 | + * 拓展参数 Map,用于格式化操作内容 | |
| 55 | + */ | |
| 56 | + private static final ThreadLocal<Map<String, Object>> EXTS = new ThreadLocal<>(); | |
| 57 | + | |
| 58 | + @Resource | |
| 59 | + private AfterSaleLogService afterSaleLogService; | |
| 60 | + | |
| 61 | + @AfterReturning(pointcut = "@annotation(afterSaleLog)") | |
| 62 | + public void doAfterReturning(JoinPoint joinPoint, AfterSaleLog afterSaleLog) { | |
| 63 | + try { | |
| 64 | + // 1.1 操作用户 | |
| 65 | + Integer userType = getUserType(); | |
| 66 | + Long userId = getUserId(); | |
| 67 | + // 1.2 售后信息 | |
| 68 | + Long afterSaleId = AFTER_SALE_ID.get(); | |
| 69 | + if (afterSaleId == null) { // 如果未设置,只有注解,说明不需要记录日志 | |
| 70 | + return; | |
| 71 | + } | |
| 72 | + Integer beforeStatus = BEFORE_STATUS.get(); | |
| 73 | + Integer afterStatus = AFTER_STATUS.get(); | |
| 74 | + Map<String, Object> exts = ObjectUtil.defaultIfNull(EXTS.get(), emptyMap()); | |
| 75 | + String content = StrUtil.format(afterSaleLog.operateType().getContent(), exts); | |
| 76 | + | |
| 77 | + // 2. 记录日志 | |
| 78 | + AfterSaleLogCreateReqBO createBO = new AfterSaleLogCreateReqBO() | |
| 79 | + .setUserId(userId).setUserType(userType) | |
| 80 | + .setAfterSaleId(afterSaleId).setBeforeStatus(beforeStatus).setAfterStatus(afterStatus) | |
| 81 | + .setOperateType(afterSaleLog.operateType().getType()).setContent(content); | |
| 82 | + afterSaleLogService.createAfterSaleLog(createBO); | |
| 83 | + } catch (Exception exception) { | |
| 84 | + log.error("[doAfterReturning][afterSaleLog({}) 日志记录错误]", toJsonString(afterSaleLog), exception); | |
| 85 | + } finally { | |
| 86 | + clear(); | |
| 87 | + } | |
| 88 | + } | |
| 89 | + | |
| 90 | + /** | |
| 91 | + * 获得用户类型 | |
| 92 | + * | |
| 93 | + * 如果没有,则约定为 {@link TradeOrderLogDO#getUserType()} 系统 | |
| 94 | + * | |
| 95 | + * @return 用户类型 | |
| 96 | + */ | |
| 97 | + private static Integer getUserType() { | |
| 98 | + return ObjectUtil.defaultIfNull(WebFrameworkUtils.getLoginUserType(), TradeOrderLogDO.USER_TYPE_SYSTEM); | |
| 99 | + } | |
| 100 | + | |
| 101 | + /** | |
| 102 | + * 获得用户编号 | |
| 103 | + * | |
| 104 | + * 如果没有,则约定为 {@link TradeOrderLogDO#getUserId()} 系统 | |
| 105 | + * | |
| 106 | + * @return 用户类型 | |
| 107 | + */ | |
| 108 | + private static Long getUserId() { | |
| 109 | + return ObjectUtil.defaultIfNull(WebFrameworkUtils.getLoginUserId(), TradeOrderLogDO.USER_ID_SYSTEM); | |
| 110 | + } | |
| 111 | + | |
| 112 | + public static void setAfterSale(Long id, Integer beforeStatus, Integer afterStatus, Map<String, Object> exts) { | |
| 113 | + AFTER_SALE_ID.set(id); | |
| 114 | + BEFORE_STATUS.set(beforeStatus); | |
| 115 | + AFTER_STATUS.set(afterStatus); | |
| 116 | + EXTS.set(exts); | |
| 117 | + } | |
| 118 | + | |
| 119 | + public static void setUserInfo(Long userId, Integer userType) { | |
| 120 | + USER_ID.set(userId); | |
| 121 | + USER_TYPE.set(userType); | |
| 122 | + } | |
| 123 | + | |
| 124 | + private static void clear() { | |
| 125 | + USER_ID.remove(); | |
| 126 | + USER_TYPE.remove(); | |
| 127 | + AFTER_SALE_ID.remove(); | |
| 128 | + BEFORE_STATUS.remove(); | |
| 129 | + AFTER_STATUS.remove(); | |
| 130 | + EXTS.remove(); | |
| 131 | + } | |
| 132 | + | |
| 133 | +} | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/framework/aftersalelog/core/util/AfterSaleLogUtils.java renamed to yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/framework/aftersale/core/utils/AfterSaleLogUtils.java
| 1 | -package cn.iocoder.yudao.module.trade.framework.aftersalelog.core.util; | |
| 1 | +package cn.iocoder.yudao.module.trade.framework.aftersale.core.utils; | |
| 2 | 2 | |
| 3 | 3 | |
| 4 | -import cn.iocoder.yudao.module.trade.framework.aftersalelog.core.aop.AfterSaleLogAspect; | |
| 4 | +import cn.iocoder.yudao.module.trade.framework.aftersale.core.aop.AfterSaleLogAspect; | |
| 5 | 5 | |
| 6 | 6 | import java.util.Map; |
| 7 | 7 | |
| ... | ... | @@ -13,21 +13,13 @@ import java.util.Map; |
| 13 | 13 | */ |
| 14 | 14 | public class AfterSaleLogUtils { |
| 15 | 15 | |
| 16 | - public static void setBeforeStatus(Integer status) { | |
| 17 | - AfterSaleLogAspect.setBeforeStatus(status); | |
| 18 | - } | |
| 19 | - | |
| 20 | - public static void setAfterStatus(Integer status) { | |
| 21 | - AfterSaleLogAspect.setAfterStatus(status); | |
| 22 | - } | |
| 23 | - | |
| 24 | 16 | public static void setAfterSaleInfo(Long id, Integer beforeStatus, Integer afterStatus) { |
| 25 | 17 | setAfterSaleInfo(id, beforeStatus, afterStatus, null); |
| 26 | 18 | } |
| 27 | 19 | |
| 28 | 20 | public static void setAfterSaleInfo(Long id, Integer beforeStatus, Integer afterStatus, |
| 29 | 21 | Map<String, Object> exts) { |
| 30 | - // TODO 待实现 | |
| 22 | + AfterSaleLogAspect.setAfterSale(id, beforeStatus, afterStatus, exts); | |
| 31 | 23 | } |
| 32 | 24 | |
| 33 | 25 | } | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/framework/aftersalelog/core/aop/AfterSaleLogAspect.java deleted
| 1 | -package cn.iocoder.yudao.module.trade.framework.aftersalelog.core.aop; | |
| 2 | - | |
| 3 | -import cn.hutool.core.map.MapUtil; | |
| 4 | -import cn.hutool.core.util.ObjectUtil; | |
| 5 | -import cn.iocoder.yudao.framework.common.util.spring.SpringExpressionUtils; | |
| 6 | -import cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils; | |
| 7 | -import cn.iocoder.yudao.module.trade.framework.aftersalelog.core.annotations.AfterSaleLog; | |
| 8 | -import cn.iocoder.yudao.module.trade.framework.aftersalelog.core.dto.TradeAfterSaleLogCreateReqDTO; | |
| 9 | -import cn.iocoder.yudao.module.trade.framework.aftersalelog.core.service.AfterSaleLogService; | |
| 10 | -import com.google.common.collect.Maps; | |
| 11 | -import lombok.extern.slf4j.Slf4j; | |
| 12 | -import org.aspectj.lang.JoinPoint; | |
| 13 | -import org.aspectj.lang.annotation.AfterReturning; | |
| 14 | -import org.aspectj.lang.annotation.Aspect; | |
| 15 | -import org.aspectj.lang.reflect.MethodSignature; | |
| 16 | - | |
| 17 | -import javax.annotation.Resource; | |
| 18 | -import java.util.HashMap; | |
| 19 | -import java.util.Map; | |
| 20 | - | |
| 21 | -import static cn.iocoder.yudao.framework.common.util.json.JsonUtils.toJsonString; | |
| 22 | -import static java.util.Arrays.asList; | |
| 23 | - | |
| 24 | -/** | |
| 25 | - * 记录售后日志的 AOP 切面 | |
| 26 | - * | |
| 27 | - * @author 陈賝 | |
| 28 | - * @since 2023/6/13 13:54 | |
| 29 | - */ | |
| 30 | -@Slf4j | |
| 31 | -@Aspect | |
| 32 | -public class AfterSaleLogAspect { | |
| 33 | - | |
| 34 | - @Resource | |
| 35 | - private AfterSaleLogService afterSaleLogService; | |
| 36 | - /** | |
| 37 | - * 售前状态 | |
| 38 | - */ | |
| 39 | - private static final ThreadLocal<Integer> BEFORE_STATUS = new ThreadLocal<>(); | |
| 40 | - /** | |
| 41 | - * 售后状态 | |
| 42 | - */ | |
| 43 | - private static final ThreadLocal<Integer> AFTER_STATUS = new ThreadLocal<>(); | |
| 44 | - /** | |
| 45 | - * 操作类型 | |
| 46 | - */ | |
| 47 | - private final static String OPERATE_TYPE = "operateType"; | |
| 48 | - /** | |
| 49 | - * ID | |
| 50 | - */ | |
| 51 | - private final static String ID = "id"; | |
| 52 | - /** | |
| 53 | - * 操作明细 | |
| 54 | - */ | |
| 55 | - private final static String CONTENT = "content"; | |
| 56 | - | |
| 57 | - /** | |
| 58 | - * 切面存入日志 | |
| 59 | - */ | |
| 60 | - @AfterReturning(pointcut = "@annotation(afterSaleLog)", returning = "info") | |
| 61 | - public void doAfterReturning(JoinPoint joinPoint, AfterSaleLog afterSaleLog, Object info) { | |
| 62 | - try { | |
| 63 | - // 日志对象拼接 | |
| 64 | - Integer userType = WebFrameworkUtils.getLoginUserType(); | |
| 65 | - Long id = WebFrameworkUtils.getLoginUserId(); | |
| 66 | - Map<String, String> formatObj = spelFormat(joinPoint, info); | |
| 67 | - TradeAfterSaleLogCreateReqDTO dto = new TradeAfterSaleLogCreateReqDTO() | |
| 68 | - .setUserId(id) | |
| 69 | - .setUserType(userType) | |
| 70 | - .setAfterSaleId(MapUtil.getLong(formatObj, ID)) | |
| 71 | - .setOperateType(MapUtil.getStr(formatObj, OPERATE_TYPE)) | |
| 72 | - .setBeforeStatus(BEFORE_STATUS.get()) | |
| 73 | - .setAfterStatus(AFTER_STATUS.get()) | |
| 74 | - .setContent(MapUtil.getStr(formatObj, CONTENT)); | |
| 75 | - // 异步存入数据库 | |
| 76 | - afterSaleLogService.createLog(dto); | |
| 77 | - } catch (Exception exception) { | |
| 78 | - log.error("[doAfterReturning][afterSaleLog({}) 日志记录错误]", toJsonString(afterSaleLog), exception); | |
| 79 | - }finally { | |
| 80 | - clearThreadLocal(); | |
| 81 | - } | |
| 82 | - } | |
| 83 | - | |
| 84 | - /** | |
| 85 | - * 获取描述信息 | |
| 86 | - */ | |
| 87 | - public static Map<String, String> spelFormat(JoinPoint joinPoint, Object info) { | |
| 88 | - MethodSignature signature = (MethodSignature) joinPoint.getSignature(); | |
| 89 | - AfterSaleLog afterSaleLogPoint = signature.getMethod().getAnnotation(AfterSaleLog.class); | |
| 90 | - HashMap<String, String> result = Maps.newHashMapWithExpectedSize(2); | |
| 91 | - Map<String, Object> spelMap = SpringExpressionUtils.parseExpression(joinPoint, info, | |
| 92 | - asList(afterSaleLogPoint.id(), afterSaleLogPoint.content())); | |
| 93 | - // TODO @chenchen:是不是抽成 3 个方法好点;毕竟 map 太抽象了;; | |
| 94 | - // 售后ID | |
| 95 | - String id = MapUtil.getStr(spelMap, afterSaleLogPoint.id()); | |
| 96 | - result.put(ID, id); | |
| 97 | - // 操作类型 | |
| 98 | - String operateType = afterSaleLogPoint.operateType().getContent(); | |
| 99 | - result.put(OPERATE_TYPE, operateType); | |
| 100 | - // 日志内容 | |
| 101 | - String content = MapUtil.getStr(spelMap, afterSaleLogPoint.content()); | |
| 102 | - if (ObjectUtil.isNotNull(afterSaleLogPoint.operateType())) { | |
| 103 | - content += operateType; | |
| 104 | - } | |
| 105 | - result.put(CONTENT, content); | |
| 106 | - return result; | |
| 107 | - } | |
| 108 | - | |
| 109 | - public static void setBeforeStatus(Integer beforestatus) { | |
| 110 | - BEFORE_STATUS.set(beforestatus); | |
| 111 | - } | |
| 112 | - | |
| 113 | - public static void setAfterStatus(Integer afterStatus) { | |
| 114 | - AFTER_STATUS.set(afterStatus); | |
| 115 | - } | |
| 116 | - | |
| 117 | - private static void clearThreadLocal() { | |
| 118 | - AFTER_STATUS.remove(); | |
| 119 | - BEFORE_STATUS.remove(); | |
| 120 | - } | |
| 121 | - | |
| 122 | -} |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/framework/order/core/annotations/TradeOrderLog.java
| 1 | 1 | package cn.iocoder.yudao.module.trade.framework.order.core.annotations; |
| 2 | 2 | |
| 3 | 3 | import cn.iocoder.yudao.module.trade.enums.order.TradeOrderOperateTypeEnum; |
| 4 | +import cn.iocoder.yudao.module.trade.framework.order.core.aop.TradeOrderLogAspect; | |
| 4 | 5 | |
| 5 | 6 | import java.lang.annotation.Documented; |
| 6 | 7 | import java.lang.annotation.Retention; |
| ... | ... | @@ -15,6 +16,7 @@ import static java.lang.annotation.ElementType.METHOD; |
| 15 | 16 | * |
| 16 | 17 | * @author 陈賝 |
| 17 | 18 | * @since 2023/7/6 15:37 |
| 19 | + * @see TradeOrderLogAspect | |
| 18 | 20 | */ |
| 19 | 21 | @Target({METHOD, ANNOTATION_TYPE}) |
| 20 | 22 | @Retention(RetentionPolicy.RUNTIME) | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/framework/order/core/aop/TradeOrderLogAspect.java
| ... | ... | @@ -73,7 +73,7 @@ public class TradeOrderLogAspect { |
| 73 | 73 | Long userId = getUserId(); |
| 74 | 74 | // 1.2 订单信息 |
| 75 | 75 | Long orderId = ORDER_ID.get(); |
| 76 | - if (orderId == null) { // 如果未设置,只有注解,说明不需要记录订单日志 | |
| 76 | + if (orderId == null) { // 如果未设置,只有注解,说明不需要记录日志 | |
| 77 | 77 | return; |
| 78 | 78 | } |
| 79 | 79 | Integer beforeStatus = BEFORE_STATUS.get(); |
| ... | ... | @@ -81,7 +81,7 @@ public class TradeOrderLogAspect { |
| 81 | 81 | Map<String, Object> exts = ObjectUtil.defaultIfNull(EXTS.get(), emptyMap()); |
| 82 | 82 | String content = StrUtil.format(orderLog.operateType().getContent(), exts); |
| 83 | 83 | |
| 84 | - // 2.1 记录日志 | |
| 84 | + // 2. 记录日志 | |
| 85 | 85 | TradeOrderLogCreateReqBO createBO = new TradeOrderLogCreateReqBO() |
| 86 | 86 | .setUserId(userId).setUserType(userType) |
| 87 | 87 | .setOrderId(orderId).setBeforeStatus(beforeStatus).setAfterStatus(afterStatus) | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/framework/aftersalelog/core/service/AfterSaleLogService.java renamed to yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/aftersale/AfterSaleLogService.java
| 1 | -package cn.iocoder.yudao.module.trade.framework.aftersalelog.core.service; | |
| 1 | +package cn.iocoder.yudao.module.trade.service.aftersale; | |
| 2 | 2 | |
| 3 | 3 | |
| 4 | -import cn.iocoder.yudao.module.trade.controller.admin.aftersale.vo.log.TradeAfterSaleLogRespVO; | |
| 5 | -import cn.iocoder.yudao.module.trade.framework.aftersalelog.core.dto.TradeAfterSaleLogCreateReqDTO; | |
| 4 | +import cn.iocoder.yudao.module.trade.dal.dataobject.aftersale.AfterSaleLogDO; | |
| 5 | +import cn.iocoder.yudao.module.trade.service.aftersale.bo.AfterSaleLogCreateReqBO; | |
| 6 | 6 | |
| 7 | 7 | import java.util.List; |
| 8 | 8 | |
| ... | ... | @@ -17,11 +17,11 @@ public interface AfterSaleLogService { |
| 17 | 17 | /** |
| 18 | 18 | * 创建售后日志 |
| 19 | 19 | * |
| 20 | - * @param logDTO 日志记录 | |
| 20 | + * @param createReqBO 日志记录 | |
| 21 | 21 | * @author 陈賝 |
| 22 | 22 | * @since 2023/6/12 14:18 |
| 23 | 23 | */ |
| 24 | - void createLog(TradeAfterSaleLogCreateReqDTO logDTO); | |
| 24 | + void createAfterSaleLog(AfterSaleLogCreateReqBO createReqBO); | |
| 25 | 25 | |
| 26 | 26 | /** |
| 27 | 27 | * 获取售后日志 |
| ... | ... | @@ -29,6 +29,6 @@ public interface AfterSaleLogService { |
| 29 | 29 | * @param afterSaleId 售后编号 |
| 30 | 30 | * @return 售后日志 |
| 31 | 31 | */ |
| 32 | - List<TradeAfterSaleLogRespVO> getLog(Long afterSaleId); | |
| 32 | + List<AfterSaleLogDO> getAfterSaleLogList(Long afterSaleId); | |
| 33 | 33 | |
| 34 | 34 | } | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/aftersale/AfterSaleLogServiceImpl.java
0 → 100644
| 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 javax.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/TradeAfterSaleService.java renamed to yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/aftersale/AfterSaleService.java
| ... | ... | @@ -2,19 +2,19 @@ package cn.iocoder.yudao.module.trade.service.aftersale; |
| 2 | 2 | |
| 3 | 3 | import cn.iocoder.yudao.framework.common.pojo.PageParam; |
| 4 | 4 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 5 | -import cn.iocoder.yudao.module.trade.controller.admin.aftersale.vo.TradeAfterSaleDisagreeReqVO; | |
| 6 | -import cn.iocoder.yudao.module.trade.controller.admin.aftersale.vo.TradeAfterSalePageReqVO; | |
| 7 | -import cn.iocoder.yudao.module.trade.controller.admin.aftersale.vo.TradeAfterSaleRefuseReqVO; | |
| 8 | -import cn.iocoder.yudao.module.trade.controller.app.aftersale.vo.AppTradeAfterSaleCreateReqVO; | |
| 9 | -import cn.iocoder.yudao.module.trade.controller.app.aftersale.vo.AppTradeAfterSaleDeliveryReqVO; | |
| 10 | -import cn.iocoder.yudao.module.trade.dal.dataobject.aftersale.TradeAfterSaleDO; | |
| 5 | +import cn.iocoder.yudao.module.trade.controller.admin.aftersale.vo.AfterSaleDisagreeReqVO; | |
| 6 | +import cn.iocoder.yudao.module.trade.controller.admin.aftersale.vo.AfterSalePageReqVO; | |
| 7 | +import cn.iocoder.yudao.module.trade.controller.admin.aftersale.vo.AfterSaleRefuseReqVO; | |
| 8 | +import cn.iocoder.yudao.module.trade.controller.app.aftersale.vo.AppAfterSaleCreateReqVO; | |
| 9 | +import cn.iocoder.yudao.module.trade.controller.app.aftersale.vo.AppAfterSaleDeliveryReqVO; | |
| 10 | +import cn.iocoder.yudao.module.trade.dal.dataobject.aftersale.AfterSaleDO; | |
| 11 | 11 | |
| 12 | 12 | /** |
| 13 | 13 | * 售后订单 Service 接口 |
| 14 | 14 | * |
| 15 | 15 | * @author 芋道源码 |
| 16 | 16 | */ |
| 17 | -public interface TradeAfterSaleService { | |
| 17 | +public interface AfterSaleService { | |
| 18 | 18 | |
| 19 | 19 | /** |
| 20 | 20 | * 【管理员】获得售后订单分页 |
| ... | ... | @@ -22,7 +22,7 @@ public interface TradeAfterSaleService { |
| 22 | 22 | * @param pageReqVO 分页查询 |
| 23 | 23 | * @return 售后订单分页 |
| 24 | 24 | */ |
| 25 | - PageResult<TradeAfterSaleDO> getAfterSalePage(TradeAfterSalePageReqVO pageReqVO); | |
| 25 | + PageResult<AfterSaleDO> getAfterSalePage(AfterSalePageReqVO pageReqVO); | |
| 26 | 26 | |
| 27 | 27 | /** |
| 28 | 28 | * 【会员】获得售后订单分页 |
| ... | ... | @@ -31,7 +31,7 @@ public interface TradeAfterSaleService { |
| 31 | 31 | * @param pageParam 分页参数 |
| 32 | 32 | * @return 售后订单分页 |
| 33 | 33 | */ |
| 34 | - PageResult<TradeAfterSaleDO> getAfterSalePage(Long userId, PageParam pageParam); | |
| 34 | + PageResult<AfterSaleDO> getAfterSalePage(Long userId, PageParam pageParam); | |
| 35 | 35 | |
| 36 | 36 | /** |
| 37 | 37 | * 【会员】获得售后单 |
| ... | ... | @@ -40,7 +40,7 @@ public interface TradeAfterSaleService { |
| 40 | 40 | * @param id 售后编号 |
| 41 | 41 | * @return 售后订单 |
| 42 | 42 | */ |
| 43 | - TradeAfterSaleDO getAfterSale(Long userId, Long id); | |
| 43 | + AfterSaleDO getAfterSale(Long userId, Long id); | |
| 44 | 44 | |
| 45 | 45 | /** |
| 46 | 46 | * 【管理员】获得售后单 |
| ... | ... | @@ -48,7 +48,7 @@ public interface TradeAfterSaleService { |
| 48 | 48 | * @param id 售后编号 |
| 49 | 49 | * @return 售后订单 |
| 50 | 50 | */ |
| 51 | - TradeAfterSaleDO getAfterSale(Long id); | |
| 51 | + AfterSaleDO getAfterSale(Long id); | |
| 52 | 52 | |
| 53 | 53 | /** |
| 54 | 54 | * 【会员】创建售后订单 |
| ... | ... | @@ -57,7 +57,7 @@ public interface TradeAfterSaleService { |
| 57 | 57 | * @param createReqVO 创建 Request 信息 |
| 58 | 58 | * @return 售后编号 |
| 59 | 59 | */ |
| 60 | - Long createAfterSale(Long userId, AppTradeAfterSaleCreateReqVO createReqVO); | |
| 60 | + Long createAfterSale(Long userId, AppAfterSaleCreateReqVO createReqVO); | |
| 61 | 61 | |
| 62 | 62 | /** |
| 63 | 63 | * 【管理员】同意售后订单 |
| ... | ... | @@ -73,7 +73,7 @@ public interface TradeAfterSaleService { |
| 73 | 73 | * @param userId 管理员用户编号 |
| 74 | 74 | * @param auditReqVO 审批 Request 信息 |
| 75 | 75 | */ |
| 76 | - void disagreeAfterSale(Long userId, TradeAfterSaleDisagreeReqVO auditReqVO); | |
| 76 | + void disagreeAfterSale(Long userId, AfterSaleDisagreeReqVO auditReqVO); | |
| 77 | 77 | |
| 78 | 78 | /** |
| 79 | 79 | * 【会员】退回货物 |
| ... | ... | @@ -81,7 +81,7 @@ public interface TradeAfterSaleService { |
| 81 | 81 | * @param userId 会员用户编号 |
| 82 | 82 | * @param deliveryReqVO 退货 Request 信息 |
| 83 | 83 | */ |
| 84 | - void deliveryAfterSale(Long userId, AppTradeAfterSaleDeliveryReqVO deliveryReqVO); | |
| 84 | + void deliveryAfterSale(Long userId, AppAfterSaleDeliveryReqVO deliveryReqVO); | |
| 85 | 85 | |
| 86 | 86 | /** |
| 87 | 87 | * 【管理员】确认收货 |
| ... | ... | @@ -97,7 +97,7 @@ public interface TradeAfterSaleService { |
| 97 | 97 | * @param userId 管理员用户编号 |
| 98 | 98 | * @param refuseReqVO 拒绝收货 Request 信息 |
| 99 | 99 | */ |
| 100 | - void refuseAfterSale(Long userId, TradeAfterSaleRefuseReqVO refuseReqVO); | |
| 100 | + void refuseAfterSale(Long userId, AfterSaleRefuseReqVO refuseReqVO); | |
| 101 | 101 | |
| 102 | 102 | /** |
| 103 | 103 | * 【管理员】确认退款 |
| ... | ... | @@ -119,7 +119,7 @@ public interface TradeAfterSaleService { |
| 119 | 119 | /** |
| 120 | 120 | * 【会员】获得正在进行中的售后订单数量 |
| 121 | 121 | * |
| 122 | - * @param userId | |
| 122 | + * @param userId 用户编号 | |
| 123 | 123 | * @return 数量 |
| 124 | 124 | */ |
| 125 | 125 | Long getApplyingAfterSaleCount(Long userId); | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/aftersale/TradeAfterSaleServiceImpl.java renamed to yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/aftersale/AfterSaleServiceImpl.java
| ... | ... | @@ -2,42 +2,36 @@ package cn.iocoder.yudao.module.trade.service.aftersale; |
| 2 | 2 | |
| 3 | 3 | import cn.hutool.core.map.MapUtil; |
| 4 | 4 | import cn.hutool.core.util.ObjectUtil; |
| 5 | -import cn.hutool.core.util.RandomUtil; | |
| 6 | 5 | import cn.iocoder.yudao.framework.common.pojo.PageParam; |
| 7 | 6 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 8 | 7 | import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; |
| 9 | 8 | import cn.iocoder.yudao.module.pay.api.refund.PayRefundApi; |
| 10 | 9 | import cn.iocoder.yudao.module.pay.api.refund.dto.PayRefundCreateReqDTO; |
| 11 | -import cn.iocoder.yudao.module.trade.controller.admin.aftersale.vo.TradeAfterSaleDisagreeReqVO; | |
| 12 | -import cn.iocoder.yudao.module.trade.controller.admin.aftersale.vo.TradeAfterSalePageReqVO; | |
| 13 | -import cn.iocoder.yudao.module.trade.controller.admin.aftersale.vo.TradeAfterSaleRefuseReqVO; | |
| 14 | -import cn.iocoder.yudao.module.trade.controller.admin.aftersale.vo.log.TradeAfterSaleLogRespVO; | |
| 15 | -import cn.iocoder.yudao.module.trade.controller.app.aftersale.vo.AppTradeAfterSaleCreateReqVO; | |
| 16 | -import cn.iocoder.yudao.module.trade.controller.app.aftersale.vo.AppTradeAfterSaleDeliveryReqVO; | |
| 17 | -import cn.iocoder.yudao.module.trade.convert.aftersale.TradeAfterSaleConvert; | |
| 18 | -import cn.iocoder.yudao.module.trade.dal.dataobject.aftersale.TradeAfterSaleDO; | |
| 19 | -import cn.iocoder.yudao.module.trade.dal.dataobject.aftersale.TradeAfterSaleLogDO; | |
| 10 | +import cn.iocoder.yudao.module.trade.controller.admin.aftersale.vo.AfterSaleDisagreeReqVO; | |
| 11 | +import cn.iocoder.yudao.module.trade.controller.admin.aftersale.vo.AfterSalePageReqVO; | |
| 12 | +import cn.iocoder.yudao.module.trade.controller.admin.aftersale.vo.AfterSaleRefuseReqVO; | |
| 13 | +import cn.iocoder.yudao.module.trade.controller.app.aftersale.vo.AppAfterSaleCreateReqVO; | |
| 14 | +import cn.iocoder.yudao.module.trade.controller.app.aftersale.vo.AppAfterSaleDeliveryReqVO; | |
| 15 | +import cn.iocoder.yudao.module.trade.convert.aftersale.AfterSaleConvert; | |
| 16 | +import cn.iocoder.yudao.module.trade.dal.dataobject.aftersale.AfterSaleDO; | |
| 20 | 17 | import cn.iocoder.yudao.module.trade.dal.dataobject.delivery.DeliveryExpressDO; |
| 21 | 18 | import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO; |
| 22 | 19 | import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderItemDO; |
| 23 | -import cn.iocoder.yudao.module.trade.dal.mysql.aftersale.TradeAfterSaleLogMapper; | |
| 24 | -import cn.iocoder.yudao.module.trade.dal.mysql.aftersale.TradeAfterSaleMapper; | |
| 20 | +import cn.iocoder.yudao.module.trade.dal.mysql.aftersale.AfterSaleMapper; | |
| 21 | +import cn.iocoder.yudao.module.trade.dal.redis.no.TradeNoRedisDAO; | |
| 25 | 22 | import cn.iocoder.yudao.module.trade.enums.aftersale.AfterSaleOperateTypeEnum; |
| 26 | -import cn.iocoder.yudao.module.trade.enums.aftersale.TradeAfterSaleStatusEnum; | |
| 27 | -import cn.iocoder.yudao.module.trade.enums.aftersale.TradeAfterSaleTypeEnum; | |
| 28 | -import cn.iocoder.yudao.module.trade.enums.aftersale.TradeAfterSaleWayEnum; | |
| 23 | +import cn.iocoder.yudao.module.trade.enums.aftersale.AfterSaleStatusEnum; | |
| 24 | +import cn.iocoder.yudao.module.trade.enums.aftersale.AfterSaleTypeEnum; | |
| 25 | +import cn.iocoder.yudao.module.trade.enums.aftersale.AfterSaleWayEnum; | |
| 29 | 26 | import cn.iocoder.yudao.module.trade.enums.order.TradeOrderItemAfterSaleStatusEnum; |
| 30 | 27 | import cn.iocoder.yudao.module.trade.enums.order.TradeOrderStatusEnum; |
| 31 | -import cn.iocoder.yudao.module.trade.framework.aftersalelog.core.annotations.AfterSaleLog; | |
| 32 | -import cn.iocoder.yudao.module.trade.framework.aftersalelog.core.dto.TradeAfterSaleLogCreateReqDTO; | |
| 33 | -import cn.iocoder.yudao.module.trade.framework.aftersalelog.core.service.AfterSaleLogService; | |
| 34 | -import cn.iocoder.yudao.module.trade.framework.aftersalelog.core.util.AfterSaleLogUtils; | |
| 28 | +import cn.iocoder.yudao.module.trade.framework.aftersale.core.annotations.AfterSaleLog; | |
| 29 | +import cn.iocoder.yudao.module.trade.framework.aftersale.core.utils.AfterSaleLogUtils; | |
| 35 | 30 | import cn.iocoder.yudao.module.trade.framework.order.config.TradeOrderProperties; |
| 36 | 31 | import cn.iocoder.yudao.module.trade.service.delivery.DeliveryExpressService; |
| 37 | 32 | import cn.iocoder.yudao.module.trade.service.order.TradeOrderQueryService; |
| 38 | 33 | import cn.iocoder.yudao.module.trade.service.order.TradeOrderUpdateService; |
| 39 | 34 | import lombok.extern.slf4j.Slf4j; |
| 40 | -import org.springframework.scheduling.annotation.Async; | |
| 41 | 35 | import org.springframework.stereotype.Service; |
| 42 | 36 | import org.springframework.transaction.annotation.Transactional; |
| 43 | 37 | import org.springframework.transaction.support.TransactionSynchronization; |
| ... | ... | @@ -46,10 +40,8 @@ import org.springframework.validation.annotation.Validated; |
| 46 | 40 | |
| 47 | 41 | import javax.annotation.Resource; |
| 48 | 42 | import java.time.LocalDateTime; |
| 49 | -import java.util.List; | |
| 50 | 43 | |
| 51 | 44 | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; |
| 52 | -import static cn.iocoder.yudao.framework.common.util.json.JsonUtils.toJsonString; | |
| 53 | 45 | import static cn.iocoder.yudao.module.trade.enums.ErrorCodeConstants.*; |
| 54 | 46 | |
| 55 | 47 | /** |
| ... | ... | @@ -60,7 +52,7 @@ import static cn.iocoder.yudao.module.trade.enums.ErrorCodeConstants.*; |
| 60 | 52 | @Slf4j |
| 61 | 53 | @Service |
| 62 | 54 | @Validated |
| 63 | -public class TradeAfterSaleServiceImpl implements TradeAfterSaleService, AfterSaleLogService { | |
| 55 | +public class AfterSaleServiceImpl implements AfterSaleService { | |
| 64 | 56 | |
| 65 | 57 | @Resource |
| 66 | 58 | private TradeOrderUpdateService tradeOrderUpdateService; |
| ... | ... | @@ -70,9 +62,9 @@ public class TradeAfterSaleServiceImpl implements TradeAfterSaleService, AfterSa |
| 70 | 62 | private DeliveryExpressService deliveryExpressService; |
| 71 | 63 | |
| 72 | 64 | @Resource |
| 73 | - private TradeAfterSaleMapper tradeAfterSaleMapper; | |
| 65 | + private AfterSaleMapper tradeAfterSaleMapper; | |
| 74 | 66 | @Resource |
| 75 | - private TradeAfterSaleLogMapper tradeAfterSaleLogMapper; | |
| 67 | + private TradeNoRedisDAO tradeNoRedisDAO; | |
| 76 | 68 | |
| 77 | 69 | @Resource |
| 78 | 70 | private PayRefundApi payRefundApi; |
| ... | ... | @@ -81,34 +73,34 @@ public class TradeAfterSaleServiceImpl implements TradeAfterSaleService, AfterSa |
| 81 | 73 | private TradeOrderProperties tradeOrderProperties; |
| 82 | 74 | |
| 83 | 75 | @Override |
| 84 | - public PageResult<TradeAfterSaleDO> getAfterSalePage(TradeAfterSalePageReqVO pageReqVO) { | |
| 76 | + public PageResult<AfterSaleDO> getAfterSalePage(AfterSalePageReqVO pageReqVO) { | |
| 85 | 77 | return tradeAfterSaleMapper.selectPage(pageReqVO); |
| 86 | 78 | } |
| 87 | 79 | |
| 88 | 80 | @Override |
| 89 | - public PageResult<TradeAfterSaleDO> getAfterSalePage(Long userId, PageParam pageParam) { | |
| 81 | + public PageResult<AfterSaleDO> getAfterSalePage(Long userId, PageParam pageParam) { | |
| 90 | 82 | return tradeAfterSaleMapper.selectPage(userId, pageParam); |
| 91 | 83 | } |
| 92 | 84 | |
| 93 | 85 | @Override |
| 94 | - public TradeAfterSaleDO getAfterSale(Long userId, Long id) { | |
| 86 | + public AfterSaleDO getAfterSale(Long userId, Long id) { | |
| 95 | 87 | return tradeAfterSaleMapper.selectByIdAndUserId(id, userId); |
| 96 | 88 | } |
| 97 | 89 | |
| 98 | 90 | @Override |
| 99 | - public TradeAfterSaleDO getAfterSale(Long id) { | |
| 91 | + public AfterSaleDO getAfterSale(Long id) { | |
| 100 | 92 | return tradeAfterSaleMapper.selectById(id); |
| 101 | 93 | } |
| 102 | 94 | |
| 103 | 95 | @Override |
| 104 | 96 | @Transactional(rollbackFor = Exception.class) |
| 105 | 97 | @AfterSaleLog(operateType = AfterSaleOperateTypeEnum.MEMBER_CREATE) |
| 106 | - public Long createAfterSale(Long userId, AppTradeAfterSaleCreateReqVO createReqVO) { | |
| 98 | + public Long createAfterSale(Long userId, AppAfterSaleCreateReqVO createReqVO) { | |
| 107 | 99 | // 第一步,前置校验 |
| 108 | 100 | TradeOrderItemDO tradeOrderItem = validateOrderItemApplicable(userId, createReqVO); |
| 109 | 101 | |
| 110 | 102 | // 第二步,存储售后订单 |
| 111 | - TradeAfterSaleDO afterSale = createAfterSale(createReqVO, tradeOrderItem); | |
| 103 | + AfterSaleDO afterSale = createAfterSale(createReqVO, tradeOrderItem); | |
| 112 | 104 | return afterSale.getId(); |
| 113 | 105 | } |
| 114 | 106 | |
| ... | ... | @@ -119,7 +111,7 @@ public class TradeAfterSaleServiceImpl implements TradeAfterSaleService, AfterSa |
| 119 | 111 | * @param createReqVO 售后创建信息 |
| 120 | 112 | * @return 交易订单项 |
| 121 | 113 | */ |
| 122 | - private TradeOrderItemDO validateOrderItemApplicable(Long userId, AppTradeAfterSaleCreateReqVO createReqVO) { | |
| 114 | + private TradeOrderItemDO validateOrderItemApplicable(Long userId, AppAfterSaleCreateReqVO createReqVO) { | |
| 123 | 115 | // 校验订单项存在 |
| 124 | 116 | TradeOrderItemDO orderItem = tradeOrderQueryService.getOrderItem(userId, createReqVO.getOrderItemId()); |
| 125 | 117 | if (orderItem == null) { |
| ... | ... | @@ -149,24 +141,24 @@ public class TradeAfterSaleServiceImpl implements TradeAfterSaleService, AfterSa |
| 149 | 141 | throw exception(AFTER_SALE_CREATE_FAIL_ORDER_STATUS_NO_PAID); |
| 150 | 142 | } |
| 151 | 143 | // 如果是【退货退款】的情况,需要额外校验是否发货 |
| 152 | - if (createReqVO.getWay().equals(TradeAfterSaleWayEnum.RETURN_AND_REFUND.getWay()) | |
| 144 | + if (createReqVO.getWay().equals(AfterSaleWayEnum.RETURN_AND_REFUND.getWay()) | |
| 153 | 145 | && !TradeOrderStatusEnum.haveDelivered(order.getStatus())) { |
| 154 | 146 | throw exception(AFTER_SALE_CREATE_FAIL_ORDER_STATUS_NO_DELIVERED); |
| 155 | 147 | } |
| 156 | 148 | return orderItem; |
| 157 | 149 | } |
| 158 | 150 | |
| 159 | - private TradeAfterSaleDO createAfterSale(AppTradeAfterSaleCreateReqVO createReqVO, | |
| 160 | - TradeOrderItemDO orderItem) { | |
| 151 | + private AfterSaleDO createAfterSale(AppAfterSaleCreateReqVO createReqVO, | |
| 152 | + TradeOrderItemDO orderItem) { | |
| 161 | 153 | // 创建售后单 |
| 162 | - TradeAfterSaleDO afterSale = TradeAfterSaleConvert.INSTANCE.convert(createReqVO, orderItem); | |
| 163 | - afterSale.setNo(RandomUtil.randomString(10)); // TODO 芋艿:优化 no 生成逻辑 | |
| 164 | - afterSale.setStatus(TradeAfterSaleStatusEnum.APPLY.getStatus()); | |
| 154 | + AfterSaleDO afterSale = AfterSaleConvert.INSTANCE.convert(createReqVO, orderItem); | |
| 155 | + afterSale.setNo(tradeNoRedisDAO.generate(TradeNoRedisDAO.AFTER_SALE_NO_PREFIX)); | |
| 156 | + afterSale.setStatus(AfterSaleStatusEnum.APPLY.getStatus()); | |
| 165 | 157 | // 标记是售中还是售后 |
| 166 | 158 | TradeOrderDO order = tradeOrderQueryService.getOrder(orderItem.getUserId(), orderItem.getOrderId()); |
| 167 | 159 | afterSale.setOrderNo(order.getNo()); // 记录 orderNo 订单流水,方便后续检索 |
| 168 | 160 | afterSale.setType(TradeOrderStatusEnum.isCompleted(order.getStatus()) |
| 169 | - ? TradeAfterSaleTypeEnum.AFTER_SALE.getType() : TradeAfterSaleTypeEnum.IN_SALE.getType()); | |
| 161 | + ? AfterSaleTypeEnum.AFTER_SALE.getType() : AfterSaleTypeEnum.IN_SALE.getType()); | |
| 170 | 162 | tradeAfterSaleMapper.insert(afterSale); |
| 171 | 163 | |
| 172 | 164 | // 更新交易订单项的售后状态 |
| ... | ... | @@ -174,7 +166,7 @@ public class TradeAfterSaleServiceImpl implements TradeAfterSaleService, AfterSa |
| 174 | 166 | |
| 175 | 167 | // 记录售后日志 |
| 176 | 168 | AfterSaleLogUtils.setAfterSaleInfo(afterSale.getId(), null, |
| 177 | - TradeAfterSaleStatusEnum.APPLY.getStatus()); | |
| 169 | + AfterSaleStatusEnum.APPLY.getStatus()); | |
| 178 | 170 | |
| 179 | 171 | // TODO 发送售后消息 |
| 180 | 172 | return afterSale; |
| ... | ... | @@ -185,14 +177,14 @@ public class TradeAfterSaleServiceImpl implements TradeAfterSaleService, AfterSa |
| 185 | 177 | @AfterSaleLog(operateType = AfterSaleOperateTypeEnum.ADMIN_AGREE_APPLY) |
| 186 | 178 | public void agreeAfterSale(Long userId, Long id) { |
| 187 | 179 | // 校验售后单存在,并状态未审批 |
| 188 | - TradeAfterSaleDO afterSale = validateAfterSaleAuditable(id); | |
| 180 | + AfterSaleDO afterSale = validateAfterSaleAuditable(id); | |
| 189 | 181 | |
| 190 | 182 | // 更新售后单的状态 |
| 191 | 183 | // 情况一:退款:标记为 WAIT_REFUND 状态。后续等退款发起成功后,在标记为 COMPLETE 状态 |
| 192 | 184 | // 情况二:退货退款:需要等用户退货后,才能发起退款 |
| 193 | - Integer newStatus = afterSale.getWay().equals(TradeAfterSaleWayEnum.REFUND.getWay()) ? | |
| 194 | - TradeAfterSaleStatusEnum.WAIT_REFUND.getStatus() : TradeAfterSaleStatusEnum.SELLER_AGREE.getStatus(); | |
| 195 | - updateAfterSaleStatus(afterSale.getId(), TradeAfterSaleStatusEnum.APPLY.getStatus(), new TradeAfterSaleDO() | |
| 185 | + Integer newStatus = afterSale.getWay().equals(AfterSaleWayEnum.REFUND.getWay()) ? | |
| 186 | + AfterSaleStatusEnum.WAIT_REFUND.getStatus() : AfterSaleStatusEnum.SELLER_AGREE.getStatus(); | |
| 187 | + updateAfterSaleStatus(afterSale.getId(), AfterSaleStatusEnum.APPLY.getStatus(), new AfterSaleDO() | |
| 196 | 188 | .setStatus(newStatus).setAuditUserId(userId).setAuditTime(LocalDateTime.now())); |
| 197 | 189 | |
| 198 | 190 | // 记录售后日志 |
| ... | ... | @@ -204,13 +196,13 @@ public class TradeAfterSaleServiceImpl implements TradeAfterSaleService, AfterSa |
| 204 | 196 | @Override |
| 205 | 197 | @Transactional(rollbackFor = Exception.class) |
| 206 | 198 | @AfterSaleLog(operateType = AfterSaleOperateTypeEnum.ADMIN_DISAGREE_APPLY) |
| 207 | - public void disagreeAfterSale(Long userId, TradeAfterSaleDisagreeReqVO auditReqVO) { | |
| 199 | + public void disagreeAfterSale(Long userId, AfterSaleDisagreeReqVO auditReqVO) { | |
| 208 | 200 | // 校验售后单存在,并状态未审批 |
| 209 | - TradeAfterSaleDO afterSale = validateAfterSaleAuditable(auditReqVO.getId()); | |
| 201 | + AfterSaleDO afterSale = validateAfterSaleAuditable(auditReqVO.getId()); | |
| 210 | 202 | |
| 211 | 203 | // 更新售后单的状态 |
| 212 | - Integer newStatus = TradeAfterSaleStatusEnum.SELLER_DISAGREE.getStatus(); | |
| 213 | - updateAfterSaleStatus(afterSale.getId(), TradeAfterSaleStatusEnum.APPLY.getStatus(), new TradeAfterSaleDO() | |
| 204 | + Integer newStatus = AfterSaleStatusEnum.SELLER_DISAGREE.getStatus(); | |
| 205 | + updateAfterSaleStatus(afterSale.getId(), AfterSaleStatusEnum.APPLY.getStatus(), new AfterSaleDO() | |
| 214 | 206 | .setStatus(newStatus).setAuditUserId(userId).setAuditTime(LocalDateTime.now()) |
| 215 | 207 | .setAuditReason(auditReqVO.getAuditReason())); |
| 216 | 208 | |
| ... | ... | @@ -229,18 +221,18 @@ public class TradeAfterSaleServiceImpl implements TradeAfterSaleService, AfterSa |
| 229 | 221 | * @param id 售后编号 |
| 230 | 222 | * @return 售后单 |
| 231 | 223 | */ |
| 232 | - private TradeAfterSaleDO validateAfterSaleAuditable(Long id) { | |
| 233 | - TradeAfterSaleDO afterSale = tradeAfterSaleMapper.selectById(id); | |
| 224 | + private AfterSaleDO validateAfterSaleAuditable(Long id) { | |
| 225 | + AfterSaleDO afterSale = tradeAfterSaleMapper.selectById(id); | |
| 234 | 226 | if (afterSale == null) { |
| 235 | 227 | throw exception(AFTER_SALE_NOT_FOUND); |
| 236 | 228 | } |
| 237 | - if (ObjectUtil.notEqual(afterSale.getStatus(), TradeAfterSaleStatusEnum.APPLY.getStatus())) { | |
| 229 | + if (ObjectUtil.notEqual(afterSale.getStatus(), AfterSaleStatusEnum.APPLY.getStatus())) { | |
| 238 | 230 | throw exception(AFTER_SALE_AUDIT_FAIL_STATUS_NOT_APPLY); |
| 239 | 231 | } |
| 240 | 232 | return afterSale; |
| 241 | 233 | } |
| 242 | 234 | |
| 243 | - private void updateAfterSaleStatus(Long id, Integer status, TradeAfterSaleDO updateObj) { | |
| 235 | + private void updateAfterSaleStatus(Long id, Integer status, AfterSaleDO updateObj) { | |
| 244 | 236 | int updateCount = tradeAfterSaleMapper.updateByIdAndStatus(id, status, updateObj); |
| 245 | 237 | if (updateCount == 0) { |
| 246 | 238 | throw exception(AFTER_SALE_UPDATE_STATUS_FAIL); |
| ... | ... | @@ -250,26 +242,26 @@ public class TradeAfterSaleServiceImpl implements TradeAfterSaleService, AfterSa |
| 250 | 242 | @Override |
| 251 | 243 | @Transactional(rollbackFor = Exception.class) |
| 252 | 244 | @AfterSaleLog(operateType = AfterSaleOperateTypeEnum.MEMBER_DELIVERY) |
| 253 | - public void deliveryAfterSale(Long userId, AppTradeAfterSaleDeliveryReqVO deliveryReqVO) { | |
| 245 | + public void deliveryAfterSale(Long userId, AppAfterSaleDeliveryReqVO deliveryReqVO) { | |
| 254 | 246 | // 校验售后单存在,并状态未退货 |
| 255 | - TradeAfterSaleDO afterSale = tradeAfterSaleMapper.selectById(deliveryReqVO.getId()); | |
| 247 | + AfterSaleDO afterSale = tradeAfterSaleMapper.selectById(deliveryReqVO.getId()); | |
| 256 | 248 | if (afterSale == null) { |
| 257 | 249 | throw exception(AFTER_SALE_NOT_FOUND); |
| 258 | 250 | } |
| 259 | - if (ObjectUtil.notEqual(afterSale.getStatus(), TradeAfterSaleStatusEnum.SELLER_AGREE.getStatus())) { | |
| 251 | + if (ObjectUtil.notEqual(afterSale.getStatus(), AfterSaleStatusEnum.SELLER_AGREE.getStatus())) { | |
| 260 | 252 | throw exception(AFTER_SALE_DELIVERY_FAIL_STATUS_NOT_SELLER_AGREE); |
| 261 | 253 | } |
| 262 | 254 | DeliveryExpressDO express = deliveryExpressService.validateDeliveryExpress(deliveryReqVO.getLogisticsId()); |
| 263 | 255 | |
| 264 | 256 | // 更新售后单的物流信息 |
| 265 | - updateAfterSaleStatus(afterSale.getId(), TradeAfterSaleStatusEnum.SELLER_AGREE.getStatus(), new TradeAfterSaleDO() | |
| 266 | - .setStatus(TradeAfterSaleStatusEnum.BUYER_DELIVERY.getStatus()) | |
| 257 | + updateAfterSaleStatus(afterSale.getId(), AfterSaleStatusEnum.SELLER_AGREE.getStatus(), new AfterSaleDO() | |
| 258 | + .setStatus(AfterSaleStatusEnum.BUYER_DELIVERY.getStatus()) | |
| 267 | 259 | .setLogisticsId(deliveryReqVO.getLogisticsId()).setLogisticsNo(deliveryReqVO.getLogisticsNo()) |
| 268 | 260 | .setDeliveryTime(LocalDateTime.now())); |
| 269 | 261 | |
| 270 | 262 | // 记录售后日志 |
| 271 | 263 | AfterSaleLogUtils.setAfterSaleInfo(afterSale.getId(), afterSale.getStatus(), |
| 272 | - TradeAfterSaleStatusEnum.BUYER_DELIVERY.getStatus(), | |
| 264 | + AfterSaleStatusEnum.BUYER_DELIVERY.getStatus(), | |
| 273 | 265 | MapUtil.<String, Object>builder().put("expressName", express.getName()) |
| 274 | 266 | .put("logisticsNo", deliveryReqVO.getLogisticsNo()).build()); |
| 275 | 267 | |
| ... | ... | @@ -281,15 +273,15 @@ public class TradeAfterSaleServiceImpl implements TradeAfterSaleService, AfterSa |
| 281 | 273 | @AfterSaleLog(operateType = AfterSaleOperateTypeEnum.ADMIN_AGREE_RECEIVE) |
| 282 | 274 | public void receiveAfterSale(Long userId, Long id) { |
| 283 | 275 | // 校验售后单存在,并状态为已退货 |
| 284 | - TradeAfterSaleDO afterSale = validateAfterSaleReceivable(id); | |
| 276 | + AfterSaleDO afterSale = validateAfterSaleReceivable(id); | |
| 285 | 277 | |
| 286 | 278 | // 更新售后单的状态 |
| 287 | - updateAfterSaleStatus(afterSale.getId(), TradeAfterSaleStatusEnum.BUYER_DELIVERY.getStatus(), new TradeAfterSaleDO() | |
| 288 | - .setStatus(TradeAfterSaleStatusEnum.WAIT_REFUND.getStatus()).setReceiveTime(LocalDateTime.now())); | |
| 279 | + updateAfterSaleStatus(afterSale.getId(), AfterSaleStatusEnum.BUYER_DELIVERY.getStatus(), new AfterSaleDO() | |
| 280 | + .setStatus(AfterSaleStatusEnum.WAIT_REFUND.getStatus()).setReceiveTime(LocalDateTime.now())); | |
| 289 | 281 | |
| 290 | 282 | // 记录售后日志 |
| 291 | 283 | AfterSaleLogUtils.setAfterSaleInfo(afterSale.getId(), afterSale.getStatus(), |
| 292 | - TradeAfterSaleStatusEnum.WAIT_REFUND.getStatus()); | |
| 284 | + AfterSaleStatusEnum.WAIT_REFUND.getStatus()); | |
| 293 | 285 | |
| 294 | 286 | // TODO 发送售后消息 |
| 295 | 287 | } |
| ... | ... | @@ -297,24 +289,24 @@ public class TradeAfterSaleServiceImpl implements TradeAfterSaleService, AfterSa |
| 297 | 289 | @Override |
| 298 | 290 | @Transactional(rollbackFor = Exception.class) |
| 299 | 291 | @AfterSaleLog(operateType = AfterSaleOperateTypeEnum.ADMIN_DISAGREE_RECEIVE) |
| 300 | - public void refuseAfterSale(Long userId, TradeAfterSaleRefuseReqVO refuseReqVO) { | |
| 292 | + public void refuseAfterSale(Long userId, AfterSaleRefuseReqVO refuseReqVO) { | |
| 301 | 293 | // 校验售后单存在,并状态为已退货 |
| 302 | - TradeAfterSaleDO afterSale = tradeAfterSaleMapper.selectById(refuseReqVO.getId()); | |
| 294 | + AfterSaleDO afterSale = tradeAfterSaleMapper.selectById(refuseReqVO.getId()); | |
| 303 | 295 | if (afterSale == null) { |
| 304 | 296 | throw exception(AFTER_SALE_NOT_FOUND); |
| 305 | 297 | } |
| 306 | - if (ObjectUtil.notEqual(afterSale.getStatus(), TradeAfterSaleStatusEnum.BUYER_DELIVERY.getStatus())) { | |
| 298 | + if (ObjectUtil.notEqual(afterSale.getStatus(), AfterSaleStatusEnum.BUYER_DELIVERY.getStatus())) { | |
| 307 | 299 | throw exception(AFTER_SALE_CONFIRM_FAIL_STATUS_NOT_BUYER_DELIVERY); |
| 308 | 300 | } |
| 309 | 301 | |
| 310 | 302 | // 更新售后单的状态 |
| 311 | - updateAfterSaleStatus(afterSale.getId(), TradeAfterSaleStatusEnum.BUYER_DELIVERY.getStatus(), new TradeAfterSaleDO() | |
| 312 | - .setStatus(TradeAfterSaleStatusEnum.SELLER_REFUSE.getStatus()).setReceiveTime(LocalDateTime.now()) | |
| 303 | + updateAfterSaleStatus(afterSale.getId(), AfterSaleStatusEnum.BUYER_DELIVERY.getStatus(), new AfterSaleDO() | |
| 304 | + .setStatus(AfterSaleStatusEnum.SELLER_REFUSE.getStatus()).setReceiveTime(LocalDateTime.now()) | |
| 313 | 305 | .setReceiveReason(refuseReqVO.getRefuseMemo())); |
| 314 | 306 | |
| 315 | 307 | // 记录售后日志 |
| 316 | 308 | AfterSaleLogUtils.setAfterSaleInfo(afterSale.getId(), afterSale.getStatus(), |
| 317 | - TradeAfterSaleStatusEnum.SELLER_REFUSE.getStatus(), | |
| 309 | + AfterSaleStatusEnum.SELLER_REFUSE.getStatus(), | |
| 318 | 310 | MapUtil.of("reason", refuseReqVO.getRefuseMemo())); |
| 319 | 311 | |
| 320 | 312 | // TODO 发送售后消息 |
| ... | ... | @@ -329,12 +321,12 @@ public class TradeAfterSaleServiceImpl implements TradeAfterSaleService, AfterSa |
| 329 | 321 | * @param id 售后编号 |
| 330 | 322 | * @return 售后单 |
| 331 | 323 | */ |
| 332 | - private TradeAfterSaleDO validateAfterSaleReceivable(Long id) { | |
| 333 | - TradeAfterSaleDO afterSale = tradeAfterSaleMapper.selectById(id); | |
| 324 | + private AfterSaleDO validateAfterSaleReceivable(Long id) { | |
| 325 | + AfterSaleDO afterSale = tradeAfterSaleMapper.selectById(id); | |
| 334 | 326 | if (afterSale == null) { |
| 335 | 327 | throw exception(AFTER_SALE_NOT_FOUND); |
| 336 | 328 | } |
| 337 | - if (ObjectUtil.notEqual(afterSale.getStatus(), TradeAfterSaleStatusEnum.BUYER_DELIVERY.getStatus())) { | |
| 329 | + if (ObjectUtil.notEqual(afterSale.getStatus(), AfterSaleStatusEnum.BUYER_DELIVERY.getStatus())) { | |
| 338 | 330 | throw exception(AFTER_SALE_CONFIRM_FAIL_STATUS_NOT_BUYER_DELIVERY); |
| 339 | 331 | } |
| 340 | 332 | return afterSale; |
| ... | ... | @@ -345,11 +337,11 @@ public class TradeAfterSaleServiceImpl implements TradeAfterSaleService, AfterSa |
| 345 | 337 | @AfterSaleLog(operateType = AfterSaleOperateTypeEnum.ADMIN_REFUND) |
| 346 | 338 | public void refundAfterSale(Long userId, String userIp, Long id) { |
| 347 | 339 | // 校验售后单的状态,并状态待退款 |
| 348 | - TradeAfterSaleDO afterSale = tradeAfterSaleMapper.selectById(id); | |
| 340 | + AfterSaleDO afterSale = tradeAfterSaleMapper.selectById(id); | |
| 349 | 341 | if (afterSale == null) { |
| 350 | 342 | throw exception(AFTER_SALE_NOT_FOUND); |
| 351 | 343 | } |
| 352 | - if (ObjectUtil.notEqual(afterSale.getStatus(), TradeAfterSaleStatusEnum.WAIT_REFUND.getStatus())) { | |
| 344 | + if (ObjectUtil.notEqual(afterSale.getStatus(), AfterSaleStatusEnum.WAIT_REFUND.getStatus())) { | |
| 353 | 345 | throw exception(AFTER_SALE_REFUND_FAIL_STATUS_NOT_WAIT_REFUND); |
| 354 | 346 | } |
| 355 | 347 | |
| ... | ... | @@ -357,12 +349,12 @@ public class TradeAfterSaleServiceImpl implements TradeAfterSaleService, AfterSa |
| 357 | 349 | createPayRefund(userIp, afterSale); |
| 358 | 350 | |
| 359 | 351 | // 更新售后单的状态为【已完成】 |
| 360 | - updateAfterSaleStatus(afterSale.getId(), TradeAfterSaleStatusEnum.WAIT_REFUND.getStatus(), new TradeAfterSaleDO() | |
| 361 | - .setStatus(TradeAfterSaleStatusEnum.COMPLETE.getStatus()).setRefundTime(LocalDateTime.now())); | |
| 352 | + updateAfterSaleStatus(afterSale.getId(), AfterSaleStatusEnum.WAIT_REFUND.getStatus(), new AfterSaleDO() | |
| 353 | + .setStatus(AfterSaleStatusEnum.COMPLETE.getStatus()).setRefundTime(LocalDateTime.now())); | |
| 362 | 354 | |
| 363 | 355 | // 记录售后日志 |
| 364 | 356 | AfterSaleLogUtils.setAfterSaleInfo(afterSale.getId(), afterSale.getStatus(), |
| 365 | - TradeAfterSaleStatusEnum.COMPLETE.getStatus()); | |
| 357 | + AfterSaleStatusEnum.COMPLETE.getStatus()); | |
| 366 | 358 | |
| 367 | 359 | // TODO 发送售后消息 |
| 368 | 360 | |
| ... | ... | @@ -370,16 +362,16 @@ public class TradeAfterSaleServiceImpl implements TradeAfterSaleService, AfterSa |
| 370 | 362 | tradeOrderUpdateService.updateOrderItemWhenAfterSaleSuccess(afterSale.getOrderItemId(), afterSale.getRefundPrice()); |
| 371 | 363 | } |
| 372 | 364 | |
| 373 | - private void createPayRefund(String userIp, TradeAfterSaleDO afterSale) { | |
| 365 | + private void createPayRefund(String userIp, AfterSaleDO afterSale) { | |
| 374 | 366 | TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() { |
| 375 | 367 | |
| 376 | 368 | @Override |
| 377 | 369 | public void afterCommit() { |
| 378 | 370 | // 创建退款单 |
| 379 | - PayRefundCreateReqDTO createReqDTO = TradeAfterSaleConvert.INSTANCE.convert(userIp, afterSale, tradeOrderProperties); | |
| 371 | + PayRefundCreateReqDTO createReqDTO = AfterSaleConvert.INSTANCE.convert(userIp, afterSale, tradeOrderProperties); | |
| 380 | 372 | Long payRefundId = payRefundApi.createRefund(createReqDTO); |
| 381 | 373 | // 更新售后单的退款单号 |
| 382 | - tradeAfterSaleMapper.updateById(new TradeAfterSaleDO().setId(afterSale.getId()).setPayRefundId(payRefundId)); | |
| 374 | + tradeAfterSaleMapper.updateById(new AfterSaleDO().setId(afterSale.getId()).setPayRefundId(payRefundId)); | |
| 383 | 375 | } |
| 384 | 376 | }); |
| 385 | 377 | } |
| ... | ... | @@ -389,23 +381,23 @@ public class TradeAfterSaleServiceImpl implements TradeAfterSaleService, AfterSa |
| 389 | 381 | @AfterSaleLog(operateType = AfterSaleOperateTypeEnum.MEMBER_CANCEL) |
| 390 | 382 | public void cancelAfterSale(Long userId, Long id) { |
| 391 | 383 | // 校验售后单的状态,并状态待退款 |
| 392 | - TradeAfterSaleDO afterSale = tradeAfterSaleMapper.selectById(id); | |
| 384 | + AfterSaleDO afterSale = tradeAfterSaleMapper.selectById(id); | |
| 393 | 385 | if (afterSale == null) { |
| 394 | 386 | throw exception(AFTER_SALE_NOT_FOUND); |
| 395 | 387 | } |
| 396 | - if (!ObjectUtils.equalsAny(afterSale.getStatus(), TradeAfterSaleStatusEnum.APPLY.getStatus(), | |
| 397 | - TradeAfterSaleStatusEnum.SELLER_AGREE.getStatus(), | |
| 398 | - TradeAfterSaleStatusEnum.BUYER_DELIVERY.getStatus())) { | |
| 388 | + if (!ObjectUtils.equalsAny(afterSale.getStatus(), AfterSaleStatusEnum.APPLY.getStatus(), | |
| 389 | + AfterSaleStatusEnum.SELLER_AGREE.getStatus(), | |
| 390 | + AfterSaleStatusEnum.BUYER_DELIVERY.getStatus())) { | |
| 399 | 391 | throw exception(AFTER_SALE_CANCEL_FAIL_STATUS_NOT_APPLY_OR_AGREE_OR_BUYER_DELIVERY); |
| 400 | 392 | } |
| 401 | 393 | |
| 402 | 394 | // 更新售后单的状态为【已取消】 |
| 403 | - updateAfterSaleStatus(afterSale.getId(), afterSale.getStatus(), new TradeAfterSaleDO() | |
| 404 | - .setStatus(TradeAfterSaleStatusEnum.BUYER_CANCEL.getStatus())); | |
| 395 | + updateAfterSaleStatus(afterSale.getId(), afterSale.getStatus(), new AfterSaleDO() | |
| 396 | + .setStatus(AfterSaleStatusEnum.BUYER_CANCEL.getStatus())); | |
| 405 | 397 | |
| 406 | 398 | // 记录售后日志 |
| 407 | 399 | AfterSaleLogUtils.setAfterSaleInfo(afterSale.getId(), afterSale.getStatus(), |
| 408 | - TradeAfterSaleStatusEnum.BUYER_CANCEL.getStatus()); | |
| 400 | + AfterSaleStatusEnum.BUYER_CANCEL.getStatus()); | |
| 409 | 401 | |
| 410 | 402 | // TODO 发送售后消息 |
| 411 | 403 | |
| ... | ... | @@ -415,52 +407,7 @@ public class TradeAfterSaleServiceImpl implements TradeAfterSaleService, AfterSa |
| 415 | 407 | |
| 416 | 408 | @Override |
| 417 | 409 | public Long getApplyingAfterSaleCount(Long userId) { |
| 418 | - return tradeAfterSaleMapper.selectCountByUserIdAndStatus(userId, TradeAfterSaleStatusEnum.APPLYING_STATUSES); | |
| 419 | - } | |
| 420 | - | |
| 421 | - @Deprecated | |
| 422 | - private void createAfterSaleLog(Long userId, Integer userType, TradeAfterSaleDO afterSale, | |
| 423 | - Integer beforeStatus, Integer afterStatus) { | |
| 424 | - TradeAfterSaleLogCreateReqDTO logDTO = new TradeAfterSaleLogCreateReqDTO() | |
| 425 | - .setUserId(userId) | |
| 426 | - .setUserType(userType) | |
| 427 | - .setAfterSaleId(afterSale.getId()) | |
| 428 | - .setOperateType(afterStatus.toString()); | |
| 429 | - // TODO 废弃,待删除 | |
| 430 | - this.createLog(logDTO); | |
| 431 | - } | |
| 432 | - | |
| 433 | - // TODO @CHENCHEN:这个注释,写在接口就好了,补充重复写哈;@date 应该是 @since | |
| 434 | - /** | |
| 435 | - * 日志记录 | |
| 436 | - * | |
| 437 | - * @param logDTO 日志记录 | |
| 438 | - * @author 陈賝 | |
| 439 | - * @date 2023/6/12 14:18 | |
| 440 | - */ | |
| 441 | - @Override | |
| 442 | - @Async | |
| 443 | - public void createLog(TradeAfterSaleLogCreateReqDTO logDTO) { | |
| 444 | - try { | |
| 445 | - TradeAfterSaleLogDO afterSaleLog = new TradeAfterSaleLogDO() | |
| 446 | - .setUserId(logDTO.getUserId()) | |
| 447 | - .setUserType(logDTO.getUserType()) | |
| 448 | - .setAfterSaleId(logDTO.getAfterSaleId()) | |
| 449 | - .setOperateType(logDTO.getOperateType()) | |
| 450 | - .setContent(logDTO.getContent()); | |
| 451 | - tradeAfterSaleLogMapper.insert(afterSaleLog); | |
| 452 | - // TODO @CHENCHEN:代码排版哈;空格要正确 | |
| 453 | - }catch (Exception exception){ | |
| 454 | - log.error("[createLog][request({}) 日志记录错误]", toJsonString(logDTO), exception); | |
| 455 | - } | |
| 456 | - } | |
| 457 | - | |
| 458 | - // TODO @puhui999:应该返回 do 哈。 | |
| 459 | - @Override | |
| 460 | - public List<TradeAfterSaleLogRespVO> getLog(Long afterSaleId) { | |
| 461 | - // TODO 不熟悉流程先这么滴 | |
| 462 | - List<TradeAfterSaleLogDO> saleLogDOs = tradeAfterSaleLogMapper.selectList(TradeAfterSaleLogDO::getAfterSaleId, afterSaleId); | |
| 463 | - return TradeAfterSaleConvert.INSTANCE.convertList(saleLogDOs); | |
| 410 | + return tradeAfterSaleMapper.selectCountByUserIdAndStatus(userId, AfterSaleStatusEnum.APPLYING_STATUSES); | |
| 464 | 411 | } |
| 465 | 412 | |
| 466 | 413 | } | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/framework/aftersalelog/core/dto/TradeAfterSaleLogCreateReqDTO.java renamed to yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/aftersale/bo/AfterSaleLogCreateReqBO.java
| 1 | -package cn.iocoder.yudao.module.trade.framework.aftersalelog.core.dto; | |
| 1 | +package cn.iocoder.yudao.module.trade.service.aftersale.bo; | |
| 2 | 2 | |
| 3 | 3 | import lombok.AllArgsConstructor; |
| 4 | 4 | import lombok.Data; |
| 5 | 5 | import lombok.NoArgsConstructor; |
| 6 | 6 | |
| 7 | +import javax.validation.constraints.NotEmpty; | |
| 8 | +import javax.validation.constraints.NotNull; | |
| 9 | + | |
| 7 | 10 | /** |
| 8 | - * 售后日志的创建 Request DTO | |
| 11 | + * 售后日志的创建 Request BO | |
| 9 | 12 | * |
| 10 | 13 | * @author 陈賝 |
| 11 | 14 | * @since 2023/6/19 09:54 |
| ... | ... | @@ -13,42 +16,42 @@ import lombok.NoArgsConstructor; |
| 13 | 16 | @Data |
| 14 | 17 | @NoArgsConstructor |
| 15 | 18 | @AllArgsConstructor |
| 16 | -public class TradeAfterSaleLogCreateReqDTO { | |
| 19 | +public class AfterSaleLogCreateReqBO { | |
| 17 | 20 | |
| 18 | 21 | /** |
| 19 | - * 编号 | |
| 20 | - */ | |
| 21 | - private Long id; | |
| 22 | - /** | |
| 23 | 22 | * 用户编号 |
| 24 | - * | |
| 25 | - * 关联 1:AdminUserDO 的 id 字段 | |
| 26 | - * 关联 2:MemberUserDO 的 id 字段 | |
| 27 | 23 | */ |
| 24 | + @NotNull(message = "用户编号不能为空") | |
| 28 | 25 | private Long userId; |
| 29 | 26 | /** |
| 30 | 27 | * 用户类型 |
| 31 | 28 | */ |
| 29 | + @NotNull(message = "用户类型不能为空") | |
| 32 | 30 | private Integer userType; |
| 31 | + | |
| 33 | 32 | /** |
| 34 | 33 | * 售后编号 |
| 35 | 34 | */ |
| 35 | + @NotNull(message = "售后编号不能为空") | |
| 36 | 36 | private Long afterSaleId; |
| 37 | 37 | /** |
| 38 | - * 操作类型 | |
| 38 | + * 操作前状态 | |
| 39 | 39 | */ |
| 40 | - private String operateType; | |
| 40 | + private Integer beforeStatus; | |
| 41 | 41 | /** |
| 42 | - * 操作明细 | |
| 42 | + * 操作后状态 | |
| 43 | 43 | */ |
| 44 | - private String content; | |
| 44 | + @NotNull(message = "操作后的状态不能为空") | |
| 45 | + private Integer afterStatus; | |
| 46 | + | |
| 45 | 47 | /** |
| 46 | - * 售前状态 | |
| 48 | + * 操作类型 | |
| 47 | 49 | */ |
| 48 | - private Integer beforeStatus; | |
| 50 | + @NotNull(message = "操作类型不能为空") | |
| 51 | + private Integer operateType; | |
| 49 | 52 | /** |
| 50 | - * 售后状态 | |
| 53 | + * 操作明细 | |
| 51 | 54 | */ |
| 52 | - private Integer afterStatus; | |
| 53 | - | |
| 55 | + @NotEmpty(message = "操作明细不能为空") | |
| 56 | + private String content; | |
| 54 | 57 | } | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderQueryService.java
| ... | ... | @@ -94,12 +94,12 @@ public interface TradeOrderQueryService { |
| 94 | 94 | TradeOrderItemDO getOrderItem(Long userId, Long itemId); |
| 95 | 95 | |
| 96 | 96 | /** |
| 97 | - * 根据交易订单项编号数组,查询交易订单项 | |
| 97 | + * 获得交易订单项 | |
| 98 | 98 | * |
| 99 | - * @param ids 交易订单项编号数组 | |
| 100 | - * @return 交易订单项数组 | |
| 99 | + * @param id 交易订单项编号 itemId | |
| 100 | + * @return 交易订单项 | |
| 101 | 101 | */ |
| 102 | - List<TradeOrderItemDO> getOrderItemList(Collection<Long> ids); | |
| 102 | + TradeOrderItemDO getOrderItem(Long id); | |
| 103 | 103 | |
| 104 | 104 | /** |
| 105 | 105 | * 根据交易订单编号,查询交易订单项 |
| ... | ... | @@ -119,5 +119,4 @@ public interface TradeOrderQueryService { |
| 119 | 119 | */ |
| 120 | 120 | List<TradeOrderItemDO> getOrderItemListByOrderId(Collection<Long> orderIds); |
| 121 | 121 | |
| 122 | - | |
| 123 | 122 | } | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderQueryServiceImpl.java
| ... | ... | @@ -156,8 +156,8 @@ public class TradeOrderQueryServiceImpl implements TradeOrderQueryService { |
| 156 | 156 | } |
| 157 | 157 | |
| 158 | 158 | @Override |
| 159 | - public List<TradeOrderItemDO> getOrderItemList(Collection<Long> ids) { | |
| 160 | - return tradeOrderItemMapper.selectBatchIds(ids); | |
| 159 | + public TradeOrderItemDO getOrderItem(Long id) { | |
| 160 | + return tradeOrderItemMapper.selectById(id); | |
| 161 | 161 | } |
| 162 | 162 | |
| 163 | 163 | @Override | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderUpdateServiceImpl.java
| ... | ... | @@ -47,7 +47,7 @@ import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO; |
| 47 | 47 | import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderItemDO; |
| 48 | 48 | import cn.iocoder.yudao.module.trade.dal.mysql.order.TradeOrderItemMapper; |
| 49 | 49 | import cn.iocoder.yudao.module.trade.dal.mysql.order.TradeOrderMapper; |
| 50 | -import cn.iocoder.yudao.module.trade.dal.redis.no.TradeOrderNoRedisDAO; | |
| 50 | +import cn.iocoder.yudao.module.trade.dal.redis.no.TradeNoRedisDAO; | |
| 51 | 51 | import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageRecordBizTypeEnum; |
| 52 | 52 | import cn.iocoder.yudao.module.trade.enums.delivery.DeliveryTypeEnum; |
| 53 | 53 | import cn.iocoder.yudao.module.trade.enums.order.*; |
| ... | ... | @@ -97,7 +97,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { |
| 97 | 97 | @Resource |
| 98 | 98 | private TradeOrderItemMapper tradeOrderItemMapper; |
| 99 | 99 | @Resource |
| 100 | - private TradeOrderNoRedisDAO orderNoRedisDAO; | |
| 100 | + private TradeNoRedisDAO tradeNoRedisDAO; | |
| 101 | 101 | |
| 102 | 102 | @Resource |
| 103 | 103 | private List<TradeOrderHandler> tradeOrderHandlers; |
| ... | ... | @@ -215,7 +215,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { |
| 215 | 215 | TradePriceCalculateRespBO calculateRespBO) { |
| 216 | 216 | TradeOrderDO order = TradeOrderConvert.INSTANCE.convert(userId, clientIp, createReqVO, calculateRespBO); |
| 217 | 217 | order.setType(calculateRespBO.getType()); |
| 218 | - order.setNo(orderNoRedisDAO.generate(TradeOrderNoRedisDAO.TRADE_ORDER_NO_PREFIX)); | |
| 218 | + order.setNo(tradeNoRedisDAO.generate(TradeNoRedisDAO.TRADE_ORDER_NO_PREFIX)); | |
| 219 | 219 | order.setStatus(TradeOrderStatusEnum.UNPAID.getStatus()); |
| 220 | 220 | order.setRefundStatus(TradeOrderRefundStatusEnum.NONE.getStatus()); |
| 221 | 221 | order.setProductCount(getSumValue(calculateRespBO.getItems(), TradePriceCalculateRespBO.OrderItem::getCount, Integer::sum)); | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/bo/logger/TradeOrderLogCreateReqBO.java
yudao-module-mall/yudao-module-trade-biz/src/test/java/cn/iocoder/yudao/module/trade/service/aftersale/TradeAfterSaleServiceTest.java renamed to yudao-module-mall/yudao-module-trade-biz/src/test/java/cn/iocoder/yudao/module/trade/service/aftersale/AfterSaleServiceTest.java
| ... | ... | @@ -4,17 +4,17 @@ import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; |
| 4 | 4 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 5 | 5 | import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; |
| 6 | 6 | import cn.iocoder.yudao.module.pay.api.refund.PayRefundApi; |
| 7 | -import cn.iocoder.yudao.module.trade.controller.admin.aftersale.vo.TradeAfterSalePageReqVO; | |
| 8 | -import cn.iocoder.yudao.module.trade.controller.app.aftersale.vo.AppTradeAfterSaleCreateReqVO; | |
| 9 | -import cn.iocoder.yudao.module.trade.dal.dataobject.aftersale.TradeAfterSaleDO; | |
| 10 | -import cn.iocoder.yudao.module.trade.dal.dataobject.aftersale.TradeAfterSaleLogDO; | |
| 7 | +import cn.iocoder.yudao.module.trade.controller.admin.aftersale.vo.AfterSalePageReqVO; | |
| 8 | +import cn.iocoder.yudao.module.trade.controller.app.aftersale.vo.AppAfterSaleCreateReqVO; | |
| 9 | +import cn.iocoder.yudao.module.trade.dal.dataobject.aftersale.AfterSaleDO; | |
| 10 | +import cn.iocoder.yudao.module.trade.dal.dataobject.aftersale.AfterSaleLogDO; | |
| 11 | 11 | import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO; |
| 12 | 12 | import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderItemDO; |
| 13 | -import cn.iocoder.yudao.module.trade.dal.mysql.aftersale.TradeAfterSaleLogMapper; | |
| 14 | -import cn.iocoder.yudao.module.trade.dal.mysql.aftersale.TradeAfterSaleMapper; | |
| 15 | -import cn.iocoder.yudao.module.trade.enums.aftersale.TradeAfterSaleStatusEnum; | |
| 16 | -import cn.iocoder.yudao.module.trade.enums.aftersale.TradeAfterSaleTypeEnum; | |
| 17 | -import cn.iocoder.yudao.module.trade.enums.aftersale.TradeAfterSaleWayEnum; | |
| 13 | +import cn.iocoder.yudao.module.trade.dal.mysql.aftersale.AfterSaleLogMapper; | |
| 14 | +import cn.iocoder.yudao.module.trade.dal.mysql.aftersale.AfterSaleMapper; | |
| 15 | +import cn.iocoder.yudao.module.trade.enums.aftersale.AfterSaleStatusEnum; | |
| 16 | +import cn.iocoder.yudao.module.trade.enums.aftersale.AfterSaleTypeEnum; | |
| 17 | +import cn.iocoder.yudao.module.trade.enums.aftersale.AfterSaleWayEnum; | |
| 18 | 18 | import cn.iocoder.yudao.module.trade.enums.order.TradeOrderItemAfterSaleStatusEnum; |
| 19 | 19 | import cn.iocoder.yudao.module.trade.enums.order.TradeOrderStatusEnum; |
| 20 | 20 | import cn.iocoder.yudao.module.trade.framework.order.config.TradeOrderProperties; |
| ... | ... | @@ -37,20 +37,20 @@ import static org.mockito.ArgumentMatchers.eq; |
| 37 | 37 | import static org.mockito.Mockito.when; |
| 38 | 38 | |
| 39 | 39 | /** |
| 40 | - * {@link TradeAfterSaleService} 的单元测试 | |
| 40 | + * {@link AfterSaleService} 的单元测试 | |
| 41 | 41 | * |
| 42 | 42 | * @author 芋道源码 |
| 43 | 43 | */ |
| 44 | -@Import(TradeAfterSaleServiceImpl.class) | |
| 45 | -public class TradeAfterSaleServiceTest extends BaseDbUnitTest { | |
| 44 | +@Import(AfterSaleServiceImpl.class) | |
| 45 | +public class AfterSaleServiceTest extends BaseDbUnitTest { | |
| 46 | 46 | |
| 47 | 47 | @Resource |
| 48 | - private TradeAfterSaleServiceImpl tradeAfterSaleService; | |
| 48 | + private AfterSaleServiceImpl tradeAfterSaleService; | |
| 49 | 49 | |
| 50 | 50 | @Resource |
| 51 | - private TradeAfterSaleMapper tradeAfterSaleMapper; | |
| 51 | + private AfterSaleMapper tradeAfterSaleMapper; | |
| 52 | 52 | @Resource |
| 53 | - private TradeAfterSaleLogMapper tradeAfterSaleLogMapper; | |
| 53 | + private AfterSaleLogMapper tradeAfterSaleLogMapper; | |
| 54 | 54 | |
| 55 | 55 | @MockBean |
| 56 | 56 | private TradeOrderUpdateService tradeOrderUpdateService; |
| ... | ... | @@ -67,8 +67,8 @@ public class TradeAfterSaleServiceTest extends BaseDbUnitTest { |
| 67 | 67 | public void testCreateAfterSale() { |
| 68 | 68 | // 准备参数 |
| 69 | 69 | Long userId = 1024L; |
| 70 | - AppTradeAfterSaleCreateReqVO createReqVO = new AppTradeAfterSaleCreateReqVO() | |
| 71 | - .setOrderItemId(1L).setRefundPrice(100).setWay(TradeAfterSaleWayEnum.RETURN_AND_REFUND.getWay()) | |
| 70 | + AppAfterSaleCreateReqVO createReqVO = new AppAfterSaleCreateReqVO() | |
| 71 | + .setOrderItemId(1L).setRefundPrice(100).setWay(AfterSaleWayEnum.RETURN_AND_REFUND.getWay()) | |
| 72 | 72 | .setApplyReason("退钱").setApplyDescription("快退") |
| 73 | 73 | .setApplyPicUrls(asList("https://www.baidu.com/1.png", "https://www.baidu.com/2.png")); |
| 74 | 74 | // mock 方法(交易订单项) |
| ... | ... | @@ -86,10 +86,10 @@ public class TradeAfterSaleServiceTest extends BaseDbUnitTest { |
| 86 | 86 | // 调用 |
| 87 | 87 | Long afterSaleId = tradeAfterSaleService.createAfterSale(userId, createReqVO); |
| 88 | 88 | // 断言(TradeAfterSaleDO) |
| 89 | - TradeAfterSaleDO afterSale = tradeAfterSaleMapper.selectById(afterSaleId); | |
| 89 | + AfterSaleDO afterSale = tradeAfterSaleMapper.selectById(afterSaleId); | |
| 90 | 90 | assertNotNull(afterSale.getNo()); |
| 91 | - assertEquals(afterSale.getStatus(), TradeAfterSaleStatusEnum.APPLY.getStatus()); | |
| 92 | - assertEquals(afterSale.getType(), TradeAfterSaleTypeEnum.IN_SALE.getType()); | |
| 91 | + assertEquals(afterSale.getStatus(), AfterSaleStatusEnum.APPLY.getStatus()); | |
| 92 | + assertEquals(afterSale.getType(), AfterSaleTypeEnum.IN_SALE.getType()); | |
| 93 | 93 | assertPojoEquals(afterSale, createReqVO); |
| 94 | 94 | assertEquals(afterSale.getUserId(), 1024L); |
| 95 | 95 | assertPojoEquals(afterSale, orderItem, "id", "creator", "createTime", "updater", "updateTime"); |
| ... | ... | @@ -101,22 +101,22 @@ public class TradeAfterSaleServiceTest extends BaseDbUnitTest { |
| 101 | 101 | assertNull(afterSale.getDeliveryTime()); |
| 102 | 102 | assertNull(afterSale.getReceiveReason()); |
| 103 | 103 | // 断言(TradeAfterSaleLogDO) |
| 104 | - TradeAfterSaleLogDO afterSaleLog = tradeAfterSaleLogMapper.selectList().get(0); | |
| 104 | + AfterSaleLogDO afterSaleLog = tradeAfterSaleLogMapper.selectList().get(0); | |
| 105 | 105 | assertEquals(afterSaleLog.getUserId(), userId); |
| 106 | 106 | assertEquals(afterSaleLog.getUserType(), UserTypeEnum.MEMBER.getValue()); |
| 107 | 107 | assertEquals(afterSaleLog.getAfterSaleId(), afterSaleId); |
| 108 | 108 | assertPojoEquals(afterSale, orderItem, "id", "creator", "createTime", "updater", "updateTime"); |
| 109 | - assertEquals(afterSaleLog.getContent(), TradeAfterSaleStatusEnum.APPLY.getContent()); | |
| 109 | + assertEquals(afterSaleLog.getContent(), AfterSaleStatusEnum.APPLY.getContent()); | |
| 110 | 110 | } |
| 111 | 111 | |
| 112 | 112 | @Test |
| 113 | 113 | public void testGetAfterSalePage() { |
| 114 | 114 | // mock 数据 |
| 115 | - TradeAfterSaleDO dbAfterSale = randomPojo(TradeAfterSaleDO.class, o -> { // 等会查询到 | |
| 115 | + AfterSaleDO dbAfterSale = randomPojo(AfterSaleDO.class, o -> { // 等会查询到 | |
| 116 | 116 | o.setNo("202211190847450020500077"); |
| 117 | - o.setStatus(TradeAfterSaleStatusEnum.APPLY.getStatus()); | |
| 118 | - o.setWay(TradeAfterSaleWayEnum.RETURN_AND_REFUND.getWay()); | |
| 119 | - o.setType(TradeAfterSaleTypeEnum.IN_SALE.getType()); | |
| 117 | + o.setStatus(AfterSaleStatusEnum.APPLY.getStatus()); | |
| 118 | + o.setWay(AfterSaleWayEnum.RETURN_AND_REFUND.getWay()); | |
| 119 | + o.setType(AfterSaleTypeEnum.IN_SALE.getType()); | |
| 120 | 120 | o.setOrderNo("202211190847450020500011"); |
| 121 | 121 | o.setSpuName("芋艿"); |
| 122 | 122 | o.setCreateTime(buildTime(2022, 1, 15)); |
| ... | ... | @@ -125,11 +125,11 @@ public class TradeAfterSaleServiceTest extends BaseDbUnitTest { |
| 125 | 125 | // 测试 no 不匹配 |
| 126 | 126 | tradeAfterSaleMapper.insert(cloneIgnoreId(dbAfterSale, o -> o.setNo("202211190847450020500066"))); |
| 127 | 127 | // 测试 status 不匹配 |
| 128 | - tradeAfterSaleMapper.insert(cloneIgnoreId(dbAfterSale, o -> o.setStatus(TradeAfterSaleStatusEnum.SELLER_REFUSE.getStatus()))); | |
| 128 | + tradeAfterSaleMapper.insert(cloneIgnoreId(dbAfterSale, o -> o.setStatus(AfterSaleStatusEnum.SELLER_REFUSE.getStatus()))); | |
| 129 | 129 | // 测试 way 不匹配 |
| 130 | - tradeAfterSaleMapper.insert(cloneIgnoreId(dbAfterSale, o -> o.setWay(TradeAfterSaleWayEnum.REFUND.getWay()))); | |
| 130 | + tradeAfterSaleMapper.insert(cloneIgnoreId(dbAfterSale, o -> o.setWay(AfterSaleWayEnum.REFUND.getWay()))); | |
| 131 | 131 | // 测试 type 不匹配 |
| 132 | - tradeAfterSaleMapper.insert(cloneIgnoreId(dbAfterSale, o -> o.setType(TradeAfterSaleTypeEnum.AFTER_SALE.getType()))); | |
| 132 | + tradeAfterSaleMapper.insert(cloneIgnoreId(dbAfterSale, o -> o.setType(AfterSaleTypeEnum.AFTER_SALE.getType()))); | |
| 133 | 133 | // 测试 orderNo 不匹配 |
| 134 | 134 | tradeAfterSaleMapper.insert(cloneIgnoreId(dbAfterSale, o -> o.setOrderNo("202211190847450020500022"))); |
| 135 | 135 | // 测试 spuName 不匹配 |
| ... | ... | @@ -137,17 +137,17 @@ public class TradeAfterSaleServiceTest extends BaseDbUnitTest { |
| 137 | 137 | // 测试 createTime 不匹配 |
| 138 | 138 | tradeAfterSaleMapper.insert(cloneIgnoreId(dbAfterSale, o -> o.setCreateTime(buildTime(2022, 1, 20)))); |
| 139 | 139 | // 准备参数 |
| 140 | - TradeAfterSalePageReqVO reqVO = new TradeAfterSalePageReqVO(); | |
| 140 | + AfterSalePageReqVO reqVO = new AfterSalePageReqVO(); | |
| 141 | 141 | reqVO.setNo("20221119084745002050007"); |
| 142 | - reqVO.setStatus(TradeAfterSaleStatusEnum.APPLY.getStatus()); | |
| 143 | - reqVO.setWay(TradeAfterSaleWayEnum.RETURN_AND_REFUND.getWay()); | |
| 144 | - reqVO.setType(TradeAfterSaleTypeEnum.IN_SALE.getType()); | |
| 142 | + reqVO.setStatus(AfterSaleStatusEnum.APPLY.getStatus()); | |
| 143 | + reqVO.setWay(AfterSaleWayEnum.RETURN_AND_REFUND.getWay()); | |
| 144 | + reqVO.setType(AfterSaleTypeEnum.IN_SALE.getType()); | |
| 145 | 145 | reqVO.setOrderNo("20221119084745002050001"); |
| 146 | 146 | reqVO.setSpuName("芋"); |
| 147 | 147 | reqVO.setCreateTime(new LocalDateTime[]{buildTime(2022, 1, 1), buildTime(2022, 1, 16)}); |
| 148 | 148 | |
| 149 | 149 | // 调用 |
| 150 | - PageResult<TradeAfterSaleDO> pageResult = tradeAfterSaleService.getAfterSalePage(reqVO); | |
| 150 | + PageResult<AfterSaleDO> pageResult = tradeAfterSaleService.getAfterSalePage(reqVO); | |
| 151 | 151 | // 断言 |
| 152 | 152 | assertEquals(1, pageResult.getTotal()); |
| 153 | 153 | assertEquals(1, pageResult.getList().size()); | ... | ... |
yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/dal/redis/RedisKeyConstants.java
yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/dal/redis/no/PayNoRedisDAO.java
| 1 | 1 | package cn.iocoder.yudao.module.pay.dal.redis.no; |
| 2 | 2 | |
| 3 | -import cn.hutool.core.date.DatePattern;import cn.hutool.core.date.DateUtil;import org.springframework.data.redis.core.StringRedisTemplate; | |
| 3 | +import cn.hutool.core.date.DatePattern;import cn.hutool.core.date.DateUtil; | |
| 4 | +import cn.iocoder.yudao.module.pay.dal.redis.RedisKeyConstants; | |
| 5 | +import org.springframework.data.redis.core.StringRedisTemplate; | |
| 4 | 6 | import org.springframework.stereotype.Repository; |
| 5 | 7 | |
| 6 | -import javax.annotation.Resource;import java.time.LocalDateTime; | |
| 8 | +import javax.annotation.Resource; | |
| 9 | +import java.time.Duration; | |
| 10 | +import java.time.LocalDateTime; | |
| 7 | 11 | |
| 8 | 12 | /** |
| 9 | 13 | * 支付序号的 Redis DAO |
| ... | ... | @@ -23,8 +27,12 @@ public class PayNoRedisDAO { |
| 23 | 27 | * @return 序号 |
| 24 | 28 | */ |
| 25 | 29 | public String generate(String prefix) { |
| 30 | + // 递增序号 | |
| 26 | 31 | String noPrefix = prefix + DateUtil.format(LocalDateTime.now(), DatePattern.PURE_DATETIME_PATTERN); |
| 27 | - Long no = stringRedisTemplate.opsForValue().increment(noPrefix); | |
| 32 | + String key = RedisKeyConstants.PAY_NO + noPrefix; | |
| 33 | + Long no = stringRedisTemplate.opsForValue().increment(key); | |
| 34 | + // 设置过期时间 | |
| 35 | + stringRedisTemplate.expire(key, Duration.ofMinutes(1L)); | |
| 28 | 36 | return noPrefix + no; |
| 29 | 37 | } |
| 30 | 38 | ... | ... |