|
@@ -40,7 +40,7 @@ public class ArchiveAutoRuleSyncImpl {
|
|
}*/
|
|
}*/
|
|
|
|
|
|
//组卷规则同步
|
|
//组卷规则同步
|
|
- //syncRuleSysToProject(vo2Map,sysVo2Trees);
|
|
|
|
|
|
+ syncRuleSysToProject(vo2Map,sysVo2Trees);
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
@@ -101,7 +101,7 @@ public class ArchiveAutoRuleSyncImpl {
|
|
}
|
|
}
|
|
}*/
|
|
}*/
|
|
//组卷规则同步
|
|
//组卷规则同步
|
|
- //syncRuleProToContract(vo2Map,proVo2Trees);
|
|
|
|
|
|
+ syncRuleProToContract(vo2Map,proVo2Trees);
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -120,14 +120,21 @@ public class ArchiveAutoRuleSyncImpl {
|
|
|
|
|
|
//准备系统级节点map
|
|
//准备系统级节点map
|
|
Map<Long,ArchiveTreeVO2> sysMap = new HashMap<>();
|
|
Map<Long,ArchiveTreeVO2> sysMap = new HashMap<>();
|
|
- for(ArchiveTreeVO2 sysVo2:sysVo2Trees){
|
|
|
|
|
|
+ List<ArchiveTreeVO2> sysVo2TreeList = new ArrayList<>();
|
|
|
|
+ if(sysVo2Trees.size()==1){
|
|
|
|
+ ForestNodeMergerEx.getTreeList(sysVo2Trees.get(0),sysVo2TreeList);
|
|
|
|
+ }else{
|
|
|
|
+ sysVo2TreeList=sysVo2Trees;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ for(ArchiveTreeVO2 sysVo2:sysVo2TreeList){
|
|
sysMap.put(sysVo2.getId(),sysVo2);
|
|
sysMap.put(sysVo2.getId(),sysVo2);
|
|
}
|
|
}
|
|
//准备在页面勾选设置的系统级节点ID_项目级节点Map 用于映射archiveAutoNodeId同步
|
|
//准备在页面勾选设置的系统级节点ID_项目级节点Map 用于映射archiveAutoNodeId同步
|
|
Map<Long,List<ArchiveTreeVO2>> sysIdToPro_Map = new HashMap<>();
|
|
Map<Long,List<ArchiveTreeVO2>> sysIdToPro_Map = new HashMap<>();
|
|
for(ArchiveTreeVO2 proVO2 : vo2Map.values()){
|
|
for(ArchiveTreeVO2 proVO2 : vo2Map.values()){
|
|
//只提取设置的节点,也就是select=1的节点
|
|
//只提取设置的节点,也就是select=1的节点
|
|
- if(proVO2.getArchiveAutoGroupSelect()==1){
|
|
|
|
|
|
+ if(proVO2.getArchiveAutoGroupSelect()!=null && proVO2.getArchiveAutoGroupSelect()==1){
|
|
Long fromId = proVO2.getFromId();
|
|
Long fromId = proVO2.getFromId();
|
|
if(sysIdToPro_Map.containsKey(fromId)){
|
|
if(sysIdToPro_Map.containsKey(fromId)){
|
|
List<ArchiveTreeVO2> archiveTreeVO2s = sysIdToPro_Map.get(fromId);
|
|
List<ArchiveTreeVO2> archiveTreeVO2s = sysIdToPro_Map.get(fromId);
|
|
@@ -207,14 +214,21 @@ public class ArchiveAutoRuleSyncImpl {
|
|
|
|
|
|
//准备项目级节点map
|
|
//准备项目级节点map
|
|
Map<Long,ArchiveTreeVO2> proMap = new HashMap<>();
|
|
Map<Long,ArchiveTreeVO2> proMap = new HashMap<>();
|
|
- for(ArchiveTreeVO2 proVo2:proVo2Trees){
|
|
|
|
|
|
+ List<ArchiveTreeVO2> proVo2TreeList = new ArrayList<>();
|
|
|
|
+ if(proVo2Trees.size()==1){
|
|
|
|
+ ForestNodeMergerEx.getTreeList(proVo2Trees.get(0),proVo2TreeList);
|
|
|
|
+ }else{
|
|
|
|
+ proVo2TreeList=proVo2Trees;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ for(ArchiveTreeVO2 proVo2:proVo2TreeList){
|
|
proMap.put(proVo2.getId(),proVo2);
|
|
proMap.put(proVo2.getId(),proVo2);
|
|
}
|
|
}
|
|
//准备在页面勾选设置的项目级节点ID_客户级节点Map 用于映射archiveAutoNodeId同步
|
|
//准备在页面勾选设置的项目级节点ID_客户级节点Map 用于映射archiveAutoNodeId同步
|
|
Map<Long,List<ArchiveTreeContractVO2>> proIdToContact_Map = new HashMap<>();
|
|
Map<Long,List<ArchiveTreeContractVO2>> proIdToContact_Map = new HashMap<>();
|
|
for(ArchiveTreeContractVO2 contractVO2 : vo2Map.values()){
|
|
for(ArchiveTreeContractVO2 contractVO2 : vo2Map.values()){
|
|
//只提取设置的节点,也就是select=1的节点
|
|
//只提取设置的节点,也就是select=1的节点
|
|
- if(contractVO2.getArchiveAutoGroupSelect()==1){
|
|
|
|
|
|
+ if(contractVO2.getArchiveAutoGroupSelect()!=null && contractVO2.getArchiveAutoGroupSelect()==1){
|
|
Long fromId = contractVO2.getFromId();
|
|
Long fromId = contractVO2.getFromId();
|
|
if(proIdToContact_Map.containsKey(fromId)){
|
|
if(proIdToContact_Map.containsKey(fromId)){
|
|
List<ArchiveTreeContractVO2> contractTreeVO2s = proIdToContact_Map.get(fromId);
|
|
List<ArchiveTreeContractVO2> contractTreeVO2s = proIdToContact_Map.get(fromId);
|
|
@@ -234,7 +248,7 @@ public class ArchiveAutoRuleSyncImpl {
|
|
Integer archiveAutoType = contractVO2.getArchiveAutoType();
|
|
Integer archiveAutoType = contractVO2.getArchiveAutoType();
|
|
Long fromId = contractVO2.getFromId();
|
|
Long fromId = contractVO2.getFromId();
|
|
//只处理普通节点,规则时分类并卷类型的
|
|
//只处理普通节点,规则时分类并卷类型的
|
|
- if (contractVO2.getExtType()== null && fromId!=null && archiveAutoType==2){
|
|
|
|
|
|
+ if (contractVO2.getExtType()== null && fromId!=null && archiveAutoType!=null && archiveAutoType==2){
|
|
Long contract_groupId = contractVO2.getArchiveAutoGroupId();
|
|
Long contract_groupId = contractVO2.getArchiveAutoGroupId();
|
|
//如果当前contractVO2的groupID是客户级(19位数),需要先保存关联集合
|
|
//如果当前contractVO2的groupID是客户级(19位数),需要先保存关联集合
|
|
if(contract_groupId.toString().length()==19){
|
|
if(contract_groupId.toString().length()==19){
|
|
@@ -266,30 +280,30 @@ public class ArchiveAutoRuleSyncImpl {
|
|
if (contractVO2.getExtType()== null){
|
|
if (contractVO2.getExtType()== null){
|
|
Integer archiveAutoType = contractVO2.getArchiveAutoType();
|
|
Integer archiveAutoType = contractVO2.getArchiveAutoType();
|
|
//过滤没有任何规则的节点
|
|
//过滤没有任何规则的节点
|
|
- //步骤一:处理archiveAutoNodeId同步
|
|
|
|
- if(archiveAutoType!=null){
|
|
|
|
|
|
|
|
|
|
+ if(archiveAutoType!=null){
|
|
|
|
+ //步骤一:处理archiveAutoNodeId同步
|
|
Long archiveAutoNodeId = contractVO2.getArchiveAutoNodeId();
|
|
Long archiveAutoNodeId = contractVO2.getArchiveAutoNodeId();
|
|
if(archiveAutoNodeId!=null){
|
|
if(archiveAutoNodeId!=null){
|
|
//判断规则值是项目级的还是客户级的
|
|
//判断规则值是项目级的还是客户级的
|
|
if(proMap.containsKey(archiveAutoNodeId)){
|
|
if(proMap.containsKey(archiveAutoNodeId)){
|
|
//这个节点是刚从项目级同步过来,规则值还是项目级的。而这个archiveAutoNodeId是项目级设置的最高并卷节点的ID
|
|
//这个节点是刚从项目级同步过来,规则值还是项目级的。而这个archiveAutoNodeId是项目级设置的最高并卷节点的ID
|
|
//用archiveAutoNodeId通过proIdToContact_Map找出对应的客户级节点
|
|
//用archiveAutoNodeId通过proIdToContact_Map找出对应的客户级节点
|
|
- List<ArchiveTreeContractVO2> pro_select_vo2s = proIdToContact_Map.get(archiveAutoNodeId);
|
|
|
|
- if(pro_select_vo2s.size()==1){
|
|
|
|
|
|
+ List<ArchiveTreeContractVO2> contract_select_vo2s = proIdToContact_Map.get(archiveAutoNodeId);
|
|
|
|
+ if(contract_select_vo2s.size()==1){
|
|
//一个系统级节点对应了一个项目级节点
|
|
//一个系统级节点对应了一个项目级节点
|
|
- Long pro_archiveAutoNodeId = pro_select_vo2s.get(0).getId();
|
|
|
|
|
|
+ Long pro_archiveAutoNodeId = contract_select_vo2s.get(0).getId();
|
|
contractVO2.setArchiveAutoNodeId(pro_archiveAutoNodeId);//设置项目级的archiveAutoNodeId
|
|
contractVO2.setArchiveAutoNodeId(pro_archiveAutoNodeId);//设置项目级的archiveAutoNodeId
|
|
contractVO2.setFlag(1);
|
|
contractVO2.setFlag(1);
|
|
}else{
|
|
}else{
|
|
//一个系统级节点对应了多个项目级节点(项目级添加加节点的情况)
|
|
//一个系统级节点对应了多个项目级节点(项目级添加加节点的情况)
|
|
- for(ArchiveTreeContractVO2 contract_select_vo2:pro_select_vo2s){
|
|
|
|
|
|
+ for(ArchiveTreeContractVO2 contract_select_vo2:contract_select_vo2s){
|
|
//系统级对应多个节点时,用当前节点的ancestors去对比pro_select_vo2中的id,当前节点的ancestors必有上级节点的id。或当前节点id=pro_select_vo2中的id
|
|
//系统级对应多个节点时,用当前节点的ancestors去对比pro_select_vo2中的id,当前节点的ancestors必有上级节点的id。或当前节点id=pro_select_vo2中的id
|
|
- String ancestorsPid = contract_select_vo2.getId().toString();
|
|
|
|
- String ancestors = contractVO2.getAncestors();
|
|
|
|
- Long contract_id = contractVO2.getId();
|
|
|
|
|
|
+ Long contract_select_id = contract_select_vo2.getId();//客户级的最高并卷节点id
|
|
|
|
+ String ancestors = contractVO2.getAncestors();//当前节点ancestors
|
|
|
|
+ Long contractVO2_id = contractVO2.getId();//当前节点id
|
|
|
|
|
|
- if(ancestors.contains(ancestorsPid) || contract_id.equals(ancestorsPid)){
|
|
|
|
|
|
+ if(ancestors.contains(contract_select_id.toString()) || contractVO2_id.equals(contract_select_id)){
|
|
contractVO2.setArchiveAutoNodeId(contract_select_vo2.getId());//设置客户级的archiveAutoNodeId
|
|
contractVO2.setArchiveAutoNodeId(contract_select_vo2.getId());//设置客户级的archiveAutoNodeId
|
|
contractVO2.setFlag(1);
|
|
contractVO2.setFlag(1);
|
|
break;
|
|
break;
|
|
@@ -303,41 +317,41 @@ public class ArchiveAutoRuleSyncImpl {
|
|
//ArchiveTreeVO2 sys_select_vo2 = sysMap.get(sys_vo2.getArchiveAutoNodeId());
|
|
//ArchiveTreeVO2 sys_select_vo2 = sysMap.get(sys_vo2.getArchiveAutoNodeId());
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- }
|
|
|
|
|
|
|
|
- //步骤二:处理archiveAutoGroupId同步
|
|
|
|
- if(archiveAutoType==2){
|
|
|
|
- Long contractId = contractVO2.getContractId();
|
|
|
|
- //分合同段的 给archiveAutoGroupId
|
|
|
|
- Long groupId = contractVO2.getArchiveAutoGroupId();
|
|
|
|
- //客户级的groupID用19位数字 系统级和项目级用16位数字
|
|
|
|
- if(groupId.toString().length()==16){
|
|
|
|
- String key ="";
|
|
|
|
- if(contractId==null) {
|
|
|
|
- key =groupId+"";
|
|
|
|
- }else {
|
|
|
|
- key =contractId+"_"+groupId;
|
|
|
|
- }
|
|
|
|
|
|
+ //步骤二:处理archiveAutoGroupId同步
|
|
|
|
+ if(archiveAutoType==2){
|
|
|
|
+ Long contractId = contractVO2.getContractId();
|
|
|
|
+ //分合同段的 给archiveAutoGroupId
|
|
|
|
+ Long groupId = contractVO2.getArchiveAutoGroupId();
|
|
|
|
+ //客户级的groupID用19位数字 系统级和项目级用16位数字
|
|
|
|
+ if(groupId.toString().length()==16){
|
|
|
|
+ String key ="";
|
|
|
|
+ if(contractId==null) {
|
|
|
|
+ key =groupId+"";
|
|
|
|
+ }else {
|
|
|
|
+ key =contractId+"_"+groupId;
|
|
|
|
+ }
|
|
|
|
|
|
- if(groupMap.containsKey(key)){
|
|
|
|
- Long contractGroupId = groupMap.get(key);
|
|
|
|
- contractVO2.setArchiveAutoGroupId(contractGroupId);
|
|
|
|
- contractVO2.setFlag(1);
|
|
|
|
- }else{
|
|
|
|
- //客户级的group用19位,在同步的时候方便判断是值是客户级还是项目级
|
|
|
|
- double v = Math.random();
|
|
|
|
- if(v<0.1){
|
|
|
|
- v=v+0.1;
|
|
|
|
|
|
+ if(groupMap.containsKey(key)){
|
|
|
|
+ Long contractGroupId = groupMap.get(key);
|
|
|
|
+ contractVO2.setArchiveAutoGroupId(contractGroupId);
|
|
|
|
+ contractVO2.setFlag(1);
|
|
|
|
+ }else{
|
|
|
|
+ //客户级的group用19位,在同步的时候方便判断是值是客户级还是项目级
|
|
|
|
+ double v = Math.random();
|
|
|
|
+ if(v<0.1){
|
|
|
|
+ v=v+0.1;
|
|
|
|
+ }
|
|
|
|
+ v=v*1000000;
|
|
|
|
+ long ran = (long)v;
|
|
|
|
+ Long contractGroupId=Long.parseLong(System.currentTimeMillis()+""+ran);
|
|
|
|
+ groupMap.put(key,contractGroupId);
|
|
|
|
+ contractVO2.setArchiveAutoGroupId(contractGroupId);
|
|
|
|
+ contractVO2.setFlag(1);
|
|
}
|
|
}
|
|
- v=v*1000000;
|
|
|
|
- long ran = (long)v;
|
|
|
|
- Long contractGroupId=Long.parseLong(System.currentTimeMillis()+""+ran);
|
|
|
|
- groupMap.put(key,contractGroupId);
|
|
|
|
- contractVO2.setArchiveAutoGroupId(contractGroupId);
|
|
|
|
- contractVO2.setFlag(1);
|
|
|
|
|
|
+ }else {
|
|
|
|
+ //已经是客户级了不用理
|
|
}
|
|
}
|
|
- }else {
|
|
|
|
- //已经是客户级了不用理
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|