Commit c8ae06e9 authored by huangjie's avatar huangjie

Merge branch 'V20231129-中建一局二公司' of http://192.168.60.201/root/dsk-operate-sys...

Merge branch 'V20231129-中建一局二公司' of http://192.168.60.201/root/dsk-operate-sys into V20231129-中建一局二公司
parents 5071c614 ee1bb6f2
......@@ -17,6 +17,7 @@ import com.dsk.common.helper.LoginHelper;
import com.dsk.common.utils.poi.ExcelUtil;
import com.dsk.common.utils.redis.RedisUtils;
import com.dsk.cscec.domain.CbCostMeasure;
import com.dsk.cscec.domain.CbProjectExpenseSummary;
import com.dsk.cscec.domain.bo.CbCostMeasureActualBo;
import com.dsk.cscec.domain.bo.CbCostMeasureActualPushBo;
import com.dsk.cscec.domain.bo.CbCostMeasureActualSaveBo;
......@@ -24,6 +25,7 @@ import com.dsk.cscec.domain.vo.CbCostMeasureActualVo;
import com.dsk.cscec.domain.vo.CbCostMeasuresImportVo;
import com.dsk.cscec.domain.vo.CbCostMeasuresItemVo;
import com.dsk.cscec.listener.ProjectCostMeasureImportListener;
import com.dsk.cscec.service.CbProjectExpenseSummaryService;
import com.dsk.cscec.service.ICbCostMeasureService;
import com.dsk.system.domain.vo.SysUserImportVo;
import com.dsk.system.listener.SysUserImportListener;
......@@ -38,8 +40,10 @@ import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* 措施费导入
......@@ -55,6 +59,10 @@ public class CbCostMeasureController {
private ICbCostMeasureService cbCostMeasureService;
@Autowired
private CbProjectExpenseSummaryService cbProjectExpenseSummaryService;
/**
* 措施费一级大类
* 根据项目查询措施费一级大类
......@@ -150,7 +158,22 @@ public class CbCostMeasureController {
// @SaCheckPermission("system:user:import")
@PostMapping(value = "/importData", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public R<Void> importData(@RequestPart("file") MultipartFile file, Long projectId) throws Exception {
cbCostMeasureService.importExcelData(file,projectId);
String name = file.getOriginalFilename();
cbCostMeasureService.importExcelData(file.getInputStream(),name,null,projectId);
return R.ok();
}
/**
* 措施费导入数据
*
* @param projectId 项目id
*/
@SaIgnore
@Log(title = "措施费导入", businessType = BusinessType.IMPORT)
@PostMapping(value = "/parseCbCostMeasureFile")
public R<Void> parseCbCostMeasureFile(Long projectId) throws Exception {
cbCostMeasureService.parseCbCostMeasureFile(projectId);
return R.ok();
}
......@@ -168,11 +191,23 @@ public class CbCostMeasureController {
@PostMapping(value = "/summary/importData", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public R<Void> importSummaryData(@RequestPart("file") MultipartFile file, Long projectId) throws Exception {
Integer dataType=2;
cbCostMeasureService.importExcelSummaryData(file,projectId,dataType);
cbCostMeasureService.importExcelSummaryData(file.getInputStream(),projectId,null,dataType);
return R.ok();
}
@SaIgnore
@Log(title = "措施费汇总获取")
// @SaCheckPermission("system:user:import")
@PostMapping(value = "/summary/data")
public R<List<CbProjectExpenseSummary>> summaryData(Long projectId) throws Exception {
Integer dataType=2;
List<CbProjectExpenseSummary> cbProjectExpenseSummaries = cbProjectExpenseSummaryService.queryCbSceneExpenseSummaryDataByType(projectId, dataType);
return R.ok(cbProjectExpenseSummaries);
}
public static void main(String[] args) throws FileNotFoundException {
List list =new ArrayList<>();
......@@ -180,7 +215,7 @@ public class CbCostMeasureController {
FileInputStream inputStream=new FileInputStream(file);
ExcelResult<CbCostMeasuresImportVo> result = ExcelUtil.importExcel(inputStream, CbCostMeasuresImportVo.class, new ProjectCostMeasureImportListener(1L,1));
ExcelResult<CbCostMeasuresImportVo> result = ExcelUtil.importExcel(inputStream, CbCostMeasuresImportVo.class, new ProjectCostMeasureImportListener(1L));
String analysis = result.getAnalysis();
List<CbCostMeasuresImportVo> list1 = result.getList();
......
......@@ -28,7 +28,7 @@ public class CbCostMeasure {
/**
* 成本阶段( 0:标前成本、1:标后成本、2:转固成本)
*/
private Integer cbStage;
private Long projectFileId;
/**
* 父项id
......
package com.dsk.cscec.domain;
import com.baomidou.mybatisplus.annotation.FieldStrategy;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.dsk.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.apache.ibatis.type.JdbcType;
import java.io.Serializable;
......@@ -54,6 +57,7 @@ public class CbProjectFile extends BaseEntity implements Serializable {
/**
* 失败备注
*/
@TableField(value = "fail_remark", updateStrategy = FieldStrategy.IGNORED, jdbcType = JdbcType.VARCHAR)
private String failRemark;
/**
* 删除状态(0:否、1:待删除、2:是)
......
......@@ -32,14 +32,12 @@ import java.util.regex.Pattern;
public class ProjectCostMeasureImportListener extends AnalysisEventListener<CbCostMeasuresImportVo> implements ExcelListener<CbCostMeasuresImportVo> {
private final CbCostMeasureServiceImpl cbCostMeasureService;
//
// private final String password;
private final Long projectId;
private final Integer cbStage;
private List<CbCostMeasuresImportVo> dataList = new ArrayList<>();
private List<String> errList = new ArrayList<>();
// private final String operName;
private int successNum = 0;
......@@ -47,10 +45,8 @@ public class ProjectCostMeasureImportListener extends AnalysisEventListener<CbCo
private final StringBuilder successMsg = new StringBuilder();
private final StringBuilder failureMsg = new StringBuilder();
public ProjectCostMeasureImportListener(Long projectId, Integer cbStage) {
// String initPassword = SpringUtils.getBean(ISysConfigService.class).selectConfigByKey("sys.user.initPassword");
public ProjectCostMeasureImportListener(Long projectId) {
this.cbCostMeasureService = SpringUtils.getBean(CbCostMeasureServiceImpl.class);
this.cbStage = cbStage;
this.projectId = projectId;
// this.operName = LoginHelper.getUsername();
}
......@@ -62,11 +58,14 @@ public class ProjectCostMeasureImportListener extends AnalysisEventListener<CbCo
if (StrUtil.isEmpty(importVo.getItemContent())) {
failureNum++;
failureMsg.append("<br/>" + rowIndex + "行 解析失败:清单内容不能为空");
errList.add(failureMsg.toString());
return;
}
String number = importVo.getNumber();
if (StrUtil.isEmpty(number)) {
failureNum++;
failureMsg.append("<br/>" + rowIndex + "行 解析失败:序号不能为空");
errList.add(failureMsg.toString());
}
Boolean numberMatch = false;
......@@ -79,6 +78,7 @@ public class ProjectCostMeasureImportListener extends AnalysisEventListener<CbCo
} else {
failureNum++;
failureMsg.append("<br/>" + rowIndex + "行 解析失败:序号格式错误");
errList.add(failureMsg.toString());
}
......@@ -186,7 +186,7 @@ public class ProjectCostMeasureImportListener extends AnalysisEventListener<CbCo
public String getAnalysis() {
if (failureNum > 0) {
failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");
throw new ServiceException(failureMsg.toString());
// throw new ServiceException(failureMsg.toString());
} else {
successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
}
......@@ -200,7 +200,7 @@ public class ProjectCostMeasureImportListener extends AnalysisEventListener<CbCo
@Override
public List<String> getErrorList() {
return null;
return errList;
}
};
}
......
......@@ -35,10 +35,11 @@ public class ProjectCostMeasureSummaryImportListener extends AnalysisEventListen
// private final String password;
private final Long projectId;
private final Integer cbStage;
private final Long fileId;
private final Integer dataType;
private List<CbProjectExpenseSummaryImportVo> dataList = new ArrayList<>();
private List<String> errorList = new ArrayList<>();
// private final String operName;
......@@ -47,9 +48,9 @@ public class ProjectCostMeasureSummaryImportListener extends AnalysisEventListen
private final StringBuilder successMsg = new StringBuilder();
private final StringBuilder failureMsg = new StringBuilder();
public ProjectCostMeasureSummaryImportListener(Long projectId, Integer cbStage,Integer dataType) {
public ProjectCostMeasureSummaryImportListener(Long projectId, Long fileId,Integer dataType) {
this.cbProjectExpenseSummaryService = SpringUtils.getBean(CbProjectExpenseSummaryService.class);
this.cbStage = cbStage;
this.fileId = fileId;
this.projectId = projectId;
this.dataType=dataType;
}
......@@ -60,10 +61,17 @@ public class ProjectCostMeasureSummaryImportListener extends AnalysisEventListen
CbProjectExpenseSummary cbProjectExpenseSummary=new CbProjectExpenseSummary();
BeanUtil.copyProperties(importVo,cbProjectExpenseSummary);
cbProjectExpenseSummary.setProjectId(projectId);
cbProjectExpenseSummary.setCbStage(cbStage);
cbProjectExpenseSummary.setProjectFileId(fileId);
cbProjectExpenseSummary.setDataType(dataType);
cbProjectExpenseSummary.setCreateBy(LoginHelper.getUsername());
cbProjectExpenseSummaryService.save(cbProjectExpenseSummary);
// cbProjectExpenseSummary.setCreateBy(LoginHelper.getUsername());
boolean save = cbProjectExpenseSummaryService.save(cbProjectExpenseSummary);
if(!save){
String errmsg = context.readRowHolder().getRowIndex() + " error";
log.debug("ProjectCostMeasureSummaryImportListener.invoke() "+errmsg);
errorList.add(errmsg);
}
successNum+=1;
dataList.add(importVo);
}
......@@ -94,7 +102,7 @@ public class ProjectCostMeasureSummaryImportListener extends AnalysisEventListen
@Override
public List<String> getErrorList() {
return null;
return errorList;
}
};
}
......
......@@ -22,4 +22,7 @@ public interface CbProjectExpenseSummaryService extends IService<CbProjectExpens
* @return 现场经费汇总数据
*/
List<CbProjectExpenseSummary> getCbSceneExpenseSummaryData(Long projectId);
List<CbProjectExpenseSummary> queryCbSceneExpenseSummaryDataByType(Long projectId,Integer dataType);
}
......@@ -56,4 +56,15 @@ public interface CbProjectFileService extends IService<CbProjectFile> {
*/
List<CbProjectFile> selectAnalysisList(Long projectId, Integer cbType, Integer cbStage);
/**
* 更新项目文件状态
*
* @param projectId 项目ID
* @param cbType CB型
* @param fileId 文件ID文件ID
* @param errmsg RMSG
* @return boolean
*/
boolean UpdateProjectFileStatus(Long fileId,String errmsg,Integer status);
}
package com.dsk.cscec.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dsk.cscec.domain.CbSummaryActualLock;
/**
* 成本汇总-每月成本锁定(CbSummaryActualLock)表服务接口
*
* @author makejava
* @since 2024-02-27 16:16:09
*/
public interface CbSummaryActualLockService extends IService<CbSummaryActualLock> {
}
......@@ -5,6 +5,7 @@ import com.dsk.common.core.domain.PageQuery;
import com.dsk.common.core.domain.entity.SysDictData;
import com.dsk.common.core.page.TableDataInfo;
import com.dsk.cscec.domain.CbCostMeasure;
import com.dsk.cscec.domain.CbProjectExpenseSummary;
import com.dsk.cscec.domain.bo.CbCostMeasureActualBo;
import com.dsk.cscec.domain.bo.CbCostMeasureActualPushBo;
import com.dsk.cscec.domain.bo.CbCostMeasureActualSaveBo;
......@@ -12,6 +13,7 @@ import com.dsk.cscec.domain.vo.CbCostMeasureActualVo;
import com.dsk.cscec.domain.vo.CbCostMeasuresItemVo;
import org.springframework.web.multipart.MultipartFile;
import java.io.InputStream;
import java.util.List;
import java.util.Map;
......@@ -23,7 +25,7 @@ import java.util.Map;
*/
public interface ICbCostMeasureService extends IService<CbCostMeasure> {
void importExcelData(MultipartFile file, Long projectId);
void importExcelData(InputStream inputStream, String fileName,Long fileId, Long projectId);
List<Map<String, Object>> listByLevel(Long projectId, int i);
......@@ -33,6 +35,10 @@ public interface ICbCostMeasureService extends IService<CbCostMeasure> {
void pushCostMeasureActual(CbCostMeasureActualPushBo pushBo);
void importExcelSummaryData(MultipartFile file, Long projectId,Integer dataType);
List<String> importExcelSummaryData(InputStream inputStream, Long projectId,Long fileId, Integer dataType);
void parseCbCostMeasureFile(Long projectId);
boolean reparseCbCostMeasureFile(Long projectId,Long projectFileId);
}
......@@ -6,45 +6,37 @@ import cn.hutool.core.io.file.FileNameUtil;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.ReUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpUtil;
import com.alibaba.excel.EasyExcel;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
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.dsk.common.core.domain.PageQuery;
import com.dsk.common.core.domain.entity.SysDictData;
import com.dsk.common.core.page.TableDataInfo;
import com.dsk.common.excel.ExcelResult;
import com.dsk.common.helper.LoginHelper;
import com.dsk.common.utils.JsonUtils;
import com.dsk.common.utils.StringUtils;
import com.dsk.common.utils.poi.ExcelUtil;
import com.dsk.cscec.domain.CbCostMeasureActual;
import com.dsk.cscec.domain.CbProjectRecord;
import com.dsk.cscec.domain.DCustomer;
import com.dsk.cscec.constant.CbProjectConstants;
import com.dsk.cscec.domain.*;
import com.dsk.cscec.domain.bo.CbCostMeasureActualBo;
import com.dsk.cscec.domain.bo.CbCostMeasureActualPushBo;
import com.dsk.cscec.domain.bo.CbCostMeasureActualSaveBo;
import com.dsk.cscec.domain.vo.CbCostMeasureActualVo;
import com.dsk.cscec.domain.vo.CbCostMeasuresImportVo;
import com.dsk.cscec.domain.vo.CbCostMeasuresItemVo;
import com.dsk.cscec.domain.vo.CbProjectExpenseSummaryImportVo;
import com.dsk.cscec.listener.ProjectCostMeasureImportListener;
import com.dsk.cscec.listener.ProjectCostMeasureSummaryImportListener;
import com.dsk.cscec.mapper.CbCostMeasureActualMapper;
import com.dsk.cscec.service.CbProjectRecordService;
import com.dsk.cscec.service.ICbCostMeasureActualService;
import com.dsk.cscec.service.ICbCostMeasureService;
import com.dsk.cscec.service.*;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.dsk.cscec.mapper.CbCostMeasureMapper;
import com.dsk.cscec.domain.CbCostMeasure;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.transaction.annotation.Transactional;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
......@@ -67,35 +59,48 @@ public class CbCostMeasureServiceImpl extends ServiceImpl<CbCostMeasureMapper, C
@Autowired
private ICbCostMeasureActualService cbCostMeasureActualService;
@Autowired
private CbProjectFileService cbProjectFileService;
@Autowired
private CbProjectExpenseSummaryService cbProjectExpenseSummaryService;
@SneakyThrows
@Override
public void importExcelData(MultipartFile file, Long projectId) {
String name = file.getOriginalFilename();
name = FileNameUtil.getPrefix(name);
CbProjectRecord byId = cbProjectRecordService.getById(projectId);
Assert.notNull(byId, "项目信息不能为空");
Integer cbStage = byId.getCbStage();
ProjectCostMeasureImportListener importListener = new ProjectCostMeasureImportListener(projectId, cbStage);
EasyExcel.read(file.getInputStream(), CbCostMeasuresImportVo.class, importListener).sheet().doRead();
public void importExcelData(InputStream inputStream, String fileName, Long fileId, Long projectId) {
// 检查项目
checkProjectExist(projectId);
ProjectCostMeasureImportListener importListener = new ProjectCostMeasureImportListener(projectId);
EasyExcel.read(inputStream, CbCostMeasuresImportVo.class, importListener).sheet().doRead();
ExcelResult<CbCostMeasuresImportVo> result = importListener.getExcelResult();
String analysis = result.getAnalysis();
List<CbCostMeasuresImportVo> list = result.getList();
if (CollectionUtil.isEmpty(list)) {
List<String> errorList = result.getErrorList();
if (CollectionUtil.isNotEmpty(errorList) || CollectionUtil.isEmpty(list)) {
//解析失败
log.debug(">>>>解析失败" + list.size());
//todo 解析失败更新文件备注
cbProjectFileService.UpdateProjectFileStatus(fileId, analysis, CbProjectConstants.PROJECT_FILE_STATUS_PARSE_FAIL);
return;
}
log.debug(">>>>" + list.size());
//删除 该项目历史解析数据
LambdaQueryWrapper<CbCostMeasure> summaryLambdaQueryWrapper = Wrappers.lambdaQuery();
summaryLambdaQueryWrapper.eq(CbCostMeasure::getProjectId, projectId);
summaryLambdaQueryWrapper.eq(ObjectUtil.isNotEmpty(fileId), CbCostMeasure::getProjectFileId, fileId);
this.remove(summaryLambdaQueryWrapper);
CbCostMeasure rootCbCostMeasure = new CbCostMeasure();
rootCbCostMeasure.setItemContent(name);
rootCbCostMeasure.setItemContent(fileName);
rootCbCostMeasure.setLevel(0);
rootCbCostMeasure.setParentId(0L);
rootCbCostMeasure.setProjectId(projectId);
rootCbCostMeasure.setCbStage(cbStage);
if (ObjectUtil.isNotEmpty(fileId)) {
rootCbCostMeasure.setProjectFileId(fileId);
}
LambdaQueryWrapper<CbCostMeasure> tWrapper = Wrappers.lambdaQuery(rootCbCostMeasure);
CbCostMeasure rootMeasure = this.getOne(tWrapper);
......@@ -112,7 +117,7 @@ public class CbCostMeasureServiceImpl extends ServiceImpl<CbCostMeasureMapper, C
CbCostMeasure cbCostMeasure = new CbCostMeasure();
cbCostMeasure.setProjectId(projectId);
cbCostMeasure.setCbStage(cbStage);
cbCostMeasure.setProjectFileId(fileId);
//保存一级节点
if (ReUtil.isMatch(firstPattern, number) || ReUtil.isMatch(pattern3, number)) {
BeanUtil.copyProperties(importVo, cbCostMeasure);
......@@ -122,7 +127,7 @@ public class CbCostMeasureServiceImpl extends ServiceImpl<CbCostMeasureMapper, C
} else if (ReUtil.isMatch(secondPattern, number)) {
BeanUtil.copyProperties(importVo, cbCostMeasure);
// 根据no查询父级节点
CbCostMeasure parentCbCostMeasure = getCbCostMeasure(rootMeasuresId, number, projectId, cbStage);
CbCostMeasure parentCbCostMeasure = getCbCostMeasure(rootMeasuresId, number, projectId);
String[] split = number.split("\\.");
cbCostMeasure.setLevel(split.length);
cbCostMeasure.setParentId(parentCbCostMeasure.getId());
......@@ -131,6 +136,8 @@ public class CbCostMeasureServiceImpl extends ServiceImpl<CbCostMeasureMapper, C
cbCostMeasure.setNo(newNo);
this.save(cbCostMeasure);
}
cbProjectFileService.UpdateProjectFileStatus(fileId, null, CbProjectConstants.PROJECT_FILE_STATUS_PARSE_SUCCESS);
}
}
......@@ -144,10 +151,9 @@ public class CbCostMeasureServiceImpl extends ServiceImpl<CbCostMeasureMapper, C
CbCostMeasure rootCbCostMeasure = new CbCostMeasure();
rootCbCostMeasure.setParentId(0L);
rootCbCostMeasure.setProjectId(projectId);
rootCbCostMeasure.setCbStage(byId.getCbStage());
QueryWrapper<CbCostMeasure> tWrapper = Wrappers.query(rootCbCostMeasure);
tWrapper.select("id","item_content as itemContent");
tWrapper.select("id", "item_content as itemContent");
tWrapper.orderByAsc("id");
List<Map<String, Object>> mapList = this.listMaps(tWrapper);
......@@ -161,8 +167,6 @@ public class CbCostMeasureServiceImpl extends ServiceImpl<CbCostMeasureMapper, C
Assert.notNull(costMeasureActualBo.getProjectId(), "项目ID不能为空");
CbProjectRecord byId = cbProjectRecordService.getById(costMeasureActualBo.getProjectId());
Assert.notNull(byId, "项目信息不能为空");
costMeasureActualBo.setCbStage(byId.getCbStage());
//查询项目某项措施费所有计划成本
dataList = baseMapper.selectListByProjectAndNo(costMeasureActualBo);
// if (CollectionUtil.isEmpty(dataList)) {
......@@ -182,10 +186,10 @@ public class CbCostMeasureServiceImpl extends ServiceImpl<CbCostMeasureMapper, C
@Override
public void saveBatchCostMeasureActual(List<CbCostMeasureActualSaveBo> boList) {
List<CbCostMeasureActual> saveList=new ArrayList<>();
List<CbCostMeasureActual> saveList = new ArrayList<>();
for (CbCostMeasureActualSaveBo cbCostMeasureActualSaveBo : boList) {
CbCostMeasureActual cbCostMeasureActual =new CbCostMeasureActual();
BeanUtil.copyProperties(cbCostMeasureActualSaveBo,cbCostMeasureActual);
CbCostMeasureActual cbCostMeasureActual = new CbCostMeasureActual();
BeanUtil.copyProperties(cbCostMeasureActualSaveBo, cbCostMeasureActual);
cbCostMeasureActual.setDelFlag(0);
cbCostMeasureActual.setUpdateId(LoginHelper.getUserId());
cbCostMeasureActual.setUpdateUser(LoginHelper.getUsername());
......@@ -199,8 +203,7 @@ public class CbCostMeasureServiceImpl extends ServiceImpl<CbCostMeasureMapper, C
//todo 推送到Ipm系统
CbCostMeasureActual cbCostMeasureActual =new CbCostMeasureActual();
CbCostMeasureActual cbCostMeasureActual = new CbCostMeasureActual();
cbCostMeasureActual.setId(pushBo.getId());
cbCostMeasureActual.setPushTime(new Date());
cbCostMeasureActual.setPushDataJson(JsonUtils.toJsonString(pushBo));
......@@ -209,12 +212,111 @@ public class CbCostMeasureServiceImpl extends ServiceImpl<CbCostMeasureMapper, C
@SneakyThrows
@Override
public void importExcelSummaryData(MultipartFile file, Long projectId,Integer dataType) {
public List<String> importExcelSummaryData(InputStream inputStream, Long projectId,Long fileId, Integer dataType) {
CbProjectRecord byId = cbProjectRecordService.getById(projectId);
Assert.notNull(byId, "项目信息不能为空");
Integer cbStage = byId.getCbStage();
ExcelUtil.importExcel(file.getInputStream(), CbProjectExpenseSummaryImportVo.class,new ProjectCostMeasureSummaryImportListener(projectId,cbStage,dataType));
// 删除历史数据
LambdaUpdateWrapper<CbProjectExpenseSummary> summaryLambdaQueryWrapper = Wrappers.lambdaUpdate();
summaryLambdaQueryWrapper.eq(CbProjectExpenseSummary::getProjectId, projectId);
summaryLambdaQueryWrapper.eq(CbProjectExpenseSummary::getDataType, 2);
cbProjectExpenseSummaryService.remove(summaryLambdaQueryWrapper);
ExcelResult<CbProjectExpenseSummaryImportVo> excelResult = ExcelUtil.importExcel(inputStream, CbProjectExpenseSummaryImportVo.class, new ProjectCostMeasureSummaryImportListener(projectId, fileId, dataType));
List<String> errorList = excelResult.getErrorList();
if (CollectionUtil.isNotEmpty(errorList) || CollectionUtil.isEmpty(excelResult.getList())) {
return errorList;
}
return null;
}
@Transactional(rollbackFor = Exception.class)
@Override
public void parseCbCostMeasureFile(Long projectId) {
// 检查项目
checkProjectExist(projectId);
//获取项目待解析文件
List<CbProjectFile> cbProjectFiles = new ArrayList<>();
cbProjectFiles = cbProjectFileService.list(new LambdaQueryWrapper<CbProjectFile>()
.eq(CbProjectFile::getProjectId, projectId)
.eq(CbProjectFile::getFileParseStatus, CbProjectConstants.PROJECT_FILE_STATUS_PARSING)
.eq(CbProjectFile::getCbType, CbProjectConstants.CB_TYPE_MEASURE_PROJECT)
);
if (CollectionUtil.isEmpty(cbProjectFiles)) {
log.debug("措施费数据文件不存在");
return;
}
for (CbProjectFile cbProjectFile : cbProjectFiles) {
String fileName = cbProjectFile.getFileName();
String prefix = FileNameUtil.getPrefix(fileName);
// 解析汇总
if ("措施费".equals(prefix)) {
byte[] bytes = HttpUtil.downloadBytes(cbProjectFile.getFileOssUrl());
InputStream inputStream = new ByteArrayInputStream(bytes);
List<String> errlist = importExcelSummaryData(inputStream, projectId,cbProjectFile.getId(), 2);
if (CollectionUtil.isNotEmpty(errlist)) {
cbProjectFile.setFileParseStatus(CbProjectConstants.PROJECT_FILE_STATUS_PARSE_FAIL);
} else {
// 修改文件解析状态
cbProjectFile.setFileParseStatus(CbProjectConstants.PROJECT_FILE_STATUS_PARSE_SUCCESS);
}
cbProjectFileService.updateById(cbProjectFile);
} else {
byte[] bytes = HttpUtil.downloadBytes(cbProjectFile.getFileOssUrl());
InputStream inputStream = new ByteArrayInputStream(bytes);
importExcelData(inputStream, prefix, cbProjectFile.getId(), projectId);
}
}
}
private void checkProjectExist(Long projectId){
CbProjectRecord byId = cbProjectRecordService.getById(projectId);
Assert.notNull(byId, "项目信息不能为空");
}
@Override
public boolean reparseCbCostMeasureFile(Long projectId, Long projectFileId) {
// 查询项目
CbProjectRecord byId = cbProjectRecordService.getById(projectId);
Assert.notNull(byId, "项目信息不能为空");
List<CbProjectFile> cbProjectFiles = new ArrayList<>();
Assert.notNull(projectFileId, "措施费文件ID不能为空");
if (ObjectUtil.isNotEmpty(projectFileId)) {
CbProjectFile cbProjectFile = cbProjectFileService.getById(projectFileId);
Assert.notNull(cbProjectFile, "措施费导入文件不存在");
String fileName = cbProjectFile.getFileName();
String prefix = FileNameUtil.getPrefix(fileName);
// 解析汇总
if ("措施费".equals(prefix)) {
byte[] bytes = HttpUtil.downloadBytes(cbProjectFile.getFileOssUrl());
InputStream inputStream = new ByteArrayInputStream(bytes);
List<String> errlist = importExcelSummaryData(inputStream, projectId,projectFileId, 2);
if (CollectionUtil.isNotEmpty(errlist)) {
cbProjectFile.setFileParseStatus(CbProjectConstants.PROJECT_FILE_STATUS_PARSE_FAIL);
} else {
// 修改文件解析状态
cbProjectFile.setFileParseStatus(CbProjectConstants.PROJECT_FILE_STATUS_PARSE_SUCCESS);
}
} else {
byte[] bytes = HttpUtil.downloadBytes(cbProjectFile.getFileOssUrl());
InputStream inputStream = new ByteArrayInputStream(bytes);
importExcelData(inputStream, prefix, cbProjectFile.getId(), projectId);
}
//更新
return true;
}
return false;
}
......@@ -226,13 +328,12 @@ public class CbCostMeasureServiceImpl extends ServiceImpl<CbCostMeasureMapper, C
* @param cbStage
* @return
*/
public CbCostMeasure getCbCostMeasure(Long rootMeasuresId, String number, Long projectId, Integer cbStage) {
public CbCostMeasure getCbCostMeasure(Long rootMeasuresId, String number, Long projectId) {
String parentNo = number.substring(0, number.lastIndexOf('.'));
parentNo = String.valueOf(rootMeasuresId).concat(".").concat(parentNo);
CbCostMeasure rootCbCostMeasure = new CbCostMeasure();
rootCbCostMeasure.setNo(parentNo);
rootCbCostMeasure.setProjectId(projectId);
rootCbCostMeasure.setCbStage(cbStage);
LambdaQueryWrapper<CbCostMeasure> tWrapper = Wrappers.lambdaQuery(rootCbCostMeasure);
CbCostMeasure rootMeasure = this.getOne(tWrapper);
return rootMeasure;
......
......@@ -139,6 +139,16 @@ public class CbProjectExpenseSummaryServiceImpl extends ServiceImpl<CbProjectExp
.eq(CbProjectExpenseSummary::getDataType, CbProjectConstants.CB_TYPE_SCENE_EXPENSE));
}
@Override
public List<CbProjectExpenseSummary> queryCbSceneExpenseSummaryDataByType(Long projectId, Integer dataType) {
//校验项目是否存在
this.checkProjectExist(projectId);
return baseMapper.selectList(new LambdaQueryWrapper<CbProjectExpenseSummary>()
.eq(CbProjectExpenseSummary::getProjectId, projectId)
.eq(CbProjectExpenseSummary::getDataType, dataType));
}
/**
* 校验项目是否存在
*
......
......@@ -167,6 +167,16 @@ public class CbProjectFileServiceImpl extends ServiceImpl<CbProjectFileMapper, C
return baseMapper.selectAnalysisList(projectId, cbType, cbStage);
}
@Override
public boolean UpdateProjectFileStatus(Long fileId, String errmsg,Integer status) {
CbProjectFile cbProjectFile=new CbProjectFile();
cbProjectFile.setId(fileId);
cbProjectFile.setFailRemark(errmsg);
cbProjectFile.setFileParseStatus(status);
boolean b = this.updateById(cbProjectFile);
return b;
}
/**
* 校验项目是否存在
*
......
......@@ -54,6 +54,8 @@ public class CbProjectRecordServiceImpl extends ServiceImpl<CbProjectRecordMappe
private CbSceneExpenseChildrenService sceneExpenseChildrenService;
@Resource
private CbProjectOtherService projectOtherService;
@Resource
private ICbCostMeasureService costMeasureService;
/**
* 新增项目
......@@ -117,7 +119,10 @@ public class CbProjectRecordServiceImpl extends ServiceImpl<CbProjectRecordMappe
baseMapper.updateById(projectRecord);
//修改所有该项目的项目文件状态:解析中
CbProjectFileServiceImpl projectFileService = new CbProjectFileServiceImpl();
projectFileService.updateBatchById(projectFileList.stream().peek(projectFile -> projectFile.setFileParseStatus(CbProjectConstants.PROJECT_FILE_STATUS_PARSING)).collect(Collectors.toList()));
projectFileService.updateBatchById(projectFileList.stream().peek(projectFile -> {
projectFile.setFileParseStatus(CbProjectConstants.PROJECT_FILE_STATUS_PARSING);
projectFile.setFailRemark(null);
}).collect(Collectors.toList()));
//TODO:调各个成本类型的解析文件方法
Integer cbStage = projectRecord.getCbStage();
......@@ -129,6 +134,7 @@ public class CbProjectRecordServiceImpl extends ServiceImpl<CbProjectRecordMappe
projectBaseBo.setCbStage(cbStage);
dataAnalysisComponent.quantitySummaryDataAnalysis(projectBaseBo);
//措施项目
costMeasureService.parseCbCostMeasureFile(projectId);
//其他项目
projectOtherService.projectOtherDataAnalysis(projectBaseBo);
//现场经费
......@@ -149,8 +155,10 @@ public class CbProjectRecordServiceImpl extends ServiceImpl<CbProjectRecordMappe
List<CbProjectFile> projectFileList = projectFileMapper.selectList(new LambdaQueryWrapper<CbProjectFile>()
.eq(CbProjectFile::getProjectId, projectId)
.eq(CbProjectFile::getCbType, cbType)
//项目文件状态:准备中
.eq(CbProjectFile::getFileParseStatus, CbProjectConstants.PROJECT_FILE_STATUS_PREPARING));
//项目文件状态:准备中or解析失败
.eq(CbProjectFile::getFileParseStatus, CbProjectConstants.PROJECT_FILE_STATUS_PREPARING)
.or()
.eq(CbProjectFile::getFileParseStatus, CbProjectConstants.PROJECT_FILE_STATUS_PARSE_FAIL));
Assert.isFalse(projectFileList.isEmpty(), cbTypeName + "至少需要上传1个文件");
return projectFileList;
}
......@@ -345,7 +353,8 @@ public class CbProjectRecordServiceImpl extends ServiceImpl<CbProjectRecordMappe
//不允许删除正在解析中的项目
Assert.isFalse(projectRecord.getProjectFileStatus().equals(CbProjectConstants.PROJECT_FILE_STATUS_PARSING)
, "存在解析中的项目,删除失败");
//TODO:各个成本类型数据和对应每月成本数据暂不做删除,项目台账列表查不出来自然也无法查看数据
//各个成本类型数据和对应每月成本数据暂不做删除,项目台账列表查不出来自然也无法查看数据
//删除项目文件记录
flag = projectFileMapper.delete(new LambdaQueryWrapper<CbProjectFile>()
......
package com.dsk.cscec.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dsk.cscec.domain.CbSummaryActualLock;
import com.dsk.cscec.mapper.CbSummaryActualLockMapper;
import com.dsk.cscec.service.CbSummaryActualLockService;
import org.springframework.stereotype.Service;
/**
* 成本汇总-每月成本锁定(CbSummaryActualLock)表服务实现类
*
* @author makejava
* @since 2024-02-27 16:16:09
*/
@Service
public class CbSummaryActualLockServiceImpl extends ServiceImpl<CbSummaryActualLockMapper, CbSummaryActualLock> implements CbSummaryActualLockService {
}
......@@ -6,7 +6,7 @@
<!--@Table cb_cost_measure-->
<id column="id" jdbcType="BIGINT" property="id" />
<result column="project_id" jdbcType="BIGINT" property="projectId" />
<result column="cb_stage" jdbcType="INTEGER" property="cbStage" />
<result column="cb_stage" jdbcType="INTEGER" property="projectFileId" />
<result column="parent_id" jdbcType="BIGINT" property="parentId" />
<result column="level" jdbcType="INTEGER" property="level" />
<result column="number" jdbcType="VARCHAR" property="number" />
......@@ -47,11 +47,9 @@
inner JOIN cb_cost_measure_actual t1 ON t1.plan_measure_id=t.id
WHERE
t.project_id=#{projectId}
AND t.cb_stage=#{cbStage}
AND t1.`month`=#{month}) t1 ON t1.plan_measure_id=t.id
WHERE
t.project_id=#{projectId}
AND t.cb_stage=#{cbStage}
AND t.`level`!=0
AND t.`no` like concat(#{id},'.%')
ORDER BY id ASC
......
......@@ -17,7 +17,7 @@
id, project_id, cb_stage, cb_type, file_name, file_oss_id, file_oss_url, file_parse_status, fail_remark,
del_flag, create_by, create_time, update_by, update_time
FROM cb_project_file
WHERE (del_flag = 0 and file_parse_status in (1,3)
WHERE (del_flag = 0 and file_parse_status = 1
and project_id=#{projectId}
<if test="cbStage != null">
and cb_stage =#{cbStage}
......
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