|
@@ -12,13 +12,13 @@ import com.persagy.bdtp.adm.client.DicClient;
|
|
|
import com.persagy.bdtp.adm.client.RwdClient;
|
|
|
import com.persagy.bdtp.adm.common.AdmConst;
|
|
|
import com.persagy.bdtp.adm.dao.*;
|
|
|
+import com.persagy.bdtp.adm.datatx.ObjectMapper4Tx;
|
|
|
import com.persagy.bdtp.adm.entity.*;
|
|
|
import com.persagy.bdtp.adm.entity.db.*;
|
|
|
import com.persagy.bdtp.adm.service.*;
|
|
|
import com.persagy.bdtp.adm.util.DataExtrasUtil;
|
|
|
import com.persagy.dmp.basic.model.QueryCriteria;
|
|
|
import com.persagy.dmp.common.constant.ValidEnum;
|
|
|
-import com.persagy.dmp.common.model.response.CommonResult;
|
|
|
import com.persagy.dmp.define.entity.RelationDefine;
|
|
|
import com.persagy.dmp.digital.client.DigitalObjectClient;
|
|
|
import com.persagy.dmp.digital.client.DigitalRelationClient;
|
|
@@ -27,8 +27,8 @@ import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
+import java.sql.Timestamp;
|
|
|
import java.util.*;
|
|
|
-import java.util.function.Supplier;
|
|
|
|
|
|
@Service
|
|
|
public class SyncAppImpl implements ISyncApp {
|
|
@@ -81,6 +81,24 @@ public class SyncAppImpl implements ISyncApp {
|
|
|
@Autowired
|
|
|
private IAdmLogService logService;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private AdmUploadJobMapper uploadJobMapper;
|
|
|
+
|
|
|
+ private final ObjectMapper4Tx mapper4Tx;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ public SyncAppImpl(ObjectMapper4Tx mapper4Tx) {
|
|
|
+ this.mapper4Tx = mapper4Tx;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public String getClientId(String userId) {
|
|
|
+ AdmClientFlag flagEntity = new AdmClientFlag();
|
|
|
+ flagEntity.setUserId(userId);
|
|
|
+ clientFlagMapper.insert(flagEntity);
|
|
|
+ return String.valueOf(flagEntity.getId());
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
public Dict downloadDict(String groupCode, String projectId, String userId) {
|
|
|
return queryDict(groupCode, projectId, userId, true, true);
|
|
@@ -95,7 +113,7 @@ public class SyncAppImpl implements ISyncApp {
|
|
|
|
|
|
//查询系统和设备定义
|
|
|
QueryCriteria criteria = ServiceUtil.getQueryCriteria(objectMapper, AdmConst.OBJ_TYPE_SYSTEM, AdmConst.OBJ_TYPE_EQUIPMENT);
|
|
|
- List<TypeDef> typeList = queryAllPage(() -> rwdClient.queryObjectType(groupCode, projectId, AdmConst.APP_ID, userId, criteria), criteria, new Pagination(500));
|
|
|
+ List<TypeDef> typeList = ServiceUtil.queryAllPage(() -> rwdClient.queryObjectType(groupCode, projectId, AdmConst.APP_ID, userId, criteria), criteria, new Pagination(500));
|
|
|
|
|
|
LinkedList<TypeDef> sysList = new LinkedList<>();
|
|
|
LinkedList<TypeDef> equipList = new LinkedList<>();
|
|
@@ -128,20 +146,6 @@ public class SyncAppImpl implements ISyncApp {
|
|
|
return data;
|
|
|
}
|
|
|
|
|
|
- private <T> List<T> queryAllPage(Supplier<CommonResult<List<T>>> action, QueryCriteria criteria, Pagination pagination){
|
|
|
- List<T> list = null;
|
|
|
- while (pagination.isHasNext()){
|
|
|
- criteria.setPage((long)pagination.getPageNum());
|
|
|
- criteria.setSize((long)pagination.getPageSize());
|
|
|
- if(list == null)
|
|
|
- list = ServiceUtil.call(action, pagination);
|
|
|
- else
|
|
|
- list.addAll(ServiceUtil.call(action, pagination));
|
|
|
- pagination.next();
|
|
|
- }
|
|
|
- return list;
|
|
|
- }
|
|
|
-
|
|
|
@Override
|
|
|
public Map<String, Object> downloadConfig(String groupCode, String projectId, String userId) {
|
|
|
//配置数据查询
|
|
@@ -195,14 +199,37 @@ public class SyncAppImpl implements ISyncApp {
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public BuildingData downloadBuildingData(String groupCode, String projectId, String userId, String uploadFlag, String buildingId, Long bdtpDownloadTs, Long admDownloadTs) {
|
|
|
- String operator = getOperator(uploadFlag, userId);
|
|
|
-
|
|
|
- //从bdtp下载对象(空间、竖井、设备)
|
|
|
- QueryCriteria objCriteria = ServiceUtil.getQueryCriteria(objectMapper,
|
|
|
- AdmConst.OBJ_TYPE_SPACE, AdmConst.OBJ_TYPE_SHAFT, AdmConst.OBJ_TYPE_SYSTEM, AdmConst.OBJ_TYPE_EQUIPMENT);
|
|
|
- buildDownloadQueryCriteria(objCriteria, buildingId, operator, bdtpDownloadTs);
|
|
|
- List<ObjectNode> objs = queryAllPage(() -> objectClient.query(groupCode, projectId, AdmConst.APP_ID, userId, objCriteria), objCriteria, new Pagination(500));
|
|
|
+ public BuildingData downloadBuildingData(String groupCode, String projectId, String userId, String clientId, String buildingId, Long bdtpDownloadTs, Long admDownloadTs) {
|
|
|
+ String operator = getOperator(clientId, userId);
|
|
|
+
|
|
|
+// //从bdtp下载对象(空间、竖井)
|
|
|
+// QueryCriteria archCriteria = ServiceUtil.getQueryCriteria(objectMapper, AdmConst.OBJ_TYPE_SPACE, AdmConst.OBJ_TYPE_SHAFT);
|
|
|
+// buildDownloadQueryCriteria(archCriteria, operator, bdtpDownloadTs);
|
|
|
+// ObjectNode rt = archCriteria.getCriteria().putObject("relationTo");
|
|
|
+// rt.put("graphCode", "ArchSubset");
|
|
|
+// rt.put("objFrom", buildingId);
|
|
|
+// List<ObjectNode> archList = ServiceUtil.queryAllPage(() -> objectClient.query(groupCode, projectId, AdmConst.APP_ID, userId, archCriteria), archCriteria, new Pagination(500));
|
|
|
+// //系统、设备
|
|
|
+// QueryCriteria eqCriteria = ServiceUtil.getQueryCriteria(objectMapper, AdmConst.OBJ_TYPE_SYSTEM, AdmConst.OBJ_TYPE_EQUIPMENT);
|
|
|
+// buildDownloadQueryCriteria(eqCriteria, operator, bdtpDownloadTs);
|
|
|
+// ObjectNode rf = eqCriteria.getCriteria().putObject("relationFrom");
|
|
|
+// rf.put("graphCode", "MechInArch");
|
|
|
+// rf.put("objTo", buildingId);
|
|
|
+// List<ObjectNode> eqList = ServiceUtil.queryAllPage(() -> objectClient.query(groupCode, projectId, AdmConst.APP_ID, userId, eqCriteria), eqCriteria, new Pagination(500));
|
|
|
+//
|
|
|
+// List<ObjectNode> objs = new ArrayList<>();
|
|
|
+// if(archList != null)
|
|
|
+// objs.addAll(archList);
|
|
|
+// if(eqList != null)
|
|
|
+// objs.addAll(eqList);
|
|
|
+
|
|
|
+ //从bdtp下载对象(空间、竖井、系统、设备)
|
|
|
+ QueryCriteria criteria = ServiceUtil.getQueryCriteria(objectMapper, AdmConst.OBJ_TYPE_SPACE, AdmConst.OBJ_TYPE_SHAFT, AdmConst.OBJ_TYPE_SYSTEM, AdmConst.OBJ_TYPE_EQUIPMENT);
|
|
|
+ buildDownloadQueryCriteria(criteria, operator, bdtpDownloadTs, buildingId);
|
|
|
+ List<ObjectNode> objs = ServiceUtil.queryAllPage(() -> objectClient.query(groupCode, projectId, AdmConst.APP_ID, userId, criteria), criteria, new Pagination(500));
|
|
|
+ if(objs == null)
|
|
|
+ objs = new ArrayList<>(0);
|
|
|
+
|
|
|
packInfos(objs);
|
|
|
test4Ts(objs);
|
|
|
|
|
@@ -237,15 +264,8 @@ public class SyncAppImpl implements ISyncApp {
|
|
|
return data;
|
|
|
}
|
|
|
|
|
|
- private String getOperator(String uploadFlag, String userId){
|
|
|
- AdmClientFlag clientFlag = clientFlagMapper.selectOne(new QueryWrapper<AdmClientFlag>().eq("client_flag", uploadFlag));
|
|
|
- if(clientFlag == null) {
|
|
|
- clientFlag = new AdmClientFlag();
|
|
|
- clientFlag.setClientFlag(uploadFlag);
|
|
|
- clientFlag.setUserId(userId);
|
|
|
- clientFlagMapper.insert(clientFlag);
|
|
|
- }
|
|
|
- return userId + ':' + clientFlag.getId();
|
|
|
+ private String getOperator(String clientId, String userId){
|
|
|
+ return userId + ':' + clientId;
|
|
|
}
|
|
|
|
|
|
private <T> QueryWrapper<T> buildDownloadQueryWrapper(QueryWrapper<T> wrapper, String projectId, String buildingId, String operator, Long lastDownloadTime){
|
|
@@ -264,15 +284,13 @@ public class SyncAppImpl implements ISyncApp {
|
|
|
return wrapper;
|
|
|
}
|
|
|
|
|
|
- private void buildDownloadQueryCriteria(QueryCriteria criteria, String buildingId, String operator, Long lastDownloadTime){
|
|
|
- if(StrUtil.isNotBlank(buildingId)) {
|
|
|
- //TODO 关联buildingId查询
|
|
|
- }
|
|
|
-
|
|
|
+ private void buildDownloadQueryCriteria(QueryCriteria criteria, String operator, Long lastDownloadTime, String buildingId){
|
|
|
if (lastDownloadTime != null && lastDownloadTime > 0) {
|
|
|
criteria.getCriteria().putObject("ts").put("$gt", lastDownloadTime);
|
|
|
criteria.getCriteria().putObject("modifier").put("$ne", operator); //TODO 暂时只能处理modifier
|
|
|
}
|
|
|
+ if(StrUtil.isNotBlank(buildingId))
|
|
|
+ criteria.getCriteria().put("buildingId", buildingId);
|
|
|
}
|
|
|
|
|
|
//TODO debug 接口未返回ts时,添加一个
|
|
@@ -289,13 +307,17 @@ public class SyncAppImpl implements ISyncApp {
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public ProjectData downloadProjectData(String groupCode, String projectId, String userId, String uploadFlag, Long bdtpDownloadTs, Long admDownloadTs) {
|
|
|
- String operator = getOperator(uploadFlag, userId);
|
|
|
+ public ProjectData downloadProjectData(String groupCode, String projectId, String userId, String clientId, Long bdtpDownloadTs, Long admDownloadTs) {
|
|
|
+ String operator = getOperator(clientId, userId);
|
|
|
|
|
|
QueryCriteria criteria = ServiceUtil.getQueryCriteria(objectMapper);
|
|
|
- buildDownloadQueryCriteria(criteria, null, operator, bdtpDownloadTs);
|
|
|
+ buildDownloadQueryCriteria(criteria, operator, bdtpDownloadTs, null);
|
|
|
|
|
|
- List<ObjectRelation> rels = queryAllPage(() -> relationClient.query(groupCode, projectId, AdmConst.APP_ID, userId, criteria), criteria, new Pagination(500));
|
|
|
+ //List<ObjectRelation> rels = ServiceUtil.queryAllPage(() -> relationClient.query(groupCode, projectId, AdmConst.APP_ID, userId, criteria), criteria, new Pagination(500));
|
|
|
+ //TODO debug 关系数据量过大,测试下载1000条
|
|
|
+ criteria.setPage(1L);
|
|
|
+ criteria.setSize(1000L);
|
|
|
+ List<ObjectNode> rels = ServiceUtil.call(() -> rwdClient.queryRelation(groupCode, projectId, AdmConst.APP_ID, userId, criteria));
|
|
|
test4Ts(rels);
|
|
|
|
|
|
ProjectData data = new ProjectData();
|
|
@@ -306,36 +328,76 @@ public class SyncAppImpl implements ISyncApp {
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public UploadRtn uploadData(UploadData uploadData, String groupCode, String projectId, String userId, String uploadFlag) {
|
|
|
+ public UploadRtn uploadData(UploadData uploadData, String groupCode, String projectId, String userId, String clientId) {
|
|
|
if(!uploadData.notEmpty())
|
|
|
- return new UploadRtn();
|
|
|
+ return new UploadRtn(AdmConst.UPLOAD_FINISHED);
|
|
|
|
|
|
- String operator = getOperator(uploadFlag, userId);
|
|
|
- String timestamp = DateUtil.format(new Date(), DatePattern.PURE_DATETIME_PATTERN);
|
|
|
+ String operator = getOperator(clientId, userId);
|
|
|
|
|
|
- UploadRtn rtn = new UploadRtn();
|
|
|
+ //检查上传任务状态
|
|
|
+ String status = checkUploadStatus(uploadData.getUploadJobId(), operator, projectId);
|
|
|
+ if(status != null)
|
|
|
+ return new UploadRtn(status);
|
|
|
+
|
|
|
+ String timestamp = DateUtil.format(new Date(), DatePattern.PURE_DATETIME_PATTERN);
|
|
|
List<AdmUploadLog> logs = new ArrayList<>();
|
|
|
|
|
|
- //上传bdtp数据
|
|
|
- if (CollUtil.isNotEmpty(uploadData.getObjects())) {
|
|
|
- List<ObjectNode>[] objData = prepareBdtpData(uploadData.getObjects(), operator, timestamp, uploadData.getUploadJobId(), logs);
|
|
|
- uploadObjs(groupCode, projectId, userId, objData);
|
|
|
- }
|
|
|
- if (CollUtil.isNotEmpty(uploadData.getRelations())) {
|
|
|
- List<ObjectNode>[] relData = prepareBdtpData(uploadData.getRelations(), operator, timestamp, uploadData.getUploadJobId(), logs);
|
|
|
- uploadRels(groupCode, projectId, userId, relData);
|
|
|
+ //TODO 分布式事务管理
|
|
|
+ try {
|
|
|
+ //上传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);
|
|
|
+
|
|
|
+ sendD2mMessage(d2mMessage);
|
|
|
+ }
|
|
|
+ if (CollUtil.isNotEmpty(uploadData.getRelations())) {
|
|
|
+ List<ObjectNode>[] relData = prepareBdtpData(uploadData.getRelations(), operator, timestamp, uploadData.getUploadJobId(), null, logs);
|
|
|
+ uploadRels(groupCode, projectId, userId, relData);
|
|
|
+ }
|
|
|
+
|
|
|
+ //上传adm数据
|
|
|
+ uploadAdmData(uploadData, operator, timestamp, logs);
|
|
|
+ } catch (Exception e) {
|
|
|
+ markStatus(uploadData.getUploadJobId(), AdmConst.UPLOAD_ERROR);
|
|
|
+
|
|
|
+ if(e instanceof RuntimeException)
|
|
|
+ throw (RuntimeException)e;
|
|
|
+ throw new RuntimeException(e);
|
|
|
}
|
|
|
|
|
|
- //上传adm数据
|
|
|
- uploadAdmData(uploadData, operator, timestamp, logs);
|
|
|
+ //标注上传任务状态
|
|
|
+ markStatus(uploadData.getUploadJobId(), AdmConst.UPLOAD_FINISHED);
|
|
|
|
|
|
//记录日志
|
|
|
logService.saveUploadLog(logs);
|
|
|
|
|
|
- //TODO m2d, message & state
|
|
|
+ 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));
|
|
|
+ if(job != null) {
|
|
|
+ if(!AdmConst.UPLOAD_ERROR.equals(job.getStatus()))
|
|
|
+ return job.getStatus();
|
|
|
+ } else {
|
|
|
+ job = new AdmUploadJob();
|
|
|
+ job.setProjectId(projectId);
|
|
|
+ job.setOperator(operator);
|
|
|
+ job.setStatus(AdmConst.UPLOAD_PROCESSING);
|
|
|
+ job.setStartTime(new Timestamp(new Date().getTime()));
|
|
|
+ uploadJobMapper.insert(job);
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
|
|
|
- rtn.setTimestamp(timestamp);
|
|
|
- return rtn;
|
|
|
+ private void markStatus(String uploadJobId, String status) {
|
|
|
+ AdmUploadJob job = new AdmUploadJob();
|
|
|
+ job.setId(uploadJobId);
|
|
|
+ job.setStatus(status);
|
|
|
+ job.setFinishTime(new Timestamp(new Date().getTime()));
|
|
|
+ uploadJobMapper.updateById(job);
|
|
|
}
|
|
|
|
|
|
private void uploadObjs(String groupCode, String projectId, String userId, List<ObjectNode>[] data) {
|
|
@@ -352,12 +414,13 @@ public class SyncAppImpl implements ISyncApp {
|
|
|
ServiceUtil.call(() -> relationClient.update(groupCode, projectId, AdmConst.APP_ID, userId, data[1]));
|
|
|
}
|
|
|
|
|
|
- private List<ObjectNode>[] prepareBdtpData(List<ObjectNode> list, String operator, String time, String jobId, List<AdmUploadLog> logs){
|
|
|
+ private List<ObjectNode>[] prepareBdtpData(List<ObjectNode> list, String operator, String time, String jobId, D2mMessage d2mMessage, List<AdmUploadLog> logs){
|
|
|
List<ObjectNode> updateList = new ArrayList<>();
|
|
|
Iterator<ObjectNode> iter = list.iterator();
|
|
|
while (iter.hasNext()) {
|
|
|
ObjectNode entity = iter.next();
|
|
|
DataExtrasUtil.unpackObjExtras(entity);
|
|
|
+ entity.remove("ts"); //调用bdtp接口前,删除ts字段
|
|
|
|
|
|
AdmUploadLog log;
|
|
|
if (entity.get("state").asInt() == 1) {
|
|
@@ -365,6 +428,15 @@ public class SyncAppImpl implements ISyncApp {
|
|
|
iter.remove();
|
|
|
|
|
|
boolean remove = entity.get("valid").asInt() == ValidEnum.FALSE.getType();
|
|
|
+
|
|
|
+ //设备数据上传时向模型服务发同步消息
|
|
|
+ if(d2mMessage != null && AdmConst.OBJ_TYPE_EQUIPMENT.equals(entity.get("objType"))) {
|
|
|
+ if(remove)
|
|
|
+ d2mMessage.appendRemoveItem(entity);
|
|
|
+ else
|
|
|
+ d2mMessage.appendModifyItem(entity);
|
|
|
+ }
|
|
|
+
|
|
|
log = new AdmUploadLog(jobId, operator, remove ? AdmUploadLog.REMOVE : AdmUploadLog.MODIFY);
|
|
|
log.setData(entity, objectMapper);
|
|
|
|
|
@@ -372,16 +444,26 @@ public class SyncAppImpl implements ISyncApp {
|
|
|
entity.put("modifier", operator);
|
|
|
entity.put("modifiedTime", time);
|
|
|
|
|
|
+ //修改空间信息点,轮廓不上传
|
|
|
+ if(AdmConst.OBJ_TYPE_SPACE.equals(entity.get("objType")))
|
|
|
+ entity.remove("outline");
|
|
|
+
|
|
|
//TODO 可能需要进行删除信息点操作
|
|
|
|
|
|
} else {
|
|
|
+ if(d2mMessage != null)
|
|
|
+ d2mMessage.appendAddItem(entity);
|
|
|
+
|
|
|
log = new AdmUploadLog(jobId, operator, AdmUploadLog.ADD);
|
|
|
log.setData(entity, objectMapper);
|
|
|
|
|
|
entity.put("createApp", AdmConst.CREATOR_APP);
|
|
|
entity.put("creator", operator);
|
|
|
entity.put("creationTime", time);
|
|
|
- entity.put("modifiedTime", time); //TODO 临时处理,方便之后的增量查询
|
|
|
+
|
|
|
+ //TODO 临时处理,方便之后的增量查询
|
|
|
+ entity.put("modifier", operator);
|
|
|
+ entity.put("modifiedTime", time);
|
|
|
}
|
|
|
logs.add(log);
|
|
|
}
|
|
@@ -390,32 +472,32 @@ public class SyncAppImpl implements ISyncApp {
|
|
|
}
|
|
|
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
- public void uploadAdmData(UploadData uploadData, String operator, String time, List<AdmUploadLog> logs){
|
|
|
+ public void uploadAdmData(UploadData uploadData, String operator, String time, List<AdmUploadLog> logs) {
|
|
|
if (CollUtil.isNotEmpty(uploadData.getPipes())) {
|
|
|
- uploadAdmEntities(uploadData.getPipes(), operator, time, uploadData.getUploadJobId(), pipeMapper, logs, true);
|
|
|
+ uploadAdmEntities(uploadData.getPipes(), operator, time, uploadData.getUploadJobId(), pipeMapper, new D2mMessage("pipe"), logs, true);
|
|
|
}
|
|
|
|
|
|
if (CollUtil.isNotEmpty(uploadData.getJobSpace())) {
|
|
|
- uploadAdmEntities(uploadData.getJobSpace(), operator, time, uploadData.getUploadJobId(), jobSpaceMapper, logs, false);
|
|
|
+ uploadAdmEntities(uploadData.getJobSpace(), operator, time, uploadData.getUploadJobId(), jobSpaceMapper, null, logs, false);
|
|
|
}
|
|
|
if (CollUtil.isNotEmpty(uploadData.getProblemArch())) {
|
|
|
- uploadAdmEntities(uploadData.getProblemArch(), operator, time, uploadData.getUploadJobId(), problemArchMapper, logs, false);
|
|
|
+ uploadAdmEntities(uploadData.getProblemArch(), operator, time, uploadData.getUploadJobId(), problemArchMapper, null, logs, false);
|
|
|
}
|
|
|
if (CollUtil.isNotEmpty(uploadData.getProblemEquip())) {
|
|
|
- uploadAdmEntities(uploadData.getProblemEquip(), operator, time, uploadData.getUploadJobId(), problemEquipMapper, logs, false);
|
|
|
+ uploadAdmEntities(uploadData.getProblemEquip(), operator, time, uploadData.getUploadJobId(), problemEquipMapper, null, logs, false);
|
|
|
}
|
|
|
if (CollUtil.isNotEmpty(uploadData.getFile())) {
|
|
|
- uploadAdmEntities(uploadData.getFile(), operator, time, uploadData.getUploadJobId(), fileMapper, logs, false);
|
|
|
+ uploadAdmEntities(uploadData.getFile(), operator, time, uploadData.getUploadJobId(), fileMapper, null, logs, false);
|
|
|
}
|
|
|
if (CollUtil.isNotEmpty(uploadData.getQrCode())) {
|
|
|
- uploadAdmEntities(uploadData.getQrCode(), operator, time, uploadData.getUploadJobId(), qrCodeMapper, logs, false);
|
|
|
+ uploadAdmEntities(uploadData.getQrCode(), operator, time, uploadData.getUploadJobId(), qrCodeMapper, null, logs, false);
|
|
|
}
|
|
|
if (CollUtil.isNotEmpty(uploadData.getServeArea())) {
|
|
|
- uploadAdmEntities(uploadData.getServeArea(), operator, time, uploadData.getUploadJobId(), serveAreaMapper, logs, false);
|
|
|
+ uploadAdmEntities(uploadData.getServeArea(), operator, time, uploadData.getUploadJobId(), serveAreaMapper, null, logs, false);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private <T extends BaseAdmDataEntity> void uploadAdmEntities(List<T> list, String operator, String time, String jobId, BaseMapper<T> mapper, List<AdmUploadLog> logs, boolean merge) {
|
|
|
+ private <T extends BaseAdmDataEntity> void uploadAdmEntities(List<T> list, String operator, String time, String jobId, BaseMapper<T> mapper, D2mMessage d2mMessage, List<AdmUploadLog> logs, boolean merge) {
|
|
|
List<T> updateList = new ArrayList<>();
|
|
|
Iterator<T> iter = list.iterator();
|
|
|
while (iter.hasNext()) {
|
|
@@ -424,15 +506,32 @@ public class SyncAppImpl implements ISyncApp {
|
|
|
AdmUploadLog log;
|
|
|
if (entity.getState() == 1) {
|
|
|
updateList.add(entity);
|
|
|
- iter.remove();;
|
|
|
+ iter.remove();
|
|
|
|
|
|
boolean remove = entity.getValid().intValue() == ValidEnum.FALSE.getType();
|
|
|
+
|
|
|
+ if(d2mMessage != null) {
|
|
|
+ if(remove)
|
|
|
+ d2mMessage.appendRemoveItem(entity);
|
|
|
+ else
|
|
|
+ d2mMessage.appendModifyItem(entity);
|
|
|
+ }
|
|
|
+
|
|
|
log = new AdmUploadLog(jobId, operator, remove ? AdmUploadLog.REMOVE : AdmUploadLog.MODIFY);
|
|
|
+
|
|
|
+ //任务空间不上传轮廓数据
|
|
|
+ if(entity instanceof AdmJobSpace)
|
|
|
+ ((AdmJobSpace) entity).setOutline(null);
|
|
|
} else {
|
|
|
+ if(d2mMessage != null)
|
|
|
+ d2mMessage.appendAddItem(entity);
|
|
|
+
|
|
|
log = new AdmUploadLog(jobId, operator, AdmUploadLog.ADD);
|
|
|
}
|
|
|
log.setData(entity, objectMapper);
|
|
|
logs.add(log);
|
|
|
+
|
|
|
+ entity.setTs(null); //保存数据前,删除ts字段
|
|
|
}
|
|
|
|
|
|
//insert
|
|
@@ -467,6 +566,8 @@ public class SyncAppImpl implements ISyncApp {
|
|
|
mapper.updateById(entity);
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ sendD2mMessage(d2mMessage);
|
|
|
}
|
|
|
|
|
|
private <T extends BaseAdmDataEntity> T mergeEntity(T obj, T dbObj) {
|
|
@@ -486,36 +587,29 @@ public class SyncAppImpl implements ISyncApp {
|
|
|
return infos;
|
|
|
}
|
|
|
|
|
|
- private void setDeliveryDataProps(BaseDeliveryEntity obj, BaseDeliveryEntity dbObj){
|
|
|
- obj.setD2mState(ValidEnum.FALSE.getType());
|
|
|
- obj.setDeliveryState(ValidEnum.FALSE.getType());
|
|
|
-
|
|
|
- if(dbObj != null) {
|
|
|
- obj.setClientId(dbObj.getClientId());
|
|
|
- obj.setClientDevice(dbObj.getClientDevice());
|
|
|
+ private void sendD2mMessage(D2mMessage d2mMessage){
|
|
|
+ if (d2mMessage != null && d2mMessage.isNotEmpty()) {
|
|
|
+ if(d2mMessage.getAddItems() != null){
|
|
|
+ for(Object o : d2mMessage.getAddItems()) {
|
|
|
+ markM2dState(o);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(d2mMessage.getModifyItems() != null){
|
|
|
+ for(Object o : d2mMessage.getModifyItems()) {
|
|
|
+ markM2dState(o);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(d2mMessage.getRemoveItems() != null) {
|
|
|
+ for(Object o : d2mMessage.getRemoveItems()) {
|
|
|
+ markM2dState(o);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ syncModel.sendMessageToModel(d2mMessage);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private void sendD2mMessage(String objectType, List<?> msgAdd, List<?> msgModify, List<?> msgRemove){
|
|
|
- D2mMessage message = new D2mMessage();
|
|
|
- message.setItemType(objectType);
|
|
|
- message.setAddItems(msgAdd);
|
|
|
- message.setModifyItems(msgModify);
|
|
|
- message.setRemoveItems(msgRemove);
|
|
|
-
|
|
|
- if(message.isNotEmpty())
|
|
|
- syncModel.sendMessageToModel(message);
|
|
|
- }
|
|
|
-
|
|
|
- private List<String> buildExpiredIds(List<? extends BaseAdmDataEntity> expired){
|
|
|
- if(expired.size() > 0) {
|
|
|
- List<String> ids = new ArrayList<>();
|
|
|
- for(BaseAdmDataEntity entity : expired) {
|
|
|
- ids.add(entity.getId());
|
|
|
- }
|
|
|
- return ids;
|
|
|
- }
|
|
|
- return null;
|
|
|
+ private void markM2dState(Object item){
|
|
|
+ //TODO 标记数据同步状态
|
|
|
}
|
|
|
|
|
|
}
|