shenyijian
2024-06-25 61aaf1d26463b8bdff8ddaa90228f26042fbf5b2
湖北水库:施工:项目进度列表分页
10 files modified
133 ■■■■ changed files
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/DO/SgProjectInfoDO.java 4 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/DTO/ProjectSearchDTO.java 9 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/VO/SgProjectInfoVO.java 3 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/controller/SgProjectInfoController.java 13 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/excel/ProjectExcel.java 10 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgProjectInfoMapper.java 2 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgProjectInfoMapper.xml 7 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/service/SgProjectInfoService.java 4 ●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/service/impl/SgProjectInfoServiceImpl.java 79 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/service/impl/SgProjectPersonConfigServiceImpl.java 2 ●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/DO/SgProjectInfoDO.java
@@ -6,6 +6,7 @@
import lombok.*;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;
/**
@@ -176,4 +177,7 @@
    @TableField(exist = false)
    private String projectProgress;
    @TableField(exist = false)
    private BigDecimal ProjectProgressNum;
}
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/DTO/ProjectSearchDTO.java
@@ -1,11 +1,19 @@
package cn.gistack.sm.sg.DTO;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
/**
 * 查询类
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class ProjectSearchDTO {
    private String projectName;
    private String deviceName;
@@ -20,4 +28,5 @@
    private Integer approvalStatus;
    private Integer status;
    private Long reportPerson;
    private List<Long> projectIds;
}
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/VO/SgProjectInfoVO.java
@@ -4,7 +4,10 @@
import cn.gistack.sm.sg.DO.SgGxDO;
import cn.gistack.sm.sg.DO.SgGxStepDO;
import cn.gistack.sm.sg.DO.SgProjectInfoDO;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/controller/SgProjectInfoController.java
@@ -65,16 +65,25 @@
    }
    /**
     * 项目进度列表(分页)
     */
    @GetMapping(value = "/project_progress_page")
    public R progressPage(ProjectSearchDTO searchDTO,Query query) {
        IPage<SgProjectInfoVO> page= sgProjectInfoService.progressPage(Condition.getPage(query),searchDTO);
        return R.data(page);
    }
    /**
     * 首页项目统计(APP)
     */
    @GetMapping(value = "/project_count")
    public R projectCount(ProjectSearchDTO searchDTO) {
        Map<String,Long> map = sgProjectInfoService.projectCount(searchDTO);
        Map<String,Object> map = sgProjectInfoService.projectCount(searchDTO);
        return R.data(map);
    }
    /**
     * 导入用户
     * 导入项目
     */
    @PostMapping("import_project")
    public R importUser(MultipartFile file, Integer isCovered) {
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/excel/ProjectExcel.java
@@ -1,7 +1,15 @@
package cn.gistack.sm.sg.excel;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.alibaba.excel.annotation.write.style.ContentRowHeight;
import com.alibaba.excel.annotation.write.style.HeadRowHeight;
import lombok.Data;
import java.io.Serializable;
@Data
public class ProjectExcel {
@ColumnWidth(25)
@HeadRowHeight(20)
@ContentRowHeight(18)
public class ProjectExcel implements Serializable {
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgProjectInfoMapper.java
@@ -25,4 +25,6 @@
    List<SgProjectInfoVO> queryStepByProject(@Param("dto") ProjectSearchDTO searchDTO);
    List<SgProjectInfoVO> progressList(@Param("dto") ProjectSearchDTO searchDTO);
    List<SgProjectInfoVO> progressList(IPage<SgProjectInfoVO> page, @Param("dto") ProjectSearchDTO searchDTO);
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgProjectInfoMapper.xml
@@ -42,15 +42,16 @@
        <if test="dto.projectName != null and dto.projectName != ''">
            and pro.project_name like CONCAT(CONCAT('%', #{dto.projectName}), '%')
        </if>
        <if test="dto.status != null">
            and pro.status = #{dto.status}
        </if>
    </select>
    <select id="progressList" resultType="cn.gistack.sm.sg.VO.SgProjectInfoVO">
        SELECT
            pro.id,
            pro.project_name,
            de.STATUS as deviceStatus
            pro.project_name
        FROM
            ywxt.sg_project_info pro
                LEFT JOIN ywxt.sg_device de ON pro.id = de.program_id where 1=1
    <if test="dto.status != null">
        and pro.status = #{dto.status}
    </if>
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/service/SgProjectInfoService.java
@@ -26,7 +26,9 @@
    List<SgProjectInfoVO> progressList(ProjectSearchDTO searchDTO);
    Map<String, Long> projectCount(ProjectSearchDTO searchDTO);
    Map<String, Object> projectCount(ProjectSearchDTO searchDTO);
    void importProject(List<ProjectExcel> data, Boolean isCovered);
    IPage<SgProjectInfoVO> progressPage(IPage<SgProjectInfoVO> page, ProjectSearchDTO searchDTO);
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/service/impl/SgProjectInfoServiceImpl.java
@@ -15,6 +15,7 @@
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.jetbrains.annotations.NotNull;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -24,6 +25,7 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
@@ -44,9 +46,24 @@
        return page.setRecords(sgProjectInfoDOS);
    }
    /**
     * 获取项目及项目下设备及设备下工序进度
     * @param searchDTO
     * @return
     */
    @Override
    public List<SgProjectInfoDO> queryStepByProject(ProjectSearchDTO searchDTO) {
        List<SgProjectInfoVO> list = sgProjectInfoMapper.queryStepByProject( searchDTO);
        return getProjectProgress(list);
    }
    /**
     * 获取项目进度
     * @param list
     * @return
     */
    @NotNull
    private List<SgProjectInfoDO> getProjectProgress(List<SgProjectInfoVO> list) {
        //项目分组
        Map<Long, List<SgProjectInfoVO>> projectMap = list.stream().collect(Collectors.groupingBy(SgProjectInfoVO::getId));
        List<SgProjectInfoDO> result = new ArrayList<>();
@@ -108,6 +125,7 @@
                BigDecimal allDivideDevice = allDeviceOver.divide(allDeviceSize, 2, RoundingMode.HALF_UP);
                sgProjectInfoDO.setSgGxDOS(sgGxDOS);
                sgProjectInfoDO.setProjectProgress( getBigDecimalPercent(allDivideDevice));
                sgProjectInfoDO.setProjectProgressNum(allDivideDevice);
            }
            result.add(sgProjectInfoDO);
        }
@@ -117,28 +135,32 @@
    @Override
    public List<SgProjectInfoVO> progressList(ProjectSearchDTO searchDTO) {
        List<SgProjectInfoVO> list = sgProjectInfoMapper.progressList(searchDTO);
        Map<Long, List<SgProjectInfoVO>> map = list.stream().collect(Collectors.groupingBy(SgProjectInfoVO::getId));
        List<SgProjectInfoVO> result = new ArrayList<>();
        for (Map.Entry<Long, List<SgProjectInfoVO>> entry : map.entrySet()) {
            SgProjectInfoVO sgProjectInfoVO = new SgProjectInfoVO();
            List<SgProjectInfoVO> deviceList = entry.getValue();
            if (CollectionUtils.isEmpty(deviceList)){
                continue;
            }
            sgProjectInfoVO.setId(entry.getKey());
            sgProjectInfoVO.setProjectName(deviceList.get(0).getProjectName());
            List<SgProjectInfoVO> overList = deviceList.stream().filter(s->s.getDeviceStatus()!=null).filter(s -> s.getDeviceStatus() == 2).collect(Collectors.toList());
            BigDecimal v1 =BigDecimal.ZERO;
            if (CollectionUtils.isNotEmpty(overList)){
                v1 = BigDecimal.valueOf(overList.size());
            }
            BigDecimal v2 = BigDecimal.valueOf(deviceList.size());
            sgProjectInfoVO.setProgressName(getBigDecimalPercent( v1.divide(v2,2,BigDecimal.ROUND_HALF_UP)));
            result.add(sgProjectInfoVO);
        }
        return result;
        List<SgProjectInfoDO> projectProgress = getProjectProgress(sgProjectInfoMapper.queryStepByProject(searchDTO));
        Map<Long, SgProjectInfoDO> progressMap = projectProgress.stream().collect(Collectors.toMap(SgProjectInfoDO::getId, Function.identity()));
        list.forEach(s->{
            SgProjectInfoDO sgProjectInfoDO = progressMap.get(s.getId());
            s.setProjectProgress(sgProjectInfoDO.getProjectProgress());
            s.setProjectProgressNum(sgProjectInfoDO.getProjectProgressNum());
        });
        return list;
    }
    /**
     * 项目进度列表(分页)
     * @param page
     * @param searchDTO
     * @return
     */
    @Override
    public IPage<SgProjectInfoVO> progressPage(IPage<SgProjectInfoVO> page, ProjectSearchDTO searchDTO) {
        List<SgProjectInfoVO> list = sgProjectInfoMapper.progressList(page, searchDTO);
        List<SgProjectInfoDO> projectProgress = getProjectProgress(sgProjectInfoMapper.queryStepByProject(searchDTO));
        Map<Long, String> progressMap = projectProgress.stream().collect(Collectors.toMap(SgProjectInfoDO::getId, SgProjectInfoDO::getProjectProgress));
        list.forEach(s->{
            s.setProjectProgress(progressMap.get(s.getId()));
        });
        return page.setRecords(list);
    }
    /**
     * 获取百分比
     * @param bigDecimal
@@ -152,8 +174,8 @@
    }
    @Override
    public Map<String, Long> projectCount(ProjectSearchDTO searchDTO) {
        Map<String, Long> map  = new HashMap<>();
    public Map<String, Object> projectCount(ProjectSearchDTO searchDTO) {
        Map<String, Object> map  = new HashMap<>();
        LambdaQueryChainWrapper<SgProjectInfoDO> wrapper = new LambdaQueryChainWrapper<>(sgProjectInfoMapper);
        String projectName = searchDTO.getProjectName();
        Integer status = searchDTO.getStatus();
@@ -167,10 +189,14 @@
        List<SgProjectInfoDO> pending = list.stream().filter(s -> s.getStatus() == 0).collect(Collectors.toList());
        List<SgProjectInfoDO> progress = list.stream().filter(s -> s.getStatus() == 1).collect(Collectors.toList());
        List<SgProjectInfoDO> over = list.stream().filter(s -> s.getStatus() == 2).collect(Collectors.toList());
        map.put("all", (long) list.size());
        map.put("pending", (long) pending.size());
        map.put("progress", (long) progress.size());
        map.put("over", (long) over.size());
        List<SgProjectInfoVO> progressList = progressList(searchDTO);
        BigDecimal reduce = progressList.stream().map(SgProjectInfoDO::getProjectProgressNum).reduce(BigDecimal.ZERO, BigDecimal::add);
        map.put("all",  list.size());
        map.put("pending", pending.size());
        map.put("progress",  progress.size());
        map.put("over",  over.size());
        map.put("projectProgress",  getBigDecimalPercent(reduce));
        return map;
    }
@@ -178,4 +204,5 @@
    public void importProject(List<ProjectExcel> data, Boolean isCovered) {
    }
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/service/impl/SgProjectPersonConfigServiceImpl.java
@@ -35,7 +35,7 @@
    @Override
    public void add(AddSgProjectPersonConfigDTO dto) {
        for (SgProjectPersonConfigDO sgProjectPersonConfigDO : dto.getData()) {
            if (Objects.isNull(sgProjectPersonConfigDO.getId())){
            if (Objects.isNull(sgProjectPersonConfigDO.getId())||sgProjectPersonConfigDO.getId()==-1){
                projectPersonConfigMapper.insert(sgProjectPersonConfigDO);
            }else {
                projectPersonConfigMapper.updateById(sgProjectPersonConfigDO);