Commit 3c643f814ce2ab3ca69fcae23b6e29255932df79

Authored by YunaiV
1 parent d402bdb7

trade:补全售后日志的记录

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