Browse Source

嵌入批次报批数据

chenendian 4 days ago
parent
commit
8efa7cf6c1

+ 5 - 4
siwei-modules/siwei-apply/src/main/java/com/siwei/apply/mapper/ProjectWorkflowMapper.java

@@ -21,7 +21,7 @@ public interface ProjectWorkflowMapper {
     /**
      * 根据节点id查询项目流程节点关系
      */
-    List<ProjectWorkflow> selectByNodeId(@Param("nodeId") String nodeId);
+    List<ProjectWorkflow> selectByNodeId(@Param("nodeId") String nodeId, @Param("projectId") String projectId);
 
     /**
      * 原有:带 hasOnchain 的整合查询(保留)
@@ -55,7 +55,6 @@ public interface ProjectWorkflowMapper {
     List<ProjectProcessRes> countMaxWorkflowByName(@Param("projectType") Integer projectType);
 
 
-
     /**
      *  查询当前项目下的某个节点ID的数据
      *
@@ -64,9 +63,11 @@ public interface ProjectWorkflowMapper {
 
 
 
-
     List<ProjectWorkflow> selectByProjectIdList(@Param("projectIdList") List projectIdList);
 
-
+    /**
+     * 更新 ProjectWorkflow
+     */
+    void update(ProjectWorkflow projectWorkflow);
 
 }

+ 1 - 1
siwei-modules/siwei-apply/src/main/java/com/siwei/apply/service/impl/LandOneCodeServiceImpl.java

@@ -347,7 +347,7 @@ public class LandOneCodeServiceImpl implements LandOneCodeService {
     @Override
     public ProjectWorkflow getProjectWorkflowByNodeId(String nodeId) {
         ProjectWorkflow projectWorkflow =null;
-        List<ProjectWorkflow> projectWorkflowList = projectWorkflowMapper.selectByNodeId(nodeId);
+        List<ProjectWorkflow> projectWorkflowList = projectWorkflowMapper.selectByNodeId(nodeId,null);
         if(CollectionUtils.isNotEmpty(projectWorkflowList) && Objects.nonNull(projectWorkflowList.get(0))) {
             projectWorkflow = projectWorkflowList.get(0);
         }

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

@@ -262,6 +262,10 @@ public class ProjectImpl implements ProjectService {
         for (ProjectWorkflow projectWorkflow : projectWorkflowList) {
             String nodeTableName = projectWorkflow.getNodeTableName();
             String nodeId = projectWorkflow.getNodeId();
+            //跳过批次报批节点
+            if("t_ydbp_data".equals(nodeTableName)){
+                continue;
+            }
             Boolean hasOnchain = projectWorkflowMapper.isOnchain(nodeId, projectId,nodeTableName);
             if(hasOnchain.equals(true)){
                 onChinaNum++;

+ 50 - 23
siwei-modules/siwei-apply/src/main/java/com/siwei/apply/service/impl/TdgyImpl.java

@@ -1,7 +1,6 @@
 package com.siwei.apply.service.impl;
 
-import com.siwei.apply.domain.Project;
-import com.siwei.apply.domain.Tdgy;
+import com.siwei.apply.domain.*;
 import com.siwei.apply.domain.res.TdgyRes;
 import com.siwei.apply.domain.vo.TdgyUpdateVo;
 import com.siwei.apply.domain.vo.TdgyVo;
@@ -13,9 +12,10 @@ import com.siwei.apply.service.NodeLandService;
 import com.siwei.apply.service.TdgyService;
 import com.siwei.common.core.exception.ServiceException;
 import com.siwei.common.core.utils.bean.BeanUtils;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.collections4.MapUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import com.siwei.apply.domain.LandType;
 import com.siwei.apply.domain.res.LandTypeTreeRes;
 import com.siwei.apply.mapper.LandTypeMapper;
 
@@ -25,8 +25,6 @@ import java.util.stream.Collectors;
 import static com.siwei.apply.common.Common.UserId;
 
 import org.springframework.transaction.annotation.Transactional;
-import com.siwei.apply.domain.ProjectWorkflow;
-import com.siwei.apply.domain.Workflow;
 import com.siwei.apply.mapper.ProjectWorkflowMapper;
 import com.siwei.apply.mapper.WorkflowMapper;
 
@@ -152,24 +150,33 @@ public class TdgyImpl implements TdgyService {
         return roots;
     }
 
-
+    /**
+     *
+     *   1.校验是否存在地块。
+     *   2.插入土地供应节点到流程表。
+     * @param id         土地供应ID
+     * @param projectId  项目id
+     * @param hasOnchain 是否已上链
+     * @throws RuntimeException
+     */
     @Override
     public void updateHasOnchain(String id,String projectId, Boolean hasOnchain) throws RuntimeException {
         //这里区分不同类型,如果是批次报批,需要检查地块包含,然后再插入一条数据到流程表,并且,手动增加批次报批数据节点。
-        //todo 分成三步骤
-        // 1.校验是否存在地块。
-        // 2.插入土地供应节点到流程表。
-        // 3.调用赋码服务,增加赋码数据。
         Integer pType = projectMapper.getProjectTypeById(projectId);
         if(ProjectType.BATCH.getCode().equals(String.valueOf(pType))){
+            //这里进行转换,查找复用的id //todo 这里后期需要删除
+            NodeLand nodeLand= nodeLandService.getNodeLandByNodeId(id);
+            id = nodeLand.getNodeId();
             //这里检验空间图形是否包含批次数据
             List<Map<String, String>> geomDetailsList= nodeLandService.selectTGeomDbDetailsByNodeId(id);
             Map <String, String> resultMap = new HashMap<>();
             for (Map<String, String> geomDetailsMap : geomDetailsList) {
                 String geomDetailsId = geomDetailsMap.get("id");
                 Map<String, String> geomDetailsAndNodeMap= nodeLandService.selectGeomContainsNode(geomDetailsId);
-                String nodeId = geomDetailsAndNodeMap.get("nodeId");
-                resultMap.put(nodeId, geomDetailsAndNodeMap.get("id"));
+                if(!MapUtils.isEmpty(geomDetailsAndNodeMap)){
+                    String nodeId = geomDetailsAndNodeMap.get("node_id");
+                    resultMap.put(nodeId, geomDetailsAndNodeMap.get("id"));
+                }
             }
             if(resultMap.isEmpty()){
                 throw new ServiceException("当前地块未包含审核过的批次报批空间信息,请检查后再上链!");
@@ -177,19 +184,39 @@ public class TdgyImpl implements TdgyService {
             if(resultMap.size()>1){
                 throw new ServiceException("当前地块未包含多个地块,报批数据不在同一批次!");
             }
+            String tableName ="t_ydbp_data";
             //获取到对应的批次报批节点,插入到流程表中
-            String nodeId = String.valueOf(resultMap.keySet().stream().findFirst());
-            Workflow workflow = workflowMapper.selectByProjectTypeAndTableName(Integer.valueOf(ProjectType.BATCH.getCode()), "t_ydbp_data");
+            String nodeId = resultMap.keySet().stream().findFirst().get();
+            Workflow workflow = workflowMapper.selectByProjectTypeAndTableName(Integer.valueOf(ProjectType.BATCH.getCode()), tableName);
+            //先检查是否存在,避免重复上链插入多次
             ProjectWorkflow projectWorkflow = new ProjectWorkflow();
-            //设置流程主键
-            projectWorkflow.generateId();
-            projectWorkflow.setParentId(id);
-            projectWorkflow.setWorkflowId(workflow.getId());
-            projectWorkflow.setProjectId(projectId);
-            projectWorkflow.setNodeId(nodeId);
-            projectWorkflow.setNodeTableName(workflow.getTableName());
-            projectWorkflow.setWorkflowName(workflow.getName());
-            projectWorkflowMapper.add(projectWorkflow);
+            List<ProjectWorkflow> projectWorkflowList = projectWorkflowMapper.selectByProjectId(projectId);
+            if(!CollectionUtils.isEmpty(projectWorkflowList)){
+                Optional<ProjectWorkflow>  result = projectWorkflowList.stream().filter(o->o.getNodeTableName().equals(tableName)).findFirst();
+                if(result.isPresent()){
+                    projectWorkflow = result.get();
+                }
+            }
+
+            if(!Objects.nonNull(projectWorkflow.getId())){
+                projectWorkflow.setParentId(id);
+                //projectWorkflow.setWorkflowId(workflow.getId());
+                projectWorkflow.setProjectId(projectId);
+                projectWorkflow.setNodeId(nodeId);
+                //projectWorkflow.setNodeTableName(workflow.getTableName());
+                //projectWorkflow.setWorkflowName(workflow.getName());
+                projectWorkflowMapper.update(projectWorkflow);
+            }else {
+                //设置流程主键
+                projectWorkflow.generateId();
+                projectWorkflow.setParentId(id);
+                projectWorkflow.setWorkflowId(workflow.getId());
+                projectWorkflow.setProjectId(projectId);
+                projectWorkflow.setNodeId(nodeId);
+                projectWorkflow.setNodeTableName(workflow.getTableName());
+                projectWorkflow.setWorkflowName(workflow.getName());
+                projectWorkflowMapper.add(projectWorkflow);
+            }
         }
         tdgyMapper.updateHasOnchain(id, hasOnchain);
     }

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

@@ -93,19 +93,20 @@
     </select>
 
 
-    <select id="selectTGeomDbDetailsByNodeId" parameterType="String" resultType="java.util.List">
+    <select id="selectTGeomDbDetailsByNodeId" parameterType="String" resultType="java.util.Map">
         select  details.id, public.st_asewkt(details.geom) AS  geom, details.upload_id, details.geom_json, details.sort, details.geom_area
         from t_geom_db_details  details
-                 INNER JOIN   t_node_land node   on  node.geom_db_id=details.upload_id
+                 INNER JOIN   t_node_land node    on  node.geom_db_id=details.upload_id
         WHERE node.node_id =#{nodeId}
     </select>
 
     <select id="selectGeomContainsNode" parameterType="String" resultType="map">
-        SELECT  geom.* , node.node_id as nodeId  FROM  "t_geom_db_details"  geom
+        SELECT  geom.* , node.node_id   FROM  "t_geom_db_details"  geom
                 LEFT JOIN "public"."t_geom_db"  upload   on geom.upload_id=upload.id
                 LEFT JOIN "public"."t_node_land" node    on  node.geom_db_id=upload.id
                 LEFT JOIN  "public"."t_ydbp_data" ydbp   on  node.node_id=ydbp.id
                 where ydbp.has_onchain=true AND  st_contains(geom.geom, (SELECT geom FROM "t_geom_db_details" WHERE id = #{detailsId}) )
+                limit 1
     </select>
 
 

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

@@ -58,6 +58,9 @@
                updated_at
         FROM t_project_workflow
         WHERE node_id = #{nodeId}
+        <if test="projectId != null">
+            AND project_id = #{projectId}
+        </if>
         ORDER BY created_at
     </select>
 
@@ -77,7 +80,9 @@
         SELECT COALESCE((SELECT has_onchain
                          FROM ${tableName}
                          WHERE id = #{id}
-                           AND project_id = #{projectId}
+                        <if test="projectId != null">
+                            AND project_id = #{projectId}
+                        </if>
                         LIMIT 1 ), false) AS has_onchain
     </select>
 
@@ -180,4 +185,19 @@
     </select>
 
 
+    <!-- 更新记录:ProjectWorkflow -->
+    <update id="update" parameterType="com.siwei.apply.domain.ProjectWorkflow">
+        UPDATE t_project_workflow
+        <set>
+            <if test="projectId != null">project_id = #{projectId},</if>
+            <if test="workflowId != null">workflow_id = #{workflowId},</if>
+            <if test="parentId != null">parent_id = #{parentId},</if>
+            <if test="nodeId != null">node_id = #{nodeId},</if>
+            <if test="nodeTableName != null">node_table_name = #{nodeTableName},</if>
+            <if test="workflowName != null">workflow_name = #{workflowName},</if>
+            updated_at = now()
+        </set>
+        WHERE id = #{id}
+    </update>
+
 </mapper>