|
@@ -9,8 +9,12 @@ import com.persagy.dmp.basic.utils.JsonNodeUtils;
|
|
|
import com.persagy.dmp.common.constant.ResponseCode;
|
|
|
import com.persagy.dmp.digital.client.DigitalObjectFacade;
|
|
|
import com.persagy.dmp.digital.entity.ObjectDigital;
|
|
|
+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.migration.constant.MigrationConstant;
|
|
|
+import com.persagy.proxy.migration.constant.MigrationObjType;
|
|
|
+import com.persagy.proxy.migration.constant.MigrationTable;
|
|
|
import com.persagy.proxy.migration.constant.MigrationType;
|
|
|
import com.persagy.proxy.migration.model.DataMigrationExcel;
|
|
|
import com.persagy.proxy.migration.model.DataMigrationResponse;
|
|
@@ -55,29 +59,111 @@ public class ObjectDigitalMigration extends MigrationAbstractServiceImpl<ObjectD
|
|
|
* @return
|
|
|
*/
|
|
|
@Override
|
|
|
- public List<DataMigrationExcel> migrate(InstanceUrlParam context, MigrationInfo migrationInfo) {
|
|
|
+ public List<DataMigrationExcel> migrateForExcel(InstanceUrlParam context, MigrationInfo migrationInfo) {
|
|
|
log.info("######################### dt_object 同步开始 #########################");
|
|
|
long start = System.currentTimeMillis();
|
|
|
List<DataMigrationExcel> dataMigrationExcels = new ArrayList<>();
|
|
|
|
|
|
- //for(MigrationObjType objType : MigrationObjType.values()){
|
|
|
- //log.info("######################### dt_object "+objType.getCode()+"同步开始 #########################");
|
|
|
- QueryCriteria queryCriteria = new QueryCriteria();
|
|
|
- queryCriteria.setSize(-1L);
|
|
|
- ObjectNode criteria = JsonNodeFactory.instance.objectNode();
|
|
|
- criteria.put("valid", 1);
|
|
|
- criteria.put("objType", "equipment");
|
|
|
- //criteria.put("objType", objType.getCode());
|
|
|
- queryCriteria.setCriteria(criteria);
|
|
|
- dataMigrationExcels.addAll(startMigrate(context,migrationInfo,queryCriteria));
|
|
|
- //log.info("######################### dt_object "+objType.getCode()+"同步结束 #########################");
|
|
|
- //}
|
|
|
+ for(MigrationObjType objType : MigrationObjType.values()){
|
|
|
+ log.info("######################### dt_object "+objType.getCode()+"同步开始 #########################");
|
|
|
+
|
|
|
+ QueryCriteria queryCriteria = getQueryCriteria(objType.getCode());
|
|
|
+ dataMigrationExcels.addAll(startMigrateForExcel(context,migrationInfo,queryCriteria));
|
|
|
+
|
|
|
+ log.info("######################### dt_object "+objType.getCode()+"同步结束 #########################");
|
|
|
+ }
|
|
|
+
|
|
|
long end = System.currentTimeMillis();
|
|
|
log.info("######################### dt_object 数据迁移已结束 时间:"+(end-start)+" #########################");
|
|
|
return dataMigrationExcels;
|
|
|
}
|
|
|
|
|
|
- private List<DataMigrationExcel> startMigrate(InstanceUrlParam context, MigrationInfo migrationInfo, QueryCriteria queryCriteria) {
|
|
|
+ @Override
|
|
|
+ public AdmResponse migrateForLog(InstanceUrlParam context, MigrationInfo migrationInfo) {
|
|
|
+ log.info("######################### dt_object 同步开始 #########################");
|
|
|
+ long start = System.currentTimeMillis();
|
|
|
+ for(MigrationObjType objType : MigrationObjType.values()){
|
|
|
+ log.info("######################### dt_object "+objType.getCode()+"同步开始 #########################");
|
|
|
+
|
|
|
+ QueryCriteria queryCriteria = getQueryCriteria(objType.getCode());
|
|
|
+ List<SyncData> syncDataList = startMigrateForLog(context,migrationInfo,queryCriteria);
|
|
|
+
|
|
|
+ log.info("######################### dt_object "+objType.getCode()+"同步结束 共计:"+syncDataList.size()+"条 #########################");
|
|
|
+ }
|
|
|
+ long end = System.currentTimeMillis();
|
|
|
+ log.info("######################### dt_object 数据迁移已结束 时间:"+(end-start)+" #########################");
|
|
|
+ return AdmResponse.success();
|
|
|
+ }
|
|
|
+
|
|
|
+ private QueryCriteria getQueryCriteria(String typeCode){
|
|
|
+ QueryCriteria queryCriteria = new QueryCriteria();
|
|
|
+ queryCriteria.setSize(-1L);
|
|
|
+ ObjectNode criteria = JsonNodeFactory.instance.objectNode();
|
|
|
+ criteria.put("valid", 1);
|
|
|
+ criteria.put("objType", typeCode);
|
|
|
+ queryCriteria.setCriteria(criteria);
|
|
|
+ return queryCriteria;
|
|
|
+ }
|
|
|
+
|
|
|
+ private List<SyncData> startMigrateForLog(InstanceUrlParam context, MigrationInfo migrationInfo, QueryCriteria queryCriteria) {
|
|
|
+ List<SyncData> syncDataList = new ArrayList<>();
|
|
|
+ List<ObjectNode> admData = getAdmData(context,queryCriteria);
|
|
|
+
|
|
|
+ String queryUrl = requestUrl(context, migrationInfo, MigrationType.QUERY.getCode());
|
|
|
+ List<ObjectDigital> projectData = getProjectData(queryCriteria, ObjectDigital.class, queryUrl);
|
|
|
+ List<ObjectNode> objectNodeList = JsonNodeUtils.toListNode(projectData, null, null);
|
|
|
+
|
|
|
+ if(CollUtil.isEmpty(admData)){
|
|
|
+ log.error(" ######################### dt_object adm已交付:"+ ResponseCode.C0320.getDesc() +" 同步结束 #########################");
|
|
|
+ }
|
|
|
+
|
|
|
+ String insertUrl = requestUrl(context, migrationInfo, MigrationType.INSERT.getCode());
|
|
|
+ if(CollUtil.isEmpty(objectNodeList)){
|
|
|
+ DataMigrationResponse dataMigrationResponse = insertBatch(admData, ObjectDigital.class, insertUrl);
|
|
|
+ syncDataList = processDataForLog(dataMigrationResponse, MigrationType.INSERT.getDesc());
|
|
|
+ }
|
|
|
+ Map<String,Object> projectMap = toEntityMap(objectNodeList, ObjectDigital.class);
|
|
|
+ Map<String,Object> admMap = toEntityMap(admData, ObjectDigital.class);
|
|
|
+ //差集 新增
|
|
|
+ Map<String,Object> doSubtractFromInsert = doSubtractAdd(admMap, projectMap);
|
|
|
+ if(!CollUtil.isEmpty(doSubtractFromInsert)){
|
|
|
+ List<ObjectNode> insertData = toList(doSubtractFromInsert, admData);
|
|
|
+ DataMigrationResponse dataMigrationResponse = insertBatch(insertData, ObjectDigital.class, insertUrl);
|
|
|
+ syncDataList.addAll(processDataForLog(dataMigrationResponse, MigrationType.INSERT.getDesc()));
|
|
|
+ }
|
|
|
+
|
|
|
+ //差集 删除
|
|
|
+ Map<String,Object> doSubtractFromDelete = doSubtractDel(admMap, projectMap);
|
|
|
+ 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, ObjectDigital.class, delUrl);
|
|
|
+ List<String> successIds = (List<String>) dataMigrationResponse.getData();
|
|
|
+ List<ObjectNode> delObjs = toListByIds(successIds, admData);
|
|
|
+ dataMigrationResponse.setData(delObjs);
|
|
|
+ syncDataList.addAll(processDataForLog(dataMigrationResponse, MigrationType.DELETE.getDesc()));
|
|
|
+ }
|
|
|
+
|
|
|
+ //交集更新
|
|
|
+ Map<String,Object> intersectionUpdateFrom = doIntersectionGetFrom(admMap, projectMap);
|
|
|
+ Map<String,Object> intersectionUpdateTo = doIntersectionGetTo(admMap, projectMap);
|
|
|
+
|
|
|
+ if(!CollUtil.isEmpty(intersectionUpdateFrom) && !CollUtil.isEmpty(intersectionUpdateTo)){
|
|
|
+ Map<String, Object> compareData = compareData(intersectionUpdateFrom, intersectionUpdateTo);
|
|
|
+ if(CollUtil.isNotEmpty(compareData) && compareData.size() > 0){
|
|
|
+ List<ObjectNode> updateData = toList(compareData, admData);
|
|
|
+ String updateUrl = requestUrl(context, migrationInfo, MigrationType.UPDATE.getCode());
|
|
|
+ DataMigrationResponse dataMigrationResponse = updateBatch(updateData, ObjectDigital.class, updateUrl);
|
|
|
+ syncDataList.addAll(processDataForLog(dataMigrationResponse, MigrationType.UPDATE.getDesc()));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return super.addSynLog(context, syncDataList);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ private List<DataMigrationExcel> startMigrateForExcel(InstanceUrlParam context, MigrationInfo migrationInfo, QueryCriteria queryCriteria) {
|
|
|
List<DataMigrationExcel> dataMigrationExcels = new ArrayList<>();
|
|
|
List<ObjectNode> admData = getAdmData(context,queryCriteria);
|
|
|
|
|
@@ -93,7 +179,7 @@ public class ObjectDigitalMigration extends MigrationAbstractServiceImpl<ObjectD
|
|
|
String insertUrl = requestUrl(context, migrationInfo, MigrationType.INSERT.getCode());
|
|
|
if(CollUtil.isEmpty(objectNodeList)){
|
|
|
DataMigrationResponse dataMigrationResponse = insertBatch(admData, ObjectDigital.class, insertUrl);
|
|
|
- dataMigrationExcels.addAll(processData(dataMigrationResponse, MigrationType.INSERT.getDesc()));
|
|
|
+ dataMigrationExcels.addAll(processDataForExcel(dataMigrationResponse, MigrationType.INSERT.getDesc()));
|
|
|
return dataMigrationExcels;
|
|
|
}
|
|
|
Map<String,Object> projectMap = toEntityMap(objectNodeList, ObjectDigital.class);
|
|
@@ -103,7 +189,7 @@ public class ObjectDigitalMigration extends MigrationAbstractServiceImpl<ObjectD
|
|
|
if(!CollUtil.isEmpty(doSubtractFromInsert)){
|
|
|
List<ObjectNode> insertData = toList(doSubtractFromInsert, admData);
|
|
|
DataMigrationResponse dataMigrationResponse = insertBatch(insertData, ObjectDigital.class, insertUrl);
|
|
|
- dataMigrationExcels.addAll(processData(dataMigrationResponse, MigrationType.INSERT.getDesc()));
|
|
|
+ dataMigrationExcels.addAll(processDataForExcel(dataMigrationResponse, MigrationType.INSERT.getDesc()));
|
|
|
}
|
|
|
|
|
|
//差集 删除
|
|
@@ -112,7 +198,7 @@ public class ObjectDigitalMigration extends MigrationAbstractServiceImpl<ObjectD
|
|
|
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, ObjectDigital.class, delUrl);
|
|
|
- dataMigrationExcels.addAll(processData(dataMigrationResponse, MigrationType.DELETE.getDesc()));
|
|
|
+ dataMigrationExcels.addAll(processDataForExcel(dataMigrationResponse, MigrationType.DELETE.getDesc()));
|
|
|
}
|
|
|
|
|
|
//交集更新
|
|
@@ -125,7 +211,7 @@ public class ObjectDigitalMigration extends MigrationAbstractServiceImpl<ObjectD
|
|
|
List<ObjectNode> updateData = toList(compareData, admData);
|
|
|
String updateUrl = requestUrl(context, migrationInfo, MigrationType.UPDATE.getCode());
|
|
|
DataMigrationResponse dataMigrationResponse = updateBatch(updateData, ObjectDigital.class, updateUrl);
|
|
|
- dataMigrationExcels.addAll(processData(dataMigrationResponse, MigrationType.UPDATE.getDesc()));
|
|
|
+ dataMigrationExcels.addAll(processDataForExcel(dataMigrationResponse, MigrationType.UPDATE.getDesc()));
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -156,9 +242,17 @@ public class ObjectDigitalMigration extends MigrationAbstractServiceImpl<ObjectD
|
|
|
*/
|
|
|
public List<ObjectNode> toList(Map<String, Object> fromMap, List<ObjectNode> fromList) {
|
|
|
if(CollUtil.isEmpty(fromMap) || CollUtil.isEmpty(fromList)){
|
|
|
- return null;
|
|
|
+ return Collections.emptyList();
|
|
|
}
|
|
|
- List<ObjectNode> results = new ArrayList<>(fromMap.size());
|
|
|
+ return toListByIds(fromMap.keySet(), fromList);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public List<ObjectNode> toListByIds(Collection<String> ids, List<ObjectNode> fromList) {
|
|
|
+ if(CollUtil.isEmpty(ids) || CollUtil.isEmpty(fromList)){
|
|
|
+ return Collections.emptyList();
|
|
|
+ }
|
|
|
+ List<ObjectNode> results = new ArrayList<>(ids.size());
|
|
|
|
|
|
Map<String, ObjectNode> objectDigitalMap = new HashMap<>(fromList.size());
|
|
|
for(ObjectNode node : fromList){
|
|
@@ -168,12 +262,14 @@ public class ObjectDigitalMigration extends MigrationAbstractServiceImpl<ObjectD
|
|
|
objectDigitalMap.put(node.get("id").asText(), node);
|
|
|
}
|
|
|
|
|
|
- for(String key : fromMap.keySet()){
|
|
|
+ for(String key : ids){
|
|
|
results.add(objectDigitalMap.get(key));
|
|
|
}
|
|
|
return results;
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+
|
|
|
/**
|
|
|
* 拼接访问链接
|
|
|
*
|
|
@@ -207,7 +303,7 @@ public class ObjectDigitalMigration extends MigrationAbstractServiceImpl<ObjectD
|
|
|
* @return
|
|
|
*/
|
|
|
@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())){
|
|
|
return Collections.emptyList();
|
|
|
}
|
|
@@ -234,4 +330,40 @@ public class ObjectDigitalMigration extends MigrationAbstractServiceImpl<ObjectD
|
|
|
}
|
|
|
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()){
|
|
|
+ ObjectDigital digital = (ObjectDigital) obj;
|
|
|
+ SyncData syncData = new SyncData();
|
|
|
+ syncData.setTableName(MigrationTable.DTOBJECT.getCode());
|
|
|
+ syncData.setName(digital.getName());
|
|
|
+ syncData.setObjType(digital.getObjType());
|
|
|
+ syncData.setType(digital.getObjType());
|
|
|
+ syncData.setClassCode(digital.getClassCode());
|
|
|
+ syncData.setTargetId(digital.getId());
|
|
|
+ syncData.setLocalId(digital.getLocalId());
|
|
|
+ syncData.setLocalName(digital.getLocalName());
|
|
|
+ syncData.setOps(type);//操作
|
|
|
+ syncDataList.add(syncData);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(CollUtil.isNotEmpty(dataMigrationResponse.getErrorMsg())){
|
|
|
+ syncDataList.addAll(addErrorInfoForLog(dataMigrationResponse.getErrorMsg()));
|
|
|
+ }
|
|
|
+ return syncDataList;
|
|
|
+ }
|
|
|
+
|
|
|
}
|