|
@@ -15,9 +15,11 @@ import com.ylx.common.utils.SecurityUtils;
|
|
|
import com.ylx.massage.domain.*;
|
|
import com.ylx.massage.domain.*;
|
|
|
import com.ylx.massage.domain.dto.*;
|
|
import com.ylx.massage.domain.dto.*;
|
|
|
import com.ylx.massage.domain.vo.*;
|
|
import com.ylx.massage.domain.vo.*;
|
|
|
|
|
+import com.ylx.massage.enums.AfterSaleStatusEnum;
|
|
|
import com.ylx.massage.enums.BillTypeEnum;
|
|
import com.ylx.massage.enums.BillTypeEnum;
|
|
|
import com.ylx.massage.enums.PaymentStatusEnum;
|
|
import com.ylx.massage.enums.PaymentStatusEnum;
|
|
|
import com.ylx.massage.enums.ProductOrderStatusEnum;
|
|
import com.ylx.massage.enums.ProductOrderStatusEnum;
|
|
|
|
|
+import com.ylx.massage.mapper.AfterSaleOrderMapper;
|
|
|
import com.ylx.massage.mapper.ProductMapper;
|
|
import com.ylx.massage.mapper.ProductMapper;
|
|
|
import com.ylx.massage.mapper.ProductOrderInfoMapper;
|
|
import com.ylx.massage.mapper.ProductOrderInfoMapper;
|
|
|
import com.ylx.massage.mapper.ProductOrderItemMapper;
|
|
import com.ylx.massage.mapper.ProductOrderItemMapper;
|
|
@@ -65,6 +67,10 @@ public class ProductOrderInfoServiceImpl extends ServiceImpl<ProductOrderInfoMap
|
|
|
|
|
|
|
|
@Autowired
|
|
@Autowired
|
|
|
private ProductSkuMapper productSkuMapper;
|
|
private ProductSkuMapper productSkuMapper;
|
|
|
|
|
+
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private AfterSaleOrderMapper afterSaleOrderMapper;
|
|
|
|
|
+
|
|
|
@Resource
|
|
@Resource
|
|
|
private IAfterSaleOrderService afterSaleOrderService;
|
|
private IAfterSaleOrderService afterSaleOrderService;
|
|
|
|
|
|
|
@@ -332,10 +338,10 @@ public class ProductOrderInfoServiceImpl extends ServiceImpl<ProductOrderInfoMap
|
|
|
*
|
|
*
|
|
|
* @param orderNo 订单编号
|
|
* @param orderNo 订单编号
|
|
|
* @param openId 用户openId
|
|
* @param openId 用户openId
|
|
|
- * @return ProductOrderDetailVo 订单详情
|
|
|
|
|
|
|
+ * @return ProductOrderDetailResponse 订单详情(结构化响应)
|
|
|
*/
|
|
*/
|
|
|
@Override
|
|
@Override
|
|
|
- public ProductOrderDetailVo getProductOrderDetail(String orderNo, String openId) {
|
|
|
|
|
|
|
+ public ProductOrderDetailResponse getProductOrderDetail(String orderNo, String openId) {
|
|
|
if (StringUtils.isBlank(openId)) {
|
|
if (StringUtils.isBlank(openId)) {
|
|
|
throw new ServiceException("用户openId不能为空");
|
|
throw new ServiceException("用户openId不能为空");
|
|
|
}
|
|
}
|
|
@@ -346,14 +352,133 @@ public class ProductOrderInfoServiceImpl extends ServiceImpl<ProductOrderInfoMap
|
|
|
if (detail == null) {
|
|
if (detail == null) {
|
|
|
throw new ServiceException("订单不存在");
|
|
throw new ServiceException("订单不存在");
|
|
|
}
|
|
}
|
|
|
- detail.setOrderStatusName(ProductOrderStatusEnum.getDescByCode(detail.getOrderStatus()));
|
|
|
|
|
- //根据商品ID查询商品的付款类型
|
|
|
|
|
|
|
+
|
|
|
|
|
+ // 构建商品信息
|
|
|
|
|
+ ProductInfoVo productInfo = buildProductInfo(detail);
|
|
|
|
|
+ // 构建订单信息
|
|
|
|
|
+ OrderInfoVo orderInfo = buildOrderInfo(detail);
|
|
|
|
|
+ // 查询并构建售后信息
|
|
|
|
|
+ AfterSaleInfoVo afterSaleInfo = buildAfterSaleInfo(detail.getId());
|
|
|
|
|
+ // 组装响应
|
|
|
|
|
+ ProductOrderDetailResponse response = new ProductOrderDetailResponse();
|
|
|
|
|
+ response.setProductInfo(productInfo);
|
|
|
|
|
+ response.setOrderInfo(orderInfo);
|
|
|
|
|
+ response.setAfterSaleInfo(afterSaleInfo);
|
|
|
|
|
+ return response;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 构建商品信息
|
|
|
|
|
+ */
|
|
|
|
|
+ private ProductInfoVo buildProductInfo(ProductOrderDetailVo detail) {
|
|
|
|
|
+ ProductInfoVo productInfo = new ProductInfoVo();
|
|
|
|
|
+ productInfo.setProductId(detail.getProductId());
|
|
|
|
|
+ productInfo.setProductName(detail.getProductName());
|
|
|
|
|
+ productInfo.setSkuSpec(detail.getSkuSpec());
|
|
|
|
|
+ productInfo.setSkuImage(detail.getSkuImage());
|
|
|
|
|
+ // 根据商品ID查询商品的付款类型
|
|
|
Product product = productMapper.selectById(detail.getProductId());
|
|
Product product = productMapper.selectById(detail.getProductId());
|
|
|
- detail.setPaymentType(product.getPaymentType());
|
|
|
|
|
|
|
+ if (product != null) {
|
|
|
|
|
+ productInfo.setPaymentType(product.getPaymentType());
|
|
|
|
|
+ }
|
|
|
|
|
+ return productInfo;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 构建订单信息
|
|
|
|
|
+ */
|
|
|
|
|
+ private OrderInfoVo buildOrderInfo(ProductOrderDetailVo detail) {
|
|
|
|
|
+ OrderInfoVo orderInfo = new OrderInfoVo();
|
|
|
|
|
+ // 基础订单信息
|
|
|
|
|
+ orderInfo.setId(detail.getId());
|
|
|
|
|
+ orderInfo.setOrderNo(detail.getOrderNo());
|
|
|
|
|
+ orderInfo.setOpenId(detail.getOpenId());
|
|
|
|
|
+ orderInfo.setOrderStatus(detail.getOrderStatus());
|
|
|
|
|
+ orderInfo.setOrderStatusName(ProductOrderStatusEnum.getDescByCode(detail.getOrderStatus()));
|
|
|
|
|
+ orderInfo.setBuyerRemark(detail.getBuyerRemark());
|
|
|
|
|
+ orderInfo.setDeliveryType(detail.getDeliveryType());
|
|
|
|
|
+ orderInfo.setCreateTime(detail.getCreateTime());
|
|
|
|
|
+
|
|
|
|
|
+ // 支付信息
|
|
|
|
|
+ orderInfo.setPayStatus(detail.getPayStatus());
|
|
|
|
|
+ orderInfo.setPayType(detail.getPayType());
|
|
|
|
|
+ orderInfo.setPayTime(detail.getPayTime());
|
|
|
|
|
+ orderInfo.setPayExpireTime(detail.getPayExpireTime());
|
|
|
// 计算剩余秒数
|
|
// 计算剩余秒数
|
|
|
- long remainSeconds = ChronoUnit.SECONDS.between(LocalDateTime.now(), detail.getPayExpireTime());
|
|
|
|
|
- detail.setRemainSeconds(remainSeconds);
|
|
|
|
|
- return detail;
|
|
|
|
|
|
|
+ if (detail.getPayExpireTime() != null) {
|
|
|
|
|
+ long remainSeconds = ChronoUnit.SECONDS.between(LocalDateTime.now(), detail.getPayExpireTime());
|
|
|
|
|
+ orderInfo.setRemainSeconds(remainSeconds);
|
|
|
|
|
+ }
|
|
|
|
|
+ orderInfo.setTotalAmount(detail.getTotalAmount());
|
|
|
|
|
+ orderInfo.setDiscountAmount(detail.getDiscountAmount());
|
|
|
|
|
+ orderInfo.setFreightAmount(detail.getFreightAmount());
|
|
|
|
|
+ orderInfo.setPayAmount(detail.getPayAmount());
|
|
|
|
|
+ orderInfo.setPointsUsed(detail.getPointsUsed());
|
|
|
|
|
+
|
|
|
|
|
+ // 地址信息
|
|
|
|
|
+ orderInfo.setReceiverName(detail.getReceiverName());
|
|
|
|
|
+ orderInfo.setReceiverPhone(detail.getReceiverPhone());
|
|
|
|
|
+ orderInfo.setAddressName(detail.getAddressName());
|
|
|
|
|
+
|
|
|
|
|
+ // 物流信息
|
|
|
|
|
+ orderInfo.setLogisticsCompany(detail.getLogisticsCompany());
|
|
|
|
|
+ orderInfo.setLogisticsNo(detail.getLogisticsNo());
|
|
|
|
|
+ orderInfo.setDeliveryTime(detail.getDeliveryTime());
|
|
|
|
|
+ orderInfo.setReceiveTime(detail.getReceiveTime());
|
|
|
|
|
+ return orderInfo;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 构建售后信息
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param orderId 订单ID
|
|
|
|
|
+ * @return AfterSaleInfoVo 售后信息
|
|
|
|
|
+ */
|
|
|
|
|
+ private AfterSaleInfoVo buildAfterSaleInfo(Long orderId) {
|
|
|
|
|
+ AfterSaleInfoVo afterSaleInfo = new AfterSaleInfoVo();
|
|
|
|
|
+ // 查询售后订单
|
|
|
|
|
+ LambdaQueryWrapper<AfterSaleOrder> queryWrapper = new LambdaQueryWrapper<AfterSaleOrder>()
|
|
|
|
|
+ .eq(AfterSaleOrder::getOrderId, orderId)
|
|
|
|
|
+ .orderByDesc(AfterSaleOrder::getCreateTime)
|
|
|
|
|
+ .last("LIMIT 1");
|
|
|
|
|
+ AfterSaleOrder afterSaleOrder = afterSaleOrderMapper.selectOne(queryWrapper);
|
|
|
|
|
+
|
|
|
|
|
+ if (afterSaleOrder != null) {
|
|
|
|
|
+ afterSaleInfo.setAfterSaleNo(afterSaleOrder.getAfterSaleNo());
|
|
|
|
|
+ afterSaleInfo.setOrderId(afterSaleOrder.getOrderId());
|
|
|
|
|
+ afterSaleInfo.setOrderNo(afterSaleOrder.getOrderNo());
|
|
|
|
|
+ afterSaleInfo.setAfterSaleType(afterSaleOrder.getAfterSaleType());
|
|
|
|
|
+ afterSaleInfo.setAfterSaleTypeName(getAfterSaleTypeName(afterSaleOrder.getAfterSaleType()));
|
|
|
|
|
+ afterSaleInfo.setAfterSaleStatus(afterSaleOrder.getAfterSaleStatus());
|
|
|
|
|
+ afterSaleInfo.setAfterSaleStatusName(AfterSaleStatusEnum.getDescByCode(afterSaleOrder.getAfterSaleStatus()));
|
|
|
|
|
+ afterSaleInfo.setApplyReason(afterSaleOrder.getApplyReason());
|
|
|
|
|
+ afterSaleInfo.setApplyDesc(afterSaleOrder.getApplyDesc());
|
|
|
|
|
+ afterSaleInfo.setApplyImages(afterSaleOrder.getApplyImages());
|
|
|
|
|
+ afterSaleInfo.setApplyAmount(afterSaleOrder.getApplyAmount());
|
|
|
|
|
+ afterSaleInfo.setActualRefundAmount(afterSaleOrder.getActualRefundAmount());
|
|
|
|
|
+ afterSaleInfo.setRefundType(afterSaleOrder.getRefundType());
|
|
|
|
|
+ afterSaleInfo.setAuditTime(afterSaleOrder.getAuditTime());
|
|
|
|
|
+ afterSaleInfo.setAuditRemark(afterSaleOrder.getAuditRemark());
|
|
|
|
|
+ afterSaleInfo.setRejectReason(afterSaleOrder.getRejectReason());
|
|
|
|
|
+ afterSaleInfo.setRefundTime(afterSaleOrder.getRefundTime());
|
|
|
|
|
+ afterSaleInfo.setExchangeOrderNo(afterSaleOrder.getExchangeOrderNo());
|
|
|
|
|
+ afterSaleInfo.setFinishTime(afterSaleOrder.getFinishTime());
|
|
|
|
|
+ afterSaleInfo.setLogisticsNo(afterSaleOrder.getLogisticsNo());
|
|
|
|
|
+ afterSaleInfo.setRemark(afterSaleOrder.getRemark());
|
|
|
|
|
+ afterSaleInfo.setCreateTime(afterSaleOrder.getCreateTime());
|
|
|
|
|
+ }
|
|
|
|
|
+ // 如果没有售后信息,返回空对象(Spring会自动初始化为空对象而非null)
|
|
|
|
|
+ return afterSaleInfo;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 获取售后类型名称
|
|
|
|
|
+ */
|
|
|
|
|
+ private String getAfterSaleTypeName(Integer afterSaleType) {
|
|
|
|
|
+ if (afterSaleType == null) {
|
|
|
|
|
+ return "";
|
|
|
|
|
+ }
|
|
|
|
|
+ return afterSaleType == 1 ? "退货" : "换货";
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|