修改上下架bug
This commit is contained in:
@@ -46,4 +46,7 @@ public interface ProdPropValueMapper extends BaseMapperX<ProdPropValueDO> {
|
|||||||
void restorePropValue(@Param("ids") List<Long> ids);
|
void restorePropValue(@Param("ids") List<Long> ids);
|
||||||
|
|
||||||
int getMaxPropValue(@Param("propId")Long propId);
|
int getMaxPropValue(@Param("propId")Long propId);
|
||||||
|
|
||||||
|
// 根据商品 ID 更新销售属性值的 state(仅 rule=1 的)
|
||||||
|
void updateStateByProdId(@Param("prodId") Long prodId, @Param("state") Integer state);
|
||||||
}
|
}
|
||||||
@@ -41,4 +41,7 @@ public interface SkuMapper extends BaseMapperX<SkuDO> {
|
|||||||
List<SkuDO> getskuListByDeleted( @Param("prodId")Long prodId,@Param("ids")List<Long> ids);
|
List<SkuDO> getskuListByDeleted( @Param("prodId")Long prodId,@Param("ids")List<Long> ids);
|
||||||
|
|
||||||
void batchSkuRecover(@Param("ids") List<Long> ids);
|
void batchSkuRecover(@Param("ids") List<Long> ids);
|
||||||
|
|
||||||
|
// 查询商品下所有 SKU 的 is_shelf 状态(未删除)
|
||||||
|
List<Integer> selectShelfStatusByProdId(@Param("prodId") Long prodId);
|
||||||
}
|
}
|
||||||
@@ -869,42 +869,35 @@ public class SkuServiceImpl implements SkuService {
|
|||||||
if (!allSameProd) {
|
if (!allSameProd) {
|
||||||
throw new IllegalArgumentException("批量删除的 SKU 必须属于同一个商品");
|
throw new IllegalArgumentException("批量删除的 SKU 必须属于同一个商品");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Step 3: 获取该商品下【当前仍然未禁用】的 SKU 的 properties
|
|
||||||
List<String> activeProperties = skuMapper.selectPropertiesByProdIdShelf(prodId);
|
|
||||||
|
|
||||||
for (Long id : ids) {
|
for (Long id : ids) {
|
||||||
SkuDO sku = new SkuDO();
|
SkuDO sku = new SkuDO();
|
||||||
sku.setSkuId(id);
|
sku.setSkuId(id);
|
||||||
sku.setIsShelf(isShelf);
|
sku.setIsShelf(isShelf);
|
||||||
skuMapper.updateById(sku);
|
skuMapper.updateById(sku);
|
||||||
}
|
}
|
||||||
// Step 4: 提取所有仍在使用的属性值(去重 + trim)
|
// ================================
|
||||||
Set<String> currentlyUsedValues = new HashSet<>();
|
//新增逻辑:判断商品整体上下架状态,并更新 tz_prod_prop_value.state
|
||||||
for (String props : activeProperties) {
|
// ================================
|
||||||
if (props != null && !props.trim().isEmpty()) {
|
// 查询该商品下所有未删除的 SKU 的 is_shelf 状态
|
||||||
String[] values = props.split(",");
|
List<Integer> allSkuShelfStatus = skuMapper.selectShelfStatusByProdId(prodId);
|
||||||
for (String v : values) {
|
|
||||||
currentlyUsedValues.add(v.trim());
|
if (allSkuShelfStatus.isEmpty()) {
|
||||||
}
|
return; // 没有 SKU,无需处理
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Step 5: 查询该商品下所有 rule=1 的销售属性值(未删除的)
|
boolean allShelf = allSkuShelfStatus.stream().allMatch(status -> status == 1); // 全部上架
|
||||||
List<ProdPropValueDO> allPropValues = prodPropValueMapper.selectSalesValuesByState(prodId);
|
boolean allOffShelf = allSkuShelfStatus.stream().allMatch(status -> status == 0); // 全部下架
|
||||||
|
|
||||||
// Step 6: 收集需要删除的属性值 ID
|
Integer targetState = null;
|
||||||
List<Long> valueIdsToDelete = new ArrayList<>();
|
if (allShelf) {
|
||||||
for (ProdPropValueDO pv : allPropValues) {
|
targetState = 1; // 启用
|
||||||
String value = pv.getPropValue().trim();
|
} else if (allOffShelf) {
|
||||||
if (!currentlyUsedValues.contains(value)) {
|
targetState = 0; // 禁用
|
||||||
valueIdsToDelete.add(pv.getId());
|
|
||||||
}
|
}
|
||||||
}
|
// 混合状态:不修改 state
|
||||||
// Step 7: 批量删除无用的属性值
|
// 如果需要更新状态,则批量更新 tz_prod_prop_value 的 state 字段
|
||||||
if (!valueIdsToDelete.isEmpty()) {
|
if (targetState != null) {
|
||||||
prodPropValueMapper.batchMarkDeleted(valueIdsToDelete);
|
prodPropValueMapper.updateStateByProdId(prodId, targetState);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -51,7 +51,16 @@
|
|||||||
SELECT max(sort) FROM `tz_prod_prop_value` WHERE prop_id = #{propId} AND deleted = 0
|
SELECT max(sort) FROM `tz_prod_prop_value` WHERE prop_id = #{propId} AND deleted = 0
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
<update id="updateStateByProdId">
|
||||||
|
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
|
||||||
|
</update>
|
||||||
|
|
||||||
|
|
||||||
<update id="batchMarkDeleted">
|
<update id="batchMarkDeleted">
|
||||||
|
|||||||
@@ -111,4 +111,11 @@
|
|||||||
</foreach>
|
</foreach>
|
||||||
</update>
|
</update>
|
||||||
|
|
||||||
|
<select id="selectShelfStatusByProdId" resultType="int">
|
||||||
|
SELECT is_shelf
|
||||||
|
FROM tz_sku
|
||||||
|
WHERE prod_id = #{prodId}
|
||||||
|
AND deleted = 0
|
||||||
|
</select>
|
||||||
|
|
||||||
</mapper>
|
</mapper>
|
||||||
Reference in New Issue
Block a user