gonglilong
2024-11-04 199a1f9e1fdbfdf88176f8b66cd2748d8026bffc
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/service/impl/SgProjectInfoServiceImpl.java
@@ -7,7 +7,6 @@
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;
@@ -15,8 +14,11 @@
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.BladeUser;
import org.springblade.core.secure.utils.AuthUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -57,6 +59,9 @@
      List<String> sgCodeS = getSgCodeByUser();
      searchDTO.setSgCodeS(sgCodeS);
      setAdCode(searchDTO);
      BladeUser user = AuthUtil.getUser();
      Long roleId = getRoleId();
      //setUnit2(searchDTO,user,roleId);
      Boolean isPage = searchDTO.getIsPage();
      if (isPage==null) isPage = true;
      if (isPage ){
@@ -86,40 +91,66 @@
         }
         sgProjectInfoDOS.forEach(s->{
            //土建
            if (StringUtils.isNotBlank(s.getConstructionUnit())){
               s.setConstructionUnit(deptMap.get(Long.valueOf(s.getConstructionUnit())));
            }
            s.setConstructionPerson(getUserNames(userMap, s.getConstructionPerson()));
            String constructionUnit = s.getConstructionUnit();
            s.setConstructionUnit(getUserOrDeptNames(deptMap,s.getConstructionUnit()));
            s.setConstructionPerson(getUserOrDeptNames(userMap, s.getConstructionPerson()));
            //设备
            if (StringUtils.isNotBlank(s.getSelfUnit())){
               s.setSelfUnit(deptMap.get(Long.valueOf(s.getSelfUnit())));
            }
            s.setSelfPerson(getUserNames(userMap, s.getSelfPerson()));
            s.setSelfUnit(getUserOrDeptNames(deptMap,s.getSelfUnit()));
            s.setSelfPerson(getUserOrDeptNames(userMap, s.getSelfPerson()));
            //设计
            if (StringUtils.isNotBlank(s.getDesignUnit())){
               s.setDesignUnit(deptMap.get(Long.valueOf(s.getDesignUnit())));
            }
            s.setDesignPerson(getUserNames(userMap, s.getDesignPerson()));
            s.setDesignUnit(getUserOrDeptNames(deptMap, s.getDesignUnit()));
            s.setDesignPerson(getUserOrDeptNames(userMap, s.getDesignPerson()));
            //监理
            if (StringUtils.isNotBlank(s.getControlUnit())){
               s.setControlUnit(deptMap.get(Long.valueOf(s.getControlUnit())));
            }
            s.setControlPerson(getUserNames(userMap, s.getControlPerson()));
            s.setControlUnit(getUserOrDeptNames(deptMap, s.getControlUnit()));
            s.setControlPerson(getUserOrDeptNames(userMap, s.getControlPerson()));
            //检测
            if (StringUtils.isNotBlank(s.getAcceptanceUnit())){
               s.setAcceptanceUnit(deptMap.get(Long.valueOf(s.getAcceptanceUnit())));
            }
            s.setAcceptancePerson(getUserNames(userMap, s.getAcceptancePerson()));
            s.setAcceptanceUnit(getUserOrDeptNames(deptMap, s.getAcceptanceUnit()));
            s.setAcceptancePerson(getUserOrDeptNames(userMap, s.getAcceptancePerson()));
         });
         return sgProjectInfoDOS;
      }
   }
   private  void setUnit2(ProjectSearchDTO searchDTO, BladeUser user, Long roleId) {
      List<String> longList = Arrays.stream(user.getDeptId().split(","))
         .collect(Collectors.toList());
      //判断是不是省厅建办  否的话就不设置部门
      if (!roleId.equals(1800820667082948610L)){
         //判断是不是县级建办  否的话就是监理单位下人员进行
         if(roleId.equals(1800820855352672257L)){
            searchDTO.setUserUnit(longList);
         }
         if(roleId.equals(1811657352658042882L)) {
            searchDTO.setCountryUnit(longList);
         }
         if(roleId==1800818489547112450L){
            searchDTO.setSelfUnit(longList);
         }
      }
   }
   public Long getRoleId(){
      BladeUser user = AuthUtil.getUser();
      List<String> userRole = Arrays.asList(user.getRoleId().split(","));
      List<Long> roleList = sgProgressReportMapper.getSgEngineerRole();
      Long roleId = null;
      for (String s : userRole) {
         long l = Long.parseLong(s);
         if (roleList.contains(l)){
            roleId = l;
         }
      }
      if (Objects.isNull(roleId)){
         roleId = Long.parseLong(userRole.get(0));
      }
      return roleId;
   }
   /**
    * 设置百分号
    * @param s
@@ -133,21 +164,20 @@
   }
   /**
    * 获取用户姓名
    * @param userMap
    * 获取用户或者部门姓名
    * @return
    */
   private  String getUserNames(Map<Long, String> userMap,String person ) {
      String userNames = "";
      if (StringUtils.isNotBlank(person)){
   private  String getUserOrDeptNames(Map<Long, String> map, String param ) {
      String result = "";
      if (StringUtils.isNotBlank(param)){
         // 使用Stream API来处理分割和映射
          userNames = Arrays.stream(person.split(",")) // 将字符串按逗号分割成数组,并转为Stream
         result = Arrays.stream(param.split(",")) // 将字符串按逗号分割成数组,并转为Stream
            .map(Long::valueOf) // 将每个字符串元素转换为Long
            .map(userMap::get) // 使用userMap将Long映射为对应的用户名
            .map(map::get) // 使用userMap将Long映射为对应的用户名
            .collect(Collectors.joining(",")); // 使用逗号将用户名拼接成一个字符串
         return userNames;
         return result;
      }
      return userNames;
      return result;
   }
   /**
@@ -171,7 +201,7 @@
   public List<SgProjectInfoDO> queryStepByProject(ProjectSearchDTO searchDTO) {
      List<PreAcceVO>  palist = new ArrayList<>();
      List<SgProjectInfoVO> list = sgProjectInfoMapper.queryStepByProject( searchDTO);
      palist.add(handleQuery(25, list.get(0).getId()));
      palist.add(handleQuery(20, list.get(0).getId()));
      palist.add(handleQuery(26, list.get(0).getId()));
      List<SgProjectInfoDO> projectProgress = getProjectProgress(list);
      projectProgress.forEach(s->{
@@ -189,8 +219,11 @@
    */
   @NotNull
   public List<SgProjectInfoDO> getProjectProgress(List<SgProjectInfoVO> list) {
      List<SgProjectInfoVO> sortedList = list.stream()
         .sorted(Comparator.comparing(SgProjectInfoVO::getSort))
         .collect(Collectors.toList());
      //项目分组
      Map<Long, List<SgProjectInfoVO>> projectMap = list.stream().collect(Collectors.groupingBy(SgProjectInfoVO::getId));
      Map<Long, List<SgProjectInfoVO>> projectMap = sortedList.stream().collect(Collectors.groupingBy(SgProjectInfoVO::getId));
      List<SgProjectInfoDO> result = new ArrayList<>();
      for (Map.Entry<Long, List<SgProjectInfoVO>> entry : projectMap.entrySet()) {
         List<SgDeviceDO> allDevice = new ArrayList<>();
@@ -209,7 +242,7 @@
            if (CollectionUtils.isEmpty(ptyValue)){
               continue;
            }
            PtypeVO ptypeVO = PtypeVO.builder().pTypeName(ptyValue.get(0).getPtypeName()).build();
            PtypeVO ptypeVO = PtypeVO.builder().pTypeName(ptyValue.get(0).getPtypeName()).sort(ptyValue.get(0).getSort()).build();
            List<SgTypeVO> sgGxDOS = new ArrayList<>();
            //类型分组
            Map<String, List<SgProjectInfoVO>> GxMap = ptyValue.stream().filter(s->s.getDeviceType()!=null).collect(Collectors.groupingBy(SgProjectInfoVO::getDeviceType));
@@ -219,16 +252,18 @@
               if (CollectionUtils.isEmpty(gxList)){
                  continue;
               }
               SgTypeVO typeVO = SgTypeVO.builder().typeName(gxList.get(0).getTypeName()).build();
               gxList = gxList.stream().sorted(Comparator.comparing(SgProjectInfoVO::getPrice)).collect(Collectors.toList());
               SgTypeVO typeVO = SgTypeVO.builder().typeName(gxList.get(0).getTypeName()).sort(gxList.get(0).getDSort()).build();
               List<SgDeviceDO> deviceDOS = new ArrayList<>();
               //设备分组
               Map<Long, List<SgProjectInfoVO>> dMap = gxList.stream().collect(Collectors.groupingBy(SgProjectInfoVO::getDId));
               Map<Long, List<SgProjectInfoVO>> dMap = gxList.stream().filter(s->s.getDId()!=null).collect(Collectors.groupingBy(SgProjectInfoVO::getDId));
               for (Map.Entry<Long, List<SgProjectInfoVO>> device : dMap.entrySet()) {
                  Long dId = device.getKey();
                  List<SgProjectInfoVO> deList = device.getValue();
                  SgDeviceDO sgDeviceDO = new SgDeviceDO();
                  sgDeviceDO.setId(dId);
                  sgDeviceDO.setDeviceName(deList.get(0).getDeviceName());
                  sgDeviceDO.setPrice(deList.get(0).getPrice());
                  List<SgGxStepDO> stepDOS = deList.stream().filter(s -> s.getReportStatus() == null || (s.getReportStatus() != 4 && !(s.getReportStatus() == 3 && s.getResubmit() != 0))).map(s -> SgGxStepDO.builder().id(s.getStepId()).gxStepNum(s.getGxStepNum()).gxStepName(s.getGxStepName()).deviceId(s.getDId()).approvalStatus(s.getReportStatus()).build()).collect(Collectors.toList());
                  List<SgGxStepDO> stepOver = stepDOS.stream().filter(s -> s.getApprovalStatus() != null && s.getApprovalStatus() == 2).collect(Collectors.toList());
                  BigDecimal stepSize = BigDecimal.valueOf(stepDOS.size());
@@ -248,7 +283,8 @@
               double sum = deviceDOS.stream().mapToDouble(s -> Double.parseDouble(s.getProgress())).sum();
               BigDecimal deviceOver = BigDecimal.valueOf(sum);
               BigDecimal divideDevice = deviceOver.divide(deviceSize, 2, RoundingMode.HALF_UP);
               typeVO.setDeviceDOS(deviceDOS);
               List<SgDeviceDO> sortDeviceDOs = deviceDOS.stream().filter(s->s.getPrice()!=null).sorted(Comparator.comparing(SgDeviceDO::getPrice)).collect(Collectors.toList());
               typeVO.setDeviceDOS(sortDeviceDOs);
               typeVO.setTypeProgress(getBigDecimalPercent(divideDevice));
               typeVO.setProgress(divideDevice.toString());
               sgGxDOS.add(typeVO);
@@ -258,6 +294,7 @@
            BigDecimal sgGxOver = BigDecimal.valueOf(sum);
            BigDecimal divideSgGx = sgGxOver.divide(sgGxSize, 2, RoundingMode.HALF_UP);
            ptypeVO.setPTypeProgress(getBigDecimalPercent(divideSgGx));
            sgGxDOS = sgGxDOS.stream().sorted(Comparator.comparing(SgTypeVO::getSort)).collect(Collectors.toList());
            ptypeVO.setSgTypeVOS(sgGxDOS);
            pTypes.add(ptypeVO);
         }
@@ -266,7 +303,8 @@
            double sum = allDevice.stream().mapToDouble(s -> Double.parseDouble(s.getProgress())).sum();
            BigDecimal allDeviceOver = BigDecimal.valueOf(sum);
            BigDecimal allDivideDevice = allDeviceOver.divide(allDeviceSize, 2, RoundingMode.HALF_UP);
            sgProjectInfoDO.setPtypeVOS(pTypes);
            List<PtypeVO> sortPtpes = pTypes.stream().sorted(Comparator.comparing(PtypeVO::getSort)).collect(Collectors.toList());
            sgProjectInfoDO.setPtypeVOS(sortPtpes);
            sgProjectInfoDO.setProjectProgress( getBigDecimalPercent(allDivideDevice));
            sgProjectInfoDO.setProjectProgressNum(allDivideDevice);
         }
@@ -342,6 +380,9 @@
      List<String> sgCodeS = getSgCodeByUser();
      searchDTO.setSgCodeS(sgCodeS);
      setDeptId(searchDTO);
      BladeUser user = AuthUtil.getUser();
      Long roleId = getRoleId();
      setUnit2(searchDTO,user,roleId);
      List<SgProjectInfoDO> list = sgProjectInfoMapper.queryPageList(null, searchDTO);
      return list;
   }
@@ -417,12 +458,16 @@
            SgOperatingRateVO sVo = deviceTypes.get(vo.getProIds());
            if (Objects.nonNull(sVo)){
               vo.setSurfaceNum(sVo.getSurfaceNum());
               vo.setSurfaceStartNum(sVo.getSurfaceStartNum());
               vo.setSurfaceProgress(sVo.getSurfaceProgress());
               vo.setVideoNum(sVo.getVideoNum());
               vo.setVideoStartNum(sVo.getVideoStartNum());
               vo.setVideoProgress(sVo.getVideoProgress());
               vo.setTransNum(sVo.getTransNum());
               vo.setTransStartNum(sVo.getTransStartNum());
               vo.setTransProgress(sVo.getTransProgress());
               vo.setSeepageNum(sVo.getSeepageNum());
               vo.setSeepageStartNum(sVo.getSeepageStartNum());
               vo.setSeepageProgress(sVo.getSeepageProgress());
            }
         }
@@ -474,6 +519,7 @@
                  Integer deviceCount = sg108.getDeviceCount();
                  Integer deviceStart = sg108.getDeviceStart();
                  sgOperatingRateVO.setSurfaceNum(deviceCount);
                  sgOperatingRateVO.setSurfaceStartNum(deviceStart);
                  if (deviceCount != 0){
                     BigDecimal divide = BigDecimal.valueOf(deviceStart).divide(BigDecimal.valueOf(deviceCount), 2, BigDecimal.ROUND_UP);
                     sgOperatingRateVO.setSeepageProgress(getBigDecimalPercent(divide));
@@ -487,6 +533,7 @@
                  Integer deviceCount = sg104.getDeviceCount();
                  Integer deviceStart = sg104.getDeviceStart();
                  sgOperatingRateVO.setVideoNum(deviceCount);
                  sgOperatingRateVO.setVideoStartNum(deviceStart);
                  if (deviceCount != 0){
                     BigDecimal divide = BigDecimal.valueOf(deviceStart).divide(BigDecimal.valueOf(deviceCount), 2, BigDecimal.ROUND_UP);
                     sgOperatingRateVO.setVideoProgress(getBigDecimalPercent(divide));
@@ -500,6 +547,7 @@
                  Integer deviceCount = sg101.getDeviceCount();
                  Integer deviceStart = sg101.getDeviceStart();
                  sgOperatingRateVO.setTransNum(deviceCount);
                  sgOperatingRateVO.setTransStartNum(deviceStart);
                  if (deviceCount != 0){
                     BigDecimal divide = BigDecimal.valueOf(deviceStart).divide(BigDecimal.valueOf(deviceCount), 2, BigDecimal.ROUND_UP);
                     sgOperatingRateVO.setTransProgress(getBigDecimalPercent(divide));
@@ -513,6 +561,7 @@
                  Integer deviceCount = sg102.getDeviceCount();
                  Integer deviceStart = sg102.getDeviceStart();
                  sgOperatingRateVO.setSeepageNum(deviceCount);
                  sgOperatingRateVO.setSeepageStartNum(deviceStart);
                  if (deviceCount != 0){
                     BigDecimal divide = BigDecimal.valueOf(deviceStart).divide(BigDecimal.valueOf(deviceCount), 2, BigDecimal.ROUND_UP);
                     sgOperatingRateVO.setSeepageProgress(getBigDecimalPercent(divide));
@@ -629,6 +678,9 @@
   public Map<String, Object> projectCount(ProjectSearchDTO searchDTO) {
      List<String> sgCodeS = getSgCodeByUser();
      searchDTO.setSgCodeS(sgCodeS);
      BladeUser user = AuthUtil.getUser();
      Long roleId = getRoleId();
      //setUnit2(searchDTO,user,roleId);
      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);
@@ -675,7 +727,7 @@
         SgGxStepDO sgGxStepDO = sgGxStepMapper.selectById(stepIdForNull);
         preAcceVO.setName(sgGxStepDO.getGxStepName());
         preAcceVO.setProgramId(programId);
         preAcceVO.setGxDeviceId(stepIdForNull != 25? (long)998:(long)999);
         preAcceVO.setGxDeviceId(stepIdForNull != 20? (long)998:(long)999);
         preAcceVO.setGxStepId(sgGxStepDO.getId());
      }
@@ -689,6 +741,9 @@
      List<String> sgCodeS = getSgCodeByUser();
      dto.setSgCodeS(sgCodeS);
      setAdCode(dto);
      BladeUser user = AuthUtil.getUser();
      Long roleId = getRoleId();
      //setUnit2(dto,user,roleId);
      List<SgProjectTreeVO> list =    sgProjectInfoMapper.projectTree(dto);
      if (CollectionUtils.isNotEmpty(list)){
         list.forEach(x->{
@@ -814,4 +869,18 @@
      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);
      });
   }
}