package jnpf.elnService.cross.impl;
|
|
import cn.hutool.core.util.IdUtil;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import jnpf.elnEntity.template.ElnTemplateCrossReferenceEntity;
|
import jnpf.elnMapper.ElnTemplateCrossReferenceMapper;
|
import jnpf.elnService.template.ElnTemplateVersionCopyParticipant;
|
import jnpf.exception.DataException;
|
import org.springframework.stereotype.Service;
|
|
import java.util.Collections;
|
import java.util.List;
|
import java.util.Map;
|
import java.util.Objects;
|
|
/** Copies rule identity only after the corresponding target PRIMARY bindings are activated. */
|
@Service
|
public class ElnCrossTemplateVersionCopyParticipant implements ElnTemplateVersionCopyParticipant {
|
private final ElnTemplateCrossReferenceMapper references;
|
|
public ElnCrossTemplateVersionCopyParticipant(ElnTemplateCrossReferenceMapper references) {
|
this.references = references;
|
}
|
|
@Override
|
public void afterBindingsActivated(String tenantId, String sourceTemplateId, String targetTemplateId,
|
Map<String, String> bindingIdMap) {
|
List<ElnTemplateCrossReferenceEntity> rules = references.selectList(Wrappers.<ElnTemplateCrossReferenceEntity>lambdaQuery()
|
.eq(ElnTemplateCrossReferenceEntity::getFTenantId, tenantId).eq(ElnTemplateCrossReferenceEntity::getFDeleteMark, 0)
|
.in(ElnTemplateCrossReferenceEntity::getMubanBangdingId,
|
bindingIdMap == null ? Collections.singleton("-") : bindingIdMap.keySet()));
|
if (rules == null) return;
|
for (ElnTemplateCrossReferenceEntity source : rules) {
|
String targetBindingId = bindingIdMap.get(source.getMubanBangdingId());
|
if (targetBindingId == null) continue;
|
ElnTemplateCrossReferenceEntity existing = references.selectOne(Wrappers.<ElnTemplateCrossReferenceEntity>lambdaQuery()
|
.eq(ElnTemplateCrossReferenceEntity::getFTenantId, tenantId)
|
.eq(ElnTemplateCrossReferenceEntity::getMubanBangdingId, targetBindingId));
|
if (existing != null) {
|
if (!sameSource(existing, source)) throw new DataException("升版绑定已用于其他跨模板来源");
|
continue;
|
}
|
ElnTemplateCrossReferenceEntity copied = new ElnTemplateCrossReferenceEntity();
|
copied.setId(IdUtil.getSnowflakeNextIdStr()); copied.setFTenantId(tenantId); copied.setFDeleteMark(0);
|
copied.setMubanBangdingId(targetBindingId);
|
copied.setLaiyuanMubanId(source.getLaiyuanMubanId()); copied.setLaiyuanMubanBianhao(source.getLaiyuanMubanBianhao());
|
copied.setLaiyuanZiduanDingyiId(source.getLaiyuanZiduanDingyiId()); copied.setLaiyuanZiduanBanbenId(source.getLaiyuanZiduanBanbenId());
|
if (references.insert(copied) != 1) throw new DataException("跨模板字段升版规则保存失败");
|
}
|
}
|
|
private static boolean sameSource(ElnTemplateCrossReferenceEntity left, ElnTemplateCrossReferenceEntity right) {
|
return Objects.equals(left.getLaiyuanMubanId(), right.getLaiyuanMubanId())
|
&& Objects.equals(left.getLaiyuanMubanBianhao(), right.getLaiyuanMubanBianhao())
|
&& Objects.equals(left.getLaiyuanZiduanDingyiId(), right.getLaiyuanZiduanDingyiId())
|
&& Objects.equals(left.getLaiyuanZiduanBanbenId(), right.getLaiyuanZiduanBanbenId());
|
}
|
}
|