Просмотр исходного кода

新增情侣套餐订单用户删除订单、修改配送单接口

codingliang 10 месяцев назад
Родитель
Сommit
887b84434d

+ 27 - 0
src/main/java/com/sqx/modules/lovers/controller/app/AppLoversSetOrderController.java

@@ -3,6 +3,7 @@ package com.sqx.modules.lovers.controller.app;
 import com.sqx.common.utils.PageUtils;
 import com.sqx.common.utils.Result;
 import com.sqx.modules.app.annotation.Login;
+import com.sqx.modules.lovers.dto.LoversSetOrderDeliveryInfoModifyDTO;
 import com.sqx.modules.lovers.dto.LoversSetOrderQueryDTO;
 import com.sqx.modules.lovers.dto.LoversSetOrderSubmitDTO;
 import com.sqx.modules.lovers.service.LoversSetOrderInfoService;
@@ -10,13 +11,18 @@ import com.sqx.modules.pay.vo.WechatTransactionsParamVO;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.DeleteMapping;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PutMapping;
 import org.springframework.web.bind.annotation.RequestAttribute;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.validation.Valid;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+import java.util.List;
 
 @Api(tags = {"移动端-情侣套餐订单"})
 @RestController
@@ -58,4 +64,25 @@ public class AppLoversSetOrderController {
         String token = loversSetOrderInfoService.getSubmitToken(userId);
         return Result.success().put("data", token);
     }
+
+    @Login
+    @ApiOperation("用户删除订单")
+    @DeleteMapping("{orderId}")
+    public Result deleteOrder(@RequestAttribute Long userId, @PathVariable Long orderId) {
+        loversSetOrderInfoService.userDeleteOrder(userId, orderId);
+
+        return Result.success();
+    }
+
+    @Login
+    @ApiOperation("配送单修改")
+    @PutMapping("delivery-info/{orderId}")
+    public Result updateDeliveryInfo(@RequestAttribute Long userId,
+                                     @PathVariable Long orderId,
+                                     @Valid @NotNull(message = "修改信息不能为空") @Size(message = "修改信息不能为空")
+                                     List<LoversSetOrderDeliveryInfoModifyDTO> deliveryInfoModifyList) {
+        loversSetOrderInfoService.updateDeliveryInfo(userId, orderId, deliveryInfoModifyList);
+
+        return Result.success();
+    }
 }

+ 24 - 0
src/main/java/com/sqx/modules/lovers/dto/LoversSetOrderDeliveryInfoModifyDTO.java

@@ -0,0 +1,24 @@
+package com.sqx.modules.lovers.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.time.LocalDateTime;
+
+/**
+ * 情侣套餐配送信息修改DTO
+ * @author codingliang
+ * @date 2025-08-28
+ */
+@Data
+public class LoversSetOrderDeliveryInfoModifyDTO {
+
+    @ApiModelProperty("主键id")
+    @NotNull(message = "配送信息id不能为空")
+    private Long id;
+
+    @ApiModelProperty("预计配送时间")
+    @NotNull(message = "预计配送时间不能为空")
+    private LocalDateTime deliveryTimeOfExpect;
+}

+ 9 - 0
src/main/java/com/sqx/modules/lovers/service/LoversSetOrderDeliveryInfoService.java

@@ -3,5 +3,14 @@ package com.sqx.modules.lovers.service;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.sqx.modules.lovers.entity.LoversSetOrderDeliveryInfo;
 
+import java.util.List;
+
 public interface LoversSetOrderDeliveryInfoService extends IService<LoversSetOrderDeliveryInfo> {
+
+    /**
+     * 根据订单id查询
+     * @param orderId 订单id
+     * @return 配送信息列表
+     */
+    List<LoversSetOrderDeliveryInfo> getByOrderId(Long orderId);
 }

+ 17 - 0
src/main/java/com/sqx/modules/lovers/service/LoversSetOrderInfoService.java

@@ -2,11 +2,14 @@ package com.sqx.modules.lovers.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.sqx.common.utils.PageUtils;
+import com.sqx.modules.lovers.dto.LoversSetOrderDeliveryInfoModifyDTO;
 import com.sqx.modules.lovers.dto.LoversSetOrderQueryDTO;
 import com.sqx.modules.lovers.dto.LoversSetOrderSubmitDTO;
 import com.sqx.modules.lovers.entity.LoversSetOrderInfo;
 import com.sqx.modules.pay.vo.WechatTransactionsParamVO;
 
+import java.util.List;
+
 public interface LoversSetOrderInfoService extends IService<LoversSetOrderInfo> {
 
     /**
@@ -50,4 +53,18 @@ public interface LoversSetOrderInfoService extends IService<LoversSetOrderInfo>
      */
     void updateOrderAfterPaySuccess(String orderNo);
 
+    /**
+     * 用户删除订单
+     * @param userId 用户id
+     * @param orderId 订单id
+     */
+    void userDeleteOrder(Long userId, Long orderId);
+
+    /**
+     * 修改配送单信息
+     * @param userId 用户id
+     * @param orderId 订单id
+     * @param deliveryInfoModifyList 待修改配送单信息
+     */
+    void updateDeliveryInfo(Long userId, Long orderId, List<LoversSetOrderDeliveryInfoModifyDTO> deliveryInfoModifyList);
 }

+ 10 - 0
src/main/java/com/sqx/modules/lovers/service/impl/LoversSetOrderDeliveryInfoServiceImpl.java

@@ -1,11 +1,21 @@
 package com.sqx.modules.lovers.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.sqx.modules.lovers.dao.LoversSetOrderDeliveryInfoDao;
 import com.sqx.modules.lovers.entity.LoversSetOrderDeliveryInfo;
 import com.sqx.modules.lovers.service.LoversSetOrderDeliveryInfoService;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 @Service
 public class LoversSetOrderDeliveryInfoServiceImpl extends ServiceImpl<LoversSetOrderDeliveryInfoDao, LoversSetOrderDeliveryInfo> implements LoversSetOrderDeliveryInfoService {
+
+    @Override
+    public List<LoversSetOrderDeliveryInfo> getByOrderId(Long orderId) {
+        LambdaQueryWrapper<LoversSetOrderDeliveryInfo> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(LoversSetOrderDeliveryInfo::getLoversSetOrderId, orderId);
+        return list(queryWrapper);
+    }
 }

+ 64 - 0
src/main/java/com/sqx/modules/lovers/service/impl/LoversSetOrderInfoServiceImpl.java

@@ -17,6 +17,7 @@ import com.sqx.modules.app.entity.UserEntity;
 import com.sqx.modules.app.service.UserService;
 import com.sqx.modules.lovers.dao.LoversSetOrderInfoDao;
 import com.sqx.modules.lovers.dto.LoversSetMenstrualPeriodSettingDTO;
+import com.sqx.modules.lovers.dto.LoversSetOrderDeliveryInfoModifyDTO;
 import com.sqx.modules.lovers.dto.LoversSetOrderQueryDTO;
 import com.sqx.modules.lovers.dto.LoversSetOrderSubmitDTO;
 import com.sqx.modules.lovers.entity.LoversSetOrderDeliveryInfo;
@@ -48,6 +49,7 @@ import java.time.temporal.ChronoUnit;
 import java.util.List;
 import java.util.Map;
 import java.util.UUID;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 import java.util.stream.IntStream;
 
@@ -141,6 +143,68 @@ public class LoversSetOrderInfoServiceImpl extends ServiceImpl<LoversSetOrderInf
         saveDeliveryInfo(orderInfo);
     }
 
+    @Override
+    public void userDeleteOrder(Long userId, Long orderId) {
+        LoversSetOrderInfo orderInfo = getById(orderId);
+        validateOrderAccess(orderInfo, userId);
+
+        String activeStatus = orderInfo.getActiveStatus();
+        if (!StrUtil.equals(activeStatus, "0")) {
+            throw new SqxException("当前状态下订单不能被删除!");
+        }
+
+        removeById(orderId);
+    }
+
+    @Override
+    @Transactional
+    public void updateDeliveryInfo(Long userId, Long orderId, List<LoversSetOrderDeliveryInfoModifyDTO> deliveryInfoModifyList) {
+        LoversSetOrderInfo orderInfo = getById(orderId);
+        validateOrderAccess(orderInfo, userId);
+
+        List<LoversSetOrderDeliveryInfo> oldInfoList = loversSetOrderDeliveryInfoService.getByOrderId(orderId);
+        Map<Long, LoversSetOrderDeliveryInfo> oldInfoMap = oldInfoList.stream().collect(Collectors.toMap(LoversSetOrderDeliveryInfo::getId, Function.identity()));
+
+        List<LoversSetOrderDeliveryInfo> updateInfoList = deliveryInfoModifyList.stream()
+                .map(modifyDTO -> processDeliveryInfoModify(oldInfoMap, modifyDTO))
+                .collect(Collectors.toList());
+
+        loversSetOrderDeliveryInfoService.updateBatchById(updateInfoList);
+    }
+
+    private LoversSetOrderDeliveryInfo processDeliveryInfoModify(
+            Map<Long, LoversSetOrderDeliveryInfo> oldInfoMap,
+            LoversSetOrderDeliveryInfoModifyDTO modifyDTO) {
+
+        Long deliveryInfoId = modifyDTO.getId();
+        LoversSetOrderDeliveryInfo deliveryInfo = oldInfoMap.get(deliveryInfoId);
+
+        // 验证配送信息有效性
+        if (ObjectUtil.isNull(deliveryInfo)) {
+            throw new SqxException("无效的配送信息id:" + deliveryInfoId);
+        }
+
+        if (!"1".equals(deliveryInfo.getDeliveryStatus())) {
+            throw new SqxException("配送单状态异常(当前状态:" + deliveryInfo.getDeliveryStatus() + "),id:" + deliveryInfoId);
+        }
+
+        if (ChronoUnit.DAYS.between(deliveryInfo.getDeliveryTimeOfExpect(), modifyDTO.getDeliveryTimeOfExpect()) != 0) {
+            throw new SqxException("只能修改为同一天的配送时间,id:" + deliveryInfoId);
+        }
+
+        BeanUtil.copyProperties(modifyDTO, deliveryInfo);
+        return deliveryInfo;
+    }
+
+    private void validateOrderAccess(LoversSetOrderInfo orderInfo, Long userId) {
+        if (ObjectUtil.isNull(orderInfo)) {
+            throw new SqxException("无效的订单id");
+        }
+        if (!userId.equals(orderInfo.getUserId())) {
+            throw new SqxException("权限异常:不能修改非自己的订单");
+        }
+    }
+
     private void saveDeliveryInfo(LoversSetOrderInfo orderInfo) {
         // 生成订单配送信息
         List<LoversSetOrderDetail> orderDetails = loversSetOrderDetailService.getByOrderId(orderInfo.getId());