Commit 2879fb3e authored by 施翔轲's avatar 施翔轲

u

parent b227fca8
...@@ -8,6 +8,7 @@ import com.dsk.common.enums.BusinessType; ...@@ -8,6 +8,7 @@ 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.CbProjectFile;
import com.dsk.cscec.domain.bo.AddProjectFileUploadBo; import com.dsk.cscec.domain.bo.AddProjectFileUploadBo;
import com.dsk.cscec.domain.bo.DeleteCbProjectFileBo;
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;
...@@ -75,11 +76,11 @@ public class CbProjectFileController extends BaseController { ...@@ -75,11 +76,11 @@ public class CbProjectFileController extends BaseController {
} }
/** /**
* 删除项目台账文件 * 删除项目台账文件及对应数据
*/ */
@DeleteMapping("/deleteCbProjectFile/{fileId}") @DeleteMapping("/deleteCbProjectFile")
public R<Void> deleteCbProjectFile(@NotNull(message = "文件ID不能为空") @PathVariable Long fileId) { public R<Void> deleteCbProjectFile(@Validated @RequestBody DeleteCbProjectFileBo deleteBo) {
return toAjax(baseService.deleteProjectFile(new Long[]{fileId})); return toAjax(baseService.deleteProjectFile(deleteBo));
} }
/** /**
......
package com.dsk.cscec.domain.bo;
import lombok.Data;
import javax.validation.constraints.NotNull;
/**
* @author sxk
* @date 2024.02.28
* @time 10:45
*/
@Data
public class DeleteCbProjectFileBo {
@NotNull(message = "文件ID不能为空")
private Long fileId;
@NotNull(message = "成本类型不能为空")
private Integer cbType;
}
...@@ -3,6 +3,7 @@ package com.dsk.cscec.service; ...@@ -3,6 +3,7 @@ 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.DeleteCbProjectFileBo;
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;
...@@ -32,12 +33,12 @@ public interface CbProjectFileService extends IService<CbProjectFile> { ...@@ -32,12 +33,12 @@ public interface CbProjectFileService extends IService<CbProjectFile> {
CbProjectFile addProjectFile(AddProjectFileUploadBo fileUploadBo, SysOssVo oss); CbProjectFile addProjectFile(AddProjectFileUploadBo fileUploadBo, SysOssVo oss);
/** /**
* 批量逻辑删除项目上传文件记录 * 删除项目台账文件及对应数据
* *
* @param fileIds 文件ID * @param deleteBo 待删除文件信息
* @return 删除结果 * @return 删除结果
*/ */
Integer deleteProjectFile(Long[] fileIds); Integer deleteProjectFile(DeleteCbProjectFileBo deleteBo);
/** /**
* 获取项目文件上传详情 * 获取项目文件上传详情
...@@ -49,6 +50,7 @@ public interface CbProjectFileService extends IService<CbProjectFile> { ...@@ -49,6 +50,7 @@ public interface CbProjectFileService extends IService<CbProjectFile> {
/** /**
* 查询项目文件解析列表 * 查询项目文件解析列表
*
* @param projectId 项目ID * @param projectId 项目ID
* @param cbType 成本类型(0:直接费成本、1:工料汇总、2:措施项目、3:其他项目、4:现场经费、5:成本汇总) * @param cbType 成本类型(0:直接费成本、1:工料汇总、2:措施项目、3:其他项目、4:现场经费、5:成本汇总)
* @param cbStage 成本阶段(0:标前成本、1:标后成本、2:转固成本) * @param cbStage 成本阶段(0:标前成本、1:标后成本、2:转固成本)
...@@ -66,5 +68,5 @@ public interface CbProjectFileService extends IService<CbProjectFile> { ...@@ -66,5 +68,5 @@ public interface CbProjectFileService extends IService<CbProjectFile> {
* @param errmsg RMSG * @param errmsg RMSG
* @return boolean * @return boolean
*/ */
boolean UpdateProjectFileStatus(Long fileId,String errmsg,Integer status); boolean UpdateProjectFileStatus(Long fileId, String errmsg, Integer status);
} }
...@@ -102,8 +102,8 @@ public class CbProjectExpenseSummaryServiceImpl extends ServiceImpl<CbProjectExp ...@@ -102,8 +102,8 @@ public class CbProjectExpenseSummaryServiceImpl extends ServiceImpl<CbProjectExp
.collect(Collectors.toList()); .collect(Collectors.toList());
if (summaryList.size() != importList.size()) { if (summaryList.size() != importList.size()) {
projectFile.setFileParseStatus(CbProjectConstants.PROJECT_FILE_STATUS_PARSE_FAIL); projectFile.setFileParseStatus(CbProjectConstants.PROJECT_FILE_STATUS_PARSE_FAIL);
log.error("FileId:" + projectFile.getId() + ",表格中存在\"名称\"列为空数据!"); log.error("FileId:" + projectFile.getId() + ",表格中\"名称\"列存在空数据!");
projectFile.setFailRemark("表格中存在\"名称\"列为空数据"); projectFile.setFailRemark("表格中\"名称\"列存在空数据");
projectFileMapper.updateById(projectFile); projectFileMapper.updateById(projectFile);
continue; continue;
} }
......
...@@ -2,26 +2,25 @@ package com.dsk.cscec.service.impl; ...@@ -2,26 +2,25 @@ 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.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.*;
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.DeleteCbProjectFileBo;
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;
import com.dsk.cscec.service.CbProjectFileService; import com.dsk.cscec.service.*;
import com.dsk.system.domain.vo.SysOssVo; import com.dsk.system.domain.vo.SysOssVo;
import org.springframework.stereotype.Service; 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;
import java.util.stream.Collectors;
/** /**
* 项目成本文件表(CbProjectFile)表服务实现类 * 项目成本文件表(CbProjectFile)表服务实现类
...@@ -36,7 +35,26 @@ public class CbProjectFileServiceImpl extends ServiceImpl<CbProjectFileMapper, C ...@@ -36,7 +35,26 @@ public class CbProjectFileServiceImpl extends ServiceImpl<CbProjectFileMapper, C
@Resource @Resource
private CbProjectRecordMapper projectRecordMapper; private CbProjectRecordMapper projectRecordMapper;
@Resource @Resource
private CbProjectFileMapper projectFileMapper; private CbDirectExpenseService directExpenseService;
@Resource
private ICbQuantitySummaryService quantitySummaryService;
@Resource
private ICbQuantitySummaryActualService quantitySummaryActualService;
//@Resource
//private ICbCostMeasureService costMeasureService;
@Resource
private ICbCostMeasureActualService costMeasureActualActualService;
//@Resource
//private CbProjectOtherService projectOtherService;
@Resource
private CbSceneExpenseChildrenService sceneExpenseChildrenService;
private CbProjectExpenseSummaryService projectExpenseSummaryService;
@Resource
private CbSummaryService summaryService;
@Resource
private CbSummaryActualService summaryActualService;
@Resource
private CbSummaryActualLockService summaryActualLockService;
/** /**
* 校验同一成本类型下是否存在相同文件 * 校验同一成本类型下是否存在相同文件
...@@ -47,7 +65,7 @@ public class CbProjectFileServiceImpl extends ServiceImpl<CbProjectFileMapper, C ...@@ -47,7 +65,7 @@ public class CbProjectFileServiceImpl extends ServiceImpl<CbProjectFileMapper, C
public Boolean checkProjectFileExist(AddProjectFileUploadBo fileUploadBo) { public Boolean checkProjectFileExist(AddProjectFileUploadBo fileUploadBo) {
String filename = fileUploadBo.getFile().getOriginalFilename(); String filename = fileUploadBo.getFile().getOriginalFilename();
assert filename != null; assert filename != null;
projectFileMapper.selectList(new LambdaQueryWrapper<CbProjectFile>() baseMapper.selectList(new LambdaQueryWrapper<CbProjectFile>()
.eq(CbProjectFile::getProjectId, fileUploadBo.getProjectId()) .eq(CbProjectFile::getProjectId, fileUploadBo.getProjectId())
.eq(CbProjectFile::getCbType, fileUploadBo.getCbType())).forEach(projectFile -> { .eq(CbProjectFile::getCbType, fileUploadBo.getCbType())).forEach(projectFile -> {
//仅对比文件名,不考虑文件格式 //仅对比文件名,不考虑文件格式
...@@ -82,34 +100,81 @@ public class CbProjectFileServiceImpl extends ServiceImpl<CbProjectFileMapper, C ...@@ -82,34 +100,81 @@ public class CbProjectFileServiceImpl extends ServiceImpl<CbProjectFileMapper, C
} }
/** /**
* 批量逻辑删除项目上传文件记录 * 删除项目台账文件及对应数据
* *
* @param fileIds 文件ID * @param deleteBo 待删除文件信息
* @return 删除结果 * @return 删除结果
*/ */
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public Integer deleteProjectFile(Long[] fileIds) { public Integer deleteProjectFile(DeleteCbProjectFileBo deleteBo) {
int flag = 0; Long fileId = deleteBo.getFileId();
//查询待删除文件 //查询待删除文件
List<CbProjectFile> fileList = baseMapper.selectList(new LambdaQueryWrapper<CbProjectFile>() CbProjectFile file = baseMapper.selectById(fileId);
.in(ObjectUtil.isNotNull(fileIds), CbProjectFile::getId, Arrays.asList(fileIds)));
for (CbProjectFile file : fileList) {
//不允许删除解析中的文件 //不允许删除解析中的文件
Integer fileParseStatus = file.getFileParseStatus(); Integer fileParseStatus = file.getFileParseStatus();
Assert.isFalse(fileParseStatus.equals(CbProjectConstants.PROJECT_FILE_STATUS_PARSING), Assert.isFalse(fileParseStatus.equals(CbProjectConstants.PROJECT_FILE_STATUS_PARSING),
"文件正在解析中,不允许删除"); "文件正在解析中,不允许删除");
//准备中、的文件设为已删除,否则设为待删除
//设为待删除是为了方便各个成本类型删除数据 //解析成功、解析失败的文件需要删除对应的导入数据和每月成本数据
if (fileParseStatus.equals(CbProjectConstants.PROJECT_FILE_STATUS_PREPARING)) { if (fileParseStatus.equals(CbProjectConstants.PROJECT_FILE_STATUS_PARSE_SUCCESS) ||
flag = baseMapper.deleteById(file); fileParseStatus.equals(CbProjectConstants.PROJECT_FILE_STATUS_PARSE_FAIL)) {
} else { switch (deleteBo.getCbType()) {
flag = baseMapper.update(null, new UpdateWrapper<CbProjectFile>() case CbProjectConstants.CB_TYPE_DIRECT_EXPENSE:
.set("del_flag", CbProjectConstants.DELETE_FLAG_WAIT_DELETE) //直接费没有每月成本,所以直接删除导入数据即可
.eq("id", file.getId())); Assert.isTrue(directExpenseService.removeBatchByIds(directExpenseService.list(new LambdaQueryWrapper<CbDirectExpense>()
.eq(CbDirectExpense::getProjectFileId, file.getId()))), "直接费成本数据删除失败");
break;
case CbProjectConstants.CB_TYPE_QUANTITY_SUMMARY:
//工料汇总
List<CbQuantitySummary> quantitySummaryList = quantitySummaryService.list(new LambdaQueryWrapper<CbQuantitySummary>()
.eq(CbQuantitySummary::getCbProjectFileId, file.getId()));
//删除每月成本数据(关联导入数据主键)
quantitySummaryActualService.removeBatchByIds(quantitySummaryActualService.list(new LambdaQueryWrapper<CbQuantitySummaryActual>()
.in(CbQuantitySummaryActual::getCbQuantitySummaryId, quantitySummaryList.stream().map(CbQuantitySummary::getId).collect(Collectors.toList()))));
//删除导入数据(关联文件ID)
quantitySummaryService.removeBatchByIds(quantitySummaryList);
break;
case CbProjectConstants.CB_TYPE_MEASURE_PROJECT:
//措施项目
//List<CbCostMeasure> costMeasureList = costMeasureService.list(new LambdaQueryWrapper<CbCostMeasure>()
// .eq(CbCostMeasure::getProjectFileId, fileId));
////删除每月成本数据(关联导入数据主键)
//costMeasureActualActualService.removeBatchByIds(costMeasureActualActualService.list(new LambdaQueryWrapper<CbCostMeasureActual>()
// .in(CbCostMeasureActual::getPlanMeasureId, costMeasureList.stream().map(CbCostMeasure::getId).collect(Collectors.toList()))));
////删除导入数据(关联文件ID)
//costMeasureService.removeBatchByIds(costMeasureList);
break;
case CbProjectConstants.CB_TYPE_OTHER_PROJECT:
//其他项目
break;
case CbProjectConstants.CB_TYPE_SCENE_EXPENSE:
//现场经费
//删除汇总数据(关联文件ID)
projectExpenseSummaryService.removeBatchByIds(projectExpenseSummaryService.list(new LambdaQueryWrapper<CbProjectExpenseSummary>()
.eq(CbProjectExpenseSummary::getProjectFileId, fileId)));
//汇总以外的数据(关联文件ID)
sceneExpenseChildrenService.removeBatchByIds(sceneExpenseChildrenService.list(new LambdaQueryWrapper<CbSceneExpenseChildren>()
.eq(CbSceneExpenseChildren::getProjectFileId, fileId)));
break;
case CbProjectConstants.CB_TYPE_SUMMARY:
//成本汇总
//删除锁定数据(关联项目ID)
summaryActualLockService.removeBatchByIds(summaryActualLockService.list(new LambdaQueryWrapper<CbSummaryActualLock>()
.eq(CbSummaryActualLock::getProjectId, file.getProjectId())));
//删除每月成本数据(关联导入数据主键)
List<CbSummary> summaryList = summaryService.list(new LambdaQueryWrapper<CbSummary>()
.eq(CbSummary::getCbProjectFileId, fileId));
summaryActualService.removeBatchByIds(summaryActualService.list(new LambdaQueryWrapper<CbSummaryActual>()
.in(CbSummaryActual::getCbSummaryId, summaryList.stream().map(CbSummary::getId).collect(Collectors.toList()))));
//删除导入数据(关联文件ID)
summaryService.removeBatchByIds(summaryList);
break;
default:
throw new ServiceException("成本类型错误");
} }
} }
return flag; return baseMapper.deleteById(file);
} }
/** /**
...@@ -168,8 +233,8 @@ public class CbProjectFileServiceImpl extends ServiceImpl<CbProjectFileMapper, C ...@@ -168,8 +233,8 @@ public class CbProjectFileServiceImpl extends ServiceImpl<CbProjectFileMapper, C
} }
@Override @Override
public boolean UpdateProjectFileStatus(Long fileId, String errmsg,Integer status) { public boolean UpdateProjectFileStatus(Long fileId, String errmsg, Integer status) {
CbProjectFile cbProjectFile=new CbProjectFile(); CbProjectFile cbProjectFile = new CbProjectFile();
cbProjectFile.setId(fileId); cbProjectFile.setId(fileId);
cbProjectFile.setFailRemark(errmsg); cbProjectFile.setFailRemark(errmsg);
cbProjectFile.setFileParseStatus(status); cbProjectFile.setFileParseStatus(status);
......
...@@ -129,7 +129,7 @@ public class CbSceneExpenseChildrenServiceImpl extends ServiceImpl<CbSceneExpens ...@@ -129,7 +129,7 @@ public class CbSceneExpenseChildrenServiceImpl extends ServiceImpl<CbSceneExpens
} }
//筛选有效数据 //筛选有效数据
List<CbSceneExpenseChildrenImportBo> summaryList = importList.stream().parallel() List<CbSceneExpenseChildrenImportBo> chidrenList = importList.stream().parallel()
//筛选名称列不为空数据 //筛选名称列不为空数据
.filter(item -> StringUtils.isNotBlank(item.getExpenseName())) .filter(item -> StringUtils.isNotBlank(item.getExpenseName()))
.peek(item -> { .peek(item -> {
...@@ -154,10 +154,10 @@ public class CbSceneExpenseChildrenServiceImpl extends ServiceImpl<CbSceneExpens ...@@ -154,10 +154,10 @@ public class CbSceneExpenseChildrenServiceImpl extends ServiceImpl<CbSceneExpens
item.setCreateTime(new Date()); item.setCreateTime(new Date());
}) })
.collect(Collectors.toList()); .collect(Collectors.toList());
if (summaryList.size() != importList.size()) { if (chidrenList.size() != importList.size()) {
projectFile.setFileParseStatus(CbProjectConstants.PROJECT_FILE_STATUS_PARSE_FAIL); projectFile.setFileParseStatus(CbProjectConstants.PROJECT_FILE_STATUS_PARSE_FAIL);
log.error("FileId:" + projectFile.getId() + ",表格中存在\"名称\"列为空数据"); log.error("FileId:" + projectFile.getId() + ",表格中\"名称\"列存在空数据");
projectFile.setFailRemark("表格中存在\"名称\"列为空数据"); projectFile.setFailRemark("表格中\"名称\"列存在空数据");
projectFileMapper.updateById(projectFile); projectFileMapper.updateById(projectFile);
continue; continue;
} }
...@@ -165,7 +165,7 @@ public class CbSceneExpenseChildrenServiceImpl extends ServiceImpl<CbSceneExpens ...@@ -165,7 +165,7 @@ public class CbSceneExpenseChildrenServiceImpl extends ServiceImpl<CbSceneExpens
try { try {
//批量插入数据 //批量插入数据
CbSceneExpenseChildrenServiceImpl impl = new CbSceneExpenseChildrenServiceImpl(); CbSceneExpenseChildrenServiceImpl impl = new CbSceneExpenseChildrenServiceImpl();
Assert.isTrue(impl.saveBatch(BeanUtil.copyToList(summaryList, CbSceneExpenseChildren.class)), "数据插入失败"); Assert.isTrue(impl.saveBatch(BeanUtil.copyToList(chidrenList, CbSceneExpenseChildren.class)), "数据插入失败");
//更新文件状态 //更新文件状态
projectFile.setFileParseStatus(CbProjectConstants.PROJECT_FILE_STATUS_PARSE_SUCCESS); projectFile.setFileParseStatus(CbProjectConstants.PROJECT_FILE_STATUS_PARSE_SUCCESS);
Assert.isTrue(projectFileMapper.updateById(projectFile) > 0, "解析成功后文件状态更新失败"); Assert.isTrue(projectFileMapper.updateById(projectFile) > 0, "解析成功后文件状态更新失败");
......
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