Commit 75819ccd authored by 施翔轲's avatar 施翔轲

项目台账表相关

parent f3a6bbf3
package com.dsk.cscec.controller;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.lang.Assert;
import com.dsk.common.annotation.Log;
import com.dsk.common.core.controller.BaseController;
import com.dsk.common.core.domain.R;
import com.dsk.common.enums.BusinessType;
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.QueryProjectFileUploadDetailBo;
import com.dsk.cscec.domain.vo.QueryProjectFileUploadDetailVo;
import com.dsk.cscec.service.CbProjectFileService;
import com.dsk.system.domain.vo.SysOssVo;
......@@ -48,19 +48,19 @@ public class CbProjectFileController extends BaseController {
@PostMapping(value = "/uploadCbProjectFile", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public R<Map<String, String>> uploadCbProjectFile(@Validated @ModelAttribute AddProjectFileUploadBo fileUploadBo) throws UnsupportedEncodingException {
MultipartFile file = fileUploadBo.getFile();
if (ObjectUtil.isNull(file)) {
return R.fail("上传文件不能为空");
}
Assert.notNull(file, "上传文件不能为空");
SysOssVo oss = iSysOssService.upload(file);
//添加项目上传文件记录
CbProjectFile cbProjectFile;
try {
baseService.addProjectFile(fileUploadBo, oss);
cbProjectFile = baseService.addProjectFile(fileUploadBo, oss);
} catch (ServiceException e) {
//删除oss中的文件
iSysOssService.deleteWithValidByIds(Collections.singletonList(oss.getOssId()), true);
throw e;
}
Map<String, String> map = new HashMap<>(2);
map.put("fileId", cbProjectFile.getId().toString());
map.put("fileName", oss.getOriginalName());
map.put("fileOssId", oss.getOssId().toString());
map.put("fileOssUrl", oss.getUrl());
......@@ -78,8 +78,8 @@ public class CbProjectFileController extends BaseController {
/**
* 获取项目文件上传详情
*/
@GetMapping("/getProjectFileUploadDetail")
public R<QueryProjectFileUploadDetailVo> getProjectFileUploadDetail(@Validated @RequestBody QueryProjectFileUploadDetailBo uploadDetailBo) {
return R.ok(baseService.getProjectFileUploadDetail(uploadDetailBo));
@GetMapping("/getProjectFileUploadDetail/{projectId}")
public R<QueryProjectFileUploadDetailVo> getProjectFileUploadDetail(@NotNull(message = "项目ID不能为空") @PathVariable Long projectId) {
return R.ok(baseService.getProjectFileUploadDetail(projectId));
}
}
\ No newline at end of file
......@@ -2,11 +2,15 @@ package com.dsk.cscec.controller;
import cn.hutool.core.lang.Assert;
import com.dsk.common.core.controller.BaseController;
import com.dsk.common.core.domain.PageQuery;
import com.dsk.common.core.domain.R;
import com.dsk.common.core.page.TableDataInfo;
import com.dsk.cscec.domain.CbProjectRecord;
import com.dsk.cscec.domain.bo.AddCbProjectBo;
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.bo.ImportCbProjectDataBo;
import com.dsk.cscec.domain.vo.ProjectRecordSearchVo;
import com.dsk.cscec.service.CbProjectRecordService;
import com.dsk.cscec.service.IDProjectService;
import org.springframework.validation.annotation.Validated;
......@@ -14,6 +18,7 @@ import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.List;
/**
......@@ -54,12 +59,20 @@ public class CbProjectRecordController extends BaseController {
/**
* 根据项目文件导入数据
*/
@PostMapping("/importData")
public R<Void> importData(@Validated @RequestBody ImportCbProjectDataBo importDataBo) {
baseService.importData(importDataBo);
@PostMapping("/importData/{projectId}")
public R<Void> importData(@NotNull(message = "项目ID不能为空") @PathVariable Long projectId) throws Exception {
baseService.importData(projectId);
return R.ok("已开始解析成本数据,过程需3~10分钟,稍后可到项目列表查看导入结果");
}
/**
* 获取项目台账列表
*/
@GetMapping("/getProjectList")
public TableDataInfo<ProjectRecordSearchVo> getProjectList(CbProjectSearchBo searchBo, PageQuery pageQuery) {
return baseService.getProjectList(searchBo, pageQuery);
}
/**
* 修改项目信息
*/
......@@ -68,14 +81,21 @@ public class CbProjectRecordController extends BaseController {
return toAjax(baseService.editProjectInfo(editBo));
}
///**
// * 获取项目台账列表
// */
//@GetMapping("/getProjectList")
//public R<List<CbProjectRecord>> getProjectList() {
// List<CbProjectRecord> projectList = baseService.getProjectList();
// return R.ok(projectList);
//}
/**
* 获取新阶段项目可选成本阶段
*/
@GetMapping("/getProjectAvailableCbStage/{relatedId}")
public R<List<Integer>> getProjectAvailableCbStage(@NotNull(message = "关联ID不能为空") @PathVariable Long relatedId) {
return R.ok(baseService.getProjectAvailableCbStage(relatedId));
}
/**
* 新增新阶段项目
*/
@PostMapping("/addNewStageProject")
public R<CbProjectRecord> addNewStageProject(@Validated @RequestBody AddNewCbProjectBo newProjectBo) {
return R.ok(baseService.addNewStageProject(newProjectBo));
}
/**
* 获取草稿弹窗列表
......@@ -89,5 +109,12 @@ public class CbProjectRecordController extends BaseController {
return R.ok(draftList);
}
/**
* 删除草稿
*/
@DeleteMapping("/deleteDraft/{projectId}")
public R<Void> deleteDraft(@NotNull(message = "项目ID不能为空") @PathVariable Long projectId) {
return toAjax(baseService.deleteDraft(projectId));
}
}
......@@ -32,7 +32,7 @@ public class CbProjectFile extends BaseEntity implements Serializable {
*/
private Integer cbStage;
/**
* 成本类型(0:直接费成本、1:工料汇总、2:措施项目、3:其他项目、4:现场经费、5:成本汇总)
* 成本类型(0:直接费成本、1:工料汇总、2:措施项目、3:其他项目、4:现场经费、5:成本汇总)
*/
private Integer cbType;
/**
......@@ -56,7 +56,7 @@ public class CbProjectFile extends BaseEntity implements Serializable {
*/
private String failRemark;
/**
* 删除状态(0:否、2:是)
* 删除状态(0:否、1:待删除、2:是)
*/
@TableLogic(value = "0", delval = "2")
private Integer delFlag;
......
package com.dsk.cscec.domain.bo;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotNull;
/**
* @author sxk
* @date 2024.02.07
* @time 11:28
* @date 2024.02.19
* @time 14:22
*/
@EqualsAndHashCode(callSuper = true)
@Data
public class ImportCbProjectDataBo {
public class AddNewCbProjectBo extends EditProjectInfoBo {
/**
* 项目ID
* 关联ID(关联多个阶段)
*/
@NotNull(message = "项目ID不能为空")
private Long projectId;
@NotNull(message = "关联ID不能为空")
private Long relatedId;
/**
* 成本阶段(0:标前成本、1:标后成本、2:转固成本)
*/
......
......@@ -12,11 +12,18 @@ import javax.validation.constraints.NotNull;
*/
@Data
public class AddProjectFileUploadBo {
/**
* 文件
*/
private MultipartFile file;
/**
* 项目ID
*/
@NotNull(message = "项目ID不能为空")
private Long projectId;
@NotNull(message = "成本阶段不能为空")
private Integer cbStage;
/**
* 成本类型
*/
@NotNull(message = "成本类型不能为空")
private Integer cbType;
}
......@@ -2,23 +2,27 @@ package com.dsk.cscec.domain.bo;
import lombok.Data;
import javax.validation.constraints.NotNull;
/**
* @author sxk
* @date 2024.02.06
* @time 14:17
* @date 2024.02.18
* @time 15:04
*/
@Data
public class QueryProjectFileUploadDetailBo {
public class CbProjectSearchBo {
/**
* 项目名称
*/
private String projectName;
/**
* 项目ID
* IPM项目编码
*/
@NotNull(message = "项目ID不能为空")
private Long projectId;
private String ipmProjectNo;
/**
* 成本阶段(0:标前成本、1:标后成本、2:转固成本)
*/
@NotNull(message = "成本阶段不能为空")
private Integer cbStage;
/**
* 项目文件状态(1:解析中、2:解析成功、3:解析失败)
*/
private Integer projectFileStatus;
}
......@@ -33,8 +33,4 @@ public class EditProjectInfoBo {
* 文件名称
*/
private String projectFileName;
/**
* 成本阶段(0:标前成本、1:标后成本、2:转固成本)
*/
private Integer cbStage;
}
package com.dsk.cscec.domain.vo;
import lombok.Data;
import java.util.Date;
/**
* @author sxk
* @date 2024.02.18
* @time 15:18
*/
@Data
public class ProjectRecordDataVo {
/**
* 项目文件状态(1:解析中、2:解析成功、3:解析失败)
*/
private Integer projectFileStatus;
/**
* 成本阶段(0:标前成本、1:标后成本、2:转固成本)
*/
private Integer cbStage;
/**
* 更新者
*/
private String updateBy;
/**
* 更新时间
*/
private Date updateTime;
}
package com.dsk.cscec.domain.vo;
import lombok.Data;
import java.util.List;
/**
* @author sxk
* @date 2024.02.18
* @time 15:08
*/
@Data
public class ProjectRecordSearchVo {
/**
* 项目ID
*/
private Long id;
/**
* 项目名称
*/
private String projectName;
/**
* IPM项目编码
*/
private String ipmProjectNo;
/**
* 文件名称
*/
private String projectFileName;
/**
* 项目数据
*/
private List<ProjectRecordDataVo> dataVoList;
}
package com.dsk.cscec.mapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.dsk.cscec.domain.CbProjectRecord;
import com.dsk.cscec.domain.vo.ProjectRecordSearchVo;
/**
* 项目台账表(CbProjectRecord)表数据库访问层
......@@ -10,6 +13,10 @@ import com.dsk.cscec.domain.CbProjectRecord;
* @since 2024-02-05 11:37:49
*/
public interface CbProjectRecordMapper extends BaseMapper<CbProjectRecord> {
/**
* 获取项目台账列表
*/
Page<ProjectRecordSearchVo> selectPageProjectRecordList(Page<ProjectRecordSearchVo> build, QueryWrapper<CbProjectRecord> wrapper);
}
......@@ -3,7 +3,6 @@ package com.dsk.cscec.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dsk.cscec.domain.CbProjectFile;
import com.dsk.cscec.domain.bo.AddProjectFileUploadBo;
import com.dsk.cscec.domain.bo.QueryProjectFileUploadDetailBo;
import com.dsk.cscec.domain.vo.QueryProjectFileUploadDetailVo;
import com.dsk.system.domain.vo.SysOssVo;
......@@ -19,8 +18,9 @@ public interface CbProjectFileService extends IService<CbProjectFile> {
*
* @param fileUploadBo 上传信息
* @param oss oss信息
* @return 文件实体
*/
void addProjectFile(AddProjectFileUploadBo fileUploadBo, SysOssVo oss);
CbProjectFile addProjectFile(AddProjectFileUploadBo fileUploadBo, SysOssVo oss);
/**
* 逻辑删除项目上传文件记录
......@@ -33,9 +33,9 @@ public interface CbProjectFileService extends IService<CbProjectFile> {
/**
* 获取项目文件上传详情
*
* @param uploadDetailBo 查询信息
* @param projectId 项目ID
* @return 文件列表
*/
QueryProjectFileUploadDetailVo getProjectFileUploadDetail(QueryProjectFileUploadDetailBo uploadDetailBo);
QueryProjectFileUploadDetailVo getProjectFileUploadDetail(Long projectId);
}
package com.dsk.cscec.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dsk.common.core.domain.PageQuery;
import com.dsk.common.core.page.TableDataInfo;
import com.dsk.cscec.domain.CbProjectRecord;
import com.dsk.cscec.domain.bo.AddCbProjectBo;
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.bo.ImportCbProjectDataBo;
import com.dsk.cscec.domain.vo.ProjectRecordSearchVo;
import java.util.List;
......@@ -26,9 +30,18 @@ public interface CbProjectRecordService extends IService<CbProjectRecord> {
/**
* 根据项目文件导入数据
*
* @param importDataBo 导入对象
* @param projectId 项目ID
*/
void importData(ImportCbProjectDataBo importDataBo);
void importData(Long projectId) throws Exception;
/**
* 获取项目台账列表
*
* @param searchBo 查询条件
* @param pageQuery 分页对象
* @return 分页数据
*/
TableDataInfo<ProjectRecordSearchVo> getProjectList(CbProjectSearchBo searchBo, PageQuery pageQuery);
/**
* 修改项目信息
......@@ -38,10 +51,34 @@ public interface CbProjectRecordService extends IService<CbProjectRecord> {
*/
Integer editProjectInfo(EditProjectInfoBo editBo);
/**
* 获取新阶段项目可选成本阶段
*
* @param relatedId 关联ID
* @return 可选成本阶段
*/
List<Integer> getProjectAvailableCbStage(Long relatedId);
/**
* 新增新阶段项目
*
* @param newProjectBo 新增对象
* @return 新增结果
*/
CbProjectRecord addNewStageProject(AddNewCbProjectBo newProjectBo);
/**
* 获取草稿弹窗列表
*
* @return 草稿弹窗列表
*/
List<CbProjectRecord> getDraftDialogList();
/**
* 删除草稿
*
* @param projectId 项目ID
* @return 删除结果
*/
Integer deleteDraft(Long projectId);
}
......@@ -4,12 +4,10 @@ import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.lang.Assert;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dsk.common.exception.ServiceException;
import com.dsk.cscec.constant.CbProjectConstants;
import com.dsk.cscec.domain.CbProjectFile;
import com.dsk.cscec.domain.CbProjectRecord;
import com.dsk.cscec.domain.bo.AddProjectFileUploadBo;
import com.dsk.cscec.domain.bo.QueryProjectFileUploadDetailBo;
import com.dsk.cscec.domain.vo.QueryProjectFileUploadDetailVo;
import com.dsk.cscec.mapper.CbProjectFileMapper;
import com.dsk.cscec.mapper.CbProjectRecordMapper;
......@@ -40,22 +38,23 @@ public class CbProjectFileServiceImpl extends ServiceImpl<CbProjectFileMapper, C
*
* @param fileUploadBo 上传信息
* @param oss oss信息
* @return
*/
@Override
@Transactional(rollbackFor = Exception.class)
public void addProjectFile(AddProjectFileUploadBo fileUploadBo, SysOssVo oss) {
public CbProjectFile addProjectFile(AddProjectFileUploadBo fileUploadBo, SysOssVo oss) {
//校验项目是否存在
this.checkProjectExist(fileUploadBo.getProjectId());
CbProjectRecord projectRecord = this.checkProjectExist(fileUploadBo.getProjectId());
CbProjectFile projectFile = BeanUtil.toBean(fileUploadBo, CbProjectFile.class);
projectFile.setCbStage(projectRecord.getCbStage());
projectFile.setFileName(oss.getOriginalName());
projectFile.setFileOssId(oss.getOssId());
projectFile.setFileOssUrl(oss.getUrl());
//项目文件状态:准备中
projectFile.setFileParseStatus(CbProjectConstants.PROJECT_FILE_STATUS_PREPARING);
//删除状态:未删除
projectFile.setDelFlag(CbProjectConstants.DELETE_FLAG_EXIST);
baseMapper.insert(projectFile);
return projectFile;
}
/**
......@@ -68,26 +67,24 @@ public class CbProjectFileServiceImpl extends ServiceImpl<CbProjectFileMapper, C
public Integer deleteProjectFile(Long fileId) {
CbProjectFile projectFile = baseMapper.selectById(fileId);
Assert.notNull(projectFile, "该文件不存在");
projectFile.setDelFlag(CbProjectConstants.DELETE_FLAG_NOT_EXIST);
return baseMapper.updateById(projectFile);
return baseMapper.deleteById(projectFile);
}
/**
* 获取项目文件上传详情
*
* @param uploadDetailBo 查询信息
* @param projectId 项目ID
* @return 文件列表
*/
@Override
public QueryProjectFileUploadDetailVo getProjectFileUploadDetail(QueryProjectFileUploadDetailBo uploadDetailBo) {
Long projectId = uploadDetailBo.getProjectId();
public QueryProjectFileUploadDetailVo getProjectFileUploadDetail(Long projectId) {
//校验项目是否存在
this.checkProjectExist(projectId);
List<CbProjectFile> projectFileList = baseMapper.selectList(new LambdaQueryWrapper<CbProjectFile>()
.eq(CbProjectFile::getProjectId, projectId)
//成本阶段
.eq(CbProjectFile::getCbStage, uploadDetailBo.getCbStage())
//.eq(CbProjectFile::getCbStage, uploadDetailBo.getCbStage())
//删除状态:否
.eq(CbProjectFile::getDelFlag, CbProjectConstants.DELETE_FLAG_EXIST));
......@@ -127,13 +124,12 @@ public class CbProjectFileServiceImpl extends ServiceImpl<CbProjectFileMapper, C
* 校验项目是否存在
*
* @param projectId 项目ID
* @return 项目实体
*/
private void checkProjectExist(Long projectId) {
private CbProjectRecord checkProjectExist(Long projectId) {
//校验项目是否存在
if (!projectRecordMapper.exists(new LambdaQueryWrapper<CbProjectRecord>()
.eq(CbProjectRecord::getId, projectId)
.eq(CbProjectRecord::getDelFlag, CbProjectConstants.DELETE_FLAG_EXIST))) {
throw new ServiceException("该项目不存在");
}
CbProjectRecord projectRecord = projectRecordMapper.selectById(projectId);
Assert.notNull(projectRecord, "该项目不存在");
return projectRecord;
}
}
<?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">
<mapper namespace="com.dsk.cscec.mapper.CbProjectRecordMapper">
<!--获取项目台账列表-->
<select id="selectPageProjectRecordList" resultType="com.dsk.cscec.domain.vo.ProjectRecordSearchVo">
select cpr.id,
cpr.project_name,
cpr.ipm_project_no,
cpr.project_file_name
from cb_project_record cpr
${ew.getCustomSqlSegment};
</select>
</mapper>
\ No newline at end of file
......@@ -128,6 +128,7 @@ public class SysOssServiceImpl implements ISysOssService, OssService {
public SysOssVo upload(MultipartFile file) throws UnsupportedEncodingException {
String originalfileName = file.getOriginalFilename();
//文件名解码防止上传中文名文件导致的文件名乱码
assert originalfileName != null;
originalfileName = URLDecoder.decode(originalfileName,"UTF-8");
String suffix = StringUtils.substring(originalfileName, originalfileName.lastIndexOf("."), originalfileName.length());
OssClient storage = OssFactory.instance();
......
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