Commit 05b3a497 authored by chenyuefang's avatar chenyuefang

成本汇总导入

parent 1a1cc19e
...@@ -128,6 +128,13 @@ public class CbSummaryController extends BaseController { ...@@ -128,6 +128,13 @@ public class CbSummaryController extends BaseController {
} }
//导入 /**
* 解析并保存数据
* @param projectId
*/
@PostMapping("/analysisData")
public void analysisData(Long projectId){
cbSummaryService.importCbProject(projectId);
}
} }
package com.dsk.cscec.domain.vo;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* 成本汇总(CbSummary)-成本科目汇总导入Vo
*
* @author cyf
* @since 2024-02-06
*/
@Data
@NoArgsConstructor
public class CbSummaryCostAccountImportVo implements Serializable {
private static final long serialVersionUID = -20126964599875841L;
/**
* 排序
*/
private Integer sort;
/**
* 层级
*/
private Integer level;
/**
* 项目id
*/
private Long projectId;
/**
* 项目成本文件id
*/
private Long cbProjectFileId;
/**
* 成本类型(1项目汇总,2成本科目汇总)
*/
private Integer cbType = 2;
/**
* 序号
*/
@ExcelProperty(value = "序号")
private String number;
/**
* 成本科目
*/
@ExcelProperty(value = "成本科目")
private String cbName;
/**
* 不含税成本合价
*/
@ExcelProperty(value = "不含税成本合价")
private String taxExclusiveTotal;
/**
* 成本税金合价
*/
@ExcelProperty(value = "成本税金合价")
private String cbTaxesTotal;
/**
* 含税成本合价
*/
@ExcelProperty(value = "含税成本合价")
private String taxInclusiveTotal;
/**
* 成本占比
*/
@ExcelProperty(value = "成本占比")
private String cbProportion;
/**
* 含税成本平米指标
*/
@ExcelProperty(value = "含税成本平米指标")
private String taxInclusivePmTarget;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
}
package com.dsk.cscec.domain.vo; package com.dsk.cscec.domain.vo;
import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import java.io.Serializable; import java.io.Serializable;
import java.util.Date;
/** /**
* 成本汇总(CbSummary)-项目汇总导入Vo * 成本汇总(CbSummary)-项目汇总导入Vo
...@@ -18,7 +16,26 @@ import java.util.Date; ...@@ -18,7 +16,26 @@ import java.util.Date;
@NoArgsConstructor @NoArgsConstructor
public class CbSummaryProjectImportVo implements Serializable { public class CbSummaryProjectImportVo implements Serializable {
private static final long serialVersionUID = -20126964599875841L; private static final long serialVersionUID = -20126964599875841L;
/**
* 排序
*/
private Integer sort;
/**
* 层级
*/
private Integer level;
/**
* 项目id
*/
private Long projectId;
/**
* 项目成本文件id
*/
private Long cbProjectFileId;
/**
* 成本类型(1项目汇总,2成本科目汇总)
*/
private Integer cbType = 1;
/** /**
* 序号 * 序号
*/ */
......
package com.dsk.cscec.listener;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.dsk.common.excel.ExcelListener;
import com.dsk.common.excel.ExcelResult;
import com.dsk.common.exception.ServiceException;
import com.dsk.cscec.domain.vo.CbSummaryCostAccountImportVo;
import jodd.util.StringUtil;
import lombok.extern.slf4j.Slf4j;
import java.util.ArrayList;
import java.util.List;
/**
* 成本汇总-成本科目汇总自定义导入
*
* @author cyf
*/
@Slf4j
public class CbSummaryCostAccountImportListener extends AnalysisEventListener<CbSummaryCostAccountImportVo> implements ExcelListener<CbSummaryCostAccountImportVo> {
private final Long projectId;
private final Long fileId;
private ArrayList<CbSummaryCostAccountImportVo> resultList = new ArrayList<>();
private int sort = 0;
private int successNum = 0;
private int failureNum = 0;
private final StringBuilder successMsg = new StringBuilder();
private final StringBuilder failureMsg = new StringBuilder();
public CbSummaryCostAccountImportListener(Long projectId, Long fileId) {
this.projectId = projectId;
this.fileId = fileId;
}
@Override
public void invoke(CbSummaryCostAccountImportVo importVo, AnalysisContext context) {
importVo.setProjectId(projectId);
importVo.setCbProjectFileId(fileId);
importVo.setSort(++sort);
//层级处理
if (StringUtil.isNotBlank(importVo.getNumber())) {
//序号包含n个 - 为n+1级
int count = StringUtil.count(importVo.getNumber(), "-");
importVo.setLevel(count + 1);
} else {
failureNum++;
failureMsg.append("<br/>").append("第" + sort + "条数据序号为空");
return;
}
//父级数据处理
if (sort == 1) {
importVo.setLevel(0);
}
resultList.add(importVo);
}
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
}
@Override
public ExcelResult<CbSummaryCostAccountImportVo> getExcelResult() {
return new ExcelResult<CbSummaryCostAccountImportVo>() {
@Override
public String getAnalysis() {
if (failureNum > 0) {
failureMsg.insert(0, "失败原因:共 " + failureNum + " 条数据格式不正确,错误如下:");
throw new ServiceException(failureMsg.toString());
} else {
successMsg.insert(0, "成本科目汇总数据已全部解析成功!共 " + getList().size() + " 条");
}
return successMsg.toString();
}
@Override
public List<CbSummaryCostAccountImportVo> getList() {
return resultList;
}
@Override
public List<String> getErrorList() {
return null;
}
};
}
}
package com.dsk.cscec.listener;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.dsk.common.excel.ExcelListener;
import com.dsk.common.excel.ExcelResult;
import com.dsk.common.exception.ServiceException;
import com.dsk.cscec.domain.vo.CbSummaryProjectImportVo;
import jodd.util.StringUtil;
import lombok.extern.slf4j.Slf4j;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
/**
* 成本汇总-项目汇总自定义导入
*
* @author cyf
*/
@Slf4j
public class CbSummaryProjectImportListener extends AnalysisEventListener<CbSummaryProjectImportVo> implements ExcelListener<CbSummaryProjectImportVo> {
// private final CbSummaryService cbSummaryService;
private final Long projectId;
private final Long fileId;
private ArrayList<CbSummaryProjectImportVo> resultList = new ArrayList<>();
private int sort = 0;
private int successNum = 0;
private int failureNum = 0;
private final StringBuilder successMsg = new StringBuilder();
private final StringBuilder failureMsg = new StringBuilder();
public CbSummaryProjectImportListener(Long projectId, Long fileId) {
// this.cbSummaryService = SpringUtils.getBean(CbSummaryService.class);
this.projectId = projectId;
this.fileId = fileId;
}
@Override
public void invoke(CbSummaryProjectImportVo importVo, AnalysisContext context) {
//第一个序号不能为空? todo
//添加父级数据
if (sort == 0) {
CbSummaryProjectImportVo firstVo = new CbSummaryProjectImportVo();
firstVo.setLevel(0);
firstVo.setCbName("成本汇总");
firstVo.setProjectId(projectId);
firstVo.setCbProjectFileId(fileId);
firstVo.setSort(sort);
resultList.add(firstVo);
}
importVo.setProjectId(projectId);
importVo.setCbProjectFileId(fileId);
importVo.setSort(++sort);
//层级处理
if (StringUtil.isBlank(importVo.getNumber())) {//序号为空则为上一个序号不为空的子级
//按sort倒序取number不为空的最大level
Object[] objects = resultList.stream().sorted(Comparator.comparingInt(CbSummaryProjectImportVo::getSort).reversed())
.filter(vo -> StringUtil.isNotBlank(vo.getNumber())).limit(1).map(CbSummaryProjectImportVo::getLevel).toArray();
//数据序号错误 todo
Integer lastLevel = (Integer) objects[0];
importVo.setLevel(lastLevel + 1);
} else if (importVo.getNumber().matches("[\u4E00-\u9FA5]+")) {//判断是否为中文,如果是中文则为一级
importVo.setLevel(1);
} else if (importVo.getNumber().matches("^[0-9]*[1-9][0-9]*$")) {//判断是否为正整数
importVo.setLevel(Integer.valueOf(importVo.getNumber()));
}
// failureNum++;
// failureMsg.append("<br/>").append(failureNum);
resultList.add(importVo);
}
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
}
@Override
public ExcelResult<CbSummaryProjectImportVo> getExcelResult() {
return new ExcelResult<CbSummaryProjectImportVo>() {
@Override
public String getAnalysis() {
if (failureNum > 0) {
failureMsg.insert(0, "失败原因:共 " + failureNum + " 条数据格式不正确,错误如下:");
throw new ServiceException(failureMsg.toString());
} else {
successMsg.insert(0, "项目汇总数据已全部解析成功!共 " + getList().size() + " 条");
}
return successMsg.toString();
}
@Override
public List<CbSummaryProjectImportVo> getList() {
return resultList;
}
@Override
public List<String> getErrorList() {
return null;
}
};
}
}
...@@ -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.common.core.domain.R; import com.dsk.common.core.domain.R;
import com.dsk.cscec.domain.CbProjectFile;
import com.dsk.cscec.domain.CbSummary; import com.dsk.cscec.domain.CbSummary;
import com.dsk.cscec.domain.bo.CbSummaryActualBo; import com.dsk.cscec.domain.bo.CbSummaryActualBo;
import com.dsk.cscec.domain.bo.CbSummaryActualListBo; import com.dsk.cscec.domain.bo.CbSummaryActualListBo;
...@@ -21,8 +22,11 @@ import java.util.Map; ...@@ -21,8 +22,11 @@ import java.util.Map;
*/ */
public interface CbSummaryService extends IService<CbSummary> { public interface CbSummaryService extends IService<CbSummary> {
//项目汇总导入 todo /**
void importCbProject(Long projectId, Integer cbStage); * 项目汇总导入
* @param projectId
*/
void importCbProject(Long projectId);
/** /**
* 获取一级名称/成本科目列表 * 获取一级名称/成本科目列表
......
...@@ -121,7 +121,7 @@ ...@@ -121,7 +121,7 @@
where where
csu.del_flag = 0 csu.del_flag = 0
and csu.project_id = #{bo.projectId} and csu.project_id = #{bo.projectId}
and csu.cb_stage = #{bo.cbStage}
and csu.cb_type = #{bo.cbType} and csu.cb_type = #{bo.cbType}
and csu.level = #{bo.level} and csu.level = #{bo.level}
order by csu.sort order by csu.sort
......
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