package cn.iocoder.yudao.module.mes.service.pro.bagcode;
|
|
import cn.iocoder.yudao.module.mes.dal.mysql.pro.bagcode.MesProBagCodeMapper;
|
import cn.iocoder.yudao.module.mes.dal.mysql.pro.pallet.MesProPalletMapper;
|
import cn.iocoder.yudao.module.mes.framework.bagcode.MesProBagCodeGenerateProperties;
|
import jakarta.annotation.Resource;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.stereotype.Component;
|
|
/**
|
* 袋码生成半成品清理器
|
* <p>
|
* 生成失败或取消时会留下部分袋码与托盘。这些数据从未对外展示,不做逻辑删除,
|
* 直接按 {@code uuid} 分段物理删除,避免留下几十万条垃圾行。
|
* <p>
|
* 单条 DELETE 自带原子性,且已用 LIMIT 控制单次影响行数,因此不需要额外事务。
|
*/
|
@Slf4j
|
@Component
|
public class MesProBagCodeGenerateCleaner {
|
|
@Resource
|
private MesProBagCodeMapper bagCodeMapper;
|
@Resource
|
private MesProPalletMapper palletMapper;
|
@Resource
|
private MesProBagCodeGenerateProperties properties;
|
|
/**
|
* 清理某个生成组的所有半成品数据
|
*
|
* @param uuid 生成组 UUID
|
*/
|
public void cleanup(String uuid) {
|
int batchSize = Math.max(1, properties.getCleanupBatchSize());
|
int deleted;
|
do {
|
deleted = bagCodeMapper.deletePhysicallyByUuidChunk(uuid, batchSize);
|
} while (deleted >= batchSize);
|
do {
|
deleted = palletMapper.deletePhysicallyByGenerateUuidChunk(uuid, batchSize);
|
} while (deleted >= batchSize);
|
log.info("[cleanup][生成组 {} 半成品清理完成]", uuid);
|
}
|
|
}
|