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.common.enums.business.FileTypeEnum; import com.ycl.domain.entity.*; import com.ycl.domain.form.ProgressPlanForm; import com.ycl.domain.query.ProgressPlanQuery; import com.ycl.domain.vo.ProgressPlanInfoFlag; import com.ycl.domain.vo.ProgressPlanInfoResponseVO; import com.ycl.domain.vo.ProgressPlanVO; import com.ycl.domain.form.ProjectProgressFileListsForm; import com.ycl.framework.utils.PageUtil; import com.ycl.mapper.*; import com.ycl.service.ProgressPlanService; 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; /** * 项目计划进度 服务实现类 * * @author lhr * @since 2024-11-22 */ @Service @RequiredArgsConstructor public class ProgressPlanServiceImpl extends ServiceImpl implements ProgressPlanService { private final ProgressPlanMapper progressPlanMapper; private final ProjectPlanRecordMapper projectPlanRecordMapper; private final ProjectPlanInfoMapper projectPlanInfoMapper; private final PlanMapper planMapper; private final FileMapper fileMapper; /** * 添加 * @param form * @return */ @Override public Result add(ProgressPlanForm form) { ProgressPlan entity = ProgressPlanForm.getEntityByForm(form, null); baseMapper.insert(entity); return Result.ok("添加成功"); } /** * 修改 * @param form * @return */ @Override public Result update(ProgressPlanForm form) { ProgressPlan entity = baseMapper.selectById(form.getId()); // 为空抛IllegalArgumentException,做全局异常处理 Assert.notNull(entity, "记录不存在"); BeanUtils.copyProperties(form, entity); baseMapper.updateById(entity); return Result.ok("修改成功"); } /** * 批量删除 * @param ids * @return */ @Override public Result remove(List ids) { baseMapper.deleteBatchIds(ids); return Result.ok("删除成功"); } /** * id删除 * @param id * @return */ @Override public Result removeById(String id) { baseMapper.deleteById(id); return Result.ok("删除成功"); } /** * 分页查询 * @param query * @return */ @Override public Result page(ProgressPlanQuery query) { IPage page = PageUtil.getPage(query, ProgressPlanVO.class); baseMapper.getPage(page, query); return Result.ok().data(page.getRecords()).total(page.getTotal()); } /** * 根据id查找 * @param id * @return */ @Override public Result detail(Long id) { ProgressPlanInfoResponseVO vo = new ProgressPlanInfoResponseVO(); List monthProgress = new ArrayList<>(); List seasonProgress = new ArrayList<>(); List yearProgress = new ArrayList<>(); // 查询月度计划项 new LambdaQueryChainWrapper<>(projectPlanRecordMapper) .eq(ProjectPlanRecord::getProjectInfoId, id) .eq(ProjectPlanRecord::getPlanTimeFlag, 0) .list() .stream().forEach(record -> { ProgressPlanInfoFlag progressPlanInfoFlag = new ProgressPlanInfoFlag(); progressPlanInfoFlag.setPlanTime(record.getPlanTime()); progressPlanInfoFlag.setPlanTimeFlag(record.getPlanTimeFlag()); progressPlanInfoFlag.setPlanInfoList( new LambdaQueryChainWrapper<>(projectPlanInfoMapper) .eq(ProjectPlanInfo::getProjectPlanRecordId, record.getId()) .eq(ProjectPlanInfo::getDeleted, 0) // 未删除 .eq(ProjectPlanInfo::getPlanStatus, 2) // 计划项审批通过 .list() ); monthProgress.add(progressPlanInfoFlag); }); // 查询季度计划项 new LambdaQueryChainWrapper<>(projectPlanRecordMapper) .eq(ProjectPlanRecord::getProjectInfoId, id) .eq(ProjectPlanRecord::getPlanTimeFlag, 1) .list() .stream().forEach(record -> { ProgressPlanInfoFlag progressPlanInfoFlag = new ProgressPlanInfoFlag(); progressPlanInfoFlag.setPlanTime(record.getPlanTime()); progressPlanInfoFlag.setPlanTimeFlag(record.getPlanTimeFlag()); progressPlanInfoFlag.setPlanInfoList( new LambdaQueryChainWrapper<>(projectPlanInfoMapper) .eq(ProjectPlanInfo::getProjectPlanRecordId, record.getId()) .eq(ProjectPlanInfo::getDeleted, 0) // 未删除 .eq(ProjectPlanInfo::getPlanStatus, 2) // 计划项审批通过 .list() ); seasonProgress.add(progressPlanInfoFlag); }); // 查询年度计划项 new LambdaQueryChainWrapper<>(projectPlanRecordMapper) .eq(ProjectPlanRecord::getProjectInfoId, id) .eq(ProjectPlanRecord::getPlanTimeFlag, 2) .list() .stream().forEach(record -> { ProgressPlanInfoFlag progressPlanInfoFlag = new ProgressPlanInfoFlag(); progressPlanInfoFlag.setPlanTime(record.getPlanTime()); progressPlanInfoFlag.setPlanTimeFlag(record.getPlanTimeFlag()); progressPlanInfoFlag.setPlanInfoList( new LambdaQueryChainWrapper<>(projectPlanInfoMapper) .eq(ProjectPlanInfo::getProjectPlanRecordId, record.getId()) .eq(ProjectPlanInfo::getDeleted, 0) // 未删除 .eq(ProjectPlanInfo::getPlanStatus, 2) // 计划项审批通过 .list() ); yearProgress.add(progressPlanInfoFlag); }); vo.setMonthProgress(monthProgress); vo.setSeasonProgress(seasonProgress); vo.setYearProgress(yearProgress); return Result.ok().data(vo); } /** * 列表 * @return */ @Override public Result all() { List entities = baseMapper.selectList(null); List vos = entities.stream() .map(entity -> ProgressPlanVO.getVoByEntity(entity, null)) .collect(Collectors.toList()); return Result.ok().data(vos); } @Override @Transactional(rollbackFor = Exception.class) public Result saveProjectProgressFileLists(ProjectProgressFileListsForm form) { new LambdaUpdateChainWrapper<>(fileMapper) .eq(File::getBusId, form.getProjectReportId()) .eq(File::getType, FileTypeEnum.PROJECT_SITUATION_DESCRIPTION.getType()) .remove(); form.getSituationDescriptionFileList().stream() .forEach(file -> { file.setId(null); file.setBusId(form.getProjectReportId()); file.setType(FileTypeEnum.PROJECT_SITUATION_DESCRIPTION); fileMapper.insert(file); }); new LambdaUpdateChainWrapper<>(fileMapper) .eq(File::getBusId, form.getProjectReportId()) .eq(File::getType, FileTypeEnum.PROJECT_COMPLETE_REPORT.getType()) .remove(); form.getCompletedReportFileList().stream() .forEach(file -> { file.setId(null); file.setBusId(form.getProjectReportId()); file.setType(FileTypeEnum.PROJECT_COMPLETE_REPORT); fileMapper.insert(file); }); return Result.ok("保存成功"); } @Override public Result getProjectProgressForm(Long id) { ProjectProgressFileListsForm result = new ProjectProgressFileListsForm(); result.setProjectReportId(id); result.setCompletedReportFileList(new LambdaQueryChainWrapper<>(fileMapper) .eq(File::getBusId, id) .eq(File::getType, FileTypeEnum.PROJECT_COMPLETE_REPORT) .eq(File::getDeleted, 0) .list()); result.setSituationDescriptionFileList(new LambdaQueryChainWrapper<>(fileMapper) .eq(File::getBusId, id) .eq(File::getType, FileTypeEnum.PROJECT_SITUATION_DESCRIPTION) .eq(File::getDeleted, 0) .list()); return Result.ok().data(result); } }