diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdPropValueMapper.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdPropValueMapper.java index 1eb8e79..1e22404 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdPropValueMapper.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdPropValueMapper.java @@ -46,4 +46,7 @@ public interface ProdPropValueMapper extends BaseMapperX { void restorePropValue(@Param("ids") List ids); int getMaxPropValue(@Param("propId")Long propId); + + // 根据商品 ID 更新销售属性值的 state(仅 rule=1 的) + void updateStateByProdId(@Param("prodId") Long prodId, @Param("state") Integer state); } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuMapper.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuMapper.java index c2a6cf3..c5f8c97 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuMapper.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuMapper.java @@ -41,4 +41,7 @@ public interface SkuMapper extends BaseMapperX { List getskuListByDeleted( @Param("prodId")Long prodId,@Param("ids")List ids); void batchSkuRecover(@Param("ids") List ids); + + // 查询商品下所有 SKU 的 is_shelf 状态(未删除) + List selectShelfStatusByProdId(@Param("prodId") Long prodId); } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServiceImpl.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServiceImpl.java index 9a320fb..7eca96a 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServiceImpl.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServiceImpl.java @@ -869,42 +869,35 @@ public class SkuServiceImpl implements SkuService { if (!allSameProd) { throw new IllegalArgumentException("批量删除的 SKU 必须属于同一个商品"); } - - - // Step 3: 获取该商品下【当前仍然未禁用】的 SKU 的 properties - List activeProperties = skuMapper.selectPropertiesByProdIdShelf(prodId); - for (Long id : ids) { SkuDO sku = new SkuDO(); sku.setSkuId(id); sku.setIsShelf(isShelf); skuMapper.updateById(sku); } - // Step 4: 提取所有仍在使用的属性值(去重 + trim) - Set currentlyUsedValues = new HashSet<>(); - for (String props : activeProperties) { - if (props != null && !props.trim().isEmpty()) { - String[] values = props.split(","); - for (String v : values) { - currentlyUsedValues.add(v.trim()); - } - } + // ================================ + //新增逻辑:判断商品整体上下架状态,并更新 tz_prod_prop_value.state + // ================================ + // 查询该商品下所有未删除的 SKU 的 is_shelf 状态 + List allSkuShelfStatus = skuMapper.selectShelfStatusByProdId(prodId); + + if (allSkuShelfStatus.isEmpty()) { + return; // 没有 SKU,无需处理 } - // Step 5: 查询该商品下所有 rule=1 的销售属性值(未删除的) - List allPropValues = prodPropValueMapper.selectSalesValuesByState(prodId); + boolean allShelf = allSkuShelfStatus.stream().allMatch(status -> status == 1); // 全部上架 + boolean allOffShelf = allSkuShelfStatus.stream().allMatch(status -> status == 0); // 全部下架 - // Step 6: 收集需要删除的属性值 ID - List valueIdsToDelete = new ArrayList<>(); - for (ProdPropValueDO pv : allPropValues) { - String value = pv.getPropValue().trim(); - if (!currentlyUsedValues.contains(value)) { - valueIdsToDelete.add(pv.getId()); - } + Integer targetState = null; + if (allShelf) { + targetState = 1; // 启用 + } else if (allOffShelf) { + targetState = 0; // 禁用 } - // Step 7: 批量删除无用的属性值 - if (!valueIdsToDelete.isEmpty()) { - prodPropValueMapper.batchMarkDeleted(valueIdsToDelete); + // 混合状态:不修改 state + // 如果需要更新状态,则批量更新 tz_prod_prop_value 的 state 字段 + if (targetState != null) { + prodPropValueMapper.updateStateByProdId(prodId, targetState); } } diff --git a/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdPropValueMapper.xml b/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdPropValueMapper.xml index 821da20..5eb4f81 100644 --- a/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdPropValueMapper.xml +++ b/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdPropValueMapper.xml @@ -51,7 +51,16 @@ SELECT max(sort) FROM `tz_prod_prop_value` WHERE prop_id = #{propId} AND deleted = 0 - + + UPDATE tz_prod_prop_value + SET state = #{state} + WHERE prop_id IN ( + SELECT id FROM tz_prod_prop + WHERE prod_id = #{prodId} + AND deleted = 0 + ) + AND deleted = 0 + diff --git a/tashow-module/tashow-module-product/src/main/resources/mapper/product/SkuMapper.xml b/tashow-module/tashow-module-product/src/main/resources/mapper/product/SkuMapper.xml index 7c66184..d1aed74 100644 --- a/tashow-module/tashow-module-product/src/main/resources/mapper/product/SkuMapper.xml +++ b/tashow-module/tashow-module-product/src/main/resources/mapper/product/SkuMapper.xml @@ -111,4 +111,11 @@ + + \ No newline at end of file