2 Commits cd9bb75dda ... 089f9bf317

Autor SHA1 Mensaje Fecha
  gushoubang 089f9bf317 概览修改 hace 9 meses
  gushoubang 2f486b867b 生命周期添加 hace 9 meses

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

@@ -79,9 +79,9 @@ public class ProjectController extends BaseController {
      * 获取项目概览
      */
     @GetMapping("/overview")
-    public R<ProjectOverviewRes> GetOverview() {
+    public R<ProjectOverviewRes> GetOverview(@RequestParam(required = false) Integer projectType) {
         try {
-            ProjectOverviewRes res = projectService.getOverview();
+            ProjectOverviewRes res = projectService.getOverview(projectType);
             return R.ok(res);
         } catch (Exception e) {
             return R.fail(e.getMessage());

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

@@ -28,7 +28,7 @@ public class Gyjsydscdj {
     private String djjg;           // 登记结构
     private String djDate;           // 登记日期
     private Map<String, Object> attachment; // 附件
-    private String hasOnchain;     // 是否上链
+    private Boolean hasOnchain;     // 是否上链(布尔)
     private String creatorId;      // 创建人ID
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date createdAt;        // 创建时间

+ 2 - 2
siwei-modules/siwei-apply/src/main/java/com/siwei/apply/domain/res/ProjectCycleRes.java

@@ -15,6 +15,6 @@ public class ProjectCycleRes {
     private String name;         // 名称
     private Double index;        // 执行顺序
 
-    private Boolean isComplete=false;//是否完成
-    private List<ProjectWorkflow> workflows;
+    private Boolean hasOnchain=false;//是否完成
+    private List<ProjectWorkflowRes> workflows;
 }

+ 41 - 0
siwei-modules/siwei-apply/src/main/java/com/siwei/apply/domain/res/ProjectWorkflowRes.java

@@ -0,0 +1,41 @@
+package com.siwei.apply.domain.res;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 项目生命周期返回结果
+ */
+@Data
+public class ProjectWorkflowRes {
+    /**
+     * 节点id,对应当前进度
+     */
+    private String nodeId;
+    /**
+     * 流程id,对应总的流程(不返回前端)
+     */
+    @JsonIgnore
+    private String workflowId;
+    /**
+     * 项目id(不返回前端)
+     */
+    @JsonIgnore
+    private String projectId;
+
+    /**
+     * 节点表名
+     */
+    @JsonIgnore
+    private String nodeTableName;
+
+    /**
+     * 创建时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date createdAt;
+}
+

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

@@ -8,5 +8,5 @@ import lombok.Data;
 @Data
 public class GyjsydscdjUpdateVo extends GyjsydscdjVo {
     private String id;
-    private String hasOnchain;    // 是否上链
+    private Boolean hasOnchain;    // 是否上链(布尔)
 }

+ 18 - 3
siwei-modules/siwei-apply/src/main/java/com/siwei/apply/mapper/ProjectWorkflowMapper.java

@@ -2,6 +2,7 @@ package com.siwei.apply.mapper;
 
 import com.siwei.apply.domain.ProjectWorkflow;
 import com.siwei.apply.domain.res.ProjectProcessRes;
+import com.siwei.apply.domain.res.ProjectWorkflowRes;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
@@ -19,6 +20,21 @@ public interface ProjectWorkflowMapper {
      */
     List<ProjectWorkflow> selectByNodeId(@Param("nodeId") String nodeId);
 
+    /**
+     * 原有:带 hasOnchain 的整合查询(保留)
+     */
+    List<ProjectWorkflowRes> selectCycleByProjectId(@Param("projectId") String projectId);
+
+    /**
+     * 查询项目流程节点是否上链
+     *
+     * @param id
+     * @param projectId
+     * @param tableName
+     * @return
+     */
+    Boolean isOnchain(@Param("id") String id, @Param("projectId") String projectId, @Param("tableName") String tableName);
+
     /**
      * 新增项目流程节点关系
      */
@@ -27,12 +43,11 @@ public interface ProjectWorkflowMapper {
     /**
      * 根据项目id与节点表名查询项目流程节点关系
      */
-    List<ProjectWorkflow> selectByProjectIdAndNodeTableName(@Param("projectId") String projectId,
-                                                            @Param("nodeTableName") String nodeTableName);
+    List<ProjectWorkflow> selectByProjectIdAndNodeTableName(@Param("projectId") String projectId, @Param("nodeTableName") String nodeTableName);
 
     /**
      * 统计:取每个 project_id 的最大 workflow_id,若相同 workflow_id 有多条仅计一次,
      * 再按 workflow_name 统计数量,返回字段为 name(workflow_name)与 count
      */
-    List<ProjectProcessRes> countMaxWorkflowByName();
+    List<ProjectProcessRes> countMaxWorkflowByName(@Param("projectType") Integer projectType);
 }

+ 2 - 3
siwei-modules/siwei-apply/src/main/java/com/siwei/apply/mapper/TdgyMapper.java

@@ -47,8 +47,7 @@ public interface TdgyMapper {
 
     /**
      * 按 gd_type 统计数量和求和 gd_area
-     * 返回字段:gdType, count, gdArea
+     * 返回字段:gdType, count, gdArea, gdUnit,可选传入 projectType 过滤 t_project.project_type
      */
-    List<ProjectSupplyRes> countAndSumByGdType();
+    List<ProjectSupplyRes> countAndSumByGdType(@Param("projectType") Integer projectType);
 }
-

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

@@ -57,7 +57,7 @@ public interface ProjectService {
     /**
      * 获取项目概览信息
      */
-    ProjectOverviewRes getOverview();
+    ProjectOverviewRes getOverview(Integer projectType);
 
     /**
      * 获取项目周期

+ 16 - 7
siwei-modules/siwei-apply/src/main/java/com/siwei/apply/service/impl/ProjectImpl.java

@@ -91,17 +91,17 @@ public class ProjectImpl implements ProjectService {
     }
 
     @Override
-    public ProjectOverviewRes getOverview() {
+    public ProjectOverviewRes getOverview(Integer projectType) {
         ProjectOverviewRes projectOverviewRes = new ProjectOverviewRes();
         // todo 根据人员/权限统计
         // 获取项目数量
         ProjectNumRes projectNumRes = projectMapper.countTypeStats();
         projectOverviewRes.setProjectNum(projectNumRes);
         // 获取项目供应
-        List<ProjectSupplyRes> projectSupplyList = tdgyMapper.countAndSumByGdType();
+        List<ProjectSupplyRes> projectSupplyList = tdgyMapper.countAndSumByGdType(projectType);
         projectOverviewRes.setProjectSupplyList(projectSupplyList);
         // 获取项目进度
-        List<ProjectProcessRes> projectProcessList = projectWorkflowMapper.countMaxWorkflowByName();
+        List<ProjectProcessRes> projectProcessList = projectWorkflowMapper.countMaxWorkflowByName(projectType);
         projectOverviewRes.setProjectProcessList(projectProcessList);
         return projectOverviewRes;
     }
@@ -112,10 +112,17 @@ public class ProjectImpl implements ProjectService {
         // 获取不同类型的流程
         List<ProjectCycleRes> workflows = workflowMapper.selectByProjectTypeOrderByIndex(projectType);
         // 获取项目对应的工作流
-        List<ProjectWorkflow> projectWorkflows = projectWorkflowMapper.selectByProjectId(projectId);
-        Map<String, List<ProjectWorkflow>> workflowMap = new HashMap<>();
+        List<ProjectWorkflowRes> projectWorkflowsAll = projectWorkflowMapper.selectCycleByProjectId(projectId);
+        // 过滤掉没有上链的
+        List<ProjectWorkflowRes> projectWorkflows = new ArrayList<>();
+        for (ProjectWorkflowRes projectWorkflowRes : projectWorkflowsAll) {
+            Boolean hasOnchain = projectWorkflowMapper.isOnchain(projectWorkflowRes.getNodeId(), projectId, projectWorkflowRes.getNodeTableName());
+            if (hasOnchain) projectWorkflows.add(projectWorkflowRes);
+        }
+
+        Map<String, List<ProjectWorkflowRes>> workflowMap = new HashMap<>();
         // 将项目工作流按节点表名分组
-        for (ProjectWorkflow projectWorkflow : projectWorkflows) {
+        for (ProjectWorkflowRes projectWorkflow : projectWorkflows) {
             String workflowId = projectWorkflow.getWorkflowId();
             if (!workflowMap.containsKey(workflowId)) {
                 workflowMap.put(workflowId, new ArrayList<>());
@@ -125,8 +132,10 @@ public class ProjectImpl implements ProjectService {
         // 构建项目周期响应
         for (ProjectCycleRes workflow : workflows) {
             if (workflowMap.containsKey(workflow.getId())) {
-                workflow.setIsComplete(true);
+                workflow.setHasOnchain(true);
                 workflow.setWorkflows(workflowMap.get(workflow.getId()));
+            } else {
+                workflow.setWorkflows(new ArrayList<>());
             }
         }
         return workflows;

+ 62 - 12
siwei-modules/siwei-apply/src/main/resources/mapper/ProjectWorkflowMapper.xml

@@ -14,29 +14,72 @@
     </resultMap>
 
     <select id="selectByProjectId" parameterType="string" resultMap="ProjectWorkflowResultMap">
-        SELECT id, project_id, workflow_id, parent_id, node_id, node_table_name, workflow_name, created_at, updated_at
+        SELECT id,
+               project_id,
+               workflow_id,
+               parent_id,
+               node_id,
+               node_table_name,
+               workflow_name,
+               created_at,
+               updated_at
         FROM t_project_workflow
         WHERE project_id = #{projectId}
         ORDER BY created_at
     </select>
 
     <select id="selectByNodeId" parameterType="string" resultMap="ProjectWorkflowResultMap">
-        SELECT id, project_id, workflow_id, parent_id, node_id, node_table_name, workflow_name, created_at, updated_at
+        SELECT id,
+               project_id,
+               workflow_id,
+               parent_id,
+               node_id,
+               node_table_name,
+               workflow_name,
+               created_at,
+               updated_at
         FROM t_project_workflow
         WHERE node_id = #{nodeId}
         ORDER BY created_at
     </select>
 
+    <select id="selectCycleByProjectId" parameterType="string"
+            resultType="com.siwei.apply.domain.res.ProjectWorkflowRes">
+        SELECT project_id      as projectId,
+               node_id         as nodeId,
+               workflow_id     as workflowId,
+               node_table_name as nodeTableName,
+               created_at      as createdAt
+        FROM t_project_workflow
+        WHERE project_id = #{projectId}
+        ORDER BY created_at
+    </select>
+
+    <select id="isOnchain" parameterType="map" resultType="boolean">
+        SELECT COALESCE((SELECT has_onchain
+                         FROM ${tableName}
+                         WHERE id = #{id}
+                           AND project_id = #{projectId}
+                        LIMIT 1 ), false) AS has_onchain
+    </select>
+
     <insert id="add" parameterType="com.siwei.apply.domain.ProjectWorkflow">
-        INSERT INTO t_project_workflow (
-            id, project_id, workflow_id, parent_id, node_id, node_table_name, workflow_name, created_at, updated_at
-        ) VALUES (
-            #{id}, #{projectId}, #{workflowId}, #{parentId}, #{nodeId}, #{nodeTableName}, #{workflowName}, now(), now()
-        )
+        INSERT INTO t_project_workflow (id, project_id, workflow_id, parent_id, node_id, node_table_name, workflow_name,
+                                        created_at, updated_at)
+        VALUES (#{id}, #{projectId}, #{workflowId}, #{parentId}, #{nodeId}, #{nodeTableName}, #{workflowName}, now(),
+                now())
     </insert>
 
     <select id="selectByProjectIdAndNodeTableName" parameterType="map" resultMap="ProjectWorkflowResultMap">
-        SELECT id, project_id, workflow_id, parent_id, node_id, node_table_name, workflow_name, created_at, updated_at
+        SELECT id,
+               project_id,
+               workflow_id,
+               parent_id,
+               node_id,
+               node_table_name,
+               workflow_name,
+               created_at,
+               updated_at
         FROM t_project_workflow
         WHERE project_id = #{projectId}
           AND node_table_name = #{nodeTableName}
@@ -46,18 +89,25 @@
     <!-- 统计:每个项目取最大 workflow_id,若同项目同 workflow_id 多条只计一次;
          然后按 workflow_name 分组统计数量;返回字段 name(workflow_name)与 count -->
     <select id="countMaxWorkflowByName" resultType="com.siwei.apply.domain.res.ProjectProcessRes">
-        SELECT
-            t.workflow_name AS name,
-            CAST(COUNT(*) AS varchar) AS count
+        SELECT t.workflow_name AS name,
+               CAST(COUNT(*) AS varchar) AS count
         FROM (
             SELECT DISTINCT tpw.project_id, tpw.workflow_id, tpw.workflow_name
             FROM t_project_workflow tpw
             INNER JOIN (
-                SELECT project_id, MAX(workflow_id) AS max_workflow_id
+                SELECT project_id, MAX (workflow_id) AS max_workflow_id
                 FROM t_project_workflow
                 GROUP BY project_id
             ) m
             ON m.project_id = tpw.project_id AND m.max_workflow_id = tpw.workflow_id
+            <where>
+                <if test="projectType != null">
+                    EXISTS (
+                        SELECT 1 FROM t_project p
+                        WHERE p.id = tpw.project_id AND p.project_type = #{projectType}
+                    )
+                </if>
+            </where>
         ) t
         GROUP BY t.workflow_name
     </select>

+ 16 - 7
siwei-modules/siwei-apply/src/main/resources/mapper/TdgyMapper.xml

@@ -77,22 +77,31 @@
         WHERE id = #{id}
     </update>
 
-    <!-- 按 gd_type 统计数量与面积求和(面积统一换算成“亩”):返回 gdType(空值为“其他”), count, gdArea, gdUnit='亩' -->
+    <!-- 按 gd_type 统计数量与面积求和(面积统一换算成“亩”):返回 gdType(空值为“其他”), count, gdArea, gdUnit='亩'
+         当传入 projectType 时,仅统计其对应项目的记录(关联 t_project.project_type) -->
     <select id="countAndSumByGdType" resultType="com.siwei.apply.domain.res.ProjectSupplyRes">
         SELECT
-            COALESCE(NULLIF(TRIM(gd_type), ''), '其他') AS gdType,
+            COALESCE(NULLIF(TRIM(td.gd_type), ''), '其他') AS gdType,
             '亩' AS gdUnit,
             COUNT(*) AS count,
             COALESCE(
                 SUM(
                     CASE
-                        WHEN gd_unit = '0' THEN COALESCE(gd_area, 0) / 666.6666667  -- 平方米 -> 亩
-                        WHEN gd_unit = '1' THEN COALESCE(gd_area, 0) * 15           -- 公顷 -> 亩
-                        ELSE COALESCE(gd_area, 0)                                    -- 默认当作亩(含 '2')
+                        WHEN td.gd_unit = '0' THEN COALESCE(td.gd_area, 0) / 666.6666667  -- 平方米 -> 亩
+                        WHEN td.gd_unit = '1' THEN COALESCE(td.gd_area, 0) * 15           -- 公顷 -> 亩
+                        ELSE COALESCE(td.gd_area, 0)                                       -- 默认当作亩(含 '2')
                     END
                 ), 0
             ) AS gdArea
-        FROM t_tdgy
-        GROUP BY COALESCE(NULLIF(TRIM(gd_type), ''), '其他')
+        FROM t_tdgy td
+        <where>
+            <if test="projectType != null">
+                EXISTS (
+                    SELECT 1 FROM t_project p
+                    WHERE p.id = td.project_id AND p.project_type = #{projectType}
+                )
+            </if>
+        </where>
+        GROUP BY COALESCE(NULLIF(TRIM(td.gd_type), ''), '其他')
     </select>
 </mapper>