Explorar o código

全库检索优化查询数量

chenendian hai 3 meses
pai
achega
27e75b3573

+ 13 - 2
siwei-modules/siwei-apply/src/main/java/com/siwei/apply/controller/ProjectController.java

@@ -13,6 +13,7 @@ import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
+import javax.servlet.http.HttpServletRequest;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -195,8 +196,6 @@ public class ProjectController extends BaseController {
         }
     }
 
-
-
     @DeleteMapping("oneNode")
     public R<Void> DeleteNode(@RequestBody NodeVo nodeVo) {
         try {
@@ -211,5 +210,17 @@ public class ProjectController extends BaseController {
     }
 
 
+    @GetMapping("/getIp")
+    public R<String> getClientIp(HttpServletRequest request) {
+        String clientIp = request.getRemoteAddr();
+        // 处理 X-Forwarded-For 头部信息(对于反向代理或负载均衡器很有用)
+        if (request.getHeader("X-Forwarded-For") != null) {
+            clientIp = request.getHeader("X-Forwarded-For").split(",")[0];
+        }
+        return R.ok("Client IP: "+ clientIp);
+    }
+
+
+
 
 }

+ 1 - 1
siwei-modules/siwei-apply/src/main/java/com/siwei/apply/domain/vo/ProjectFilterVo.java

@@ -22,7 +22,7 @@ public class ProjectFilterVo {
 
     private Boolean isOnchain;
 
-    private Integer filterType;
+    private Integer filterType;   //0-查询全部数据,1-查询项目,2-查询附件
 
     private List<String> keyWords;
 

+ 3 - 0
siwei-modules/siwei-apply/src/main/java/com/siwei/apply/mapper/ProjectMapper.java

@@ -74,6 +74,9 @@ public interface ProjectMapper {
     Integer deleteNodeByTable(@Param("nodeId")String nodeId,@Param("tableName") String tableName);
 
 
+    Integer getSearchProjectCount(ProjectFilterVo projectFilterVo);
+
+    Integer getSearchAttachmentCount(ProjectFilterVo projectFilterVo);
 
 
 }

+ 8 - 19
siwei-modules/siwei-apply/src/main/java/com/siwei/apply/service/impl/ProjectImpl.java

@@ -258,7 +258,6 @@ public class ProjectImpl implements ProjectService {
                 }
                 projectWorkflows.add(projectWorkflowRes);
             }
-
         }
 
         Map<String, List<ProjectWorkflowRes>> workflowMap = new HashMap<>();
@@ -307,7 +306,6 @@ public class ProjectImpl implements ProjectService {
         ProjectUpdateVo updateProject = new ProjectUpdateVo();
         updateProject.setId(projectId);
         updateProject.setOnChainNum(onChinaNum);
-        // updateProject.setOnChainNum(onChinaNum);
         projectMapper.update(updateProject);
     }
 
@@ -323,6 +321,10 @@ public class ProjectImpl implements ProjectService {
         // todo 这里后期可以进行优化,把查询出的项目id写入redis中,分页时候可以取缓存
         List<SearchProjectAndAttachment> projects = projectMapper.getListSearch(projectFilterVo);
         Integer count = projectMapper.getSearchCount(projectFilterVo);
+
+        Integer projectCount = projectMapper.getSearchProjectCount(projectFilterVo);
+        Integer attachmentCount = projectMapper.getSearchAttachmentCount(projectFilterVo);
+
         // 根据项目id查询所有流程id
         List<String> projectIdList = projects.stream().map(BaseId::getId).collect(Collectors.toList());
         List<ProjectWorkflow> projectWorkflowList = null;
@@ -334,33 +336,20 @@ public class ProjectImpl implements ProjectService {
             nodeIdList = projectWorkflowList.stream().map(ProjectWorkflow::getNodeId).collect(Collectors.toList());
         }
         Integer graphicLayerCount = 0;
-        Integer attachmentCount = 0;
         if (CollectionUtils.isNotEmpty(nodeIdList)) {
             graphicLayerCount = nodeLandMapper.selectCountGeomByNodeId(nodeIdList);
-            // 这里获取每一个节点的附件数据:
-            List<String> allAttachmentFileList = new CopyOnWriteArrayList<>();
-            List<NodeAttachment> nodeAttachmentList = nodeAttachmentService.getByNodeIdList(nodeIdList);
-            nodeAttachmentList.parallelStream().forEach(nodeAttachment -> {
-                String attachmentJsonString = JSONObject.toJSONString(nodeAttachment.getAttachment());
-                JSONObject attachmentJsonObj = JSON.parseObject(attachmentJsonString);
-                try {
-                    List<String> tmpList = getAllAttachmentList(attachmentJsonObj);
-                    allAttachmentFileList.addAll(tmpList);
-                } catch (IOException e) {
-                    log.error("解析节点附件json失败", e);
-                    e.printStackTrace();
-                }
-            });
-            attachmentCount = allAttachmentFileList.size();
         }
-        Map<String, Object> map = new HashMap<>();
+        Map<String, Object> map = new LinkedHashMap<>();
         map.put("projects", projects);
         map.put("count", count);
+        map.put("projectCount", projectCount);
         map.put("attachmentCount", attachmentCount);
         map.put("graphicLayerCount", graphicLayerCount);
         return map;
     }
 
+
+
     @Override
     public ProjectWorkflow getProjectWorkflowByNodeId(String projectId, String nodeId) {
         ProjectWorkflow projectWorkflow = null;

+ 86 - 0
siwei-modules/siwei-apply/src/main/resources/mapper/ProjectMapper.xml

@@ -502,6 +502,92 @@
         ) AS distinct_projects
     </select>
 
+    <select id="getSearchProjectCount" parameterType="com.siwei.apply.domain.vo.ProjectFilterVo" resultType="int">
+        SELECT COUNT(*)
+        FROM (
+                SELECT
+                P."id" AS ID,
+                P."name" AS NAME,
+                P."code" AS code,
+                P."company" AS company,
+                P."created_at" AS createAt,
+                P."updated_at" AS updateAt,
+                P."project_type" AS projectType,
+                P."on_chain_num" AS onChainNum,
+                P."creator_id" AS creatorId,
+                P."updated_at" AS updatedAt,
+                '1'  AS selectType,
+                '' AS attachmentId,
+                '' AS nodeId  ,
+                '' AS fileName,
+                '' AS  filePath
+                FROM  PUBLIC.t_project P
+                <where>
+                    <if test="keyWords != null and keyWords.size() > 0">
+                        regexp_like(P.name,
+                        REGEXP_REPLACE(
+                        <foreach collection="keyWords" item="word" open="'(" separator="|" close=")'" >${word}</foreach>
+                        , '[\r\n\s]+', '', 'g')
+                        , 'i')
+                        OR
+                        regexp_like(P.code,
+                        REGEXP_REPLACE(
+                        <foreach collection="keyWords" item="word" open="'(" separator="|" close=")'" >${word}</foreach>
+                        , '[\r\n\s]+', '', 'g')
+                        , 'i')
+                        OR
+                        regexp_like(P.company,
+                        REGEXP_REPLACE(
+                        <foreach collection="keyWords" item="word" open="'(" separator="|" close=")'" >${word}</foreach>
+                        , '[\r\n\s]+', '', 'g')
+                        , 'i')
+                    </if>
+                    <if test="isOnchain != null and isOnchain">
+                        AND on_chain_num > 0
+                    </if>
+                </where>
+        ) AS distinct_projects
+    </select>
+
+
+    <select id="getSearchAttachmentCount" parameterType="com.siwei.apply.domain.vo.ProjectFilterVo" resultType="int">
+        SELECT COUNT(*)
+        FROM (
+                SELECT
+                project."id" AS ID,
+                project."name" AS NAME,
+                project."code" AS code,
+                project."company" AS company,
+                project."created_at" AS createAt,
+                project."updated_at" AS updateAt,
+                project."project_type" AS projectType,
+                project."on_chain_num" AS onChainNum,
+                project."creator_id" AS creatorId,
+                project."updated_at" AS updatedAt,
+                '2'  AS selectType,
+                info.ID AS attachmentId,
+                info.node_id AS nodeId,
+                info.file_name AS  fileName,
+                info.file_path AS filePath
+                FROM  PUBLIC.t_project_attachment_info info
+                LEFT JOIN t_project project   on  info.project_id=project.id
+                <where>
+                    <if test="keyWords != null and keyWords.size() > 0">
+                        regexp_like(info.file_name,
+                        REGEXP_REPLACE(
+                        <foreach collection="keyWords" item="word" open="'(" separator="|" close=")'" >${word}</foreach>
+                        , '[\r\n\s]+', '', 'g')
+                        , 'i')
+                    </if>
+                    AND  project.id is not null
+                    <if test="isOnchain != null and isOnchain">
+                        AND on_chain_num > 0
+                    </if>
+                </where>
+        ) AS distinct_projects
+    </select>
+
+
 
     <delete id="deleteNodeByTable">
         DELETE FROM ${tableName}