Commit 9efe0df4 authored by dengguangman's avatar dengguangman Committed by Administrator

其他

Signed-off-by: Administrator's avatarAdministrator <admin@example.com>
parent 888762d6
package com.dsk.component;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.dsk.common.excel.ExcelUtils;
import com.dsk.common.exception.ServiceException;
import com.dsk.cscec.constant.CbProjectConstants;
import com.dsk.cscec.domain.CbProjectFile;
import com.dsk.cscec.domain.CbProjectOther;
import com.dsk.cscec.domain.bo.CbProjectBaseBo;
import com.dsk.cscec.service.CbProjectFileService;
import com.dsk.cscec.service.CbProjectOtherService;
import com.dsk.system.service.ISysOssService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import org.springframework.transaction.support.TransactionTemplate;
import org.springframework.util.ObjectUtils;
import javax.annotation.Resource;
import java.io.InputStream;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
/**
* 其他费用数据解析组件
*
* @Author lcl
* @Data 2024/2/7 17:43
*/
@Slf4j
@Component
public class CbProjectOtherAnalysisComponent {
@Resource
private CbProjectOtherService projectOtherService;
@Resource
private CbProjectFileService projectFileService;
@Resource
private ISysOssService ossService;
@Resource
private TransactionTemplate transactionTemplate;
/**
* 其他费用数据解析
*/
@Async
public void projectOtherDataAnalysis(CbProjectBaseBo bo) throws Exception {
//查询其他费用导入文件
List<CbProjectFile> fileList = projectFileService.list(Wrappers.<CbProjectFile>lambdaQuery()
.eq(CbProjectFile::getProjectId, bo.getProjectId())
.eq(CbProjectFile::getCbType, CbProjectConstants.CB_TYPE_OTHER_PROJECT)
.eq(CbProjectFile::getCbStage, bo.getCbStage())
.in(CbProjectFile::getFileParseStatus, Arrays.asList(1, 3)));
if (ObjectUtils.isEmpty(fileList)) {
return;
}
//文件处理
for (CbProjectFile file : fileList) {
if (file.getDelFlag() == 0) {
//文件下载
InputStream inputStream = ossService.downFileIO(file.getFileOssId());
if (ObjectUtil.isNull(inputStream)) {
file.setFileParseStatus(3);
file.setFailRemark("文件数据不存在");
projectFileService.updateById(file);
break;
}
//解析数据
List<CbProjectOther> importList = new ExcelUtils<>(CbProjectOther.class).importExcelAllSheet(inputStream, 1);
if (importList.isEmpty()) {
file.setFileParseStatus(3);
file.setFailRemark("表格中不存在待导入数据!");
projectFileService.updateById(file);
break;
}
List<CbProjectOther> projectOtherList = importList.stream().parallel()
.peek(item -> {
item.setProjectId(bo.getProjectId());
item.setCbStage(bo.getCbStage());
item.setCbProjectFileId(file.getId());
}).collect(Collectors.toList());
if (projectOtherList.isEmpty()) {
throw new ServiceException("表格中不存在有效数据数据!");
}
transactionTemplate.execute(status -> {
try {
//分批次插入
if (projectOtherList.size() > 1000) {
int index = 0;
int sum = projectOtherList.size();
while (index < sum) {
List<CbProjectOther> divideList = projectOtherList.subList(index, Math.max((index + 1) * 1000, sum));
boolean b = projectOtherService.saveBatch(divideList);
if (!b) {
throw new ServiceException("数据插入失败!");
}
index += 1000;
}
} else {
boolean b = projectOtherService.saveBatch(projectOtherList);
if (!b) {
throw new ServiceException("数据插入失败!");
}
}
file.setFileParseStatus(2);
boolean b = projectFileService.updateById(file);
if (!b) {
throw new ServiceException("文件状态更新失败!");
}
} catch (Exception e) {
status.setRollbackOnly();
file.setFileParseStatus(3);
file.setFailRemark(e.getMessage());
projectFileService.updateById(file);
}
return Boolean.TRUE;
});
} else {
projectOtherService.remove(Wrappers.<CbProjectOther>lambdaQuery().eq(CbProjectOther::getCbProjectFileId, file.getId()));
projectFileService.removeById(file);
}
}
}
}
...@@ -7,7 +7,6 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; ...@@ -7,7 +7,6 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.dsk.common.annotation.Log; import com.dsk.common.annotation.Log;
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.component.CbProjectOtherAnalysisComponent;
import com.dsk.cscec.domain.CbProjectExpenseSummary; import com.dsk.cscec.domain.CbProjectExpenseSummary;
import com.dsk.cscec.domain.bo.CbProjectBaseBo; import com.dsk.cscec.domain.bo.CbProjectBaseBo;
import com.dsk.cscec.domain.bo.CbProjectOtherBo; import com.dsk.cscec.domain.bo.CbProjectOtherBo;
...@@ -41,12 +40,9 @@ public class CbProjectOtherController { ...@@ -41,12 +40,9 @@ public class CbProjectOtherController {
@Resource @Resource
private CbProjectExpenseSummaryService cbProjectExpenseSummaryService; private CbProjectExpenseSummaryService cbProjectExpenseSummaryService;
@Resource
private CbProjectOtherAnalysisComponent otherAnalysisComponent;
@GetMapping(value = "/projectOther/dataAnalysis") @GetMapping(value = "/projectOther/dataAnalysis")
public R<List<CbProjectExpenseSummary>> projectOtherDataAnalysis(CbProjectBaseBo baseBo) throws Exception{ public R<List<CbProjectExpenseSummary>> projectOtherDataAnalysis(CbProjectBaseBo baseBo) throws Exception{
otherAnalysisComponent.projectOtherDataAnalysis(baseBo); projectOtherService.projectOtherDataAnalysis(baseBo);
return R.ok(); return R.ok();
} }
......
...@@ -113,4 +113,9 @@ public class CbProjectOtherImportVo { ...@@ -113,4 +113,9 @@ public class CbProjectOtherImportVo {
* 处理后序号 * 处理后序号
*/ */
private String dealWithNumber; private String dealWithNumber;
/**
* 项目成本文件id
*/
private Long cbProjectFileId;
} }
...@@ -36,15 +36,16 @@ public class CbProjectExpenseSummaryImportListener extends AnalysisEventListener ...@@ -36,15 +36,16 @@ public class CbProjectExpenseSummaryImportListener extends AnalysisEventListener
@Override @Override
public void invoke(CbProjectExpenseSummaryImportVo importVo, AnalysisContext context) { public void invoke(CbProjectExpenseSummaryImportVo importVo, AnalysisContext context) {
Integer rowIndex = context.readRowHolder().getRowIndex(); Integer rowIndex = context.readRowHolder().getRowIndex();
if (StrUtil.isEmpty(importVo.getExpenseName())) { // if (StrUtil.isEmpty(importVo.getExpenseName())) {
failureNum++; // failureNum++;
failureMsg.append("<br/>" + rowIndex + "行 解析失败:清单内容不能为空"); // failureMsg.append("<br/>" + rowIndex + "行 解析失败:清单内容不能为空");
} // }
String number = importVo.getNumber(); // String number = importVo.getNumber();
if (StrUtil.isEmpty(number)) { // if (StrUtil.isEmpty(number)) {
failureNum++; // failureNum++;
failureMsg.append("<br/>" + rowIndex + "行 解析失败:序号不能为空"); // failureMsg.append("<br/>" + rowIndex + "行 解析失败:序号不能为空");
} // }
dataList.add(importVo);
} }
@Override @Override
......
...@@ -24,31 +24,32 @@ import java.util.regex.Pattern; ...@@ -24,31 +24,32 @@ import java.util.regex.Pattern;
public class CbProjectOtherImportListener extends AnalysisEventListener<CbProjectOtherImportVo> implements ExcelListener<CbProjectOtherImportVo> { public class CbProjectOtherImportListener extends AnalysisEventListener<CbProjectOtherImportVo> implements ExcelListener<CbProjectOtherImportVo> {
private final Long projectId; private final Long projectId;
private final Integer cbStage; private final Long fileId;
private List<CbProjectOtherImportVo> dataList = new ArrayList<>(); private List<CbProjectOtherImportVo> dataList = new ArrayList<>();
private int successNum = 0; private int successNum = 0;
private int failureNum = 0; private int failureNum = 0;
private final StringBuilder successMsg = new StringBuilder(); private final StringBuilder successMsg = new StringBuilder();
private final StringBuilder failureMsg = new StringBuilder(); private final StringBuilder failureMsg = new StringBuilder();
public CbProjectOtherImportListener(Long projectId, Integer cbStage) { public CbProjectOtherImportListener(Long projectId, Long fileId) {
this.cbStage = cbStage; this.fileId = fileId;
this.projectId = projectId; this.projectId = projectId;
} }
@Override @Override
public void invoke(CbProjectOtherImportVo importVo, AnalysisContext context) { public void invoke(CbProjectOtherImportVo importVo, AnalysisContext context) {
Integer rowIndex = context.readRowHolder().getRowIndex(); Integer rowIndex = context.readRowHolder().getRowIndex();
if (StrUtil.isEmpty(importVo.getItemContent())) { // if (StrUtil.isEmpty(importVo.getItemContent())) {
failureNum++; // failureNum++;
failureMsg.append("<br/>" + rowIndex + "行 解析失败:清单内容不能为空"); // failureMsg.append("<br/>" + rowIndex + "行 解析失败:清单内容不能为空");
} // }
String number = importVo.getNumber(); String number = importVo.getNumber();
if (StrUtil.isEmpty(number)) { if (StrUtil.isEmpty(number)) {
failureNum++; failureNum++;
failureMsg.append("<br/>" + rowIndex + "行 解析失败:序号不能为空"); failureMsg.append("<br/>" + rowIndex + "行 解析失败:序号不能为空");
} }
importVo.setCbProjectFileId(fileId);
Boolean numberMatch = false; Boolean numberMatch = false;
String regex = "[\\((]*[一|二|三|四|五|六|七|八|九|十]+[\\))]*"; String regex = "[\\((]*[一|二|三|四|五|六|七|八|九|十]+[\\))]*";
Pattern pattern = Pattern.compile("^\\d+(\\.\\d+)*$"); Pattern pattern = Pattern.compile("^\\d+(\\.\\d+)*$");
......
...@@ -2,6 +2,7 @@ package com.dsk.cscec.service; ...@@ -2,6 +2,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.CbProjectOther; import com.dsk.cscec.domain.CbProjectOther;
import com.dsk.cscec.domain.bo.CbProjectBaseBo;
import com.dsk.cscec.domain.bo.CbProjectOtherBo; import com.dsk.cscec.domain.bo.CbProjectOtherBo;
import com.dsk.cscec.domain.vo.CbProjectOtherVo; import com.dsk.cscec.domain.vo.CbProjectOtherVo;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
...@@ -22,5 +23,7 @@ public interface CbProjectOtherService extends IService<CbProjectOther> { ...@@ -22,5 +23,7 @@ public interface CbProjectOtherService extends IService<CbProjectOther> {
List<Map<String, Object>> listByLevel(Long projectId, int i); List<Map<String, Object>> listByLevel(Long projectId, int i);
List<CbProjectOtherVo> selectDataList(CbProjectOtherBo projectOtherBo); List<CbProjectOtherVo> selectDataList(CbProjectOtherBo projectOtherBo);
void projectOtherDataAnalysis(CbProjectBaseBo baseBo) throws Exception;
} }
...@@ -12,7 +12,6 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; ...@@ -12,7 +12,6 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dsk.common.excel.ExcelResult; import com.dsk.common.excel.ExcelResult;
import com.dsk.common.excel.ExcelUtils;
import com.dsk.common.utils.poi.ExcelUtil; import com.dsk.common.utils.poi.ExcelUtil;
import com.dsk.cscec.constant.CbProjectConstants; import com.dsk.cscec.constant.CbProjectConstants;
import com.dsk.cscec.domain.*; import com.dsk.cscec.domain.*;
...@@ -65,7 +64,7 @@ public class CbProjectOtherServiceImpl extends ServiceImpl<CbProjectOtherMapper, ...@@ -65,7 +64,7 @@ public class CbProjectOtherServiceImpl extends ServiceImpl<CbProjectOtherMapper,
CbProjectRecord byId = cbProjectRecordService.getById(projectId); CbProjectRecord byId = cbProjectRecordService.getById(projectId);
Assert.notNull(byId, "项目信息不能为空"); Assert.notNull(byId, "项目信息不能为空");
Integer cbStage = byId.getCbStage(); Integer cbStage = byId.getCbStage();
CbProjectOtherImportListener importListener = new CbProjectOtherImportListener(projectId, cbStage); CbProjectOtherImportListener importListener = new CbProjectOtherImportListener(projectId, 0L);
EasyExcel.read(file.getInputStream(), CbProjectOtherImportVo.class, importListener).sheet().doRead(); EasyExcel.read(file.getInputStream(), CbProjectOtherImportVo.class, importListener).sheet().doRead();
ExcelResult<CbProjectOtherImportVo> result = importListener.getExcelResult(); ExcelResult<CbProjectOtherImportVo> result = importListener.getExcelResult();
String analysis = result.getAnalysis(); String analysis = result.getAnalysis();
...@@ -83,6 +82,7 @@ public class CbProjectOtherServiceImpl extends ServiceImpl<CbProjectOtherMapper, ...@@ -83,6 +82,7 @@ public class CbProjectOtherServiceImpl extends ServiceImpl<CbProjectOtherMapper,
rootProjectOther.setParentId(0L); rootProjectOther.setParentId(0L);
rootProjectOther.setProjectId(projectId); rootProjectOther.setProjectId(projectId);
rootProjectOther.setCbStage(cbStage); rootProjectOther.setCbStage(cbStage);
rootProjectOther.setCbProjectFileId(0L);
LambdaQueryWrapper<CbProjectOther> tWrapper = Wrappers.lambdaQuery(rootProjectOther); LambdaQueryWrapper<CbProjectOther> tWrapper = Wrappers.lambdaQuery(rootProjectOther);
CbProjectOther rootOther = this.getOne(tWrapper); CbProjectOther rootOther = this.getOne(tWrapper);
...@@ -156,6 +156,7 @@ public class CbProjectOtherServiceImpl extends ServiceImpl<CbProjectOtherMapper, ...@@ -156,6 +156,7 @@ public class CbProjectOtherServiceImpl extends ServiceImpl<CbProjectOtherMapper,
*@date: 2024/2/23 18:03 *@date: 2024/2/23 18:03
*/ */
@Async @Async
@Override
public void projectOtherDataAnalysis(CbProjectBaseBo baseBo) throws Exception { public void projectOtherDataAnalysis(CbProjectBaseBo baseBo) throws Exception {
// 项目Id // 项目Id
Long projectId = baseBo.getProjectId(); Long projectId = baseBo.getProjectId();
...@@ -165,9 +166,9 @@ public class CbProjectOtherServiceImpl extends ServiceImpl<CbProjectOtherMapper, ...@@ -165,9 +166,9 @@ public class CbProjectOtherServiceImpl extends ServiceImpl<CbProjectOtherMapper,
// 查询其他费用导入文件 // 查询其他费用导入文件
List<CbProjectFile> projectFileList = projectFileService.list(Wrappers.<CbProjectFile>lambdaQuery() List<CbProjectFile> projectFileList = projectFileService.list(Wrappers.<CbProjectFile>lambdaQuery()
.eq(CbProjectFile::getProjectId, baseBo.getProjectId()) .eq(CbProjectFile::getProjectId, baseBo.getProjectId())
.eq(CbProjectFile::getCbType, CbProjectConstants.CB_TYPE_OTHER_PROJECT) .eq(CbProjectFile::getCbType, CbProjectConstants.CB_TYPE_SCENE_EXPENSE)
.eq(CbProjectFile::getCbStage, baseBo.getCbStage()) .eq(CbProjectFile::getCbStage, baseBo.getCbStage())
.in(CbProjectFile::getFileParseStatus, Arrays.asList(1, 3))); .in(CbProjectFile::getFileParseStatus, Arrays.asList(0)));
if (ObjectUtils.isEmpty(projectFileList)) { if (ObjectUtils.isEmpty(projectFileList)) {
return; return;
} }
...@@ -183,24 +184,18 @@ public class CbProjectOtherServiceImpl extends ServiceImpl<CbProjectOtherMapper, ...@@ -183,24 +184,18 @@ public class CbProjectOtherServiceImpl extends ServiceImpl<CbProjectOtherMapper,
break; break;
} }
//解析数据
List<CbProjectOther> importList = new ExcelUtils<>(CbProjectOther.class).importExcelAllSheet(inputStream, 1);
if (importList.isEmpty()) {
file.setFileParseStatus(3);
file.setFailRemark("表格中不存在待导入数据!");
projectFileService.updateById(file);
break;
}
// 文件名称 // 文件名称
String name = file.getFileName(); String name = file.getFileName();
name = FileNameUtil.getPrefix(name);
// 文件Id
Long fileId = file.getId();
if ("其他费".equals(name)) { if ("其他费".equals(name)) {
totalDataAnalysis(inputStream, name, file, projectId, cbStage); totalDataAnalysis(inputStream, name, file, projectId, cbStage);
break;
} }
name = FileNameUtil.getPrefix(name);
//解析数据 //解析数据
ExcelResult<CbProjectOtherImportVo> importVoExcelResult = ExcelResult<CbProjectOtherImportVo> importVoExcelResult =
ExcelUtil.importExcel(inputStream, CbProjectOtherImportVo.class,new CbProjectOtherImportListener(projectId, cbStage)); ExcelUtil.importExcel(inputStream, CbProjectOtherImportVo.class,new CbProjectOtherImportListener(projectId, fileId));
log.info(importVoExcelResult.getAnalysis()); log.info(importVoExcelResult.getAnalysis());
List<CbProjectOtherImportVo> importVoList = importVoExcelResult.getList(); List<CbProjectOtherImportVo> importVoList = importVoExcelResult.getList();
if (CollectionUtil.isEmpty(importVoList)) { if (CollectionUtil.isEmpty(importVoList)) {
...@@ -217,6 +212,7 @@ public class CbProjectOtherServiceImpl extends ServiceImpl<CbProjectOtherMapper, ...@@ -217,6 +212,7 @@ public class CbProjectOtherServiceImpl extends ServiceImpl<CbProjectOtherMapper,
rootProjectOther.setParentId(0L); rootProjectOther.setParentId(0L);
rootProjectOther.setProjectId(projectId); rootProjectOther.setProjectId(projectId);
rootProjectOther.setCbStage(cbStage); rootProjectOther.setCbStage(cbStage);
rootProjectOther.setCbProjectFileId(0L);
LambdaQueryWrapper<CbProjectOther> tWrapper = Wrappers.lambdaQuery(rootProjectOther); LambdaQueryWrapper<CbProjectOther> tWrapper = Wrappers.lambdaQuery(rootProjectOther);
CbProjectOther rootOther = this.getOne(tWrapper); CbProjectOther rootOther = this.getOne(tWrapper);
...@@ -282,6 +278,7 @@ public class CbProjectOtherServiceImpl extends ServiceImpl<CbProjectOtherMapper, ...@@ -282,6 +278,7 @@ public class CbProjectOtherServiceImpl extends ServiceImpl<CbProjectOtherMapper,
BeanUtil.copyProperties(importVo, projectExpenseSummary); BeanUtil.copyProperties(importVo, projectExpenseSummary);
projectExpenseSummary.setProjectId(projectId); projectExpenseSummary.setProjectId(projectId);
projectExpenseSummary.setCbStage(cbStage); projectExpenseSummary.setCbStage(cbStage);
projectExpenseSummary.setDataType(1);
projectExpenseSummaryService.save(projectExpenseSummary); projectExpenseSummaryService.save(projectExpenseSummary);
} }
} }
......
...@@ -22,6 +22,7 @@ import com.dsk.cscec.domain.vo.CbProjectRecordSearchVo; ...@@ -22,6 +22,7 @@ import com.dsk.cscec.domain.vo.CbProjectRecordSearchVo;
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.CbProjectExpenseSummaryService; import com.dsk.cscec.service.CbProjectExpenseSummaryService;
import com.dsk.cscec.service.CbProjectOtherService;
import com.dsk.cscec.service.CbProjectRecordService; import com.dsk.cscec.service.CbProjectRecordService;
import com.dsk.cscec.service.CbSummaryService; import com.dsk.cscec.service.CbSummaryService;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -51,6 +52,8 @@ public class CbProjectRecordServiceImpl extends ServiceImpl<CbProjectRecordMappe ...@@ -51,6 +52,8 @@ public class CbProjectRecordServiceImpl extends ServiceImpl<CbProjectRecordMappe
private CbSummaryService cbSummaryService; private CbSummaryService cbSummaryService;
@Resource @Resource
private CbProjectExpenseSummaryService projectExpenseSummaryService; private CbProjectExpenseSummaryService projectExpenseSummaryService;
@Resource
private CbProjectOtherService projectOtherService;
/** /**
* 新增项目 * 新增项目
...@@ -128,6 +131,7 @@ public class CbProjectRecordServiceImpl extends ServiceImpl<CbProjectRecordMappe ...@@ -128,6 +131,7 @@ public class CbProjectRecordServiceImpl extends ServiceImpl<CbProjectRecordMappe
dataAnalysisComponent.quantitySummaryDataAnalysis(projectBaseBo); dataAnalysisComponent.quantitySummaryDataAnalysis(projectBaseBo);
//措施项目 //措施项目
//其他项目 //其他项目
projectOtherService.projectOtherDataAnalysis(projectBaseBo);
//现场经费 //现场经费
projectExpenseSummaryService.parseSceneExpenseData(projectId,cbStage,username); projectExpenseSummaryService.parseSceneExpenseData(projectId,cbStage,username);
//成本汇总 //成本汇总
......
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