xiangpei
2025-02-17 1a805505257bc7f962e7ca07077e6acf39aff804
business/src/main/java/com/ycl/service/impl/ProjectInfoServiceImpl.java
@@ -1,6 +1,5 @@
package com.ycl.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.io.IORuntimeException;
import cn.hutool.core.util.CharsetUtil;
import cn.hutool.core.util.ObjectUtil;
@@ -8,12 +7,10 @@
import cn.hutool.core.util.ZipUtil;
import com.alibaba.excel.EasyExcel;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ycl.common.annotation.DataScope;
import com.ycl.common.base.Result;
import com.ycl.common.config.SysConfig;
import com.ycl.common.constant.Constants;
@@ -21,6 +18,7 @@
import com.ycl.common.enums.business.FileTypeEnum;
import com.ycl.common.enums.business.ImportanceTypeEnum;
import com.ycl.common.enums.business.ProjectCategoryEnum;
import com.ycl.common.enums.business.ProjectStatusEnum;
import com.ycl.common.exception.base.BaseException;
import com.ycl.common.utils.CopyUtils;
import com.ycl.common.utils.DateUtils;
@@ -31,7 +29,7 @@
import com.ycl.common.utils.file.FileUploadUtils;
import com.ycl.common.utils.file.FileUtils;
import com.ycl.common.utils.poi.ExcelUtil;
import com.ycl.controller.ProjectInfoController;
import com.ycl.constant.ProjectConstant;
import com.ycl.domain.entity.*;
import com.ycl.domain.excel.ProjectExcelTemplate;
import com.ycl.domain.form.*;
@@ -49,6 +47,7 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.Assert;
import org.springframework.util.CollectionUtils;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.ServletOutputStream;
@@ -60,15 +59,12 @@
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardCopyOption;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import java.util.zip.ZipOutputStream;
/**
 * 项目管理基础信息表 服务实现类
@@ -110,6 +106,10 @@
        entity.setProjectOwnerUnit(deptId);
        entity.setCreateBy(userId);
        entity.setUpdateBy(userId);
        //如果不是储备项目(不是未开工项目)不需要审核
        if(ProjectConstant.COMMIT.equals(entity.getUsedStatus()) && ProjectStatusEnum.PENDDING.getType().equals(entity.getProjectStatus())){
            entity.setUsedStatus(ProjectConstant.PASS);
        }
        baseMapper.insert(entity);
        addPlan(entity.getId()); //添加计划表
        //添加文件
@@ -202,7 +202,7 @@
    }
    /**
     * 分页查询
     * 分页查询,TODO 项目中心的分页使用单独的接口,去掉写死的逻辑换成dept or查询
     *
     * @param query
     * @return
@@ -237,15 +237,17 @@
        Long userId = SecurityUtils.getUserId();
        String ancestors = sysDeptMapper.selectAncestors(userId);
        String[] ancestorArr = ancestors.split(",");
//        for (String ancestor : ancestorArr) {
//            if ("101".equals(ancestor)) { // 业主
//                query.setCreateBy(userId);
//                query.setRole(0);
//            } else if ("102".equals(ancestor)) { // 审批
//                query.setUsedStatus(1);
//                query.setRole(1);
//            }
//        }
        List<String> ancestorList = Arrays.stream(ancestorArr).collect(Collectors.toList());
        ancestorList.add(SecurityUtils.getDeptId()+"");
        if(!CollectionUtils.isEmpty(ancestorList) && ancestorList.contains("101")){
            query.setProjectOwnerUnit(SecurityUtils.getDeptId());
            //业主
            query.setRole(0);
        }else if(!CollectionUtils.isEmpty(ancestorList) && ancestorList.contains("102")){
            query.setCompetentDepartment(SecurityUtils.getDeptId());
            //审批 对应主管部门
            query.setRole(1);
        }
        IPage<ProjectInfoVO> page = PageUtil.getPage(query, ProjectInfoVO.class);
        baseMapper.getPage(query, page);
@@ -255,6 +257,8 @@
            ProjectInfoVO.transform(vo);
            ProjectVO projectVO = new ProjectVO();
            copyToProjectVO(vo, projectVO);
            List<Long> departmentList = vo.getCompetentDepartmentList();
            projectVO.setAuditRole(SecurityUtils.isAdmin(SecurityUtils.getUserId()) || (!CollectionUtils.isEmpty(departmentList) && departmentList.contains(SecurityUtils.getDeptId())));
            //翻译项目阶段
            String phase = ProjectCategoryEnum.getPhaseByProjectStatus(projectVO.getProjectStatus(), projectVO.getProcessId() != null);
            projectVO.setProjectPhase(phase);
@@ -287,6 +291,8 @@
        ProjectInfo entity = baseMapper.getById(id);
        Assert.notNull(entity, "记录不存在");
        ProjectInfoVO vo = ProjectInfoVO.getVoByEntity(entity, null);
        List<Long> departmentList = vo.getCompetentDepartmentList();
        vo.setAuditRole(SecurityUtils.isAdmin(SecurityUtils.getUserId()) || (!CollectionUtils.isEmpty(departmentList) && departmentList.contains(SecurityUtils.getDeptId())));
        QueryWrapper<File> fileQueryWrapper = new QueryWrapper<>();
        fileQueryWrapper.eq("type", FileTypeEnum.PROJECT_INFO.getType());
        fileQueryWrapper.eq("bus_id", vo.getId());
@@ -373,28 +379,26 @@
        indexCountVO.setProPhaseCountVO(proPhaseCountVO);
        List<IndexImpTypeCountVO> impTypeCountVO = new ArrayList<>();
        impTypeCountVO.add(new IndexImpTypeCountVO("一般项目", province.size(), province.stream().
        impTypeCountVO.add(new IndexImpTypeCountVO("一般项目", normal.size(), normal.stream().
                filter(item -> !StringUtils.isEmpty(item.getTotalInvestment()))
                .map(item -> new BigDecimal(item.getTotalInvestment()).setScale(2, RoundingMode.HALF_UP))
                .reduce(BigDecimal.ZERO, BigDecimal::add).divide(new BigDecimal("100000000"), 2, RoundingMode.HALF_UP).toString(), "普"));
        impTypeCountVO.add(new IndexImpTypeCountVO("县重点项目", city.size(), city.stream().
        impTypeCountVO.add(new IndexImpTypeCountVO("县重点项目", county.size(), county.stream().
                filter(item -> !StringUtils.isEmpty(item.getTotalInvestment()))
                .map(item -> new BigDecimal(item.getTotalInvestment()).setScale(2, RoundingMode.HALF_UP))
                .reduce(BigDecimal.ZERO, BigDecimal::add).divide(new BigDecimal("100000000"), 2, RoundingMode.HALF_UP).toString(), "县"));
        impTypeCountVO.add(new IndexImpTypeCountVO("市重点项目", county.size(), county.stream().
        impTypeCountVO.add(new IndexImpTypeCountVO("市重点项目", city.size(), city.stream().
                filter(item -> !StringUtils.isEmpty(item.getTotalInvestment()))
                .map(item -> new BigDecimal(item.getTotalInvestment()).setScale(2, RoundingMode.HALF_UP))
                .reduce(BigDecimal.ZERO, BigDecimal::add).divide(new BigDecimal("100000000"), 2, RoundingMode.HALF_UP).toString(), "市"));
        impTypeCountVO.add(new IndexImpTypeCountVO("省重点项目", normal.size(), normal.stream().
        impTypeCountVO.add(new IndexImpTypeCountVO("省重点项目", province.size(), province.stream().
                filter(item -> !StringUtils.isEmpty(item.getTotalInvestment()))
                .map(item -> new BigDecimal(item.getTotalInvestment()).setScale(2, RoundingMode.HALF_UP))
                .reduce(BigDecimal.ZERO, BigDecimal::add).divide(new BigDecimal("100000000"), 2, RoundingMode.HALF_UP).toString(), "省"));
        indexCountVO.setImpTypeCountVO(impTypeCountVO);
        return indexCountVO;
    }