| | |
| | | import cn.gistack.sm.sg.mapper.SgGxStepMapper; |
| | | import cn.gistack.sm.sg.mapper.SgProgressReportMapper; |
| | | import cn.gistack.sm.sg.mapper.SgProjectInfoMapper; |
| | | import cn.gistack.sm.sg.service.SgProgressReportService; |
| | | import cn.gistack.sm.sg.service.SgProjectInfoService; |
| | | import cn.gistack.sm.sjztmd.entity.AttAdBase; |
| | | import cn.gistack.sm.sjztmd.service.IAttAdBaseService; |
| | |
| | | import com.baomidou.mybatisplus.core.metadata.IPage; |
| | | import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; |
| | | 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.springblade.core.log.exception.ServiceException; |
| | | import org.springblade.core.secure.utils.AuthUtil; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | |
| | | @Autowired |
| | | private SgGxStepMapper sgGxStepMapper; |
| | | |
| | | @Autowired |
| | | private SgProgressReportServiceImpl sgProgressReportService; |
| | | |
| | | @Override |
| | | public Object queryPageList(IPage<SgProjectInfoDO> page, ProjectSearchDTO searchDTO) { |
| | | List<String> sgCodeS = getSgCodeByUser(); |
| | | searchDTO.setSgCodeS(sgCodeS); |
| | | setAdCode(searchDTO); |
| | | Boolean isPage = searchDTO.getIsPage(); |
| | | if (isPage==null) isPage = true; |
| | | if (isPage ){ |
| | |
| | | Map<Long, String> progressMap = projectProgress.stream().filter(s->s.getProjectProgress()!=null).collect(Collectors.toMap(SgProjectInfoDO::getId, SgProjectInfoDO::getProjectProgress)); |
| | | sgProjectInfoDOS.forEach(s->{ |
| | | s.setProjectProgress(progressMap.get(s.getId())); |
| | | // setPercentage(s); |
| | | }); |
| | | } |
| | | return page.setRecords(sgProjectInfoDOS); |
| | |
| | | Map<Long, String> progressMap = projectProgress.stream().filter(s->s.getProjectProgress()!=null).collect(Collectors.toMap(SgProjectInfoDO::getId, SgProjectInfoDO::getProjectProgress)); |
| | | sgProjectInfoDOS.forEach(s->{ |
| | | s.setProjectProgress(progressMap.get(s.getId())); |
| | | // setPercentage(s); |
| | | }); |
| | | } |
| | | sgProjectInfoDOS.forEach(s->{ |
| | |
| | | return sgProjectInfoDOS; |
| | | } |
| | | |
| | | } |
| | | |
| | | /** |
| | | * 设置百分号 |
| | | * @param s |
| | | */ |
| | | private void setPercentage(SgProjectInfoDO s) { |
| | | s.setSurfaceProgress(StringUtils.isNotBlank(s.getSurfaceProgress()) ?null:s.getSurfaceProgress()+"%"); |
| | | s.setVideoProgress(StringUtils.isNotBlank(s.getVideoProgress())?null:s.getVideoProgress()+"%"); |
| | | s.setTransProgress(StringUtils.isNotBlank(s.getTransProgress())?null:s.getTransProgress()+"%"); |
| | | s.setSeepageProgress(StringUtils.isNotBlank(s.getSeepageProgress())?null:s.getSeepageProgress()+"%"); |
| | | s.setProjectAddress(StringUtils.isNotBlank(s.getProjectProgress())?null:s.getProjectProgress()+"%"); |
| | | } |
| | | |
| | | /** |
| | |
| | | */ |
| | | @Override |
| | | public IPage<SgProjectInfoVO> progressPage(IPage<SgProjectInfoVO> page, ProjectSearchDTO searchDTO) { |
| | | // setDeptId(searchDTO); |
| | | List<SgProjectInfoVO> list = new ArrayList<>(); |
| | | if(StringUtils.isNotBlank(searchDTO.getAdCode())){ |
| | | list = sgProjectInfoMapper.progressList1(page, searchDTO); |
| | |
| | | list = sgProjectInfoMapper.progressList(page, searchDTO); |
| | | } |
| | | |
| | | List<Long> ids = list.stream().map(SgProjectInfoVO::getId).collect(Collectors.toList()); |
| | | searchDTO.setProjectIds(ids); |
| | | List<SgProjectInfoDO> projectProgress = new ArrayList<>(); |
| | | if(StringUtils.isNotBlank(searchDTO.getAdCode())){ |
| | | projectProgress = getProjectProgress(sgProjectInfoMapper.queryStepByProject1(searchDTO)); |
| | | }else { |
| | | projectProgress = getProjectProgress(sgProjectInfoMapper.queryStepByProject(searchDTO)); |
| | | } |
| | | // List<Long> ids = list.stream().map(SgProjectInfoVO::getId).collect(Collectors.toList()); |
| | | // searchDTO.setProjectIds(ids); |
| | | // List<SgProjectInfoDO> projectProgress = new ArrayList<>(); |
| | | // if(StringUtils.isNotBlank(searchDTO.getAdCode())){ |
| | | // projectProgress = getProjectProgress(sgProjectInfoMapper.queryStepByProject1(searchDTO)); |
| | | // }else { |
| | | // projectProgress = getProjectProgress(sgProjectInfoMapper.queryStepByProject(searchDTO)); |
| | | // } |
| | | |
| | | if (CollectionUtils.isNotEmpty(projectProgress)){ |
| | | Map<Long, String> progressMap = projectProgress.stream().filter(s->s!=null && s.getProjectProgress() !=null).collect(Collectors.toMap(SgProjectInfoDO::getId, SgProjectInfoDO::getProjectProgress)); |
| | | // if (CollectionUtils.isNotEmpty(projectProgress)){ |
| | | //Map<Long, String> progressMap = projectProgress.stream().filter(s->s!=null && s.getProjectProgress() !=null).collect(Collectors.toMap(SgProjectInfoDO::getId, SgProjectInfoDO::getProjectProgress)); |
| | | list.forEach(s->{ |
| | | s.setProjectProgress(progressMap.get(s.getId())); |
| | | });} |
| | | if (StringUtils.isNotBlank(s.getProjectProgress())){ |
| | | s.setProjectProgress(s.getProjectProgress()+"%"); |
| | | }else { |
| | | s.setProjectProgress("0%"); |
| | | } |
| | | }); |
| | | // } |
| | | return page.setRecords(list); |
| | | } |
| | | |
| | |
| | | public List<SgProjectInfoDO> listAll(ProjectSearchDTO searchDTO) { |
| | | List<String> sgCodeS = getSgCodeByUser(); |
| | | searchDTO.setSgCodeS(sgCodeS); |
| | | return sgProjectInfoMapper.queryPageList(null,searchDTO); |
| | | setDeptId(searchDTO); |
| | | List<SgProjectInfoDO> list = sgProjectInfoMapper.queryPageList(null, searchDTO); |
| | | return list; |
| | | } |
| | | |
| | | /** |
| | | * setDeptId |
| | | * @param searchDTO |
| | | */ |
| | | private void setDeptId(ProjectSearchDTO searchDTO) { |
| | | String deptId = AuthUtil.getDeptId(); |
| | | boolean b = Objects.nonNull(searchDTO.getIsUnit()) && searchDTO.getIsUnit() == 1; |
| | | if (!deptId.equals("420000000000")){ |
| | | if (!b){ |
| | | searchDTO.setDeptId(deptId); |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | |
| | | //片区 |
| | | if (ywxtAdDetail == null) { |
| | | sgStatisProVOS = sgProjectInfoMapper.getsgStatisticsZero(code); |
| | | getDeviceTypes(sgStatisProVOS); |
| | | setDeviceTypes(sgStatisProVOS); |
| | | // String getname = sgProjectInfoMapper.getname(code); |
| | | String getname = code; |
| | | updateProjectProgress(sgStatisProVOS, code, getname, "2"); |
| | | } else if (ywxtAdDetail.getAdGrad().equals("1")) {//默认 |
| | | sgStatisProVOS = sgProjectInfoMapper.getsgStatisticsOne(code); |
| | | sgStatisProVOS = getSgStatisProVOS(sgStatisProVOS); |
| | | getDeviceTypes(sgStatisProVOS); |
| | | setDeviceTypes(sgStatisProVOS); |
| | | updateProjectProgress(sgStatisProVOS, ywxtAdDetail.getPAdCode(), ywxtAdDetail.getPAdName(), "0"); |
| | | } else {//区县 |
| | | sgStatisProVOS = sgProjectInfoMapper.getsgStatisticsList(code); |
| | | getDeviceTypes(sgStatisProVOS); |
| | | setDeviceTypes(sgStatisProVOS); |
| | | updateProjectProgress(sgStatisProVOS, ywxtAdDetail.getAdCode(), ywxtAdDetail.getAdName(), "3"); |
| | | } |
| | | return sgStatisProVOS; |
| | | } |
| | | |
| | | /** |
| | | * 统计施工进度 |
| | | * @param sgStatisProVOS |
| | | */ |
| | | private void setDeviceTypes(List<SgStatisProVO> sgStatisProVOS) { |
| | | if (CollectionUtils.isNotEmpty(sgStatisProVOS)){ |
| | | Map<String, SgOperatingRateVO> deviceTypes = getDeviceTypes(sgStatisProVOS.stream().map(SgStatisProVO::getProIds).collect(Collectors.toList())); |
| | | for (SgStatisProVO vo : sgStatisProVOS) { |
| | | SgOperatingRateVO sVo = deviceTypes.get(vo.getProIds()); |
| | | if (Objects.nonNull(sVo)){ |
| | | vo.setSurfaceNum(sVo.getSurfaceNum()); |
| | | vo.setSurfaceProgress(sVo.getSurfaceProgress()); |
| | | vo.setVideoNum(sVo.getVideoNum()); |
| | | vo.setVideoProgress(sVo.getVideoProgress()); |
| | | vo.setTransNum(sVo.getTransNum()); |
| | | vo.setTransProgress(sVo.getTransProgress()); |
| | | vo.setSeepageNum(sVo.getSeepageNum()); |
| | | vo.setSeepageProgress(sVo.getSeepageProgress()); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | |
| | | |
| | | /** |
| | | * 统计设备类型开工率 |
| | | * @param sgStatisProVOS |
| | | */ |
| | | private void getDeviceTypes(List<SgStatisProVO> sgStatisProVOS) { |
| | | if (CollectionUtils.isNotEmpty(sgStatisProVOS)){ |
| | | for (SgStatisProVO vo : sgStatisProVOS) { |
| | | String proIds = vo.getProIds(); |
| | | public Map<String,SgOperatingRateVO> getDeviceTypes(List<String> projectIds) { |
| | | Map<String,SgOperatingRateVO> result = new HashMap<>(); |
| | | if (CollectionUtils.isNotEmpty(projectIds)){ |
| | | for (String proIds : projectIds) { |
| | | SgOperatingRateVO sgOperatingRateVO = new SgOperatingRateVO(); |
| | | if (StringUtils.isNotBlank(proIds)){ |
| | | List<SgStatisDeviceVO> deviceVOS = sgProjectInfoMapper.getDeviceTypes("("+proIds+")"); |
| | | if(CollectionUtils.isNotEmpty(deviceVOS)){ |
| | |
| | | if (Objects.nonNull(sg108)){ |
| | | Integer deviceCount = sg108.getDeviceCount(); |
| | | Integer deviceStart = sg108.getDeviceStart(); |
| | | vo.setSurfaceNum(deviceCount); |
| | | sgOperatingRateVO.setSurfaceNum(deviceCount); |
| | | if (deviceCount != 0){ |
| | | BigDecimal divide = BigDecimal.valueOf(deviceStart).divide(BigDecimal.valueOf(deviceCount), 2, BigDecimal.ROUND_UP); |
| | | vo.setSeepageProgress(getBigDecimalPercent(divide)); |
| | | sgOperatingRateVO.setSeepageProgress(getBigDecimalPercent(divide)); |
| | | }else { |
| | | vo.setSeepageProgress("0%"); |
| | | sgOperatingRateVO.setSeepageProgress("0%"); |
| | | } |
| | | } |
| | | //视频 |
| | |
| | | if (Objects.nonNull(sg104)){ |
| | | Integer deviceCount = sg104.getDeviceCount(); |
| | | Integer deviceStart = sg104.getDeviceStart(); |
| | | vo.setVideoNum(deviceCount); |
| | | sgOperatingRateVO.setVideoNum(deviceCount); |
| | | if (deviceCount != 0){ |
| | | BigDecimal divide = BigDecimal.valueOf(deviceStart).divide(BigDecimal.valueOf(deviceCount), 2, BigDecimal.ROUND_UP); |
| | | vo.setVideoProgress(getBigDecimalPercent(divide)); |
| | | sgOperatingRateVO.setVideoProgress(getBigDecimalPercent(divide)); |
| | | }else { |
| | | vo.setVideoProgress("0%"); |
| | | sgOperatingRateVO.setVideoProgress("0%"); |
| | | } |
| | | } |
| | | //渗压 |
| | |
| | | if (Objects.nonNull(sg101)){ |
| | | Integer deviceCount = sg101.getDeviceCount(); |
| | | Integer deviceStart = sg101.getDeviceStart(); |
| | | vo.setTransNum(deviceCount); |
| | | sgOperatingRateVO.setTransNum(deviceCount); |
| | | if (deviceCount != 0){ |
| | | BigDecimal divide = BigDecimal.valueOf(deviceStart).divide(BigDecimal.valueOf(deviceCount), 2, BigDecimal.ROUND_UP); |
| | | vo.setTransProgress(getBigDecimalPercent(divide)); |
| | | sgOperatingRateVO.setTransProgress(getBigDecimalPercent(divide)); |
| | | }else { |
| | | vo.setTransProgress("0%"); |
| | | sgOperatingRateVO.setTransProgress("0%"); |
| | | } |
| | | } |
| | | //渗流 |
| | |
| | | if (Objects.nonNull(sg102)){ |
| | | Integer deviceCount = sg102.getDeviceCount(); |
| | | Integer deviceStart = sg102.getDeviceStart(); |
| | | vo.setSeepageNum(deviceCount); |
| | | sgOperatingRateVO.setSeepageNum(deviceCount); |
| | | if (deviceCount != 0){ |
| | | BigDecimal divide = BigDecimal.valueOf(deviceStart).divide(BigDecimal.valueOf(deviceCount), 2, BigDecimal.ROUND_UP); |
| | | vo.setSeepageProgress(getBigDecimalPercent(divide)); |
| | | sgOperatingRateVO.setSeepageProgress(getBigDecimalPercent(divide)); |
| | | }else { |
| | | vo.setSeepageProgress("0%"); |
| | | sgOperatingRateVO.setSeepageProgress("0%"); |
| | | } |
| | | } |
| | | } |
| | | result.put(proIds,sgOperatingRateVO); |
| | | } |
| | | } |
| | | } |
| | | return result; |
| | | } |
| | | |
| | | private void updateProjectProgress(List<SgStatisProVO> sgStatisProVOS, String pcode, String pname, String adGrad) { |
| | |
| | | for (String id : ids) { |
| | | projectSearchDTO.setProjectId(id); |
| | | List<SgProjectInfoVO> list = sgProjectInfoMapper.queryStepByProject(projectSearchDTO); |
| | | getProjectProgress(list).forEach(ss -> bigDecimals.add(ss.getProjectProgressNum())); |
| | | getProjectProgress(list).forEach(ss->{ |
| | | if (Objects.nonNull(ss.getProjectProgressNum())){ |
| | | bigDecimals.add(ss.getProjectProgressNum()); |
| | | } |
| | | }); |
| | | } |
| | | |
| | | BigDecimal reduce = bigDecimals.stream().reduce(BigDecimal.ZERO, BigDecimal::add); |
| | |
| | | |
| | | @Override |
| | | public Map<String, Object> projectCount(ProjectSearchDTO searchDTO) { |
| | | List<String> sgCodeS = getSgCodeByUser(); |
| | | searchDTO.setSgCodeS(sgCodeS); |
| | | Map<String, Object> map = new HashMap<>(); |
| | | List<SgProjectInfoVO> progressList = progressList(searchDTO); |
| | | BigDecimal reduce = progressList.stream().filter(s->s.getProjectProgressNum()!=null).map(SgProjectInfoDO::getProjectProgressNum).reduce(BigDecimal.ZERO, BigDecimal::add); |
| | |
| | | public List<SgProjectTreeVO> projectTree(ProjectSearchDTO dto) { |
| | | List<String> sgCodeS = getSgCodeByUser(); |
| | | dto.setSgCodeS(sgCodeS); |
| | | setAdCode(dto); |
| | | List<SgProjectTreeVO> list = sgProjectInfoMapper.projectTree(dto); |
| | | if (CollectionUtils.isNotEmpty(list)){ |
| | | list.forEach(x->{ |
| | | if (StringUtils.isBlank(x.getCountyNm())){ |
| | | x.setCountyNm(x.getCityNm()); |
| | | } |
| | | if (StringUtils.isBlank(x.getTownNm())){ |
| | | x.setTownNm(x.getCountyNm()); |
| | | } |
| | | }); |
| | | // 按省、片区、市、县、乡镇分组 |
| | | Map<String, Map<String, Map<String, Map<String, Map<String, List<SgProjectTreeVO>>>>>> groupedProjects = list.stream() |
| | | .collect( |
| | |
| | | provinceNode.setChildList(provinceChildren); |
| | | tree.add(provinceNode); |
| | | } |
| | | return tree; |
| | | List<SgProjectTreeVO> childList = tree.get(0).getChildList(); |
| | | List<SgProjectTreeVO> collect = childList.stream() |
| | | .sorted(Comparator.comparing(s -> { |
| | | String scode = s.getRegionName(); |
| | | if (scode.equals("第一标段")) { |
| | | return 1; |
| | | } else if (scode.equals("第二标段")) { |
| | | return 2; |
| | | } else if (scode.equals("第三标段")) { |
| | | return 3; |
| | | } else if (scode.equals("第四标段")) { |
| | | return 4; |
| | | } else if (scode.equals("第五标段")) { |
| | | return 5; |
| | | } else { |
| | | return Integer.MAX_VALUE; |
| | | } |
| | | })) |
| | | .collect(Collectors.toList()); |
| | | tree.get(0).setChildList(collect); |
| | | return tree; |
| | | |
| | | } |
| | | return new ArrayList<>(); |
| | | } |
| | | |
| | | private void setAdCode(ProjectSearchDTO dto) { |
| | | String deptId = AuthUtil.getDeptId(); |
| | | Long roleId = sgProgressReportService.getRoleId(); |
| | | if(roleId.equals(1811657352658042882L)){ |
| | | dto.setAdCode(deptId); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public IPage<ResVO> resList(IPage<ResVO> page, ProjectSearchDTO dto) { |
| | | List<String> sgCodeByUser = getSgCodeByUser(); |
| | | dto.setSgCodeS(sgCodeByUser); |
| | | return page.setRecords(baseMapper.resList(page,dto)); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional |
| | | public void delete(String ids) { |
| | | List<String> list = Arrays.asList(ids.split(",")); |
| | | list.forEach(id->{ |
| | | List<SgProgressReportDO> reportDOS = new LambdaQueryChainWrapper<>(sgProgressReportMapper).eq(SgProgressReportDO::getProframId, id).list(); |
| | | if (CollectionUtils.isNotEmpty(reportDOS)){ |
| | | SgProjectInfoDO sgProjectInfoDO = sgProjectInfoMapper.selectById(id); |
| | | throw new ServiceException(sgProjectInfoDO.getProjectName() + "存在施工审批,无法删除!"); |
| | | } |
| | | sgProjectInfoMapper.deleteById(id); |
| | | }); |
| | | } |
| | | |
| | | } |