Explorar o código

优化多地块预付码流程

chenendian hai 7 horas
pai
achega
ae788c0518

+ 11 - 4
siwei-modules/siwei-apply/src/main/java/com/siwei/apply/service/impl/ProjectImpl.java

@@ -1949,8 +1949,6 @@ public class ProjectImpl implements ProjectService {
      */
     @Override
     public void addPreAssignCode(String nodeId,String projectId,String geomDbId,Integer validFlag) throws RuntimeException {
-        String preAssignCode = "";
-        String sequenceNumber = "";
         /*
          *  1.获取当前节点3个地块。
          *  2.分别对当前三个地块进行赋码
@@ -1962,8 +1960,11 @@ public class ProjectImpl implements ProjectService {
         List<Map<String,String>>  currentNodeDetailsList =  nodeLandService.selectTGeomDbDetailsByNodeId(nodeId);
         if (CollectionUtils.isNotEmpty(currentNodeDetailsList)) {
             List<ProjectImmobileCode> addProjectImmobileCodeList = new ArrayList<>();
+            int preSequenceNumber = 0;
             //针对每个地块进行赋码
             for (Map<String, String> tmpMap : currentNodeDetailsList) {
+                String preAssignCode = "";
+                String sequenceNumber = "";
                 //--------------------第一部分先检查是否同一个引用----------------------------------------
                 //当前节点地块来自于存在的节点的矢量,直接沿用存在的预赋码
                 String detailsId = tmpMap.get("id");
@@ -1984,17 +1985,17 @@ public class ProjectImpl implements ProjectService {
                 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());
+                        List<String>  geomDbIdList = currentProjectImmobileList.stream().map(ProjectImmobileCode::getGeomDbId).distinct().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();
@@ -2020,7 +2021,13 @@ public class ProjectImpl implements ProjectService {
                         if (Objects.nonNull(dbMaxSequenceNumberImmobileCode)) {
                             sequenceNumber = String.valueOf(Integer.parseInt(dbMaxSequenceNumberImmobileCode.getSequenceNumber()) + 1);
                         }
+
+                        //多个图斑时候这里需要与内存最大值比较取最大
+                        if(Integer.parseInt(sequenceNumber) <= preSequenceNumber){
+                            sequenceNumber = String.valueOf(preSequenceNumber + 1);
+                        }
                         preAssignCode = regionCode + plotCode + sequenceNumber;
+                        preSequenceNumber = Integer.parseInt(sequenceNumber);//记录上一个
                     }
                 }
 

+ 3 - 0
siwei-modules/siwei-apply/src/main/resources/mapper/ProjectImmobileCodeMapper.xml

@@ -107,6 +107,9 @@
             <if test="geomDbId != null and geomDbId !='' ">
                 AND geom_db_id  = #{geomDbId}
             </if>
+            <if test="geomDetailsId != null and geomDetailsId !='' ">
+                AND geom_details_id  = #{geomDetailsId}
+            </if>
             <if test="sequenceNumber != null and sequenceNumber !='' ">
                 AND sequence_number  = #{sequenceNumber}
             </if>