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; } }