Browse Source

相似商品

fubojin 3 weeks ago
parent
commit
40d49d4f2e
34 changed files with 306 additions and 139 deletions
  1. 9 9
      yami-shop-api/src/main/java/com/yami/shop/api/controller/OrderController.java
  2. 13 0
      yami-shop-api/src/main/java/com/yami/shop/api/controller/ProdController.java
  3. 1 1
      yami-shop-api/src/main/java/com/yami/shop/api/controller/SearchController.java
  4. 16 0
      yami-shop-bean/src/main/java/com/yami/shop/bean/app/dto/ShopCartItemDto.java
  5. 6 1
      yami-shop-bean/src/main/java/com/yami/shop/bean/app/dto/UserDto.java
  6. 3 0
      yami-shop-bean/src/main/java/com/yami/shop/bean/app/param/SearchParam.java
  7. 2 0
      yami-shop-bean/src/main/java/com/yami/shop/bean/dto/ProdByCategoryIdAndShopIdDTO.java
  8. 9 9
      yami-shop-bean/src/main/java/com/yami/shop/bean/dto/SearchProdDto.java
  9. 3 0
      yami-shop-bean/src/main/java/com/yami/shop/bean/model/Product.java
  10. 3 0
      yami-shop-bean/src/main/java/com/yami/shop/bean/model/User.java
  11. 21 0
      yami-shop-bean/src/main/java/com/yami/shop/bean/vo/OrderRefundVo.java
  12. 29 0
      yami-shop-bean/src/main/java/com/yami/shop/bean/vo/SimilarProdListVo.java
  13. 1 5
      yami-shop-platform/src/main/java/com/yami/shop/platform/controller/ChannelProdController.java
  14. 19 6
      yami-shop-platform/src/main/java/com/yami/shop/platform/controller/OrderRefundController.java
  15. 10 0
      yami-shop-platform/src/main/java/com/yami/shop/platform/controller/ShopSkuController.java
  16. 0 6
      yami-shop-service/src/main/java/com/yami/shop/dao/ChannelProdMapper.java
  17. 11 0
      yami-shop-service/src/main/java/com/yami/shop/dao/ProductMapper.java
  18. 13 0
      yami-shop-service/src/main/java/com/yami/shop/dao/ShopSkuMapper.java
  19. 1 7
      yami-shop-service/src/main/java/com/yami/shop/service/ChannelProdService.java
  20. 7 0
      yami-shop-service/src/main/java/com/yami/shop/service/ProductService.java
  21. 11 0
      yami-shop-service/src/main/java/com/yami/shop/service/ShopSkuService.java
  22. 7 7
      yami-shop-service/src/main/java/com/yami/shop/service/impl/BasketServiceImpl.java
  23. 0 33
      yami-shop-service/src/main/java/com/yami/shop/service/impl/ChannelProdServiceImpl.java
  24. 0 2
      yami-shop-service/src/main/java/com/yami/shop/service/impl/OrderRefundServiceImpl.java
  25. 1 1
      yami-shop-service/src/main/java/com/yami/shop/service/impl/PointsFailureRecordServiceImpl.java
  26. 8 15
      yami-shop-service/src/main/java/com/yami/shop/service/impl/ProductServiceImpl.java
  27. 25 0
      yami-shop-service/src/main/java/com/yami/shop/service/impl/ShopSkuServiceImpl.java
  28. 10 4
      yami-shop-service/src/main/resources/mapper/BasketMapper.xml
  29. 1 24
      yami-shop-service/src/main/resources/mapper/ChannelProdMapper.xml
  30. 0 1
      yami-shop-service/src/main/resources/mapper/OrderMapper.xml
  31. 5 2
      yami-shop-service/src/main/resources/mapper/OrderRefundMapper.xml
  32. 1 0
      yami-shop-service/src/main/resources/mapper/PointsFailureRecordMapper.xml
  33. 35 6
      yami-shop-service/src/main/resources/mapper/ProductMapper.xml
  34. 25 0
      yami-shop-service/src/main/resources/mapper/ShopSkuMapper.xml

+ 9 - 9
yami-shop-api/src/main/java/com/yami/shop/api/controller/OrderController.java

@@ -77,13 +77,6 @@ public class OrderController {
     @ApiOperation(value = "结算,生成订单信息", notes = "传入下单所需要的参数进行下单")
     public ResponseEntity<ShopCartOrderMergerDto> confirm(@Valid @RequestBody OrderParam orderParam) {
         String userId = SecurityUtils.getUser().getUserId();
-//        String userId = "36726893042d492aba446439c5f00584";
-//        User user = userService.getById(userId);
-//        if (user == null) {
-//            throw new GlobalException("用户信息不存在...");
-//        }
-//        CullenUtils.validateDataThrowException(user.getChannelId() == null, "不支持非企业用户购买...");
-//        CullenUtils.validateDataThrowException(user.getStatus().equals(0), "不支持非企业用户购买...");
 
         if (orderParam.getOrderItem() == null) {
             orderParam.getBasketIds().forEach(basketId -> {
@@ -91,6 +84,11 @@ public class OrderController {
                 Sku byIdss = skuService.getById(byId);
                 boolean skuStock = qnhService.getSkuStock(byIdss.getSkuCode(), byId.getProdId(), orderParam.getPlatform());
                 Product byId1 = productService.getById(byId.getProdId(), orderParam.getPlatform());
+
+                if(byId1.getIsDelete() == 1 || byId1.getStatus() != 1){
+                    throw new GlobalException("当前选择的商品"+byId1.getProdName() + "已下架!请重新选择商品!");
+                }
+
                 productService.updateById(byId1);
                 if (skuStock && byId1.getTotalStocks() < byId.getBasketCount()) {
                     throw new GlobalException("当前选择的规格库存不足!");
@@ -106,8 +104,6 @@ public class OrderController {
             }
         }
 
-//        orderParam.setDvyType(1);
-
         // 订单的地址信息
         UserAddr userAddr = userAddrService.getUserAddrByUserId(orderParam.getAddrId(), userId);
         UserAddrDto userAddrDto = mapperFacade.map(userAddr, UserAddrDto.class);
@@ -283,6 +279,10 @@ public class OrderController {
         if (mergerOrder == null) {
             throw new GlobalException("订单已过期,请重新下单");
         }
+
+        // 校验商品是否删除
+
+
         List<OrderShopParam> orderShopParams = submitOrderParam.getOrderShopParam();
         List<ShopCartOrderDto> shopCartOrders = mergerOrder.getShopCartOrders();
         // 设置备注

+ 13 - 0
yami-shop-api/src/main/java/com/yami/shop/api/controller/ProdController.java

@@ -21,10 +21,13 @@ import com.yami.shop.bean.dto.SearchProdDto;
 import com.yami.shop.bean.model.ChannelProd;
 import com.yami.shop.bean.model.Product;
 import com.yami.shop.bean.model.Sku;
+import com.yami.shop.bean.vo.SimilarProdListVo;
+import com.yami.shop.bean.vo.SkuBuyTogetherOftenVo;
 import com.yami.shop.bean.model.UserShopBehavior;
 import com.yami.shop.common.exception.GlobalException;
 import com.yami.shop.common.util.Arith;
 import com.yami.shop.common.util.PageParam;
+import com.yami.shop.common.util.R;
 import com.yami.shop.security.api.model.YamiUser;
 import com.yami.shop.security.api.util.SecurityUtils;
 import com.yami.shop.service.ProdCommService;
@@ -253,4 +256,14 @@ public class ProdController {
 
         return ResponseEntity.ok(searchProdDtos);
     }
+    /**
+     * 相似商品
+     */
+    @GetMapping("/similarProdList")
+    @ApiOperation(value = "相似商品", notes = "传入商品id")
+    public R<IPage<SimilarProdListVo>> similarProdList(PageParam<Product> page, Long prodId, Long shopId, Long channelId) {
+        return R.SUCCESS(prodService.similarProdList(page, prodId , shopId, channelId));
+    }
+
+
 }

+ 1 - 1
yami-shop-api/src/main/java/com/yami/shop/api/controller/SearchController.java

@@ -80,7 +80,7 @@ public class SearchController {
     }
 
     @GetMapping("/searchProdPage")
-    @ApiOperation(value = "搜索商品")
+    @ApiOperation(value = "搜索商品(首页商品列表)")
     public ResponseEntity<IPage<SearchProdDto>> searchProdPage(PageParam page, SearchParam searchParam) {
         searchParam.setProdType(0);
         IPage<SearchProdDto> searchProdDtoPageByProdName = productService.getSearchProdDtoPageByProdName(page, searchParam);

+ 16 - 0
yami-shop-bean/src/main/java/com/yami/shop/bean/app/dto/ShopCartItemDto.java

@@ -50,4 +50,20 @@ public class ShopCartItemDto extends ProductItemDto implements Serializable {
     private Boolean isCollection;
 
     private Integer basketCount;
+
+    @ApiModelProperty(value = "商品库存")
+    private Integer stock;
+
+    /**
+     * 上架状态(0:商家下架、1:上架、2:违规下架、3:平台审核)
+     */
+    @ApiModelProperty(value = "上架状态(0:商家下架、1:上架、2:违规下架、3:平台审核)")
+    private Integer status;
+    /**
+     * 逻辑删除标记 0 正常 1 已被删除
+     */
+    @ApiModelProperty(value = "逻辑删除标记 0 正常 1 已被删除")
+    private Integer isDelete;
+
+
 }

+ 6 - 1
yami-shop-bean/src/main/java/com/yami/shop/bean/app/dto/UserDto.java

@@ -22,7 +22,7 @@ import org.checkerframework.checker.units.qual.A;
 @Builder
 @NoArgsConstructor
 @AllArgsConstructor
-@JsonInclude(JsonInclude.Include.NON_NULL)
+//@JsonInclude(JsonInclude.Include.NON_NULL)
 public class UserDto {
 
 
@@ -77,4 +77,9 @@ public class UserDto {
     @ApiModelProperty(value = "企业名字")
     private String enterprise;
 
+    /**
+     * 渠道ID
+     */
+    private Long channelId;
+
 }

+ 3 - 0
yami-shop-bean/src/main/java/com/yami/shop/bean/app/param/SearchParam.java

@@ -38,6 +38,9 @@ public class SearchParam {
     @ApiModelProperty(value = "平台分类id")
     private Long categoryId;
 
+    @ApiModelProperty(value = "渠道id")
+    private Long channelId;
+
     @ApiModelProperty(value = "商品ids")
     private List<Long> prodIds;
 

+ 2 - 0
yami-shop-bean/src/main/java/com/yami/shop/bean/dto/ProdByCategoryIdAndShopIdDTO.java

@@ -11,6 +11,8 @@ import lombok.experimental.Accessors;
 public class ProdByCategoryIdAndShopIdDTO {
     @ApiModelProperty("分类ID")
     private long categoryId;
+    @ApiModelProperty("渠道ID")
+    private long channelId;
     @ApiModelProperty("商户ID")
     private long shopId;
     @ApiModelProperty(value = "排序(0 默认排序 1销量排序 2价格排序)")

+ 9 - 9
yami-shop-bean/src/main/java/com/yami/shop/bean/dto/SearchProdDto.java

@@ -60,15 +60,15 @@ public class SearchProdDto {
 
     @ApiModelProperty("店铺id")
     private Long shopId;
-
-    @ApiModelProperty("自营id")
-    private Long selfLabelId;
-
-    @ApiModelProperty("回头客id")
-    private Long returnLabelId;
-
-    @ApiModelProperty("热卖榜id")
-    private Long hotLabelId;
+//
+//    @ApiModelProperty("自营id")
+//    private Long selfLabelId;
+//
+//    @ApiModelProperty("回头客id")
+//    private Long returnLabelId;
+//
+//    @ApiModelProperty("热卖榜id")
+//    private Long hotLabelId;
 
     @ApiModelProperty("自营标签")
     private String selfLabel;

+ 3 - 0
yami-shop-bean/src/main/java/com/yami/shop/bean/model/Product.java

@@ -107,6 +107,9 @@ public class Product implements Serializable {
      * 默认是1,表示正常状态, -1表示删除, 0下架
      */
     private Integer status;
+    /**
+     * 逻辑删除标记 0 正常 1 已被删除
+     */
     private Integer isDelete;
     /**
      * 海博商品类型(1-普通商品,2-多规格商品)

+ 3 - 0
yami-shop-bean/src/main/java/com/yami/shop/bean/model/User.java

@@ -156,5 +156,8 @@ public class User implements Serializable {
      */
     private Integer platform;
 
+    /**
+     * 渠道ID
+     */
     private Long channelId;
 }

+ 21 - 0
yami-shop-bean/src/main/java/com/yami/shop/bean/vo/OrderRefundVo.java

@@ -9,6 +9,8 @@ package com.yami.shop.bean.vo;
 
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.yami.shop.bean.model.OrderRefundRecord;
+import com.yami.shop.bean.model.RefundAppointment;
+import com.yami.shop.bean.model.RefundDelivery;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
@@ -167,6 +169,11 @@ public class OrderRefundVo implements Serializable{
      */
     private Double platformRefundAmount = 0.0;
 
+
+    /**
+     *  配送方式  1:快递 2:自提 3:及时配送
+     */
+    private Integer dvyType;
     /**
      * 运费金额
      */
@@ -221,4 +228,18 @@ public class OrderRefundVo implements Serializable{
     @ApiModelProperty(value = "退款轨迹")
     private List<OrderRefundRecord> orderRefundRecordList;
 
+    /**
+     * 退款预约信息
+     */
+    @TableField(exist = false)
+    @ApiModelProperty(value = "退款预约信息")
+    private RefundAppointment refundAppointment;
+    /**
+     * 退款物流信息
+     */
+    @TableField(exist = false)
+    @ApiModelProperty(value = "退款物流信息")
+    private RefundDelivery refundDelivery;
+
+
 }

+ 29 - 0
yami-shop-bean/src/main/java/com/yami/shop/bean/vo/SimilarProdListVo.java

@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2018-2999 广州亚米信息科技有限公司 All rights reserved.
+ *
+ * https://www.gz-yami.com/
+ *
+ * 未经允许,不可做商业用途!
+ *
+ * 版权所有,侵权必究!
+ */
+
+package com.yami.shop.bean.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class SimilarProdListVo {
+
+    @ApiModelProperty("商品spuID")
+    private Long prodId;
+    @ApiModelProperty("商品名")
+    private String prodName;
+    @ApiModelProperty("图片")
+    private String pic;
+    @ApiModelProperty("渠道价")
+    private String channelProdPrice;
+    @ApiModelProperty("库存")
+    private String shopSkuStocks;
+}

+ 1 - 5
yami-shop-platform/src/main/java/com/yami/shop/platform/controller/ChannelProdController.java

@@ -154,10 +154,6 @@ public class ChannelProdController {
         return R.SUCCESS(result);
     }
 
-    @GetMapping("/export")
-    @ApiOperation(value = "导出渠道商品数据")
-    public void exportChannelProds(ChannelProd channelProd, HttpServletResponse response) {
-        channelProdService.exportChannelProds(channelProd, response);
-    }
+
 
 }

+ 19 - 6
yami-shop-platform/src/main/java/com/yami/shop/platform/controller/OrderRefundController.java

@@ -6,16 +6,15 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.yami.shop.bean.dto.OrderRefundDto;
 import com.yami.shop.bean.model.OrderRefund;
 import com.yami.shop.bean.model.OrderRefundRecord;
+import com.yami.shop.bean.model.RefundAppointment;
+import com.yami.shop.bean.model.RefundDelivery;
 import com.yami.shop.bean.param.OrderRefundCountParam;
 import com.yami.shop.bean.param.OrderRefundStaisticsParam;
 import com.yami.shop.bean.vo.OrderRefundSkuVo;
 import com.yami.shop.bean.vo.OrderRefundVo;
 import com.yami.shop.common.util.PageParam;
 import com.yami.shop.common.util.R;
-import com.yami.shop.dao.OrderItemMapper;
-import com.yami.shop.dao.OrderRefundMapper;
-import com.yami.shop.dao.OrderRefundRecordMapper;
-import com.yami.shop.dao.OrderRefundSkuMapper;
+import com.yami.shop.dao.*;
 import com.yami.shop.service.OrderRefundService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -43,6 +42,9 @@ public class OrderRefundController {
     private final OrderItemMapper orderItemMapper;
     private final OrderRefundRecordMapper orderRefundRecordMapper;
 
+    private final RefundAppointmentMapper refundAppointmentMapper;
+    private final RefundDeliveryMapper refundDeliveryMapper;
+
     /**
      * 分页查询
      *
@@ -51,10 +53,9 @@ public class OrderRefundController {
      * @return 分页数据
      */
     @GetMapping("/page")
-    @PreAuthorize("@pms.hasPermission('platform:orderRefund:page')")
+//    @PreAuthorize("@pms.hasPermission('platform:orderRefund:page')")
     public R<IPage<OrderRefundDto>> getOrderRefundPage(PageParam<OrderRefundDto> page, OrderRefundDto orderRefundDto,
                                                        @RequestParam(required = false) String startTime, @RequestParam(required = false) String endTime) {
-        IPage<OrderRefundDto> page1 = orderRefundService.getPage(page, orderRefundDto, startTime, endTime);
         return R.SUCCESS(orderRefundService.getPage(page, orderRefundDto, startTime, endTime));
     }
 
@@ -85,6 +86,18 @@ public class OrderRefundController {
                 .orderByDesc(OrderRefundRecord::getSort));
         orderRefundVo.setOrderRefundRecordList(orderRefundRecords);
 
+        Integer dvyType = orderRefundVo.getDvyType();
+        if (dvyType == 1){
+            // 1:快递 2:自提 3:及时配送
+            RefundDelivery refundDelivery = refundDeliveryMapper.selectOne(new LambdaQueryWrapper<RefundDelivery>()
+                    .eq(RefundDelivery::getRefundSn, orderRefundVo.getRefundSn()));
+            orderRefundVo.setRefundDelivery(refundDelivery);
+        }else {
+            RefundAppointment refundAppointment = refundAppointmentMapper.selectOne(new LambdaQueryWrapper<RefundAppointment>()
+                    .eq(RefundAppointment::getRefundNumber, orderRefundVo.getRefundSn()));
+            orderRefundVo.setRefundAppointment(refundAppointment);
+        }
+
         List<OrderRefundSkuVo> orderRefundSkuVos = orderRefundskuMapper.selectByRefundId(refundId);
         orderRefundSkuVos.forEach(c -> c.setOrderItem(orderItemMapper.selectById(c.getOrderItemId())));
         orderRefundVo.setOrderRefundSkuList(orderRefundSkuVos);

+ 10 - 0
yami-shop-platform/src/main/java/com/yami/shop/platform/controller/ShopSkuController.java

@@ -9,13 +9,17 @@ package com.yami.shop.platform.controller;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.yami.shop.bean.dto.OrderRefundDto;
+import com.yami.shop.bean.model.ChannelProd;
 import com.yami.shop.bean.model.ShopSku;
 import com.yami.shop.common.util.PageParam;
 import com.yami.shop.common.util.R;
 import com.yami.shop.service.ShopSkuService;
+import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
 import org.springframework.web.bind.annotation.*;
 
+import javax.servlet.http.HttpServletResponse;
+
 
 /**
  * 门店对应商品价格和库存管理
@@ -48,4 +52,10 @@ public class ShopSkuController {
     }
 
 
+    @GetMapping("/export")
+    @ApiOperation(value = "导出渠道商品数据")
+    public void exportChannelProds(ShopSku shopSku, HttpServletResponse response) {
+        shopProdService.exportChannelProds(shopSku, response);
+    }
+
 }

+ 0 - 6
yami-shop-service/src/main/java/com/yami/shop/dao/ChannelProdMapper.java

@@ -96,12 +96,6 @@ public interface ChannelProdMapper extends BaseMapper<ChannelProd> {
      */
     List<ChannelProd> selectListAll(@Param("skuId")Long skuId, @Param("shopId")Long shopId);
 
-    /**
-     * 导出渠道商品列表
-     * @param channelProd 查询条件
-     * @return 渠道商品列表
-     */
-    List<ChannelProdExportVO> exportList(ChannelProd channelProd);
 
     /**
      * 根据门店和商品ID删除渠道商品

+ 11 - 0
yami-shop-service/src/main/java/com/yami/shop/dao/ProductMapper.java

@@ -26,6 +26,8 @@ import com.yami.shop.bean.model.ShopDetail;
 import com.yami.shop.bean.param.ProdOrderParam;
 import com.yami.shop.bean.param.ProductExportParam;
 import com.yami.shop.bean.param.ProductParam;
+import com.yami.shop.bean.vo.SimilarProdListVo;
+import com.yami.shop.bean.vo.SkuBuyTogetherOftenVo;
 import com.yami.shop.common.util.PageParam;
 import org.apache.ibatis.annotations.Param;
 
@@ -186,4 +188,13 @@ public interface ProductMapper extends BaseMapper<Product> {
     List<ProductDto> findByProdIdAndShopIdAndPrice(@Param("prodId")Long prodId, @Param("shopId")Long shopId, @Param("increased")BigDecimal increased, @Param("decreased")BigDecimal decreased);
 
     IPage<SearchProdDto> findByProdAndShop(@Param("page") PageParam<SearchProdDto> page, @Param("list")List<ProductDto> productDtos);
+
+    /**
+     * 获取相似商品列表
+     *
+     * @param page    分页参数
+     * @param prodId  商品ID
+     * @return 商品列表
+     */
+    IPage<SimilarProdListVo> similarProdList(@Param("page") Page page, @Param("prodId")Long prodId, @Param("shopId")Long shopId, @Param("channelId")Long channelId);
 }

+ 13 - 0
yami-shop-service/src/main/java/com/yami/shop/dao/ShopSkuMapper.java

@@ -12,10 +12,14 @@ package com.yami.shop.dao;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.yami.shop.bean.model.ChannelProd;
 import com.yami.shop.bean.model.ShopSku;
+import com.yami.shop.bean.vo.ChannelProdExportVO;
 import com.yami.shop.common.util.PageParam;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
+
 /**
  * @author LGH
  */
@@ -36,4 +40,13 @@ public interface ShopSkuMapper extends BaseMapper<ShopSku> {
      * @return 门店商品
      */
     IPage<ShopSku> selectShopSkuPage(@Param("page")PageParam<ShopSku> page, @Param("shopSku")ShopSku shopSku);
+
+
+    /**
+     * 导出渠道商品列表
+     * @param shopSku 查询条件
+     * @return 渠道商品列表
+     */
+    List<ChannelProdExportVO> exportList(@Param("shopSku")ShopSku shopSku);
+
 }

+ 1 - 7
yami-shop-service/src/main/java/com/yami/shop/service/ChannelProdService.java

@@ -132,13 +132,7 @@ public interface ChannelProdService extends IService<ChannelProd> {
      */
     String importChannelProds(MultipartFile file);
 
-    /**
-     * 导出渠道商品数据
-     * @param channelProd 查询条件
-     * @param response HTTP响应
-     * @throws IOException IO异常
-     */
-    void exportChannelProds(ChannelProd channelProd, HttpServletResponse response);
+
 
     /**
      * 设置销售渠道及价格

+ 7 - 0
yami-shop-service/src/main/java/com/yami/shop/service/ProductService.java

@@ -21,6 +21,8 @@ import com.yami.shop.bean.model.Product;
 import com.yami.shop.bean.param.OfflineHandleEventAuditParam;
 import com.yami.shop.bean.param.ProductExportParam;
 import com.yami.shop.bean.param.ProductParam;
+import com.yami.shop.bean.vo.SimilarProdListVo;
+import com.yami.shop.bean.vo.SkuBuyTogetherOftenVo;
 import com.yami.shop.common.util.PageParam;
 import org.springframework.web.multipart.MultipartFile;
 
@@ -144,4 +146,9 @@ public interface ProductService extends IService<Product> {
      * 根据分类ID、商户ID查询归属的所有商品
      */
     IPage<Product> listProdByCategoryIdAndShopId(ProdByCategoryIdAndShopIdDTO prodByCategoryIdAndShopIdDTO);
+
+    /**
+     * 根据商品ID查询相似商品
+     */
+    IPage<SimilarProdListVo> similarProdList(Page<Product> page, Long prodId, Long shopId, Long channelId);
 }

+ 11 - 0
yami-shop-service/src/main/java/com/yami/shop/service/ShopSkuService.java

@@ -3,9 +3,13 @@ package com.yami.shop.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.yami.shop.bean.model.ChannelProd;
 import com.yami.shop.bean.model.ShopSku;
 import com.yami.shop.common.util.PageParam;
 
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
 /**
  * 门店对应商品价格和库存管理
  */
@@ -19,4 +23,11 @@ public interface ShopSkuService extends IService<ShopSku> {
      * @return 分页数据
      */
     IPage<ShopSku> shopSkuPage(PageParam<ShopSku> page, ShopSku shopSku);
+
+    /**
+     * 导出门店渠道商品数据
+     * @param response 查询参数
+     * @param response 响应
+     */
+    void exportChannelProds(ShopSku shopSku, HttpServletResponse response);
 }

+ 7 - 7
yami-shop-service/src/main/java/com/yami/shop/service/impl/BasketServiceImpl.java

@@ -96,11 +96,11 @@ public class BasketServiceImpl extends ServiceImpl<BasketMapper, Basket> impleme
     public List<ShopCartItemDto> getShopCartItems(String userId) {
         // 在这个类里面要调用这里的缓存信息,并没有使用aop,所以不使用注解
         //List<ShopCartItemDto> shopCartItemDtoList = cacheManagerUtil.getCache("ShopCartItems", userId);
-        List<ShopCartItemDto> shopCartItemDtoList = Lists.newArrayList();
-        if (ObjectUtils.isNotEmpty(shopCartItemDtoList)) {
-            return shopCartItemDtoList;
-        }
-        shopCartItemDtoList = basketMapper.getShopCartItems(userId);
+//        List<ShopCartItemDto> shopCartItemDtoList = Lists.newArrayList();
+//        if (ObjectUtils.isNotEmpty(shopCartItemDtoList)) {
+//            return shopCartItemDtoList;
+//        }
+        List<ShopCartItemDto> shopCartItemDtoList = basketMapper.getShopCartItems(userId);
         for (ShopCartItemDto shopCartItemDto : shopCartItemDtoList) {
             shopCartItemDto.setProductTotalAmount(Arith.mul(shopCartItemDto.getProdCount(), shopCartItemDto.getPrice()));
             shopCartItemDto.setWeight(shopCartItemDto.getWeight());
@@ -114,11 +114,11 @@ public class BasketServiceImpl extends ServiceImpl<BasketMapper, Basket> impleme
     public List<ShopCartItemDto> getShopCartItems(String userId, Integer platform) {
         // 在这个类里面要调用这里的缓存信息,并没有使用aop,所以不使用注解
 //        List<ShopCartItemDto> shopCartItemDtoList = cacheManagerUtil.getCache("ShopCartItems", userId);
-        List<ShopCartItemDto> shopCartItemDtoList = Lists.newArrayList();
+//        List<ShopCartItemDto> shopCartItemDtoList = Lists.newArrayList();
 //        if (ObjectUtils.isNotEmpty(shopCartItemDtoList)) {
 //            return shopCartItemDtoList;
 //        }
-        shopCartItemDtoList = basketMapper.getShopCartItemsByPlatform(userId, platform);
+        List<ShopCartItemDto> shopCartItemDtoList = basketMapper.getShopCartItemsByPlatform(userId, platform);
         for (ShopCartItemDto shopCartItemDto : shopCartItemDtoList) {
             shopCartItemDto.setProductTotalAmount(Arith.mul(shopCartItemDto.getProdCount(), shopCartItemDto.getPrice()));
             shopCartItemDto.setWeight(shopCartItemDto.getWeight());

+ 0 - 33
yami-shop-service/src/main/java/com/yami/shop/service/impl/ChannelProdServiceImpl.java

@@ -315,40 +315,7 @@ public class ChannelProdServiceImpl extends ServiceImpl<ChannelProdMapper, Chann
         return String.format("导入完成,成功:%d条", successCount);
     }
     // ... existing code ...
-    @Override
-    public void exportChannelProds(ChannelProd channelProd, HttpServletResponse response) {
-        // 查询数据
-        List<ChannelProd> dataList = channelProdMapper.selectList(new QueryWrapper<ChannelProd>()
-                .eq(channelProd.getChannelId() != null, "channel_id", channelProd.getChannelId())
-                .eq(channelProd.getSkuId() != null, "sku_id", channelProd.getSkuId()));
-
-        // 转换为导出VO
-        List<ChannelProdExportVO> exportData = dataList.stream().map(item -> {
-            ChannelProdExportVO exportVO = new ChannelProdExportVO();
-            exportVO.setSkuId(item.getSkuId());
-            exportVO.setChannelName(item.getChannelName());
-            exportVO.setShopName(item.getShopName());
-            exportVO.setPurchasePrice(item.getPurchasePrice());
-            exportVO.setDeliveryPrice(item.getDeliveryPrice());
-            exportVO.setChannelProdPrice(item.getChannelProdPrice());
-            return exportVO;
-        }).collect(Collectors.toList());
-        try {
-            // 设置响应头
-            response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
-            response.setCharacterEncoding("utf-8");
-
-            String fileName = URLEncoder.encode("渠道商品数据导出", "UTF-8").replaceAll("\\+", "%20");
 
-            response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
-            // 写入Excel
-            EasyExcel.write(response.getOutputStream(), ChannelProdExportVO.class)
-                    .sheet("渠道商品数据")
-                    .doWrite(exportData);
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-    }
 // ... existing code ...
 
     @Override

+ 0 - 2
yami-shop-service/src/main/java/com/yami/shop/service/impl/OrderRefundServiceImpl.java

@@ -86,8 +86,6 @@ public class OrderRefundServiceImpl extends ServiceImpl<OrderRefundMapper, Order
         IPage<OrderRefundDto> orderRefundDtoIPage = orderRefundMapper.getPage(page, orderRefundDto, startTime, endTime);
         List<OrderRefundDto> records = orderRefundDtoIPage.getRecords();
         for (OrderRefundDto record : records) {
-//            RefundDelivery refundDelivery = refundDeliveryService.getOne(new LambdaQueryWrapper<RefundDelivery>().eq(RefundDelivery::getRefundSn, record.getRefundSn()));
-//            record.setRefundDelivery(refundDelivery);
             getRefundTypeByOrderItem2(record);
         }
         return orderRefundDtoIPage;

+ 1 - 1
yami-shop-service/src/main/java/com/yami/shop/service/impl/PointsFailureRecordServiceImpl.java

@@ -40,7 +40,7 @@ public class PointsFailureRecordServiceImpl extends ServiceImpl<PointsFailureRec
         // 查询数据
 
             List<PointsFailureRecord> dataList = pointsFailureRecordMapper.selectList(new LambdaQueryWrapper<PointsFailureRecord>()
-                    .eq(PointsFailureRecord::getRechargeStatus, 1)
+                    .eq(PointsFailureRecord::getRechargeStatus, 0)
                     .eq(ObjectUtils.isNotEmpty(pointsFailureRecord.getCode()), PointsFailureRecord::getCode, pointsFailureRecord.getCode())
                     .last("LIMIT 1000")
             );

+ 8 - 15
yami-shop-service/src/main/java/com/yami/shop/service/impl/ProductServiceImpl.java

@@ -33,6 +33,8 @@ import com.yami.shop.bean.enums.ProdType;
 import com.yami.shop.bean.model.OfflineHandleEvent;
 import com.yami.shop.bean.model.Product;
 import com.yami.shop.bean.model.Sku;
+import com.yami.shop.bean.vo.SimilarProdListVo;
+import com.yami.shop.bean.vo.SkuBuyTogetherOftenVo;
 import com.yami.shop.common.exception.GlobalException;
 import com.yami.shop.common.exception.YamiShopBindException;
 import com.yami.shop.common.util.Arith;
@@ -228,21 +230,7 @@ public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> impl
             }
             IPage<SearchProdDto> searchProdDtoPage = productMapper.getSearchProdDtoPageByProdNameNew(page, searchParam, shopIds);
             for (SearchProdDto searchProdDto : searchProdDtoPage.getRecords()) {
-                Long hotLabelId = searchProdDto.getHotLabelId();
-                Long selfLabelId = searchProdDto.getSelfLabelId();
-                Long returnLabelId = searchProdDto.getReturnLabelId();
-                if (null != hotLabelId) {
-                    Label label = labelMapper.selectById(hotLabelId);
-                    searchProdDto.setHotLabel(label.getName());
-                }
-                if (null != selfLabelId) {
-                    Label label = labelMapper.selectById(selfLabelId);
-                    searchProdDto.setSelfLabel(label.getName());
-                }
-                if (null != returnLabelId) {
-                    Label label = labelMapper.selectById(returnLabelId);
-                    searchProdDto.setReturnLabel(label.getName());
-                }
+
                 List<SkuDto> skuList = skuMapper.listByProdId(searchProdDto.getProdId()).stream().map((sku) -> SkuDto.builder()
                         .skuName(sku.getSkuName()).pic(sku.getPic()).skuScore(sku.getSkuScore()).price(sku.getPrice())
                         .stocks(sku.getStocks()).properties(sku.getProperties()).skuId(sku.getSkuId())
@@ -762,6 +750,11 @@ public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> impl
         return productIPage;
     }
 
+    @Override
+    public IPage<SimilarProdListVo> similarProdList(Page<Product> page, Long prodId, Long shopId, Long channelId) {
+        return productMapper.similarProdList(page, prodId, shopId, channelId);
+    }
+
     /**
      * 创建下拉列表选项
      *

+ 25 - 0
yami-shop-service/src/main/java/com/yami/shop/service/impl/ShopSkuServiceImpl.java

@@ -1,5 +1,6 @@
 package com.yami.shop.service.impl;
 
+import com.alibaba.excel.EasyExcel;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -8,6 +9,7 @@ import com.yami.shop.bean.model.ChannelProd;
 import com.yami.shop.bean.model.Label;
 import com.yami.shop.bean.model.ShopDetail;
 import com.yami.shop.bean.model.ShopSku;
+import com.yami.shop.bean.vo.ChannelProdExportVO;
 import com.yami.shop.common.util.PageParam;
 import com.yami.shop.dao.*;
 import com.yami.shop.service.ShopSkuService;
@@ -15,6 +17,8 @@ import lombok.AllArgsConstructor;
 import org.apache.commons.lang3.ObjectUtils;
 import org.springframework.stereotype.Service;
 
+import javax.servlet.http.HttpServletResponse;
+import java.net.URLEncoder;
 import java.util.List;
 
 @Service
@@ -45,4 +49,25 @@ public class ShopSkuServiceImpl extends ServiceImpl<ShopSkuMapper, ShopSku> impl
         }
         return page1;
     }
+
+    @Override
+    public void exportChannelProds(ShopSku shopSku, HttpServletResponse response) {
+        // 查询数据
+        List<ChannelProdExportVO> channelProdExportVOS = shopProdMapper.exportList(shopSku);
+        try {
+            // 设置响应头
+            response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
+            response.setCharacterEncoding("utf-8");
+
+            String fileName = URLEncoder.encode("渠道商品数据导出", "UTF-8").replaceAll("\\+", "%20");
+
+            response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
+            // 写入Excel
+            EasyExcel.write(response.getOutputStream(), ChannelProdExportVO.class)
+                    .sheet("渠道商品数据")
+                    .doWrite(channelProdExportVOS);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
 }

+ 10 - 4
yami-shop-service/src/main/resources/mapper/BasketMapper.xml

@@ -17,13 +17,17 @@
     </resultMap>
 
     <select id="getShopCartItems" resultType="com.yami.shop.bean.app.dto.ShopCartItemDto">
-        SELECT tb.*,tb.basket_count as prod_count,tsd.shop_name,tp.category_id,IFNULL(ts.pic,tp.pic)AS pic,cp.channel_prod_price price,ts.ori_price,tp.brief,ts.properties,ts.prod_name,ts.sku_name,ts.weight,ts.weight_unit,IF(uc.id,TRUE,FALSE) AS is_collection
+        SELECT tb.*,tb.basket_count as prod_count,tsd.shop_name,tp.category_id,IFNULL(ts.pic,tp.pic)AS pic,
+               cp.channel_prod_price price,ts.ori_price,tp.brief,ts.properties,ts.prod_name,ts.sku_name,
+               tp.is_delete as isDelete, tp.status AS status,cs.shop_sku_stocks as stock,
+               ts.weight,ts.weight_unit,IF(uc.id,TRUE,FALSE) AS is_collection
         FROM tz_basket tb
                  LEFT JOIN tz_shop_detail tsd ON tb.shop_id = tsd.shop_id
                  LEFT JOIN tz_prod tp ON tb.prod_id = tp.prod_id
                  LEFT JOIN tz_sku ts ON tb.sku_id = ts.sku_id
                  LEFT JOIN tz_channel_prod cp on cp.sku_id=ts.sku_id and cp.is_delete=0 and tb.shop_id = cp.shop_id
-                 LEFT JOIN tz_user_collection uc ON uc.prod_id = tp.prod_id AND tb.user_id = uc.user_id
+                 LEFT JOIN tz_shop_sku cs on cs.sku_id=ts.sku_id and cs.is_delete=0 and cs.shop_id = tsd.shop_id
+                 LEFT JOIN tz_user_collection uc ON uc.prod_id = tp.prod_id AND tb.user_id = tb.user_id
         WHERE tp.status = 1 AND ts.status =1 AND tb.user_id = #{userId}
         ORDER BY tb.`basket_id` DESC
     </select>
@@ -42,8 +46,9 @@
             ts.sku_name,
             ts.weight,
             ts.weight_unit,
-            IF
-            ( uc.id, TRUE, FALSE ) AS is_collection
+            tp.is_delete as isDelete, tp.status AS status,
+            cs.shop_sku_stocks as stock,
+            IF( uc.id, TRUE, FALSE ) AS is_collection
         FROM
             tz_basket tb
                 LEFT JOIN tz_shop_detail tsd ON tb.shop_id = tsd.shop_id
@@ -51,6 +56,7 @@
                 LEFT JOIN tz_sku ts ON tb.sku_id = ts.sku_id
                 LEFT JOIN tz_user_collection uc ON (uc.prod_id = tp.prod_id AND tb.user_id = uc.user_id )
                 LEFT JOIN tz_channel_prod tcp ON (tb.sku_id=tcp.sku_id AND tb.shop_id=tcp.shop_id)
+                LEFT JOIN tz_shop_sku cs on cs.sku_id=ts.sku_id and cs.is_delete=0 and cs.shop_id = tb.shop_id
         WHERE
             tp.STATUS = 1
           AND ts.STATUS = 1

+ 1 - 24
yami-shop-service/src/main/resources/mapper/ChannelProdMapper.xml

@@ -117,29 +117,6 @@
           AND c.shop_id = #{shopId}
           AND c.is_delete = 0
     </select>
-    <select id="exportList" resultType="com.yami.shop.bean.vo.ChannelProdExportVO">
-        SELECT
-        p.hb_sku_id AS skuId,
-        sha.sku_name AS skuName,
-        p.channel_id AS channelId,
-        c.channel_name AS channelName,
-        d.shop_name AS shopName,
-        p.purchase_price AS purchasePrice,
-        p.delivery_price AS deliveryPrice,
-        p.channel_prod_price AS channelProdPrice
-        FROM
-        tz_channel_prod p
-        LEFT JOIN tz_sku sha ON p.sku_id = sha.sku_id
-        LEFT JOIN tz_channel c ON p.channel_id = c.id
-        LEFT JOIN tz_shop_detail d ON p.shop_id = d.shop_id
-        WHERE
-        p.is_delete = 0
-        <if test="channelId != null">
-            AND p.channel_id = #{channelId}
-        </if>
-        <if test="skuId != null">
-            AND p.sku_id = #{skuId}
-        </if>
-    </select>
+
 
 </mapper>

+ 0 - 1
yami-shop-service/src/main/resources/mapper/OrderMapper.xml

@@ -484,7 +484,6 @@
         LEFT JOIN tz_user_addr_order b on a.addr_order_id=b.addr_order_id
         LEFT JOIN tz_shop_detail c on a.shop_id=c.shop_id
         <where>
---             a.dvy_type=1
             <if test="orderParam.orderNumber != null and orderParam.orderNumber != ''">
                 and a.order_number = #{orderParam.orderNumber}
             </if>

+ 5 - 2
yami-shop-service/src/main/resources/mapper/OrderRefundMapper.xml

@@ -40,6 +40,7 @@
         <result column="order_number" property="orderNumber"/>
         <result column="shop_id" property="shopId"/>
         <result column="user_id" property="userId"/>
+        <result column="o_dvy_type" property="dvyType"/>
         <result column="order_id" property="orderId"/>
         <result column="refund_type" property="refundType"/>
         <result column="order_item_id" property="orderItemId"/>
@@ -93,7 +94,7 @@
         <result column="update_time" property="updateTime"/>
         <result column="reject_time" property="rejectTime"/>
         <result column="shop_name" property="shopName"/>
-
+        <result column="o_dvy_type" property="dvyType"/>
         <!-- 扩展字段 -->
         <result column="o_order_number" property="orderNumber"/>
         <result column="o_actual_total" property="orderAmount"/>
@@ -229,6 +230,7 @@
         o.actual_total AS o_actual_total,
         o.product_nums AS product_nums,
         o.hb_order_status AS o_status,
+        o.dvy_type        as o_dvy_type,
         o.refund_status AS o_refund_status,
         sd.shop_name AS shop_name
         FROM tz_order_refund r
@@ -471,7 +473,7 @@
 
     </select>
     <select id="orderRefundPage" resultMap="OrderRefundVoMap">
-        select refund.*, o.actual_total as actualTotal, o.product_nums as productNums, o.hb_order_status as hbOrderStatus,
+        select refund.*, o.actual_total as actualTotal,o.dvy_type as o_dvy_type, o.product_nums as productNums, o.hb_order_status as hbOrderStatus,
         tsd.shop_name as shopName
         from tz_order_refund refund
         join tz_shop_detail tsd on refund.shop_id = tsd.shop_id
@@ -508,6 +510,7 @@
                o.product_nums    as productNums,
                o.hb_order_status as hbOrderStatus,
                o.offset_points as OrderOffsetPoints,
+               o.dvy_type        as o_dvy_type,
                o.actual_total as OrderActualTotal,
                tsd.shop_name     as shopName,
                uao.receiver    as receiver

+ 1 - 0
yami-shop-service/src/main/resources/mapper/PointsFailureRecordMapper.xml

@@ -21,6 +21,7 @@
         <where>
             <if test="channelId != null">p.channel_id = #{channelId}</if>
         </where>
+        order by p.create_time DESC
         GROUP BY p.code, p.create_by, p.channel_name, u.username, r.role_name
     </select>
 </mapper>

+ 35 - 6
yami-shop-service/src/main/resources/mapper/ProductMapper.xml

@@ -600,9 +600,11 @@
         MIN(tcp.channel_prod_price) as price,
         any_value(p.brief) as brief,
         any_value ( tss.shop_id ) AS shopId,
-        any_value ( tss.self_label_id ) AS selfLabelId,
-        any_value ( tss.return_label_id ) AS returnLabelId,
-        any_value ( tss.hot_label_id ) AS hotLabelId,
+
+        ls.name as selfLabel,
+        lr.name as returnLabel,
+        lh.name as hotLabel,
+
         count(pc.prod_comm_id) as prod_comm_number,
         count( CASE WHEN evaluate = 0 THEN prod_comm_id ELSE null END ) AS praise_number,
         (6371 * acos(cos(radians(#{searchParam.lat})) * cos(radians(shop_lat)) * cos(radians(shop_lng) -
@@ -617,6 +619,10 @@
         LEFT JOIN tz_category_prod cp on p.prod_id = cp.prod_id
         LEFT JOIN tz_shop_category sc on cp.code = sc.code
 
+        left join tz_label ls on ls.id = tss.self_label_id
+        left join tz_label lr on lr.id = tss.return_label_id
+        left join tz_label lh on lh.id = tss.hot_label_id
+
         where 1 = 1 and p.`status` = 1 and p.`is_delete`=0 and tcp.is_delete=0 and tss.shop_id in
         <foreach collection="list" item="item" separator="," open="(" close=")">
             #{item}
@@ -627,9 +633,6 @@
         <if test="searchParam.shopId != null">
             and tss.shop_id = #{searchParam.shopId}
         </if>
-        <if test="searchParam.platform != null">
-            and tcp.channel_id = #{searchParam.platform}
-        </if>
 
         <if test="searchParam.categoryId != null">
             and sc.id = #{searchParam.categoryId}
@@ -637,6 +640,12 @@
         <if test="searchParam.shopCategoryId != null">
             and p.shop_category_id = #{searchParam.shopCategoryId}
         </if>
+        <if test="searchParam.channelId == null or searchParam.channelId == 0">
+            and tcp.channel_id = 1
+        </if>
+        <if test="searchParam.channelId != null and searchParam.channelId != 0">
+            and tcp.channel_id = #{searchParam.channelId}
+        </if>
         <if test="searchParam.prodType != null and searchParam.isAllProdType == null">
             and p.prod_type = #{searchParam.prodType}
         </if>
@@ -844,6 +853,12 @@
                  JOIN tz_channel_prod cp ON cp.shop_id = tcp.shop_id
             AND cp.sku_id = tss.sku_id
             AND cp.is_delete = 0
+        <if test="prodByCategoryIdAndShopIdDTO.channelId == null or prodByCategoryIdAndShopIdDTO.channelId == 0">
+            and cp.channel_id = 1
+        </if>
+        <if test="prodByCategoryIdAndShopIdDTO.channelId != null and prodByCategoryIdAndShopIdDTO.channelId != 0">
+            and cp.channel_id = #{prodByCategoryIdAndShopIdDTO.channelId}
+        </if>
             AND cp.channel_prod_price IS NOT NULL
         WHERE tp.STATUS = 1
           AND tp.`is_delete` = 0
@@ -944,4 +959,18 @@
         order by  i.count DESC
     </select>
 
+
+    <select id="similarProdList" resultType="com.yami.shop.bean.vo.SimilarProdListVo">
+        SELECT p.prod_id AS prodId,p.prod_name AS prodName,p.pic,min(cha.channel_prod_price) AS channelProdPrice,sum(ss.shop_sku_stocks) shopSkuStocks FROM tz_category_prod cp                                                                                                                                                                INNER JOIN tz_prod p on p.prod_id =  cp.prod_id
+                            LEFT JOIN tz_shop_sku ss on ss.spu_id =  cp.prod_id and ss.is_delete = 0
+                            INNER JOIN tz_channel_prod cha on cha.sku_id = ss.sku_id and cha.is_delete = 0
+        where  p.is_delete = 0 and cha.channel_id =  #{channelId} and
+            cp.code in (select sc.code FROM tz_category_prod cp
+                                                LEFT JOIN tz_shop_category sc on  cp.code = sc.code
+                        WHERE  sc.level = 2 and cp.shop_id = #{shopId}  sc.is_delete = 0 and cp.is_delete = 0
+                          and  cp.prod_id = #{prodId}
+                        GROUP BY sc.code)
+        GROUP BY p.prod_id
+    </select>
+
 </mapper>

+ 25 - 0
yami-shop-service/src/main/resources/mapper/ShopSkuMapper.xml

@@ -45,4 +45,29 @@
         order by sk.rec_time desc
     </select>
 
+
+    <select id="exportList" resultType="com.yami.shop.bean.vo.ChannelProdExportVO">
+        SELECT
+        sh.sku_id AS skuId,
+        sha.sku_name AS skuName,
+        p.channel_id AS channelId,
+        c.channel_name AS channelName,
+        d.shop_name AS shopName,
+        p.purchase_price AS purchasePrice,
+        p.delivery_price AS deliveryPrice,
+        p.channel_prod_price AS channelProdPrice
+        FROM tz_shop_sku sh
+        LEFT JOIN  tz_channel_prod p ON sh.sku_id = p.sku_id and p.is_delete = 0
+        LEFT JOIN tz_channel c ON p.channel_id = c.id
+        LEFT JOIN tz_sku sha ON sh.sku_id = sha.sku_id
+        LEFT JOIN tz_shop_detail d ON sh.shop_id = d.shop_id
+        WHERE sh.is_delete = 0
+        <if test="shopSku.shopId != null">
+            AND sh.shop_id = #{shopSku.shopId}
+        </if>
+        <if test="shopSku.skuName != null">
+            AND sha.sku_name LIKE CONCAT('%',#{shopSku.skuName},'%')
+        </if>
+        order by sh.rec_time desc
+    </select>
 </mapper>