package com.zbkj.service.service.impl;
public class ProductServiceImpl {
/**
* 只查询有有效库存的商品。普通商品有编码时读取库存模块,无编码时沿用商品库存字段。
*/
private void setEffectiveStockFilter(LambdaQueryWrapper<Product> lqw) {
String normalProductStockSql = "((NOT EXISTS (SELECT 1 FROM eb_product_attr_value pav " +
"WHERE pav.product_id = eb_product.id AND pav.type = 0 AND pav.marketing_type = 0 " +
"AND pav.is_del = 0 AND pav.item_number IS NOT NULL AND TRIM(pav.item_number) <> '') " +
"AND eb_product.stock > 0) " +
"OR EXISTS (SELECT 1 FROM eb_product_attr_value pav " +
"INNER JOIN eb_sku_stock ss ON ss.mer_id = eb_product.mer_id " +
"AND ss.commodity_code COLLATE utf8mb4_general_ci " +
"= TRIM(pav.item_number) COLLATE utf8mb4_general_ci AND ss.is_del = 0 " +
"WHERE pav.product_id = eb_product.id AND pav.type = 0 AND pav.marketing_type = 0 " +
"AND pav.is_del = 0 AND pav.item_number IS NOT NULL AND TRIM(pav.item_number) <> '' " +
"AND ss.good_stock > 0) " +
"OR (EXISTS (SELECT 1 FROM eb_product_attr_value pav " +
"WHERE pav.product_id = eb_product.id AND pav.type = 0 AND pav.marketing_type = 0 " +
"AND pav.is_del = 0 AND pav.item_number IS NOT NULL AND TRIM(pav.item_number) <> '') " +
"AND EXISTS (SELECT 1 FROM eb_product_attr_value pav " +
"WHERE pav.product_id = eb_product.id AND pav.type = 0 AND pav.marketing_type = 0 " +
"AND pav.is_del = 0 AND (pav.item_number IS NULL OR TRIM(pav.item_number) = '') " +
"AND pav.stock > 0)))";
lqw.and(wrapper -> wrapper.nested(normal -> normal.eq(Product::getType, ProductConstants.PRODUCT_TYPE_NORMAL)
.apply(normalProductStockSql))
.or(other -> other.ne(Product::getType, ProductConstants.PRODUCT_TYPE_NORMAL)
.gt(Product::getStock, 0)));
}
语法错误。修复如下:
/**
* 只查询有有效库存的商品。普通商品有编码时读取库存模块,无编码时沿用商品库存字段。
*/private void setEffectiveStockFilter(LambdaQueryWrapper<Product> lqw) {
String normalProductStockSql = "((NOT EXISTS (SELECT 1 FROM eb_product_attr_value pav " +
"WHERE pav.product_id = eb_product.id AND pav.type = 0 AND pav.marketing_type = 0 " +
"AND pav.is_del = 0 AND pav.item_number IS NOT NULL AND TRIM(pav.item_number) <> '') " +
"AND eb_product.stock > 0) " +
"OR EXISTS (SELECT 1 FROM eb_product_attr_value pav " +
"INNER JOIN eb_sku_stock ss ON ss.commodity_code COLLATE utf8mb4_general_ci " +
"= TRIM(pav.item_number) COLLATE utf8mb4_general_ci AND ss.is_del = 0 " +
"WHERE pav.product_id = eb_product.id AND pav.type = 0 AND pav.marketing_type = 0 " +
"AND pav.is_del = 0 AND pav.item_number IS NOT NULL AND TRIM(pav.item_number) <> '' " +
"AND ss.good_stock > 0 " +
"AND ss.mer_id = eb_product.mer_id) " + // ← 关键:从 ON 移到 WHERE
"OR (EXISTS (SELECT 1 FROM eb_product_attr_value pav " +
"WHERE pav.product_id = eb_product.id AND pav.type = 0 AND pav.marketing_type = 0 " +
"AND pav.is_del = 0 AND pav.item_number IS NOT NULL AND TRIM(pav.item_number) <> '') " +
"AND EXISTS (SELECT 1 FROM eb_product_attr_value pav " +
"WHERE pav.product_id = eb_product.id AND pav.type = 0 AND pav.marketing_type = 0 " +
"AND pav.is_del = 0 AND (pav.item_number IS NULL OR TRIM(pav.item_number) = '') " +
"AND pav.stock > 0)))";
lqw.and(wrapper -> wrapper.nested(normal -> normal.eq(Product::getType, ProductConstants.PRODUCT_TYPE_NORMAL)
.apply(normalProductStockSql))
.or(other -> other.ne(Product::getType, ProductConstants.PRODUCT_TYPE_NORMAL)
.gt(Product::getStock, 0)));
}
}

【产品名称】:多商户系统 (Java)
【产品版本】:V2.4
【部署方式】:phpstudy
【部署环境】:本地环境
【jdk版本】:jdk8
【Mysql版本】:8.0
【使用终端】:后台

