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

u

parent b227fca8
......@@ -8,6 +8,7 @@ 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.DeleteCbProjectFileBo;
import com.dsk.cscec.domain.vo.QueryProjectFileUploadDetailVo;
import com.dsk.cscec.service.CbProjectFileService;
import com.dsk.system.domain.vo.SysOssVo;
......@@ -75,11 +76,11 @@ public class CbProjectFileController extends BaseController {
}
/**
* 删除项目台账文件
* 删除项目台账文件及对应数据
*/
@DeleteMapping("/deleteCbProjectFile/{fileId}")
public R<Void> deleteCbProjectFile(@NotNull(message = "文件ID不能为空") @PathVariable Long fileId) {
return toAjax(baseService.deleteProjectFile(new Long[]{fileId}));
@DeleteMapping("/deleteCbProjectFile")
public R<Void> deleteCbProjectFile(@Validated @RequestBody DeleteCbProjectFileBo deleteBo) {
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;
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.DeleteCbProjectFileBo;
import com.dsk.cscec.domain.vo.QueryProjectFileUploadDetailVo;
import com.dsk.system.domain.vo.SysOssVo;
......@@ -32,12 +33,12 @@ public interface CbProjectFileService extends IService<CbProjectFile> {
CbProjectFile addProjectFile(AddProjectFileUploadBo fileUploadBo, SysOssVo oss);
/**
* 批量逻辑删除项目上传文件记录
* 删除项目台账文件及对应数据
*
* @param fileIds 文件ID
* @param deleteBo 待删除文件信息
* @return 删除结果
*/
Integer deleteProjectFile(Long[] fileIds);
Integer deleteProjectFile(DeleteCbProjectFileBo deleteBo);
/**
* 获取项目文件上传详情
......@@ -49,9 +50,10 @@ public interface CbProjectFileService extends IService<CbProjectFile> {
/**
* 查询项目文件解析列表
*
* @param projectId 项目ID
* @param cbType 成本类型(0:直接费成本、1:工料汇总、2:措施项目、3:其他项目、4:现场经费、5:成本汇总)
* @param cbStage 成本阶段(0:标前成本、1:标后成本、2:转固成本)
* @param cbType 成本类型(0:直接费成本、1:工料汇总、2:措施项目、3:其他项目、4:现场经费、5:成本汇总)
* @param cbStage 成本阶段(0:标前成本、1:标后成本、2:转固成本)
* @return
*/
List<CbProjectFile> selectAnalysisList(Long projectId, Integer cbType, Integer cbStage);
......@@ -66,5 +68,5 @@ public interface CbProjectFileService extends IService<CbProjectFile> {
* @param errmsg RMSG
* @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
.collect(Collectors.toList());
if (summaryList.size() != importList.size()) {
projectFile.setFileParseStatus(CbProjectConstants.PROJECT_FILE_STATUS_PARSE_FAIL);
log.error("FileId:" + projectFile.getId() + ",表格中存在\"名称\"列为空数据!");
projectFile.setFailRemark("表格中存在\"名称\"列为空数据");
log.error("FileId:" + projectFile.getId() + ",表格中\"名称\"列存在空数据!");
projectFile.setFailRemark("表格中\"名称\"列存在空数据");
projectFileMapper.updateById(projectFile);
continue;
}
......
......@@ -2,26 +2,25 @@ package com.dsk.cscec.service.impl;
import cn.hutool.core.bean.BeanUtil;
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.update.UpdateWrapper;
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.*;
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.mapper.CbProjectFileMapper;
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 org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
/**
* 项目成本文件表(CbProjectFile)表服务实现类
......@@ -36,7 +35,26 @@ public class CbProjectFileServiceImpl extends ServiceImpl<CbProjectFileMapper, C
@Resource
private CbProjectRecordMapper projectRecordMapper;
@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
public Boolean checkProjectFileExist(AddProjectFileUploadBo fileUploadBo) {
String filename = fileUploadBo.getFile().getOriginalFilename();
assert filename != null;
projectFileMapper.selectList(new LambdaQueryWrapper<CbProjectFile>()
baseMapper.selectList(new LambdaQueryWrapper<CbProjectFile>()
.eq(CbProjectFile::getProjectId, fileUploadBo.getProjectId())
.eq(CbProjectFile::getCbType, fileUploadBo.getCbType())).forEach(projectFile -> {
//仅对比文件名,不考虑文件格式
......@@ -82,34 +100,81 @@ public class CbProjectFileServiceImpl extends ServiceImpl<CbProjectFileMapper, C
}
/**
* 批量逻辑删除项目上传文件记录
* 删除项目台账文件及对应数据
*
* @param fileIds 文件ID
* @param deleteBo 待删除文件信息
* @return 删除结果
*/
@Override
@Transactional(rollbackFor = Exception.class)
public Integer deleteProjectFile(Long[] fileIds) {
int flag = 0;
public Integer deleteProjectFile(DeleteCbProjectFileBo deleteBo) {
Long fileId = deleteBo.getFileId();
//查询待删除文件
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()));
CbProjectFile file = baseMapper.selectById(fileId);
//不允许删除解析中的文件
Integer fileParseStatus = file.getFileParseStatus();
Assert.isFalse(fileParseStatus.equals(CbProjectConstants.PROJECT_FILE_STATUS_PARSING),
"文件正在解析中,不允许删除");
//解析成功、解析失败的文件需要删除对应的导入数据和每月成本数据
if (fileParseStatus.equals(CbProjectConstants.PROJECT_FILE_STATUS_PARSE_SUCCESS) ||
fileParseStatus.equals(CbProjectConstants.PROJECT_FILE_STATUS_PARSE_FAIL)) {
switch (deleteBo.getCbType()) {
case CbProjectConstants.CB_TYPE_DIRECT_EXPENSE:
//直接费没有每月成本,所以直接删除导入数据即可
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
}
@Override
public boolean UpdateProjectFileStatus(Long fileId, String errmsg,Integer status) {
CbProjectFile cbProjectFile=new CbProjectFile();
public boolean UpdateProjectFileStatus(Long fileId, String errmsg, Integer status) {
CbProjectFile cbProjectFile = new CbProjectFile();
cbProjectFile.setId(fileId);
cbProjectFile.setFailRemark(errmsg);
cbProjectFile.setFileParseStatus(status);
......
......@@ -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()))
.peek(item -> {
......@@ -154,10 +154,10 @@ public class CbSceneExpenseChildrenServiceImpl extends ServiceImpl<CbSceneExpens
item.setCreateTime(new Date());
})
.collect(Collectors.toList());
if (summaryList.size() != importList.size()) {
if (chidrenList.size() != importList.size()) {
projectFile.setFileParseStatus(CbProjectConstants.PROJECT_FILE_STATUS_PARSE_FAIL);
log.error("FileId:" + projectFile.getId() + ",表格中存在\"名称\"列为空数据");
projectFile.setFailRemark("表格中存在\"名称\"列为空数据");
log.error("FileId:" + projectFile.getId() + ",表格中\"名称\"列存在空数据");
projectFile.setFailRemark("表格中\"名称\"列存在空数据");
projectFileMapper.updateById(projectFile);
continue;
}
......@@ -165,7 +165,7 @@ public class CbSceneExpenseChildrenServiceImpl extends ServiceImpl<CbSceneExpens
try {
//批量插入数据
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);
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