|
@@ -32,7 +32,7 @@ import java.util.stream.Collectors;
|
|
|
* @date 2021/12/1 19:38
|
|
|
*/
|
|
|
@Slf4j
|
|
|
-public class DefineTypeMigration extends MigrationAbstractServiceImpl<ObjectTypeDefine> implements IDataMigration, IDataMigrationProcess<ObjectTypeDefine> {
|
|
|
+public class DefineTypeMigration extends MigrationAbstractServiceImpl<ObjectTypeDefine> implements IDataMigration, IDefineDataMigration<ObjectTypeDefine>, IDataMigrationProcess<ObjectTypeDefine> {
|
|
|
|
|
|
private static DefineTypeMigration instance;
|
|
|
|
|
@@ -49,82 +49,23 @@ public class DefineTypeMigration extends MigrationAbstractServiceImpl<ObjectType
|
|
|
}
|
|
|
return instance;
|
|
|
}
|
|
|
-
|
|
|
-
|
|
|
/**
|
|
|
- * 数据迁移
|
|
|
+ * 数据迁移 迁移项目级 集团级 字典信息
|
|
|
*
|
|
|
* @param context
|
|
|
* @param migrationInfo
|
|
|
- * @return
|
|
|
+ * @return excel
|
|
|
*/
|
|
|
@Override
|
|
|
public List<DataMigrationExcel> migrateForExcel(InstanceUrlParam context, MigrationInfo migrationInfo) {
|
|
|
log.info("######################### DefineType 数据迁移内容获取开始 #########################");
|
|
|
- long start = System.currentTimeMillis();
|
|
|
- List<DataMigrationExcel> dataMigrationExcels = new ArrayList<>();
|
|
|
-
|
|
|
- QueryCriteria queryCriteria = getQueryCriteria();
|
|
|
+ QueryCriteria queryCriteria = getCustomQueryCriteria();
|
|
|
|
|
|
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;
|
|
|
- }
|
|
|
-
|
|
|
- //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()));
|
|
|
-
|
|
|
- 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);
|
|
|
-
|
|
|
- //差集 新增
|
|
|
- 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)+" #########################");
|
|
|
+ List<DataMigrationExcel> dataMigrationExcels = compareByData(admDefineList, projectDefineList);
|
|
|
+ log.info("######################### DefineType 数据迁移内容获取结束 #########################");
|
|
|
return dataMigrationExcels;
|
|
|
}
|
|
|
|
|
@@ -134,7 +75,7 @@ public class DefineTypeMigration extends MigrationAbstractServiceImpl<ObjectType
|
|
|
long start = System.currentTimeMillis();
|
|
|
List<SyncData> syncDataList = new ArrayList<>();
|
|
|
|
|
|
- QueryCriteria queryCriteria = getQueryCriteria();
|
|
|
+ QueryCriteria queryCriteria = getCustomQueryCriteria();
|
|
|
|
|
|
List<ObjectTypeDefine> admDefineList = getAdmData(context, queryCriteria);
|
|
|
String queryUrl = requestUrl(context, migrationInfo, MigrationType.QUERY.getCode());
|
|
@@ -173,7 +114,7 @@ public class DefineTypeMigration extends MigrationAbstractServiceImpl<ObjectType
|
|
|
String delUrl = requestUrl(context, migrationInfo, MigrationType.DELETE.getCode());
|
|
|
DataMigrationResponse dataMigrationResponse = deleteBatch(deleteIds, ObjectTypeDefine.class, delUrl);
|
|
|
List<String> successIds = (List<String>) dataMigrationResponse.getData();
|
|
|
- List<ObjectTypeDefine> delObjs = toListByIds(successIds, admDefineList);
|
|
|
+ List<ObjectTypeDefine> delObjs = toListByIds(successIds, projectDefineList);
|
|
|
dataMigrationResponse.setData(delObjs);
|
|
|
syncDataList.addAll(processDataForLog(dataMigrationResponse, MigrationType.DELETE.getCode()));
|
|
|
}
|
|
@@ -211,28 +152,6 @@ 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 作为拼接符
|
|
@@ -305,6 +224,11 @@ public class DefineTypeMigration extends MigrationAbstractServiceImpl<ObjectType
|
|
|
excel.setCode(objectTypeDefine.getCode());
|
|
|
excel.setName(objectTypeDefine.getName());
|
|
|
excel.setType(type);
|
|
|
+ if(objectTypeDefine.getGroupCode().equals("0") && objectTypeDefine.getProjectId().equals("0")){
|
|
|
+ excel.setMark("标准字典");
|
|
|
+ }else{
|
|
|
+ excel.setMark("自定义字典");
|
|
|
+ }
|
|
|
dataMigrationExcels.add(excel);
|
|
|
}
|
|
|
return dataMigrationExcels;
|
|
@@ -342,4 +266,185 @@ public class DefineTypeMigration extends MigrationAbstractServiceImpl<ObjectType
|
|
|
return syncDataList;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 获取标准字典数量,默认获取有效数据
|
|
|
+ *
|
|
|
+ * @param context
|
|
|
+ * @param queryCriteria
|
|
|
+ * @return count
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public Long getAdmCountData(InstanceUrlParam context, QueryCriteria queryCriteria) {
|
|
|
+ Long typeCount = DigitalDefineFacade.queryObjectTypeForCount(context.getGroupCode(),context.getProjectId(),context.getUserId(),context.getUserId(),queryCriteria);
|
|
|
+ return typeCount;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 标准字典 根据整体数量进行比较
|
|
|
+ *
|
|
|
+ * @param context
|
|
|
+ * @param migrationInfo
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public AdmResponse compareByCount(InstanceUrlParam context, MigrationInfo migrationInfo) {
|
|
|
+ QueryCriteria queryCriteria = getCriterionQueryCriteria();
|
|
|
+ queryCriteria.setOnlyCount(true);
|
|
|
+ long admCont = getAdmCountData(context, queryCriteria);
|
|
|
+
|
|
|
+ String queryUrl = requestUrl(context, migrationInfo, MigrationType.QUERY.getCode());
|
|
|
+ long proCount = queryCountByHttp(queryUrl, queryCriteria);
|
|
|
+ //是否需要更新字典
|
|
|
+ boolean needUpdateDic = true;
|
|
|
+ List<DataMigrationExcel> dataMigrationExcels = new ArrayList<>();
|
|
|
+ if(admCont - proCount == 0){
|
|
|
+ dataMigrationExcels = compareCriterionByData(context, migrationInfo);
|
|
|
+ if(CollUtil.isEmpty(dataMigrationExcels)){
|
|
|
+ needUpdateDic = false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //验证失败 需要更新字典
|
|
|
+ if(needUpdateDic){
|
|
|
+ String msg = "交付数据标准字典与项目现场标准字典不匹配,请联系管理者确认是否需要字典升级";
|
|
|
+ AdmResponse admResponse = AdmResponse.failure(msg);
|
|
|
+ DataMigrationExcel dataMigrationExcel = new DataMigrationExcel();
|
|
|
+ dataMigrationExcel.setId("error");
|
|
|
+ dataMigrationExcel.setName(msg);
|
|
|
+ dataMigrationExcels.add(dataMigrationExcel);
|
|
|
+ admResponse.setContent(dataMigrationExcels);
|
|
|
+ return admResponse;
|
|
|
+ }else{
|
|
|
+ return AdmResponse.success();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 标准字典 根据整体数据进行逐条对比
|
|
|
+ *
|
|
|
+ * @param context
|
|
|
+ * @param migrationInfo
|
|
|
+ * @return AdmResponse
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public List<DataMigrationExcel> compareCriterionByData(InstanceUrlParam context, MigrationInfo migrationInfo) {
|
|
|
+ log.info("######################### DefineType 数据迁移 标准字典验证 开始 #########################");
|
|
|
+ QueryCriteria queryCriteria = getCriterionQueryCriteria();
|
|
|
+ List<ObjectTypeDefine> admDefineList = getAdmData(context, queryCriteria);
|
|
|
+ String queryUrl = requestUrl(context, migrationInfo, MigrationType.QUERY.getCode());
|
|
|
+ List<ObjectTypeDefine> projectDefineList = getProjectData(queryCriteria, ObjectTypeDefine.class, queryUrl);
|
|
|
+ List<DataMigrationExcel> dataMigrationExcels = compareByData(admDefineList, projectDefineList);
|
|
|
+ log.info("######################### DefineType 数据迁移 标准字典验证 结束 #########################");
|
|
|
+ return dataMigrationExcels;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 比较数据
|
|
|
+ *
|
|
|
+ * @param admDefineList
|
|
|
+ * @param projectDefineList
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public List<DataMigrationExcel> compareByData(List<ObjectTypeDefine> admDefineList, List<ObjectTypeDefine> projectDefineList ) {
|
|
|
+ long start = System.currentTimeMillis();
|
|
|
+ List<DataMigrationExcel> dataMigrationExcels = new ArrayList<>();
|
|
|
+ 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());
|
|
|
+ if(CollUtil.isEmpty(objectNodeList)){
|
|
|
+ log.info("######################### DefineType 批量插入数据获取 #########################");
|
|
|
+ //DataMigrationResponse dataMigrationResponse = insertBatch(admDefineList, ObjectTypeDefine.class, insertUrl);
|
|
|
+ dataMigrationExcels.addAll(processDataForExcel(admDefineList, MigrationType.CREATE.getCode()));
|
|
|
+
|
|
|
+ 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);
|
|
|
+
|
|
|
+ //差集 新增
|
|
|
+ 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;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 项目级、集团级定义
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private QueryCriteria getCustomQueryCriteria(){
|
|
|
+ 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;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 标志字典数量获取
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private QueryCriteria getCriterionQueryCriteria(){
|
|
|
+ QueryCriteria queryCriteria = new QueryCriteria();
|
|
|
+ ObjectNode criteria = JsonNodeFactory.instance.objectNode();
|
|
|
+ criteria.put("valid", 1);
|
|
|
+ criteria.put("groupCode", 0);
|
|
|
+ criteria.put("projectId", 0);
|
|
|
+ queryCriteria.setCriteria(criteria);
|
|
|
+ queryCriteria.setSize(-1L);
|
|
|
+ return queryCriteria;
|
|
|
+ }
|
|
|
}
|