From fa90edeeb9396b8a8031f7fb14cc30c4386cc1db Mon Sep 17 00:00:00 2001
From: zxl <763096477@qq.com>
Date: 星期五, 28 十一月 2025 11:38:12 +0800
Subject: [PATCH] 首页

---
 business/src/main/java/com/ycl/service/impl/IndexHomeServiceImpl.java         |  143 +++++++++++++++++++++++
 business/src/main/java/com/ycl/domain/form/ProjectProgressStatisticsForm.java |   28 ++++
 business/src/main/resources/mapper/ProjectInfoMapper.xml                      |   14 ++
 business/src/main/java/com/ycl/service/IndexHomeService.java                  |   43 +++++++
 business/target/classes/com/ycl/mapper/ProjectInfoMapper.class                |    0 
 business/src/main/java/com/ycl/mapper/ProjectInfoMapper.java                  |    9 +
 business/src/main/java/com/ycl/controller/IndexHomeController.java            |   67 +++++++++++
 business/target/classes/mapper/ProjectInfoMapper.xml                          |   14 ++
 8 files changed, 316 insertions(+), 2 deletions(-)

diff --git a/business/src/main/java/com/ycl/controller/IndexHomeController.java b/business/src/main/java/com/ycl/controller/IndexHomeController.java
new file mode 100644
index 0000000..92ec413
--- /dev/null
+++ b/business/src/main/java/com/ycl/controller/IndexHomeController.java
@@ -0,0 +1,67 @@
+package com.ycl.controller;
+
+
+import com.ycl.common.base.Result;
+import com.ycl.domain.form.ProjectProgressStatisticsForm;
+import com.ycl.service.IndexHomeService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * nongtou-project-java
+ * 鏂伴椤垫帶鍒跺眰
+ * @author : zxl
+ * @date : 2025-11-26 15:55
+ **/
+
+@RestController
+@RequiredArgsConstructor
+@RequestMapping("/index")
+public class IndexHomeController {
+    private final IndexHomeService indexHomeService;
+
+    /**
+     * 棣栭〉缁熻椤圭洰鐘舵��
+     * @return
+     */
+    @GetMapping("/codingCount")
+    Result projectCodingStatusCount(){
+        return indexHomeService.projectCodingStatusCount();
+    }
+
+    /**
+     * 椤圭洰闃舵鐘舵�佺粺璁�
+     * @return
+     */
+    @GetMapping("/stageCount")
+    Result projectStageCount(){
+        return indexHomeService.projectStageCount();
+    }
+
+    /**
+     * 椤圭洰杩涘害缁熻
+     * @return
+     */
+    Result projectTaskStatus(ProjectProgressStatisticsForm form){
+        return indexHomeService.projectTaskStatus(form);
+    }
+
+    /**
+     * 椤圭洰璧勯噾鐘舵��
+     * @return
+     */
+    @GetMapping("/fundingStatus")
+    Result projectFundingStatus(){
+        return indexHomeService.projectFundingStatus();
+    }
+
+    /**
+     * 椤圭洰鎺ㄨ繘鍗$偣
+     * @return
+     */
+    Result projectAdvanceCheckPoint(){
+        return indexHomeService.projectAdvanceCheckPoint();
+    }
+}
diff --git a/business/src/main/java/com/ycl/domain/form/ProjectProgressStatisticsForm.java b/business/src/main/java/com/ycl/domain/form/ProjectProgressStatisticsForm.java
new file mode 100644
index 0000000..042ae06
--- /dev/null
+++ b/business/src/main/java/com/ycl/domain/form/ProjectProgressStatisticsForm.java
@@ -0,0 +1,28 @@
+package com.ycl.domain.form;
+
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ycl.system.domain.base.AbsForm;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.Date;
+
+/**
+ * nongtou-project-java
+ * 椤圭洰杩涘害缁熻琛ㄥ崟
+ *
+ * @author : zxl
+ * @date : 2025-11-26 16:34
+ **/
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class ProjectProgressStatisticsForm extends AbsForm {
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date startTime;
+
+
+}
diff --git a/business/src/main/java/com/ycl/mapper/ProjectInfoMapper.java b/business/src/main/java/com/ycl/mapper/ProjectInfoMapper.java
index 97b7358..4d653b8 100644
--- a/business/src/main/java/com/ycl/mapper/ProjectInfoMapper.java
+++ b/business/src/main/java/com/ycl/mapper/ProjectInfoMapper.java
@@ -46,4 +46,13 @@
     ProjectInfo queryById(Integer recordId);
 
     List<ProjectInfo> checkProjectNameAndIdIsUnique(@Param("id")Long id,@Param("name") String name,@Param("code")String code);
+
+    /**
+     * 鑾峰緱椤圭洰璧勯噾淇℃伅
+     * @param params
+     * @return
+     */
+    @DataScope(deptAlias = "d")
+    List<ProjectInfoVO> getProjectInfoAndFunding(BaseEntity params);
+
 }
diff --git a/business/src/main/java/com/ycl/service/IndexHomeService.java b/business/src/main/java/com/ycl/service/IndexHomeService.java
new file mode 100644
index 0000000..e2d7da3
--- /dev/null
+++ b/business/src/main/java/com/ycl/service/IndexHomeService.java
@@ -0,0 +1,43 @@
+package com.ycl.service;
+
+
+import com.ycl.common.annotation.DataScope;
+import com.ycl.common.base.Result;
+import com.ycl.domain.form.ProjectProgressStatisticsForm;
+
+/**
+ * 棣栭〉 鏈嶅姟绫�
+ */
+public interface IndexHomeService {
+
+    /**
+     * 棣栭〉缁熻椤圭洰鐘舵��
+     * @return
+     */
+    Result projectCodingStatusCount();
+
+    /**
+     * 椤圭洰闃舵鐘舵�佺粺璁�
+     * @return
+     */
+    Result projectStageCount();
+
+    /**
+     * 椤圭洰杩涘害缁熻
+     * @return
+     */
+    Result projectTaskStatus(ProjectProgressStatisticsForm form);
+
+    /**
+     * 椤圭洰璧勯噾鐘舵��
+     * @return
+     */
+    Result projectFundingStatus();
+
+
+    /**
+     * 椤圭洰鎺ㄨ繘鍗$偣
+     * @return
+     */
+    Result projectAdvanceCheckPoint();
+}
diff --git a/business/src/main/java/com/ycl/service/impl/IndexHomeServiceImpl.java b/business/src/main/java/com/ycl/service/impl/IndexHomeServiceImpl.java
new file mode 100644
index 0000000..938bb41
--- /dev/null
+++ b/business/src/main/java/com/ycl/service/impl/IndexHomeServiceImpl.java
@@ -0,0 +1,143 @@
+package com.ycl.service.impl;
+
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
+import com.ycl.common.annotation.DataScope;
+import com.ycl.common.base.Result;
+import com.ycl.common.constant.ProcessOverTimeConstants;
+import com.ycl.common.core.domain.BaseEntity;
+import com.ycl.common.enums.business.CodingRulerCodeTypeEnum;
+import com.ycl.common.enums.business.CodingRulerStatusEnum;
+import com.ycl.common.enums.business.ProjectCategoryEnum;
+import com.ycl.common.enums.business.ProjectStatusEnum;
+import com.ycl.common.utils.SecurityUtils;
+import com.ycl.domain.entity.ProjectInfo;
+import com.ycl.domain.form.ProjectProgressStatisticsForm;
+import com.ycl.domain.vo.ProjectInfoVO;
+import com.ycl.domain.vo.ProjectVO;
+import com.ycl.mapper.ProjectInfoMapper;
+import com.ycl.service.IndexHomeService;
+import com.ycl.service.ProjectInfoService;
+import com.ycl.service.ProjectProcessService;
+import com.ycl.system.mapper.SysDeptMapper;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * nongtou-project-java
+ * 棣栭〉瀹炵幇绫�
+ *
+ * @author : zxl
+ * @date : 2025-11-26 16:51
+ **/
+@Service
+@RequiredArgsConstructor
+public class IndexHomeServiceImpl implements IndexHomeService {
+
+    private final SysDeptMapper sysDeptMapper;
+    private final ProjectInfoMapper projectInfoMapper;
+    @Override
+    public Result projectCodingStatusCount() {
+        //鏉冮檺鎺у埗
+        Long userId = SecurityUtils.getUserId();
+        List<ProjectInfo> list;
+        if (SecurityUtils.isAdmin(userId)){
+            //鏌ヨ鍏ㄩ儴
+            list = new LambdaQueryChainWrapper<>(projectInfoMapper)
+                    .eq(ProjectInfo::getDeleted, Boolean.FALSE)
+                    .eq(ProjectInfo::getUsedStatus, 2) //瀹℃牳閫氳繃
+                    .list();
+        }else{
+            String ancestors = sysDeptMapper.selectAncestors(userId);
+            String[] ancestorArr = ancestors.split(",");
+            List<String> ancestorList = Arrays.stream(ancestorArr).collect(Collectors.toList());
+            ancestorList.add(SecurityUtils.getDeptId() + "");
+            //鑾峰緱鏈崟浣嶄互鍙婂叾瀛愬崟浣峝eptId;
+            list = new LambdaQueryChainWrapper<>(projectInfoMapper)
+                    .eq(ProjectInfo::getDeleted, Boolean.FALSE)
+                    .eq(ProjectInfo::getUsedStatus, 2) //瀹℃牳閫氳繃
+                    .in(ProjectInfo::getProjectOwnerUnit, ancestorList)
+                    .list();
+        }
+
+
+
+
+        Map<String,Integer> map = new HashMap<>();
+        map.put(ProcessOverTimeConstants.GREEN,0);
+        map.put(ProcessOverTimeConstants.YELLOW,0);
+        map.put(ProcessOverTimeConstants.RED,0);
+        map.put("total",0);
+        if (CollectionUtils.isEmpty(list)) {
+
+            //杩斿洖榛樿鍊�
+            return Result.ok().data(map);
+        }
+
+        Map<String, List<ProjectInfo>> collect = list.stream()
+                .filter(project -> project.getCoding() != null) // 杩囨护coding涓簄ull鐨勬儏鍐�
+                .collect(Collectors.groupingBy(ProjectInfo::getCoding));
+
+        if (collect.containsKey(ProcessOverTimeConstants.GREEN)) {
+            map.put(ProcessOverTimeConstants.GREEN, collect.get(ProcessOverTimeConstants.GREEN).size());
+        }
+        if (collect.containsKey(ProcessOverTimeConstants.YELLOW)) {
+            map.put(ProcessOverTimeConstants.YELLOW, collect.get(ProcessOverTimeConstants.YELLOW).size());
+        }
+        if (collect.containsKey(ProcessOverTimeConstants.RED)) {
+            map.put(ProcessOverTimeConstants.RED, collect.get(ProcessOverTimeConstants.RED).size());
+        }
+
+        map.put("total", list.size());
+        return Result.ok().data(map);
+    }
+
+    @Override
+    public Result projectStageCount() {
+        List<ProjectVO> projectVOS = projectInfoMapper.homeCount(new BaseEntity());
+        int reserve = 0;
+        int  previous = 0;
+        int  implement = 0;
+        int  finish = 0;
+        for (ProjectVO projectVO : projectVOS) {
+            if (ProjectCategoryEnum.RESERVE.getDesc().equals(ProjectCategoryEnum.getPhaseByProjectStatus(projectVO.getProjectPhase()))) {
+                reserve+=1;
+            } else if (ProjectCategoryEnum.PREVIOUS.getDesc().equals(ProjectCategoryEnum.getPhaseByProjectStatus(projectVO.getProjectPhase()))) {
+                previous+=1;
+            } else if (ProjectCategoryEnum.IMPLEMENT.getDesc().equals(ProjectCategoryEnum.getPhaseByProjectStatus(projectVO.getProjectPhase()))) {
+                implement+=1;
+            } else if (ProjectCategoryEnum.FINISH.getDesc().equals(ProjectCategoryEnum.getPhaseByProjectStatus(projectVO.getProjectPhase()))) {
+                finish+=1;
+            }
+        }
+        Map<String,Integer> map = new HashMap<>();
+        map.put(ProjectCategoryEnum.RESERVE.getCode(),reserve);
+        map.put(ProjectCategoryEnum.PREVIOUS.getCode(),previous);
+        map.put(ProjectCategoryEnum.IMPLEMENT.getCode(),implement);
+        map.put(ProjectCategoryEnum.FINISH.getCode(),finish);
+        return Result.ok().data(map);
+    }
+
+    @Override
+    public Result projectTaskStatus(ProjectProgressStatisticsForm form) {
+        return null;
+    }
+
+    @Override
+    @DataScope(deptAlias = "d")
+    public Result projectFundingStatus( ) {
+
+        List<ProjectInfoVO> projectInfoAndFunding = projectInfoMapper.getProjectInfoAndFunding(new BaseEntity());
+        return Result.ok().data(projectInfoAndFunding);
+    }
+
+    @Override
+    public Result projectAdvanceCheckPoint() {
+        return null;
+    }
+}
diff --git a/business/src/main/resources/mapper/ProjectInfoMapper.xml b/business/src/main/resources/mapper/ProjectInfoMapper.xml
index 2c6acca..6a87a4b 100644
--- a/business/src/main/resources/mapper/ProjectInfoMapper.xml
+++ b/business/src/main/resources/mapper/ProjectInfoMapper.xml
@@ -61,7 +61,6 @@
             TPI.id = #{id} AND TPI.deleted = 0
     </select>
 
-
     <select id="getPage" resultMap="resultMap">
         SELECT
             TPI.*,TPP.process_ins_id as processId,
@@ -251,4 +250,17 @@
 
     </select>
 
+    <select id="getProjectInfoAndFunding" parameterType="com.ycl.common.core.domain.BaseEntity" resultMap="resultMap">
+        SELECT TPI.*,TPIF.total_investment,TPIF.principal,TPIF.government_investment_total,
+               TPIF.central_investment_total,TPIF.provincial_investment_total,TPIF.city_investment_total,TPIF.county_investment_total,
+               TPIF.other_investment_total
+        FROM t_project_info TPI
+        LEFT JOIN t_project_investment_funding TPIF ON TPI.id = TPIF.project_id and TPIF.deleted = 0
+        LEFT JOIN sys_dept d ON TPI.project_owner_unit = d.dept_id
+        <where>
+            TPI.deleted = 0 AND TPI.used_status = 2
+            ${params.dataScope}
+        </where>
+
+    </select>
 </mapper>
diff --git a/business/target/classes/com/ycl/mapper/ProjectInfoMapper.class b/business/target/classes/com/ycl/mapper/ProjectInfoMapper.class
index 912e328..254a035 100644
--- a/business/target/classes/com/ycl/mapper/ProjectInfoMapper.class
+++ b/business/target/classes/com/ycl/mapper/ProjectInfoMapper.class
Binary files differ
diff --git a/business/target/classes/mapper/ProjectInfoMapper.xml b/business/target/classes/mapper/ProjectInfoMapper.xml
index 2c6acca..6a87a4b 100644
--- a/business/target/classes/mapper/ProjectInfoMapper.xml
+++ b/business/target/classes/mapper/ProjectInfoMapper.xml
@@ -61,7 +61,6 @@
             TPI.id = #{id} AND TPI.deleted = 0
     </select>
 
-
     <select id="getPage" resultMap="resultMap">
         SELECT
             TPI.*,TPP.process_ins_id as processId,
@@ -251,4 +250,17 @@
 
     </select>
 
+    <select id="getProjectInfoAndFunding" parameterType="com.ycl.common.core.domain.BaseEntity" resultMap="resultMap">
+        SELECT TPI.*,TPIF.total_investment,TPIF.principal,TPIF.government_investment_total,
+               TPIF.central_investment_total,TPIF.provincial_investment_total,TPIF.city_investment_total,TPIF.county_investment_total,
+               TPIF.other_investment_total
+        FROM t_project_info TPI
+        LEFT JOIN t_project_investment_funding TPIF ON TPI.id = TPIF.project_id and TPIF.deleted = 0
+        LEFT JOIN sys_dept d ON TPI.project_owner_unit = d.dept_id
+        <where>
+            TPI.deleted = 0 AND TPI.used_status = 2
+            ${params.dataScope}
+        </where>
+
+    </select>
 </mapper>

--
Gitblit v1.8.0