Commit ccc6e248 authored by 施翔轲's avatar 施翔轲

项目台账相关

parent 3a296509
...@@ -40,6 +40,10 @@ public interface CbProjectConstants { ...@@ -40,6 +40,10 @@ public interface CbProjectConstants {
* 删除状态:未删除 * 删除状态:未删除
*/ */
Integer DELETE_FLAG_EXIST = 0; Integer DELETE_FLAG_EXIST = 0;
/**
* 删除状态:待删除
*/
Integer DELETE_FLAG_WAIT_DELETE = 1;
/** /**
* 删除状态:已删除 * 删除状态:已删除
*/ */
......
...@@ -49,6 +49,8 @@ public class CbProjectFileController extends BaseController { ...@@ -49,6 +49,8 @@ public class CbProjectFileController extends BaseController {
public R<Map<String, String>> uploadCbProjectFile(@Validated @ModelAttribute AddProjectFileUploadBo fileUploadBo) throws UnsupportedEncodingException { public R<Map<String, String>> uploadCbProjectFile(@Validated @ModelAttribute AddProjectFileUploadBo fileUploadBo) throws UnsupportedEncodingException {
MultipartFile file = fileUploadBo.getFile(); MultipartFile file = fileUploadBo.getFile();
Assert.notNull(file, "上传文件不能为空"); Assert.notNull(file, "上传文件不能为空");
//校验同一成本类型下是否存在相同文件
baseService.checkProjectFileExist(fileUploadBo);
SysOssVo oss = iSysOssService.upload(file); SysOssVo oss = iSysOssService.upload(file);
//添加项目上传文件记录 //添加项目上传文件记录
CbProjectFile cbProjectFile; CbProjectFile cbProjectFile;
...@@ -72,7 +74,7 @@ public class CbProjectFileController extends BaseController { ...@@ -72,7 +74,7 @@ public class CbProjectFileController extends BaseController {
*/ */
@DeleteMapping("/deleteCbProjectFile/{fileId}") @DeleteMapping("/deleteCbProjectFile/{fileId}")
public R<Void> deleteCbProjectFile(@NotNull(message = "文件ID不能为空") @PathVariable Long fileId) { public R<Void> deleteCbProjectFile(@NotNull(message = "文件ID不能为空") @PathVariable Long fileId) {
return toAjax(baseService.deleteProjectFile(fileId)); return toAjax(baseService.deleteProjectFile(new Long[]{fileId}));
} }
/** /**
......
...@@ -6,10 +6,7 @@ import com.dsk.common.core.domain.PageQuery; ...@@ -6,10 +6,7 @@ import com.dsk.common.core.domain.PageQuery;
import com.dsk.common.core.domain.R; import com.dsk.common.core.domain.R;
import com.dsk.common.core.page.TableDataInfo; import com.dsk.common.core.page.TableDataInfo;
import com.dsk.cscec.domain.CbProjectRecord; import com.dsk.cscec.domain.CbProjectRecord;
import com.dsk.cscec.domain.bo.AddCbProjectBo; import com.dsk.cscec.domain.bo.*;
import com.dsk.cscec.domain.bo.AddNewCbProjectBo;
import com.dsk.cscec.domain.bo.CbProjectSearchBo;
import com.dsk.cscec.domain.bo.EditProjectInfoBo;
import com.dsk.cscec.domain.vo.ProjectRecordSearchVo; import com.dsk.cscec.domain.vo.ProjectRecordSearchVo;
import com.dsk.cscec.service.CbProjectRecordService; import com.dsk.cscec.service.CbProjectRecordService;
import com.dsk.cscec.service.IDProjectService; import com.dsk.cscec.service.IDProjectService;
...@@ -19,6 +16,7 @@ import org.springframework.web.bind.annotation.*; ...@@ -19,6 +16,7 @@ import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
import java.util.Arrays;
import java.util.List; import java.util.List;
/** /**
...@@ -69,10 +67,18 @@ public class CbProjectRecordController extends BaseController { ...@@ -69,10 +67,18 @@ public class CbProjectRecordController extends BaseController {
* 获取项目台账列表 * 获取项目台账列表
*/ */
@GetMapping("/getProjectList") @GetMapping("/getProjectList")
public TableDataInfo<ProjectRecordSearchVo> getProjectList(CbProjectSearchBo searchBo, PageQuery pageQuery) { public TableDataInfo<ProjectRecordSearchVo> getProjectList(@RequestBody CbProjectSearchBo searchBo, PageQuery pageQuery) {
return baseService.getProjectList(searchBo, pageQuery); return baseService.getProjectList(searchBo, pageQuery);
} }
/**
* 获取项目历史阶段信息(懒加载)
*/
@GetMapping("/getProjectHistoryInfo")
public R<List<CbProjectRecord>> getProjectHistoryInfo(@RequestBody CbProjectHistorySearchBo searchBo) {
return R.ok(baseService.getProjectHistoryInfo(searchBo));
}
/** /**
* 修改项目信息 * 修改项目信息
*/ */
...@@ -97,16 +103,29 @@ public class CbProjectRecordController extends BaseController { ...@@ -97,16 +103,29 @@ public class CbProjectRecordController extends BaseController {
return R.ok(baseService.addNewStageProject(newProjectBo)); return R.ok(baseService.addNewStageProject(newProjectBo));
} }
/**
* 查询当前项目可删除成本阶段
* 即查询当前项目非草稿的成本阶段
*/
@GetMapping("/getProjectCbStageNotDraft/{relatedId}")
public R<List<Integer>> getProjectCbStageNotDraft(@PathVariable Long relatedId) {
return R.ok(baseService.getProjectCbStageNotDraft(relatedId));
}
/**
* 批量删除项目
*/
@DeleteMapping("/batchDeleteProject/{projectIds}")
public R<Void> batchDeleteProject(@NotNull(message = "项目ID不能为空") @PathVariable Long[] projectIds) {
return toAjax(baseService.batchDeleteProject(Arrays.asList(projectIds)));
}
/** /**
* 获取草稿弹窗列表 * 获取草稿弹窗列表
*/ */
@GetMapping("/getDraftDialogList") @GetMapping("/getDraftDialogList")
public R<List<CbProjectRecord>> getDraftDialogList() { public TableDataInfo<CbProjectRecord> getDraftDialogList(PageQuery pageQuery) {
List<CbProjectRecord> draftList = baseService.getDraftDialogList(); return baseService.getDraftDialogList(pageQuery);
if (draftList.isEmpty()) {
return R.ok("暂无草稿记录");
}
return R.ok(draftList);
} }
/** /**
......
...@@ -48,7 +48,7 @@ public class CbProjectFile extends BaseEntity implements Serializable { ...@@ -48,7 +48,7 @@ public class CbProjectFile extends BaseEntity implements Serializable {
*/ */
private String fileOssUrl; private String fileOssUrl;
/** /**
* 项目文件状态(0:待解析、1:解析中、2:解析成功、3:解析失败) * 项目文件状态(0:准备中、1:解析中、2:解析成功、3:解析失败)
*/ */
private Integer fileParseStatus; private Integer fileParseStatus;
/** /**
......
package com.dsk.cscec.domain.bo;
import lombok.Data;
/**
* @author sxk
* @date 2024.02.18
* @time 15:04
*/
@Data
public class CbProjectHistorySearchBo {
/**
* 项目ID
*/
private Long projectId;
/**
* 项目名称
*/
private String projectName;
/**
* IPM项目编码
*/
private String ipmProjectNo;
/**
* 成本阶段(0:标前成本、1:标后成本、2:转固成本)
*/
private Integer cbStage;
/**
* 项目文件状态(1:解析中、2:解析成功、3:解析失败)
*/
private Integer projectFileStatus;
}
package com.dsk.cscec.domain.vo; package com.dsk.cscec.domain.vo;
import com.dsk.cscec.domain.CbProjectRecord;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.List; import java.util.Date;
/** /**
* @author sxk * @author sxk
* @date 2024.02.18 * @date 2024.02.18
* @time 15:08 * @time 15:08
*/ */
@EqualsAndHashCode(callSuper = true)
@Data @Data
public class ProjectRecordSearchVo { public class ProjectRecordSearchVo extends CbProjectRecord {
/** /**
* 项目ID * 更新者
*/ */
private Long id; private String updateBy;
/** /**
* 项目名称 * 更新时间
*/ */
private String projectName; private Date updateTime;
/** /**
* IPM项目编码 * 是否有子集
*/ */
private String ipmProjectNo; private Boolean hasChildren;
/**
* 文件名称
*/
private String projectFileName;
/**
* 项目数据
*/
private List<ProjectRecordDataVo> dataVoList;
} }
...@@ -2,9 +2,13 @@ package com.dsk.cscec.mapper; ...@@ -2,9 +2,13 @@ package com.dsk.cscec.mapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.dsk.cscec.domain.CbProjectRecord; import com.dsk.cscec.domain.CbProjectRecord;
import com.dsk.cscec.domain.bo.CbProjectSearchBo;
import com.dsk.cscec.domain.vo.ProjectRecordSearchVo; import com.dsk.cscec.domain.vo.ProjectRecordSearchVo;
import org.apache.ibatis.annotations.Param;
/** /**
* 项目台账表(CbProjectRecord)表数据库访问层 * 项目台账表(CbProjectRecord)表数据库访问层
...@@ -16,7 +20,15 @@ public interface CbProjectRecordMapper extends BaseMapper<CbProjectRecord> { ...@@ -16,7 +20,15 @@ public interface CbProjectRecordMapper extends BaseMapper<CbProjectRecord> {
/** /**
* 获取项目台账列表 * 获取项目台账列表
*/ */
Page<ProjectRecordSearchVo> selectPageProjectRecordList(Page<ProjectRecordSearchVo> build, QueryWrapper<CbProjectRecord> wrapper); Page<ProjectRecordSearchVo> selectPageProjectRecordList(IPage<CbProjectSearchBo> build,
@Param("searchBo") CbProjectSearchBo searchBo,
@Param("deleteFlagExist") Integer deleteFlagExist,
@Param("projectFileStatusPreparing") Integer projectFileStatusPreparing);
/**
* 获取草稿弹窗列表
*/
Page<CbProjectRecord> selectPageDraftDialogList(@Param("page") Page<CbProjectRecord> page, @Param(Constants.WRAPPER) QueryWrapper<CbProjectRecord> wrapper);
} }
...@@ -13,6 +13,13 @@ import com.dsk.system.domain.vo.SysOssVo; ...@@ -13,6 +13,13 @@ import com.dsk.system.domain.vo.SysOssVo;
* @since 2024-02-05 14:01:06 * @since 2024-02-05 14:01:06
*/ */
public interface CbProjectFileService extends IService<CbProjectFile> { public interface CbProjectFileService extends IService<CbProjectFile> {
/**
* 校验同一成本类型下是否存在相同文件
*
* @param fileUploadBo 上传信息
*/
Boolean checkProjectFileExist(AddProjectFileUploadBo fileUploadBo);
/** /**
* 添加项目上传文件记录 * 添加项目上传文件记录
* *
...@@ -23,12 +30,12 @@ public interface CbProjectFileService extends IService<CbProjectFile> { ...@@ -23,12 +30,12 @@ public interface CbProjectFileService extends IService<CbProjectFile> {
CbProjectFile addProjectFile(AddProjectFileUploadBo fileUploadBo, SysOssVo oss); CbProjectFile addProjectFile(AddProjectFileUploadBo fileUploadBo, SysOssVo oss);
/** /**
* 逻辑删除项目上传文件记录 * 批量逻辑删除项目上传文件记录
* *
* @param fileId 文件ID * @param fileIds 文件ID
* @return 删除结果 * @return 删除结果
*/ */
Integer deleteProjectFile(Long fileId); Integer deleteProjectFile(Long[] fileIds);
/** /**
* 获取项目文件上传详情 * 获取项目文件上传详情
...@@ -37,5 +44,4 @@ public interface CbProjectFileService extends IService<CbProjectFile> { ...@@ -37,5 +44,4 @@ public interface CbProjectFileService extends IService<CbProjectFile> {
* @return 文件列表 * @return 文件列表
*/ */
QueryProjectFileUploadDetailVo getProjectFileUploadDetail(Long projectId); QueryProjectFileUploadDetailVo getProjectFileUploadDetail(Long projectId);
} }
...@@ -4,10 +4,7 @@ import com.baomidou.mybatisplus.extension.service.IService; ...@@ -4,10 +4,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
import com.dsk.common.core.domain.PageQuery; import com.dsk.common.core.domain.PageQuery;
import com.dsk.common.core.page.TableDataInfo; import com.dsk.common.core.page.TableDataInfo;
import com.dsk.cscec.domain.CbProjectRecord; import com.dsk.cscec.domain.CbProjectRecord;
import com.dsk.cscec.domain.bo.AddCbProjectBo; import com.dsk.cscec.domain.bo.*;
import com.dsk.cscec.domain.bo.AddNewCbProjectBo;
import com.dsk.cscec.domain.bo.CbProjectSearchBo;
import com.dsk.cscec.domain.bo.EditProjectInfoBo;
import com.dsk.cscec.domain.vo.ProjectRecordSearchVo; import com.dsk.cscec.domain.vo.ProjectRecordSearchVo;
import java.util.List; import java.util.List;
...@@ -43,6 +40,14 @@ public interface CbProjectRecordService extends IService<CbProjectRecord> { ...@@ -43,6 +40,14 @@ public interface CbProjectRecordService extends IService<CbProjectRecord> {
*/ */
TableDataInfo<ProjectRecordSearchVo> getProjectList(CbProjectSearchBo searchBo, PageQuery pageQuery); TableDataInfo<ProjectRecordSearchVo> getProjectList(CbProjectSearchBo searchBo, PageQuery pageQuery);
/**
* 获取项目历史阶段信息(懒加载)
*
* @param searchBo 查询条件
* @return 历史阶段信息
*/
List<CbProjectRecord> getProjectHistoryInfo(CbProjectHistorySearchBo searchBo);
/** /**
* 修改项目信息 * 修改项目信息
* *
...@@ -67,12 +72,29 @@ public interface CbProjectRecordService extends IService<CbProjectRecord> { ...@@ -67,12 +72,29 @@ public interface CbProjectRecordService extends IService<CbProjectRecord> {
*/ */
CbProjectRecord addNewStageProject(AddNewCbProjectBo newProjectBo); CbProjectRecord addNewStageProject(AddNewCbProjectBo newProjectBo);
/**
* 查询当前项目非草稿的成本阶段
*
* @param relatedId 关联ID
* @return 已有数据的成本阶段
*/
List<Integer> getProjectCbStageNotDraft(Long relatedId);
/**
* 批量删除项目
*
* @param projectIds 项目ID
* @return 删除结果
*/
Integer batchDeleteProject(List<Long> projectIds);
/** /**
* 获取草稿弹窗列表 * 获取草稿弹窗列表
* *
* @return 草稿弹窗列表 * @param pageQuery 分页对象
* @return 分页数据
*/ */
List<CbProjectRecord> getDraftDialogList(); TableDataInfo<CbProjectRecord> getDraftDialogList(PageQuery pageQuery);
/** /**
* 删除草稿 * 删除草稿
......
...@@ -2,7 +2,9 @@ package com.dsk.cscec.service.impl; ...@@ -2,7 +2,9 @@ package com.dsk.cscec.service.impl;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.lang.Assert; import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dsk.cscec.constant.CbProjectConstants; import com.dsk.cscec.constant.CbProjectConstants;
import com.dsk.cscec.domain.CbProjectFile; import com.dsk.cscec.domain.CbProjectFile;
...@@ -17,6 +19,7 @@ import org.springframework.stereotype.Service; ...@@ -17,6 +19,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
...@@ -32,13 +35,34 @@ public class CbProjectFileServiceImpl extends ServiceImpl<CbProjectFileMapper, C ...@@ -32,13 +35,34 @@ public class CbProjectFileServiceImpl extends ServiceImpl<CbProjectFileMapper, C
private CbProjectFileMapper baseMapper; private CbProjectFileMapper baseMapper;
@Resource @Resource
private CbProjectRecordMapper projectRecordMapper; private CbProjectRecordMapper projectRecordMapper;
@Resource
private CbProjectFileMapper projectFileMapper;
/**
* 校验同一成本类型下是否存在相同文件
*
* @param fileUploadBo 上传信息
*/
@Override
public Boolean checkProjectFileExist(AddProjectFileUploadBo fileUploadBo) {
String filename = fileUploadBo.getFile().getOriginalFilename();
assert filename != null;
projectFileMapper.selectList(new LambdaQueryWrapper<CbProjectFile>()
.eq(CbProjectFile::getProjectId, fileUploadBo.getProjectId())
.eq(CbProjectFile::getCbType, fileUploadBo.getCbType())).forEach(projectFile -> {
//仅对比文件名,不考虑文件格式
Assert.isFalse(projectFile.getFileName().substring(0, projectFile.getFileName().lastIndexOf(".")).equals(filename.substring(0, filename.lastIndexOf(".")))
, "当前成本类型下存在同名文件,请重新上传");
});
return true;
}
/** /**
* 添加项目上传文件记录 * 添加项目上传文件记录
* *
* @param fileUploadBo 上传信息 * @param fileUploadBo 上传信息
* @param oss oss信息 * @param oss oss信息
* @return * @return 文件记录
*/ */
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
...@@ -58,16 +82,34 @@ public class CbProjectFileServiceImpl extends ServiceImpl<CbProjectFileMapper, C ...@@ -58,16 +82,34 @@ public class CbProjectFileServiceImpl extends ServiceImpl<CbProjectFileMapper, C
} }
/** /**
* 逻辑删除项目上传文件记录 * 批量逻辑删除项目上传文件记录
* *
* @param fileId 文件ID * @param fileIds 文件ID
* @return 删除结果 * @return 删除结果
*/ */
@Override @Override
public Integer deleteProjectFile(Long fileId) { @Transactional(rollbackFor = Exception.class)
CbProjectFile projectFile = baseMapper.selectById(fileId); public Integer deleteProjectFile(Long[] fileIds) {
Assert.notNull(projectFile, "该文件不存在"); int flag = 0;
return baseMapper.deleteById(projectFile); //查询待删除文件
List<CbProjectFile> fileList = baseMapper.selectList(new LambdaQueryWrapper<CbProjectFile>()
.in(ObjectUtil.isNotNull(fileIds), CbProjectFile::getId, Arrays.asList(fileIds)));
for (CbProjectFile file : fileList) {
//不允许删除解析中的文件
Integer fileParseStatus = file.getFileParseStatus();
Assert.isFalse(fileParseStatus.equals(CbProjectConstants.PROJECT_FILE_STATUS_PARSING),
"文件正在解析中,不允许删除");
//准备中、的文件设为已删除,否则设为待删除
//设为待删除是为了方便各个成本类型删除数据
if (fileParseStatus.equals(CbProjectConstants.PROJECT_FILE_STATUS_PREPARING)) {
flag = baseMapper.deleteById(file);
} else {
flag = baseMapper.update(null, new UpdateWrapper<CbProjectFile>()
.set("del_flag", CbProjectConstants.DELETE_FLAG_WAIT_DELETE)
.eq("id", file.getId()));
}
}
return flag;
} }
/** /**
...@@ -91,7 +133,7 @@ public class CbProjectFileServiceImpl extends ServiceImpl<CbProjectFileMapper, C ...@@ -91,7 +133,7 @@ public class CbProjectFileServiceImpl extends ServiceImpl<CbProjectFileMapper, C
QueryProjectFileUploadDetailVo draftDetailVo = new QueryProjectFileUploadDetailVo(); QueryProjectFileUploadDetailVo draftDetailVo = new QueryProjectFileUploadDetailVo();
draftDetailVo.setProjectId(projectId); draftDetailVo.setProjectId(projectId);
if (projectFileList.isEmpty()) { if (projectFileList.isEmpty()) {
return draftDetailVo; return null;
} }
//按照成本类型分类填充 //按照成本类型分类填充
......
...@@ -3,6 +3,7 @@ package com.dsk.cscec.service.impl; ...@@ -3,6 +3,7 @@ package com.dsk.cscec.service.impl;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.lang.Assert; import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
...@@ -140,23 +141,67 @@ public class CbProjectRecordServiceImpl extends ServiceImpl<CbProjectRecordMappe ...@@ -140,23 +141,67 @@ public class CbProjectRecordServiceImpl extends ServiceImpl<CbProjectRecordMappe
*/ */
@Override @Override
public TableDataInfo<ProjectRecordSearchVo> getProjectList(CbProjectSearchBo searchBo, PageQuery pageQuery) { public TableDataInfo<ProjectRecordSearchVo> getProjectList(CbProjectSearchBo searchBo, PageQuery pageQuery) {
QueryWrapper<CbProjectRecord> wrapper = Wrappers.query(); Page<ProjectRecordSearchVo> page = baseMapper.selectPageProjectRecordList(pageQuery.build(), searchBo, CbProjectConstants.DELETE_FLAG_EXIST, CbProjectConstants.PROJECT_FILE_STATUS_PREPARING);
wrapper
.like(StringUtils.isNotBlank(searchBo.getProjectName()), "project_name", searchBo.getProjectName())
.like(StringUtils.isNotBlank(searchBo.getIpmProjectNo()), "ipm_project_no", searchBo.getIpmProjectNo());
//TODO:成本阶段、文件解析状态筛选
Integer cbStage = searchBo.getCbStage();
Integer projectFileStatus = searchBo.getProjectFileStatus();
Page<ProjectRecordSearchVo> page = baseMapper.selectPageProjectRecordList(pageQuery.build(), wrapper);
for (ProjectRecordSearchVo searchVo : page.getRecords()) { for (ProjectRecordSearchVo searchVo : page.getRecords()) {
Long projectId = searchVo.getId(); //判断是否有历史阶段
//page. searchVo.setHasChildren(baseMapper.selectCount(new LambdaQueryWrapper<CbProjectRecord>()
.eq(CbProjectRecord::getRelatedId, searchVo.getRelatedId())) > 1);
//关键字标红
if (StringUtils.isNotBlank(searchBo.getProjectName())) {
searchVo.setProjectName(StringUtils.markInRed(searchVo.getProjectName(), searchBo.getProjectName()));
}
//补充更新时间、更新人
CbProjectFile projectFile = projectFileMapper.selectOne(new LambdaQueryWrapper<CbProjectFile>()
.eq(CbProjectFile::getProjectId, searchVo.getId())
.orderByDesc(CbProjectFile::getUpdateTime)
.last("LIMIT 1"));
searchVo.setUpdateBy(projectFile.getUpdateBy());
searchVo.setUpdateTime(projectFile.getUpdateTime());
} }
return TableDataInfo.build(page); return TableDataInfo.build(page);
} }
/**
* 获取项目历史阶段信息(懒加载)
*
* @param searchBo 查询条件
* @return 历史阶段信息
*/
@Override
public List<CbProjectRecord> getProjectHistoryInfo(CbProjectHistorySearchBo searchBo) {
//校验项目是否存在
CbProjectRecord projectRecord = this.checkProjectExist(searchBo.getProjectId());
//查询所有历史阶段项目(不含准备中的项目)
List<CbProjectRecord> projectRecordList = baseMapper.selectList(new LambdaQueryWrapper<CbProjectRecord>()
.eq(CbProjectRecord::getRelatedId, projectRecord.getRelatedId())
.ne(CbProjectRecord::getId, projectRecord.getId())
.ne(CbProjectRecord::getProjectFileStatus, CbProjectConstants.PROJECT_FILE_STATUS_PREPARING)
.like(StringUtils.isNotBlank(searchBo.getProjectName()), CbProjectRecord::getProjectName, searchBo.getProjectName())
.eq(StringUtils.isNotBlank(searchBo.getIpmProjectNo()), CbProjectRecord::getIpmProjectNo, searchBo.getIpmProjectNo())
.eq(ObjectUtil.isNotNull(searchBo.getCbStage()), CbProjectRecord::getCbStage, searchBo.getCbStage())
.eq(ObjectUtil.isNotNull(searchBo.getProjectFileStatus()), CbProjectRecord::getProjectFileStatus, searchBo.getProjectFileStatus()));
projectRecordList.forEach(record -> {
//关键字标红
if (StringUtils.isNotBlank(searchBo.getProjectName())) {
record.setProjectName(StringUtils.markInRed(record.getProjectFileName(), searchBo.getProjectName()));
}
//补充更新时间、更新人
CbProjectFile projectFile = projectFileMapper.selectOne(new LambdaQueryWrapper<CbProjectFile>()
.eq(CbProjectFile::getProjectId, record.getId())
.orderByDesc(CbProjectFile::getUpdateTime)
.last("LIMIT 1"));
record.setUpdateBy(projectFile.getUpdateBy());
record.setUpdateTime(projectFile.getUpdateTime());
});
return projectRecordList;
}
/** /**
* 修改项目信息 * 修改项目信息
* *
...@@ -233,13 +278,70 @@ public class CbProjectRecordServiceImpl extends ServiceImpl<CbProjectRecordMappe ...@@ -233,13 +278,70 @@ public class CbProjectRecordServiceImpl extends ServiceImpl<CbProjectRecordMappe
return null; return null;
} }
/**
* 查询当前项目非草稿的成本阶段
*
* @param relatedId 关联ID
* @return 已有数据的成本阶段
*/
@Override
public List<Integer> getProjectCbStageNotDraft(Long relatedId) {
//通过关联ID校验项目是否存在
List<CbProjectRecord> projectRecordList = this.checkRelatedIdExist(relatedId);
ArrayList<Integer> cbStageList = new ArrayList<>();
projectRecordList.forEach(projectRecord -> {
//文件状态为解析成功or解析失败即为有数据
if (!projectRecord.getProjectFileStatus().equals(CbProjectConstants.PROJECT_FILE_STATUS_PREPARING)
&& !projectRecord.getProjectFileStatus().equals(CbProjectConstants.PROJECT_FILE_STATUS_PARSING)
&& projectFileMapper.exists(new LambdaQueryWrapper<CbProjectFile>()
.eq(CbProjectFile::getProjectId, projectRecord.getId())
.eq(CbProjectFile::getFileParseStatus, CbProjectConstants.PROJECT_FILE_STATUS_PARSE_SUCCESS)
.or()
.eq(CbProjectFile::getFileParseStatus, CbProjectConstants.PROJECT_FILE_STATUS_PARSE_FAIL))) {
cbStageList.add(projectRecord.getCbStage());
}
});
return cbStageList;
}
/**
* 批量删除项目
*
* @param projectIds 项目ID
* @return 删除结果
*/
@Override
@Transactional(rollbackFor = Exception.class)
public Integer batchDeleteProject(List<Long> projectIds) {
int flag = 0;
for (Long projectId : projectIds) {
//校验项目是否存在
CbProjectRecord projectRecord = this.checkProjectExist(projectId);
//不允许删除正在解析中的项目
Assert.isFalse(projectRecord.getProjectFileStatus().equals(CbProjectConstants.PROJECT_FILE_STATUS_PARSING)
, "存在解析中的项目,删除失败");
//TODO:各个成本类型数据和对应每月成本数据暂不做删除,项目台账列表查不出来自然也无法查看数据
//删除项目文件记录
flag = projectFileMapper.delete(new LambdaQueryWrapper<CbProjectFile>()
.eq(CbProjectFile::getProjectId, projectId));
//删除项目记录
Assert.isTrue(flag > 0, "操作异常,请联系管理员");
flag = baseMapper.deleteById(projectId);
}
return flag;
}
/** /**
* 通过关联ID校验项目是否存在 * 通过关联ID校验项目是否存在
* *
* @return 该关联ID下的所有项目记录 * @return 该关联ID下的所有项目记录
*/ */
private List<CbProjectRecord> checkRelatedIdExist(Long relatedId) { private List<CbProjectRecord> checkRelatedIdExist(Long relatedId) {
List<CbProjectRecord> projectRecordList = baseMapper.selectList(new LambdaQueryWrapper<CbProjectRecord>().eq(CbProjectRecord::getRelatedId, relatedId)); List<CbProjectRecord> projectRecordList = baseMapper.selectList(new LambdaQueryWrapper<CbProjectRecord>()
.eq(CbProjectRecord::getRelatedId, relatedId));
Assert.isFalse(projectRecordList.isEmpty(), "关联ID无效"); Assert.isFalse(projectRecordList.isEmpty(), "关联ID无效");
return projectRecordList; return projectRecordList;
} }
...@@ -247,12 +349,17 @@ public class CbProjectRecordServiceImpl extends ServiceImpl<CbProjectRecordMappe ...@@ -247,12 +349,17 @@ public class CbProjectRecordServiceImpl extends ServiceImpl<CbProjectRecordMappe
/** /**
* 获取草稿弹窗列表 * 获取草稿弹窗列表
* *
* @return 草稿弹窗列表 * @param pageQuery 分页对象
* @return 分页数据
*/ */
@Override @Override
public List<CbProjectRecord> getDraftDialogList() { public TableDataInfo<CbProjectRecord> getDraftDialogList(PageQuery pageQuery) {
return baseMapper.selectList(new LambdaQueryWrapper<CbProjectRecord>() QueryWrapper<CbProjectRecord> wrapper = Wrappers.query();
.eq(CbProjectRecord::getProjectFileStatus, CbProjectConstants.PROJECT_FILE_STATUS_PREPARING)); wrapper
.eq("project_file_status", CbProjectConstants.PROJECT_FILE_STATUS_PREPARING)
.eq("del_flag", CbProjectConstants.DELETE_FLAG_EXIST)
.orderByDesc("update_time");
return TableDataInfo.build(baseMapper.selectPageDraftDialogList(pageQuery.build(), wrapper));
} }
/** /**
......
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dsk.cscec.mapper.CbProjectFileMapper"> <mapper namespace="com.dsk.cscec.mapper.CbProjectFileMapper">
</mapper>
</mapper> \ No newline at end of file
...@@ -3,10 +3,47 @@ ...@@ -3,10 +3,47 @@
<mapper namespace="com.dsk.cscec.mapper.CbProjectRecordMapper"> <mapper namespace="com.dsk.cscec.mapper.CbProjectRecordMapper">
<!--获取项目台账列表--> <!--获取项目台账列表-->
<select id="selectPageProjectRecordList" resultType="com.dsk.cscec.domain.vo.ProjectRecordSearchVo"> <select id="selectPageProjectRecordList" resultType="com.dsk.cscec.domain.vo.ProjectRecordSearchVo">
select
cpr.id,
cpr.related_id,
cpr.project_name,
cpr.cb_stage,
cpr.project_file_status,
cpr.ipm_project_no,
cpr.is_get_project_detail,
cpr.project_file_name,
cpr.create_time
from cb_project_record cpr
left join cb_project_record cprr
on cpr.related_id = cprr.related_id
and cpr.cb_stage &lt; cprr.cb_stage
where
cprr.cb_stage is null
and
cpr.del_flag=#{deleteFlagExist}
<if test="searchBo.projectName != null and searchBo.projectName != ''">
and cpr.project_name like concat('%',#{searchBo.projectName},'%')
</if>
<if test="searchBo.ipmProjectNo != null and searchBo.ipmProjectNo != ''">
and cpr.ipm_project_no = #{searchBo.ipmProjectNo}
</if>
<if test="searchBo.cbStage != null">
and cpr.cb_stage = #{searchBo.cbStage}
</if>
<if test="searchBo.projectFileStatus != null">
and project_file_status = #{searchBo.projectFileStatus}
</if>
and
cpr.project_file_status != #{projectFileStatusPreparing}
order by cpr.create_time desc
</select>
<!--获取草稿弹窗列表-->
<select id="selectPageDraftDialogList" resultType="com.dsk.cscec.domain.CbProjectRecord">
select cpr.id, select cpr.id,
cpr.project_name, cpr.project_name,
cpr.ipm_project_no, cpr.cb_stage,
cpr.project_file_name cpr.update_time
from cb_project_record cpr from cb_project_record cpr
${ew.getCustomSqlSegment}; ${ew.getCustomSqlSegment};
</select> </select>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment