shenyijian
2024-09-27 99bb4c189d4519acda66ab39124d2b793c021a5e
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/service/impl/SgProjectInfoServiceImpl.java
@@ -7,6 +7,7 @@
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;
@@ -14,8 +15,10 @@
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;
@@ -48,10 +51,14 @@
   @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 ){
@@ -61,6 +68,7 @@
            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);
@@ -75,6 +83,7 @@
            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->{
@@ -111,6 +120,18 @@
         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()+"%");
   }
   /**
@@ -288,6 +309,7 @@
    */
   @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);
@@ -321,7 +343,23 @@
   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);
         }
      }
   }
   /**
@@ -353,21 +391,44 @@
      //片区
      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());
            }
         }
      }
   }
   /**
@@ -399,12 +460,12 @@
   /**
    * 统计设备类型开工率
    * @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)){
@@ -414,12 +475,12 @@
               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%");
                  }
               }
               //视频
@@ -427,12 +488,12 @@
               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%");
                  }
               }
               //渗压
@@ -440,12 +501,12 @@
               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%");
                  }
               }
               //渗流
@@ -453,18 +514,20 @@
               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) {
@@ -482,7 +545,11 @@
            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);
@@ -562,6 +629,8 @@
   @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);
@@ -621,8 +690,17 @@
   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(
@@ -697,9 +775,59 @@
               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);
      });
   }
}