From 4318746ee88ad53e00341df1a0395058bebc40fa Mon Sep 17 00:00:00 2001
From: xiangpei <xiangpei@timesnew.cn>
Date: 星期三, 25 六月 2025 14:33:46 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev' into dev

---
 buyer-api/src/main/java/cn/lili/controller/goods/GoodsBuyerController.java               |   23 ++
 buyer-api/src/main/java/cn/lili/controller/order/OrderBuyerController.java               |   21 ++
 buyer-api/src/main/java/cn/lili/controller/member/FootprintController.java               |   23 ++
 framework/src/main/java/cn/lili/modules/search/entity/dto/EsGoodsSearchDTO.java          |    5 
 framework/src/main/java/cn/lili/modules/order/order/service/OrderService.java            |    9 
 framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java    |   53 +++++
 framework/src/main/java/cn/lili/modules/search/serviceimpl/EsGoodsSearchServiceImpl.java |    4 
 framework/src/main/java/cn/lili/modules/order/order/mapper/OrderMapper.java              |   24 ++
 seller-api/src/main/java/cn/lili/controller/order/OrderStoreController.java              |   14 +
 framework/src/main/java/cn/lili/modules/member/serviceimpl/FootprintServiceImpl.java     |    2 
 framework/src/main/java/cn/lili/modules/order/order/entity/vo/OrderItemVO.java           |    3 
 framework/src/main/java/cn/lili/modules/order/order/entity/vo/AllowOperation.java        |   37 ++++
 buyer-api/src/main/java/cn/lili/controller/order/CartController.java                     |   36 +++
 framework/src/main/java/cn/lili/modules/order/order/entity/vo/OrderSimpleXcxVO.java      |  232 +++++++++++++++++++++++++
 14 files changed, 472 insertions(+), 14 deletions(-)

diff --git a/buyer-api/src/main/java/cn/lili/controller/goods/GoodsBuyerController.java b/buyer-api/src/main/java/cn/lili/controller/goods/GoodsBuyerController.java
index c5d3d25..3d94bc5 100644
--- a/buyer-api/src/main/java/cn/lili/controller/goods/GoodsBuyerController.java
+++ b/buyer-api/src/main/java/cn/lili/controller/goods/GoodsBuyerController.java
@@ -4,6 +4,7 @@
 import cn.lili.common.enums.ResultCode;
 import cn.lili.common.enums.ResultUtil;
 import cn.lili.common.exception.ServiceException;
+import cn.lili.common.utils.StringUtils;
 import cn.lili.common.vo.PageVO;
 import cn.lili.common.vo.ResultMessage;
 import cn.lili.modules.goods.entity.dos.Goods;
@@ -20,6 +21,7 @@
 import cn.lili.modules.search.service.HotWordsService;
 import cn.lili.modules.statistics.aop.PageViewPoint;
 import cn.lili.modules.statistics.aop.enums.PageViewEnum;
+import cn.lili.utils.COSUtil;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import io.swagger.annotations.Api;
@@ -68,6 +70,9 @@
     @Autowired
     private HotWordsService hotWordsService;
 
+    @Autowired
+    private COSUtil cosUtil;
+
     @ApiOperation(value = "閫氳繃id鑾峰彇鍟嗗搧淇℃伅")
     @ApiImplicitParam(name = "goodsId", value = "鍟嗗搧ID", required = true, paramType = "path", dataType = "Long")
     @GetMapping(value = "/get/{goodsId}")
@@ -114,7 +119,23 @@
     @GetMapping("/es")
     public ResultMessage<Page<EsGoodsIndex>> getGoodsByPageFromEs(EsGoodsSearchDTO goodsSearchParams, PageVO pageVO) {
         pageVO.setNotConvert(true);
-        return ResultUtil.data(goodsSearchService.searchGoodsByPage(goodsSearchParams, pageVO));
+        Page<EsGoodsIndex> ePage = goodsSearchService.searchGoodsByPage(goodsSearchParams, pageVO);
+        ePage.getRecords().forEach(item -> {
+            String small = item.getSmall();
+            String thumbnail = item.getThumbnail();
+            String goodsVideo = item.getGoodsVideo();
+            if (StringUtils.isNotBlank(small) && !small.contains("http")) {
+                item.setSmall(cosUtil.getPreviewUrl(small));
+            }
+            if (StringUtils.isNotBlank(thumbnail) && !thumbnail.contains("http")) {
+                item.setThumbnail(cosUtil.getPreviewUrl(thumbnail));
+            }
+            if (StringUtils.isNotBlank(goodsVideo) && !goodsVideo.contains("http")) {
+                item.setGoodsVideo(cosUtil.getPreviewUrl(goodsVideo));
+            }
+
+        });
+        return ResultUtil.data(ePage);
     }
 
     @ApiOperation(value = "鍟嗗搧鍒嗛〉-鍙戝竷瑙嗛鏃跺叧鑱斿晢鍝�")
diff --git a/buyer-api/src/main/java/cn/lili/controller/member/FootprintController.java b/buyer-api/src/main/java/cn/lili/controller/member/FootprintController.java
index 480b882..43318e5 100644
--- a/buyer-api/src/main/java/cn/lili/controller/member/FootprintController.java
+++ b/buyer-api/src/main/java/cn/lili/controller/member/FootprintController.java
@@ -2,11 +2,13 @@
 
 import cn.lili.common.enums.ResultUtil;
 import cn.lili.common.security.context.UserContext;
+import cn.lili.common.utils.StringUtils;
 import cn.lili.common.vo.PageVO;
 import cn.lili.common.vo.ResultMessage;
 import cn.lili.modules.member.entity.dto.FootPrintQueryParams;
 import cn.lili.modules.member.service.FootprintService;
 import cn.lili.modules.search.entity.dos.EsGoodsIndex;
+import cn.lili.utils.COSUtil;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
@@ -36,11 +38,30 @@
     @Autowired
     private FootprintService footprintService;
 
+    @Autowired
+    private COSUtil cosUtil;
     @ApiOperation(value = "鍒嗛〉鑾峰彇")
     @GetMapping
     public ResultMessage<IPage<EsGoodsIndex>> getByPage(FootPrintQueryParams params) {
         params.setMemberId(UserContext.getCurrentUser().getId());
-        return ResultUtil.data(footprintService.footPrintPage(params));
+        IPage<EsGoodsIndex> indexIPage = footprintService.footPrintPage(params);
+        indexIPage.getRecords().forEach(item -> {
+
+            String small = item.getSmall();
+            String thumbnail = item.getThumbnail();
+            String goodsVideo = item.getGoodsVideo();
+            if (StringUtils.isNotBlank(small) && !small.contains("http")) {
+                item.setSmall(cosUtil.getPreviewUrl(small));
+            }
+            if (StringUtils.isNotBlank(thumbnail) && !thumbnail.contains("http")) {
+                item.setThumbnail(cosUtil.getPreviewUrl(thumbnail));
+            }
+            if (StringUtils.isNotBlank(goodsVideo) && !goodsVideo.contains("http")) {
+                item.setGoodsVideo(cosUtil.getPreviewUrl(goodsVideo));
+            }
+
+        });
+        return ResultUtil.data(indexIPage);
     }
 
     @ApiOperation(value = "鏍规嵁id鍒犻櫎")
diff --git a/buyer-api/src/main/java/cn/lili/controller/order/CartController.java b/buyer-api/src/main/java/cn/lili/controller/order/CartController.java
index 6eb90b1..2973172 100644
--- a/buyer-api/src/main/java/cn/lili/controller/order/CartController.java
+++ b/buyer-api/src/main/java/cn/lili/controller/order/CartController.java
@@ -1,9 +1,11 @@
 package cn.lili.controller.order;
 
+import cn.hutool.json.JSONUtil;
 import cn.lili.common.aop.annotation.PreventDuplicateSubmissions;
 import cn.lili.common.enums.ResultCode;
 import cn.lili.common.enums.ResultUtil;
 import cn.lili.common.exception.ServiceException;
+import cn.lili.common.utils.StringUtils;
 import cn.lili.common.vo.ResultMessage;
 import cn.lili.modules.order.cart.entity.dto.BuyBackDTO;
 import cn.lili.modules.order.cart.entity.dto.TradeDTO;
@@ -11,6 +13,7 @@
 import cn.lili.modules.order.cart.entity.vo.TradeParams;
 import cn.lili.modules.order.cart.service.CartService;
 import cn.lili.modules.order.order.entity.vo.ReceiptVO;
+import cn.lili.utils.COSUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
@@ -45,6 +48,8 @@
      */
     @Autowired
     private CartService cartService;
+    @Autowired
+    private COSUtil cosUtil;
 
 
     @ApiOperation(value = "鍚戣喘鐗╄溅涓坊鍔犱竴涓骇鍝�")
@@ -74,7 +79,19 @@
     @ApiOperation(value = "鑾峰彇璐墿杞﹂〉闈㈣喘鐗╄溅璇︽儏")
     @GetMapping("/all")
     public ResultMessage<TradeDTO> cartAll() {
-        return ResultUtil.data(this.cartService.getAllTradeDTO());
+        TradeDTO allTradeDTO = this.cartService.getAllTradeDTO();
+        allTradeDTO.getSkuList().forEach(item->{
+            String goodsVideo = item.getGoodsSku().getGoodsVideo();
+            if (StringUtils.isNotBlank(goodsVideo)&&!goodsVideo.contains("http")) {
+                item.getGoodsSku().setGoodsVideo(cosUtil.getPreviewUrl(goodsVideo));
+            }
+
+            String thumbnail = item.getGoodsSku().getThumbnail();
+            if (StringUtils.isNotBlank(thumbnail)&&!thumbnail.contains("http")) {
+                item.getGoodsSku().setThumbnail(cosUtil.getPreviewUrl(thumbnail));
+            }
+        });
+        return ResultUtil.data(allTradeDTO);
     }
 
     @ApiOperation(value = "鑾峰彇璐墿杞︽暟閲�")
@@ -174,7 +191,22 @@
     public ResultMessage<TradeDTO> cartChecked(@NotNull(message = "璇诲彇閫変腑鍒楄〃") String way) {
         try {
             //璇诲彇閫変腑鐨勫垪琛�
-            return ResultUtil.data(this.cartService.getCheckedTradeDTO(CartTypeEnum.valueOf(way)));
+            TradeDTO checkedTradeDTO = this.cartService.getCheckedTradeDTO(CartTypeEnum.valueOf(way));
+            checkedTradeDTO.getSkuList().forEach(item->{
+
+
+                String goodsVideo = item.getGoodsSku().getGoodsVideo();
+                if (StringUtils.isNotBlank(goodsVideo)&&!goodsVideo.contains("http")) {
+                    item.getGoodsSku().setGoodsVideo(cosUtil.getPreviewUrl(goodsVideo));
+                }
+
+                String thumbnail = item.getGoodsSku().getThumbnail();
+                if (StringUtils.isNotBlank(thumbnail)&&!thumbnail.contains("http")) {
+                    item.getGoodsSku().setThumbnail(cosUtil.getPreviewUrl(thumbnail));
+                }
+            });
+            System.err.println(JSONUtil.toJsonStr(checkedTradeDTO));
+            return ResultUtil.data(checkedTradeDTO);
         } catch (ServiceException se) {
             log.error(se.getMsg(), se);
             throw se;
diff --git a/buyer-api/src/main/java/cn/lili/controller/order/OrderBuyerController.java b/buyer-api/src/main/java/cn/lili/controller/order/OrderBuyerController.java
index c192d36..086685d 100644
--- a/buyer-api/src/main/java/cn/lili/controller/order/OrderBuyerController.java
+++ b/buyer-api/src/main/java/cn/lili/controller/order/OrderBuyerController.java
@@ -7,6 +7,7 @@
 import cn.lili.common.security.AuthUser;
 import cn.lili.common.security.OperationalJudgment;
 import cn.lili.common.security.context.UserContext;
+import cn.lili.common.utils.StringUtils;
 import cn.lili.common.vo.ResultMessage;
 import cn.lili.modules.order.order.entity.dos.Order;
 import cn.lili.modules.order.order.entity.dos.OrderPackage;
@@ -14,9 +15,12 @@
 import cn.lili.modules.order.order.entity.enums.OrderStatusEnum;
 import cn.lili.modules.order.order.entity.vo.OrderDetailVO;
 import cn.lili.modules.order.order.entity.vo.OrderSimpleVO;
+import cn.lili.modules.order.order.entity.vo.OrderSimpleXcxVO;
+import cn.lili.modules.order.order.service.OrderItemService;
 import cn.lili.modules.order.order.service.OrderPackageService;
 import cn.lili.modules.order.order.service.OrderService;
 import cn.lili.modules.system.entity.vo.Traces;
+import cn.lili.utils.COSUtil;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
@@ -50,12 +54,23 @@
     @Autowired
     private OrderPackageService orderPackageService;
 
+    @Autowired
+    private COSUtil cosUtil;
+
     @ApiOperation(value = "鏌ヨ浼氬憳璁㈠崟鍒楄〃")
     @GetMapping
     public ResultMessage<IPage<OrderSimpleVO>> queryMineOrder(OrderSearchParams orderSearchParams) {
         AuthUser currentUser = Objects.requireNonNull(UserContext.getCurrentUser());
         orderSearchParams.setMemberId(currentUser.getId());
         return ResultUtil.data(orderService.queryByParams(orderSearchParams));
+    }
+
+    @ApiOperation(value = "鏌ヨ浼氬憳璁㈠崟鍒楄〃")
+    @GetMapping("/xcx")
+    public ResultMessage<IPage<OrderSimpleXcxVO>> queryXcxMineOrder(OrderSearchParams orderSearchParams) {
+        AuthUser currentUser = Objects.requireNonNull(UserContext.getCurrentUser());
+        orderSearchParams.setMemberId(currentUser.getId());
+        return ResultUtil.data(orderService.queryByXcxParams(orderSearchParams));
     }
 
     @ApiOperation(value = "璁㈠崟鏄庣粏")
@@ -66,6 +81,12 @@
     public ResultMessage<OrderDetailVO> detail(@NotNull(message = "璁㈠崟缂栧彿涓嶈兘涓虹┖") @PathVariable("orderSn") String orderSn) {
         OrderDetailVO orderDetailVO = orderService.queryDetail(orderSn);
         OperationalJudgment.judgment(orderDetailVO.getOrder());
+        orderDetailVO.getOrderItems().forEach(orderItem -> {
+            String image = orderItem.getImage();
+            if (StringUtils.isNotBlank(image)&&!image.contains("http")) {
+                orderItem.setImage(cosUtil.getPreviewUrl(image));
+            }
+        });
         return ResultUtil.data(orderDetailVO);
     }
 
diff --git a/framework/src/main/java/cn/lili/modules/member/serviceimpl/FootprintServiceImpl.java b/framework/src/main/java/cn/lili/modules/member/serviceimpl/FootprintServiceImpl.java
index f74fd3f..723725f 100644
--- a/framework/src/main/java/cn/lili/modules/member/serviceimpl/FootprintServiceImpl.java
+++ b/framework/src/main/java/cn/lili/modules/member/serviceimpl/FootprintServiceImpl.java
@@ -74,7 +74,7 @@
                             return null;
                         }
                         Optional<FootPrint> first =
-                                footPrintPages.getRecords().stream().filter(j -> j.getSkuId().equals(goodsSkuByIdFromCache.get(i).getId())).findFirst();
+                                footPrintPages.getRecords().stream().filter(j -> goodsSkuByIdFromCache.get(i).getId().equals(j.getSkuId())).findFirst();
                         return first.map(footPrint -> new EsGoodsIndex(goodsSkuByIdFromCache.get(i), footPrint.getCreateTime())).orElseGet(() -> new EsGoodsIndex(goodsSkuByIdFromCache.get(i)));
                     })
                     .collect(Collectors.toList());
diff --git a/framework/src/main/java/cn/lili/modules/order/order/entity/vo/AllowOperation.java b/framework/src/main/java/cn/lili/modules/order/order/entity/vo/AllowOperation.java
index 7458bd2..d839f42 100644
--- a/framework/src/main/java/cn/lili/modules/order/order/entity/vo/AllowOperation.java
+++ b/framework/src/main/java/cn/lili/modules/order/order/entity/vo/AllowOperation.java
@@ -128,5 +128,42 @@
         this.take = order.getOrderType().equals(OrderTypeEnum.VIRTUAL.name()) && order.getOrderStatus().equals(OrderStatusEnum.TAKE.name());
     }
 
+    /**
+     * 鏍规嵁鍚勭鐘舵�佹瀯寤哄璞�
+     *
+     * @param order
+     */
+    public AllowOperation(OrderSimpleXcxVO order) {
+
+        //鑾峰彇璁㈠崟绫诲瀷
+        String status = order.getOrderStatus();
+        String payStatus = order.getPayStatus();
+        //缂栬緫璁㈠崟浠锋牸 鏈粯娆惧苟涓旀槸鏂拌鍗�
+        if (payStatus.equals(PayStatusEnum.UNPAID.name()) && status.equals(OrderStatusEnum.UNPAID.name())) {
+            this.editPrice = true;
+        }
+
+        //鍙栨秷鍒ゅ畾
+        if (CharSequenceUtil.equalsAny(status, OrderStatusEnum.UNPAID.name(), OrderStatusEnum.PAID.name(), OrderStatusEnum.UNDELIVERED.name())) {
+            this.cancel = true;
+        }
+        //鏂拌鍗曪紝鍏佽鏀粯
+        this.pay = status.equals(OrderStatusEnum.UNPAID.name());
+
+        //璁㈠崟鏈彂璐э紝灏卞彲浠ョ紪杈戞敹璐т汉淇℃伅
+        this.editConsignee = order.getDeliverStatus().equals(DeliverStatusEnum.UNDELIVERED.name());
+
+        //鏄惁鍏佽琚彂璐�
+        this.ship = editConsignee && status.equals(OrderStatusEnum.UNDELIVERED.name());
+
+        //鏄惁鍏佽琚敹璐�
+        this.rog = status.equals(OrderStatusEnum.DELIVERED.name());
+
+        //鏄惁鍏佽鏌ョ湅鐗╂祦淇℃伅
+        this.showLogistics = order.getDeliverStatus().equals(DeliverStatusEnum.DELIVERED.name()) && status.equals(OrderStatusEnum.DELIVERED.name());
+
+        this.take = order.getOrderType().equals(OrderTypeEnum.VIRTUAL.name()) && order.getOrderStatus().equals(OrderStatusEnum.TAKE.name());
+    }
+
 
 }
diff --git a/framework/src/main/java/cn/lili/modules/order/order/entity/vo/OrderItemVO.java b/framework/src/main/java/cn/lili/modules/order/order/entity/vo/OrderItemVO.java
index 66134c9..1ae4ce5 100644
--- a/framework/src/main/java/cn/lili/modules/order/order/entity/vo/OrderItemVO.java
+++ b/framework/src/main/java/cn/lili/modules/order/order/entity/vo/OrderItemVO.java
@@ -32,6 +32,9 @@
     @ApiModelProperty(value = "鍥剧墖")
     private String image;
 
+    @ApiModelProperty(value = "鍥剧墖")
+    private String video;
+
     @ApiModelProperty(value = "鍟嗗搧鍚嶇О")
     private String name;
 
diff --git a/framework/src/main/java/cn/lili/modules/order/order/entity/vo/OrderSimpleXcxVO.java b/framework/src/main/java/cn/lili/modules/order/order/entity/vo/OrderSimpleXcxVO.java
new file mode 100644
index 0000000..811f3d4
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/order/order/entity/vo/OrderSimpleXcxVO.java
@@ -0,0 +1,232 @@
+package cn.lili.modules.order.order.entity.vo;
+
+import cn.hutool.core.text.CharSequenceUtil;
+import cn.lili.common.enums.ClientTypeEnum;
+import cn.lili.common.security.sensitive.Sensitive;
+import cn.lili.common.security.sensitive.enums.SensitiveStrategy;
+import cn.lili.modules.order.order.entity.enums.OrderItemAfterSaleStatusEnum;
+import cn.lili.modules.order.order.entity.enums.OrderPromotionTypeEnum;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.Getter;
+import lombok.Setter;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 璁㈠崟绠�鐣ヤ俊鎭�
+ * 鐢ㄤ簬璁㈠崟鍒楄〃鏌ョ湅
+ *
+ * @author Chopper
+ * @since 2020-08-17 20:28
+ */
+@Data
+public class OrderSimpleXcxVO {
+
+    @ApiModelProperty("sn")
+    private String sn;
+
+    @ApiModelProperty(value = "鎬讳环鏍�")
+    private Double flowPrice;
+
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+    private Date createTime;
+
+    /**
+     * @see cn.lili.modules.order.order.entity.enums.OrderStatusEnum
+     */
+    @ApiModelProperty(value = "璁㈠崟鐘舵��")
+    private String orderStatus;
+
+    /**
+     * @see cn.lili.modules.order.order.entity.enums.PayStatusEnum
+     */
+    @ApiModelProperty(value = "浠樻鐘舵��")
+    private String payStatus;
+
+    @ApiModelProperty(value = "鏀粯鏂瑰紡")
+    private String paymentMethod;
+
+    @ApiModelProperty(value = "鏀粯鏃堕棿")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date paymentTime;
+
+    @ApiModelProperty(value = "鐢ㄦ埛鍚�")
+    @Sensitive(strategy = SensitiveStrategy.PHONE)
+    private String memberName;
+
+    @ApiModelProperty(value = "搴楅摵鍚嶇О")
+    private String storeName;
+
+    @ApiModelProperty(value = "搴楅摵ID")
+    private String storeId;
+
+    /**
+     * @see ClientTypeEnum
+     */
+    @ApiModelProperty(value = "璁㈠崟鏉ユ簮")
+    private String clientType;
+
+    /**
+     * 瀛愯鍗曚俊鎭�
+     */
+    @Getter
+    private List<OrderItemVO> orderItems;
+
+    @ApiModelProperty(hidden = true, value = "item goods_id")
+    @Setter
+    private String groupGoodsId;
+
+    @ApiModelProperty(hidden = true, value = "item sku id")
+    @Setter
+    private String groupSkuId;
+
+    @ApiModelProperty(hidden = true, value = "item 鏁伴噺")
+    @Setter
+    private String groupNum;
+
+    @ApiModelProperty(hidden = true, value = "item 鍥剧墖")
+    @Setter
+    private String groupImages;
+
+    @ApiModelProperty(hidden = true, value = "item 鍚嶅瓧")
+    @Setter
+    private String groupName;
+
+    @ApiModelProperty(hidden = true, value = "item 缂栧彿")
+    @Setter
+    private String groupOrderItemsSn;
+
+    @ApiModelProperty(hidden = true, value = "item 鍟嗗搧浠锋牸")
+    @Setter
+    private String groupGoodsPrice;
+    /**
+     * @see OrderItemAfterSaleStatusEnum
+     */
+    @ApiModelProperty(hidden = true, value = "item 鍞悗鐘舵��", allowableValues = "NOT_APPLIED(鏈敵璇�),ALREADY_APPLIED(宸茬敵璇�),EXPIRED(宸插け鏁堜笉鍏佽鐢宠鍞悗)")
+    @Setter
+    private String groupAfterSaleStatus;
+
+    /**
+     * @see cn.lili.modules.order.order.entity.enums.OrderComplaintStatusEnum
+     */
+    @ApiModelProperty(hidden = true, value = "item 鎶曡瘔鐘舵��")
+    @Setter
+    private String groupComplainStatus;
+
+    /**
+     * @see cn.lili.modules.order.order.entity.enums.CommentStatusEnum
+     */
+    @ApiModelProperty(hidden = true, value = "item 璇勪环鐘舵��")
+    @Setter
+    private String groupCommentStatus;
+
+
+    /**
+     * @see cn.lili.modules.order.order.entity.enums.OrderTypeEnum
+     */
+    @ApiModelProperty(value = "璁㈠崟绫诲瀷")
+    private String orderType;
+
+    /**
+     * @see cn.lili.modules.order.order.entity.enums.DeliverStatusEnum
+     */
+    @ApiModelProperty(value = "璐ц繍鐘舵��")
+    private String deliverStatus;
+
+    /**
+     * @see OrderPromotionTypeEnum
+     */
+    @ApiModelProperty(value = "璁㈠崟淇冮攢绫诲瀷")
+    private String orderPromotionType;
+
+    @ApiModelProperty(value = "鏄惁閫�娆�")
+    private String groupIsRefund;
+
+    @ApiModelProperty(value = "閫�娆鹃噾棰�")
+    private String groupRefundPrice;
+
+    @ApiModelProperty(value = "鍗栧璁㈠崟澶囨敞")
+    private String sellerRemark;
+    private int i = 0;
+    public List<OrderItemVO> initOrderItems() {
+        if (CharSequenceUtil.isEmpty(groupGoodsId)) {
+            return new ArrayList<>();
+        }
+        List<OrderItemVO> orderItemVOS = new ArrayList<>();
+
+
+        String[] goodsId = groupGoodsId.split(",");
+
+        for (int i = 0; i < goodsId.length; i++) {
+            orderItemVOS.add(this.getOrderItemVO(i));
+        }
+        return orderItemVOS;
+
+    }
+
+    private OrderItemVO getOrderItemVO(int i) {
+        OrderItemVO orderItemVO = new OrderItemVO();
+        orderItemVO.setGoodsId(groupGoodsId.split(",")[i]);
+        if (CharSequenceUtil.isNotEmpty(groupOrderItemsSn)) {
+            orderItemVO.setSn(groupOrderItemsSn.split(",")[i]);
+        }
+        if (CharSequenceUtil.isNotEmpty(groupSkuId)) {
+            orderItemVO.setSkuId(groupSkuId.split(",")[i]);
+        }
+        if (CharSequenceUtil.isNotEmpty(groupName)) {
+            orderItemVO.setName(groupName.split(",")[i]);
+        }
+        if (CharSequenceUtil.isNotEmpty(groupNum) && groupNum.split(",").length == groupGoodsId.split(",").length) {
+            orderItemVO.setNum(groupNum.split(",")[i]);
+        }
+        if (CharSequenceUtil.isNotEmpty(groupImages) && groupImages.split(",").length == groupGoodsId.split(",").length) {
+            orderItemVO.setImage(groupImages.split(",")[i]);
+        }
+        if (CharSequenceUtil.isNotEmpty(groupAfterSaleStatus) && groupAfterSaleStatus.split(",").length == groupGoodsId.split(",").length) {
+            if (!OrderPromotionTypeEnum.isCanAfterSale(this.orderPromotionType)) {
+                orderItemVO.setAfterSaleStatus(OrderItemAfterSaleStatusEnum.EXPIRED.name());
+            } else {
+                orderItemVO.setAfterSaleStatus(groupAfterSaleStatus.split(",")[i]);
+            }
+        }
+        if (CharSequenceUtil.isNotEmpty(groupComplainStatus) && groupComplainStatus.split(",").length == groupGoodsId.split(",").length) {
+            orderItemVO.setComplainStatus(groupComplainStatus.split(",")[i]);
+        }
+        if (CharSequenceUtil.isNotEmpty(groupCommentStatus) && groupCommentStatus.split(",").length == groupGoodsId.split(",").length) {
+            orderItemVO.setCommentStatus(groupCommentStatus.split(",")[i]);
+        }
+        if (CharSequenceUtil.isNotEmpty(groupGoodsPrice) && groupGoodsPrice.split(",").length == groupGoodsId.split(",").length) {
+            orderItemVO.setGoodsPrice(Double.parseDouble(groupGoodsPrice.split(",")[i]));
+        }
+        if (CharSequenceUtil.isNotEmpty(groupIsRefund) && groupIsRefund.split(",").length == groupGoodsId.split(",").length) {
+            orderItemVO.setIsRefund(groupIsRefund.split(",")[i]);
+        }
+        if (CharSequenceUtil.isNotEmpty(groupRefundPrice) && groupRefundPrice.split(",").length == groupGoodsId.split(",").length) {
+            orderItemVO.setRefundPrice(groupRefundPrice.split(",")[i]);
+        }
+        return orderItemVO;
+    }
+
+    /**
+     * 鍒濆鍖栬嚜韬姸鎬�
+     */
+    public AllowOperation getAllowOperationVO() {
+        //璁剧疆璁㈠崟鐨勫彲鎿嶄綔鐘舵��
+        return new AllowOperation(this);
+    }
+
+    public String getGroupAfterSaleStatus() {
+        // 涓嶅彲鍞悗鐨勮鍗曠被鍨嬮泦鍚�
+        if (!OrderPromotionTypeEnum.isCanAfterSale(this.orderPromotionType)) {
+            return OrderItemAfterSaleStatusEnum.EXPIRED.name();
+        }
+        return groupAfterSaleStatus;
+    }
+}
diff --git a/framework/src/main/java/cn/lili/modules/order/order/mapper/OrderMapper.java b/framework/src/main/java/cn/lili/modules/order/order/mapper/OrderMapper.java
index 1b19087..698f654 100644
--- a/framework/src/main/java/cn/lili/modules/order/order/mapper/OrderMapper.java
+++ b/framework/src/main/java/cn/lili/modules/order/order/mapper/OrderMapper.java
@@ -3,6 +3,7 @@
 import cn.lili.modules.order.order.entity.dos.Order;
 import cn.lili.modules.order.order.entity.dto.OrderExportDTO;
 import cn.lili.modules.order.order.entity.vo.OrderSimpleVO;
+import cn.lili.modules.order.order.entity.vo.OrderSimpleXcxVO;
 import cn.lili.modules.order.order.entity.vo.PaymentLog;
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
@@ -96,6 +97,29 @@
             ",GROUP_CONCAT(oi.refund_price) as group_refund_price " +
             " FROM li_order o LEFT JOIN li_order_item AS oi on o.sn = oi.order_sn ${ew.customSqlSegment} ")
     IPage<OrderSimpleVO> queryByParams(IPage<OrderSimpleVO> page, @Param(Constants.WRAPPER) Wrapper<OrderSimpleVO> queryWrapper);
+    /**
+     * 鏌ヨ璁㈠崟绠�鐭俊鎭垎椤�
+     *
+     * @param page         鍒嗛〉
+     * @param queryWrapper 鏌ヨ鏉′欢
+     * @return 绠�鐭鍗曞垎椤�
+     */
+    @Select("select o.sn,o.flow_price,o.create_time,o.order_status,o.pay_status,o.payment_method,o.payment_time,o.member_name,o.store_name as " +
+            "store_name,o.store_id as store_id,o.client_type,o.order_type,o.deliver_status,o.order_promotion_type,o.seller_remark " +
+            ",GROUP_CONCAT(oi.goods_id) as group_goods_id," +
+            " GROUP_CONCAT(oi.sku_id) as group_sku_id," +
+            " GROUP_CONCAT(oi.num) as group_num" +
+            ",GROUP_CONCAT(oi.image) as group_images" +
+            ",GROUP_CONCAT(oi.goods_name) as group_name " +
+            ",GROUP_CONCAT(oi.after_sale_status) as group_after_sale_status" +
+            ",GROUP_CONCAT(oi.complain_status) as group_complain_status" +
+            ",GROUP_CONCAT(oi.comment_status) as group_comment_status" +
+            ",GROUP_CONCAT(oi.sn) as group_order_items_sn " +
+            ",GROUP_CONCAT(oi.goods_price) as group_goods_price " +
+            ",GROUP_CONCAT(oi.is_refund) as group_is_refund " +
+            ",GROUP_CONCAT(oi.refund_price) as group_refund_price " +
+            " FROM li_order o LEFT JOIN li_order_item AS oi on o.sn = oi.order_sn ${ew.customSqlSegment} ")
+    IPage<OrderSimpleXcxVO> queryByXcxParams(IPage<OrderSimpleVO> page, @Param(Constants.WRAPPER) Wrapper<OrderSimpleVO> queryWrapper);
 
     /**
      * 鏌ヨ璁㈠崟淇℃伅
diff --git a/framework/src/main/java/cn/lili/modules/order/order/service/OrderService.java b/framework/src/main/java/cn/lili/modules/order/order/service/OrderService.java
index 00be1e0..93d229d 100644
--- a/framework/src/main/java/cn/lili/modules/order/order/service/OrderService.java
+++ b/framework/src/main/java/cn/lili/modules/order/order/service/OrderService.java
@@ -3,12 +3,12 @@
 import cn.lili.modules.member.entity.dto.MemberAddressDTO;
 import cn.lili.modules.order.cart.entity.dto.TradeDTO;
 import cn.lili.modules.order.order.entity.dos.Order;
-import cn.lili.modules.order.order.entity.dto.OrderExportDTO;
 import cn.lili.modules.order.order.entity.dto.OrderMessage;
 import cn.lili.modules.order.order.entity.dto.OrderSearchParams;
 import cn.lili.modules.order.order.entity.dto.PartDeliveryParamsDTO;
 import cn.lili.modules.order.order.entity.vo.OrderDetailVO;
 import cn.lili.modules.order.order.entity.vo.OrderSimpleVO;
+import cn.lili.modules.order.order.entity.vo.OrderSimpleXcxVO;
 import cn.lili.modules.order.order.entity.vo.PaymentLog;
 import cn.lili.modules.system.entity.vo.Traces;
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
@@ -53,6 +53,13 @@
      * @return 绠�鐭鍗曞垎椤�
      */
     IPage<OrderSimpleVO> queryByParams(OrderSearchParams orderSearchParams);
+    /**
+     * 璁㈠崟鏌ヨ
+     *
+     * @param orderSearchParams 鏌ヨ鍙傛暟
+     * @return 绠�鐭鍗曞垎椤�
+     */
+    IPage<OrderSimpleXcxVO> queryByXcxParams(OrderSearchParams orderSearchParams);
 
     /**
      * 璁㈠崟淇℃伅
diff --git a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java
index 296c304..dc4a066 100644
--- a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java
+++ b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java
@@ -1,9 +1,11 @@
 package cn.lili.modules.order.order.serviceimpl;
 
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.io.IoUtil;
 import cn.hutool.core.text.CharSequenceUtil;
+import cn.hutool.core.util.ArrayUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.json.JSONUtil;
 import cn.hutool.poi.excel.ExcelReader;
@@ -20,7 +22,10 @@
 import cn.lili.common.security.enums.UserEnums;
 import cn.lili.common.utils.CurrencyUtil;
 import cn.lili.common.utils.SnowFlake;
+import cn.lili.common.utils.StringUtils;
+import cn.lili.modules.goods.entity.dos.Goods;
 import cn.lili.modules.goods.entity.dto.GoodsCompleteMessage;
+import cn.lili.modules.goods.service.GoodsService;
 import cn.lili.modules.member.entity.dto.MemberAddressDTO;
 import cn.lili.modules.order.cart.entity.dto.TradeDTO;
 import cn.lili.modules.order.cart.entity.enums.DeliveryMethodEnum;
@@ -28,10 +33,7 @@
 import cn.lili.modules.order.order.entity.dos.*;
 import cn.lili.modules.order.order.entity.dto.*;
 import cn.lili.modules.order.order.entity.enums.*;
-import cn.lili.modules.order.order.entity.vo.OrderDetailVO;
-import cn.lili.modules.order.order.entity.vo.OrderSimpleVO;
-import cn.lili.modules.order.order.entity.vo.OrderVO;
-import cn.lili.modules.order.order.entity.vo.PaymentLog;
+import cn.lili.modules.order.order.entity.vo.*;
 import cn.lili.modules.order.order.mapper.OrderMapper;
 import cn.lili.modules.order.order.service.*;
 import cn.lili.modules.order.trade.entity.dos.OrderLog;
@@ -59,12 +61,14 @@
 import cn.lili.trigger.model.TimeExecuteConstant;
 import cn.lili.trigger.model.TimeTriggerMsg;
 import cn.lili.trigger.util.DelayQueueTools;
+import cn.lili.utils.COSUtil;
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.poi.ss.usermodel.Cell;
@@ -168,7 +172,10 @@
     @Autowired
     private SettingService settingService;
 
-
+    @Autowired
+    private GoodsService goodsService;
+    @Autowired
+    private COSUtil cosUtil;
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void intoDB(TradeDTO tradeDTO) {
@@ -224,6 +231,42 @@
         return this.baseMapper.queryByParams(PageUtil.initPage(orderSearchParams), queryWrapper);
     }
 
+    @Override
+    public IPage<OrderSimpleXcxVO> queryByXcxParams(OrderSearchParams orderSearchParams) {
+        QueryWrapper queryWrapper = orderSearchParams.queryWrapper();
+        queryWrapper.groupBy("o.id");
+        queryWrapper.orderByDesc("o.id");
+        IPage<OrderSimpleXcxVO>  iPage = this.baseMapper.queryByXcxParams(PageUtil.initPage(orderSearchParams), queryWrapper);
+        Set<String> goodsIds = new HashSet<>();
+        for (OrderSimpleXcxVO orderSimpleVO : iPage.getRecords()) {
+            orderSimpleVO.setOrderItems(orderSimpleVO.initOrderItems());
+            String groupGoodsId = orderSimpleVO.getGroupGoodsId();
+            if (StringUtils.isNotBlank(groupGoodsId)) {
+                goodsIds.addAll(Arrays.asList(groupGoodsId.split(",")));
+            }
+        }
+        if (CollectionUtil.isNotEmpty(goodsIds)) {
+            List<Goods> list = goodsService.list(Wrappers.<Goods>lambdaQuery().in(Goods::getId, goodsIds));
+            Map<String, String> goodsVideos = list
+                    .stream().collect(Collectors.toMap(Goods::getId, g->
+                            StringUtils.isNotBlank(g.getGoodsVideo())?g.getGoodsVideo():""
+                    ));
+            iPage.getRecords().forEach(orderSimpleVO -> {
+                orderSimpleVO.getOrderItems().forEach(orderItem -> {
+                    String videoUrl = goodsVideos.get(orderItem.getGoodsId());
+                    if (StringUtils.isNotBlank(videoUrl)&&!videoUrl.contains("http")) {
+                        orderItem.setVideo(cosUtil.getPreviewUrl(videoUrl));
+                    }
+                    String image = orderItem.getImage();
+                    if (StringUtils.isNotBlank(image)&&!image.contains("http")) {
+                        orderItem.setImage(cosUtil.getPreviewUrl(image));
+                    }
+                });
+            });
+        }
+        return iPage;
+    }
+
     /**
      * 璁㈠崟淇℃伅
      *
diff --git a/framework/src/main/java/cn/lili/modules/search/entity/dto/EsGoodsSearchDTO.java b/framework/src/main/java/cn/lili/modules/search/entity/dto/EsGoodsSearchDTO.java
index 1eeb771..ba73b62 100644
--- a/framework/src/main/java/cn/lili/modules/search/entity/dto/EsGoodsSearchDTO.java
+++ b/framework/src/main/java/cn/lili/modules/search/entity/dto/EsGoodsSearchDTO.java
@@ -76,6 +76,11 @@
     @ApiModelProperty("闄や簡閿�鍞ā寮忓綋鍓嶉攢鍞ā寮忎箣澶�")
     private String neSalesModel;
 
+    @ApiModelProperty("鏄惁寮�鍚晢鍝佽繃婊�")
+    private Boolean canFilter;
+
+
+
     //杩囨护鎼滅储鍏抽敭瀛�
     public String getKeyword() {
         if (CharSequenceUtil.isNotEmpty(keyword)) {
diff --git a/framework/src/main/java/cn/lili/modules/search/serviceimpl/EsGoodsSearchServiceImpl.java b/framework/src/main/java/cn/lili/modules/search/serviceimpl/EsGoodsSearchServiceImpl.java
index 11aa047..0cadc1c 100644
--- a/framework/src/main/java/cn/lili/modules/search/serviceimpl/EsGoodsSearchServiceImpl.java
+++ b/framework/src/main/java/cn/lili/modules/search/serviceimpl/EsGoodsSearchServiceImpl.java
@@ -93,7 +93,9 @@
             cache.incrementScore(CachePrefix.HOT_WORD.getPrefix(), searchDTO.getKeyword());
         }
         NativeSearchQueryBuilder searchQueryBuilder = createSearchQueryBuilder(searchDTO, pageVo);
-//        searchQueryBuilder.withCollapseField("goodsId.keyword");
+        if (Objects.nonNull(searchDTO.getCanFilter())&&searchDTO.getCanFilter()){
+            searchQueryBuilder.withCollapseField("goodsId.keyword");
+        }
         NativeSearchQuery searchQuery = searchQueryBuilder.build();
         searchQuery.setTrackTotalHits(true);
         log.debug("searchGoods DSL:{}", searchQuery.getQuery());
diff --git a/seller-api/src/main/java/cn/lili/controller/order/OrderStoreController.java b/seller-api/src/main/java/cn/lili/controller/order/OrderStoreController.java
index 784c832..3204355 100644
--- a/seller-api/src/main/java/cn/lili/controller/order/OrderStoreController.java
+++ b/seller-api/src/main/java/cn/lili/controller/order/OrderStoreController.java
@@ -8,6 +8,7 @@
 import cn.lili.common.enums.ResultUtil;
 import cn.lili.common.security.OperationalJudgment;
 import cn.lili.common.security.context.UserContext;
+import cn.lili.common.utils.StringUtils;
 import cn.lili.common.vo.ResultMessage;
 import cn.lili.modules.member.entity.dto.MemberAddressDTO;
 import cn.lili.modules.member.service.StoreLogisticsService;
@@ -20,6 +21,7 @@
 import cn.lili.modules.order.order.service.OrderPriceService;
 import cn.lili.modules.order.order.service.OrderService;
 import cn.lili.modules.system.service.LogisticsService;
+import cn.lili.utils.COSUtil;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
@@ -75,7 +77,8 @@
     @Autowired
     private OrderPackageService orderPackageService;
 
-
+    @Autowired
+    private COSUtil cosUtil;
     @ApiOperation(value = "鏌ヨ璁㈠崟鍒楄〃")
     @GetMapping
     public ResultMessage<IPage<OrderSimpleVO>> queryMineOrder(OrderSearchParams orderSearchParams) {
@@ -90,7 +93,14 @@
     @GetMapping(value = "/{orderSn}")
     public ResultMessage<OrderDetailVO> detail(@NotNull @PathVariable String orderSn) {
         OperationalJudgment.judgment(orderService.getBySn(orderSn));
-        return ResultUtil.data(orderService.queryDetail(orderSn));
+        OrderDetailVO orderDetailVO = orderService.queryDetail(orderSn);
+        orderDetailVO.getOrderItems().forEach(orderItem -> {
+            String image = orderItem.getImage();
+            if (StringUtils.isNotBlank(image)&&!image.contains("http")) {
+                orderItem.setImage(cosUtil.getPreviewUrl(image));
+            }
+        });
+        return ResultUtil.data(orderDetailVO);
     }
 
     @ApiOperation(value = "淇敼鏀惰揣浜轰俊鎭�")

--
Gitblit v1.8.0