|
@@ -1,14 +1,18 @@
|
|
|
package com.ylx.massage.service.impl;
|
|
package com.ylx.massage.service.impl;
|
|
|
|
|
|
|
|
|
|
+import cn.hutool.core.util.ObjectUtil;
|
|
|
import cn.hutool.json.JSONUtil;
|
|
import cn.hutool.json.JSONUtil;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
import com.ylx.common.constant.MassageConstants;
|
|
import com.ylx.common.constant.MassageConstants;
|
|
|
import com.ylx.common.core.domain.R;
|
|
import com.ylx.common.core.domain.R;
|
|
|
|
|
+import com.ylx.common.core.domain.model.WxLoginUser;
|
|
|
import com.ylx.common.exception.ServiceException;
|
|
import com.ylx.common.exception.ServiceException;
|
|
|
|
|
+import com.ylx.common.utils.SecurityUtils;
|
|
|
import com.ylx.massage.domain.*;
|
|
import com.ylx.massage.domain.*;
|
|
|
import com.ylx.massage.domain.dto.ProductOrderCreateRequest;
|
|
import com.ylx.massage.domain.dto.ProductOrderCreateRequest;
|
|
|
|
|
+import com.ylx.massage.domain.dto.ProductOrderOperateDTO;
|
|
|
import com.ylx.massage.domain.dto.ProductOrderPayRequest;
|
|
import com.ylx.massage.domain.dto.ProductOrderPayRequest;
|
|
|
import com.ylx.massage.domain.vo.ProductOrderDetailVo;
|
|
import com.ylx.massage.domain.vo.ProductOrderDetailVo;
|
|
|
import com.ylx.massage.domain.vo.ProductOrderListVo;
|
|
import com.ylx.massage.domain.vo.ProductOrderListVo;
|
|
@@ -23,7 +27,6 @@ import com.ylx.massage.service.TRechargeService;
|
|
|
import com.ylx.massage.service.TWxUserService;
|
|
import com.ylx.massage.service.TWxUserService;
|
|
|
import com.ylx.massage.utils.OrderNumberGenerator;
|
|
import com.ylx.massage.utils.OrderNumberGenerator;
|
|
|
import com.ylx.product.domain.ProductOrderAddress;
|
|
import com.ylx.product.domain.ProductOrderAddress;
|
|
|
-import com.ylx.product.domain.vo.ProductOrderAddressVo;
|
|
|
|
|
import com.ylx.product.service.IProductOrderAddressService;
|
|
import com.ylx.product.service.IProductOrderAddressService;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
import org.apache.commons.lang3.StringUtils;
|
|
@@ -345,4 +348,70 @@ public class ProductOrderInfoServiceImpl extends ServiceImpl<ProductOrderInfoMap
|
|
|
detail.setOrderStatusName(ProductOrderStatusEnum.getDescByCode(detail.getOrderStatus()));
|
|
detail.setOrderStatusName(ProductOrderStatusEnum.getDescByCode(detail.getOrderStatus()));
|
|
|
return detail;
|
|
return detail;
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
|
|
+ public void confirmReceipt(ProductOrderOperateDTO dto) {
|
|
|
|
|
+
|
|
|
|
|
+ // 1. 获取当前登录用户(公共方法提取)
|
|
|
|
|
+ WxLoginUser loginUser = getCurrentWxLoginUser();
|
|
|
|
|
+
|
|
|
|
|
+ // 2. 查询并校验订单(公共方法提取)
|
|
|
|
|
+ ProductOrderInfo productOrderInfo = getAndCheckOrder(dto.getOrderId(), loginUser.getCOpenid());
|
|
|
|
|
+
|
|
|
|
|
+ // 3. 状态校验:必须是 待收货 才能确认收货
|
|
|
|
|
+ if (!ProductOrderStatusEnum.WAIT_RECEIVE.getCode().equals(productOrderInfo.getOrderStatus())) {
|
|
|
|
|
+ throw new RuntimeException("订单状态异常,仅待收货状态可确认收货");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 修改订单信息
|
|
|
|
|
+ LocalDateTime now = LocalDateTime.now();
|
|
|
|
|
+ productOrderInfo.setOrderStatus(ProductOrderStatusEnum.RECEIVED.getCode());
|
|
|
|
|
+ productOrderInfo.setReceiveTime(now);
|
|
|
|
|
+ productOrderInfo.setUpdateTime(now);
|
|
|
|
|
+ this.updateById(productOrderInfo);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
|
|
+ public void cancelReturn(ProductOrderOperateDTO dto) {
|
|
|
|
|
+
|
|
|
|
|
+ // 1. 获取当前登录用户(公共方法提取)
|
|
|
|
|
+ WxLoginUser loginUser = getCurrentWxLoginUser();
|
|
|
|
|
+
|
|
|
|
|
+ // 2. 查询并校验订单(公共方法提取)
|
|
|
|
|
+ ProductOrderInfo productOrderInfo = getAndCheckOrder(dto.getOrderId(), loginUser.getCOpenid());
|
|
|
|
|
+
|
|
|
|
|
+ // 3. 状态校验:必须是 退货中/退款中 才能取消退货
|
|
|
|
|
+ if (!ProductOrderStatusEnum.RETURNING.getCode().equals(productOrderInfo.getOrderStatus())) {
|
|
|
|
|
+ throw new RuntimeException("订单状态异常,仅退货中状态可取消退货");
|
|
|
|
|
+ }
|
|
|
|
|
+ // 修改订单信息
|
|
|
|
|
+ LocalDateTime now = LocalDateTime.now();
|
|
|
|
|
+ productOrderInfo.setOrderStatus(ProductOrderStatusEnum.WAIT_RECEIVE.getCode());
|
|
|
|
|
+ productOrderInfo.setUpdateTime(now);
|
|
|
|
|
+ this.updateById(productOrderInfo);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private WxLoginUser getCurrentWxLoginUser() {
|
|
|
|
|
+ WxLoginUser loginUser = SecurityUtils.getWxLoginUser();
|
|
|
|
|
+ if (ObjectUtil.isNull(loginUser)) {
|
|
|
|
|
+ throw new RuntimeException("用户未登录或登录已过期");
|
|
|
|
|
+ }
|
|
|
|
|
+ return loginUser;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private ProductOrderInfo getAndCheckOrder(Long orderId, String openId) {
|
|
|
|
|
+ LambdaQueryWrapper<ProductOrderInfo> queryWrapper = new LambdaQueryWrapper<>();
|
|
|
|
|
+ queryWrapper.eq(ProductOrderInfo::getId, orderId)
|
|
|
|
|
+ .eq(ProductOrderInfo::getOpenId, openId);
|
|
|
|
|
+
|
|
|
|
|
+ // 订单是单条,直接用 selectOne 更合理
|
|
|
|
|
+ ProductOrderInfo orderInfo = this.productOrderInfoMapper.selectOne(queryWrapper);
|
|
|
|
|
+ if (ObjectUtil.isNull(orderInfo)) {
|
|
|
|
|
+ throw new RuntimeException("订单不存在或无权限操作");
|
|
|
|
|
+ }
|
|
|
|
|
+ return orderInfo;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
}
|
|
}
|