shenyijian
2024-06-18 402ff1aeac9bb33e6d8ff04913cbf1b0364df2a6
湖北水库:施工:APP项目统计、项目进度列表
11 files modified
1 files added
133 ■■■■■ changed files
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/VO/SgProgressReportVO.java 7 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/VO/SgProjectInfoVO.java 2 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/VO/SgStepReportVO.java 11 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/controller/SgProgressReportController.java 2 ●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/controller/SgProjectInfoController.java 20 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgProgressReportMapper.java 3 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgProgressReportMapper.xml 14 ●●●●● 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 9 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/service/SgProjectInfoService.java 5 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/service/impl/SgProgressReportServiceImpl.java 12 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/service/impl/SgProjectInfoServiceImpl.java 46 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/VO/SgProgressReportVO.java
@@ -8,5 +8,12 @@
@Data
public class SgProgressReportVO extends SgProgressReportDO {
    /**
     * 各级审批流程
     */
    private List<SgReportUserDO> sgReportUserDOS;
    /**
     * 同设备流程审批情况
     */
    private List<SgStepReportVO> sgStepReportVOS;
}
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/VO/SgProjectInfoVO.java
@@ -21,4 +21,6 @@
    private String gxStepNum;
    private String deviceType;
    private String typeName;
    private Integer deviceStatus;
    private String progressName;
}
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sg/VO/SgStepReportVO.java
New file
@@ -0,0 +1,11 @@
package cn.gistack.sm.sg.VO;
import lombok.Data;
@Data
public class SgStepReportVO {
private Long    stepId;
private String    stepName;
private Integer    approvalStatus;
private String     stepNum;
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/controller/SgProgressReportController.java
@@ -58,7 +58,7 @@
    }
    /**
     * 新增上报
     * 上报详情
     */
    @GetMapping(value = "/detail")
    public R detail(String id) {
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/controller/SgProjectInfoController.java
@@ -15,6 +15,7 @@
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Map;
/**
 * <p>
@@ -46,4 +47,23 @@
        List<SgProjectInfoDO> list= sgProjectInfoService.queryStepByProject(searchDTO);
        return R.data(list);
    }
    /**
     * 项目进度列表(APP)
     */
    @GetMapping(value = "/project_progress_list")
    public R progressList(ProjectSearchDTO searchDTO) {
        List<SgProjectInfoVO> list= sgProjectInfoService.progressList(searchDTO);
        return R.data(list);
    }
    /**
     * 首页项目统计(APP)
     */
    @GetMapping(value = "/project_count")
    public R projectCount(ProjectSearchDTO searchDTO) {
        Map<String,Long> map = sgProjectInfoService.projectCount(searchDTO);
        return R.data(map);
    }
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgProgressReportMapper.java
@@ -3,6 +3,7 @@
import cn.gistack.sm.sg.DO.SgProgressReportDO;
import cn.gistack.sm.sg.DTO.ProjectSearchDTO;
import cn.gistack.sm.sg.VO.SgProgressReportVO;
import cn.gistack.sm.sg.VO.SgStepReportVO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.ibatis.annotations.Param;
@@ -26,4 +27,6 @@
    List<SgProgressReportVO> queryList(@Param("dto") ProjectSearchDTO searchDTO);
    Long countList(@Param("dto") ProjectSearchDTO searchDTO);
    List<SgStepReportVO> selectByDeviceId(@Param("deviceId") Long gxDeviceId);
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgProgressReportMapper.xml
@@ -37,4 +37,18 @@
            and userR.approval_status = #{dto.approvalStatus}
        </if>
    </select>
    <select id="selectByDeviceId" resultType="cn.gistack.sm.sg.VO.SgStepReportVO">
        SELECT
            step.id AS stepId,
            step.gx_step_name AS stepName,
            step.gx_step_num AS stepNum,
            re.STATUS AS approvalStatus
        FROM
            ywxt.sg_gx_step step
                LEFT JOIN ywxt.sg_gx gx ON step.gx_info_id = gx.id
                LEFT JOIN ywxt.sg_device de ON gx.gx_type = de.device_type
                LEFT JOIN ywxt.sg_progress_report re ON re.gx_step_id = step.id and re.gx_device_id = de.id
        WHERE
            1 =1 and de.id = #{deviceId}
    </select>
</mapper>
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgProjectInfoMapper.java
@@ -23,4 +23,6 @@
    List<SgProjectInfoDO> queryPageList(IPage<SgProjectInfoDO> page, @Param("dto") ProjectSearchDTO dto);
    List<SgProjectInfoVO> queryStepByProject(@Param("dto") ProjectSearchDTO searchDTO);
    List<SgProjectInfoVO> progressList(@Param("dto") ProjectSearchDTO searchDTO);
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgProjectInfoMapper.xml
@@ -39,4 +39,13 @@
            and pro.project_name like CONCAT(CONCAT('%', #{dto.projectName}), '%')
        </if>
    </select>
    <select id="progressList" resultType="cn.gistack.sm.sg.VO.SgProjectInfoVO">
        SELECT
            pro.id,
            pro.project_name,
            de.STATUS as deviceStatus
        FROM
            ywxt.sg_project_info pro
                LEFT JOIN ywxt.sg_device de ON pro.id = de.program_id
    </select>
</mapper>
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/service/SgProjectInfoService.java
@@ -7,6 +7,7 @@
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
import java.util.Map;
/**
 * <p>
@@ -21,4 +22,8 @@
    IPage<SgProjectInfoDO> queryPageList(IPage<SgProjectInfoDO> page, ProjectSearchDTO searchDTO);
    List<SgProjectInfoDO> queryStepByProject(ProjectSearchDTO searchDTO);
    List<SgProjectInfoVO> progressList(ProjectSearchDTO searchDTO);
    Map<String, Long> projectCount(ProjectSearchDTO searchDTO);
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/service/impl/SgProgressReportServiceImpl.java
@@ -4,6 +4,7 @@
import cn.gistack.sm.sg.DTO.ApprovalDTO;
import cn.gistack.sm.sg.DTO.ProjectSearchDTO;
import cn.gistack.sm.sg.VO.SgProgressReportVO;
import cn.gistack.sm.sg.VO.SgStepReportVO;
import cn.gistack.sm.sg.mapper.*;
import cn.gistack.sm.sg.service.SgProgressReportService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -69,9 +70,10 @@
        Long gxStepId = sgProgressReportDO.getGxStepId();
        List<SgGxStepDO> list = sgGxStepMapper.selectByGxInfoId(gxDeviceId);
        SgGxStepDO sgGxStepDO = sgGxStepMapper.selectById(gxStepId);
        LambdaQueryChainWrapper<SgProgressReportDO> wrapper = new LambdaQueryChainWrapper<>(sgProgressReportMapper)
            .eq(SgProgressReportDO::getGxStepId, gxStepId).eq(SgProgressReportDO::getGxDeviceId,gxDeviceId);
        if ( sgProgressReportMapper.selectOne(wrapper)!=null){
        QueryWrapper<SgProgressReportDO> wrapper = new QueryWrapper<>();
        wrapper.eq("gx_step_id", gxStepId).eq("gx_device_id",gxDeviceId);
        List<SgProgressReportDO> sgProgressReportDOS = sgProgressReportMapper.selectList(wrapper);
        if ( sgProgressReportDOS!=null && sgProgressReportDOS.size()>0){
            throw new ServiceException("此工序已存在审批!");
        }
        for (SgGxStepDO gxStepDO : list) {
@@ -92,7 +94,7 @@
        List<SgGxConfigDO> sgGxConfigDOS = new LambdaQueryChainWrapper<>(sgGxConfigMapper)
            .eq(SgGxConfigDO::getGxDeviceType, deviceType).eq(SgGxConfigDO::getGxStepId, gxStepId).list();
        List<String> roIds = sgGxConfigDOS.stream().map(SgGxConfigDO::getRoleId).collect(Collectors.toList());
        List<SgProjectPersonConfigDO> personConfigDOS = new LambdaQueryChainWrapper<>(sgProjectPersonConfigMapper).in(SgProjectPersonConfigDO::getRoldId, roIds).list();
        List<SgProjectPersonConfigDO> personConfigDOS = new LambdaQueryChainWrapper<>(sgProjectPersonConfigMapper).eq(SgProjectPersonConfigDO::getProgramId,sgProgressReportDO.getProframId()).in(SgProjectPersonConfigDO::getRoldId, roIds).list();
        Map<Long, Long> userMap = personConfigDOS.stream().collect(Collectors.toMap(SgProjectPersonConfigDO::getRoldId, SgProjectPersonConfigDO::getUserId));
        Date now = DateUtil.now();
        sgReportUserMapper.insert(SgReportUserDO.builder().reportId(sgProgressReportDO.getId()).userId(sgProgressReportDO.getReportUser()).approvalContent("提交审批").approvalStatus(0).approvalOrder(0).approvalTime(now).build());
@@ -122,6 +124,8 @@
        SgProgressReportVO sgProgressReportVO = sgProgressReportMapper.queryById(id);
        List<SgReportUserDO> list = new LambdaQueryChainWrapper<>(sgReportUserMapper).eq(SgReportUserDO::getReportId, id).orderByAsc(SgReportUserDO::getApprovalTime).list();
        sgProgressReportVO.setSgReportUserDOS(list);
        List<SgStepReportVO> sgStepReportVOS = sgProgressReportMapper.selectByDeviceId(sgProgressReportVO.getGxDeviceId());
        sgProgressReportVO.setSgStepReportVOS(sgStepReportVOS);
        return sgProgressReportVO;
    }
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/service/impl/SgProjectInfoServiceImpl.java
@@ -11,11 +11,15 @@
import cn.gistack.sm.sg.service.SgProjectInfoService;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@@ -81,4 +85,46 @@
        }
        return result;
    }
    @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());
            BigDecimal percentage = v1.divide(v2).multiply(new BigDecimal("100"));
            // 如果不需要保留小数位,可以设置一个scale为0
            BigDecimal percentageRounded = percentage.setScale(0, RoundingMode.HALF_UP);
            sgProjectInfoVO.setProgressName(percentageRounded+"%");
            result.add(sgProjectInfoVO);
        }
        return result;
    }
    @Override
    public Map<String, Long> projectCount(ProjectSearchDTO searchDTO) {
        Map<String, Long> map  = new HashMap<>();
        List<SgProjectInfoDO> list = new LambdaQueryChainWrapper<>(sgProjectInfoMapper).list();
        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());
        return map;
    }
}