fuliqi
2025-02-19 e1cf283ea35aaf3feea32a22712a7c9c735a7d62
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.*;
@@ -43,6 +41,7 @@
import com.ycl.mapper.*;
import com.ycl.service.FileService;
import com.ycl.service.ProjectInfoService;
import com.ycl.service.ProjectInfoWinUnitService;
import com.ycl.system.mapper.SysDeptMapper;
import lombok.RequiredArgsConstructor;
import org.apache.commons.codec.Charsets;
@@ -61,15 +60,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;
/**
 * 项目管理基础信息表 服务实现类
@@ -82,6 +78,7 @@
public class ProjectInfoServiceImpl extends ServiceImpl<ProjectInfoMapper, ProjectInfo> implements ProjectInfoService {
    private final ProjectInfoMapper projectInfoMapper;
    private final ProjectInfoWinUnitService projectInfoWinUnitService;
    private final ProjectInvestmentFundingMapper investmentFundingMapper;
    private final ProjectInvestmentInfoMapper investmentInfoMapper;
    private final ProjectInvestmentPolicyComplianceMapper policyMapper;
@@ -108,9 +105,14 @@
        ProjectInfo entity = ProjectInfoForm.getEntityByForm(form, null);
        Long userId = SecurityUtils.getUserId();
        Long deptId = SecurityUtils.getDeptId();
        List<ProjectInfoWinUnitForm> projectInfoWinUnitForm = form.getWinUnitList();
        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()); //添加计划表
        //添加文件
@@ -120,6 +122,9 @@
            item.setType(FileTypeEnum.PROJECT_INFO);
        });
        fileService.saveBatch(fileList);
        //添加项目中标单位
        saveUnit(projectInfoWinUnitForm);
        return Result.ok("添加成功").data(entity.getId());
    }
@@ -164,7 +169,28 @@
        fileMapper.delete(fileQueryWrapper);
        //替换成现有
        fileService.saveBatch(fileList);
        //修改项目中标单位
        //删除原数据
        List<ProjectInfoWinUnitForm> projectInfoWinUnitForm = form.getWinUnitList();
        QueryWrapper<ProjectInfoWinUnit> unitWrapper = new QueryWrapper<>();
        unitWrapper.eq("project_info_id",form.getId());
        projectInfoWinUnitService.remove(unitWrapper);
        //添加项目中标单位
        saveUnit(projectInfoWinUnitForm);
        return Result.ok("修改成功");
    }
    private void saveUnit(List<ProjectInfoWinUnitForm> projectInfoWinUnitForm) {
        List<ProjectInfoWinUnit> projectInfoWinUnits = new ArrayList<>();
        for (ProjectInfoWinUnitForm winUnitForm : projectInfoWinUnitForm) {
            ProjectInfoWinUnit projectInfoWinUnit = ProjectInfoWinUnitForm.getEntityByForm(winUnitForm, null);
            projectInfoWinUnits.add(projectInfoWinUnit);
        }
        if (!CollectionUtils.isEmpty(projectInfoWinUnits)) {
            projectInfoWinUnitService.saveBatch(projectInfoWinUnits);
        }
    }
    /**
@@ -192,6 +218,7 @@
        investmentInfoMapper.delete(new QueryWrapper<ProjectInvestmentInfo>().eq("project_id", id));
        policyMapper.delete(new QueryWrapper<ProjectInvestmentPolicyCompliance>().eq("project_id", id));
        unitRegistrationInfoMapper.delete(new QueryWrapper<ProjectUnitRegistrationInfo>().eq("project_id", id));
        projectInfoWinUnitService.remove(new QueryWrapper<ProjectInfoWinUnit>().eq("project_info_id",id));
        List<String> types = new ArrayList<>();
        types.add(FileTypeEnum.PROJECT_INFO.getType());
@@ -203,7 +230,7 @@
    }
    /**
     * 分页查询
     * 分页查询,TODO 项目中心的分页使用单独的接口,去掉写死的逻辑换成dept or查询
     *
     * @param query
     * @return
@@ -258,6 +285,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);
@@ -290,11 +319,21 @@
        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());
        List<File> files = fileMapper.selectList(fileQueryWrapper);
        vo.setFileList(files);
        List<ProjectInfoWinUnitVO> unitVOS = new ArrayList<>();
        List<ProjectInfoWinUnit> unitList = projectInfoWinUnitService.list(new QueryWrapper<ProjectInfoWinUnit>().eq("project_info_id", id));
        for (ProjectInfoWinUnit projectInfoWinUnit : unitList) {
            ProjectInfoWinUnitVO unitVO = ProjectInfoWinUnitVO.getVoByEntity(projectInfoWinUnit,null);
            unitVOS.add(unitVO);
        }
        vo.setWinUnitVOList(unitVOS);
        return Result.ok().data(vo);
    }