Browse Source

Merge remote-tracking branch 'origin/developerD' into developer

huangzhiguo 1 năm trước cách đây
mục cha
commit
39d258ed6e

+ 41 - 0
src/main/java/com/caimei365/commodity/controller/ShopApi.java

@@ -0,0 +1,41 @@
+package com.caimei365.commodity.controller;
+
+import com.caimei365.commodity.model.ResponseJson;
+import com.caimei365.commodity.model.vo.PaginationVo;
+import com.caimei365.commodity.model.vo.ProductShoplVo;
+import com.caimei365.commodity.service.ShopOrderService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Map;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2023/9/28
+ */
+@RestController
+@RequestMapping("/commodity/Shop")
+public class ShopApi {
+
+    @Autowired private ShopOrderService shopOrderService;
+
+    /**
+     * 供应商商品数据
+     * @param shopId
+     * @param name
+     * @param pageNum
+     * @param pageSize
+     * @return
+     */
+    @GetMapping("/getShopProduct")
+    public ResponseJson<PaginationVo<ProductShoplVo>> getShopProductList(Integer shopId, String name, Integer pageNum, Integer pageSize) {
+        if (null == shopId) {
+            return ResponseJson.error(-1, "供应商Id不能为空", null);
+        }
+        return shopOrderService.getShopProductList(shopId, name, pageNum, pageSize);
+    }
+}

+ 19 - 0
src/main/java/com/caimei365/commodity/mapper/PriceMapper.java

@@ -50,6 +50,14 @@ public interface PriceMapper {
      * 根据skuId查询阶梯价列表
      */
     List<LadderPriceVo> getLadderPricesByProductId(Integer skuId);
+
+    /**
+     * 根据skuId查询阶梯价列表 组织
+     * @param skuId
+     * @param organizeId
+     * @return
+     */
+    List<LadderPriceVo> getLadderPricesOrganizeByProductId(@Param("skuId") Integer skuId, @Param("organizeId") Integer organizeId);
     /**
      * 获取最低阶梯价(价格最低,阶梯数最大)
      */
@@ -58,6 +66,13 @@ public interface PriceMapper {
      * 获取最高阶梯价(价格最高,阶梯数最小)
      */
     LadderPriceVo findMaxLadderPrice(Integer skuId);
+
+    /**
+     * 获取最高阶梯价(价格最高,阶梯数最小)联合丽格
+     * @param skuId
+     * @return
+     */
+    LadderPriceVo findOrganizeMaxLadderPrice(@Param("skuId") Integer skuId,@Param("organizeId") Integer organizeId);
     /**
      * 根据商品ID和用户ID 查询复购价
      */
@@ -141,8 +156,12 @@ public interface PriceMapper {
 
     ProductItemVo findLowPriceOfAll(Integer productId);
 
+    ProductItemVo findLowPriceOfOrganizeAll(@Param("productId") Integer productId, @Param("organizeId") Integer organizeId);
+
     ProductItemVo findLowPriceOfPrice(Integer productId);
 
+    ProductItemVo findLowPriceOfOrganizePrice(@Param("productId") Integer productId, @Param("organizeId") Integer organizeId);
+
     VipSkuPriceDto getVipSku(Integer skuId);
 
     Double getTouchPriceBySku(Integer skuId,Integer promotionId);

+ 33 - 0
src/main/java/com/caimei365/commodity/mapper/ShopOrderMapper.java

@@ -0,0 +1,33 @@
+package com.caimei365.commodity.mapper;
+
+import com.caimei365.commodity.model.dto.Sku;
+import com.caimei365.commodity.model.vo.ProductDetailVo;
+import com.caimei365.commodity.model.vo.ProductShoplVo;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2023/9/28
+ */
+@Mapper
+public interface ShopOrderMapper {
+    /**
+     * 供应商商品集合
+     * @param shopId
+     * @return
+     */
+    List<ProductShoplVo> getShopProductList(@Param("shopId") Integer shopId, @Param("name") String name);
+
+    /**
+     * 商品对应上架商城的 sku
+     * @param productId
+     * @param organizeIdList
+     * @return
+     */
+    List<Sku> getSkuList(@Param("productId") Integer productId, @Param("organizeIdList") List<String> organizeIdList);
+}

+ 8 - 0
src/main/java/com/caimei365/commodity/model/vo/ProductDetailVo.java

@@ -59,6 +59,10 @@ public class ProductDetailVo implements Serializable {
      * 商品productID
      */
     private Integer productId;
+    /**
+     * 上架商城
+     */
+    private String groundMall;
     /**
      * 所属供应商Id
      */
@@ -143,6 +147,10 @@ public class ProductDetailVo implements Serializable {
      * 是否使用活动角标:1是,空或0不是[与actType搭配使用,仅用于标识非真正活动]
      */
     private Integer actFlag;
+    /**
+     * 机构税率
+     */
+    private BigDecimal taxRate;
     /**
      * 是否含税   0不含税,1含税,2未知
      */

+ 380 - 0
src/main/java/com/caimei365/commodity/model/vo/ProductShoplVo.java

@@ -0,0 +1,380 @@
+package com.caimei365.commodity.model.vo;
+
+import com.caimei365.commodity.model.dto.Sku;
+import com.caimei365.commodity.model.po.ProductDetailInfoPo;
+import com.caimei365.commodity.model.po.ProductImagePo;
+import com.caimei365.commodity.model.po.ProductParameterPo;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2023/10/24
+ */
+@Data
+public class ProductShoplVo {
+    private Integer minBuyNumber;
+
+    private Integer stock;
+    /**
+     * 售罄标记 0否1是
+     */
+    private Integer saleOutFlag;
+    /**
+     * 展示的最低市场价
+     */
+    private Double normalPrice;
+    /**
+     * 展示的sku的skuId
+     */
+    private Integer skuId;
+    /**
+     * skus
+     */
+    private List<Sku> skus;
+    /**
+     * 展示的最低价的规格
+     */
+    private String unit;
+    /**
+     * 默认显示的最低价
+     */
+    private BigDecimal price;
+    /**
+     * 用户收藏标记(1收藏,0未收藏)
+     */
+    private Integer userLike;
+    /**
+     * 商品productID
+     */
+    private Integer productId;
+    /**
+     * 上架商城
+     */
+    private String groundMall;
+    /**
+     * 所属供应商Id
+     */
+    private Integer shopId;
+    /**
+     * 特殊供应商标识:正常供应商1,新品供应商2,二手供应商3
+     */
+    private Integer shopType;
+    /**
+     * 商品名称
+     */
+    private String name;
+    /**
+     * 内部商品名称
+     */
+    private String aliasName;
+    /**
+     * 搜索关键词,4个用英文逗号区分,不存在的直接逗号隔空(顺序参考:品牌,学名,市场称呼,大类别,小类别)
+     */
+    private String searchKey;
+    /**
+     * 商品属性:1产品,2仪器
+     */
+    private Integer commodityType;
+    /**
+     * 一级分类id
+     */
+    private Integer bigTypeId;
+    /**
+     * 二级分类id
+     */
+    private Integer smallTypeId;
+    /**
+     * 三级分类Id
+     */
+    private Integer tinyTypeId;
+    /**
+     * 主图
+     */
+    private String mainImage;
+    /**
+     * 品牌Id
+     */
+    private Integer brandId;
+    /**
+     * 商品类型:0其它类型(默认),1妆字号,2械字号
+     */
+    private Integer productType;
+    /**
+     * 商品标签用英文逗号隔开,中文逗号或其它一律不作切割
+     */
+    private String tags;
+    /**
+     * 商品货号
+     */
+    private String productCode;
+    /**
+     * 价格可见度:0公开价格 1不公开价格 2仅对会员机构公开 price1TextFlag
+     */
+    private Integer priceFlag;
+    /**
+     * 启用阶梯价格标识 0否 1是
+     */
+    private Integer ladderPriceFlag;
+    /**
+     * 阶梯价格列表
+     */
+    private List<LadderPriceVo> ladderPriceList;
+    /**
+     * 商品可见度:(3:所有人可见,2:普通机构可见,1:会员机构可见)
+     */
+    private Integer visibility;
+    /**
+     * 商品详情可见度:1所有人可见,2所有机构可见,3仅会员机构可见,4仅医美机构可见
+     */
+    private Integer commodityDetailsFlag;
+    /**
+     * 商品状态, 0逻辑删除 1待审核 2已上架 3已下架 8审核未通过 9已隐身 10已冻结
+     */
+    private Integer validFlag;
+    /**
+     * 是否使用活动角标:1是,空或0不是[与actType搭配使用,仅用于标识非真正活动]
+     */
+    private Integer actFlag;
+    /**
+     * 机构税率
+     */
+    private BigDecimal taxRate;
+    /**
+     * 是否含税   0不含税,1含税,2未知
+     */
+    private Integer includedTax;
+    /**
+     * 供应商税率:增值专用发票默认13%,增值税普通发票6%取值范围[0-100]
+     */
+    private Double supplierTaxPoint;
+    /**
+     * 服务起订量
+     */
+    private Integer serviceNumber;
+    /**
+     * 商品的类别:1正常商品(默认),2二手商品
+     */
+    private Integer productCategory;
+    /**
+     * 添加时间
+     */
+    private String addTime;
+    /**
+     * 更新时间
+     */
+    private String updateTime;
+    /**
+     * 是否有sku:1有, 0没有
+     */
+    private Integer hasSkuFlag;
+    /**
+     * 销量
+     */
+    private Integer sellNumber;
+    /**
+     * 排序值
+     */
+    private Integer sortIndex;
+    /**
+     * 供应商主推商品标志 0否 1是
+     */
+    private Integer featuredFlag;
+    /**
+     * 成本价选中标志:1固定成本 2比例成
+     */
+    private Integer costCheckFlag;
+    /**
+     * 相关推荐类型 0自动选择; 1手动推荐
+     */
+    private Integer recommendType;
+    /**
+     * 标签数组
+     */
+    private String[] tagsList;
+    /**
+     * 品牌名称
+     */
+    private String brandName;
+    /**
+     * 一级分类名称
+     */
+    private String bigTypeName;
+    /**
+     * 二级分类名称
+     */
+    private String smallTypeName;
+    /**
+     * 三级分类名称
+     */
+    private String tinyTypeName;
+    /**
+     * 所在分类名称
+     */
+    private String typeName;
+    /**
+     * 商品详情
+     */
+    private ProductDetailInfoPo productDetail;
+    /**
+     * 商品图片
+     */
+    private List<ProductImagePo> imageList;
+    /**
+     * 相关参数
+     */
+    private List<ProductParameterPo> parametersList;
+    /**
+     * 械字号类型   (基于械字号基础),1:一类,2:二类,3:三类
+     */
+    private String machineType;
+
+    /**
+     * 购买数量: 1逐步增长,2以起订量增长(起订量的倍数增长)
+     */
+    private Integer step;
+    /**
+     * 械字号资质证书图  (基于械字号基础)
+     */
+    private String qualificationImg;
+
+    /**
+     * 发票类型(基于是否含税基础)   1增值税票,2普通票, 3不能开票
+     */
+    private String invoiceType;
+    /**
+     * 开票税点(基于不含税基础) :增值税默认13%,普通票6%取值范围[0-100]
+     */
+    private Double taxPoint;
+    /**
+     * 销售区域:1全部区域, 0指定区域
+     */
+    private String allAreaFlag;
+    /**
+     * 指定的销售区域
+     */
+    private String provinceIds;
+    /**
+     * 商品详情信息
+     */
+    private String detailInfo;
+    /**
+     * 服务详情
+     */
+    private String serviceInfo;
+    /**
+     * 订购方案
+     */
+    private String orderInfo;
+    /**
+     * 计算后价格等级
+     */
+    private Integer priceGrade;
+    /**
+     * 供应商信息
+     */
+    private ShopVo shop;
+    /**
+     * 商品是否处于活动状态 1是 0否
+     */
+    private Integer actStatus;
+    /**
+     * 划线价格
+     */
+    private BigDecimal originalPrice;
+    /**
+     * 促销活动
+     */
+    private PromotionsVo promotions;
+    /**
+     * 用户身份: 2-会员机构, 4-普通机构
+     */
+    private Integer userIdentity;
+    /**
+     * 是否复购 0否 1是
+     */
+    private Integer repurchaseFlag;
+    /**
+     * 仪器培训方式:1线上培训,2线下培训
+     */
+    private Integer trainingMethod;
+    /**
+     * 售价是否包含:1售价未包含,2售价已包含
+     */
+    private Integer trainingType;
+    /**
+     * 培训费用(售价未包含)
+     */
+    private BigDecimal trainingFee;
+    /**
+     * 商品pc端活动类型,0无活动,1云上美博会
+     */
+    private Integer pcActType;
+    /**
+     * 商品小程序端活动类型,0无活动,1云上美博会
+     */
+    private Integer appletsActType;
+    /**
+     * 商品资料id
+     */
+    private Integer archiveId;
+    /**
+     * 超级会员优惠商品标识:0不是,1是
+     */
+    private Integer svipProductFlag;
+    /**
+     * 超级会员优惠价标签
+     */
+    private String svipPriceTag;
+    /**
+     * 商品备注
+     */
+    private String productRemarks;
+    /**
+     * 普通机构商品详情 1同资质机构商品详情,2用普通机构商品详情
+     */
+    private Integer productDetailChose;
+    /**
+     * 证书编号
+     * @return
+     */
+    public String qualificationNo;
+
+    /**
+     *产品名称
+     */
+    public String productName;
+    /**
+     *证书有效日期
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone = "GMT+8")
+    public Date qualificationTime;
+
+    /**
+     *证书有效链接
+     */
+    public String qualificationLink;
+
+    /**
+     * 能否退货  1 能 2不能
+     */
+    private Integer returnGoodsStutas;
+    /**
+     * 特殊商品退货须知提示  (取后台帮助中心id1040的数据)
+     */
+    private String  helpContent;
+    /**
+     * 关联标签库字符串
+     */
+    private String  relatedLabels;
+    /**
+     * 外部商城sku
+     */
+    private List<Sku> organizeSkus;
+}

+ 25 - 0
src/main/java/com/caimei365/commodity/service/ShopOrderService.java

@@ -0,0 +1,25 @@
+package com.caimei365.commodity.service;
+
+import com.caimei365.commodity.model.ResponseJson;
+import com.caimei365.commodity.model.vo.PaginationVo;
+import com.caimei365.commodity.model.vo.ProductShoplVo;
+
+import java.util.Map;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2023/9/28
+ */
+public interface ShopOrderService {
+    /**
+     * 供应商商品数据
+     * @param shopId
+     * @param name
+     * @param pageNum
+     * @param pageSize
+     * @return
+     */
+    ResponseJson<PaginationVo<ProductShoplVo>> getShopProductList(Integer shopId, String name, Integer pageNum, Integer pageSize);
+}

+ 164 - 0
src/main/java/com/caimei365/commodity/service/impl/ShopOrderServiceImpl.java

@@ -0,0 +1,164 @@
+package com.caimei365.commodity.service.impl;
+
+import com.caimei365.commodity.mapper.PriceMapper;
+import com.caimei365.commodity.mapper.ShopMapper;
+import com.caimei365.commodity.mapper.ShopOrderMapper;
+import com.caimei365.commodity.model.ResponseJson;
+import com.caimei365.commodity.model.dto.Sku;
+import com.caimei365.commodity.model.po.ProductImagePo;
+import com.caimei365.commodity.model.vo.*;
+import com.caimei365.commodity.service.ShopOrderService;
+import com.caimei365.commodity.utils.ImageUtils;
+import com.caimei365.commodity.utils.MathUtil;
+import com.github.pagehelper.PageHelper;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang.StringUtils;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.util.*;
+import java.util.stream.IntStream;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2023/9/28
+ */
+@Slf4j
+@Service
+public class ShopOrderServiceImpl implements ShopOrderService {
+    @Value("${caimei.imageDomain}")
+    private String domain;
+
+    @Resource private ShopOrderMapper shopOrderMapper;
+
+    @Resource private ShopMapper shopMapper;
+
+    @Resource private PriceMapper priceMapper;
+
+    /**
+     * 供应商商品数据
+     * @param shopId
+     * @param name
+     * @param pageNum
+     * @param pageSize
+     * @return
+     */
+    @Override
+    public ResponseJson<PaginationVo<ProductShoplVo>> getShopProductList(Integer shopId, String name, Integer pageNum, Integer pageSize) {
+        PageHelper.startPage(pageNum, pageSize);
+        List<ProductShoplVo> shopProductList = shopOrderMapper.getShopProductList(shopId, name);
+        // 处理上架商城, 版本只显示联合丽格的sku
+        List<String> organizeIdList = new ArrayList<>();
+        organizeIdList.add("4");
+        shopProductList.forEach( product -> {
+            // 主图
+            product.setMainImage(ImageUtils.getImageURL("product", product.getMainImage(), 0, domain));
+            // 商品图片
+            List<ProductImagePo> imageList = shopMapper.getProductImages(product.getProductId());
+            for (ProductImagePo image : imageList) {
+                String imageURL = ImageUtils.getImageURL("product", image.getImage(), 0, domain);
+                image.setImage(imageURL);
+            }
+            product.setImageList(imageList);
+            // 获取商品sku
+            List<Sku> skuList = shopOrderMapper.getSkuList(product.getProductId(), organizeIdList);
+            product.setSkus(skuList);
+            Sku sku = skuList.get(0);
+            product.setSkuId(sku.getSkuId());
+            product.setUnit(sku.getUnit());
+            product.setPrice(BigDecimal.valueOf(sku.getPrice()));
+            product.setOriginalPrice(BigDecimal.valueOf(sku.getOriginalPrice()));
+            product.setMinBuyNumber(sku.getMinBuyNumber());
+
+            skuList.forEach( s -> {
+                if (1 == s.getLadderPriceFlag()) {
+                    // sku的阶梯价
+                    LadderPriceVo lowerBuyNum = priceMapper.findOrganizeMaxLadderPrice(s.getSkuId(), 4);
+                    s.setMinBuyNumber(lowerBuyNum.getBuyNum());
+                    s.setPrice(lowerBuyNum.getBuyPrice());
+                    s.setStock(lowerBuyNum.getStock());
+                    s.setUnit(lowerBuyNum.getUnit());
+                    List<LadderPriceVo> ladderPrices = priceMapper.getLadderPricesOrganizeByProductId(s.getSkuId(), 4);
+                    TaxVo tax = priceMapper.getTaxByProductId(product.getProductId());
+                    if (!CollectionUtils.isEmpty(ladderPrices)) {
+                        setLadderPriceList(ladderPrices, tax);
+                    }
+                    s.setLadderPriceList(ladderPrices);
+                    product.setLadderPriceFlag(1);
+                    if (1 == skuList.size()) {
+                        //1.对于只有一个SKU的商品,各个商品列表直接显示机构价即可:若是阶梯价,则显示第一级阶梯的价格:
+                        product.setSkuId(ladderPrices.get(0).getSkuId());
+                        product.setPrice(BigDecimal.valueOf(ladderPrices.get(0).getBuyPrice()));
+                        product.setMinBuyNumber(ladderPrices.get(0).getBuyNum());
+                        product.setStock(ladderPrices.get(0).getStock());
+                        product.setUnit(ladderPrices.get(0).getUnit());
+                    } else {
+                        //2.对于有多个SKU的商品,各个商品列表显示所有SKU中最低的价格:
+                        // 若SKU中,全部都是阶梯价,则显示所有SKU中第一级阶梯的价格中的最低价,
+                        // 若SKU中,使用阶梯价和不使用阶梯价(只是用机构价》并存,则用机构价和第一级阶梯价比大小,展示最小的价格
+                        // skuid分组取第一阶梯中最便宜的
+                        ProductItemVo lowLadderPrice = priceMapper.findLowPriceOfOrganizeAll(product.getProductId(), 4);
+                        ProductItemVo lowAllPrice = priceMapper.findLowPriceOfOrganizePrice(product.getProductId(), 4);
+                        if (null != lowLadderPrice) {
+                            ProductItemVo productItemVo = lowLadderPrice.getPrice() > lowAllPrice.getPrice() ? lowAllPrice : lowLadderPrice;
+                            product.setPrice(BigDecimal.valueOf(productItemVo.getPrice()));
+                            product.setSkuId(productItemVo.getSkuId());
+                            product.setMinBuyNumber(productItemVo.getMinBuyNumber());
+                            product.setUnit(productItemVo.getUnit());
+                            product.setStock(productItemVo.getStock());
+                        } else {
+                            product.setPrice(BigDecimal.valueOf(lowAllPrice.getPrice()));
+                            product.setSkuId(lowAllPrice.getSkuId());
+                            product.setMinBuyNumber(lowAllPrice.getMinBuyNumber());
+                            product.setUnit(lowAllPrice.getUnit());
+                            product.setStock(lowAllPrice.getStock());
+                        }
+                    }
+                }
+            });
+            // 税费标志
+            boolean taxFlag = "0".equals(product.getIncludedTax()) && ("1".equals(product.getInvoiceType()) || "2".equals(product.getInvoiceType()));
+            if (taxFlag) {
+                BigDecimal thisTaxFee = MathUtil.div(MathUtil.mul(sku.getPrice(), product.getTaxRate()), 100, 2);
+                product.setPrice(MathUtil.add(product.getPrice(), thisTaxFee));
+                BigDecimal originalTaxFee = MathUtil.div(MathUtil.mul(sku.getOriginalPrice(), product.getTaxRate()), 100, 2);
+                product.setOriginalPrice(MathUtil.add(product.getOriginalPrice(), originalTaxFee));
+            }
+        });
+
+        PaginationVo<ProductShoplVo> page = new PaginationVo<>(shopProductList);
+        return ResponseJson.success(page);
+    }
+
+
+    /**
+     * 设置阶梯价展示数据
+     *
+     * @param ladderPrices List<LadderPriceVo>
+     * @param tax          TaxVo
+     */
+    public void setLadderPriceList(List<LadderPriceVo> ladderPrices, TaxVo tax) {
+        IntStream.range(0, ladderPrices.size()).forEach(i -> {
+            //税费标志
+            boolean taxFlag = 0 == tax.getIncludedTax() && 1 == tax.getInvoiceType() || 2 == tax.getInvoiceType();
+            //添加税费
+            if (taxFlag) {
+                BigDecimal taxFee = MathUtil.div(MathUtil.mul(ladderPrices.get(i).getBuyPrice(), tax.getTaxPoint()), 100, 2);
+                ladderPrices.get(i).setBuyPrice(MathUtil.add(ladderPrices.get(i).getBuyPrice(), taxFee).doubleValue());
+            }
+            if (i == ladderPrices.size() - 1) {
+                ladderPrices.get(i).setMaxNum(0);
+                ladderPrices.get(i).setNumRange("≥" + ladderPrices.get(i).getBuyNum());
+            } else {
+                ladderPrices.get(i).setMaxNum(ladderPrices.get(i + 1).getBuyNum());
+                String buyNumRangeShow = ladderPrices.get(i).getBuyNum() + "~" + (ladderPrices.get(i + 1).getBuyNum() - 1);
+                ladderPrices.get(i).setNumRange(buyNumRangeShow);
+            }
+        });
+    }
+}

+ 54 - 0
src/main/resources/mapper/PriceMapper.xml

@@ -117,6 +117,22 @@
           and delFlag = 0
         order by buynum asc
     </select>
+
+    <select id="getLadderPricesOrganizeByProductId" resultType="com.caimei365.commodity.model.vo.LadderPriceVo">
+        SELECT plp.skuId,
+               plp.productId,
+               plp.buyNum,
+               cs.stock,
+               plp.buyPrice,
+               cs.unit
+        FROM product_ladder_price plp
+                 LEFT JOIN cm_sku cs ON plp.skuId = cs.skuId
+        WHERE plp.skuId = #{skuId}
+          AND cs.organizeId = #{organizeId}
+          AND plp.userType = 3
+          AND plp.delFlag = 0
+        ORDER BY plp.buynum ASC
+    </select>
     <select id="findLowerLadderPrice" resultType="com.caimei365.commodity.model.vo.LadderPriceVo">
         select id,
                skuId,
@@ -149,6 +165,26 @@
         order by buyprice desc
         limit 1
     </select>
+
+    <select id="findOrganizeMaxLadderPrice" resultType="com.caimei365.commodity.model.vo.LadderPriceVo">
+        select plp.id,
+               plp.skuId,
+               plp.productId,
+               plp.ladderNum,
+               cs.unit,
+               cs.stock,
+               plp.buyNum,
+               plp.buyPrice
+        from product_ladder_price plp
+                 left join cm_sku cs on cs.skuId = plp.skuId
+        where plp.skuId = #{skuId}
+          and cs.organizeId = #{organizeId}
+          and plp.userType = 3
+          and plp.delFlag = 0
+        order by plp.buyprice desc
+        limit 1
+    </select>
+
     <select id="getRepurchasePrice" resultType="java.lang.Double">
         select r.currentPrice,
                p.productType
@@ -333,6 +369,15 @@
         order by plp.buyPrice asc
         limit 1
     </select>
+    <select id="findLowPriceOfOrganizeAll" resultType="com.caimei365.commodity.model.vo.ProductItemVo">
+        select plp.buyPrice as price, cs.unit as unit, plp.buyNum as minBuyNumber, cs.skuId as skuId, cs.stock
+        from product_ladder_price plp
+                 left join cm_sku cs on plp.skuId = cs.skuId
+        where plp.productId = #{productId} and cs.organizeId = #{organizeId}
+        GROUP BY plp.skuId
+        order by plp.buyPrice asc
+        limit 1
+    </select>
     <select id="findLowPriceOfPrice" resultType="com.caimei365.commodity.model.vo.ProductItemVo">
         SELECT price, unit, skuId, stock,
         ifnull(minBuyNumber, (SELECT buyNum FROM product_ladder_price WHERE skuId = cm_sku.skuId ORDER BY buyNum asc LIMIT 1)) AS minBuyNumber
@@ -341,6 +386,15 @@
         ORDER BY price ASC
         LIMIT 1
     </select>
+
+    <select id="findLowPriceOfOrganizePrice" resultType="com.caimei365.commodity.model.vo.ProductItemVo">
+        SELECT price, unit, skuId, stock,
+               ifnull(minBuyNumber, (SELECT buyNum FROM product_ladder_price WHERE skuId = cm_sku.skuId ORDER BY buyNum asc LIMIT 1)) AS minBuyNumber
+        FROM cm_sku
+        WHERE productId = #{productId} and organizeId = #{organizeId}
+        ORDER BY price ASC
+        LIMIT 1
+    </select>
     <select id="getVipSku" resultType="com.caimei365.commodity.model.dto.VipSkuPriceDto">
         select priceType,discountPrice,discount,productId,skuId
         from cm_svip_product_sku

+ 59 - 0
src/main/resources/mapper/ShopOrderMapper.xml

@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.caimei365.commodity.mapper.ShopOrderMapper">
+
+
+    <select id="getShopProductList" resultType="com.caimei365.commodity.model.vo.ProductShoplVo">
+        select distinct p.productID       as productId,
+               p.groundMall AS groundMall,
+               p.actStatus,
+               p.name,
+               p.aliasName,
+               p.mainImage       as mainImage,
+               p.productCode     as code,
+               p.priceFlag,
+               p.searchKey       as keyword,
+               p.step,
+               p.shopID          as shopId,
+               p.taxPoint        as taxRate,
+               p.includedTax,
+               p.invoiceType,
+               p.productCategory as productCategory,
+               copi.validFlag,
+               p.featuredFlag,
+               p.commodityType,
+               p.bigTypeID       as bigTypeId,
+               p.smallTypeID     as smallTypeId,
+               p.tinyTypeID      as tinyTypeId,
+               p.productType
+        from product p
+        left join cm_organize_product_info copi on copi.productId = p.productID AND organizeId != 0
+        where p.shopId = #{shopId} and copi.validFlag = 2 and p.groundMall NOT LIKE '0'
+        <if test="name != null and name != ''">
+            and p.name like concat('%',#{name},'%')
+        </if>
+    </select>
+
+    <select id="getSkuList" resultType="com.caimei365.commodity.model.dto.Sku">
+        select
+            skuId,
+            productId,
+            minBuyNumber,
+            ifnull(ladderPriceFlag, 0) as ladderPriceFlag,
+            price,
+            price as originalPrice,
+            unit,
+            stock,
+            organizePercent,
+            shopPercent,
+            cmPercent
+        from cm_sku
+        where productId = #{productId}
+          <if test="organizeIdList.size() > 0">
+            and organizeId in
+                <foreach collection="organizeIdList" item="organizeId" open="(" separator="," close=")">
+                    #{organizeId}
+                </foreach>
+          </if>
+    </select>
+</mapper>