刘光辉
6 小时以前 06f314545ac3514d7ce28939920866ae8188d31c
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
47
48
49
50
51
52
53
54
55
56
57
58
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());
    }
}