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 | 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 | 9 | * @author 陈賝 |
| 7 | 10 | * @since 2023/6/13 13:53 |
| 8 | 11 | */ |
| 9 | -// TODO @chenchen:可以 lombok 简化构造方法,和 get 方法 | |
| 12 | +@RequiredArgsConstructor | |
| 13 | +@Getter | |
| 10 | 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
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 | 71 | |
| 72 | 72 | @PostMapping(value = "/create") |
| 73 | 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 | 75 | public CommonResult<Long> createAfterSale(@RequestBody AppTradeAfterSaleCreateReqVO createReqVO) { |
| 76 | 76 | AfterSaleLogUtils.setBeforeStatus(0); |
| 77 | 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 | 21 | /** |
| 22 | 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 | 32 | /** |
| 32 | 33 | * 日志内容 |
| 33 | 34 | */ |
| 35 | + @Deprecated | |
| 34 | 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 | 3 | import cn.hutool.core.map.MapUtil; |
| 4 | 4 | import cn.hutool.core.util.ObjectUtil; |
| 5 | 5 | import cn.iocoder.yudao.framework.common.util.spring.SpringExpressionUtils; |
| 6 | -import cn.iocoder.yudao.framework.operatelog.core.service.OperateLog; | |
| 7 | 6 | import cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils; |
| 8 | 7 | import cn.iocoder.yudao.module.trade.framework.aftersalelog.core.annotations.AfterSaleLog; |
| 9 | 8 | import cn.iocoder.yudao.module.trade.framework.aftersalelog.core.dto.TradeAfterSaleLogCreateReqDTO; |
| ... | ... | @@ -96,7 +95,7 @@ public class AfterSaleLogAspect { |
| 96 | 95 | String id = MapUtil.getStr(spelMap, afterSaleLogPoint.id()); |
| 97 | 96 | result.put(ID, id); |
| 98 | 97 | // 操作类型 |
| 99 | - String operateType = afterSaleLogPoint.operateType().description(); | |
| 98 | + String operateType = afterSaleLogPoint.operateType().getContent(); | |
| 100 | 99 | result.put(OPERATE_TYPE, operateType); |
| 101 | 100 | // 日志内容 |
| 102 | 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 | 3 | |
| 4 | 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 | 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 | 1 | package cn.iocoder.yudao.module.trade.service.aftersale; |
| 2 | 2 | |
| 3 | +import cn.hutool.core.map.MapUtil; | |
| 3 | 4 | import cn.hutool.core.util.ObjectUtil; |
| 4 | 5 | import cn.hutool.core.util.RandomUtil; |
| 5 | -import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; | |
| 6 | 6 | import cn.iocoder.yudao.framework.common.pojo.PageParam; |
| 7 | 7 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 8 | 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 | 17 | import cn.iocoder.yudao.module.trade.convert.aftersale.TradeAfterSaleConvert; |
| 18 | 18 | import cn.iocoder.yudao.module.trade.dal.dataobject.aftersale.TradeAfterSaleDO; |
| 19 | 19 | import cn.iocoder.yudao.module.trade.dal.dataobject.aftersale.TradeAfterSaleLogDO; |
| 20 | +import cn.iocoder.yudao.module.trade.dal.dataobject.delivery.DeliveryExpressDO; | |
| 20 | 21 | import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO; |
| 21 | 22 | import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderItemDO; |
| 22 | 23 | import cn.iocoder.yudao.module.trade.dal.mysql.aftersale.TradeAfterSaleLogMapper; |
| 23 | 24 | import cn.iocoder.yudao.module.trade.dal.mysql.aftersale.TradeAfterSaleMapper; |
| 25 | +import cn.iocoder.yudao.module.trade.enums.aftersale.AfterSaleOperateTypeEnum; | |
| 24 | 26 | import cn.iocoder.yudao.module.trade.enums.aftersale.TradeAfterSaleStatusEnum; |
| 25 | 27 | import cn.iocoder.yudao.module.trade.enums.aftersale.TradeAfterSaleTypeEnum; |
| 26 | 28 | import cn.iocoder.yudao.module.trade.enums.aftersale.TradeAfterSaleWayEnum; |
| 27 | 29 | import cn.iocoder.yudao.module.trade.enums.order.TradeOrderItemAfterSaleStatusEnum; |
| 28 | 30 | import cn.iocoder.yudao.module.trade.enums.order.TradeOrderStatusEnum; |
| 31 | +import cn.iocoder.yudao.module.trade.framework.aftersalelog.core.annotations.AfterSaleLog; | |
| 29 | 32 | import cn.iocoder.yudao.module.trade.framework.aftersalelog.core.dto.TradeAfterSaleLogCreateReqDTO; |
| 30 | 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 | 35 | import cn.iocoder.yudao.module.trade.framework.order.config.TradeOrderProperties; |
| 36 | +import cn.iocoder.yudao.module.trade.service.delivery.DeliveryExpressService; | |
| 32 | 37 | import cn.iocoder.yudao.module.trade.service.order.TradeOrderQueryService; |
| 33 | 38 | import cn.iocoder.yudao.module.trade.service.order.TradeOrderUpdateService; |
| 34 | 39 | import lombok.extern.slf4j.Slf4j; |
| ... | ... | @@ -61,6 +66,8 @@ public class TradeAfterSaleServiceImpl implements TradeAfterSaleService, AfterSa |
| 61 | 66 | private TradeOrderUpdateService tradeOrderUpdateService; |
| 62 | 67 | @Resource |
| 63 | 68 | private TradeOrderQueryService tradeOrderQueryService; |
| 69 | + @Resource | |
| 70 | + private DeliveryExpressService deliveryExpressService; | |
| 64 | 71 | |
| 65 | 72 | @Resource |
| 66 | 73 | private TradeAfterSaleMapper tradeAfterSaleMapper; |
| ... | ... | @@ -93,10 +100,9 @@ public class TradeAfterSaleServiceImpl implements TradeAfterSaleService, AfterSa |
| 93 | 100 | return tradeAfterSaleMapper.selectById(id); |
| 94 | 101 | } |
| 95 | 102 | |
| 96 | - // TODO 芋艿:拼团失败,要不要发起售后的方式退款?还是走取消逻辑? | |
| 97 | - | |
| 98 | 103 | @Override |
| 99 | 104 | @Transactional(rollbackFor = Exception.class) |
| 105 | + @AfterSaleLog(operateType = AfterSaleOperateTypeEnum.MEMBER_CREATE) | |
| 100 | 106 | public Long createAfterSale(Long userId, AppTradeAfterSaleCreateReqVO createReqVO) { |
| 101 | 107 | // 第一步,前置校验 |
| 102 | 108 | TradeOrderItemDO tradeOrderItem = validateOrderItemApplicable(userId, createReqVO); |
| ... | ... | @@ -163,15 +169,14 @@ public class TradeAfterSaleServiceImpl implements TradeAfterSaleService, AfterSa |
| 163 | 169 | afterSale.setOrderNo(order.getNo()); // 记录 orderNo 订单流水,方便后续检索 |
| 164 | 170 | afterSale.setType(TradeOrderStatusEnum.isCompleted(order.getStatus()) |
| 165 | 171 | ? TradeAfterSaleTypeEnum.AFTER_SALE.getType() : TradeAfterSaleTypeEnum.IN_SALE.getType()); |
| 166 | - // TODO 退还积分 | |
| 167 | 172 | tradeAfterSaleMapper.insert(afterSale); |
| 168 | 173 | |
| 169 | 174 | // 更新交易订单项的售后状态 |
| 170 | 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 | 181 | // TODO 发送售后消息 |
| 177 | 182 | return afterSale; |
| ... | ... | @@ -179,6 +184,7 @@ public class TradeAfterSaleServiceImpl implements TradeAfterSaleService, AfterSa |
| 179 | 184 | |
| 180 | 185 | @Override |
| 181 | 186 | @Transactional(rollbackFor = Exception.class) |
| 187 | + @AfterSaleLog(operateType = AfterSaleOperateTypeEnum.ADMIN_AGREE_APPLY) | |
| 182 | 188 | public void agreeAfterSale(Long userId, Long id) { |
| 183 | 189 | // 校验售后单存在,并状态未审批 |
| 184 | 190 | TradeAfterSaleDO afterSale = validateAfterSaleAuditable(id); |
| ... | ... | @@ -192,14 +198,14 @@ public class TradeAfterSaleServiceImpl implements TradeAfterSaleService, AfterSa |
| 192 | 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 | 203 | // TODO 发送售后消息 |
| 199 | 204 | } |
| 200 | 205 | |
| 201 | 206 | @Override |
| 202 | 207 | @Transactional(rollbackFor = Exception.class) |
| 208 | + @AfterSaleLog(operateType = AfterSaleOperateTypeEnum.ADMIN_DISAGREE_APPLY) | |
| 203 | 209 | public void disagreeAfterSale(Long userId, TradeAfterSaleDisagreeReqVO auditReqVO) { |
| 204 | 210 | // 校验售后单存在,并状态未审批 |
| 205 | 211 | TradeAfterSaleDO afterSale = validateAfterSaleAuditable(auditReqVO.getId()); |
| ... | ... | @@ -211,8 +217,7 @@ public class TradeAfterSaleServiceImpl implements TradeAfterSaleService, AfterSa |
| 211 | 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 | 222 | // TODO 发送售后消息 |
| 218 | 223 | |
| ... | ... | @@ -246,6 +251,7 @@ public class TradeAfterSaleServiceImpl implements TradeAfterSaleService, AfterSa |
| 246 | 251 | |
| 247 | 252 | @Override |
| 248 | 253 | @Transactional(rollbackFor = Exception.class) |
| 254 | + @AfterSaleLog(operateType = AfterSaleOperateTypeEnum.MEMBER_DELIVERY) | |
| 249 | 255 | public void deliveryAfterSale(Long userId, AppTradeAfterSaleDeliveryReqVO deliveryReqVO) { |
| 250 | 256 | // 校验售后单存在,并状态未退货 |
| 251 | 257 | TradeAfterSaleDO afterSale = tradeAfterSaleMapper.selectById(deliveryReqVO.getId()); |
| ... | ... | @@ -255,6 +261,7 @@ public class TradeAfterSaleServiceImpl implements TradeAfterSaleService, AfterSa |
| 255 | 261 | if (ObjectUtil.notEqual(afterSale.getStatus(), TradeAfterSaleStatusEnum.SELLER_AGREE.getStatus())) { |
| 256 | 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 | 267 | updateAfterSaleStatus(afterSale.getId(), TradeAfterSaleStatusEnum.SELLER_AGREE.getStatus(), new TradeAfterSaleDO() |
| ... | ... | @@ -263,14 +270,17 @@ public class TradeAfterSaleServiceImpl implements TradeAfterSaleService, AfterSa |
| 263 | 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 | 278 | // TODO 发送售后消息 |
| 270 | 279 | } |
| 271 | 280 | |
| 272 | 281 | @Override |
| 273 | 282 | @Transactional(rollbackFor = Exception.class) |
| 283 | + @AfterSaleLog(operateType = AfterSaleOperateTypeEnum.ADMIN_AGREE_RECEIVE) | |
| 274 | 284 | public void receiveAfterSale(Long userId, Long id) { |
| 275 | 285 | // 校验售后单存在,并状态为已退货 |
| 276 | 286 | TradeAfterSaleDO afterSale = validateAfterSaleReceivable(id); |
| ... | ... | @@ -280,14 +290,15 @@ public class TradeAfterSaleServiceImpl implements TradeAfterSaleService, AfterSa |
| 280 | 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 | 296 | // TODO 发送售后消息 |
| 287 | 297 | } |
| 288 | 298 | |
| 289 | 299 | @Override |
| 290 | 300 | @Transactional(rollbackFor = Exception.class) |
| 301 | + @AfterSaleLog(operateType = AfterSaleOperateTypeEnum.ADMIN_DISAGREE_RECEIVE) | |
| 291 | 302 | public void refuseAfterSale(Long userId, TradeAfterSaleRefuseReqVO refuseReqVO) { |
| 292 | 303 | // 校验售后单存在,并状态为已退货 |
| 293 | 304 | TradeAfterSaleDO afterSale = tradeAfterSaleMapper.selectById(refuseReqVO.getId()); |
| ... | ... | @@ -304,8 +315,9 @@ public class TradeAfterSaleServiceImpl implements TradeAfterSaleService, AfterSa |
| 304 | 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 | 322 | // TODO 发送售后消息 |
| 311 | 323 | |
| ... | ... | @@ -332,6 +344,7 @@ public class TradeAfterSaleServiceImpl implements TradeAfterSaleService, AfterSa |
| 332 | 344 | |
| 333 | 345 | @Override |
| 334 | 346 | @Transactional(rollbackFor = Exception.class) |
| 347 | + @AfterSaleLog(operateType = AfterSaleOperateTypeEnum.ADMIN_REFUND) | |
| 335 | 348 | public void refundAfterSale(Long userId, String userIp, Long id) { |
| 336 | 349 | // 校验售后单的状态,并状态待退款 |
| 337 | 350 | TradeAfterSaleDO afterSale = tradeAfterSaleMapper.selectById(id); |
| ... | ... | @@ -350,8 +363,8 @@ public class TradeAfterSaleServiceImpl implements TradeAfterSaleService, AfterSa |
| 350 | 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 | 369 | // TODO 发送售后消息 |
| 357 | 370 | |
| ... | ... | @@ -374,6 +387,8 @@ public class TradeAfterSaleServiceImpl implements TradeAfterSaleService, AfterSa |
| 374 | 387 | } |
| 375 | 388 | |
| 376 | 389 | @Override |
| 390 | + @Transactional(rollbackFor = Exception.class) | |
| 391 | + @AfterSaleLog(operateType = AfterSaleOperateTypeEnum.MEMBER_CANCEL) | |
| 377 | 392 | public void cancelAfterSale(Long userId, Long id) { |
| 378 | 393 | // 校验售后单的状态,并状态待退款 |
| 379 | 394 | TradeAfterSaleDO afterSale = tradeAfterSaleMapper.selectById(id); |
| ... | ... | @@ -391,8 +406,8 @@ public class TradeAfterSaleServiceImpl implements TradeAfterSaleService, AfterSa |
| 391 | 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 | 412 | // TODO 发送售后消息 |
| 398 | 413 | ... | ... |