From cc9e4c59d49f8cd239d44254086084d502803a5c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=A2=81=E5=AE=87=E5=A5=87?= Date: Fri, 11 Apr 2025 16:15:12 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E8=AE=A2=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ruoyi/xkt/domain/StoreOrderDetail.java | 24 +++++ .../xkt/dto/order/StoreOrderDetailDTO.java | 24 +++++ .../dto/order/StoreOrderDetailInfoDTO.java | 12 --- .../service/impl/StoreOrderServiceImpl.java | 88 ++++++++++++------- 4 files changed, 102 insertions(+), 46 deletions(-) diff --git a/xkt/src/main/java/com/ruoyi/xkt/domain/StoreOrderDetail.java b/xkt/src/main/java/com/ruoyi/xkt/domain/StoreOrderDetail.java index 66eb54d98..b99889e87 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/domain/StoreOrderDetail.java +++ b/xkt/src/main/java/com/ruoyi/xkt/domain/StoreOrderDetail.java @@ -30,6 +30,30 @@ public class StoreOrderDetail extends SimpleEntity { * 商品ID */ private Long storeProdId; + /** + * 商品名称 + */ + private String prodName; + /** + * 商品货号 + */ + private String prodArtNum; + /** + * 商品标题 + */ + private String prodTitle; + /** + * 档口颜色ID + */ + private Long storeColorId; + /** + * 颜色名称 + */ + private String colorName; + /** + * 商品尺码 + */ + private Integer size; /** * 订单明细状态(同订单状态)[10:已取消 11:待付款 12:待发货 13:已发货 14:已完成 21:售后中 22:售后拒绝 23:平台介入 24:售后完成] */ diff --git a/xkt/src/main/java/com/ruoyi/xkt/dto/order/StoreOrderDetailDTO.java b/xkt/src/main/java/com/ruoyi/xkt/dto/order/StoreOrderDetailDTO.java index ccd47e777..143b7427f 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/dto/order/StoreOrderDetailDTO.java +++ b/xkt/src/main/java/com/ruoyi/xkt/dto/order/StoreOrderDetailDTO.java @@ -29,6 +29,30 @@ public class StoreOrderDetailDTO { * 商品ID */ private Long storeProdId; + /** + * 商品名称 + */ + private String prodName; + /** + * 商品货号 + */ + private String prodArtNum; + /** + * 商品标题 + */ + private String prodTitle; + /** + * 档口颜色ID + */ + private Long storeColorId; + /** + * 颜色名称 + */ + private String colorName; + /** + * 商品尺码 + */ + private Integer size; /** * 订单明细状态(同订单状态)[10:已取消 11:待付款 12:待发货 13:已发货 14:已完成 21:售后中 22:售后拒绝 23:平台介入 24:售后完成] */ diff --git a/xkt/src/main/java/com/ruoyi/xkt/dto/order/StoreOrderDetailInfoDTO.java b/xkt/src/main/java/com/ruoyi/xkt/dto/order/StoreOrderDetailInfoDTO.java index f101bde0d..951e6d37f 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/dto/order/StoreOrderDetailInfoDTO.java +++ b/xkt/src/main/java/com/ruoyi/xkt/dto/order/StoreOrderDetailInfoDTO.java @@ -16,17 +16,5 @@ import java.util.List; @ToString(callSuper = true) public class StoreOrderDetailInfoDTO extends StoreOrderDetailDTO { - private String prodName; - - private String prodArtNum; - - private String prodTitle; - - private Long storeColorId; - - private String colorName; - - private Integer size; - private List fileList; } diff --git a/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreOrderServiceImpl.java b/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreOrderServiceImpl.java index c4362b37a..7eec085f7 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreOrderServiceImpl.java +++ b/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreOrderServiceImpl.java @@ -21,6 +21,9 @@ import com.ruoyi.xkt.service.IExpressService; import com.ruoyi.xkt.service.IOperationRecordService; import com.ruoyi.xkt.service.IStoreOrderService; import com.ruoyi.xkt.service.IVoucherSequenceService; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -71,8 +74,10 @@ public class StoreOrderServiceImpl implements IStoreOrderService { //校验 expressService.checkExpress(expressId); checkDelivery(storeOrderAddDTO.getDeliveryType(), storeOrderAddDTO.getDeliveryEndTime()); - Map spcsMap = checkOrderDetailThenRtnSpcsMap(storeId, - storeOrderAddDTO.getDetailList()); + OrderDetailCheckRtn detailCheckRtn = checkOrderDetailThenRtnUsedMap(storeId, storeOrderAddDTO.getDetailList()); + Map spcsMap = detailCheckRtn.getSpcsMap(); + Map spMap = detailCheckRtn.getSpMap(); + Map scMap = detailCheckRtn.getScMap(); //快递费配置 ExpressFeeConfig expressFeeConfig = expressService.getExpressFeeConfig(expressId, storeOrderAddDTO.getDestinationProvinceCode(), storeOrderAddDTO.getDestinationCityCode(), @@ -89,7 +94,17 @@ public class StoreOrderServiceImpl implements IStoreOrderService { StoreOrderDetail orderDetail = new StoreOrderDetail(); orderDetailList.add(orderDetail); orderDetail.setStoreProdColorSizeId(spcs.getId()); - orderDetail.setStoreProdId(spcs.getStoreProdId()); + //快照部分 + StoreProduct sp = spMap.get(spcs.getStoreProdId()); + StoreColor sc = scMap.get(spcs.getStoreColorId()); + orderDetail.setStoreProdId(sp.getId()); + orderDetail.setProdName(sp.getProdName()); + orderDetail.setProdArtNum(sp.getProdArtNum()); + orderDetail.setProdTitle(sp.getProdTitle()); + orderDetail.setStoreColorId(sc.getId()); + orderDetail.setColorName(sc.getColorName()); + orderDetail.setSize(spcs.getSize()); + //状态 orderDetail.setDetailStatus(EOrderStatus.PENDING_PAYMENT.getValue()); orderDetail.setPayStatus(beginPay ? EPayStatus.PAYING.getValue() : EPayStatus.INIT.getValue()); orderDetail.setExpressStatus(EExpressStatus.INIT.getValue()); @@ -199,8 +214,11 @@ public class StoreOrderServiceImpl implements IStoreOrderService { } expressService.checkExpress(expressId); checkDelivery(storeOrderUpdateDTO.getDeliveryType(), storeOrderUpdateDTO.getDeliveryEndTime()); - Map spcsMap = checkOrderDetailThenRtnSpcsMap(storeId, + OrderDetailCheckRtn detailCheckRtn = checkOrderDetailThenRtnUsedMap(storeId, storeOrderUpdateDTO.getDetailList()); + Map spcsMap = detailCheckRtn.getSpcsMap(); + Map spMap = detailCheckRtn.getSpMap(); + Map scMap = detailCheckRtn.getScMap(); //快递费配置 ExpressFeeConfig expressFeeConfig = expressService.getExpressFeeConfig(expressId, storeOrderUpdateDTO.getDestinationProvinceCode(), storeOrderUpdateDTO.getDestinationCityCode(), @@ -217,7 +235,17 @@ public class StoreOrderServiceImpl implements IStoreOrderService { StoreOrderDetail orderDetail = new StoreOrderDetail(); orderDetailList.add(orderDetail); orderDetail.setStoreProdColorSizeId(spcs.getId()); - orderDetail.setStoreProdId(spcs.getStoreProdId()); + //快照部分 + StoreProduct sp = spMap.get(spcs.getStoreProdId()); + StoreColor sc = scMap.get(spcs.getStoreColorId()); + orderDetail.setStoreProdId(sp.getId()); + orderDetail.setProdName(sp.getProdName()); + orderDetail.setProdArtNum(sp.getProdArtNum()); + orderDetail.setProdTitle(sp.getProdTitle()); + orderDetail.setStoreColorId(sc.getId()); + orderDetail.setColorName(sc.getColorName()); + orderDetail.setSize(spcs.getSize()); + //状态 orderDetail.setDetailStatus(EOrderStatus.PENDING_PAYMENT.getValue()); orderDetail.setPayStatus(order.getPayStatus()); orderDetail.setExpressStatus(EExpressStatus.INIT.getValue()); @@ -336,32 +364,8 @@ public class StoreOrderServiceImpl implements IStoreOrderService { orderInfo.setOriginCityName(regionNameMap.get(orderInfo.getOriginCityCode())); orderInfo.setOriginCountyName(regionNameMap.get(orderInfo.getOriginCountyCode())); //商品信息 - Set spcsIds = detailInfos.stream().map(StoreOrderDetailDTO::getStoreProdColorSizeId) - .collect(Collectors.toSet()); - List spcsList = storeProductColorSizeMapper.selectByIds(spcsIds); - Map spcsMap = spcsList.stream() - .collect(Collectors.toMap(StoreProductColorSize::getId, Function.identity())); - Set scIds = spcsList.stream().map(StoreProductColorSize::getStoreColorId).collect(Collectors.toSet()); - Map scMap = storeColorMapper.selectByIds(scIds).stream() - .collect(Collectors.toMap(StoreColor::getId, Function.identity())); - Set pIds = spcsList.stream().map(StoreProductColorSize::getStoreProdId).collect(Collectors.toSet()); - Map storeProductMap = storeProductMapper.selectByIds(pIds).stream() - .collect(Collectors.toMap(StoreProduct::getId, Function.identity())); for (StoreOrderDetailInfoDTO detailInfo : detailInfos) { - StoreProductColorSize spcs = spcsMap.get(detailInfo.getStoreProdColorSizeId()); - if (spcs != null) { - detailInfo.setSize(spcs.getSize()); - detailInfo.setStoreColorId(spcs.getStoreColorId()); - detailInfo.setColorName(Optional.ofNullable(scMap.get(spcs.getStoreColorId())) - .map(StoreColor::getColorName).orElse(null)); - StoreProduct sp = storeProductMap.get(spcs.getStoreProdId()); - if (sp != null) { - detailInfo.setProdName(sp.getProdName()); - detailInfo.setProdArtNum(sp.getProdArtNum()); - detailInfo.setProdTitle(sp.getProdTitle()); - } - detailInfo.setFileList(storeProductFileMapper.selectListByStoreProdId(spcs.getStoreProdId())); - } + detailInfo.setFileList(storeProductFileMapper.selectListByStoreProdId(detailInfo.getStoreProdId())); } return orderInfo; } @@ -539,8 +543,8 @@ public class StoreOrderServiceImpl implements IStoreOrderService { * @param detailList * @return 商品颜色尺码集合 */ - private Map checkOrderDetailThenRtnSpcsMap(Long storeId, - List detailList) { + private OrderDetailCheckRtn checkOrderDetailThenRtnUsedMap(Long storeId, + List detailList) { Assert.notNull(storeId, "档口不能为空"); Assert.notEmpty(detailList, "商品不能为空"); Set spcsIds = detailList.stream() @@ -550,10 +554,15 @@ public class StoreOrderServiceImpl implements IStoreOrderService { //下单商品颜色尺码 Map spcsMap = storeProductColorSizeMapper.selectByIds(spcsIds).stream() .collect(Collectors.toMap(StoreProductColorSize::getId, o -> o)); + //下单商品档口颜色 + Map scMap = storeColorMapper.selectByIds(spcsMap.values().stream() + .map(StoreProductColorSize::getStoreColorId) + .collect(Collectors.toSet())).stream() + .collect(Collectors.toMap(StoreColor::getId, Function.identity())); + //下单商品 List spIdList = spcsMap.values().stream() .map(StoreProductColorSize::getStoreProdId) .collect(Collectors.toList()); - //下单商品 Map spMap = storeProductMapper.selectByIds(spIdList).stream() .collect(Collectors.toMap(StoreProduct::getId, o -> o)); Set spcsIdCheckSet = new HashSet<>(detailList.size()); @@ -565,6 +574,8 @@ public class StoreOrderServiceImpl implements IStoreOrderService { } StoreProductColorSize spcs = spcsMap.get(detail.getStoreProdColorSizeId()); Assert.isTrue(BeanValidators.exists(spcs), "商品颜色尺码不存在"); + StoreColor sc = scMap.get(spcs.getStoreColorId()); + Assert.isTrue(BeanValidators.exists(sc), "商品颜色不存在"); StoreProduct sp = spMap.get(spcs.getStoreProdId()); Assert.isTrue(BeanValidators.exists(sp), "商品不存在"); Assert.isTrue(storeId.equals(sp.getStoreId()), "系统不支持跨档口下单"); @@ -573,7 +584,7 @@ public class StoreOrderServiceImpl implements IStoreOrderService { Assert.isFalse(spcsIdCheckSet.contains(spcs.getId()), "商品明细异常"); spcsIdCheckSet.add(spcs.getId()); } - return spcsMap; + return new OrderDetailCheckRtn(spcsMap, spMap, scMap); } /** @@ -593,4 +604,13 @@ public class StoreOrderServiceImpl implements IStoreOrderService { } throw new ServiceException("未知支付渠道"); } + + @Data + @AllArgsConstructor + @NoArgsConstructor + private static class OrderDetailCheckRtn { + private Map spcsMap; + private Map spMap; + private Map scMap; + } }