|
@@ -10,9 +10,12 @@ import com.persagy.dmp.common.constant.ResponseCode;
|
|
import com.persagy.dmp.common.model.entity.BaseEntity;
|
|
import com.persagy.dmp.common.model.entity.BaseEntity;
|
|
import com.persagy.dmp.digital.client.DigitalRelationFacade;
|
|
import com.persagy.dmp.digital.client.DigitalRelationFacade;
|
|
import com.persagy.dmp.digital.entity.ObjectRelation;
|
|
import com.persagy.dmp.digital.entity.ObjectRelation;
|
|
|
|
+import com.persagy.dmp.rwd.migrate.entity.SyncData;
|
|
|
|
+import com.persagy.proxy.adm.request.AdmResponse;
|
|
import com.persagy.proxy.common.entity.InstanceUrlParam;
|
|
import com.persagy.proxy.common.entity.InstanceUrlParam;
|
|
import com.persagy.proxy.migration.constant.MiGrationRelCode;
|
|
import com.persagy.proxy.migration.constant.MiGrationRelCode;
|
|
import com.persagy.proxy.migration.constant.MigrationConstant;
|
|
import com.persagy.proxy.migration.constant.MigrationConstant;
|
|
|
|
+import com.persagy.proxy.migration.constant.MigrationTable;
|
|
import com.persagy.proxy.migration.constant.MigrationType;
|
|
import com.persagy.proxy.migration.constant.MigrationType;
|
|
import com.persagy.proxy.migration.model.DataMigrationExcel;
|
|
import com.persagy.proxy.migration.model.DataMigrationExcel;
|
|
import com.persagy.proxy.migration.model.DataMigrationResponse;
|
|
import com.persagy.proxy.migration.model.DataMigrationResponse;
|
|
@@ -20,10 +23,7 @@ import com.persagy.proxy.migration.model.MigrationInfo;
|
|
import com.persagy.proxy.migration.service.Impl.MigrationAbstractServiceImpl;
|
|
import com.persagy.proxy.migration.service.Impl.MigrationAbstractServiceImpl;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
|
-import java.util.ArrayList;
|
|
|
|
-import java.util.Collections;
|
|
|
|
-import java.util.List;
|
|
|
|
-import java.util.Map;
|
|
|
|
|
|
+import java.util.*;
|
|
import java.util.stream.Collectors;
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -60,7 +60,7 @@ public class ObjectRelationMigration extends MigrationAbstractServiceImpl<Object
|
|
* @return
|
|
* @return
|
|
*/
|
|
*/
|
|
@Override
|
|
@Override
|
|
- public List<DataMigrationExcel> migrate(InstanceUrlParam context, MigrationInfo migrationInfo) {
|
|
|
|
|
|
+ public List<DataMigrationExcel> migrateForExcel(InstanceUrlParam context, MigrationInfo migrationInfo) {
|
|
log.info("######################### dt_relation 同步开始 #########################");
|
|
log.info("######################### dt_relation 同步开始 #########################");
|
|
long start = System.currentTimeMillis();
|
|
long start = System.currentTimeMillis();
|
|
List<DataMigrationExcel> dataMigrationExcels = new ArrayList<>();
|
|
List<DataMigrationExcel> dataMigrationExcels = new ArrayList<>();
|
|
@@ -68,11 +68,8 @@ public class ObjectRelationMigration extends MigrationAbstractServiceImpl<Object
|
|
for (MiGrationRelCode miGrationRelCode: MiGrationRelCode.values()){
|
|
for (MiGrationRelCode miGrationRelCode: MiGrationRelCode.values()){
|
|
log.info("######################### dt_relation "+miGrationRelCode.getCode()+"同步开始 #########################");
|
|
log.info("######################### dt_relation "+miGrationRelCode.getCode()+"同步开始 #########################");
|
|
|
|
|
|
- QueryCriteria queryCriteria = new QueryCriteria();
|
|
|
|
- ObjectNode criteria = JsonNodeFactory.instance.objectNode();
|
|
|
|
- criteria.put("valid", 1);
|
|
|
|
- criteria.put("relCode", miGrationRelCode.getCode());
|
|
|
|
- dataMigrationExcels.addAll(startMigrate(context, migrationInfo, queryCriteria));
|
|
|
|
|
|
+ QueryCriteria queryCriteria = getQueryCriteria(miGrationRelCode.getCode());
|
|
|
|
+ dataMigrationExcels.addAll(startMigrateForExcel(context, migrationInfo, queryCriteria));
|
|
|
|
|
|
log.info("######################### dt_relation "+miGrationRelCode.getCode()+"同步结束 #########################");
|
|
log.info("######################### dt_relation "+miGrationRelCode.getCode()+"同步结束 #########################");
|
|
}
|
|
}
|
|
@@ -81,7 +78,30 @@ public class ObjectRelationMigration extends MigrationAbstractServiceImpl<Object
|
|
return dataMigrationExcels;
|
|
return dataMigrationExcels;
|
|
}
|
|
}
|
|
|
|
|
|
- private List<DataMigrationExcel> startMigrate(InstanceUrlParam context, MigrationInfo migrationInfo, QueryCriteria queryCriteria){
|
|
|
|
|
|
+ @Override
|
|
|
|
+ public AdmResponse migrateForLog(InstanceUrlParam context, MigrationInfo migrationInfo) {
|
|
|
|
+ log.info("######################### dt_relation 同步开始 #########################");
|
|
|
|
+ long start = System.currentTimeMillis();
|
|
|
|
+ for (MiGrationRelCode miGrationRelCode: MiGrationRelCode.values()){
|
|
|
|
+ log.info("######################### dt_relation "+miGrationRelCode.getCode()+"同步开始 #########################");
|
|
|
|
+ QueryCriteria queryCriteria = getQueryCriteria(miGrationRelCode.getCode());
|
|
|
|
+ List<SyncData> syncDataList = startMigrateForLog(context, migrationInfo, queryCriteria);
|
|
|
|
+ log.info("######################### dt_relation "+miGrationRelCode.getCode()+"同步结束 共计:"+syncDataList.size()+"条 #########################");
|
|
|
|
+ }
|
|
|
|
+ long end = System.currentTimeMillis();
|
|
|
|
+ log.info("######################### dt_relation 同步结束 "+(end-start)+"#########################");
|
|
|
|
+ return AdmResponse.success();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private QueryCriteria getQueryCriteria(String typeCode){
|
|
|
|
+ QueryCriteria queryCriteria = new QueryCriteria();
|
|
|
|
+ ObjectNode criteria = JsonNodeFactory.instance.objectNode();
|
|
|
|
+ criteria.put("valid", 1);
|
|
|
|
+ criteria.put("relCode", typeCode);
|
|
|
|
+ return queryCriteria;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private List<DataMigrationExcel> startMigrateForExcel(InstanceUrlParam context, MigrationInfo migrationInfo, QueryCriteria queryCriteria){
|
|
List<DataMigrationExcel> dataMigrationExcels = new ArrayList<>();
|
|
List<DataMigrationExcel> dataMigrationExcels = new ArrayList<>();
|
|
List<ObjectRelation> admRelations = getAdmData(context, queryCriteria);
|
|
List<ObjectRelation> admRelations = getAdmData(context, queryCriteria);
|
|
|
|
|
|
@@ -95,7 +115,7 @@ public class ObjectRelationMigration extends MigrationAbstractServiceImpl<Object
|
|
String insertUrl = requestUrl(context, migrationInfo, MigrationType.INSERT.getCode());
|
|
String insertUrl = requestUrl(context, migrationInfo, MigrationType.INSERT.getCode());
|
|
if(CollUtil.isEmpty(projectRelations)){
|
|
if(CollUtil.isEmpty(projectRelations)){
|
|
DataMigrationResponse dataMigrationResponse = insertBatch(admRelations, ObjectRelation.class, insertUrl);
|
|
DataMigrationResponse dataMigrationResponse = insertBatch(admRelations, ObjectRelation.class, insertUrl);
|
|
- dataMigrationExcels.addAll(processData(dataMigrationResponse, MigrationType.INSERT.getDesc()));
|
|
|
|
|
|
+ dataMigrationExcels.addAll(processDataForExcel(dataMigrationResponse, MigrationType.INSERT.getDesc()));
|
|
return dataMigrationExcels;
|
|
return dataMigrationExcels;
|
|
}
|
|
}
|
|
List<ObjectNode> objectNodeListPro = JsonNodeUtils.toListNode(projectRelations, null, null);
|
|
List<ObjectNode> objectNodeListPro = JsonNodeUtils.toListNode(projectRelations, null, null);
|
|
@@ -108,7 +128,7 @@ public class ObjectRelationMigration extends MigrationAbstractServiceImpl<Object
|
|
if(!CollUtil.isEmpty(doSubtractFromInsert)){
|
|
if(!CollUtil.isEmpty(doSubtractFromInsert)){
|
|
List<ObjectRelation> insertData = toList(doSubtractFromInsert, admRelations);
|
|
List<ObjectRelation> insertData = toList(doSubtractFromInsert, admRelations);
|
|
DataMigrationResponse dataMigrationResponse = insertBatch(insertData, ObjectRelation.class, insertUrl);
|
|
DataMigrationResponse dataMigrationResponse = insertBatch(insertData, ObjectRelation.class, insertUrl);
|
|
- dataMigrationExcels.addAll(processData(dataMigrationResponse, MigrationType.INSERT.getDesc()));
|
|
|
|
|
|
+ dataMigrationExcels.addAll(processDataForExcel(dataMigrationResponse, MigrationType.INSERT.getDesc()));
|
|
}
|
|
}
|
|
|
|
|
|
//差集 删除
|
|
//差集 删除
|
|
@@ -117,7 +137,7 @@ public class ObjectRelationMigration extends MigrationAbstractServiceImpl<Object
|
|
List<String> deleteIds = doSubtractFromDelete.entrySet().stream().map(en -> en.getKey()).collect(Collectors.toList());
|
|
List<String> deleteIds = doSubtractFromDelete.entrySet().stream().map(en -> en.getKey()).collect(Collectors.toList());
|
|
String delUrl = requestUrl(context, migrationInfo, MigrationType.DELETE.getCode());
|
|
String delUrl = requestUrl(context, migrationInfo, MigrationType.DELETE.getCode());
|
|
DataMigrationResponse dataMigrationResponse = deleteBatch(deleteIds, ObjectRelation.class, delUrl);
|
|
DataMigrationResponse dataMigrationResponse = deleteBatch(deleteIds, ObjectRelation.class, delUrl);
|
|
- dataMigrationExcels.addAll(processData(dataMigrationResponse, MigrationType.DELETE.getDesc()));
|
|
|
|
|
|
+ dataMigrationExcels.addAll(processDataForExcel(dataMigrationResponse, MigrationType.DELETE.getDesc()));
|
|
}
|
|
}
|
|
|
|
|
|
//交集更新
|
|
//交集更新
|
|
@@ -130,13 +150,69 @@ public class ObjectRelationMigration extends MigrationAbstractServiceImpl<Object
|
|
List<ObjectRelation> updateData = toList(compareData, admRelations);
|
|
List<ObjectRelation> updateData = toList(compareData, admRelations);
|
|
String updateUrl = requestUrl(context, migrationInfo, MigrationType.UPDATE.getCode());
|
|
String updateUrl = requestUrl(context, migrationInfo, MigrationType.UPDATE.getCode());
|
|
DataMigrationResponse dataMigrationResponse = updateBatch(updateData, ObjectRelation.class, updateUrl);
|
|
DataMigrationResponse dataMigrationResponse = updateBatch(updateData, ObjectRelation.class, updateUrl);
|
|
- dataMigrationExcels.addAll(processData(dataMigrationResponse, MigrationType.UPDATE.getDesc()));
|
|
|
|
|
|
+ dataMigrationExcels.addAll(processDataForExcel(dataMigrationResponse, MigrationType.UPDATE.getDesc()));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return dataMigrationExcels;
|
|
return dataMigrationExcels;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ private List<SyncData> startMigrateForLog(InstanceUrlParam context, MigrationInfo migrationInfo, QueryCriteria queryCriteria){
|
|
|
|
+ List<SyncData> syncDataList = new ArrayList<>();
|
|
|
|
+ List<ObjectRelation> admRelations = getAdmData(context, queryCriteria);
|
|
|
|
+
|
|
|
|
+ String queryUrl = requestUrl(context, migrationInfo, MigrationType.QUERY.getCode());
|
|
|
|
+ List<ObjectRelation> projectRelations = getProjectData(queryCriteria, ObjectRelation.class, queryUrl);
|
|
|
|
+ if(CollUtil.isEmpty(admRelations)){
|
|
|
|
+ log.error(" ######################### dt_relation adm已交付:"+ ResponseCode.C0320.getDesc() +" 同步结束 #########################");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ String insertUrl = requestUrl(context, migrationInfo, MigrationType.INSERT.getCode());
|
|
|
|
+ if(CollUtil.isEmpty(projectRelations)){
|
|
|
|
+ DataMigrationResponse dataMigrationResponse = insertBatch(admRelations, ObjectRelation.class, insertUrl);
|
|
|
|
+ syncDataList = processDataForLog(dataMigrationResponse, MigrationType.INSERT.getDesc());
|
|
|
|
+ }
|
|
|
|
+ List<ObjectNode> objectNodeListPro = JsonNodeUtils.toListNode(projectRelations, null, null);
|
|
|
|
+ Map<String,Object> projectDefineMap = toEntityMap(objectNodeListPro, ObjectRelation.class);
|
|
|
|
+ List<ObjectNode> objectNodeListAdm = JsonNodeUtils.toListNode(admRelations, null, null);
|
|
|
|
+ Map<String,Object> admDefineMap = toEntityMap(objectNodeListAdm, ObjectRelation.class);
|
|
|
|
+
|
|
|
|
+ //差集 新增
|
|
|
|
+ Map<String,Object> doSubtractFromInsert = doSubtractAdd(admDefineMap, projectDefineMap);
|
|
|
|
+ if(!CollUtil.isEmpty(doSubtractFromInsert)){
|
|
|
|
+ List<ObjectRelation> insertData = toList(doSubtractFromInsert, admRelations);
|
|
|
|
+ DataMigrationResponse dataMigrationResponse = insertBatch(insertData, ObjectRelation.class, insertUrl);
|
|
|
|
+ syncDataList.addAll(processDataForLog(dataMigrationResponse, MigrationType.INSERT.getDesc()));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ //差集 删除
|
|
|
|
+ Map<String,Object> doSubtractFromDelete = doSubtractDel(admDefineMap, projectDefineMap);
|
|
|
|
+ if(!CollUtil.isEmpty(doSubtractFromDelete)){
|
|
|
|
+ List<String> deleteIds = doSubtractFromDelete.entrySet().stream().map(en -> en.getKey()).collect(Collectors.toList());
|
|
|
|
+ String delUrl = requestUrl(context, migrationInfo, MigrationType.DELETE.getCode());
|
|
|
|
+
|
|
|
|
+ //处理删除的数据
|
|
|
|
+ DataMigrationResponse dataMigrationResponse = deleteBatch(deleteIds, ObjectRelation.class, delUrl);
|
|
|
|
+ List<String> successIds = (List<String>) dataMigrationResponse.getData();
|
|
|
|
+ List<ObjectRelation> delObjs = toListByIds(successIds, admRelations);
|
|
|
|
+ dataMigrationResponse.setData(delObjs);
|
|
|
|
+ syncDataList.addAll(processDataForLog(dataMigrationResponse, MigrationType.DELETE.getDesc()));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ //交集更新
|
|
|
|
+ Map<String,Object> intersectionUpdateFrom = doIntersectionGetFrom(admDefineMap, projectDefineMap);
|
|
|
|
+ Map<String,Object> intersectionUpdateTo = doIntersectionGetTo(admDefineMap, projectDefineMap);
|
|
|
|
|
|
|
|
+ if(!CollUtil.isEmpty(intersectionUpdateFrom) && !CollUtil.isEmpty(intersectionUpdateTo)){
|
|
|
|
+ Map<String, Object> compareData = compareData(intersectionUpdateFrom, intersectionUpdateTo);
|
|
|
|
+ if(CollUtil.isNotEmpty(compareData) && compareData.size() > 0){
|
|
|
|
+ List<ObjectRelation> updateData = toList(compareData, admRelations);
|
|
|
|
+ String updateUrl = requestUrl(context, migrationInfo, MigrationType.UPDATE.getCode());
|
|
|
|
+ DataMigrationResponse dataMigrationResponse = updateBatch(updateData, ObjectRelation.class, updateUrl);
|
|
|
|
+ syncDataList.addAll(processDataForLog(dataMigrationResponse, MigrationType.UPDATE.getDesc()));
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return super.addSynLog(context, syncDataList);
|
|
|
|
+ }
|
|
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -160,11 +236,18 @@ public class ObjectRelationMigration extends MigrationAbstractServiceImpl<Object
|
|
*/
|
|
*/
|
|
public List<ObjectRelation> toList(Map<String, Object> fromMap, List<ObjectRelation> fromList) {
|
|
public List<ObjectRelation> toList(Map<String, Object> fromMap, List<ObjectRelation> fromList) {
|
|
if(CollUtil.isEmpty(fromMap) || CollUtil.isEmpty(fromList)){
|
|
if(CollUtil.isEmpty(fromMap) || CollUtil.isEmpty(fromList)){
|
|
- return null;
|
|
|
|
|
|
+ return Collections.emptyList();
|
|
|
|
+ }
|
|
|
|
+ return toListByIds(fromMap.keySet(), fromList);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public List<ObjectRelation> toListByIds(Collection<String> ids, List<ObjectRelation> fromList) {
|
|
|
|
+ if(CollUtil.isEmpty(ids) || CollUtil.isEmpty(fromList)){
|
|
|
|
+ return Collections.emptyList();
|
|
}
|
|
}
|
|
- List<ObjectRelation> results = new ArrayList<>(fromMap.size());
|
|
|
|
|
|
+ List<ObjectRelation> results = new ArrayList<>(ids.size());
|
|
Map<String, ObjectRelation> objectRelationMap = CollUtil.fieldValueMap(fromList, BaseEntity.PROP_ID);
|
|
Map<String, ObjectRelation> objectRelationMap = CollUtil.fieldValueMap(fromList, BaseEntity.PROP_ID);
|
|
- for(String key : fromMap.keySet()){
|
|
|
|
|
|
+ for(String key : ids){
|
|
results.add(objectRelationMap.get(key));
|
|
results.add(objectRelationMap.get(key));
|
|
}
|
|
}
|
|
return results;
|
|
return results;
|
|
@@ -204,7 +287,7 @@ public class ObjectRelationMigration extends MigrationAbstractServiceImpl<Object
|
|
* @return
|
|
* @return
|
|
*/
|
|
*/
|
|
@Override
|
|
@Override
|
|
- public List<DataMigrationExcel> processData(DataMigrationResponse dataMigrationResponse, String type) {
|
|
|
|
|
|
+ public List<DataMigrationExcel> processDataForExcel(DataMigrationResponse dataMigrationResponse, String type) {
|
|
if(CollUtil.isEmpty(dataMigrationResponse.getData()) && CollUtil.isEmpty(dataMigrationResponse.getErrorMsg())){
|
|
if(CollUtil.isEmpty(dataMigrationResponse.getData()) && CollUtil.isEmpty(dataMigrationResponse.getErrorMsg())){
|
|
return Collections.emptyList();
|
|
return Collections.emptyList();
|
|
}
|
|
}
|
|
@@ -232,4 +315,36 @@ public class ObjectRelationMigration extends MigrationAbstractServiceImpl<Object
|
|
}
|
|
}
|
|
return dataMigrationExcels;
|
|
return dataMigrationExcels;
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 将目标集合处理成SyncData(日志)格式的集合 入库
|
|
|
|
+ *
|
|
|
|
+ * @param dataMigrationResponse
|
|
|
|
+ * @param type insert/delete
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ @Override
|
|
|
|
+ public List<SyncData> processDataForLog(DataMigrationResponse dataMigrationResponse, String type) {
|
|
|
|
+ if(CollUtil.isEmpty(dataMigrationResponse.getData()) && CollUtil.isEmpty(dataMigrationResponse.getErrorMsg())){
|
|
|
|
+ return Collections.emptyList();
|
|
|
|
+ }
|
|
|
|
+ List<SyncData> syncDataList = new ArrayList<>();
|
|
|
|
+ if(CollUtil.isNotEmpty(dataMigrationResponse.getData())){
|
|
|
|
+ for(Object obj : dataMigrationResponse.getData()){
|
|
|
|
+ ObjectRelation relation = (ObjectRelation) obj;
|
|
|
|
+ SyncData syncData = new SyncData();
|
|
|
|
+ syncData.setTableName(MigrationTable.DTRALATION.getCode());
|
|
|
|
+ syncData.setType(String.join(StrUtil.DASHED,relation.getRelCode(), relation.getGroupCode()));
|
|
|
|
+ syncData.setTargetId(relation.getId());
|
|
|
|
+ syncData.setFromId(relation.getObjFrom());
|
|
|
|
+ syncData.setToId(relation.getObjTo());
|
|
|
|
+ syncData.setOps(type);//操作
|
|
|
|
+ syncDataList.add(syncData);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if(CollUtil.isNotEmpty(dataMigrationResponse.getErrorMsg())){
|
|
|
|
+ syncDataList.addAll(addErrorInfoForLog(dataMigrationResponse.getErrorMsg()));
|
|
|
|
+ }
|
|
|
|
+ return syncDataList;
|
|
|
|
+ }
|
|
}
|
|
}
|