zxl
11 小时以前 fa90edeeb9396b8a8031f7fb14cc30c4386cc1db
首页
4个文件已修改
4个文件已添加
318 ■■■■■ 已修改文件
business/src/main/java/com/ycl/controller/IndexHomeController.java 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
business/src/main/java/com/ycl/domain/form/ProjectProgressStatisticsForm.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
business/src/main/java/com/ycl/mapper/ProjectInfoMapper.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
business/src/main/java/com/ycl/service/IndexHomeService.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
business/src/main/java/com/ycl/service/impl/IndexHomeServiceImpl.java 143 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
business/src/main/resources/mapper/ProjectInfoMapper.xml 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
business/target/classes/com/ycl/mapper/ProjectInfoMapper.class 补丁 | 查看 | 原始文档 | blame | 历史
business/target/classes/mapper/ProjectInfoMapper.xml 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
business/src/main/java/com/ycl/controller/IndexHomeController.java
New file
@@ -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();
    }
}
business/src/main/java/com/ycl/domain/form/ProjectProgressStatisticsForm.java
New file
@@ -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;
}
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);
}
business/src/main/java/com/ycl/service/IndexHomeService.java
New file
@@ -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();
}
business/src/main/java/com/ycl/service/impl/IndexHomeServiceImpl.java
New file
@@ -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() + "");
            //获得本单位以及其子单位deptId;
            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为null的情况
                .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;
    }
}
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>
business/target/classes/com/ycl/mapper/ProjectInfoMapper.class
Binary files differ
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>