|
@@ -10,8 +10,11 @@ import com.persagy.dmp.common.constant.ResponseCode;
|
|
|
import com.persagy.dmp.common.model.entity.BaseEntity;
|
|
|
import com.persagy.dmp.define.client.DigitalDefineFacade;
|
|
|
import com.persagy.dmp.define.entity.ObjectTypeDefine;
|
|
|
+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.MigrationTable;
|
|
|
import com.persagy.proxy.migration.constant.MigrationType;
|
|
|
import com.persagy.proxy.migration.model.DataMigrationExcel;
|
|
|
import com.persagy.proxy.migration.model.DataMigrationResponse;
|
|
@@ -19,10 +22,7 @@ import com.persagy.proxy.migration.model.MigrationInfo;
|
|
|
import com.persagy.proxy.migration.service.Impl.MigrationAbstractServiceImpl;
|
|
|
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;
|
|
|
|
|
|
/**
|
|
@@ -59,28 +59,82 @@ public class DefineTypeMigration extends MigrationAbstractServiceImpl<ObjectType
|
|
|
* @return
|
|
|
*/
|
|
|
@Override
|
|
|
- public List<DataMigrationExcel> migrate(InstanceUrlParam context, MigrationInfo migrationInfo) {
|
|
|
- log.info("######################### DefineType 同步开始 #########################");
|
|
|
+ public List<DataMigrationExcel> migrateForExcel(InstanceUrlParam context, MigrationInfo migrationInfo) {
|
|
|
+ log.info("######################### DefineType 数据迁移内容获取开始 #########################");
|
|
|
long start = System.currentTimeMillis();
|
|
|
List<DataMigrationExcel> dataMigrationExcels = new ArrayList<>();
|
|
|
|
|
|
- QueryCriteria queryCriteria = new QueryCriteria();
|
|
|
- ObjectNode criteria = JsonNodeFactory.instance.objectNode();
|
|
|
- criteria.put("valid", 1);
|
|
|
- ObjectNode groupCode = JsonNodeFactory.instance.objectNode();
|
|
|
- groupCode.put("$ne", "0");
|
|
|
+ QueryCriteria queryCriteria = getQueryCriteria();
|
|
|
|
|
|
- ObjectNode projectId = JsonNodeFactory.instance.objectNode();
|
|
|
- projectId.put("$ne", "0");
|
|
|
+ List<ObjectTypeDefine> admDefineList = getAdmData(context, queryCriteria);
|
|
|
+ String queryUrl = requestUrl(context, migrationInfo, MigrationType.QUERY.getCode());
|
|
|
+ List<ObjectTypeDefine> projectDefineList = getProjectData(queryCriteria, ObjectTypeDefine.class, queryUrl);
|
|
|
+ List<ObjectNode> objectNodeList = JsonNodeUtils.toListNode(projectDefineList, null, null);
|
|
|
+ if(CollUtil.isEmpty(admDefineList)){
|
|
|
+ log.error(" ######################### DefineType adm已交付需要同步的数据:"+ ResponseCode.C0320.getDesc() +" 同步结束 #########################");
|
|
|
+ return dataMigrationExcels;
|
|
|
+ }
|
|
|
|
|
|
- ObjectNode andOr = JsonNodeFactory.instance.objectNode();
|
|
|
- andOr.putPOJO("groupCode", projectId);
|
|
|
- andOr.putPOJO("projectId", groupCode);
|
|
|
+ //String insertUrl = requestUrl(context, migrationInfo, MigrationType.INSERT.getCode());
|
|
|
+ if(CollUtil.isEmpty(objectNodeList)){
|
|
|
+ log.info("######################### DefineType 批量插入数据获取 #########################");
|
|
|
+ //DataMigrationResponse dataMigrationResponse = insertBatch(admDefineList, ObjectTypeDefine.class, insertUrl);
|
|
|
+ dataMigrationExcels.addAll(processDataForExcel(admDefineList, MigrationType.CREATE.getCode()));
|
|
|
|
|
|
- criteria.putPOJO("$andOr", andOr);
|
|
|
+ return dataMigrationExcels;
|
|
|
+ }
|
|
|
+ List<ObjectNode> objectNodeListPro = JsonNodeUtils.toListNode(objectNodeList, null, null);
|
|
|
+ Map<String,Object> projectDefineMap = toEntityMap(objectNodeListPro, ObjectTypeDefine.class);
|
|
|
+ List<ObjectNode> objectNodeListAdm = JsonNodeUtils.toListNode(admDefineList, null, null);
|
|
|
+ Map<String,Object> admDefineMap = toEntityMap(objectNodeListAdm, ObjectTypeDefine.class);
|
|
|
|
|
|
- queryCriteria.setCriteria(criteria);
|
|
|
- queryCriteria.setSize(-1L);
|
|
|
+ //差集 新增
|
|
|
+ log.info("######################### DefineType 批量处理新增数据获取 #########################");
|
|
|
+ Map<String,Object> doSubtractFromInsert = doSubtractAdd(admDefineMap, projectDefineMap);
|
|
|
+ if(!CollUtil.isEmpty(doSubtractFromInsert)){
|
|
|
+ List<ObjectTypeDefine> insertData = toList(doSubtractFromInsert, admDefineList);
|
|
|
+ //DataMigrationResponse dataMigrationResponse = insertBatch(insertData, ObjectTypeDefine.class, insertUrl);
|
|
|
+ dataMigrationExcels.addAll(processDataForExcel(insertData, MigrationType.CREATE.getCode()));
|
|
|
+ }
|
|
|
+
|
|
|
+ //差集 删除
|
|
|
+ log.info("######################### DefineType 批量处理删除数据获取 #########################");
|
|
|
+ Map<String,Object> doSubtractFromDelete = doSubtractDel(admDefineMap, projectDefineMap);
|
|
|
+ if(!CollUtil.isEmpty(doSubtractFromDelete)){
|
|
|
+ List<String> deleteIds = doSubtractFromDelete.entrySet().stream().map(en -> en.getKey()).collect(Collectors.toList());
|
|
|
+ List<ObjectTypeDefine> deleteData = toListByIds(deleteIds, projectDefineList);
|
|
|
+
|
|
|
+ /*String delUrl = requestUrl(context, migrationInfo, MigrationType.DELETE.getCode());
|
|
|
+ DataMigrationResponse dataMigrationResponse = deleteBatch(deleteIds, ObjectTypeDefine.class, delUrl);*/
|
|
|
+ dataMigrationExcels.addAll(processDataForExcel(deleteData, MigrationType.DELETE.getCode()));
|
|
|
+ }
|
|
|
+
|
|
|
+ //交集更新
|
|
|
+ log.info("######################### DefineType 批量处理更新数据获取 #########################");
|
|
|
+ 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<ObjectTypeDefine> updateData = toList(compareData, admDefineList);
|
|
|
+ //String updateUrl = requestUrl(context, migrationInfo, MigrationType.UPDATE.getCode());
|
|
|
+ //DataMigrationResponse dataMigrationResponse = updateBatch(updateData, ObjectTypeDefine.class, updateUrl);
|
|
|
+ dataMigrationExcels.addAll(processDataForExcel(updateData, MigrationType.UPDATE.getCode()));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ long end = System.currentTimeMillis();
|
|
|
+ log.info("######################### DefineType 数据迁移获取已结束 时间:"+(end-start)+" #########################");
|
|
|
+ return dataMigrationExcels;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public AdmResponse migrateForLog(InstanceUrlParam context, MigrationInfo migrationInfo) {
|
|
|
+ log.info("######################### DefineType 同步开始 #########################");
|
|
|
+ long start = System.currentTimeMillis();
|
|
|
+ List<SyncData> syncDataList = new ArrayList<>();
|
|
|
+
|
|
|
+ QueryCriteria queryCriteria = getQueryCriteria();
|
|
|
|
|
|
List<ObjectTypeDefine> admDefineList = getAdmData(context, queryCriteria);
|
|
|
String queryUrl = requestUrl(context, migrationInfo, MigrationType.QUERY.getCode());
|
|
@@ -88,16 +142,13 @@ public class DefineTypeMigration extends MigrationAbstractServiceImpl<ObjectType
|
|
|
List<ObjectNode> objectNodeList = JsonNodeUtils.toListNode(projectDefineList, null, null);
|
|
|
if(CollUtil.isEmpty(admDefineList)){
|
|
|
log.error(" ######################### DefineType adm已交付需要同步的数据:"+ ResponseCode.C0320.getDesc() +" 同步结束 #########################");
|
|
|
- return dataMigrationExcels;
|
|
|
}
|
|
|
|
|
|
- String insertUrl = requestUrl(context, migrationInfo, MigrationType.INSERT.getCode());
|
|
|
+ String insertUrl = requestUrl(context, migrationInfo, MigrationType.CREATE.getCode());
|
|
|
if(CollUtil.isEmpty(objectNodeList)){
|
|
|
log.info("######################### DefineType 批量插入数据 #########################");
|
|
|
DataMigrationResponse dataMigrationResponse = insertBatch(admDefineList, ObjectTypeDefine.class, insertUrl);
|
|
|
- dataMigrationExcels.addAll(processData(dataMigrationResponse, MigrationType.INSERT.getDesc()));
|
|
|
-
|
|
|
- return dataMigrationExcels;
|
|
|
+ syncDataList.addAll(processDataForLog(dataMigrationResponse, MigrationType.CREATE.getCode()));
|
|
|
}
|
|
|
List<ObjectNode> objectNodeListPro = JsonNodeUtils.toListNode(objectNodeList, null, null);
|
|
|
Map<String,Object> projectDefineMap = toEntityMap(objectNodeListPro, ObjectTypeDefine.class);
|
|
@@ -110,7 +161,7 @@ public class DefineTypeMigration extends MigrationAbstractServiceImpl<ObjectType
|
|
|
if(!CollUtil.isEmpty(doSubtractFromInsert)){
|
|
|
List<ObjectTypeDefine> insertData = toList(doSubtractFromInsert, admDefineList);
|
|
|
DataMigrationResponse dataMigrationResponse = insertBatch(insertData, ObjectTypeDefine.class, insertUrl);
|
|
|
- dataMigrationExcels.addAll(processData(dataMigrationResponse, MigrationType.INSERT.getDesc()));
|
|
|
+ syncDataList.addAll(processDataForLog(dataMigrationResponse, MigrationType.CREATE.getCode()));
|
|
|
}
|
|
|
|
|
|
//差集 删除
|
|
@@ -118,11 +169,13 @@ public class DefineTypeMigration extends MigrationAbstractServiceImpl<ObjectType
|
|
|
Map<String,Object> doSubtractFromDelete = doSubtractDel(admDefineMap, projectDefineMap);
|
|
|
if(!CollUtil.isEmpty(doSubtractFromDelete)){
|
|
|
List<String> deleteIds = doSubtractFromDelete.entrySet().stream().map(en -> en.getKey()).collect(Collectors.toList());
|
|
|
- List<ObjectTypeDefine> deleteData = toList(doSubtractFromDelete, projectDefineList);
|
|
|
|
|
|
String delUrl = requestUrl(context, migrationInfo, MigrationType.DELETE.getCode());
|
|
|
DataMigrationResponse dataMigrationResponse = deleteBatch(deleteIds, ObjectTypeDefine.class, delUrl);
|
|
|
- dataMigrationExcels.addAll(processData(dataMigrationResponse, MigrationType.DELETE.getDesc()));
|
|
|
+ List<String> successIds = (List<String>) dataMigrationResponse.getData();
|
|
|
+ List<ObjectTypeDefine> delObjs = toListByIds(successIds, admDefineList);
|
|
|
+ dataMigrationResponse.setData(delObjs);
|
|
|
+ syncDataList.addAll(processDataForLog(dataMigrationResponse, MigrationType.DELETE.getCode()));
|
|
|
}
|
|
|
|
|
|
//交集更新
|
|
@@ -136,12 +189,13 @@ public class DefineTypeMigration extends MigrationAbstractServiceImpl<ObjectType
|
|
|
List<ObjectTypeDefine> updateData = toList(compareData, admDefineList);
|
|
|
String updateUrl = requestUrl(context, migrationInfo, MigrationType.UPDATE.getCode());
|
|
|
DataMigrationResponse dataMigrationResponse = updateBatch(updateData, ObjectTypeDefine.class, updateUrl);
|
|
|
- dataMigrationExcels.addAll(processData(dataMigrationResponse, MigrationType.UPDATE.getDesc()));
|
|
|
+ syncDataList.addAll(processDataForLog(dataMigrationResponse, MigrationType.UPDATE.getCode()));
|
|
|
}
|
|
|
}
|
|
|
long end = System.currentTimeMillis();
|
|
|
- log.info("######################### DefineType 数据迁移已结束 时间:"+(end-start)+" #########################");
|
|
|
- return dataMigrationExcels;
|
|
|
+ log.info("######################### DefineType 数据迁移已结束 时间:"+(end-start)+" 共计:"+syncDataList.size()+"条 #########################");
|
|
|
+ super.addSynLog(context, syncDataList);
|
|
|
+ return AdmResponse.success();
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -157,6 +211,28 @@ public class DefineTypeMigration extends MigrationAbstractServiceImpl<ObjectType
|
|
|
return types;
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+ private QueryCriteria getQueryCriteria(){
|
|
|
+ QueryCriteria queryCriteria = new QueryCriteria();
|
|
|
+ ObjectNode criteria = JsonNodeFactory.instance.objectNode();
|
|
|
+ criteria.put("valid", 1);
|
|
|
+ ObjectNode groupCode = JsonNodeFactory.instance.objectNode();
|
|
|
+ groupCode.put("$ne", "0");
|
|
|
+
|
|
|
+ ObjectNode projectId = JsonNodeFactory.instance.objectNode();
|
|
|
+ projectId.put("$ne", "0");
|
|
|
+
|
|
|
+ ObjectNode andOr = JsonNodeFactory.instance.objectNode();
|
|
|
+ andOr.putPOJO("groupCode", projectId);
|
|
|
+ andOr.putPOJO("projectId", groupCode);
|
|
|
+
|
|
|
+ criteria.putPOJO("$andOr", andOr);
|
|
|
+
|
|
|
+ queryCriteria.setCriteria(criteria);
|
|
|
+ queryCriteria.setSize(-1L);
|
|
|
+ return queryCriteria;
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 根据map转为需要处理的对象集合
|
|
|
* 使用 MigrationConstant.spliter 作为拼接符
|
|
@@ -164,14 +240,20 @@ public class DefineTypeMigration extends MigrationAbstractServiceImpl<ObjectType
|
|
|
* @param fromList
|
|
|
* @return
|
|
|
*/
|
|
|
-
|
|
|
public List<ObjectTypeDefine> toList(Map<String, Object> fromMap, List<ObjectTypeDefine> fromList) {
|
|
|
if(CollUtil.isEmpty(fromMap) || CollUtil.isEmpty(fromList)){
|
|
|
- return null;
|
|
|
+ return Collections.emptyList();
|
|
|
}
|
|
|
- List<ObjectTypeDefine> results = new ArrayList<>(fromMap.size());
|
|
|
+ return toListByIds(fromMap.keySet(), fromList);
|
|
|
+ }
|
|
|
+
|
|
|
+ public List<ObjectTypeDefine> toListByIds(Collection<String> ids, List<ObjectTypeDefine> fromList) {
|
|
|
+ if(CollUtil.isEmpty(ids) || CollUtil.isEmpty(fromList)){
|
|
|
+ return Collections.emptyList();
|
|
|
+ }
|
|
|
+ List<ObjectTypeDefine> results = new ArrayList<>(ids.size());
|
|
|
Map<String, ObjectTypeDefine> objectTypeDefineMap = CollUtil.fieldValueMap(fromList, BaseEntity.PROP_ID);
|
|
|
- for(String key : fromMap.keySet()){
|
|
|
+ for(String key : ids){
|
|
|
results.add(objectTypeDefineMap.get(StrUtil.trim(key)));
|
|
|
}
|
|
|
return results;
|
|
@@ -194,7 +276,7 @@ public class DefineTypeMigration extends MigrationAbstractServiceImpl<ObjectType
|
|
|
StringBuilder url = new StringBuilder(migrationInfo.getTargetUrl());
|
|
|
if(type.equals(MigrationType.QUERY.getCode())) {
|
|
|
url.append(MigrationConstant.DEF_CLASS);
|
|
|
- }else if(type.equals(MigrationType.INSERT.getCode())){
|
|
|
+ }else if(type.equals(MigrationType.CREATE.getCode())){
|
|
|
url.append(MigrationConstant.DEF_CLASS_INSERT);
|
|
|
}else if(type.equals(MigrationType.UPDATE.getCode())){
|
|
|
url.append(MigrationConstant.DEF_CLASS_UPDATE);
|
|
@@ -207,37 +289,57 @@ public class DefineTypeMigration extends MigrationAbstractServiceImpl<ObjectType
|
|
|
/**
|
|
|
* 将目标集合处理成excel格式的集合 使用与insert/delete
|
|
|
*
|
|
|
+ * @param list
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public List<DataMigrationExcel> processDataForExcel(Collection list, String type) {
|
|
|
+ if(CollUtil.isEmpty(list) ){
|
|
|
+ return Collections.emptyList();
|
|
|
+ }
|
|
|
+ List<DataMigrationExcel> dataMigrationExcels = new ArrayList<>();
|
|
|
+ for(Object obj : list){
|
|
|
+ ObjectTypeDefine objectTypeDefine = (ObjectTypeDefine) obj;
|
|
|
+ DataMigrationExcel excel = new DataMigrationExcel();
|
|
|
+ excel.setId(objectTypeDefine.getId());
|
|
|
+ excel.setCode(objectTypeDefine.getCode());
|
|
|
+ excel.setName(objectTypeDefine.getName());
|
|
|
+ excel.setType(type);
|
|
|
+ dataMigrationExcels.add(excel);
|
|
|
+ }
|
|
|
+ return dataMigrationExcels;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 将目标集合处理成SyncData(日志)格式的集合 入库
|
|
|
+ *
|
|
|
* @param dataMigrationResponse
|
|
|
+ * @param type insert/delete
|
|
|
* @return
|
|
|
*/
|
|
|
@Override
|
|
|
- public List<DataMigrationExcel> processData(DataMigrationResponse dataMigrationResponse, String type) {
|
|
|
+ public List<SyncData> processDataForLog(DataMigrationResponse dataMigrationResponse, String type) {
|
|
|
if(CollUtil.isEmpty(dataMigrationResponse.getData()) && CollUtil.isEmpty(dataMigrationResponse.getErrorMsg())){
|
|
|
return Collections.emptyList();
|
|
|
}
|
|
|
- List<DataMigrationExcel> dataMigrationExcels = new ArrayList<>();
|
|
|
+ List<SyncData> syncDataList = new ArrayList<>();
|
|
|
if(CollUtil.isNotEmpty(dataMigrationResponse.getData())){
|
|
|
for(Object obj : dataMigrationResponse.getData()){
|
|
|
- if(!type.equals(MigrationType.DELETE.getCode())){
|
|
|
- ObjectTypeDefine objectTypeDefine = (ObjectTypeDefine) obj;
|
|
|
- DataMigrationExcel excel = new DataMigrationExcel();
|
|
|
- excel.setId(objectTypeDefine.getId());
|
|
|
- excel.setCode(objectTypeDefine.getCode());
|
|
|
- excel.setName(objectTypeDefine.getName());
|
|
|
- excel.setType(type);
|
|
|
- dataMigrationExcels.add(excel);
|
|
|
- }else{
|
|
|
- DataMigrationExcel excel = new DataMigrationExcel();
|
|
|
- excel.setId(obj.toString());
|
|
|
- excel.setType(type);
|
|
|
- dataMigrationExcels.add(excel);
|
|
|
- }
|
|
|
+ ObjectTypeDefine objectTypeDefine = (ObjectTypeDefine) obj;
|
|
|
+ SyncData syncData = new SyncData();
|
|
|
+ syncData.setTableName(MigrationTable.DTDEFINETYPE.getCode());
|
|
|
+ syncData.setTargetId(objectTypeDefine.getId());
|
|
|
+ syncData.setName(objectTypeDefine.getName());
|
|
|
+ syncData.setCode(objectTypeDefine.getCode());
|
|
|
+ syncData.setObjectType(objectTypeDefine.getObjType());
|
|
|
+ syncData.setType(type);//操作
|
|
|
+ syncDataList.add(syncData);
|
|
|
}
|
|
|
}
|
|
|
if(CollUtil.isNotEmpty(dataMigrationResponse.getErrorMsg())){
|
|
|
- dataMigrationExcels.addAll(addErrorInfo(dataMigrationResponse.getErrorMsg()));
|
|
|
+ syncDataList.addAll(addErrorInfoForLog(dataMigrationResponse.getErrorMsg(), MigrationTable.DTDEFINETYPE.getCode()));
|
|
|
}
|
|
|
- return dataMigrationExcels;
|
|
|
+ return syncDataList;
|
|
|
}
|
|
|
|
|
|
}
|