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

项目台账表相关

parent f3a6bbf3
package com.dsk.cscec.controller; 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.annotation.Log;
import com.dsk.common.core.controller.BaseController; 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.AddProjectFileUploadBo;
import com.dsk.cscec.domain.bo.QueryProjectFileUploadDetailBo;
import com.dsk.cscec.domain.vo.QueryProjectFileUploadDetailVo; 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;
...@@ -48,19 +48,19 @@ public class CbProjectFileController extends BaseController { ...@@ -48,19 +48,19 @@ public class CbProjectFileController extends BaseController {
@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 AddProjectFileUploadBo 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)) { Assert.notNull(file, "上传文件不能为空");
return R.fail("上传文件不能为空");
}
SysOssVo oss = iSysOssService.upload(file); SysOssVo oss = iSysOssService.upload(file);
//添加项目上传文件记录 //添加项目上传文件记录
CbProjectFile cbProjectFile;
try { try {
baseService.addProjectFile(fileUploadBo, oss); cbProjectFile = baseService.addProjectFile(fileUploadBo, oss);
} catch (ServiceException e) { } catch (ServiceException e) {
//删除oss中的文件 //删除oss中的文件
iSysOssService.deleteWithValidByIds(Collections.singletonList(oss.getOssId()), true); iSysOssService.deleteWithValidByIds(Collections.singletonList(oss.getOssId()), true);
throw e; throw e;
} }
Map<String, String> map = new HashMap<>(2); Map<String, String> map = new HashMap<>(2);
map.put("fileId", cbProjectFile.getId().toString());
map.put("fileName", oss.getOriginalName()); map.put("fileName", oss.getOriginalName());
map.put("fileOssId", oss.getOssId().toString()); map.put("fileOssId", oss.getOssId().toString());
map.put("fileOssUrl", oss.getUrl()); map.put("fileOssUrl", oss.getUrl());
...@@ -78,8 +78,8 @@ public class CbProjectFileController extends BaseController { ...@@ -78,8 +78,8 @@ public class CbProjectFileController extends BaseController {
/** /**
* 获取项目文件上传详情 * 获取项目文件上传详情
*/ */
@GetMapping("/getProjectFileUploadDetail") @GetMapping("/getProjectFileUploadDetail/{projectId}")
public R<QueryProjectFileUploadDetailVo> getProjectFileUploadDetail(@Validated @RequestBody QueryProjectFileUploadDetailBo uploadDetailBo) { public R<QueryProjectFileUploadDetailVo> getProjectFileUploadDetail(@NotNull(message = "项目ID不能为空") @PathVariable Long projectId) {
return R.ok(baseService.getProjectFileUploadDetail(uploadDetailBo)); return R.ok(baseService.getProjectFileUploadDetail(projectId));
} }
} }
\ No newline at end of file
...@@ -2,11 +2,15 @@ package com.dsk.cscec.controller; ...@@ -2,11 +2,15 @@ package com.dsk.cscec.controller;
import cn.hutool.core.lang.Assert; import cn.hutool.core.lang.Assert;
import com.dsk.common.core.controller.BaseController; 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.domain.R;
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.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.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.CbProjectRecordService;
import com.dsk.cscec.service.IDProjectService; import com.dsk.cscec.service.IDProjectService;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
...@@ -14,6 +18,7 @@ import org.springframework.web.bind.annotation.*; ...@@ -14,6 +18,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 java.util.List; import java.util.List;
/** /**
...@@ -54,12 +59,20 @@ public class CbProjectRecordController extends BaseController { ...@@ -54,12 +59,20 @@ public class CbProjectRecordController extends BaseController {
/** /**
* 根据项目文件导入数据 * 根据项目文件导入数据
*/ */
@PostMapping("/importData") @PostMapping("/importData/{projectId}")
public R<Void> importData(@Validated @RequestBody ImportCbProjectDataBo importDataBo) { public R<Void> importData(@NotNull(message = "项目ID不能为空") @PathVariable Long projectId) throws Exception {
baseService.importData(importDataBo); baseService.importData(projectId);
return R.ok("已开始解析成本数据,过程需3~10分钟,稍后可到项目列表查看导入结果"); 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 { ...@@ -68,14 +81,21 @@ public class CbProjectRecordController extends BaseController {
return toAjax(baseService.editProjectInfo(editBo)); return toAjax(baseService.editProjectInfo(editBo));
} }
///** /**
// * 获取项目台账列表 * 获取新阶段项目可选成本阶段
// */ */
//@GetMapping("/getProjectList") @GetMapping("/getProjectAvailableCbStage/{relatedId}")
//public R<List<CbProjectRecord>> getProjectList() { public R<List<Integer>> getProjectAvailableCbStage(@NotNull(message = "关联ID不能为空") @PathVariable Long relatedId) {
// List<CbProjectRecord> projectList = baseService.getProjectList(); return R.ok(baseService.getProjectAvailableCbStage(relatedId));
// return R.ok(projectList); }
//}
/**
* 新增新阶段项目
*/
@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 { ...@@ -89,5 +109,12 @@ public class CbProjectRecordController extends BaseController {
return R.ok(draftList); 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 { ...@@ -32,7 +32,7 @@ public class CbProjectFile extends BaseEntity implements Serializable {
*/ */
private Integer cbStage; private Integer cbStage;
/** /**
* 成本类型(0:直接费成本、1:工料汇总、2:措施项目、3:其他项目、4:现场经费、5:成本汇总) * 成本类型(0:直接费成本、1:工料汇总、2:措施项目、3:其他项目、4:现场经费、5:成本汇总)
*/ */
private Integer cbType; private Integer cbType;
/** /**
...@@ -56,7 +56,7 @@ public class CbProjectFile extends BaseEntity implements Serializable { ...@@ -56,7 +56,7 @@ public class CbProjectFile extends BaseEntity implements Serializable {
*/ */
private String failRemark; private String failRemark;
/** /**
* 删除状态(0:否、2:是) * 删除状态(0:否、1:待删除、2:是)
*/ */
@TableLogic(value = "0", delval = "2") @TableLogic(value = "0", delval = "2")
private Integer delFlag; private Integer delFlag;
......
package com.dsk.cscec.domain.bo; package com.dsk.cscec.domain.bo;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
/** /**
* @author sxk * @author sxk
* @date 2024.02.07 * @date 2024.02.19
* @time 11:28 * @time 14:22
*/ */
@EqualsAndHashCode(callSuper = true)
@Data @Data
public class ImportCbProjectDataBo { public class AddNewCbProjectBo extends EditProjectInfoBo {
/** /**
* 项目ID * 关联ID(关联多个阶段)
*/ */
@NotNull(message = "项目ID不能为空") @NotNull(message = "关联ID不能为空")
private Long projectId; private Long relatedId;
/** /**
* 成本阶段(0:标前成本、1:标后成本、2:转固成本) * 成本阶段(0:标前成本、1:标后成本、2:转固成本)
*/ */
......
...@@ -12,11 +12,18 @@ import javax.validation.constraints.NotNull; ...@@ -12,11 +12,18 @@ import javax.validation.constraints.NotNull;
*/ */
@Data @Data
public class AddProjectFileUploadBo { public class AddProjectFileUploadBo {
/**
* 文件
*/
private MultipartFile file; private MultipartFile file;
/**
* 项目ID
*/
@NotNull(message = "项目ID不能为空") @NotNull(message = "项目ID不能为空")
private Long projectId; private Long projectId;
@NotNull(message = "成本阶段不能为空") /**
private Integer cbStage; * 成本类型
*/
@NotNull(message = "成本类型不能为空") @NotNull(message = "成本类型不能为空")
private Integer cbType; private Integer cbType;
} }
...@@ -2,23 +2,27 @@ package com.dsk.cscec.domain.bo; ...@@ -2,23 +2,27 @@ package com.dsk.cscec.domain.bo;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.NotNull;
/** /**
* @author sxk * @author sxk
* @date 2024.02.06 * @date 2024.02.18
* @time 14:17 * @time 15:04
*/ */
@Data @Data
public class QueryProjectFileUploadDetailBo { public class CbProjectSearchBo {
/**
* 项目名称
*/
private String projectName;
/** /**
* 项目ID * IPM项目编码
*/ */
@NotNull(message = "项目ID不能为空") private String ipmProjectNo;
private Long projectId;
/** /**
* 成本阶段(0:标前成本、1:标后成本、2:转固成本) * 成本阶段(0:标前成本、1:标后成本、2:转固成本)
*/ */
@NotNull(message = "成本阶段不能为空")
private Integer cbStage; private Integer cbStage;
/**
* 项目文件状态(1:解析中、2:解析成功、3:解析失败)
*/
private Integer projectFileStatus;
} }
...@@ -33,8 +33,4 @@ public class EditProjectInfoBo { ...@@ -33,8 +33,4 @@ public class EditProjectInfoBo {
* 文件名称 * 文件名称
*/ */
private String projectFileName; 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; package com.dsk.cscec.mapper;
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.extension.plugins.pagination.Page;
import com.dsk.cscec.domain.CbProjectRecord; import com.dsk.cscec.domain.CbProjectRecord;
import com.dsk.cscec.domain.vo.ProjectRecordSearchVo;
/** /**
* 项目台账表(CbProjectRecord)表数据库访问层 * 项目台账表(CbProjectRecord)表数据库访问层
...@@ -10,6 +13,10 @@ import com.dsk.cscec.domain.CbProjectRecord; ...@@ -10,6 +13,10 @@ import com.dsk.cscec.domain.CbProjectRecord;
* @since 2024-02-05 11:37:49 * @since 2024-02-05 11:37:49
*/ */
public interface CbProjectRecordMapper extends BaseMapper<CbProjectRecord> { public interface CbProjectRecordMapper extends BaseMapper<CbProjectRecord> {
/**
* 获取项目台账列表
*/
Page<ProjectRecordSearchVo> selectPageProjectRecordList(Page<ProjectRecordSearchVo> build, QueryWrapper<CbProjectRecord> wrapper);
} }
...@@ -3,7 +3,6 @@ package com.dsk.cscec.service; ...@@ -3,7 +3,6 @@ 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.AddProjectFileUploadBo; 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.domain.vo.QueryProjectFileUploadDetailVo;
import com.dsk.system.domain.vo.SysOssVo; import com.dsk.system.domain.vo.SysOssVo;
...@@ -19,8 +18,9 @@ public interface CbProjectFileService extends IService<CbProjectFile> { ...@@ -19,8 +18,9 @@ public interface CbProjectFileService extends IService<CbProjectFile> {
* *
* @param fileUploadBo 上传信息 * @param fileUploadBo 上传信息
* @param oss oss信息 * @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> { ...@@ -33,9 +33,9 @@ public interface CbProjectFileService extends IService<CbProjectFile> {
/** /**
* 获取项目文件上传详情 * 获取项目文件上传详情
* *
* @param uploadDetailBo 查询信息 * @param projectId 项目ID
* @return 文件列表 * @return 文件列表
*/ */
QueryProjectFileUploadDetailVo getProjectFileUploadDetail(QueryProjectFileUploadDetailBo uploadDetailBo); QueryProjectFileUploadDetailVo getProjectFileUploadDetail(Long projectId);
} }
package com.dsk.cscec.service; package com.dsk.cscec.service;
import com.baomidou.mybatisplus.extension.service.IService; 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.CbProjectRecord;
import com.dsk.cscec.domain.bo.AddCbProjectBo; 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.EditProjectInfoBo;
import com.dsk.cscec.domain.bo.ImportCbProjectDataBo; import com.dsk.cscec.domain.vo.ProjectRecordSearchVo;
import java.util.List; import java.util.List;
...@@ -26,9 +30,18 @@ public interface CbProjectRecordService extends IService<CbProjectRecord> { ...@@ -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> { ...@@ -38,10 +51,34 @@ public interface CbProjectRecordService extends IService<CbProjectRecord> {
*/ */
Integer editProjectInfo(EditProjectInfoBo editBo); Integer editProjectInfo(EditProjectInfoBo editBo);
/**
* 获取新阶段项目可选成本阶段
*
* @param relatedId 关联ID
* @return 可选成本阶段
*/
List<Integer> getProjectAvailableCbStage(Long relatedId);
/**
* 新增新阶段项目
*
* @param newProjectBo 新增对象
* @return 新增结果
*/
CbProjectRecord addNewStageProject(AddNewCbProjectBo newProjectBo);
/** /**
* 获取草稿弹窗列表 * 获取草稿弹窗列表
* *
* @return 草稿弹窗列表 * @return 草稿弹窗列表
*/ */
List<CbProjectRecord> getDraftDialogList(); List<CbProjectRecord> getDraftDialogList();
/**
* 删除草稿
*
* @param projectId 项目ID
* @return 删除结果
*/
Integer deleteDraft(Long projectId);
} }
...@@ -4,12 +4,10 @@ import cn.hutool.core.bean.BeanUtil; ...@@ -4,12 +4,10 @@ import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.lang.Assert; 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.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
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.AddProjectFileUploadBo; 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.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;
...@@ -40,22 +38,23 @@ public class CbProjectFileServiceImpl extends ServiceImpl<CbProjectFileMapper, C ...@@ -40,22 +38,23 @@ public class CbProjectFileServiceImpl extends ServiceImpl<CbProjectFileMapper, C
* *
* @param fileUploadBo 上传信息 * @param fileUploadBo 上传信息
* @param oss oss信息 * @param oss oss信息
* @return
*/ */
@Override @Override
@Transactional(rollbackFor = Exception.class) @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); CbProjectFile projectFile = BeanUtil.toBean(fileUploadBo, CbProjectFile.class);
projectFile.setCbStage(projectRecord.getCbStage());
projectFile.setFileName(oss.getOriginalName()); projectFile.setFileName(oss.getOriginalName());
projectFile.setFileOssId(oss.getOssId()); projectFile.setFileOssId(oss.getOssId());
projectFile.setFileOssUrl(oss.getUrl()); projectFile.setFileOssUrl(oss.getUrl());
//项目文件状态:准备中 //项目文件状态:准备中
projectFile.setFileParseStatus(CbProjectConstants.PROJECT_FILE_STATUS_PREPARING); projectFile.setFileParseStatus(CbProjectConstants.PROJECT_FILE_STATUS_PREPARING);
//删除状态:未删除
projectFile.setDelFlag(CbProjectConstants.DELETE_FLAG_EXIST);
baseMapper.insert(projectFile); baseMapper.insert(projectFile);
return projectFile;
} }
/** /**
...@@ -68,26 +67,24 @@ public class CbProjectFileServiceImpl extends ServiceImpl<CbProjectFileMapper, C ...@@ -68,26 +67,24 @@ public class CbProjectFileServiceImpl extends ServiceImpl<CbProjectFileMapper, C
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); return baseMapper.deleteById(projectFile);
return baseMapper.updateById(projectFile);
} }
/** /**
* 获取项目文件上传详情 * 获取项目文件上传详情
* *
* @param uploadDetailBo 查询信息 * @param projectId 项目ID
* @return 文件列表 * @return 文件列表
*/ */
@Override @Override
public QueryProjectFileUploadDetailVo getProjectFileUploadDetail(QueryProjectFileUploadDetailBo uploadDetailBo) { public QueryProjectFileUploadDetailVo getProjectFileUploadDetail(Long projectId) {
Long projectId = uploadDetailBo.getProjectId();
//校验项目是否存在 //校验项目是否存在
this.checkProjectExist(projectId); this.checkProjectExist(projectId);
List<CbProjectFile> projectFileList = baseMapper.selectList(new LambdaQueryWrapper<CbProjectFile>() List<CbProjectFile> projectFileList = baseMapper.selectList(new LambdaQueryWrapper<CbProjectFile>()
.eq(CbProjectFile::getProjectId, projectId) .eq(CbProjectFile::getProjectId, projectId)
//成本阶段 //成本阶段
.eq(CbProjectFile::getCbStage, uploadDetailBo.getCbStage()) //.eq(CbProjectFile::getCbStage, uploadDetailBo.getCbStage())
//删除状态:否 //删除状态:否
.eq(CbProjectFile::getDelFlag, CbProjectConstants.DELETE_FLAG_EXIST)); .eq(CbProjectFile::getDelFlag, CbProjectConstants.DELETE_FLAG_EXIST));
...@@ -127,13 +124,12 @@ public class CbProjectFileServiceImpl extends ServiceImpl<CbProjectFileMapper, C ...@@ -127,13 +124,12 @@ public class CbProjectFileServiceImpl extends ServiceImpl<CbProjectFileMapper, C
* 校验项目是否存在 * 校验项目是否存在
* *
* @param projectId 项目ID * @param projectId 项目ID
* @return 项目实体
*/ */
private void checkProjectExist(Long projectId) { private CbProjectRecord checkProjectExist(Long projectId) {
//校验项目是否存在 //校验项目是否存在
if (!projectRecordMapper.exists(new LambdaQueryWrapper<CbProjectRecord>() CbProjectRecord projectRecord = projectRecordMapper.selectById(projectId);
.eq(CbProjectRecord::getId, projectId) Assert.notNull(projectRecord, "该项目不存在");
.eq(CbProjectRecord::getDelFlag, CbProjectConstants.DELETE_FLAG_EXIST))) { return projectRecord;
throw new ServiceException("该项目不存在");
}
} }
} }
...@@ -2,14 +2,21 @@ package com.dsk.cscec.service.impl; ...@@ -2,14 +2,21 @@ 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 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.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dsk.common.core.domain.PageQuery;
import com.dsk.common.core.page.TableDataInfo;
import com.dsk.common.utils.StringUtils;
import com.dsk.component.DataAnalysisComponent;
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.AddCbProjectBo; import com.dsk.cscec.domain.bo.*;
import com.dsk.cscec.domain.bo.EditProjectInfoBo; import com.dsk.cscec.domain.vo.ProjectRecordSearchVo;
import com.dsk.cscec.domain.bo.ImportCbProjectDataBo;
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.CbProjectRecordService; import com.dsk.cscec.service.CbProjectRecordService;
...@@ -17,6 +24,7 @@ import org.springframework.stereotype.Service; ...@@ -17,6 +24,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.ArrayList;
import java.util.List; import java.util.List;
/** /**
...@@ -31,6 +39,8 @@ public class CbProjectRecordServiceImpl extends ServiceImpl<CbProjectRecordMappe ...@@ -31,6 +39,8 @@ public class CbProjectRecordServiceImpl extends ServiceImpl<CbProjectRecordMappe
private CbProjectRecordMapper baseMapper; private CbProjectRecordMapper baseMapper;
@Resource @Resource
private CbProjectFileMapper projectFileMapper; private CbProjectFileMapper projectFileMapper;
@Resource
private DataAnalysisComponent dataAnalysisComponent;
/** /**
* 新增项目 * 新增项目
...@@ -42,6 +52,17 @@ public class CbProjectRecordServiceImpl extends ServiceImpl<CbProjectRecordMappe ...@@ -42,6 +52,17 @@ public class CbProjectRecordServiceImpl extends ServiceImpl<CbProjectRecordMappe
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public CbProjectRecord addProject(AddCbProjectBo addCbProjectBo) { public CbProjectRecord addProject(AddCbProjectBo addCbProjectBo) {
CbProjectRecord projectRecord = BeanUtil.toBean(addCbProjectBo, CbProjectRecord.class); CbProjectRecord projectRecord = BeanUtil.toBean(addCbProjectBo, CbProjectRecord.class);
//生成唯一关联ID
boolean idFlag = true;
long relatedId = -1;
while (idFlag) {
relatedId = IdUtil.getSnowflakeNextId();
idFlag = baseMapper.exists(new LambdaQueryWrapper<CbProjectRecord>()
.eq(CbProjectRecord::getRelatedId, relatedId));
}
projectRecord.setRelatedId(relatedId);
//项目文件状态:准备中 //项目文件状态:准备中
projectRecord.setProjectFileStatus(CbProjectConstants.PROJECT_FILE_STATUS_PREPARING); projectRecord.setProjectFileStatus(CbProjectConstants.PROJECT_FILE_STATUS_PREPARING);
//删除状态:否 //删除状态:否
...@@ -55,32 +76,38 @@ public class CbProjectRecordServiceImpl extends ServiceImpl<CbProjectRecordMappe ...@@ -55,32 +76,38 @@ public class CbProjectRecordServiceImpl extends ServiceImpl<CbProjectRecordMappe
/** /**
* 根据项目文件导入数据 * 根据项目文件导入数据
* *
* @param importDataBo 导入对象 * @param projectId 项目ID
*/ */
@Override @Override
public void importData(ImportCbProjectDataBo importDataBo) { @Transactional(rollbackFor = Exception.class)
Long projectId = importDataBo.getProjectId(); public void importData(Long projectId) throws Exception {
Integer cbStage = importDataBo.getCbStage();
//校验项目是否存在 //校验项目是否存在
this.checkProjectExist(projectId); CbProjectRecord projectRecord = this.checkProjectExist(projectId);
//校验各个成本类型是否至少有1个文件 //校验各个成本类型是否至少有1个文件
//直接费成本 //直接费成本
this.checkCbTypeExistFile(importDataBo, CbProjectConstants.CB_TYPE_DIRECT_EXPENSE, CbProjectConstants.CB_TYPE_DIRECT_EXPENSE_NAME); this.checkCbTypeExistFile(projectId, CbProjectConstants.CB_TYPE_DIRECT_EXPENSE, CbProjectConstants.CB_TYPE_DIRECT_EXPENSE_NAME);
//工料汇总 //工料汇总
this.checkCbTypeExistFile(importDataBo, CbProjectConstants.CB_TYPE_QUANTITY_SUMMARY, CbProjectConstants.CB_TYPE_QUANTITY_SUMMARY_NAME); this.checkCbTypeExistFile(projectId, CbProjectConstants.CB_TYPE_QUANTITY_SUMMARY, CbProjectConstants.CB_TYPE_QUANTITY_SUMMARY_NAME);
//措施项目 //措施项目
this.checkCbTypeExistFile(importDataBo, CbProjectConstants.CB_TYPE_MEASURE_PROJECT, CbProjectConstants.CB_TYPE_MEASURE_PROJECT_NAME); this.checkCbTypeExistFile(projectId, CbProjectConstants.CB_TYPE_MEASURE_PROJECT, CbProjectConstants.CB_TYPE_MEASURE_PROJECT_NAME);
//其他项目 //其他项目
this.checkCbTypeExistFile(importDataBo, CbProjectConstants.CB_TYPE_OTHER_PROJECT, CbProjectConstants.CB_TYPE_OTHER_PROJECT_NAME); this.checkCbTypeExistFile(projectId, CbProjectConstants.CB_TYPE_OTHER_PROJECT, CbProjectConstants.CB_TYPE_OTHER_PROJECT_NAME);
//现场经费 //现场经费
this.checkCbTypeExistFile(importDataBo, CbProjectConstants.CB_TYPE_SCENE_EXPENSE, CbProjectConstants.CB_TYPE_SCENE_EXPENSE_NAME); this.checkCbTypeExistFile(projectId, CbProjectConstants.CB_TYPE_SCENE_EXPENSE, CbProjectConstants.CB_TYPE_SCENE_EXPENSE_NAME);
//成本汇总 //成本汇总
this.checkCbTypeExistFile(importDataBo, CbProjectConstants.CB_TYPE_SUMMARY, CbProjectConstants.CB_TYPE_SUMMARY_NAME); this.checkCbTypeExistFile(projectId, CbProjectConstants.CB_TYPE_SUMMARY, CbProjectConstants.CB_TYPE_SUMMARY_NAME);
//修改项目文件状态:解析中
projectRecord.setProjectFileStatus(CbProjectConstants.PROJECT_FILE_STATUS_PARSING);
//TODO:调各个成本类型的解析文件方法 //TODO:调各个成本类型的解析文件方法
//直接费成本 //直接费成本
//工料汇总 //工料汇总
CbProjectBaseBo projectBaseBo = new CbProjectBaseBo();
projectBaseBo.setProjectId(projectId);
projectBaseBo.setCbStage(projectRecord.getCbStage());
dataAnalysisComponent.quantitySummaryDataAnalysis(projectBaseBo);
//措施项目 //措施项目
//其他项目 //其他项目
//现场经费 //现场经费
...@@ -91,22 +118,45 @@ public class CbProjectRecordServiceImpl extends ServiceImpl<CbProjectRecordMappe ...@@ -91,22 +118,45 @@ public class CbProjectRecordServiceImpl extends ServiceImpl<CbProjectRecordMappe
/** /**
* 校验各个成本类型是否至少有1个文件 * 校验各个成本类型是否至少有1个文件
* *
* @param importDataBo 导入对象 * @param projectId 项目ID
* @param cbType 成本类型字典(0:直接费成本、1:工料汇总、2:措施项目、3:其他项目、4:现场经费、5:成本汇总) * @param cbType 成本类型字典(0:直接费成本、1:工料汇总、2:措施项目、3:其他项目、4:现场经费、5:成本汇总)
* @param cbTypeName 成本类型名称 * @param cbTypeName 成本类型名称
*/ */
private void checkCbTypeExistFile(ImportCbProjectDataBo importDataBo, Integer cbType, String cbTypeName) { private void checkCbTypeExistFile(Long projectId, Integer cbType, String cbTypeName) {
boolean isExist = projectFileMapper.exists(new LambdaQueryWrapper<CbProjectFile>() boolean isExist = projectFileMapper.exists(new LambdaQueryWrapper<CbProjectFile>()
.eq(CbProjectFile::getProjectId, importDataBo.getProjectId()) .eq(CbProjectFile::getProjectId, projectId)
.eq(CbProjectFile::getCbStage, importDataBo.getCbStage())
.eq(CbProjectFile::getCbType, cbType) .eq(CbProjectFile::getCbType, cbType)
//项目文件状态:准备中 //项目文件状态:解析中
.eq(CbProjectFile::getFileParseStatus, CbProjectConstants.PROJECT_FILE_STATUS_PREPARING) .eq(CbProjectFile::getFileParseStatus, CbProjectConstants.PROJECT_FILE_STATUS_PREPARING));
//删除状态:否
.eq(CbProjectFile::getDelFlag, CbProjectConstants.DELETE_FLAG_EXIST));
Assert.isTrue(isExist, cbTypeName + "至少需要上传1个文件"); Assert.isTrue(isExist, cbTypeName + "至少需要上传1个文件");
} }
/**
* 获取项目台账列表
*
* @param searchBo 查询条件
* @param pageQuery 分页对象
* @return 分页数据
*/
@Override
public TableDataInfo<ProjectRecordSearchVo> getProjectList(CbProjectSearchBo searchBo, PageQuery pageQuery) {
QueryWrapper<CbProjectRecord> wrapper = Wrappers.query();
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()) {
Long projectId = searchVo.getId();
//page.
}
return TableDataInfo.build(page);
}
/** /**
* 修改项目信息 * 修改项目信息
* *
...@@ -114,28 +164,84 @@ public class CbProjectRecordServiceImpl extends ServiceImpl<CbProjectRecordMappe ...@@ -114,28 +164,84 @@ public class CbProjectRecordServiceImpl extends ServiceImpl<CbProjectRecordMappe
* @return 修改结果 * @return 修改结果
*/ */
@Override @Override
@Transactional(rollbackFor = Exception.class)
public Integer editProjectInfo(EditProjectInfoBo editBo) { public Integer editProjectInfo(EditProjectInfoBo editBo) {
//校验项目是否存在 //校验项目是否存在
this.checkProjectExist(editBo.getProjectId()); CbProjectRecord projectRecord = this.checkProjectExist(editBo.getProjectId());
CbProjectRecord projectRecord = baseMapper.selectById(editBo.getProjectId()); for (CbProjectRecord record : baseMapper.selectList(new LambdaQueryWrapper<CbProjectRecord>()
projectRecord.setProjectName(editBo.getProjectName()); .eq(CbProjectRecord::getRelatedId, projectRecord.getRelatedId()))) {
projectRecord.setIpmProjectNo(editBo.getIpmProjectNo()); record.setProjectName(editBo.getProjectName());
projectRecord.setIsGetProjectDetail(editBo.getIsGetProjectDetail()); record.setIpmProjectNo(editBo.getIpmProjectNo());
projectRecord.setProjectFileName(editBo.getProjectFileName()); record.setIsGetProjectDetail(editBo.getIsGetProjectDetail());
return baseMapper.updateById(projectRecord); record.setProjectFileName(editBo.getProjectFileName());
Assert.isTrue(baseMapper.updateById(record) > 0, "修改失败,请联系系统管理员");
}
return 1;
} }
/** /**
* 校验项目是否存在 * 获取新阶段项目可选成本阶段
* *
* @param projectId 项目ID * @param relatedId 关联ID
* @return 可选成本阶段
*/ */
private void checkProjectExist(Long projectId) { @Override
CbProjectRecord projectRecord = baseMapper.selectOne(new LambdaQueryWrapper<CbProjectRecord>() public List<Integer> getProjectAvailableCbStage(Long relatedId) {
.eq(CbProjectRecord::getId, projectId) //通过关联ID校验项目是否存在
.eq(CbProjectRecord::getDelFlag, CbProjectConstants.DELETE_FLAG_EXIST)); List<CbProjectRecord> projectRecordList = this.checkRelatedIdExist(relatedId);
Assert.notNull(projectRecord, "该项目不存在");
ArrayList<Integer> cbStageList = new ArrayList<>();
cbStageList.add(CbProjectConstants.CB_STAGE_BEFORE_BID);
cbStageList.add(CbProjectConstants.CB_STAGE_AFTER_BID);
cbStageList.add(CbProjectConstants.CB_STAGE_TO_SOLID);
projectRecordList.forEach(projectRecord -> {
cbStageList.remove(projectRecord.getCbStage());
});
return cbStageList;
}
/**
* 新增新阶段项目
*
* @param newProjectBo 新增对象
* @return 新增结果
*/
@Override
@Transactional(rollbackFor = Exception.class)
public CbProjectRecord addNewStageProject(AddNewCbProjectBo newProjectBo) {
//修改基础信息
this.editProjectInfo(BeanUtil.toBean(newProjectBo, EditProjectInfoBo.class));
//通过关联ID校验项目是否存在
List<CbProjectRecord> projectRecordList = this.checkRelatedIdExist(newProjectBo.getRelatedId());
//校验待新增的阶段是否已存在
projectRecordList.forEach(record -> {
Assert.isFalse(record.getCbStage().equals(newProjectBo.getCbStage()), "当前项目在该阶段已存在记录,请检查草稿箱或项目台账列表");
});
//新增该项目的新阶段
CbProjectRecord projectRecord = BeanUtil.toBean(newProjectBo, CbProjectRecord.class);
//项目文件状态:准备中
projectRecord.setProjectFileStatus(CbProjectConstants.PROJECT_FILE_STATUS_PREPARING);
//删除状态:否
projectRecord.setDelFlag(CbProjectConstants.DELETE_FLAG_EXIST);
if (baseMapper.insert(projectRecord) > 0) {
return projectRecord;
}
return null;
}
/**
* 通过关联ID校验项目是否存在
*
* @return 该关联ID下的所有项目记录
*/
private List<CbProjectRecord> checkRelatedIdExist(Long relatedId) {
List<CbProjectRecord> projectRecordList = baseMapper.selectList(new LambdaQueryWrapper<CbProjectRecord>().eq(CbProjectRecord::getRelatedId, relatedId));
Assert.isFalse(projectRecordList.isEmpty(), "关联ID无效");
return projectRecordList;
} }
/** /**
...@@ -146,6 +252,38 @@ public class CbProjectRecordServiceImpl extends ServiceImpl<CbProjectRecordMappe ...@@ -146,6 +252,38 @@ public class CbProjectRecordServiceImpl extends ServiceImpl<CbProjectRecordMappe
@Override @Override
public List<CbProjectRecord> getDraftDialogList() { public List<CbProjectRecord> getDraftDialogList() {
return baseMapper.selectList(new LambdaQueryWrapper<CbProjectRecord>() return baseMapper.selectList(new LambdaQueryWrapper<CbProjectRecord>()
.eq(CbProjectRecord::getProjectFileStatus,CbProjectConstants.PROJECT_FILE_STATUS_PREPARING)); .eq(CbProjectRecord::getProjectFileStatus, CbProjectConstants.PROJECT_FILE_STATUS_PREPARING));
}
/**
* 删除草稿
*
* @param projectId 项目ID
* @return 删除结果
*/
@Override
public Integer deleteDraft(Long projectId) {
//校验项目是否存在
CbProjectRecord projectRecord = this.checkProjectExist(projectId);
//删除该项目下已上传的文件
List<CbProjectFile> idList = projectFileMapper.selectList(new LambdaQueryWrapper<CbProjectFile>()
.eq(CbProjectFile::getProjectId, projectId));
if (!idList.isEmpty()) {
projectFileMapper.deleteBatchIds(idList);
}
//删除项目记录
return baseMapper.deleteById(projectRecord);
}
/**
* 校验项目是否存在
*
* @param projectId 项目ID
* @return 项目实体
*/
private CbProjectRecord checkProjectExist(Long projectId) {
CbProjectRecord projectRecord = baseMapper.selectById(projectId);
Assert.notNull(projectRecord, "该项目不存在");
return projectRecord;
} }
} }
<?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.CbProjectRecordMapper"> <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> </mapper>
\ No newline at end of file
...@@ -128,6 +128,7 @@ public class SysOssServiceImpl implements ISysOssService, OssService { ...@@ -128,6 +128,7 @@ public class SysOssServiceImpl implements ISysOssService, OssService {
public SysOssVo upload(MultipartFile file) throws UnsupportedEncodingException { public SysOssVo upload(MultipartFile file) throws UnsupportedEncodingException {
String originalfileName = file.getOriginalFilename(); String originalfileName = file.getOriginalFilename();
//文件名解码防止上传中文名文件导致的文件名乱码 //文件名解码防止上传中文名文件导致的文件名乱码
assert originalfileName != null;
originalfileName = URLDecoder.decode(originalfileName,"UTF-8"); originalfileName = URLDecoder.decode(originalfileName,"UTF-8");
String suffix = StringUtils.substring(originalfileName, originalfileName.lastIndexOf("."), originalfileName.length()); String suffix = StringUtils.substring(originalfileName, originalfileName.lastIndexOf("."), originalfileName.length());
OssClient storage = OssFactory.instance(); 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