Răsfoiți Sursa

提交售后接口

wangzhijun 3 zile în urmă
părinte
comite
102646ce6d

+ 32 - 0
nightFragrance-admin/src/main/java/com/ylx/web/controller/massage/AfterSaleOrderController.java

@@ -66,4 +66,36 @@ public class AfterSaleOrderController {
         this.afterSaleOrderService.editByWechat(dto);
         return R.ok();
     }
+
+    @ApiOperation("商家同意退货申请")
+    @Log(title = "同意退货", businessType = BusinessType.UPDATE)
+    @PutMapping("/agree/return/{orderId}")
+    public R agreeReturn(@PathVariable Long orderId) {
+        this.afterSaleOrderService.agreeReturn(orderId);
+        return R.ok();
+    }
+
+    @ApiOperation("商家同意换货申请")
+    @Log(title = "同意换货", businessType = BusinessType.UPDATE)
+    @PutMapping("/agree/exchange/{orderId}")
+    public R agreeExchange(@PathVariable Long orderId) {
+        this.afterSaleOrderService.agreeExchange(orderId);
+        return R.ok();
+    }
+
+    @ApiOperation("商家同意退款申请")
+    @Log(title = "同意退款", businessType = BusinessType.UPDATE)
+    @PutMapping("/agree/refund/{orderId}")
+    public R agreeRefund(@PathVariable Long orderId) {
+        this.afterSaleOrderService.agreeRefund(orderId);
+        return R.ok();
+    }
+
+    @ApiOperation("商家确认收货")
+    @Log(title = "确认收货", businessType = BusinessType.UPDATE)
+    @PutMapping("/confirm/receive/{orderId}")
+    public R confirmReceive(@PathVariable Long orderId) {
+        this.afterSaleOrderService.confirmReceive(orderId);
+        return R.ok();
+    }
 }

+ 25 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/enums/AfterSaleTypeEnum.java

@@ -0,0 +1,25 @@
+package com.ylx.massage.enums;
+
+import lombok.Getter;
+
+/**
+ * 售后类型枚举
+ */
+@Getter
+public enum AfterSaleTypeEnum {
+
+    RETURN_GOODS(1, "退货"),
+
+    EXCHANGE_GOODS(2, "换货"),
+
+    NOT_RECEIVED(3, "未收到货");
+
+    private final Integer code;
+    private final String info;
+
+    AfterSaleTypeEnum(Integer code, String info) {
+        this.code = code;
+        this.info = info;
+    }
+
+}

+ 8 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/service/IAfterSaleOrderService.java

@@ -17,4 +17,12 @@ public interface IAfterSaleOrderService extends IService<AfterSaleOrder> {
     void cancel(Long orderId);
 
     void editByWechat(AfterSaleOrderUpdateDTO dto);
+
+    void agreeReturn(Long orderId);
+
+    void agreeExchange(Long orderId);
+
+    void agreeRefund(Long orderId);
+
+    void confirmReceive(Long orderId);
 }

+ 140 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/service/impl/AfterSaleOrderServiceImpl.java

@@ -13,6 +13,7 @@ import com.ylx.massage.domain.dto.AfterSaleOrderDTO;
 import com.ylx.massage.domain.dto.AfterSaleOrderUpdateDTO;
 import com.ylx.massage.domain.vo.OrderAfterSaleVo;
 import com.ylx.massage.enums.AfterSaleStatusEnum;
+import com.ylx.massage.enums.AfterSaleTypeEnum;
 import com.ylx.massage.enums.ProductOrderStatusEnum;
 import com.ylx.massage.mapper.AfterSaleOrderMapper;
 import com.ylx.massage.service.IAfterSaleOrderService;
@@ -196,6 +197,145 @@ public class AfterSaleOrderServiceImpl extends ServiceImpl<AfterSaleOrderMapper,
         }
     }
 
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void agreeReturn(Long orderId) {
+
+        // 1. 查询并校验订单(公共方法提取)
+        ProductOrderInfo productOrderInfo = this.productOrderInfoService.getAndCheckOrder(orderId, null);
+
+        // 2. 状态校验:必须是 售后中 才能同意退货
+        if (!ProductOrderStatusEnum.AFTER_SALES.getCode().equals(productOrderInfo.getOrderStatus())) {
+            throw new ServiceException("订单状态异常,仅售后中状态可同意退货");
+        }
+
+        // 3. 判断售后单的状态为退货
+        LambdaQueryWrapper<AfterSaleOrder> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(AfterSaleOrder::getOrderId, orderId)
+                .eq(AfterSaleOrder::getAfterSaleType, AfterSaleTypeEnum.RETURN_GOODS.getCode())
+                .eq(AfterSaleOrder::getAfterSaleStatus, AfterSaleStatusEnum.WAIT_AUDIT.getCode());
+
+        AfterSaleOrder afterSaleOrder = this.afterSaleOrderMapper.selectOne(queryWrapper);
+        if (ObjectUtil.isNull(afterSaleOrder)) {
+            throw new ServiceException("未找到待审核的退货的售后单");
+        }
+
+        // 4. 更新售后订单状态为等待用户寄回
+        afterSaleOrder.setAfterSaleStatus(AfterSaleStatusEnum.WAITING_USER_RETURN.getCode());
+        afterSaleOrder.setUpdateTime(LocalDateTime.now());
+        boolean afterSaleUpdateResult = this.updateById(afterSaleOrder);
+        if (!afterSaleUpdateResult) {
+            throw new ServiceException("更新售后单失败");
+        }
+
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void agreeExchange(Long orderId) {
+        // 1. 查询并校验订单(公共方法提取)
+        ProductOrderInfo productOrderInfo = this.productOrderInfoService.getAndCheckOrder(orderId, null);
+
+        // 2. 状态校验:必须是 售后中 才能同意退货
+        if (!ProductOrderStatusEnum.AFTER_SALES.getCode().equals(productOrderInfo.getOrderStatus())) {
+            throw new ServiceException("订单状态异常,仅售后中状态可同意换货");
+        }
+
+        // 3. 判断售后单的状态为换货
+        LambdaQueryWrapper<AfterSaleOrder> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(AfterSaleOrder::getOrderId, orderId)
+                .eq(AfterSaleOrder::getAfterSaleType, AfterSaleTypeEnum.EXCHANGE_GOODS.getCode())
+                .eq(AfterSaleOrder::getAfterSaleStatus, AfterSaleStatusEnum.WAIT_AUDIT.getCode());
+
+        AfterSaleOrder afterSaleOrder = this.afterSaleOrderMapper.selectOne(queryWrapper);
+        if (ObjectUtil.isNull(afterSaleOrder)) {
+            throw new ServiceException("未找到待审核的换货的售后单");
+        }
+
+        // 4. 更新售后订单状态为等待用户寄回
+        afterSaleOrder.setAfterSaleStatus(AfterSaleStatusEnum.WAITING_USER_RETURN.getCode());
+        afterSaleOrder.setUpdateTime(LocalDateTime.now());
+        boolean afterSaleUpdateResult = this.updateById(afterSaleOrder);
+        if (!afterSaleUpdateResult) {
+            throw new ServiceException("更新售后单失败");
+        }
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void agreeRefund(Long orderId) {
+
+        // 1. 查询并校验订单(公共方法提取)
+        ProductOrderInfo productOrderInfo = this.productOrderInfoService.getAndCheckOrder(orderId, null);
+
+        // 2. 状态校验:必须是 售后中 才能确认收货
+        if (!ProductOrderStatusEnum.AFTER_SALES.getCode().equals(productOrderInfo.getOrderStatus())) {
+            throw new ServiceException("订单状态异常,仅售后中状态可确认收货");
+        }
+
+        // 3. 获取等待商家收货的售后单
+        LambdaQueryWrapper<AfterSaleOrder> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(AfterSaleOrder::getOrderId, orderId)
+                .eq(AfterSaleOrder::getAfterSaleStatus, AfterSaleStatusEnum.WAITING_MERCHANT_RECEIVE.getCode());
+
+        AfterSaleOrder afterSaleOrder = this.afterSaleOrderMapper.selectOne(queryWrapper);
+        if (ObjectUtil.isNull(afterSaleOrder)) {
+            throw new ServiceException("未找到等待商家收货的售后单");
+        }
+
+        // 4. 判断售后单的售后类型
+        if (ObjectUtil.notEqual(AfterSaleTypeEnum.RETURN_GOODS.getCode(), afterSaleOrder.getAfterSaleType())) {
+            throw new ServiceException("售后单类型异常,仅退货的售后单可退货");
+        }
+        // TODO 5.退款
+
+        // 6. 更新售后单数据
+        afterSaleOrder.setAfterSaleStatus(AfterSaleStatusEnum.REFUND_COMPLETED.getCode());
+        afterSaleOrder.setUpdateTime(LocalDateTime.now());
+        boolean afterSaleUpdateResult = this.updateById(afterSaleOrder);
+        if (!afterSaleUpdateResult) {
+            throw new ServiceException("更新售后单失败");
+        }
+
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void confirmReceive(Long orderId) {
+
+        // 1. 查询并校验订单(公共方法提取)
+        ProductOrderInfo productOrderInfo = this.productOrderInfoService.getAndCheckOrder(orderId, null);
+
+        // 2. 状态校验:必须是 售后中 才能确认收货
+        if (!ProductOrderStatusEnum.AFTER_SALES.getCode().equals(productOrderInfo.getOrderStatus())) {
+            throw new ServiceException("订单状态异常,仅售后中状态可确认收货");
+        }
+
+        // 3. 获取等待商家收货的售后单
+        LambdaQueryWrapper<AfterSaleOrder> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(AfterSaleOrder::getOrderId, orderId)
+                .eq(AfterSaleOrder::getAfterSaleStatus, AfterSaleStatusEnum.WAITING_MERCHANT_RECEIVE.getCode());
+
+        AfterSaleOrder afterSaleOrder = this.afterSaleOrderMapper.selectOne(queryWrapper);
+        if (ObjectUtil.isNull(afterSaleOrder)) {
+            throw new ServiceException("未找到等待商家收货的售后单");
+        }
+
+        // 4. 判断售后单的售后类型
+        if (ObjectUtil.notEqual(AfterSaleTypeEnum.EXCHANGE_GOODS.getCode(), afterSaleOrder.getAfterSaleType())) {
+            throw new ServiceException("售后单类型异常,仅换货的售后单可换货");
+        }
+
+        // 5. 更新售后单数据
+        afterSaleOrder.setAfterSaleStatus(AfterSaleStatusEnum.WAITING_MERCHANT_SHIP.getCode());
+        afterSaleOrder.setUpdateTime(LocalDateTime.now());
+        boolean afterSaleUpdateResult = this.updateById(afterSaleOrder);
+        if (!afterSaleUpdateResult) {
+            throw new ServiceException("更新售后单失败");
+        }
+
+    }
+
     private WxLoginUser getCurrentWxLoginUser() {
         WxLoginUser loginUser = SecurityUtils.getWxLoginUser();
         if (ObjectUtil.isNull(loginUser)) {

+ 1 - 1
nightFragrance-massage/src/main/java/com/ylx/massage/service/impl/ProductOrderInfoServiceImpl.java

@@ -391,7 +391,7 @@ public class ProductOrderInfoServiceImpl extends ServiceImpl<ProductOrderInfoMap
     private OrderInfoVo buildOrderInfo(ProductOrderDetailVo detail) {
         OrderInfoVo orderInfo = new OrderInfoVo();
         // 基础订单信息
-        orderInfo.setId(detail.getId());
+        orderInfo.setId(detail.getId().toString());
         orderInfo.setOrderNo(detail.getOrderNo());
         orderInfo.setOpenId(detail.getOpenId());
         orderInfo.setOrderStatus(detail.getOrderStatus());