Преглед изворни кода

每次上链都对单独的地块进行赋码

chenendian пре 20 часа
родитељ
комит
8613734248

+ 126 - 95
siwei-modules/siwei-apply/src/main/java/com/siwei/apply/service/impl/ProjectImpl.java

@@ -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文件数据
      * 
      * 

+ 3 - 2
siwei-modules/siwei-apply/src/main/java/com/siwei/apply/service/third/TakeDataService.java

@@ -49,10 +49,11 @@ public interface TakeDataService {
     /**
     /**
      * 获取三方数据最大序列号
      * 获取三方数据最大序列号
      * @param projectId
      * @param projectId
-     * @param tableName
+     * @param nodeId
+     * @param detailsId
      * @return
      * @return
      */
      */
-    Map<String, String> getThirdMaxSequence(String projectId,String tableName);
+    Map<String, String> getThirdMaxSequence(String projectId,String nodeId,String detailsId);
 
 
     Map<String, Object> remoteLandFirstRegistration(ThirdRecordStatusParamVo paramVo);
     Map<String, Object> remoteLandFirstRegistration(ThirdRecordStatusParamVo paramVo);
 
 

+ 6 - 15
siwei-modules/siwei-apply/src/main/java/com/siwei/apply/service/third/impl/TakeDataServiceImpl.java

@@ -103,7 +103,7 @@ public class TakeDataServiceImpl implements TakeDataService {
      * @return
      * @return
      */
      */
     @Override
     @Override
-    public Map<String, String> getThirdMaxSequence(String projectId, String nodeId) {
+    public Map<String, String> getThirdMaxSequence(String projectId, String nodeId,String detailsId) {
         Map<String, String> retMap = new LinkedHashMap<>();
         Map<String, String> retMap = new LinkedHashMap<>();
         Project project = projectMapper.get(projectId);
         Project project = projectMapper.get(projectId);
         String firstPlotCode = project.getFirstPlotCode();
         String firstPlotCode = project.getFirstPlotCode();
@@ -117,23 +117,14 @@ public class TakeDataServiceImpl implements TakeDataService {
 
 
         //获取地籍子区的代码
         //获取地籍子区的代码
         String regionCode = "";
         String regionCode = "";
-        //这里查询出来所有的geomId,然后循环查询某个区域的地块,包含第一块,直接获取区域代码
-        List<Map<String, String>> geomDetailsList = nodeLandService.selectTGeomDbDetailsByNodeId(nodeId);
-        log.info("查询当前节点的矢量结果:{}", geomDetailsList);
-        for (Map<String, String> geomDetailsMap : geomDetailsList) {
-            String geomDetailsId = geomDetailsMap.get("id");
-            //当前地块所属地籍子区编号
-            Map<String, String> detailGeomBelongToDjzqMap = nodeLandService.getDjzqContainsNodeList(geomDetailsId);
-            if (!MapUtils.isEmpty(detailGeomBelongToDjzqMap)) {
-                regionCode = detailGeomBelongToDjzqMap.get("djzqdm");
-            }
-            break;
+        //当前地块所属地籍子区编号
+        Map<String, String> detailGeomBelongToDjzqMap = nodeLandService.getDjzqContainsNodeList(detailsId);
+        if (!MapUtils.isEmpty(detailGeomBelongToDjzqMap)) {
+            regionCode = detailGeomBelongToDjzqMap.get("djzqdm");
         }
         }
 
 
         log.info("这里计算地籍子区的代码,区域号:{}", regionCode);
         log.info("这里计算地籍子区的代码,区域号:{}", regionCode);
-
-        //String maxSequence = RandomStringUtils.randomNumeric(5);
-        //todo 这里三方接口入参
+        //这里三方接口入参
         retMap.put("maxSequence", "");
         retMap.put("maxSequence", "");
         retMap.put("plotCode", firstPlotCode + secondPlotCode);
         retMap.put("plotCode", firstPlotCode + secondPlotCode);
         retMap.put("regionCode", regionCode);
         retMap.put("regionCode", regionCode);

+ 1 - 1
siwei-modules/siwei-apply/src/main/resources/mapper/NodeLandMapper.xml

@@ -186,7 +186,7 @@
 
 
     <!-- 这里判断两个图形是否一致,如果一致则返回已存在的当前的节点数据 -->
     <!-- 这里判断两个图形是否一致,如果一致则返回已存在的当前的节点数据 -->
     <select id="selectGeomContains" parameterType="String" resultType="map">
     <select id="selectGeomContains" parameterType="String" resultType="map">
-        SELECT  geom.id ,upload.id as geom_db_id  FROM  "t_geom_db_details"  geom
+        SELECT  geom.id , upload.id as geom_db_id  FROM  "t_geom_db_details"  geom
         LEFT JOIN "public"."t_geom_db"  upload   on geom.upload_id=upload.id
         LEFT JOIN "public"."t_geom_db"  upload   on geom.upload_id=upload.id
         LEFT JOIN  "public"."t_project_immobile_code" tpic   on  upload.id=tpic.geom_db_id
         LEFT JOIN  "public"."t_project_immobile_code" tpic   on  upload.id=tpic.geom_db_id
         where st_contains(ST_Buffer(geom.geom::geography, 0.1)::geometry, (SELECT geom FROM "t_geom_db_details"  WHERE id = #{detailsId} ))
         where st_contains(ST_Buffer(geom.geom::geography, 0.1)::geometry, (SELECT geom FROM "t_geom_db_details"  WHERE id = #{detailsId} ))