xiangpei
2025-03-23 b78b10c1b2aa6f615b7a31c1bd159dfac490d410
business/src/main/java/com/ycl/service/impl/ProjectPlanInfoServiceImpl.java
@@ -1,20 +1,31 @@
package com.ycl.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ycl.common.base.Result;
import com.ycl.domain.entity.ProjectPlanExamineRecord;
import com.ycl.domain.entity.ProjectPlanInfo;
import com.ycl.domain.entity.ProjectPlanRecord;
import com.ycl.domain.form.ProjectPlanInfoForm;
import com.ycl.domain.form.ProjectPlanInfoRequestForm;
import com.ycl.domain.query.ProjectPlanInfoQuery;
import com.ycl.domain.vo.ProjectPlanInfoResponseVO;
import com.ycl.domain.vo.ProjectPlanInfoVO;
import com.ycl.framework.utils.PageUtil;
import com.ycl.mapper.ProjectPlanExamineRecordMapper;
import com.ycl.mapper.ProjectPlanInfoMapper;
import com.ycl.mapper.ProjectPlanRecordMapper;
import com.ycl.service.ProjectPlanInfoService;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.Assert;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
@@ -29,6 +40,8 @@
public class ProjectPlanInfoServiceImpl extends ServiceImpl<ProjectPlanInfoMapper, ProjectPlanInfo> implements ProjectPlanInfoService {
    private final ProjectPlanInfoMapper projectPlanInfoMapper;
    private final ProjectPlanRecordMapper projectPlanRecordMapper;
    private final ProjectPlanExamineRecordMapper projectPlanExamineRecordMapper;
    /**
     * 添加
@@ -98,9 +111,10 @@
     * @return
     */
    @Override
    public Result detail(Integer id) {
        ProjectPlanInfoVO vo = baseMapper.getById(id);
        Assert.notNull(vo, "记录不存在");
    public Result detail(Long id) {
        ProjectPlanInfoResponseVO vo = new ProjectPlanInfoResponseVO();
        vo.setList(new LambdaQueryChainWrapper<>(baseMapper).eq(ProjectPlanInfo::getProjectPlanRecordId, id).list());
        vo.setActualInvest(new LambdaQueryChainWrapper<>(projectPlanRecordMapper).eq(ProjectPlanRecord::getId, id).one().getActualInvest());
        return Result.ok().data(vo);
    }
@@ -116,4 +130,110 @@
                .collect(Collectors.toList());
        return Result.ok().data(vos);
    }
    @Transactional(rollbackFor = Exception.class)
    @Override
    public Result addPlanInfo(ProjectPlanInfoRequestForm form) {
        // 删除原有记录
        new LambdaUpdateChainWrapper<>(baseMapper)
                .eq(ProjectPlanInfo::getProjectPlanRecordId, form.getProjectPlanRecordId())
                .remove();
        // 批量插入新记录
        List<ProjectPlanInfo> list = new ArrayList<>();
        form.getAddList().forEach(item -> {
            ProjectPlanInfo projectPlanInfo = new ProjectPlanInfo();
            projectPlanInfo.setProjectPlanRecordId(form.getProjectPlanRecordId());
            projectPlanInfo.setTitle(item.getTitle()); // 计划项标题
            projectPlanInfo.setPlanStatus(0); // 计划项状态为未开始
            projectPlanInfo.setProgressStatus(0); // 计划项进度为未开始
            projectPlanInfo.setStartTime(item.getStartTime()); // 计划项开始时间
            projectPlanInfo.setEndTime(item.getEndTime()); // 计划项结束时间
            list.add(projectPlanInfo);
        });
        this.saveBatch(list);
        // 更新计划记录的投资,以及上报状态
        new LambdaUpdateChainWrapper<>(projectPlanRecordMapper)
                .eq(ProjectPlanRecord::getId, form.getProjectPlanRecordId())
                .set(ProjectPlanRecord::getActualInvest, form.getActualInvest())
                .set(ProjectPlanRecord::getReportStatus, 0)
                .update();
        // 新增一条审核记录
        for (ProjectPlanInfo i : list){
            ProjectPlanExamineRecord item = new ProjectPlanExamineRecord();
            item.setProjectPlanRecordId(form.getProjectPlanRecordId());
            item.setEventType(0); // 计划上报
            item.setProjectPlanInfoId(i.getId());
            projectPlanExamineRecordMapper.insert(item);
        }
        return Result.ok("添加成功");
    }
    @Override
    public Result savePlanInfo(ProjectPlanInfoForm form, Long planRecordId) {
        ProjectPlanInfo entity = new ProjectPlanInfo();
        BeanUtils.copyProperties(form, entity);
        entity.setProjectPlanRecordId(planRecordId); // 项目计划记录id
        entity.setProgressStatus(0); // 未开始
        entity.setPlanStatus(0); // 未审核
        // 判断id是否存在,存在则更新,不存在则新增
        if (entity.getId() == null) {
            baseMapper.insert(entity);
        } else {
            new LambdaUpdateChainWrapper<>(baseMapper).eq(ProjectPlanInfo::getId, entity.getId())
                    .set(ProjectPlanInfo::getTitle, entity.getTitle())
                    .set(ProjectPlanInfo::getStartTime, entity.getStartTime())
                    .set(ProjectPlanInfo::getEndTime, entity.getEndTime())
                    .update();
        }
        return Result.ok("保存成功");
    }
    @Transactional(rollbackFor = Exception.class)
    @Override
    public Result delayPlanInfo(ProjectPlanInfoForm request) {
        // 更改计划项时间
        new LambdaUpdateChainWrapper<>(baseMapper)
                .eq(ProjectPlanInfo::getId, request.getId())
                .set(ProjectPlanInfo::getStartTime, request.getStartTime())
                .set(ProjectPlanInfo::getEndTime, request.getEndTime())
                .update();
        // 查询出原来的审核记录
        ProjectPlanExamineRecord item = new LambdaQueryChainWrapper<>(projectPlanExamineRecordMapper)
                .eq(ProjectPlanExamineRecord::getProjectPlanInfoId, request.getId())
                .eq(ProjectPlanExamineRecord::getProjectPlanRecordId, request.getProjectPlanRecordId())
                .ne(ProjectPlanExamineRecord::getEventType, 2)
                .eq(ProjectPlanExamineRecord::getDeleted, 0) // 未删除
                .orderByDesc(ProjectPlanExamineRecord::getGmtCreate)
                .last("LIMIT 1")
                .one();
        // 更新原来的审核记录
        item.setEventType(1);
        item.setDelayStartTime(request.getStartTime());
        item.setDelayEndTime(request.getEndTime());
        projectPlanExamineRecordMapper.updateById(item);
        return Result.ok("延期成功");
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public Result resubmitPlanInfo(ProjectPlanInfoForm form) {
        // 更新重新上报后的内容
        new LambdaUpdateChainWrapper<>(baseMapper)
                .eq(ProjectPlanInfo::getId, form.getId())
                .set(ProjectPlanInfo::getTitle, form.getTitle())
                .set(ProjectPlanInfo::getStartTime, form.getStartTime())
                .set(ProjectPlanInfo::getEndTime, form.getEndTime())
                .set(ProjectPlanInfo::getPlanStatus, 0) // 将该计划项设置为未审核的状态
                .update();
        // 新增一条计划上报的审核记录
        ProjectPlanExamineRecord item = new ProjectPlanExamineRecord();
        item.setProjectPlanRecordId(form.getProjectPlanRecordId());
        item.setProjectPlanInfoId(form.getId());
        item.setEventType(0); // 计划上报
        item.setGmtCreate(new Date());
        projectPlanExamineRecordMapper.insert(item);
        return Result.ok("重新上报成功");
    }
}