Browse Source

小程序商品列表接口重构,增加排序、优化速度

liyuan 9 months ago
parent
commit
57e397d004

+ 32 - 0
blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/vo/WxAppGoodsImgVo.java

@@ -0,0 +1,32 @@
+package org.springblade.salesPart.vo;
+
+import lombok.Data;
+
+/**
+ * @author Rain
+ */
+@Data
+public class WxAppGoodsImgVo {
+
+
+	/**
+	 * 关联id
+	 */
+	private Long pid;
+
+	/**
+	 * 图片
+	 */
+	private String url;
+
+	/**
+	 * 优先级 1 、 2 、 3
+	 */
+	private Integer type;
+
+	/**
+	 * 花纹
+	 */
+	private String brandItem;
+
+}

+ 77 - 0
blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/vo/WxAppGoodsParamsVo.java

@@ -0,0 +1,77 @@
+package org.springblade.salesPart.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author Rain
+ */
+@Data
+public class WxAppGoodsParamsVo {
+
+
+	/**
+	 * 租户id
+	 */
+	private String tenantId;
+
+
+	/**
+	 * 销售公司id
+	 */
+	private String salesCompanyId;
+
+
+	/**
+	 * 品牌id
+	 */
+	private Long brandId;
+
+
+	/**
+	 * 用户品牌id集合
+	 */
+	private List<Long> userBrandIdList;
+
+	/**
+	 * 防爆(0否,1是)
+	 */
+	private Integer explosionProof;
+
+	/**
+	 * 原厂
+	 */
+	private String originalFactory;
+
+	/**
+	 * 自修补
+	 */
+	private String selfRecovery;
+
+	/**
+	 * 名称
+	 */
+	private String cname;
+
+	/**
+	 * 判断
+	 */
+	private Integer cnameStatus;
+
+	/**
+	 * 品牌名称
+	 */
+	private String brandName;
+
+	/**
+	 * 商品id集合
+	 */
+	private List<Long> goodsIds;
+
+	/**
+	 * 库存是否为0判断
+	 */
+	private Integer inventoryStatus;
+
+}

+ 6 - 0
blade-service/blade-sales-part/pom.xml

@@ -87,6 +87,12 @@
             <scope>compile</scope>
         </dependency>
 
+        <dependency>
+            <groupId>com.github.pagehelper</groupId>
+            <artifactId>pagehelper</artifactId>
+            <version>5.3.3</version>
+        </dependency>
+
 
     </dependencies>
 

+ 45 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/config/PageHelperConfig.java

@@ -0,0 +1,45 @@
+package org.springblade.salesPart.config;
+
+import com.baomidou.mybatisplus.annotation.DbType;
+import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
+import com.github.pagehelper.PageInterceptor;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import java.util.Properties;
+
+/**
+ * 手动分页插件
+ *
+ * @author Rain
+ */
+@Configuration
+public class PageHelperConfig {
+
+
+	/**
+	 * MybatisPlus分页插件
+	 */
+	@Bean
+	public MybatisPlusInterceptor mybatisPlusInterceptor() {
+		MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
+		mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
+		return mybatisPlusInterceptor;
+	}
+
+
+	/**
+	 * PageHelper分页插件
+	 */
+	@Bean
+	PageInterceptor pageInterceptor() {
+		PageInterceptor pageInterceptor = new PageInterceptor();
+		Properties properties = new Properties();
+		properties.setProperty("helperDialect", "mysql");
+		pageInterceptor.setProperties(properties);
+		return pageInterceptor;
+	}
+
+
+}

+ 71 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/enums/PriceSystem.java

@@ -0,0 +1,71 @@
+package org.springblade.salesPart.enums;
+
+import org.springblade.salesPart.shopping.entity.ShoppingMallDetail;
+
+/**
+ * @author Rain
+ */
+
+public enum PriceSystem {
+
+
+	/**
+	 * 售价1
+	 */
+	PRICE_ONE("售价1") {
+		@Override
+		public void setMallPrice(ShoppingMallDetail item) {
+			item.setMallPrice(item.getPriceOne());
+		}
+	},
+	/**
+	 * 售价2
+	 */
+	PRICE_TWO("售价2") {
+		@Override
+		public void setMallPrice(ShoppingMallDetail item) {
+			item.setMallPrice(item.getPriceTwo());
+		}
+	},
+	/**
+	 * 售价3
+	 */
+	PRICE_THREE("售价3") {
+		@Override
+		public void setMallPrice(ShoppingMallDetail item) {
+			item.setMallPrice(item.getPriceThree());
+		}
+	},
+	/**
+	 * 售价4
+	 */
+	PRICE_FOUR("售价4") {
+		@Override
+		public void setMallPrice(ShoppingMallDetail item) {
+			item.setMallPrice(item.getPriceFour());
+		}
+	};
+
+	private final String value;
+
+	PriceSystem(String value) {
+		this.value = value;
+	}
+
+	public String getValue() {
+		return value;
+	}
+
+	public abstract void setMallPrice(ShoppingMallDetail item);
+
+	// 根据字符串获取对应的枚举值
+	public static PriceSystem fromValue(String value) {
+		for (PriceSystem priceSystem : values()) {
+			if (priceSystem.getValue().equals(value)) {
+				return priceSystem;
+			}
+		}
+		return PriceSystem.PRICE_ONE;
+	}
+
+}

+ 1 - 275
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/shopping/controller/ShoppingMallDetailController.java

@@ -161,281 +161,7 @@ public class ShoppingMallDetailController extends BladeController {
 	@ApiOperationSupport(order = 12)
 	@ApiOperation(value = "小程序配件批发产品上架", notes = "传入productLaunch")
 	public R<IPage<ShoppingMallDetail>> appList(PjProductLaunch productLaunch, Query query) {
-		PjCorpsDesc corpsDesc = null;
-		//根据当前登录人获得客户
-		PjCorpsAttn corpsAttn = corpsAttnService.getAttn(AuthUtil.getUserId());
-		if (ObjectUtil.isNotEmpty(corpsAttn)) {
-			corpsDesc = corpsDescService.getCorpsDesc(corpsAttn.getPid());
-			if (ObjectUtil.isEmpty(corpsDesc)) {
-				throw new RuntimeException("未查到用户信息");
-			}
-		} else {
-			throw new RuntimeException("未查到用户信息");
-		}
-		LambdaQueryWrapper<ShoppingMallDetail> lambdaQueryWrapper = new LambdaQueryWrapper<>();
-		lambdaQueryWrapper.select(ShoppingMallDetail::getGoodsCode);
-		lambdaQueryWrapper.eq(ShoppingMallDetail::getTenantId, AuthUtil.getTenantId())
-			.eq(ShoppingMallDetail::getIsDeleted, 0)
-			.eq(ShoppingMallDetail::getSalesCompanyId, AuthUtil.getDeptId())//公司
-			.eq(ObjectUtils.isNotEmpty(productLaunch.getBrandId()), ShoppingMallDetail::getBrandId, productLaunch.getBrandId());//品牌
-		if (ObjectUtils.isNotNull(corpsDesc.getBrandId())) {
-			List<PjBrandDesc> pjBrandDescList = brandDescService.list(new LambdaQueryWrapper<PjBrandDesc>()
-				.eq(PjBrandDesc::getTenantId, AuthUtil.getTenantId())
-				.eq(PjBrandDesc::getIsDeleted, 0)
-				.eq(PjBrandDesc::getType, "PP")
-				.eq(PjBrandDesc::getEnableOrNot, 1)
-				.apply("find_in_set(id,'" + corpsDesc.getBrandId() + "')"));
-			if (!pjBrandDescList.isEmpty()) {
-				lambdaQueryWrapper.in(ShoppingMallDetail::getBrandId, pjBrandDescList.stream().map(PjBrandDesc::getId).collect(Collectors.toList()));
-			}
-		}
-		if (ObjectUtils.isNotEmpty(productLaunch.getExplosionProof())
-			|| ObjectUtils.isNotEmpty(productLaunch.getOriginalFactory())
-			|| ObjectUtils.isNotEmpty(productLaunch.getSelfRecovery())) {
-			lambdaQueryWrapper.and(i -> i.eq(ObjectUtils.isNotEmpty(productLaunch.getExplosionProof()), ShoppingMallDetail::getExplosionProof, productLaunch.getExplosionProof())//防爆
-				.or().eq(ObjectUtils.isNotEmpty(productLaunch.getOriginalFactory()), ShoppingMallDetail::getOriginalFactory, productLaunch.getOriginalFactory())//原厂
-				.or().eq(ObjectUtils.isNotEmpty(productLaunch.getSelfRecovery()), ShoppingMallDetail::getSelfRecovery, productLaunch.getSelfRecovery())//自修补
-			);
-		}
-		if (ObjectUtil.isNotEmpty(productLaunch.getCname())) {
-			if (productLaunch.getCname().contains(",")) {
-				String brandName = productLaunch.getCname().substring(0, productLaunch.getCname().indexOf(","));
-				String cname = productLaunch.getCname().substring(productLaunch.getCname().indexOf(",") + 1);
-				lambdaQueryWrapper.and(i -> i.like(ShoppingMallDetail::getGoodsName, cname)
-					.or().like(ShoppingMallDetail::getCnameInt, cname)
-					.or().like(ShoppingMallDetail::getBrandItem, cname)
-					.or().like(ShoppingMallDetail::getSpecificationAndModel, cname)
-				);
-				lambdaQueryWrapper.like(ShoppingMallDetail::getBrandName, brandName);
-			} else {
-				String[] chineseWords = productLaunch.getCname().split("[^一-龥]");
-				if (chineseWords.length > 0) {
-					String cname = productLaunch.getCname().substring(chineseWords[0].length());
-					if (ObjectUtils.isNotNull(cname)) {
-						lambdaQueryWrapper.and(i -> i.like(ShoppingMallDetail::getGoodsName, cname)
-							.or().like(ShoppingMallDetail::getCnameInt, cname)
-							.or().like(ShoppingMallDetail::getBrandItem, cname)
-							.or().like(ShoppingMallDetail::getSpecificationAndModel, cname)
-						);
-						lambdaQueryWrapper.like(ShoppingMallDetail::getBrandName, chineseWords[0]);
-					} else {
-						lambdaQueryWrapper.and(i -> i.like(ShoppingMallDetail::getGoodsName, productLaunch.getCname())
-							.or().like(ShoppingMallDetail::getCnameInt, productLaunch.getCname())
-							.or().like(ShoppingMallDetail::getBrandItem, productLaunch.getCname())
-							.or().like(ShoppingMallDetail::getSpecificationAndModel, productLaunch.getCname())
-							.or().like(ShoppingMallDetail::getBrandName, chineseWords[0])
-						);
-					}
-				} else {
-					lambdaQueryWrapper.and(i -> i.like(ShoppingMallDetail::getGoodsName, productLaunch.getCname())
-						.or().like(ShoppingMallDetail::getCnameInt, productLaunch.getCname())
-						.or().like(ShoppingMallDetail::getBrandItem, productLaunch.getCname())
-						.or().like(ShoppingMallDetail::getSpecificationAndModel, productLaunch.getCname())
-					);
-				}
-			}
-		}
-		List<PjStockDesc> stockDescList = new ArrayList<>();
-		String status = iSysClient.getParamService("whether.branch.management");
-		if (ObjectUtils.isNotNull(status) && "1".equals(status)) {
-			if (ObjectUtils.isNotNull(corpsDesc.getDeliveryWarehouseId())) {
-				stockDescList = stockDescMapper.selectList(new LambdaQueryWrapper<PjStockDesc>()
-					.eq(PjStockDesc::getTenantId, AuthUtil.getTenantId())
-					.eq(PjStockDesc::getIsDeleted, 0)
-					.eq(PjStockDesc::getStorageId, corpsDesc.getDeliveryWarehouseId()));
-				if (!stockDescList.isEmpty()) {
-					List<Long> goodsId = stockDescList.stream().map(PjStockDesc::getGoodsId).collect(Collectors.toList());
-					lambdaQueryWrapper.in(ShoppingMallDetail::getGoodsId, goodsId);
-				}
-			}
-		}
-		String status1 = iSysClient.getParamService("whether.zero.inventory");
-		if (ObjectUtils.isNull(status1) || "0".equals(status1)) {
-			lambdaQueryWrapper.gt(ShoppingMallDetail::getInventory, 0);
-		}
-		lambdaQueryWrapper.orderByAsc(ShoppingMallDetail::getBillType);
-		lambdaQueryWrapper.orderByDesc(ShoppingMallDetail::getInventory);
-		lambdaQueryWrapper.orderByAsc(ShoppingMallDetail::getCnameInt);
-		lambdaQueryWrapper.groupBy(ShoppingMallDetail::getGoodsCode);
-		IPage<ShoppingMallDetail> pages = shoppingMallDetailService.page(Condition.getPage(query), lambdaQueryWrapper);
-
-		if (CollectionUtils.isNotEmpty(pages.getRecords())) {
-			List<String> codeList = pages.getRecords().stream().map(ShoppingMallDetail::getGoodsCode).filter(Objects::nonNull).collect(Collectors.toList());
-			List<ShoppingMallDetail> shoppingMallDetailList = new ArrayList<>();
-			List<ShoppingMallDetail> shoppingMallDetailShareList = new ArrayList<>();
-			if (!codeList.isEmpty()) {
-				shoppingMallDetailList = shoppingMallDetailService.list(new LambdaQueryWrapper<ShoppingMallDetail>()
-					.eq(ShoppingMallDetail::getTenantId, AuthUtil.getTenantId())
-					.eq(ShoppingMallDetail::getIsDeleted, 0)
-					.eq(ShoppingMallDetail::getBillType, 0)
-					.in(ShoppingMallDetail::getGoodsCode, codeList));
-				shoppingMallDetailShareList = shoppingMallDetailService.list(new LambdaQueryWrapper<ShoppingMallDetail>()
-					.eq(ShoppingMallDetail::getTenantId, AuthUtil.getTenantId())
-					.eq(ShoppingMallDetail::getIsDeleted, 0)
-					.eq(ShoppingMallDetail::getBillType, 1)
-					.in(ShoppingMallDetail::getGoodsCode, codeList));
-			}
-			List<ShoppingMallDetail> mallDetails = new ArrayList<>();
-			for (ShoppingMallDetail item : pages.getRecords()) {
-				if (!shoppingMallDetailList.isEmpty()) {
-					ShoppingMallDetail shoppingMallDetail = shoppingMallDetailList.stream()
-						.filter(e -> e.getGoodsCode().equals(item.getGoodsCode())).findFirst().orElse(null);
-					if (shoppingMallDetail != null) {
-						BeanUtil.copyProperties(shoppingMallDetail, item);
-						item.setInventoryLocal(item.getInventory());
-						if (!shoppingMallDetailShareList.isEmpty()) {
-							BigDecimal inventory = shoppingMallDetailShareList.stream().filter(e -> e.getGoodsCode().equals(item.getGoodsCode()))
-								.map(ShoppingMallDetail::getInventory).reduce(BigDecimal.ZERO, BigDecimal::add);
-							item.setInventory(item.getInventory().add(inventory));
-							item.setInventoryShare(inventory);
-						}
-					} else {
-						if (!shoppingMallDetailShareList.isEmpty()) {
-							ShoppingMallDetail shoppingMallShareDetail = shoppingMallDetailShareList.stream()
-								.filter(e -> e.getGoodsCode().equals(item.getGoodsCode())).findFirst().orElse(null);
-							if (shoppingMallShareDetail != null) {
-								BeanUtil.copyProperties(shoppingMallShareDetail, item);
-								item.setInventoryShare(item.getInventory());
-								item.setInventoryLocal(new BigDecimal("0"));
-							}
-						}
-					}
-				} else {
-					if (!shoppingMallDetailShareList.isEmpty()) {
-						ShoppingMallDetail shoppingMallShareDetail = shoppingMallDetailShareList.stream()
-							.filter(e -> e.getGoodsCode().equals(item.getGoodsCode())).findFirst().orElse(null);
-						if (shoppingMallShareDetail != null) {
-							BeanUtil.copyProperties(shoppingMallShareDetail, item);
-							item.setInventoryShare(item.getInventory());
-							item.setInventoryLocal(new BigDecimal("0"));
-						}
-					}
-				}
-				item.setCname(item.getGoodsName());
-				if (StringUtils.isNotBlank(corpsDesc.getPriceSystem())) {
-					if ("售价1".equals(corpsDesc.getPriceSystem())) {
-						item.setMallPrice(item.getPriceOne());
-					} else if ("售价2".equals(corpsDesc.getPriceSystem())) {
-						item.setMallPrice(item.getPriceTwo());
-					} else if ("售价3".equals(corpsDesc.getPriceSystem())) {
-						item.setMallPrice(item.getPriceThree());
-					} else if ("售价4".equals(corpsDesc.getPriceSystem())) {
-						item.setMallPrice(item.getPriceFour());
-					} else {
-						item.setMallPrice(item.getPriceOne());
-					}
-				} else {
-					item.setMallPrice(item.getPriceOne());
-				}
-				mallDetails.add(item);
-			}
-			List<PjProductLaunchFiles> pjProductLaunchFilesList = new ArrayList<>();
-			List<PjBrandFiles> pjBrandFilesList = new ArrayList<>();
-			List<BrandFigure> brandFigureList = new ArrayList<>();
-			List<Long> ids = shoppingMallDetailList.stream().map(ShoppingMallDetail::getId).collect(Collectors.toList());
-			List<Long> brandIds = pages.getRecords().stream().map(ShoppingMallDetail::getBrandId).collect(Collectors.toList());
-			if (!ids.isEmpty()) {
-				pjProductLaunchFilesList = productLaunchFilesService.list(new QueryWrapper<PjProductLaunchFiles>()
-					.in("pid", ids).eq("is_deleted", 0));
-			}
-			if (!brandIds.isEmpty()) {
-				pjBrandFilesList = brandFilesService.list(new QueryWrapper<PjBrandFiles>()
-					.in("pid", brandIds).eq("is_deleted", 0));
-				brandFigureList = brandFigureService.list(new QueryWrapper<BrandFigure>()
-					.in("pid", brandIds).eq("is_deleted", 0));
-			}
-			for (ShoppingMallDetail item : mallDetails) {
-				if (ObjectUtils.isNotNull(item.getUrl())){
-					List<PjProductLaunchFiles> filesList = new ArrayList<>();
-					PjProductLaunchFiles files = new PjProductLaunchFiles();
-					files.setUrl(item.getUrl());
-					files.setVersion("0");
-					filesList.add(files);
-					item.setFilesList(filesList);
-				}else{
-					if (!pjProductLaunchFilesList.isEmpty()) {
-						List<PjProductLaunchFiles> list = pjProductLaunchFilesList.stream().filter(e -> e.getPid().equals(item.getId())).collect(Collectors.toList());
-						if (!list.isEmpty()) {
-							item.setFilesList(list);
-						} else {
-							if (ObjectUtils.isNotNull(item.getBrandId())) {
-								if (!brandFigureList.isEmpty()) {
-									List<BrandFigure> brandFigureList1 = brandFigureList.stream()
-										.filter(e -> e.getPid().equals(item.getBrandId()) && e.getFigure().equals(item.getBrandItem()))
-										.collect(Collectors.toList());
-									if (!brandFigureList1.isEmpty()) {
-										item.setFilesList(BeanUtil.copy(brandFigureList1, PjProductLaunchFiles.class));
-									} else {
-										if (!pjBrandFilesList.isEmpty()) {
-											List<PjBrandFiles> pjBarndFilesList1 = pjBrandFilesList.stream()
-												.filter(e -> e.getPid().equals(item.getBrandId()))
-												.collect(Collectors.toList());
-											if (!pjBarndFilesList1.isEmpty()) {
-												item.setFilesList(BeanUtil.copy(pjBarndFilesList1, PjProductLaunchFiles.class));
-											}
-										}
-									}
-								} else {
-									if (!pjBrandFilesList.isEmpty()) {
-										List<PjBrandFiles> pjBarndFilesList1 = pjBrandFilesList.stream()
-											.filter(e -> e.getPid().equals(item.getBrandId()))
-											.collect(Collectors.toList());
-										if (!pjBarndFilesList1.isEmpty()) {
-											item.setFilesList(BeanUtil.copy(pjBarndFilesList1, PjProductLaunchFiles.class));
-										}
-									} else {
-										List<PjProductLaunchFiles> filesList = new ArrayList<>();
-										PjProductLaunchFiles files = new PjProductLaunchFiles();
-										files.setUrl(item.getUrl());
-										files.setVersion("0");
-										filesList.add(files);
-										item.setFilesList(filesList);
-									}
-								}
-							}
-						}
-					} else {
-						if (ObjectUtils.isNotNull(item.getBrandId())) {
-							if (!brandFigureList.isEmpty()) {
-								List<BrandFigure> brandFigureList1 = brandFigureList.stream()
-									.filter(e -> e.getPid().equals(item.getBrandId()) && e.getFigure().equals(item.getBrandItem()))
-									.collect(Collectors.toList());
-								if (!brandFigureList1.isEmpty()) {
-									item.setFilesList(BeanUtil.copy(brandFigureList1, PjProductLaunchFiles.class));
-								} else {
-									if (!pjBrandFilesList.isEmpty()) {
-										List<PjBrandFiles> pjBarndFilesList1 = pjBrandFilesList.stream()
-											.filter(e -> e.getPid().equals(item.getBrandId()))
-											.collect(Collectors.toList());
-										if (!pjBarndFilesList1.isEmpty()) {
-											item.setFilesList(BeanUtil.copy(pjBarndFilesList1, PjProductLaunchFiles.class));
-										}
-									}
-								}
-							} else {
-								if (!pjBrandFilesList.isEmpty()) {
-									List<PjBrandFiles> pjBarndFilesList1 = pjBrandFilesList.stream()
-										.filter(e -> e.getPid().equals(item.getBrandId()))
-										.collect(Collectors.toList());
-									if (!pjBarndFilesList1.isEmpty()) {
-										item.setFilesList(BeanUtil.copy(pjBarndFilesList1, PjProductLaunchFiles.class));
-									}
-								}else {
-									List<PjProductLaunchFiles> filesList = new ArrayList<>();
-									PjProductLaunchFiles files = new PjProductLaunchFiles();
-									files.setUrl(item.getUrl());
-									files.setVersion("0");
-									filesList.add(files);
-									item.setFilesList(filesList);
-								}
-							}
-						}
-					}
-				}
-			}
-			pages.setRecords(mallDetails);
-		}
-		return R.data(pages);
+		return  shoppingMallDetailService.selectWxAppGoodsPageList(productLaunch, query);
 	}
 
 	/**

+ 21 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/shopping/mapper/ShoppingMallDetailMapper.java

@@ -16,10 +16,14 @@
  */
 package org.springblade.salesPart.shopping.mapper;
 
+import org.apache.ibatis.annotations.Param;
 import org.springblade.salesPart.shopping.entity.ShoppingMallDetail;
 import org.springblade.salesPart.shopping.vo.ShoppingMallDetailVO;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.salesPart.vo.WxAppGoodsImgVo;
+import org.springblade.salesPart.vo.WxAppGoodsParamsVo;
+
 import java.util.List;
 
 /**
@@ -39,4 +43,21 @@ public interface ShoppingMallDetailMapper extends BaseMapper<ShoppingMallDetail>
 	 */
 	List<ShoppingMallDetailVO> selectShoppingMallDetailPage(IPage page, ShoppingMallDetailVO shoppingMallDetail);
 
+
+	/**
+	 * 查询小程序商品列表接口
+	 *
+	 * @param wxAppGoodsParamsVo 查询条件
+	 * @return 结果
+	 */
+    List<ShoppingMallDetail> selectWxAppGoodsPageList(WxAppGoodsParamsVo wxAppGoodsParamsVo);
+
+	/**
+	 * 查询产品的所有图片
+	 *
+	 * @param ids 产品id
+	 * @param brandIds 品牌id
+	 * @return 结果
+	 */
+	List<WxAppGoodsImgVo> selectWxAppGoodsImgVoList(@Param("ids") List<Long> ids, @Param("brandIds") List<Long> brandIds);
 }

+ 124 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/shopping/mapper/ShoppingMallDetailMapper.xml

@@ -1,5 +1,6 @@
 <?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">
+<!--suppress ALL -->
 <mapper namespace="org.springblade.salesPart.shopping.mapper.ShoppingMallDetailMapper">
 
     <!-- 通用查询映射结果 -->
@@ -35,5 +36,128 @@
     <select id="selectShoppingMallDetailPage" resultMap="shoppingMallDetailResultMap">
         select * from pjpf_shopping_mall_detail where is_deleted = 0
     </select>
+    <select id="selectWxAppGoodsPageList" resultType="org.springblade.salesPart.shopping.entity.ShoppingMallDetail"
+            parameterType="org.springblade.salesPart.vo.WxAppGoodsParamsVo">
+        SELECT *,
+        (inventoryLocal + inventoryShare) AS inventory,
+        (
+        CASE WHEN billType = 0 AND inventoryLocal > 0 THEN
+        9
+        WHEN billType = 0 AND inventoryShare > 0 THEN
+        8
+        WHEN billType = 1 AND inventoryLocal > 0 THEN
+        7
+        WHEN billType = 1 AND inventoryShare > 0 THEN
+        6
+        ELSE
+        5
+        END
+        ) AS sort
+        FROM (SELECT id, goods_code as goodsCode,
+        goods_name as cname,
+        bill_type as billType,
+        brand_id as brandId,
+        price_one as priceOne,
+        price_two as priceTwo,
+        price_three as priceThree,
+        price_four as priceFour,
+        fpd.inventory AS inventoryLocal,
+        (SELECT IFNULL(SUM(smd.inventory), 0.00) allInventory
+        FROM pjpf_shopping_mall_detail smd
+        WHERE smd.goods_code = fpd.goods_code
+        AND smd.id != fpd.id AND smd.tenant_id = '883868' AND smd.is_deleted = 0) AS inventoryShare,
+        COUNT(goods_code) AS gc FROM
+        pjpf_shopping_mall_detail fpd
+        WHERE
+        fpd.tenant_id = #{tenantId}
+        AND fpd.is_deleted = 0
+        AND fpd.sales_company_id = #{salesCompanyId}
+        <if test="brandId != null">
+            and fpd.brand_id = #{brandId}
+        </if>
+        <if test="brandId == null and userBrandIdList != null and userBrandIdList.size > 0">
+            and fpd.brand_id in
+            <foreach collection="userBrandIdList" item="userBrandId" open="(" close=")" separator=",">
+                #{userBrandId}
+            </foreach>
+        </if>
+        <if test="explosionProof != null">
+            and fpd.explosion_proof = #{explosionProof}
+        </if>
+        <if test="originalFactory != null and originalFactory != ''">
+            and fpd.original_factory = #{originalFactory}
+        </if>
+        <if test="selfRecovery != null  and selfRecovery != ''">
+            and fpd.self_recovery = #{selfRecovery}
+        </if>
+        <if test="cnameStatus == 1">
+            and (fpd.goods_name like concat('%', #{cname}, '%') or fpd.cname_int like concat('%', #{cname}, '%')
+            or fpd.brand_item like concat('%', #{cname}, '%') or fpd.specification_and_model like concat('%', #{cname}, '%'))
+            and fpd.brand_name like concat('%', #{brandName}, '%')
+        </if>
+        <if test="cnameStatus == 2">
+            and (fpd.goods_name like concat('%', #{cname}, '%') or fpd.cname_int like concat('%', #{cname}, '%')
+            or fpd.brand_item like concat('%', #{cname}, '%') or fpd.specification_and_model like concat('%', #{cname}, '%')
+            <if test="brandName != null  and brandName != ''">
+                or fpd.brand_name like concat('%', #{brandName}, '%')
+            </if>
+            )
+        </if>
+        <if test="cnameStatus == 3">
+            and (fpd.goods_name like concat('%', #{cname}, '%') or fpd.cname_int like concat('%', #{cname}, '%'))
+        </if>
+        <if test="goodsIds != null and goodsIds.size > 0">
+        and fpd.goods_id in('%', #{cname}, '%')
+            or fpd.brand_item like concat('%', #{cname}, '%') or fpd.specification_and_mo
+            <foreach collection="goodsIds" item="goodsId" open="(" close=")" separator=",">
+                #{goodsId}
+            </foreach>
+        </if>
+        <if test="inventoryStatus != null">
+            and inventory > #{inventoryStatus}
+        </if>
+        GROUP BY
+        goods_code
+        ) AS allGoods
+        ORDER BY
+        sort DESC, inventoryLocal desc
+
+    </select>
+    <select id="selectWxAppGoodsImgVoList" resultType="org.springblade.salesPart.vo.WxAppGoodsImgVo">
+        SELECT pid,
+               url,
+               1    AS type,
+        '' AS brandItem
+        FROM pjpf_product_launch_files
+        WHERE is_deleted = 0 and pid IN
+        <foreach collection="ids" item="id" open="(" close=")" separator=",">
+            #{id}
+        </foreach>
+        <if test="brandIds != null and brandIds.size > 0">
+            UNION ALL
+            SELECT pid,
+            url,
+            2      AS type,
+            figure AS brandItem
+            FROM pjpf_brand_figure
+            WHERE is_deleted = 0
+            AND pid IN
+            <foreach collection="brandIds" item="brandId" open="(" close=")" separator=",">
+                #{brandId}
+            </foreach>
+            UNION ALL
+            SELECT pid,
+            url,
+            3    AS type,
+            '' AS brandItem
+            FROM pjpf_brand_files
+            WHERE is_deleted = 0
+            AND pid IN
+            <foreach collection="brandIds" item="brandId" open="(" close=")" separator=",">
+                #{brandId}
+            </foreach>
+        </if>
+
+    </select>
 
 </mapper>

+ 10 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/shopping/service/IShoppingMallDetailService.java

@@ -16,6 +16,8 @@
  */
 package org.springblade.salesPart.shopping.service;
 
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tool.api.R;
 import org.springblade.salesPart.entity.PjProductLaunch;
 import org.springblade.salesPart.shopping.entity.ShoppingMallDetail;
 import org.springblade.salesPart.shopping.vo.ShoppingMallDetailVO;
@@ -42,4 +44,12 @@ public interface IShoppingMallDetailService extends IService<ShoppingMallDetail>
 	IPage<ShoppingMallDetailVO> selectShoppingMallDetailPage(IPage<ShoppingMallDetailVO> page, ShoppingMallDetailVO shoppingMallDetail);
 
     Map<String, Object> getAppMessageById(PjProductLaunch productLaunch);
+
+	/**
+	 * 查询小程序商品列表接口
+	 * @param productLaunch 查询条件
+	 * @param query 分页
+	 * @return 结果
+	 */
+	R<IPage<ShoppingMallDetail>> selectWxAppGoodsPageList(PjProductLaunch productLaunch, Query query);
 }

+ 121 - 4
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/shopping/service/impl/ShoppingMallDetailServiceImpl.java

@@ -20,30 +20,39 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
 import lombok.AllArgsConstructor;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.secure.BladeUser;
 import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.BeanUtil;
 import org.springblade.core.tool.utils.ObjectUtil;
+import org.springblade.salesPart.brand.mapper.BrandDescMapper;
 import org.springblade.salesPart.brand.service.IBrandFigureService;
 import org.springblade.salesPart.brand.service.IBrandFilesService;
 import org.springblade.salesPart.corps.service.ICorpsAttnService;
 import org.springblade.salesPart.corps.service.ICorpsDescService;
 import org.springblade.salesPart.entity.*;
+import org.springblade.salesPart.enums.PriceSystem;
 import org.springblade.salesPart.productLaunch.service.IProductLaunchFilesService;
 import org.springblade.salesPart.shopping.entity.ShoppingMallDetail;
 import org.springblade.salesPart.shopping.mapper.ShoppingMallDetailMapper;
 import org.springblade.salesPart.shopping.service.IShoppingMallDetailService;
 import org.springblade.salesPart.shopping.vo.ShoppingMallDetailVO;
 import org.springblade.salesPart.stock.mapper.StockDescMapper;
+import org.springblade.salesPart.vo.WxAppGoodsImgVo;
+import org.springblade.salesPart.vo.WxAppGoodsParamsVo;
 import org.springblade.system.feign.ISysClient;
 import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+import org.springframework.util.StringUtils;
 
 import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -64,6 +73,8 @@ public class ShoppingMallDetailServiceImpl extends ServiceImpl<ShoppingMallDetai
 	private final IBrandFilesService brandFilesService;
 	private final IBrandFigureService brandFigureService;
 	private final StockDescMapper stockDescMapper;
+	private final BrandDescMapper brandDescMapper;
+	private final ShoppingMallDetailMapper shoppingMallDetailMapper;
 
 	@Override
 	public IPage<ShoppingMallDetailVO> selectShoppingMallDetailPage(IPage<ShoppingMallDetailVO> page, ShoppingMallDetailVO shoppingMallDetail) {
@@ -228,4 +239,110 @@ public class ShoppingMallDetailServiceImpl extends ServiceImpl<ShoppingMallDetai
 		return map;
 	}
 
+	@Override
+	public R<IPage<ShoppingMallDetail>> selectWxAppGoodsPageList(PjProductLaunch productLaunch, Query query) {
+		BladeUser bladeUser = AuthUtil.getUser();
+		PjCorpsAttn corpsAttn = corpsAttnService.getAttn(bladeUser.getUserId());
+		if (ObjectUtil.isEmpty(corpsAttn)) {
+			throw new RuntimeException("未查到用户信息");
+		}
+		PjCorpsDesc corpsDesc = corpsDescService.getCorpsDesc(corpsAttn.getPid());
+		if (ObjectUtil.isEmpty(corpsDesc)) {
+			throw new RuntimeException("未查到用户信息");
+		}
+		WxAppGoodsParamsVo wxAppGoodsParamsVo = new WxAppGoodsParamsVo();
+		wxAppGoodsParamsVo.setTenantId(bladeUser.getTenantId());
+		wxAppGoodsParamsVo.setSalesCompanyId(bladeUser.getDeptId());
+		wxAppGoodsParamsVo.setBrandId(productLaunch.getBrandId());
+		brandIf:if (ObjectUtils.isNull(productLaunch.getBrandId())) {
+			// 如果
+			List<PjBrandDesc> pjBrandDescList = brandDescMapper.selectList(new LambdaQueryWrapper<PjBrandDesc>()
+				.eq(PjBrandDesc::getTenantId, AuthUtil.getTenantId())
+				.eq(PjBrandDesc::getIsDeleted, 0)
+				.eq(PjBrandDesc::getType, "PP")
+				.eq(PjBrandDesc::getEnableOrNot, 1)
+				.apply("find_in_set(id,'" + corpsDesc.getBrandId() + "')"));
+			if (pjBrandDescList.isEmpty()) {
+				break brandIf;
+			}
+			wxAppGoodsParamsVo.setUserBrandIdList(pjBrandDescList.stream().map(PjBrandDesc::getId).distinct().collect(Collectors.toList()));
+		}
+		wxAppGoodsParamsVo.setExplosionProof(productLaunch.getExplosionProof());
+		wxAppGoodsParamsVo.setOriginalFactory(productLaunch.getOriginalFactory());
+		wxAppGoodsParamsVo.setSelfRecovery(productLaunch.getSelfRecovery());
+		cNameIf:if (ObjectUtil.isNotEmpty(productLaunch.getCname())) {
+			if (productLaunch.getCname().contains(",")) {
+				int index = productLaunch.getCname().indexOf(",");
+				String brandName = productLaunch.getCname().substring(0, index);
+				String cname = productLaunch.getCname().substring(index + 1);
+				wxAppGoodsParamsVo.setCname(cname);
+				wxAppGoodsParamsVo.setBrandName(brandName);
+				wxAppGoodsParamsVo.setCnameStatus(1);
+				break cNameIf;
+			}
+			String[] chineseWords = productLaunch.getCname().split("[^一-龥]");
+			if (chineseWords.length > 0) {
+				String cname = productLaunch.getCname().substring(chineseWords[0].length());
+				wxAppGoodsParamsVo.setCname(ObjectUtils.isNotNull(cname) ? cname : productLaunch.getCname());
+				wxAppGoodsParamsVo.setBrandName(ObjectUtils.isNull(cname) ? chineseWords[0]: null);
+				wxAppGoodsParamsVo.setCnameStatus(ObjectUtils.isNotNull(cname) ? 1 : 2);
+				break cNameIf;
+			}
+			wxAppGoodsParamsVo.setCname(productLaunch.getCname());
+			wxAppGoodsParamsVo.setCnameStatus(3);
+		}
+		String status = iSysClient.getParamService("whether.branch.management");
+		managementIf: if ("1".equals(status) && ObjectUtils.isNotNull(corpsDesc.getDeliveryWarehouseId())) {
+			List<PjStockDesc> stockDescList = stockDescMapper.selectList(new LambdaQueryWrapper<PjStockDesc>()
+				.eq(PjStockDesc::getTenantId, bladeUser.getTenantId())
+				.eq(PjStockDesc::getIsDeleted, 0)
+				.eq(PjStockDesc::getStorageId, corpsDesc.getDeliveryWarehouseId()));
+			if (stockDescList.isEmpty()) {
+				break managementIf;
+			}
+			wxAppGoodsParamsVo.setGoodsIds(stockDescList.stream().map(PjStockDesc::getGoodsId).collect(Collectors.toList()));
+		}
+		String inventoryStatus = iSysClient.getParamService("whether.zero.inventory");
+		if (ObjectUtils.isNull(inventoryStatus) || "0".equals(inventoryStatus)) {
+			wxAppGoodsParamsVo.setInventoryStatus(0);
+		}
+		PageHelper.startPage(query.getCurrent(), query.getSize());
+		List<ShoppingMallDetail> shoppingMallDetailList = shoppingMallDetailMapper.selectWxAppGoodsPageList(wxAppGoodsParamsVo);
+		if (!CollectionUtils.isEmpty(shoppingMallDetailList)) {
+			List<Long> ids = shoppingMallDetailList.stream().map(ShoppingMallDetail::getId).collect(Collectors.toList());
+			List<Long> brandIds = shoppingMallDetailList.stream().map(ShoppingMallDetail::getBrandId).distinct().collect(Collectors.toList());
+			// 查询商品的所有图片并根据匹配度与优先级显示
+			List<WxAppGoodsImgVo> wxAppGoodsImgVoList = shoppingMallDetailMapper.selectWxAppGoodsImgVoList(ids, brandIds);
+			for (ShoppingMallDetail item : shoppingMallDetailList) {
+				PriceSystem priceSystem = PriceSystem.fromValue(corpsDesc.getPriceSystem());
+				priceSystem.setMallPrice(item);
+				if (1 == item.getBillType()) {
+					// 异地仓特殊处理,因在sql查询时将异地仓的库存放到了本地仓的库存中,所以这里进行特殊处理。如果后续异地仓也有小时达库存的话这里就会存在问题,需要修改sql
+					item.setInventoryShare(item.getInventoryLocal());
+					item.setInventoryLocal(BigDecimal.ZERO);
+				}
+				if (StringUtils.hasText(item.getUrl())) {
+					continue;
+				}
+				WxAppGoodsImgVo wxAppGoodsImgVo = wxAppGoodsImgVoList.stream().filter(wxImg ->
+					1 == wxImg.getType() && wxImg.getPid().equals(item.getId()) ||
+						2 == wxImg.getType() && wxImg.getPid().equals(item.getBrandId()) && StringUtils.hasText(wxImg.getBrandItem()) && wxImg.getBrandItem().equals(item.getBrandItem()) ||
+						3 == wxImg.getType() && wxImg.getPid().equals(item.getBrandId())
+				).min(Comparator.comparing(WxAppGoodsImgVo::getType)).orElse(null);
+				if (wxAppGoodsImgVo == null) {
+					continue;
+				}
+				item.setUrl(wxAppGoodsImgVo.getUrl());
+			}
+		}
+		// TODO: 此处可优化
+		PageInfo<ShoppingMallDetail> pageInfo = new PageInfo<>(shoppingMallDetailList);
+		IPage<ShoppingMallDetail> page = new Page<>();
+		page.setRecords(pageInfo.getList());
+		page.setTotal(pageInfo.getTotal());
+		page.setCurrent(pageInfo.getPageNum());
+		page.setSize(pageInfo.getPageSize());
+		return R.data(page);
+	}
+
 }