Commit 43b5c405 authored by 施翔轲's avatar 施翔轲

项目台账文件导入列表:草稿、文件上传详情

parent 5ca3ac93
...@@ -77,6 +77,6 @@ public interface CbProjectConstants { ...@@ -77,6 +77,6 @@ public interface CbProjectConstants {
/** /**
* 成本类型:成本汇总 * 成本类型:成本汇总
*/ */
Integer CB_TYPE_ACCOUNT_SUMMARY = 5; Integer CB_TYPE_SUMMARY = 5;
} }
...@@ -6,9 +6,10 @@ import com.dsk.common.core.controller.BaseController; ...@@ -6,9 +6,10 @@ import com.dsk.common.core.controller.BaseController;
import com.dsk.common.core.domain.R; import com.dsk.common.core.domain.R;
import com.dsk.common.enums.BusinessType; import com.dsk.common.enums.BusinessType;
import com.dsk.common.exception.ServiceException; import com.dsk.common.exception.ServiceException;
import com.dsk.cscec.domain.CbProjectFile; import com.dsk.cscec.domain.bo.AddProjectFileUploadBo;
import com.dsk.cscec.domain.bo.ProjectFileUploadBo; import com.dsk.cscec.domain.bo.QueryProjectFileUploadDetailBo;
import com.dsk.cscec.domain.bo.QueryCbProjectFileDetailBo; import com.dsk.cscec.domain.vo.DraftDialogListVo;
import com.dsk.cscec.domain.vo.QueryProjectFileUploadDetailVo;
import com.dsk.cscec.service.CbProjectFileService; import com.dsk.cscec.service.CbProjectFileService;
import com.dsk.system.domain.vo.SysOssVo; import com.dsk.system.domain.vo.SysOssVo;
import com.dsk.system.service.ISysOssService; import com.dsk.system.service.ISysOssService;
...@@ -47,7 +48,7 @@ public class CbProjectFileController extends BaseController { ...@@ -47,7 +48,7 @@ public class CbProjectFileController extends BaseController {
*/ */
@Log(title = "项目台账上传OSS对象存储", businessType = BusinessType.INSERT) @Log(title = "项目台账上传OSS对象存储", businessType = BusinessType.INSERT)
@PostMapping(value = "/uploadCbProjectFile", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) @PostMapping(value = "/uploadCbProjectFile", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public R<Map<String, String>> uploadCbProjectFile(@Validated @ModelAttribute ProjectFileUploadBo fileUploadBo) throws UnsupportedEncodingException { public R<Map<String, String>> uploadCbProjectFile(@Validated @ModelAttribute AddProjectFileUploadBo fileUploadBo) throws UnsupportedEncodingException {
MultipartFile file = fileUploadBo.getFile(); MultipartFile file = fileUploadBo.getFile();
if (ObjectUtil.isNull(file)) { if (ObjectUtil.isNull(file)) {
return R.fail("上传文件不能为空"); return R.fail("上传文件不能为空");
...@@ -76,11 +77,23 @@ public class CbProjectFileController extends BaseController { ...@@ -76,11 +77,23 @@ public class CbProjectFileController extends BaseController {
return toAjax(baseService.deleteProjectFile(fileId)); return toAjax(baseService.deleteProjectFile(fileId));
} }
///** /**
// * 根据项目ID获取项目文件详情 * 获取草稿弹窗列表
// */ */
//@GetMapping("/getProjectFileDetail") @GetMapping("/getDraftDialogList")
//public R<List<CbProjectFile>> getProjectFileDetail(@Validated @RequestBody QueryCbProjectFileDetailBo queryBo) { public R<List<DraftDialogListVo>> getDraftDialogList() {
// return R.ok(baseService.getProjectFileDetail(queryBo)); List<DraftDialogListVo> draftList = baseService.getDraftDialogList();
//} if (draftList.isEmpty()) {
return R.ok("暂无草稿记录");
}
return R.ok(draftList);
}
/**
* 获取项目文件上传详情
*/
@GetMapping("/getProjectFileUploadDetail")
public R<QueryProjectFileUploadDetailVo> getProjectFileUploadDetail(@Validated @RequestBody QueryProjectFileUploadDetailBo uploadDetailBo) {
return R.ok(baseService.getProjectFileUploadDetail(uploadDetailBo));
}
} }
\ No newline at end of file
...@@ -11,7 +11,7 @@ import javax.validation.constraints.NotNull; ...@@ -11,7 +11,7 @@ import javax.validation.constraints.NotNull;
* @time 16:07 * @time 16:07
*/ */
@Data @Data
public class ProjectFileUploadBo { public class AddProjectFileUploadBo {
private MultipartFile file; private MultipartFile file;
@NotNull(message = "项目ID不能为空") @NotNull(message = "项目ID不能为空")
private Long projectId; private Long projectId;
......
package com.dsk.cscec.domain.bo;
import lombok.Data;
import javax.validation.constraints.NotNull;
/**
* @author sxk
* @date 2024.02.06
* @time 14:17
*/
@Data
public class QueryProjectFileUploadDetailBo {
/**
* 项目ID
*/
@NotNull(message = "项目ID不能为空")
private Long projectId;
/**
* 成本阶段(0:标前成本、1:标后成本、2:转固成本)
*/
@NotNull(message = "成本阶段不能为空")
private Integer cbStage;
}
package com.dsk.cscec.domain.vo;
import lombok.Data;
import java.util.Date;
/**
* @author sxk
* @date 2024.02.07
* @time 16:28
*/
@Data
public class DraftDialogListVo {
/**
* 项目ID
*/
private Long projectId;
/**
* 项目名称
*/
private String projectName;
/**
* 成本阶段(0:标前成本、1:标后成本、2:转固成本)
*/
private Integer cbStage;
/**
* 更新时间
*/
private Date updateTime;
}
\ No newline at end of file
package com.dsk.cscec.domain.vo;
import com.dsk.cscec.domain.CbProjectFile;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
/**
* @author sxk
* @date 2024.02.08
* @time 10:24
*/
@Data
public class QueryProjectFileUploadDetailVo {
/**
* 项目ID
*/
private Long projectId;
/**
* 直接费成本
*/
private List<CbProjectFile> directExpense = new ArrayList<>();
/**
* 工料汇总
*/
private List<CbProjectFile> quantitySummary = new ArrayList<>();
/**
* 措施项目
*/
private List<CbProjectFile> measureProject = new ArrayList<>();
/**
* 其他项目
*/
private List<CbProjectFile> otherProject = new ArrayList<>();
/**
* 现场经费
*/
private List<CbProjectFile> sceneExpense = new ArrayList<>();
/**
* 成本汇总
*/
private List<CbProjectFile> cbSummary = new ArrayList<>();
}
...@@ -2,6 +2,10 @@ package com.dsk.cscec.mapper; ...@@ -2,6 +2,10 @@ package com.dsk.cscec.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dsk.cscec.domain.CbProjectFile; import com.dsk.cscec.domain.CbProjectFile;
import com.dsk.cscec.domain.vo.DraftDialogListVo;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/** /**
* 项目成本文件表(CbProjectFile)表数据库访问层 * 项目成本文件表(CbProjectFile)表数据库访问层
...@@ -10,7 +14,11 @@ import com.dsk.cscec.domain.CbProjectFile; ...@@ -10,7 +14,11 @@ import com.dsk.cscec.domain.CbProjectFile;
* @since 2024-02-05 14:01:03 * @since 2024-02-05 14:01:03
*/ */
public interface CbProjectFileMapper extends BaseMapper<CbProjectFile> { public interface CbProjectFileMapper extends BaseMapper<CbProjectFile> {
/**
* 获取草稿弹窗列表
*
* @return 草稿弹窗列表
*/
List<DraftDialogListVo> getDraftDialogList(@Param("projectFileStatusWaitParse") Integer projectFileStatusWaitParse,@Param("deleteFlagExist")Integer deleteFlagExist);
} }
...@@ -2,8 +2,10 @@ package com.dsk.cscec.service; ...@@ -2,8 +2,10 @@ package com.dsk.cscec.service;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.dsk.cscec.domain.CbProjectFile; import com.dsk.cscec.domain.CbProjectFile;
import com.dsk.cscec.domain.bo.QueryCbProjectFileDetailBo; import com.dsk.cscec.domain.bo.AddProjectFileUploadBo;
import com.dsk.cscec.domain.bo.ProjectFileUploadBo; import com.dsk.cscec.domain.bo.QueryProjectFileUploadDetailBo;
import com.dsk.cscec.domain.vo.DraftDialogListVo;
import com.dsk.cscec.domain.vo.QueryProjectFileUploadDetailVo;
import com.dsk.system.domain.vo.SysOssVo; import com.dsk.system.domain.vo.SysOssVo;
import java.util.List; import java.util.List;
...@@ -21,7 +23,7 @@ public interface CbProjectFileService extends IService<CbProjectFile> { ...@@ -21,7 +23,7 @@ public interface CbProjectFileService extends IService<CbProjectFile> {
* @param fileUploadBo 上传信息 * @param fileUploadBo 上传信息
* @param oss oss信息 * @param oss oss信息
*/ */
void addProjectFile(ProjectFileUploadBo fileUploadBo, SysOssVo oss); void addProjectFile(AddProjectFileUploadBo fileUploadBo, SysOssVo oss);
/** /**
* 逻辑删除项目上传文件记录 * 逻辑删除项目上传文件记录
...@@ -31,12 +33,19 @@ public interface CbProjectFileService extends IService<CbProjectFile> { ...@@ -31,12 +33,19 @@ public interface CbProjectFileService extends IService<CbProjectFile> {
*/ */
Integer deleteProjectFile(Long fileId); Integer deleteProjectFile(Long fileId);
///** /**
// * 根据项目ID获取项目文件详情 * 获取草稿弹窗列表
// * *
// * @param queryBo 查询体 * @return 草稿弹窗列表
// * @return 文件详情列表 */
// */ List<DraftDialogListVo> getDraftDialogList();
//List<CbProjectFile> getProjectFileDetail(QueryCbProjectFileDetailBo queryBo);
/**
* 获取项目文件上传详情
*
* @param uploadDetailBo 查询信息
* @return 文件列表
*/
QueryProjectFileUploadDetailVo getProjectFileUploadDetail(QueryProjectFileUploadDetailBo uploadDetailBo);
} }
package com.dsk.cscec.service.impl; 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 com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Assert;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dsk.common.exception.ServiceException; import com.dsk.common.exception.ServiceException;
import com.dsk.cscec.constant.CbProjectConstants; import com.dsk.cscec.constant.CbProjectConstants;
import com.dsk.cscec.domain.CbProjectFile; import com.dsk.cscec.domain.CbProjectFile;
import com.dsk.cscec.domain.CbProjectRecord; import com.dsk.cscec.domain.CbProjectRecord;
import com.dsk.cscec.domain.bo.QueryCbProjectFileDetailBo; import com.dsk.cscec.domain.bo.AddProjectFileUploadBo;
import com.dsk.cscec.domain.bo.ProjectFileUploadBo; import com.dsk.cscec.domain.bo.QueryProjectFileUploadDetailBo;
import com.dsk.cscec.domain.vo.DraftDialogListVo;
import com.dsk.cscec.domain.vo.QueryProjectFileUploadDetailVo;
import com.dsk.cscec.mapper.CbProjectFileMapper; import com.dsk.cscec.mapper.CbProjectFileMapper;
import com.dsk.cscec.mapper.CbProjectRecordMapper; import com.dsk.cscec.mapper.CbProjectRecordMapper;
import com.dsk.cscec.service.CbProjectFileService; import com.dsk.cscec.service.CbProjectFileService;
...@@ -19,6 +21,7 @@ import org.springframework.transaction.annotation.Transactional; ...@@ -19,6 +21,7 @@ import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.List; import java.util.List;
import java.util.Objects;
/** /**
* 项目成本文件表(CbProjectFile)表服务实现类 * 项目成本文件表(CbProjectFile)表服务实现类
...@@ -41,19 +44,16 @@ public class CbProjectFileServiceImpl extends ServiceImpl<CbProjectFileMapper, C ...@@ -41,19 +44,16 @@ public class CbProjectFileServiceImpl extends ServiceImpl<CbProjectFileMapper, C
*/ */
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void addProjectFile(ProjectFileUploadBo fileUploadBo, SysOssVo oss) { public void addProjectFile(AddProjectFileUploadBo fileUploadBo, SysOssVo oss) {
//校验项目是否存在 //校验项目是否存在
if (!projectRecordMapper.exists(new LambdaQueryWrapper<CbProjectRecord>() this.checkProjectExist(fileUploadBo.getProjectId());
.eq(CbProjectRecord::getId, fileUploadBo.getProjectId())
.eq(CbProjectRecord::getDelFlag, CbProjectConstants.DELETE_FLAG_EXIST))) {
throw new ServiceException("项目ID无效,该项目不存在");
}
CbProjectFile projectFile = BeanUtil.toBean(fileUploadBo, CbProjectFile.class); CbProjectFile projectFile = BeanUtil.toBean(fileUploadBo, CbProjectFile.class);
projectFile.setFileName(oss.getOriginalName()); projectFile.setFileName(oss.getOriginalName());
projectFile.setFileOssId(oss.getOssId().toString()); projectFile.setFileOssId(oss.getOssId().toString());
projectFile.setFileOssUrl(oss.getUrl()); projectFile.setFileOssUrl(oss.getUrl());
//项目文件状态:解析中 //项目文件状态:解析中
projectFile.setFileParseStatus(CbProjectConstants.PROJECT_FILE_STATUS_PARSING); projectFile.setFileParseStatus(CbProjectConstants.PROJECT_FILE_STATUS_WAIT_PARSE);
//删除状态:未删除 //删除状态:未删除
projectFile.setDelFlag(CbProjectConstants.DELETE_FLAG_EXIST); projectFile.setDelFlag(CbProjectConstants.DELETE_FLAG_EXIST);
baseMapper.insert(projectFile); baseMapper.insert(projectFile);
...@@ -68,30 +68,83 @@ public class CbProjectFileServiceImpl extends ServiceImpl<CbProjectFileMapper, C ...@@ -68,30 +68,83 @@ public class CbProjectFileServiceImpl extends ServiceImpl<CbProjectFileMapper, C
@Override @Override
public Integer deleteProjectFile(Long fileId) { public Integer deleteProjectFile(Long fileId) {
CbProjectFile projectFile = baseMapper.selectById(fileId); CbProjectFile projectFile = baseMapper.selectById(fileId);
Assert.notNull(projectFile,"该文件不存在"); Assert.notNull(projectFile, "该文件不存在");
projectFile.setDelFlag(CbProjectConstants.DELETE_FLAG_NOT_EXIST); projectFile.setDelFlag(CbProjectConstants.DELETE_FLAG_NOT_EXIST);
return baseMapper.updateById(projectFile); return baseMapper.updateById(projectFile);
} }
///** /**
// * 根据项目ID获取项目文件详情 * 获取草稿弹窗列表
// * *
// * @param queryBo 查询体 * @return 草稿弹窗列表
// * @return 文件详情列表 */
// */ @Override
//@Override public List<DraftDialogListVo> getDraftDialogList() {
//public List<CbProjectFile> getProjectFileDetail(QueryCbProjectFileDetailBo queryBo) { return baseMapper.getDraftDialogList(CbProjectConstants.PROJECT_FILE_STATUS_WAIT_PARSE, CbProjectConstants.DELETE_FLAG_EXIST);
// return baseMapper.selectList(new LambdaQueryWrapper<CbProjectFile>() }
// .eq(CbProjectFile::getProjectId, queryBo.getProjectId())
// .eq(CbProjectFile::getCbStage, queryBo.getCbStage()) /**
// //成本类型:未确定,即创建项目后未上传任何文件 * 获取项目文件上传详情
// .ne(CbProjectFile::getCbType, CbProjectConstants.CB_TYPE_NOT_CONFIRM) *
// .eq(CbProjectFile::getDelFlag, CbProjectConstants.DELETE_FLAG_EXIST) * @param uploadDetailBo 查询信息
// //项目文件状态:未上传 * @return 文件列表
// .eq(CbProjectFile::getFileParseStatus, CbProjectConstants.PROJECT_FILE_STATUS_NOT_UPLOAD) */
// .or() @Override
// //项目文件状态:待解析 public QueryProjectFileUploadDetailVo getProjectFileUploadDetail(QueryProjectFileUploadDetailBo uploadDetailBo) {
// .eq(CbProjectFile::getFileParseStatus, CbProjectConstants.PROJECT_FILE_STATUS_WAIT_PARSE)); Long projectId = uploadDetailBo.getProjectId();
//} //校验项目是否存在
this.checkProjectExist(projectId);
List<CbProjectFile> projectFileList = baseMapper.selectList(new LambdaQueryWrapper<CbProjectFile>()
.eq(CbProjectFile::getProjectId, projectId)
//成本阶段
.eq(CbProjectFile::getCbStage, uploadDetailBo.getCbStage())
//删除状态:否
.eq(CbProjectFile::getDelFlag, CbProjectConstants.DELETE_FLAG_EXIST));
QueryProjectFileUploadDetailVo draftDetailVo = new QueryProjectFileUploadDetailVo();
draftDetailVo.setProjectId(projectId);
if (projectFileList.isEmpty()) {
return draftDetailVo;
}
//按照成本类型分类填充
projectFileList.forEach(fileList -> {
//TODO:此写法太丑陋,待优化
if (Objects.equals(fileList.getCbType(), CbProjectConstants.CB_TYPE_DIRECT_EXPENSE)) {
//直接费成本
draftDetailVo.getDirectExpense().add(fileList);
} else if (Objects.equals(fileList.getCbType(), CbProjectConstants.CB_TYPE_QUANTITY_SUMMARY)) {
//工料汇总
draftDetailVo.getQuantitySummary().add(fileList);
} else if (Objects.equals(fileList.getCbType(), CbProjectConstants.CB_TYPE_MEASURE_PROJECT)) {
//措施项目
draftDetailVo.getMeasureProject().add(fileList);
} else if (Objects.equals(fileList.getCbType(), CbProjectConstants.CB_TYPE_OTHER_PROJECT)) {
//其他项目
draftDetailVo.getOtherProject().add(fileList);
} else if (Objects.equals(fileList.getCbType(), CbProjectConstants.CB_TYPE_SCENE_EXPENSE)) {
//现场经费
draftDetailVo.getSceneExpense().add(fileList);
} else if (Objects.equals(fileList.getCbType(), CbProjectConstants.CB_TYPE_SUMMARY)) {
//成本汇总
draftDetailVo.getCbSummary().add(fileList);
}
});
return draftDetailVo;
}
/**
* 校验项目是否存在
*
* @param projectId 项目ID
*/
private void checkProjectExist(Long projectId) {
//校验项目是否存在
if (!projectRecordMapper.exists(new LambdaQueryWrapper<CbProjectRecord>()
.eq(CbProjectRecord::getId, projectId)
.eq(CbProjectRecord::getDelFlag, CbProjectConstants.DELETE_FLAG_EXIST))) {
throw new ServiceException("该项目不存在");
}
}
} }
<?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">
<!--获取草稿弹窗列表-->
<select id="getDraftDialogList" resultType="com.dsk.cscec.domain.vo.DraftDialogListVo">
SELECT cpf.project_id,
cpr.project_name,
cpf.cb_stage,
max(cpf.update_time) as update_time
FROM cb_project_file cpf
left join cb_project_record cpr
on cpf.project_id = cpr.id
WHERE (file_parse_status = #{projectFileStatusWaitParse} AND cpf.del_flag = #{deleteFlagExist})
group by cpf.project_id, cpf.cb_stage
</select>
</mapper> </mapper>
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