浏览代码

2021-1125
上传代码结构优化;兼容大小写格式的bim坐标

zhaoyk 3 年之前
父节点
当前提交
a4c2bbe700

+ 4 - 0
src/main/java/com/persagy/bdtp/adm/entity/db/AdmUploadLog.java

@@ -39,6 +39,10 @@ public class AdmUploadLog {
 
 	private String uploadFlag;
 
+	public AdmUploadLog() {
+
+	}
+
 	public AdmUploadLog(String jobId, String operator, String operation) {
 		this.jobId = jobId;
 		this.operator = operator;

+ 3 - 2
src/main/java/com/persagy/bdtp/adm/entity/db/BaseAdmDataEntity.java

@@ -31,8 +31,6 @@ abstract public class BaseAdmDataEntity extends BaseAdmEntity {
 
 	protected Integer valid;
 
-	protected String uploadFlag;
-
 	@JsonSerialize(using = DateToLongSerializer.class)
 	protected Timestamp ts;
 
@@ -40,6 +38,9 @@ abstract public class BaseAdmDataEntity extends BaseAdmEntity {
 	@TableField(exist = false)
 	protected Integer state;
 
+	/** 待废弃 */
+	protected String uploadFlag;
+
 }
 
 class DateToLongSerializer extends JsonSerializer<Date> {

+ 83 - 53
src/main/java/com/persagy/bdtp/adm/service/impl/SyncAppImpl.java

@@ -341,11 +341,11 @@ public class SyncAppImpl implements ISyncApp {
 
 		QueryCriteria criteria = ServiceUtil.getQueryCriteria(objectMapper);
 		buildDownloadQueryCriteria(criteria, operator, bdtpDownloadTs);
-		criteria.getCriteria().put("createApp", AdmConst.CREATOR_APP);
+		criteria.getCriteria().put("createApp", AdmConst.CREATOR_APP); //TODO 临时逻辑,只下载app端创建的关系
 
 		List<ObjectNode> rels = ServiceUtil.queryAllPage(() -> rwdClient.queryRelation(groupCode, projectId, AdmConst.APP_ID, userId, criteria), criteria, new Pagination(500));
 		/*
-		//TODO debug 关系数据量过大,测试下载1000条
+		//debug 关系数据量过大,测试下载1000条
 		criteria.setPage(1L);
 		criteria.setSize(1000L);
 		List<ObjectNode> rels = ServiceUtil.call(() -> rwdClient.queryRelation(groupCode, projectId, AdmConst.APP_ID, userId, criteria));
@@ -368,13 +368,16 @@ public class SyncAppImpl implements ISyncApp {
 			return new UploadRtn(AdmConst.UPLOAD_FINISHED);
 
 		String operator = getOperator(clientId, userId);
+		String timestamp = DateUtil.format(new Date(), DatePattern.PURE_DATETIME_PATTERN);
+
+		UploadParams uploadParams = new UploadParams(groupCode, projectId, userId, uploadData.getUploadJobId(), operator, timestamp);
 
 		//检查上传任务状态
-		String status = checkUploadStatus(uploadData.getUploadJobId(), operator, projectId);
+		String status = checkUploadStatus(uploadParams);
 		if(status != null)
 			return new UploadRtn(status);
 
-		String timestamp = DateUtil.format(new Date(), DatePattern.PURE_DATETIME_PATTERN);
+
 		List<AdmUploadLog> logs = new ArrayList<>();
 
 		//TODO 分布式事务管理
@@ -382,18 +385,18 @@ public class SyncAppImpl implements ISyncApp {
 			//上传bdtp数据
 			if (CollUtil.isNotEmpty(uploadData.getObjects())) {
 				D2mMessage d2mMessage = new D2mMessage("object");
-				List<ObjectNode>[] objData = prepareBdtpData(uploadData.getObjects(), operator, timestamp, uploadData.getUploadJobId(), d2mMessage, logs);
-				uploadObjs(groupCode, projectId, userId, objData);
+				List<ObjectNode>[] objData = prepareBdtpData(uploadData.getObjects(), uploadParams, d2mMessage, logs);
+				uploadObjs(uploadParams, objData);
 
-				sendD2mMessage(d2mMessage, projectId, uploadData.getUploadJobId());
+				sendD2mMessage(d2mMessage, uploadParams);
 			}
 			if (CollUtil.isNotEmpty(uploadData.getRelations())) {
-				List<ObjectNode>[] relData = prepareBdtpData(uploadData.getRelations(), operator, timestamp, uploadData.getUploadJobId(), null, logs);
-				uploadRels(groupCode, projectId, userId, relData);
+				List<ObjectNode>[] relData = prepareBdtpData(uploadData.getRelations(), uploadParams, null, logs);
+				uploadRels(uploadParams, relData);
 			}
 
 			//上传adm数据
-			uploadAdmData(uploadData, operator, timestamp, projectId, logs);
+			uploadAdmData(uploadData, uploadParams, logs);
 		} catch (Exception e) {
 			markStatus(uploadData.getUploadJobId(), AdmConst.UPLOAD_ERROR);
 
@@ -411,16 +414,16 @@ public class SyncAppImpl implements ISyncApp {
 		return new UploadRtn(AdmConst.UPLOAD_FINISHED);
 	}
 
-	private String checkUploadStatus(String uploadJobId, String operator, String projectId){
-		AdmUploadJob job = uploadJobMapper.selectOne(new QueryWrapper<AdmUploadJob>().eq("id", uploadJobId));
+	private String checkUploadStatus(UploadParams uploadParams){
+		AdmUploadJob job = uploadJobMapper.selectOne(new QueryWrapper<AdmUploadJob>().eq("id", uploadParams.jobId));
 		if(job != null) {
 			if(!AdmConst.UPLOAD_ERROR.equals(job.getStatus()))
 				return job.getStatus();
 		} else {
 			job = new AdmUploadJob();
-			job.setId(uploadJobId);
-			job.setProjectId(projectId);
-			job.setOperator(operator);
+			job.setId(uploadParams.jobId);
+			job.setProjectId(uploadParams.projectId);
+			job.setOperator(uploadParams.operator);
 			job.setStatus(AdmConst.UPLOAD_PROCESSING);
 			job.setStartTime(new Timestamp(System.currentTimeMillis()));
 			uploadJobMapper.insert(job);
@@ -436,21 +439,21 @@ public class SyncAppImpl implements ISyncApp {
 		uploadJobMapper.updateById(job);
 	}
 
-	private void uploadObjs(String groupCode, String projectId, String userId, List<ObjectNode>[] data) {
+	private void uploadObjs(UploadParams ps, List<ObjectNode>[] data) {
 		if(data[0].size() > 0)
-			ServiceUtil.call(() -> objectClient.create(groupCode, projectId, AdmConst.APP_ID, userId, data[0]));
+			ServiceUtil.call(() -> objectClient.create(ps.groupCode, ps.projectId, AdmConst.APP_ID, ps.userId, data[0]));
 		if (data[1].size() > 0)
-			ServiceUtil.call(() -> objectClient.update(groupCode, projectId, AdmConst.APP_ID, userId, data[1]));
+			ServiceUtil.call(() -> objectClient.update(ps.groupCode, ps.projectId, AdmConst.APP_ID, ps.userId, data[1]));
 	}
 
-	private void uploadRels(String groupCode, String projectId, String userId, List<ObjectNode>[] data) {
+	private void uploadRels(UploadParams ps, List<ObjectNode>[] data) {
 		if(data[0].size() > 0)
-			ServiceUtil.call(() -> relationClient.create(groupCode, projectId, AdmConst.APP_ID, userId, data[0]));
+			ServiceUtil.call(() -> relationClient.create(ps.groupCode, ps.projectId, AdmConst.APP_ID, ps.userId, data[0]));
 		if (data[1].size() > 0)
-			ServiceUtil.call(() -> relationClient.update(groupCode, projectId, AdmConst.APP_ID, userId, data[1]));
+			ServiceUtil.call(() -> relationClient.update(ps.groupCode, ps.projectId, AdmConst.APP_ID, ps.userId, data[1]));
 	}
 
-	private List<ObjectNode>[] prepareBdtpData(List<ObjectNode> list, String operator, String time, String jobId, D2mMessage d2mMessage, List<AdmUploadLog> logs){
+	private List<ObjectNode>[] prepareBdtpData(List<ObjectNode> list, UploadParams uploadParams, D2mMessage d2mMessage, List<AdmUploadLog> logs){
 		List<ObjectNode> updateList = new ArrayList<>();
 		Iterator<ObjectNode> iter = list.iterator();
 		while (iter.hasNext()) {
@@ -473,12 +476,12 @@ public class SyncAppImpl implements ISyncApp {
 						d2mMessage.appendModifyItem(entity);
 				}
 
-				log = new AdmUploadLog(jobId, operator, remove ? AdmUploadLog.REMOVE : AdmUploadLog.MODIFY);
+				log = new AdmUploadLog(uploadParams.jobId, uploadParams.operator, remove ? AdmUploadLog.REMOVE : AdmUploadLog.MODIFY);
 				log.setData(entity, objectMapper);
 
 				entity.put("updateApp", AdmConst.CREATOR_APP);
-				entity.put("modifier", operator);
-				entity.put("modifiedTime", time);
+				entity.put("modifier", uploadParams.operator);
+				entity.put("modifiedTime", uploadParams.time);
 
 				//TODO 可能需要进行删除信息点操作
 
@@ -486,16 +489,15 @@ public class SyncAppImpl implements ISyncApp {
 				if(d2mMessage != null && needsD2m(entity))
 					d2mMessage.appendAddItem(entity);
 
-				log = new AdmUploadLog(jobId, operator, AdmUploadLog.ADD);
+				log = new AdmUploadLog(uploadParams.jobId, uploadParams.operator, AdmUploadLog.ADD);
 				log.setData(entity, objectMapper);
 
 				entity.put("createApp", AdmConst.CREATOR_APP);
-				entity.put("creator", operator);
-				entity.put("creationTime", time);
+				entity.put("creator", uploadParams.operator);
+				entity.put("creationTime", uploadParams.time);
 
-				//TODO 临时处理,方便之后的增量查询
-				entity.put("modifier", operator);
-				entity.put("modifiedTime", time);
+				entity.put("modifier", uploadParams.operator);
+				entity.put("modifiedTime", uploadParams.time);
 			}
 			logs.add(log);
 		}
@@ -508,32 +510,32 @@ public class SyncAppImpl implements ISyncApp {
 	}
 
 	@Transactional(rollbackFor = Exception.class)
-	public void uploadAdmData(UploadData uploadData, String operator, String time, String projectId, List<AdmUploadLog> logs) {
+	public void uploadAdmData(UploadData uploadData, UploadParams uploadParams, List<AdmUploadLog> logs) {
 		if (CollUtil.isNotEmpty(uploadData.getPipes())) {
-			uploadAdmEntities(uploadData.getPipes(), operator, time, projectId, uploadData.getUploadJobId(), pipeMapper, new D2mMessage("pipe"), logs, true);
+			uploadAdmEntities(uploadData.getPipes(), uploadParams, pipeMapper, new D2mMessage("pipe"), logs, true);
 		}
 
 		if (CollUtil.isNotEmpty(uploadData.getJobSpace())) {
-			uploadAdmEntities(uploadData.getJobSpace(), operator, time, projectId, uploadData.getUploadJobId(), jobSpaceMapper, null, logs, false);
+			uploadAdmEntities(uploadData.getJobSpace(), uploadParams, jobSpaceMapper, null, logs, false);
 		}
 		if (CollUtil.isNotEmpty(uploadData.getProblemArch())) {
-			uploadAdmEntities(uploadData.getProblemArch(), operator, time, projectId, uploadData.getUploadJobId(), problemArchMapper, null, logs, false);
+			uploadAdmEntities(uploadData.getProblemArch(), uploadParams, problemArchMapper, null, logs, false);
 		}
 		if (CollUtil.isNotEmpty(uploadData.getProblemEquip())) {
-			uploadAdmEntities(uploadData.getProblemEquip(), operator, time, projectId, uploadData.getUploadJobId(), problemEquipMapper, null, logs, false);
+			uploadAdmEntities(uploadData.getProblemEquip(), uploadParams, problemEquipMapper, null, logs, false);
 		}
 		if (CollUtil.isNotEmpty(uploadData.getFile())) {
-			uploadAdmEntities(uploadData.getFile(), operator, time, projectId, uploadData.getUploadJobId(), fileMapper, null, logs, false);
+			uploadAdmEntities(uploadData.getFile(), uploadParams, fileMapper, null, logs, false);
 		}
 		if (CollUtil.isNotEmpty(uploadData.getQrCode())) {
-			uploadAdmEntities(uploadData.getQrCode(), operator, time, projectId, uploadData.getUploadJobId(), qrCodeMapper, null, logs, false);
+			uploadAdmEntities(uploadData.getQrCode(), uploadParams, qrCodeMapper, null, logs, false);
 		}
 		if (CollUtil.isNotEmpty(uploadData.getServeArea())) {
-			uploadAdmEntities(uploadData.getServeArea(), operator, time, projectId, uploadData.getUploadJobId(), serveAreaMapper, null, logs, false);
+			uploadAdmEntities(uploadData.getServeArea(), uploadParams, serveAreaMapper, null, logs, false);
 		}
 	}
 
-	private <T extends BaseAdmDataEntity> void uploadAdmEntities(List<T> list, String operator, String time, String projectId, String jobId, BaseMapper<T> mapper, D2mMessage d2mMessage, List<AdmUploadLog> logs, boolean merge) {
+	private <T extends BaseAdmDataEntity> void uploadAdmEntities(List<T> list, UploadParams ps, BaseMapper<T> mapper, D2mMessage d2mMessage, List<AdmUploadLog> logs, boolean merge) {
 		List<T> updateList = new ArrayList<>();
 		Iterator<T> iter = list.iterator();
 		while (iter.hasNext()) {
@@ -553,7 +555,7 @@ public class SyncAppImpl implements ISyncApp {
 						d2mMessage.appendModifyItem(entity);
 				}
 
-				log = new AdmUploadLog(jobId, operator, remove ? AdmUploadLog.REMOVE : AdmUploadLog.MODIFY);
+				log = new AdmUploadLog(ps.jobId, ps.operator, remove ? AdmUploadLog.REMOVE : AdmUploadLog.MODIFY);
 
 				//任务空间不上传轮廓数据
 				if(entity instanceof AdmJobSpace)
@@ -562,7 +564,7 @@ public class SyncAppImpl implements ISyncApp {
 				if(d2mMessage != null)
 					d2mMessage.appendAddItem(entity);
 
-				log = new AdmUploadLog(jobId, operator, AdmUploadLog.ADD);
+				log = new AdmUploadLog(ps.jobId, ps.operator, AdmUploadLog.ADD);
 			}
 			log.setData(entity, objectMapper);
 			logs.add(log);
@@ -573,8 +575,8 @@ public class SyncAppImpl implements ISyncApp {
 		//insert
 		if(list.size() > 0) {
 			for(T entity : list) {
-				entity.setCreator(operator);
-				entity.setCreationTime(time);
+				entity.setCreator(ps.operator);
+				entity.setCreationTime(ps.time);
 				mapper.insert(entity);
 			}
 		}
@@ -597,13 +599,13 @@ public class SyncAppImpl implements ISyncApp {
 				if(merge)
 					entity = mergeEntity(entity, dbObjsMap.get(entity.getId()));
 
-				entity.setModifier(operator);
-				entity.setModifiedTime(time);
+				entity.setModifier(ps.operator);
+				entity.setModifiedTime(ps.time);
 				mapper.updateById(entity);
 			}
 		}
 
-		sendD2mMessage(d2mMessage, projectId, jobId);
+		sendD2mMessage(d2mMessage, ps);
 	}
 
 	private <T extends BaseAdmDataEntity> T mergeEntity(T obj, T dbObj) {
@@ -623,7 +625,7 @@ public class SyncAppImpl implements ISyncApp {
 			return infos;
 	}
 
-	private void sendD2mMessage(D2mMessage d2mMessage, String projectId, String jobId){
+	private void sendD2mMessage(D2mMessage d2mMessage, UploadParams ps){
 		if (d2mMessage != null && d2mMessage.isNotEmpty()) {
 //			if(d2mMessage.getAddItems() != null){
 //				for(Object o : d2mMessage.getAddItems()) {
@@ -640,7 +642,7 @@ public class SyncAppImpl implements ISyncApp {
 //					markM2dState(o);
 //				}
 //			}
-			markM2dState(d2mMessage, projectId, jobId);
+			markM2dState(d2mMessage, ps);
 			syncModel.sendMessageToModel(d2mMessage);
 		}
 	}
@@ -657,7 +659,10 @@ public class SyncAppImpl implements ISyncApp {
 		JsonNode l = node.get("location");
 		if(l != null) {
 			try {
-				node.put("bimLocation", StrUtil.join(",", l.get("x").asDouble(), l.get("y").asDouble(), l.get("z").asDouble()));
+				if(l.get("x") != null)
+					node.put("bimLocation", StrUtil.join(",", l.get("x").asDouble(), l.get("y").asDouble(), l.get("z").asDouble()));
+				else if(l.get("X") != null)
+					node.put("bimLocation", StrUtil.join(",", l.get("X").asDouble(), l.get("Y").asDouble(), l.get("Z").asDouble()));
 				node.remove("location");
 			}catch (Exception e) {
 
@@ -665,12 +670,12 @@ public class SyncAppImpl implements ISyncApp {
 		}
 	}
 
-	private void markM2dState(D2mMessage d2mMessage, String projectId, String jobId){
+	private void markM2dState(D2mMessage d2mMessage, UploadParams ps){
 		AdmMessageP message = new AdmMessageP();
 		message.setId(d2mMessage.getId());
-		message.setProjectId(projectId);
+		message.setProjectId(ps.projectId);
 		message.setTriggerType("upload");
-		message.setSender(jobId);
+		message.setSender(ps.jobId);
 		message.setContent(d2mMessage);
 		message.setStatus(AdmConst.UPLOAD_PROCESSING);
 		message.setSendTime(new Timestamp(System.currentTimeMillis()));
@@ -678,4 +683,29 @@ public class SyncAppImpl implements ISyncApp {
 		messageMapper.insert(message);
 	}
 
+	private class UploadParams{
+
+		String groupCode;
+
+		String projectId;
+
+		String userId;
+
+		String jobId;
+
+		String operator;
+
+		String time;
+
+		public UploadParams(String groupCode, String projectId, String userId, String jobId, String operator, String time) {
+			this.groupCode = groupCode;
+			this.projectId = projectId;
+			this.userId = userId;
+			this.jobId = jobId;
+			this.operator = operator;
+			this.time = time;
+		}
+
+	}
+
 }

+ 24 - 0
src/test/java/com/persagy/bdtp/adm/test/AdmApplicationTests.java

@@ -374,4 +374,28 @@ public class AdmApplicationTests {
 		return info;
 	}
 
+	@Test
+	public void testLogData(){
+		List<AdmUploadLog> logs = logMapper.selectList(new QueryWrapper<AdmUploadLog>().eq("operation", "add").eq("entity_type", "equipment"));
+		ArrayList<Map> list = new ArrayList<>();
+		for(AdmUploadLog log : logs) {
+			System.out.println(log.getData());
+			try{
+				Map<String, Object> data = objectMapper.readValue(log.getData(), Map.class);
+				Map<String, Object> location = (Map)data.get("location");
+				Map<String, Object> map = new HashMap<>();
+				map.put("id", data.get("id"));
+				map.put("bimLocation", StrUtil.join(",", location.get("X"), location.get("Y"), location.get("Z")));
+				list.add(map);
+			}catch (Exception e){
+
+			}
+		}
+		try{
+			System.out.println(objectMapper.writeValueAsString(list));
+		}catch (Exception e){
+
+		}
+	}
+
 }