66 lines
2.6 KiB
Java
66 lines
2.6 KiB
Java
|
|
package com.klp.service.impl;
|
|||
|
|
|
|||
|
|
import com.baomidou.dynamic.datasource.annotation.DS;
|
|||
|
|
import com.klp.domain.DrMillProcessRecipeVersion;
|
|||
|
|
import com.klp.mapper.DrMillProcessPassMapper;
|
|||
|
|
import com.klp.mapper.DrMillProcessRecipeVersionMapper;
|
|||
|
|
import lombok.RequiredArgsConstructor;
|
|||
|
|
import lombok.extern.slf4j.Slf4j;
|
|||
|
|
import org.springframework.stereotype.Service;
|
|||
|
|
import org.springframework.transaction.annotation.Transactional;
|
|||
|
|
|
|||
|
|
import java.util.List;
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 双机架历史道次版本迁移
|
|||
|
|
* 将所有 version_id IS NULL 的道次归入对应方案的 V1.0 版本
|
|||
|
|
*/
|
|||
|
|
@Slf4j
|
|||
|
|
@DS("double-rack")
|
|||
|
|
@RequiredArgsConstructor
|
|||
|
|
@Service
|
|||
|
|
public class DrMigrationService {
|
|||
|
|
|
|||
|
|
private final DrMillProcessPassMapper passMapper;
|
|||
|
|
private final DrMillProcessRecipeVersionMapper versionMapper;
|
|||
|
|
|
|||
|
|
@Transactional(rollbackFor = Exception.class)
|
|||
|
|
public void migrateOrphanPassesToV1() {
|
|||
|
|
List<Long> recipeIds = passMapper.selectDistinctRecipeIdsWithOrphanPasses();
|
|||
|
|
if (recipeIds.isEmpty()) {
|
|||
|
|
log.info("[DR迁移] 无需迁移:所有道次已绑定版本");
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
int newVersionCount = 0;
|
|||
|
|
int migratedPassCount = 0;
|
|||
|
|
|
|||
|
|
for (Long recipeId : recipeIds) {
|
|||
|
|
// 幂等:V1.0 已存在则复用,避免重复执行时重复创建
|
|||
|
|
DrMillProcessRecipeVersion v1 = versionMapper.selectV1ByRecipeId(recipeId);
|
|||
|
|
if (v1 == null) {
|
|||
|
|
v1 = new DrMillProcessRecipeVersion();
|
|||
|
|
v1.setRecipeId(recipeId);
|
|||
|
|
v1.setVersionCode("V1.0");
|
|||
|
|
v1.setIsActive(1); // 默认激活
|
|||
|
|
v1.setStatus("1"); // 已发布
|
|||
|
|
v1.setCreateBy("system");
|
|||
|
|
v1.setUpdateBy("system");
|
|||
|
|
v1.setRemark("系统启动时自动迁移历史数据");
|
|||
|
|
versionMapper.insert(v1);
|
|||
|
|
newVersionCount++;
|
|||
|
|
log.info("[DR迁移] 方案 {} 新建 V1.0,versionId={}", recipeId, v1.getVersionId());
|
|||
|
|
} else {
|
|||
|
|
log.info("[DR迁移] 方案 {} 已有 V1.0(versionId={}),直接复用", recipeId, v1.getVersionId());
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
int rows = passMapper.updateVersionIdForOrphans(recipeId, v1.getVersionId());
|
|||
|
|
migratedPassCount += rows;
|
|||
|
|
log.info("[DR迁移] 方案 {} 迁移 {} 条道次 → versionId={}", recipeId, rows, v1.getVersionId());
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
log.info("[DR迁移] 完成:共处理方案 {} 个,新建版本 {} 个,迁移道次 {} 条",
|
|||
|
|
recipeIds.size(), newVersionCount, migratedPassCount);
|
|||
|
|
}
|
|||
|
|
}
|