云
14 小时以前 02a1ae81eba7b48223052fb833859f0a65dd7d21
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
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);
    }
 
}