|
@@ -1953,114 +1953,145 @@ public class ProjectImpl implements ProjectService {
|
|
|
String preAssignCode = "";
|
|
String preAssignCode = "";
|
|
|
String sequenceNumber = "";
|
|
String sequenceNumber = "";
|
|
|
/*
|
|
/*
|
|
|
- 2.这里校验当前地块是否已经存在当前项目中,如果存在共用一个预赋码,如果不存在则生成新的预赋码
|
|
|
|
|
- 3.用gemoId+projectId 查找如果找到,直接使用当前的预赋码,如果没有找到,则生成新的预赋码
|
|
|
|
|
- 4.如果找不到,分别遍历当前项目的所有地块,把其中其它的地块找出来,进行等值判断,如果找不到则生成新的预赋码,如果找到,则使用当前的预赋码
|
|
|
|
|
|
|
+ * 1.获取当前节点3个地块。
|
|
|
|
|
+ * 2.分别对当前三个地块进行赋码
|
|
|
|
|
+ * 3.赋码过程,先查找当前项目内,是否有相同geomId ,及detailsId的号,如果有,直接赋码。
|
|
|
|
|
+ * 4.如果没有,则查找当前项目中所有地块,查找相同的地形的直接赋码。
|
|
|
|
|
+ * 5.如果仍然没有,则进行地块的三方去获取数据。
|
|
|
|
|
+ * 6.需要修改三方的接口,只支持一个地块detailsId 传递,和获取区号。
|
|
|
|
|
+ *
|
|
|
*/
|
|
*/
|
|
|
- //--------------------第一部分先检查是否同一个引用----------------------------------------
|
|
|
|
|
- //当前节点地块来自于存在的节点的矢量,直接沿用存在的预赋码
|
|
|
|
|
- NodeLand nodeLand = nodeLandMapper.selectByNodeId(nodeId);
|
|
|
|
|
- String currentNodeGeomDbId = nodeLand.getGeomDbId();
|
|
|
|
|
- ProjectImmobileCode param = new ProjectImmobileCode();
|
|
|
|
|
- param.setProjectId(projectId);
|
|
|
|
|
- param.setGeomDbId(currentNodeGeomDbId);
|
|
|
|
|
- ProjectImmobileCode existsRes = projectImmobileCodeMapper.selectByCondition(param);
|
|
|
|
|
- if(Objects.nonNull(existsRes)){
|
|
|
|
|
- preAssignCode = existsRes.getPreAssignCode();
|
|
|
|
|
- sequenceNumber = existsRes.getSequenceNumber();
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- //--------------------第二部分,这里需要先进行图斑等值校验,先检查是否同一个地块(两条矢量数据 details)---------------------------------------
|
|
|
|
|
- // 1.根据当前项目查询所有的预赋码表数据list然后获取nodeIdList 进行等值判断(在sql中执行)
|
|
|
|
|
- // 2.如果当前geomId 对应两块地,是否先比较两块地的数量(这里不进行数量比较,简单比较,统一到当前项目下的其它节点地块中比较)
|
|
|
|
|
- // 3.校验当前地块是否已经存在当前项目的其它节点中,如果存在则共用一个预赋码,如果不存在则走第三部分
|
|
|
|
|
-
|
|
|
|
|
- if(com.siwei.common.core.utils.StringUtils.isBlank(preAssignCode) && com.siwei.common.core.utils.StringUtils.isBlank(sequenceNumber)) {
|
|
|
|
|
- //List<String> nodeIdList = new ArrayList<>();
|
|
|
|
|
-
|
|
|
|
|
- List<String> geomDbIdList = new ArrayList<>();
|
|
|
|
|
- List<ProjectImmobileCode> currentProjectImmobileList = projectImmobileCodeMapper.selectByProjectId(projectId, "");
|
|
|
|
|
- if (CollectionUtils.isNotEmpty(currentProjectImmobileList)) {
|
|
|
|
|
- geomDbIdList = currentProjectImmobileList.stream().map(ProjectImmobileCode::getGeomDbId).collect(Collectors.toList());
|
|
|
|
|
- }
|
|
|
|
|
- String equalsGeomDbId = "";
|
|
|
|
|
- Boolean equalsFlag = true;
|
|
|
|
|
- List<Map<String, Object>> currentNodeDetails = nodeLandMapper.selectGeomDetailsByGeomDbId(currentNodeGeomDbId);
|
|
|
|
|
- //这里简单判断,如果当前节点的图斑在当前项目其它节点都存在,则认为地块是存在地块,并且已经赋码完成,取最后一次的节点预赋码为当前码
|
|
|
|
|
- if (!currentNodeDetails.isEmpty() && !geomDbIdList.isEmpty()) {
|
|
|
|
|
- for (Map<String, Object> tmpMap : currentNodeDetails) {
|
|
|
|
|
- String detailsId = tmpMap.get("id").toString();
|
|
|
|
|
- Map<String, String> equalsGeomMap = nodeLandMapper.selectGeomContains(geomDbIdList, detailsId);
|
|
|
|
|
-
|
|
|
|
|
- if (MapUtils.isNotEmpty(equalsGeomMap) && equalsGeomMap.containsKey("geom_db_id")) {
|
|
|
|
|
- equalsGeomDbId = equalsGeomMap.get("geom_db_id");
|
|
|
|
|
- } else {
|
|
|
|
|
- equalsFlag = false;
|
|
|
|
|
- break;
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- if (equalsFlag.equals(true) && StringUtils.isNotBlank(equalsGeomDbId)) {
|
|
|
|
|
- param = new ProjectImmobileCode();
|
|
|
|
|
|
|
+
|
|
|
|
|
+ List<Map<String,String>> currentNodeDetailsList = nodeLandService.selectTGeomDbDetailsByNodeId(nodeId);
|
|
|
|
|
+ if (CollectionUtils.isNotEmpty(currentNodeDetailsList)) {
|
|
|
|
|
+
|
|
|
|
|
+ List<ProjectImmobileCode> addProjectImmobileCodeList = new ArrayList<>();
|
|
|
|
|
+ //针对每个地块进行赋码
|
|
|
|
|
+ for (Map<String, String> tmpMap : currentNodeDetailsList) {
|
|
|
|
|
+ //--------------------第一部分先检查是否同一个引用----------------------------------------
|
|
|
|
|
+ //当前节点地块来自于存在的节点的矢量,直接沿用存在的预赋码
|
|
|
|
|
+ String detailsId = tmpMap.get("id");
|
|
|
|
|
+ NodeLand nodeLand = nodeLandMapper.selectByNodeId(nodeId);
|
|
|
|
|
+ String currentNodeGeomDbId = nodeLand.getGeomDbId();
|
|
|
|
|
+ ProjectImmobileCode param = new ProjectImmobileCode();
|
|
|
param.setProjectId(projectId);
|
|
param.setProjectId(projectId);
|
|
|
- param.setGeomDbId(equalsGeomDbId);
|
|
|
|
|
- existsRes = projectImmobileCodeMapper.selectByCondition(param);
|
|
|
|
|
- if (Objects.nonNull(existsRes)) {
|
|
|
|
|
|
|
+ param.setGeomDbId(currentNodeGeomDbId);
|
|
|
|
|
+ param.setGeomDetailsId(detailsId);
|
|
|
|
|
+ ProjectImmobileCode existsRes = projectImmobileCodeMapper.selectByCondition(param);
|
|
|
|
|
+ if(Objects.nonNull(existsRes)){
|
|
|
preAssignCode = existsRes.getPreAssignCode();
|
|
preAssignCode = existsRes.getPreAssignCode();
|
|
|
sequenceNumber = existsRes.getSequenceNumber();
|
|
sequenceNumber = existsRes.getSequenceNumber();
|
|
|
}
|
|
}
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- //--------------------第三部分 这里生成预赋码逻辑,调用三方接口获取最大序号,然后生成预赋码,插入到不动产单元号表中---------------------------
|
|
|
|
|
- if(com.siwei.common.core.utils.StringUtils.isBlank(preAssignCode) && com.siwei.common.core.utils.StringUtils.isBlank(sequenceNumber)) {
|
|
|
|
|
- String plotCode = "";
|
|
|
|
|
- String regionCode = "";
|
|
|
|
|
- Map<String, String> maxSequenceMap = takeDataService.getThirdMaxSequence(projectId,nodeId);
|
|
|
|
|
- if (MapUtils.isNotEmpty(maxSequenceMap) && maxSequenceMap.get("code").equalsIgnoreCase("200")) {
|
|
|
|
|
- regionCode = maxSequenceMap.get("regionCode");
|
|
|
|
|
- plotCode = maxSequenceMap.get("plotCode");
|
|
|
|
|
- sequenceNumber = maxSequenceMap.get("maxSequence");
|
|
|
|
|
- if(StringUtils.isBlank(sequenceNumber)){ //这里如果异常时候,直接取最大值加一
|
|
|
|
|
- sequenceNumber = "1";
|
|
|
|
|
|
|
+ //--------------------第二部分,这里需要先进行图斑等值校验,先检查是否同一个地块---------------------------------------
|
|
|
|
|
+ // 1.根据当前项目查询所有的预赋码表数据list然后获取nodeIdList 进行等值判断(在sql中执行)
|
|
|
|
|
+ // 2.根据当前项目中所有地块,与当前地块用gis进行矢量等值判断
|
|
|
|
|
+ if(StringUtils.isBlank(preAssignCode) && StringUtils.isBlank(sequenceNumber)) {
|
|
|
|
|
+ List<ProjectImmobileCode> currentProjectImmobileList = projectImmobileCodeMapper.selectByProjectId(projectId, "");
|
|
|
|
|
+ if (CollectionUtils.isNotEmpty(currentProjectImmobileList)) {
|
|
|
|
|
+ List<String> geomDbIdList = currentProjectImmobileList.stream().map(ProjectImmobileCode::getGeomDbId).collect(Collectors.toList());
|
|
|
|
|
+ //gis 判断是否存在图形相同的引用
|
|
|
|
|
+ Map<String, String> equalsGeomMap = nodeLandMapper.selectGeomContains(geomDbIdList, detailsId);
|
|
|
|
|
+ if (MapUtils.isNotEmpty(equalsGeomMap) && equalsGeomMap.containsKey("id")) {
|
|
|
|
|
+ //这里查找当前包含的数据条
|
|
|
|
|
+ Optional<ProjectImmobileCode> existsImmobileCode= currentProjectImmobileList.stream().filter(
|
|
|
|
|
+ s->s.getProjectId().equalsIgnoreCase(projectId)
|
|
|
|
|
+ && s.getNodeId().equalsIgnoreCase(nodeId)
|
|
|
|
|
+ && s.getGeomDbId().equalsIgnoreCase(equalsGeomMap.get("geom_db_id"))
|
|
|
|
|
+ && s.getGeomDetailsId().equalsIgnoreCase(equalsGeomMap.get("id"))
|
|
|
|
|
+ ).findFirst();
|
|
|
|
|
+ if(existsImmobileCode.isPresent()){
|
|
|
|
|
+ preAssignCode = existsImmobileCode.get().getPreAssignCode();
|
|
|
|
|
+ sequenceNumber = existsImmobileCode.get().getSequenceNumber();
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ } // end 二部分
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ //--------------------第三部分 这里生成预赋码逻辑,调用三方接口获取最大序号,然后生成预赋码,插入到不动产单元号表中---------------------------
|
|
|
|
|
+ if(com.siwei.common.core.utils.StringUtils.isBlank(preAssignCode) && com.siwei.common.core.utils.StringUtils.isBlank(sequenceNumber)) {
|
|
|
|
|
+ String plotCode = "";
|
|
|
|
|
+ String regionCode = "";
|
|
|
|
|
+ Map<String, String> maxSequenceMap = takeDataService.getThirdMaxSequence(projectId,nodeId,detailsId);
|
|
|
|
|
+ if (MapUtils.isNotEmpty(maxSequenceMap) && maxSequenceMap.get("code").equalsIgnoreCase("200")) {
|
|
|
|
|
+ regionCode = maxSequenceMap.get("regionCode");
|
|
|
|
|
+ plotCode = maxSequenceMap.get("plotCode");
|
|
|
|
|
+ sequenceNumber = maxSequenceMap.get("maxSequence");
|
|
|
|
|
+ if(StringUtils.isBlank(sequenceNumber)){ //这里如果异常时候,直接取最大值加一
|
|
|
|
|
+ sequenceNumber = "1";
|
|
|
|
|
+ }
|
|
|
|
|
+ //这里查询库中最大序列号,两者取其一的最大值
|
|
|
|
|
+ ProjectImmobileCode dbMaxSequenceNumberImmobileCode = projectImmobileCodeMapper.selectBySequenceNumber(sequenceNumber);
|
|
|
|
|
+ if (Objects.nonNull(dbMaxSequenceNumberImmobileCode)) {
|
|
|
|
|
+ sequenceNumber = String.valueOf(Integer.parseInt(dbMaxSequenceNumberImmobileCode.getSequenceNumber()) + 1);
|
|
|
|
|
+ }
|
|
|
|
|
+ preAssignCode = regionCode + plotCode + sequenceNumber;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if(StringUtils.isNotBlank(preAssignCode) && StringUtils.isNotBlank(sequenceNumber)){
|
|
|
|
|
+ ProjectImmobileCode projectImmobileCode = new ProjectImmobileCode();
|
|
|
|
|
+ projectImmobileCode.generateId();
|
|
|
|
|
+ projectImmobileCode.setProjectId(projectId);
|
|
|
|
|
+ projectImmobileCode.setNodeId(nodeId);
|
|
|
|
|
+ projectImmobileCode.setGeomDbId(geomDbId);
|
|
|
|
|
+ projectImmobileCode.setGeomDetailsId(detailsId);
|
|
|
|
|
+ projectImmobileCode.setCode(null);
|
|
|
|
|
+ projectImmobileCode.setSequenceNumber(sequenceNumber);
|
|
|
|
|
+ projectImmobileCode.setPreAssignCode(preAssignCode);
|
|
|
|
|
+ projectImmobileCode.setValidFlag(validFlag);
|
|
|
|
|
+ addProjectImmobileCodeList.add(projectImmobileCode);
|
|
|
}
|
|
}
|
|
|
- //这里查询库中最大序列号,两者取其一的最大值
|
|
|
|
|
- ProjectImmobileCode dbMaxSequenceNumberImmobileCode = projectImmobileCodeMapper.selectBySequenceNumber(sequenceNumber);
|
|
|
|
|
- if (Objects.nonNull(dbMaxSequenceNumberImmobileCode)) {
|
|
|
|
|
- //sequenceNumber = dbMaxSequenceNumberImmobileCode.getSequenceNumber() + 1;
|
|
|
|
|
- sequenceNumber = String.valueOf(Integer.parseInt(dbMaxSequenceNumberImmobileCode.getSequenceNumber()) + 1);
|
|
|
|
|
|
|
+ } //end for
|
|
|
|
|
+
|
|
|
|
|
+ //-----------------------------------------------------end-------------------------------------------------------------------------------------
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ if(!addProjectImmobileCodeList.isEmpty()){
|
|
|
|
|
+ // 这里如何校验多次上链,并且多次赋码问题。
|
|
|
|
|
+ // 如果多次上链,同一个geomId ,及同一个details id ,已经赋码完毕,是否需要再进行赋码
|
|
|
|
|
+ addProjectImmobileCodeList = addProjectImmobileCodeList.stream().filter(s->{
|
|
|
|
|
+ ProjectImmobileCode param = new ProjectImmobileCode();
|
|
|
|
|
+ param.setProjectId(projectId);
|
|
|
|
|
+ param.setNodeId(nodeId);
|
|
|
|
|
+ param.setGeomDbId(s.getGeomDbId());
|
|
|
|
|
+ param.setGeomDetailsId(s.getGeomDetailsId());
|
|
|
|
|
+ ProjectImmobileCode existsRes = projectImmobileCodeMapper.selectByCondition(param);
|
|
|
|
|
+ return Objects.isNull(existsRes);
|
|
|
|
|
+ }).collect(Collectors.toList());
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ //这里兼容当前项目多个地块情况,批量写入(依然存在问题,如果多次上链)
|
|
|
|
|
+ if(CollectionUtils.isNotEmpty(addProjectImmobileCodeList)){
|
|
|
|
|
+ // insert 前需要先删除当前项目的预赋码数据
|
|
|
|
|
+ projectImmobileCodeMapper.deleteByProjectIdNodeId(projectId,nodeId);
|
|
|
|
|
+ for(ProjectImmobileCode projectImmobileCode : addProjectImmobileCodeList){
|
|
|
|
|
+ projectImmobileCodeMapper.insert(projectImmobileCode);
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
- preAssignCode = regionCode + plotCode + sequenceNumber;
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- //-----------------------------------------------------end-------------------------------------------------------------------------------------
|
|
|
|
|
- if(com.siwei.common.core.utils.StringUtils.isNotBlank(preAssignCode) && com.siwei.common.core.utils.StringUtils.isNotBlank(sequenceNumber)){
|
|
|
|
|
- // insert前做检查,如果当前节点已经赋码过了且是当前预赋码则无需赋码
|
|
|
|
|
- param = new ProjectImmobileCode();
|
|
|
|
|
- param.setProjectId(projectId);
|
|
|
|
|
- param.setNodeId(nodeId);
|
|
|
|
|
- param.setSequenceNumber(sequenceNumber);
|
|
|
|
|
- param.setPreAssignCode(preAssignCode);
|
|
|
|
|
- existsRes = projectImmobileCodeMapper.selectByCondition(param);
|
|
|
|
|
- if(Objects.isNull(existsRes)){
|
|
|
|
|
- // insert 前需要先删除当前项目的预赋码数据
|
|
|
|
|
- projectImmobileCodeMapper.deleteByProjectIdNodeId(projectId,nodeId);
|
|
|
|
|
- //这里进行入库
|
|
|
|
|
- ProjectImmobileCode projectImmobileCode = new ProjectImmobileCode();
|
|
|
|
|
- projectImmobileCode.generateId();
|
|
|
|
|
- projectImmobileCode.setProjectId(projectId);
|
|
|
|
|
- projectImmobileCode.setNodeId(nodeId);
|
|
|
|
|
- projectImmobileCode.setGeomDbId(geomDbId);
|
|
|
|
|
- projectImmobileCode.setCode(null);
|
|
|
|
|
- projectImmobileCode.setSequenceNumber(sequenceNumber);
|
|
|
|
|
- projectImmobileCode.setPreAssignCode(preAssignCode);
|
|
|
|
|
- projectImmobileCode.setValidFlag(validFlag);
|
|
|
|
|
- projectImmobileCodeMapper.insert(projectImmobileCode);
|
|
|
|
|
|
|
+
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
/**
|
|
/**
|
|
|
* 递归解析json文件数据
|
|
* 递归解析json文件数据
|
|
|
*
|
|
*
|