Commit 3c643f814ce2ab3ca69fcae23b6e29255932df79
1 parent
d402bdb7
trade:补全售后日志的记录
Showing
7 changed files
with
74 additions
and
40 deletions
yudao-module-mall/yudao-module-trade-api/src/main/java/cn/iocoder/yudao/module/trade/enums/aftersale/AfterSaleOperateTypeEnum.java
| 1 | package cn.iocoder.yudao.module.trade.enums.aftersale; | 1 | package cn.iocoder.yudao.module.trade.enums.aftersale; |
| 2 | 2 | ||
| 3 | +import lombok.Getter; | ||
| 4 | +import lombok.RequiredArgsConstructor; | ||
| 5 | + | ||
| 3 | /** | 6 | /** |
| 4 | * 售后操作类型的枚举 | 7 | * 售后操作类型的枚举 |
| 5 | * | 8 | * |
| 6 | * @author 陈賝 | 9 | * @author 陈賝 |
| 7 | * @since 2023/6/13 13:53 | 10 | * @since 2023/6/13 13:53 |
| 8 | */ | 11 | */ |
| 9 | -// TODO @chenchen:可以 lombok 简化构造方法,和 get 方法 | 12 | +@RequiredArgsConstructor |
| 13 | +@Getter | ||
| 10 | public enum AfterSaleOperateTypeEnum { | 14 | public enum AfterSaleOperateTypeEnum { |
| 11 | 15 | ||
| 12 | - /** | ||
| 13 | - * 用户申请 | ||
| 14 | - */ | ||
| 15 | - APPLY("用户申请"), | 16 | + MEMBER_CREATE(10, "会员申请退款"), |
| 17 | + ADMIN_AGREE_APPLY(11, "商家同意退款"), | ||
| 18 | + ADMIN_DISAGREE_APPLY(12, "商家拒绝退款"), | ||
| 19 | + MEMBER_DELIVERY(20, "会员填写退货物流信息,快递公司:{deliveryName},快递单号:{logisticsNo}"), | ||
| 20 | + ADMIN_AGREE_RECEIVE(21, "商家收货"), | ||
| 21 | + ADMIN_DISAGREE_RECEIVE(22, "商家拒绝收货,原因:{reason}"), | ||
| 22 | + ADMIN_REFUND(30, "商家退款"), | ||
| 23 | + MEMBER_CANCEL(40, "会员取消退款"), | ||
| 16 | ; | 24 | ; |
| 17 | 25 | ||
| 18 | - private final String description; | ||
| 19 | - | ||
| 20 | - AfterSaleOperateTypeEnum(String description) { | ||
| 21 | - this.description = description; | ||
| 22 | - } | ||
| 23 | - | ||
| 24 | - public String description() { | ||
| 25 | - return description; | ||
| 26 | - } | 26 | + /** |
| 27 | + * 操作类型 | ||
| 28 | + */ | ||
| 29 | + private final Integer type; | ||
| 30 | + /** | ||
| 31 | + * 操作描述 | ||
| 32 | + */ | ||
| 33 | + private final String content; | ||
| 27 | 34 | ||
| 28 | } | 35 | } |
yudao-module-mall/yudao-module-trade-api/src/main/java/cn/iocoder/yudao/module/trade/enums/order/TradeOrderOperateTypeEnum.java
| @@ -29,11 +29,11 @@ public enum TradeOrderOperateTypeEnum { | @@ -29,11 +29,11 @@ public enum TradeOrderOperateTypeEnum { | ||
| 29 | ; | 29 | ; |
| 30 | 30 | ||
| 31 | /** | 31 | /** |
| 32 | - * 类型 | 32 | + * 操作类型 |
| 33 | */ | 33 | */ |
| 34 | private final Integer type; | 34 | private final Integer type; |
| 35 | /** | 35 | /** |
| 36 | - * 类型 | 36 | + * 操作描述 |
| 37 | */ | 37 | */ |
| 38 | private final String content; | 38 | private final String content; |
| 39 | 39 |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/aftersale/AppTradeAfterSaleController.java
| @@ -71,7 +71,7 @@ public class AppTradeAfterSaleController { | @@ -71,7 +71,7 @@ public class AppTradeAfterSaleController { | ||
| 71 | 71 | ||
| 72 | @PostMapping(value = "/create") | 72 | @PostMapping(value = "/create") |
| 73 | @Operation(summary = "申请售后") | 73 | @Operation(summary = "申请售后") |
| 74 | - @AfterSaleLog(id = "#info.data", content = "'申请售后:售后编号['+#info.data+'],订单编号['+#createReqVO.orderItemId+'], '", operateType = AfterSaleOperateTypeEnum.APPLY) | 74 | + @AfterSaleLog(id = "#info.data", content = "'申请售后:售后编号['+#info.data+'],订单编号['+#createReqVO.orderItemId+'], '", operateType = AfterSaleOperateTypeEnum.MEMBER_CREATE) |
| 75 | public CommonResult<Long> createAfterSale(@RequestBody AppTradeAfterSaleCreateReqVO createReqVO) { | 75 | public CommonResult<Long> createAfterSale(@RequestBody AppTradeAfterSaleCreateReqVO createReqVO) { |
| 76 | AfterSaleLogUtils.setBeforeStatus(0); | 76 | AfterSaleLogUtils.setBeforeStatus(0); |
| 77 | AfterSaleLogUtils.setAfterStatus(TradeAfterSaleStatusEnum.APPLY.getStatus()); | 77 | AfterSaleLogUtils.setAfterStatus(TradeAfterSaleStatusEnum.APPLY.getStatus()); |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/framework/aftersalelog/core/annotations/AfterSaleLog.java
| @@ -21,7 +21,8 @@ public @interface AfterSaleLog { | @@ -21,7 +21,8 @@ public @interface AfterSaleLog { | ||
| 21 | /** | 21 | /** |
| 22 | * 售后 ID | 22 | * 售后 ID |
| 23 | */ | 23 | */ |
| 24 | - String id(); | 24 | + @Deprecated |
| 25 | + String id() default ""; | ||
| 25 | 26 | ||
| 26 | /** | 27 | /** |
| 27 | * 操作类型 | 28 | * 操作类型 |
| @@ -31,6 +32,7 @@ public @interface AfterSaleLog { | @@ -31,6 +32,7 @@ public @interface AfterSaleLog { | ||
| 31 | /** | 32 | /** |
| 32 | * 日志内容 | 33 | * 日志内容 |
| 33 | */ | 34 | */ |
| 35 | + @Deprecated | ||
| 34 | String content() default ""; | 36 | String content() default ""; |
| 35 | 37 | ||
| 36 | } | 38 | } |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/framework/aftersalelog/core/aop/AfterSaleLogAspect.java
| @@ -3,7 +3,6 @@ package cn.iocoder.yudao.module.trade.framework.aftersalelog.core.aop; | @@ -3,7 +3,6 @@ package cn.iocoder.yudao.module.trade.framework.aftersalelog.core.aop; | ||
| 3 | import cn.hutool.core.map.MapUtil; | 3 | import cn.hutool.core.map.MapUtil; |
| 4 | import cn.hutool.core.util.ObjectUtil; | 4 | import cn.hutool.core.util.ObjectUtil; |
| 5 | import cn.iocoder.yudao.framework.common.util.spring.SpringExpressionUtils; | 5 | import cn.iocoder.yudao.framework.common.util.spring.SpringExpressionUtils; |
| 6 | -import cn.iocoder.yudao.framework.operatelog.core.service.OperateLog; | ||
| 7 | import cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils; | 6 | import cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils; |
| 8 | import cn.iocoder.yudao.module.trade.framework.aftersalelog.core.annotations.AfterSaleLog; | 7 | import cn.iocoder.yudao.module.trade.framework.aftersalelog.core.annotations.AfterSaleLog; |
| 9 | import cn.iocoder.yudao.module.trade.framework.aftersalelog.core.dto.TradeAfterSaleLogCreateReqDTO; | 8 | import cn.iocoder.yudao.module.trade.framework.aftersalelog.core.dto.TradeAfterSaleLogCreateReqDTO; |
| @@ -96,7 +95,7 @@ public class AfterSaleLogAspect { | @@ -96,7 +95,7 @@ public class AfterSaleLogAspect { | ||
| 96 | String id = MapUtil.getStr(spelMap, afterSaleLogPoint.id()); | 95 | String id = MapUtil.getStr(spelMap, afterSaleLogPoint.id()); |
| 97 | result.put(ID, id); | 96 | result.put(ID, id); |
| 98 | // 操作类型 | 97 | // 操作类型 |
| 99 | - String operateType = afterSaleLogPoint.operateType().description(); | 98 | + String operateType = afterSaleLogPoint.operateType().getContent(); |
| 100 | result.put(OPERATE_TYPE, operateType); | 99 | result.put(OPERATE_TYPE, operateType); |
| 101 | // 日志内容 | 100 | // 日志内容 |
| 102 | String content = MapUtil.getStr(spelMap, afterSaleLogPoint.content()); | 101 | String content = MapUtil.getStr(spelMap, afterSaleLogPoint.content()); |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/framework/aftersalelog/core/util/AfterSaleLogUtils.java
| @@ -3,6 +3,8 @@ package cn.iocoder.yudao.module.trade.framework.aftersalelog.core.util; | @@ -3,6 +3,8 @@ package cn.iocoder.yudao.module.trade.framework.aftersalelog.core.util; | ||
| 3 | 3 | ||
| 4 | import cn.iocoder.yudao.module.trade.framework.aftersalelog.core.aop.AfterSaleLogAspect; | 4 | import cn.iocoder.yudao.module.trade.framework.aftersalelog.core.aop.AfterSaleLogAspect; |
| 5 | 5 | ||
| 6 | +import java.util.Map; | ||
| 7 | + | ||
| 6 | /** | 8 | /** |
| 7 | * 操作日志工具类 | 9 | * 操作日志工具类 |
| 8 | * 目前主要的作用,是提供给业务代码,记录操作明细和拓展字段 | 10 | * 目前主要的作用,是提供给业务代码,记录操作明细和拓展字段 |
| @@ -19,4 +21,13 @@ public class AfterSaleLogUtils { | @@ -19,4 +21,13 @@ public class AfterSaleLogUtils { | ||
| 19 | AfterSaleLogAspect.setAfterStatus(status); | 21 | AfterSaleLogAspect.setAfterStatus(status); |
| 20 | } | 22 | } |
| 21 | 23 | ||
| 24 | + public static void setAfterSaleInfo(Long id, Integer beforeStatus, Integer afterStatus) { | ||
| 25 | + setAfterSaleInfo(id, beforeStatus, afterStatus, null); | ||
| 26 | + } | ||
| 27 | + | ||
| 28 | + public static void setAfterSaleInfo(Long id, Integer beforeStatus, Integer afterStatus, | ||
| 29 | + Map<String, Object> exts) { | ||
| 30 | + // TODO 待实现 | ||
| 31 | + } | ||
| 32 | + | ||
| 22 | } | 33 | } |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/aftersale/TradeAfterSaleServiceImpl.java
| 1 | package cn.iocoder.yudao.module.trade.service.aftersale; | 1 | package cn.iocoder.yudao.module.trade.service.aftersale; |
| 2 | 2 | ||
| 3 | +import cn.hutool.core.map.MapUtil; | ||
| 3 | import cn.hutool.core.util.ObjectUtil; | 4 | import cn.hutool.core.util.ObjectUtil; |
| 4 | import cn.hutool.core.util.RandomUtil; | 5 | import cn.hutool.core.util.RandomUtil; |
| 5 | -import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; | ||
| 6 | import cn.iocoder.yudao.framework.common.pojo.PageParam; | 6 | import cn.iocoder.yudao.framework.common.pojo.PageParam; |
| 7 | import cn.iocoder.yudao.framework.common.pojo.PageResult; | 7 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 8 | import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; | 8 | import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; |
| @@ -17,18 +17,23 @@ import cn.iocoder.yudao.module.trade.controller.app.aftersale.vo.AppTradeAfterSa | @@ -17,18 +17,23 @@ import cn.iocoder.yudao.module.trade.controller.app.aftersale.vo.AppTradeAfterSa | ||
| 17 | import cn.iocoder.yudao.module.trade.convert.aftersale.TradeAfterSaleConvert; | 17 | import cn.iocoder.yudao.module.trade.convert.aftersale.TradeAfterSaleConvert; |
| 18 | import cn.iocoder.yudao.module.trade.dal.dataobject.aftersale.TradeAfterSaleDO; | 18 | import cn.iocoder.yudao.module.trade.dal.dataobject.aftersale.TradeAfterSaleDO; |
| 19 | import cn.iocoder.yudao.module.trade.dal.dataobject.aftersale.TradeAfterSaleLogDO; | 19 | import cn.iocoder.yudao.module.trade.dal.dataobject.aftersale.TradeAfterSaleLogDO; |
| 20 | +import cn.iocoder.yudao.module.trade.dal.dataobject.delivery.DeliveryExpressDO; | ||
| 20 | import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO; | 21 | import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO; |
| 21 | import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderItemDO; | 22 | import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderItemDO; |
| 22 | import cn.iocoder.yudao.module.trade.dal.mysql.aftersale.TradeAfterSaleLogMapper; | 23 | import cn.iocoder.yudao.module.trade.dal.mysql.aftersale.TradeAfterSaleLogMapper; |
| 23 | import cn.iocoder.yudao.module.trade.dal.mysql.aftersale.TradeAfterSaleMapper; | 24 | import cn.iocoder.yudao.module.trade.dal.mysql.aftersale.TradeAfterSaleMapper; |
| 25 | +import cn.iocoder.yudao.module.trade.enums.aftersale.AfterSaleOperateTypeEnum; | ||
| 24 | import cn.iocoder.yudao.module.trade.enums.aftersale.TradeAfterSaleStatusEnum; | 26 | import cn.iocoder.yudao.module.trade.enums.aftersale.TradeAfterSaleStatusEnum; |
| 25 | import cn.iocoder.yudao.module.trade.enums.aftersale.TradeAfterSaleTypeEnum; | 27 | import cn.iocoder.yudao.module.trade.enums.aftersale.TradeAfterSaleTypeEnum; |
| 26 | import cn.iocoder.yudao.module.trade.enums.aftersale.TradeAfterSaleWayEnum; | 28 | import cn.iocoder.yudao.module.trade.enums.aftersale.TradeAfterSaleWayEnum; |
| 27 | import cn.iocoder.yudao.module.trade.enums.order.TradeOrderItemAfterSaleStatusEnum; | 29 | import cn.iocoder.yudao.module.trade.enums.order.TradeOrderItemAfterSaleStatusEnum; |
| 28 | import cn.iocoder.yudao.module.trade.enums.order.TradeOrderStatusEnum; | 30 | import cn.iocoder.yudao.module.trade.enums.order.TradeOrderStatusEnum; |
| 31 | +import cn.iocoder.yudao.module.trade.framework.aftersalelog.core.annotations.AfterSaleLog; | ||
| 29 | import cn.iocoder.yudao.module.trade.framework.aftersalelog.core.dto.TradeAfterSaleLogCreateReqDTO; | 32 | import cn.iocoder.yudao.module.trade.framework.aftersalelog.core.dto.TradeAfterSaleLogCreateReqDTO; |
| 30 | import cn.iocoder.yudao.module.trade.framework.aftersalelog.core.service.AfterSaleLogService; | 33 | import cn.iocoder.yudao.module.trade.framework.aftersalelog.core.service.AfterSaleLogService; |
| 34 | +import cn.iocoder.yudao.module.trade.framework.aftersalelog.core.util.AfterSaleLogUtils; | ||
| 31 | import cn.iocoder.yudao.module.trade.framework.order.config.TradeOrderProperties; | 35 | import cn.iocoder.yudao.module.trade.framework.order.config.TradeOrderProperties; |
| 36 | +import cn.iocoder.yudao.module.trade.service.delivery.DeliveryExpressService; | ||
| 32 | import cn.iocoder.yudao.module.trade.service.order.TradeOrderQueryService; | 37 | import cn.iocoder.yudao.module.trade.service.order.TradeOrderQueryService; |
| 33 | import cn.iocoder.yudao.module.trade.service.order.TradeOrderUpdateService; | 38 | import cn.iocoder.yudao.module.trade.service.order.TradeOrderUpdateService; |
| 34 | import lombok.extern.slf4j.Slf4j; | 39 | import lombok.extern.slf4j.Slf4j; |
| @@ -61,6 +66,8 @@ public class TradeAfterSaleServiceImpl implements TradeAfterSaleService, AfterSa | @@ -61,6 +66,8 @@ public class TradeAfterSaleServiceImpl implements TradeAfterSaleService, AfterSa | ||
| 61 | private TradeOrderUpdateService tradeOrderUpdateService; | 66 | private TradeOrderUpdateService tradeOrderUpdateService; |
| 62 | @Resource | 67 | @Resource |
| 63 | private TradeOrderQueryService tradeOrderQueryService; | 68 | private TradeOrderQueryService tradeOrderQueryService; |
| 69 | + @Resource | ||
| 70 | + private DeliveryExpressService deliveryExpressService; | ||
| 64 | 71 | ||
| 65 | @Resource | 72 | @Resource |
| 66 | private TradeAfterSaleMapper tradeAfterSaleMapper; | 73 | private TradeAfterSaleMapper tradeAfterSaleMapper; |
| @@ -93,10 +100,9 @@ public class TradeAfterSaleServiceImpl implements TradeAfterSaleService, AfterSa | @@ -93,10 +100,9 @@ public class TradeAfterSaleServiceImpl implements TradeAfterSaleService, AfterSa | ||
| 93 | return tradeAfterSaleMapper.selectById(id); | 100 | return tradeAfterSaleMapper.selectById(id); |
| 94 | } | 101 | } |
| 95 | 102 | ||
| 96 | - // TODO 芋艿:拼团失败,要不要发起售后的方式退款?还是走取消逻辑? | ||
| 97 | - | ||
| 98 | @Override | 103 | @Override |
| 99 | @Transactional(rollbackFor = Exception.class) | 104 | @Transactional(rollbackFor = Exception.class) |
| 105 | + @AfterSaleLog(operateType = AfterSaleOperateTypeEnum.MEMBER_CREATE) | ||
| 100 | public Long createAfterSale(Long userId, AppTradeAfterSaleCreateReqVO createReqVO) { | 106 | public Long createAfterSale(Long userId, AppTradeAfterSaleCreateReqVO createReqVO) { |
| 101 | // 第一步,前置校验 | 107 | // 第一步,前置校验 |
| 102 | TradeOrderItemDO tradeOrderItem = validateOrderItemApplicable(userId, createReqVO); | 108 | TradeOrderItemDO tradeOrderItem = validateOrderItemApplicable(userId, createReqVO); |
| @@ -163,15 +169,14 @@ public class TradeAfterSaleServiceImpl implements TradeAfterSaleService, AfterSa | @@ -163,15 +169,14 @@ public class TradeAfterSaleServiceImpl implements TradeAfterSaleService, AfterSa | ||
| 163 | afterSale.setOrderNo(order.getNo()); // 记录 orderNo 订单流水,方便后续检索 | 169 | afterSale.setOrderNo(order.getNo()); // 记录 orderNo 订单流水,方便后续检索 |
| 164 | afterSale.setType(TradeOrderStatusEnum.isCompleted(order.getStatus()) | 170 | afterSale.setType(TradeOrderStatusEnum.isCompleted(order.getStatus()) |
| 165 | ? TradeAfterSaleTypeEnum.AFTER_SALE.getType() : TradeAfterSaleTypeEnum.IN_SALE.getType()); | 171 | ? TradeAfterSaleTypeEnum.AFTER_SALE.getType() : TradeAfterSaleTypeEnum.IN_SALE.getType()); |
| 166 | - // TODO 退还积分 | ||
| 167 | tradeAfterSaleMapper.insert(afterSale); | 172 | tradeAfterSaleMapper.insert(afterSale); |
| 168 | 173 | ||
| 169 | // 更新交易订单项的售后状态 | 174 | // 更新交易订单项的售后状态 |
| 170 | tradeOrderUpdateService.updateOrderItemWhenAfterSaleCreate(orderItem.getId(), afterSale.getId()); | 175 | tradeOrderUpdateService.updateOrderItemWhenAfterSaleCreate(orderItem.getId(), afterSale.getId()); |
| 171 | 176 | ||
| 172 | // 记录售后日志 | 177 | // 记录售后日志 |
| 173 | - createAfterSaleLog(orderItem.getUserId(), UserTypeEnum.MEMBER.getValue(), | ||
| 174 | - afterSale, null, afterSale.getStatus()); | 178 | + AfterSaleLogUtils.setAfterSaleInfo(afterSale.getId(), null, |
| 179 | + TradeAfterSaleStatusEnum.APPLY.getStatus()); | ||
| 175 | 180 | ||
| 176 | // TODO 发送售后消息 | 181 | // TODO 发送售后消息 |
| 177 | return afterSale; | 182 | return afterSale; |
| @@ -179,6 +184,7 @@ public class TradeAfterSaleServiceImpl implements TradeAfterSaleService, AfterSa | @@ -179,6 +184,7 @@ public class TradeAfterSaleServiceImpl implements TradeAfterSaleService, AfterSa | ||
| 179 | 184 | ||
| 180 | @Override | 185 | @Override |
| 181 | @Transactional(rollbackFor = Exception.class) | 186 | @Transactional(rollbackFor = Exception.class) |
| 187 | + @AfterSaleLog(operateType = AfterSaleOperateTypeEnum.ADMIN_AGREE_APPLY) | ||
| 182 | public void agreeAfterSale(Long userId, Long id) { | 188 | public void agreeAfterSale(Long userId, Long id) { |
| 183 | // 校验售后单存在,并状态未审批 | 189 | // 校验售后单存在,并状态未审批 |
| 184 | TradeAfterSaleDO afterSale = validateAfterSaleAuditable(id); | 190 | TradeAfterSaleDO afterSale = validateAfterSaleAuditable(id); |
| @@ -192,14 +198,14 @@ public class TradeAfterSaleServiceImpl implements TradeAfterSaleService, AfterSa | @@ -192,14 +198,14 @@ public class TradeAfterSaleServiceImpl implements TradeAfterSaleService, AfterSa | ||
| 192 | .setStatus(newStatus).setAuditUserId(userId).setAuditTime(LocalDateTime.now())); | 198 | .setStatus(newStatus).setAuditUserId(userId).setAuditTime(LocalDateTime.now())); |
| 193 | 199 | ||
| 194 | // 记录售后日志 | 200 | // 记录售后日志 |
| 195 | - createAfterSaleLog(userId, UserTypeEnum.ADMIN.getValue(), | ||
| 196 | - afterSale, afterSale.getStatus(), newStatus); | 201 | + AfterSaleLogUtils.setAfterSaleInfo(afterSale.getId(), afterSale.getStatus(), newStatus); |
| 197 | 202 | ||
| 198 | // TODO 发送售后消息 | 203 | // TODO 发送售后消息 |
| 199 | } | 204 | } |
| 200 | 205 | ||
| 201 | @Override | 206 | @Override |
| 202 | @Transactional(rollbackFor = Exception.class) | 207 | @Transactional(rollbackFor = Exception.class) |
| 208 | + @AfterSaleLog(operateType = AfterSaleOperateTypeEnum.ADMIN_DISAGREE_APPLY) | ||
| 203 | public void disagreeAfterSale(Long userId, TradeAfterSaleDisagreeReqVO auditReqVO) { | 209 | public void disagreeAfterSale(Long userId, TradeAfterSaleDisagreeReqVO auditReqVO) { |
| 204 | // 校验售后单存在,并状态未审批 | 210 | // 校验售后单存在,并状态未审批 |
| 205 | TradeAfterSaleDO afterSale = validateAfterSaleAuditable(auditReqVO.getId()); | 211 | TradeAfterSaleDO afterSale = validateAfterSaleAuditable(auditReqVO.getId()); |
| @@ -211,8 +217,7 @@ public class TradeAfterSaleServiceImpl implements TradeAfterSaleService, AfterSa | @@ -211,8 +217,7 @@ public class TradeAfterSaleServiceImpl implements TradeAfterSaleService, AfterSa | ||
| 211 | .setAuditReason(auditReqVO.getAuditReason())); | 217 | .setAuditReason(auditReqVO.getAuditReason())); |
| 212 | 218 | ||
| 213 | // 记录售后日志 | 219 | // 记录售后日志 |
| 214 | - createAfterSaleLog(userId, UserTypeEnum.ADMIN.getValue(), | ||
| 215 | - afterSale, afterSale.getStatus(), newStatus); | 220 | + AfterSaleLogUtils.setAfterSaleInfo(afterSale.getId(), afterSale.getStatus(), newStatus); |
| 216 | 221 | ||
| 217 | // TODO 发送售后消息 | 222 | // TODO 发送售后消息 |
| 218 | 223 | ||
| @@ -246,6 +251,7 @@ public class TradeAfterSaleServiceImpl implements TradeAfterSaleService, AfterSa | @@ -246,6 +251,7 @@ public class TradeAfterSaleServiceImpl implements TradeAfterSaleService, AfterSa | ||
| 246 | 251 | ||
| 247 | @Override | 252 | @Override |
| 248 | @Transactional(rollbackFor = Exception.class) | 253 | @Transactional(rollbackFor = Exception.class) |
| 254 | + @AfterSaleLog(operateType = AfterSaleOperateTypeEnum.MEMBER_DELIVERY) | ||
| 249 | public void deliveryAfterSale(Long userId, AppTradeAfterSaleDeliveryReqVO deliveryReqVO) { | 255 | public void deliveryAfterSale(Long userId, AppTradeAfterSaleDeliveryReqVO deliveryReqVO) { |
| 250 | // 校验售后单存在,并状态未退货 | 256 | // 校验售后单存在,并状态未退货 |
| 251 | TradeAfterSaleDO afterSale = tradeAfterSaleMapper.selectById(deliveryReqVO.getId()); | 257 | TradeAfterSaleDO afterSale = tradeAfterSaleMapper.selectById(deliveryReqVO.getId()); |
| @@ -255,6 +261,7 @@ public class TradeAfterSaleServiceImpl implements TradeAfterSaleService, AfterSa | @@ -255,6 +261,7 @@ public class TradeAfterSaleServiceImpl implements TradeAfterSaleService, AfterSa | ||
| 255 | if (ObjectUtil.notEqual(afterSale.getStatus(), TradeAfterSaleStatusEnum.SELLER_AGREE.getStatus())) { | 261 | if (ObjectUtil.notEqual(afterSale.getStatus(), TradeAfterSaleStatusEnum.SELLER_AGREE.getStatus())) { |
| 256 | throw exception(AFTER_SALE_DELIVERY_FAIL_STATUS_NOT_SELLER_AGREE); | 262 | throw exception(AFTER_SALE_DELIVERY_FAIL_STATUS_NOT_SELLER_AGREE); |
| 257 | } | 263 | } |
| 264 | + DeliveryExpressDO express = deliveryExpressService.validateDeliveryExpress(deliveryReqVO.getLogisticsId()); | ||
| 258 | 265 | ||
| 259 | // 更新售后单的物流信息 | 266 | // 更新售后单的物流信息 |
| 260 | updateAfterSaleStatus(afterSale.getId(), TradeAfterSaleStatusEnum.SELLER_AGREE.getStatus(), new TradeAfterSaleDO() | 267 | updateAfterSaleStatus(afterSale.getId(), TradeAfterSaleStatusEnum.SELLER_AGREE.getStatus(), new TradeAfterSaleDO() |
| @@ -263,14 +270,17 @@ public class TradeAfterSaleServiceImpl implements TradeAfterSaleService, AfterSa | @@ -263,14 +270,17 @@ public class TradeAfterSaleServiceImpl implements TradeAfterSaleService, AfterSa | ||
| 263 | .setDeliveryTime(LocalDateTime.now())); | 270 | .setDeliveryTime(LocalDateTime.now())); |
| 264 | 271 | ||
| 265 | // 记录售后日志 | 272 | // 记录售后日志 |
| 266 | - createAfterSaleLog(userId, UserTypeEnum.MEMBER.getValue(), | ||
| 267 | - afterSale, afterSale.getStatus(), TradeAfterSaleStatusEnum.BUYER_DELIVERY.getStatus()); | 273 | + AfterSaleLogUtils.setAfterSaleInfo(afterSale.getId(), afterSale.getStatus(), |
| 274 | + TradeAfterSaleStatusEnum.BUYER_DELIVERY.getStatus(), | ||
| 275 | + MapUtil.<String, Object>builder().put("expressName", express.getName()) | ||
| 276 | + .put("logisticsNo", deliveryReqVO.getLogisticsNo()).build()); | ||
| 268 | 277 | ||
| 269 | // TODO 发送售后消息 | 278 | // TODO 发送售后消息 |
| 270 | } | 279 | } |
| 271 | 280 | ||
| 272 | @Override | 281 | @Override |
| 273 | @Transactional(rollbackFor = Exception.class) | 282 | @Transactional(rollbackFor = Exception.class) |
| 283 | + @AfterSaleLog(operateType = AfterSaleOperateTypeEnum.ADMIN_AGREE_RECEIVE) | ||
| 274 | public void receiveAfterSale(Long userId, Long id) { | 284 | public void receiveAfterSale(Long userId, Long id) { |
| 275 | // 校验售后单存在,并状态为已退货 | 285 | // 校验售后单存在,并状态为已退货 |
| 276 | TradeAfterSaleDO afterSale = validateAfterSaleReceivable(id); | 286 | TradeAfterSaleDO afterSale = validateAfterSaleReceivable(id); |
| @@ -280,14 +290,15 @@ public class TradeAfterSaleServiceImpl implements TradeAfterSaleService, AfterSa | @@ -280,14 +290,15 @@ public class TradeAfterSaleServiceImpl implements TradeAfterSaleService, AfterSa | ||
| 280 | .setStatus(TradeAfterSaleStatusEnum.WAIT_REFUND.getStatus()).setReceiveTime(LocalDateTime.now())); | 290 | .setStatus(TradeAfterSaleStatusEnum.WAIT_REFUND.getStatus()).setReceiveTime(LocalDateTime.now())); |
| 281 | 291 | ||
| 282 | // 记录售后日志 | 292 | // 记录售后日志 |
| 283 | - createAfterSaleLog(userId, UserTypeEnum.ADMIN.getValue(), | ||
| 284 | - afterSale, afterSale.getStatus(), TradeAfterSaleStatusEnum.WAIT_REFUND.getStatus()); | 293 | + AfterSaleLogUtils.setAfterSaleInfo(afterSale.getId(), afterSale.getStatus(), |
| 294 | + TradeAfterSaleStatusEnum.WAIT_REFUND.getStatus()); | ||
| 285 | 295 | ||
| 286 | // TODO 发送售后消息 | 296 | // TODO 发送售后消息 |
| 287 | } | 297 | } |
| 288 | 298 | ||
| 289 | @Override | 299 | @Override |
| 290 | @Transactional(rollbackFor = Exception.class) | 300 | @Transactional(rollbackFor = Exception.class) |
| 301 | + @AfterSaleLog(operateType = AfterSaleOperateTypeEnum.ADMIN_DISAGREE_RECEIVE) | ||
| 291 | public void refuseAfterSale(Long userId, TradeAfterSaleRefuseReqVO refuseReqVO) { | 302 | public void refuseAfterSale(Long userId, TradeAfterSaleRefuseReqVO refuseReqVO) { |
| 292 | // 校验售后单存在,并状态为已退货 | 303 | // 校验售后单存在,并状态为已退货 |
| 293 | TradeAfterSaleDO afterSale = tradeAfterSaleMapper.selectById(refuseReqVO.getId()); | 304 | TradeAfterSaleDO afterSale = tradeAfterSaleMapper.selectById(refuseReqVO.getId()); |
| @@ -304,8 +315,9 @@ public class TradeAfterSaleServiceImpl implements TradeAfterSaleService, AfterSa | @@ -304,8 +315,9 @@ public class TradeAfterSaleServiceImpl implements TradeAfterSaleService, AfterSa | ||
| 304 | .setReceiveReason(refuseReqVO.getRefuseMemo())); | 315 | .setReceiveReason(refuseReqVO.getRefuseMemo())); |
| 305 | 316 | ||
| 306 | // 记录售后日志 | 317 | // 记录售后日志 |
| 307 | - createAfterSaleLog(userId, UserTypeEnum.ADMIN.getValue(), | ||
| 308 | - afterSale, afterSale.getStatus(), TradeAfterSaleStatusEnum.SELLER_REFUSE.getStatus()); | 318 | + AfterSaleLogUtils.setAfterSaleInfo(afterSale.getId(), afterSale.getStatus(), |
| 319 | + TradeAfterSaleStatusEnum.SELLER_REFUSE.getStatus(), | ||
| 320 | + MapUtil.of("reason", refuseReqVO.getRefuseMemo())); | ||
| 309 | 321 | ||
| 310 | // TODO 发送售后消息 | 322 | // TODO 发送售后消息 |
| 311 | 323 | ||
| @@ -332,6 +344,7 @@ public class TradeAfterSaleServiceImpl implements TradeAfterSaleService, AfterSa | @@ -332,6 +344,7 @@ public class TradeAfterSaleServiceImpl implements TradeAfterSaleService, AfterSa | ||
| 332 | 344 | ||
| 333 | @Override | 345 | @Override |
| 334 | @Transactional(rollbackFor = Exception.class) | 346 | @Transactional(rollbackFor = Exception.class) |
| 347 | + @AfterSaleLog(operateType = AfterSaleOperateTypeEnum.ADMIN_REFUND) | ||
| 335 | public void refundAfterSale(Long userId, String userIp, Long id) { | 348 | public void refundAfterSale(Long userId, String userIp, Long id) { |
| 336 | // 校验售后单的状态,并状态待退款 | 349 | // 校验售后单的状态,并状态待退款 |
| 337 | TradeAfterSaleDO afterSale = tradeAfterSaleMapper.selectById(id); | 350 | TradeAfterSaleDO afterSale = tradeAfterSaleMapper.selectById(id); |
| @@ -350,8 +363,8 @@ public class TradeAfterSaleServiceImpl implements TradeAfterSaleService, AfterSa | @@ -350,8 +363,8 @@ public class TradeAfterSaleServiceImpl implements TradeAfterSaleService, AfterSa | ||
| 350 | .setStatus(TradeAfterSaleStatusEnum.COMPLETE.getStatus()).setRefundTime(LocalDateTime.now())); | 363 | .setStatus(TradeAfterSaleStatusEnum.COMPLETE.getStatus()).setRefundTime(LocalDateTime.now())); |
| 351 | 364 | ||
| 352 | // 记录售后日志 | 365 | // 记录售后日志 |
| 353 | - createAfterSaleLog(userId, UserTypeEnum.ADMIN.getValue(), | ||
| 354 | - afterSale, afterSale.getStatus(), TradeAfterSaleStatusEnum.COMPLETE.getStatus()); | 366 | + AfterSaleLogUtils.setAfterSaleInfo(afterSale.getId(), afterSale.getStatus(), |
| 367 | + TradeAfterSaleStatusEnum.COMPLETE.getStatus()); | ||
| 355 | 368 | ||
| 356 | // TODO 发送售后消息 | 369 | // TODO 发送售后消息 |
| 357 | 370 | ||
| @@ -374,6 +387,8 @@ public class TradeAfterSaleServiceImpl implements TradeAfterSaleService, AfterSa | @@ -374,6 +387,8 @@ public class TradeAfterSaleServiceImpl implements TradeAfterSaleService, AfterSa | ||
| 374 | } | 387 | } |
| 375 | 388 | ||
| 376 | @Override | 389 | @Override |
| 390 | + @Transactional(rollbackFor = Exception.class) | ||
| 391 | + @AfterSaleLog(operateType = AfterSaleOperateTypeEnum.MEMBER_CANCEL) | ||
| 377 | public void cancelAfterSale(Long userId, Long id) { | 392 | public void cancelAfterSale(Long userId, Long id) { |
| 378 | // 校验售后单的状态,并状态待退款 | 393 | // 校验售后单的状态,并状态待退款 |
| 379 | TradeAfterSaleDO afterSale = tradeAfterSaleMapper.selectById(id); | 394 | TradeAfterSaleDO afterSale = tradeAfterSaleMapper.selectById(id); |
| @@ -391,8 +406,8 @@ public class TradeAfterSaleServiceImpl implements TradeAfterSaleService, AfterSa | @@ -391,8 +406,8 @@ public class TradeAfterSaleServiceImpl implements TradeAfterSaleService, AfterSa | ||
| 391 | .setStatus(TradeAfterSaleStatusEnum.BUYER_CANCEL.getStatus())); | 406 | .setStatus(TradeAfterSaleStatusEnum.BUYER_CANCEL.getStatus())); |
| 392 | 407 | ||
| 393 | // 记录售后日志 | 408 | // 记录售后日志 |
| 394 | - createAfterSaleLog(userId, UserTypeEnum.MEMBER.getValue(), | ||
| 395 | - afterSale, afterSale.getStatus(), TradeAfterSaleStatusEnum.BUYER_CANCEL.getStatus()); | 409 | + AfterSaleLogUtils.setAfterSaleInfo(afterSale.getId(), afterSale.getStatus(), |
| 410 | + TradeAfterSaleStatusEnum.BUYER_CANCEL.getStatus()); | ||
| 396 | 411 | ||
| 397 | // TODO 发送售后消息 | 412 | // TODO 发送售后消息 |
| 398 | 413 |