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);
/** /**
* 获取一级名称/成本科目列表 * 获取一级名称/成本科目列表
......
...@@ -8,7 +8,9 @@ import cn.hutool.core.util.ObjectUtil; ...@@ -8,7 +8,9 @@ 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.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dsk.common.core.domain.R; import com.dsk.common.core.domain.R;
import com.dsk.common.excel.ExcelResult;
import com.dsk.common.exception.ServiceException; import com.dsk.common.exception.ServiceException;
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.*;
import com.dsk.cscec.domain.bo.CbSummaryActualBo; import com.dsk.cscec.domain.bo.CbSummaryActualBo;
...@@ -16,19 +18,22 @@ import com.dsk.cscec.domain.bo.CbSummaryActualListBo; ...@@ -16,19 +18,22 @@ import com.dsk.cscec.domain.bo.CbSummaryActualListBo;
import com.dsk.cscec.domain.bo.CbSummaryActualLockBo; import com.dsk.cscec.domain.bo.CbSummaryActualLockBo;
import com.dsk.cscec.domain.bo.CbSummaryBo; import com.dsk.cscec.domain.bo.CbSummaryBo;
import com.dsk.cscec.domain.vo.CbSummaryActualListVo; import com.dsk.cscec.domain.vo.CbSummaryActualListVo;
import com.dsk.cscec.domain.vo.CbSummaryCostAccountImportVo;
import com.dsk.cscec.domain.vo.CbSummaryProjectImportVo;
import com.dsk.cscec.listener.CbSummaryCostAccountImportListener;
import com.dsk.cscec.listener.CbSummaryProjectImportListener;
import com.dsk.cscec.mapper.*; import com.dsk.cscec.mapper.*;
import com.dsk.cscec.service.CbSummaryService; import com.dsk.cscec.service.CbSummaryService;
import com.dsk.system.service.ISysOssService;
import jodd.util.StringUtil; import jodd.util.StringUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import java.io.InputStream;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.ArrayList; import java.util.*;
import java.util.Date;
import java.util.List;
import java.util.Map;
/** /**
* 成本汇总(CbSummary)表服务实现类 * 成本汇总(CbSummary)表服务实现类
...@@ -36,6 +41,7 @@ import java.util.Map; ...@@ -36,6 +41,7 @@ import java.util.Map;
* @author cyf * @author cyf
* @since 2024-02-06 * @since 2024-02-06
*/ */
@Slf4j
@Service @Service
public class CbSummaryServiceImpl extends ServiceImpl<CbSummaryMapper, CbSummary> implements CbSummaryService { public class CbSummaryServiceImpl extends ServiceImpl<CbSummaryMapper, CbSummary> implements CbSummaryService {
@Autowired @Autowired
...@@ -50,35 +56,153 @@ public class CbSummaryServiceImpl extends ServiceImpl<CbSummaryMapper, CbSummary ...@@ -50,35 +56,153 @@ public class CbSummaryServiceImpl extends ServiceImpl<CbSummaryMapper, CbSummary
@Autowired @Autowired
private CbSummaryActualLockMapper cbSummaryActualLockMapper; private CbSummaryActualLockMapper cbSummaryActualLockMapper;
@Autowired
private ISysOssService ossService;
@Override @Override
public void importCbProject(Long projectId, Integer cbStage) { public void importCbProject(Long projectId) {
//获取del_flag为1的文件,若存在则根据fileId删除相关基础数据,并修改文件del_flag为2 todo
//获取文件信息 //获取文件信息
List<CbProjectFile> cbProjectFiles = cbProjectFileMapper.selectList(new LambdaQueryWrapper<CbProjectFile>() List<CbProjectFile> cbProjectFiles = cbProjectFileMapper.selectList(new LambdaQueryWrapper<CbProjectFile>()
.eq(CbProjectFile::getProjectId, projectId) .eq(CbProjectFile::getProjectId, projectId)
.eq(CbProjectFile::getCbStage, cbStage) // .eq(CbProjectFile::getCbStage, cbStage)
.eq(CbProjectFile::getCbType, CbProjectConstants.CB_TYPE_SUMMARY) .eq(CbProjectFile::getCbType, CbProjectConstants.CB_TYPE_SUMMARY)
.eq(CbProjectFile::getFileParseStatus,CbProjectConstants.PROJECT_FILE_STATUS_PREPARING)
); );
//解析数据 //解析数据
cbProjectFiles.forEach(cbProjectFile -> { cbProjectFiles.forEach(cbProjectFile -> {
MultipartFile file = null;//todo
if (cbProjectFile.getFileName().contains("项目")) {
} else if (cbProjectFile.getFileName().contains("项目")) {
if (cbProjectFile.getFileName().contains("项目")) {
saveCbSummaryProject(projectId,cbProjectFile);
} else if (cbProjectFile.getFileName().contains("成本科目")) {
saveCbSummaryCostAccount(projectId,cbProjectFile);
} else { } else {
//修改文件状态 //修改文件状态
cbProjectFile.setFileParseStatus(CbProjectConstants.PROJECT_FILE_STATUS_PARSE_FAIL); cbProjectFile.setFileParseStatus(CbProjectConstants.PROJECT_FILE_STATUS_PARSE_FAIL);
cbProjectFile.setFailRemark("文件名错误!"); cbProjectFile.setFailRemark("失败原因:文件名错误");
cbProjectFileMapper.updateById(cbProjectFile); cbProjectFileMapper.updateById(cbProjectFile);
} }
}); });
} }
/**
* 成本汇总-项目汇总导入
* @param projectId
* @param file
* @return
*/
boolean saveCbSummaryProject(Long projectId, CbProjectFile file){
//修改文件状态为解析中
file.setFileParseStatus(CbProjectConstants.PROJECT_FILE_STATUS_PARSING);
cbProjectFileMapper.updateById(file);
//文件下载
InputStream inputStream = ossService.downFileIO(file.getFileOssId());
if (ObjectUtil.isNull(inputStream)) {
file.setFileParseStatus(CbProjectConstants.PROJECT_FILE_STATUS_PARSE_FAIL);
file.setFailRemark("失败原因:文件数据不存在");
cbProjectFileMapper.updateById(file);
return false;
}
//解析数据
ExcelResult<CbSummaryProjectImportVo> importVoExcelResult = ExcelUtil.importExcel(inputStream, CbSummaryProjectImportVo.class,new CbSummaryProjectImportListener(projectId,file.getId()));
log.info(importVoExcelResult.getAnalysis());
List<CbSummary> addList = BeanUtil.copyToList(importVoExcelResult.getList(), CbSummary.class);
this.saveBatch(addList);
//处理父级id
List<CbSummary> cbSummaryList = baseMapper.selectList(
new LambdaQueryWrapper<CbSummary>()
.eq(CbSummary::getProjectId, projectId)
.eq(CbSummary::getCbType, 1)
.orderByAsc(CbSummary::getSort)
);
for (CbSummary cbSummary:cbSummaryList) {
if(cbSummary.getLevel()==0){
continue;
}
//获取父级id
Integer parentLevel = cbSummary.getLevel()-1;
CbSummary parent = cbSummaryList.stream().filter(summary -> summary.getSort()<cbSummary.getSort()&&summary.getLevel()==parentLevel)
.max(Comparator.comparing(CbSummary::getSort)).get();
cbSummary.setParentId(parent.getId());
}
this.updateBatchById(cbSummaryList);
//修改文件状态为解析成功
file.setFileParseStatus(CbProjectConstants.PROJECT_FILE_STATUS_PARSE_SUCCESS);
cbProjectFileMapper.updateById(file);
return true;
}
/**
* 成本汇总-成本科目汇总导入
* @param projectId
* @param file
* @return
*/
boolean saveCbSummaryCostAccount(Long projectId,CbProjectFile file) {
//修改文件状态为解析中
file.setFileParseStatus(CbProjectConstants.PROJECT_FILE_STATUS_PARSING);
cbProjectFileMapper.updateById(file);
//文件下载
InputStream inputStream = ossService.downFileIO(file.getFileOssId());
if (ObjectUtil.isNull(inputStream)) {
file.setFileParseStatus(CbProjectConstants.PROJECT_FILE_STATUS_PARSE_FAIL);
file.setFailRemark("失败原因:文件数据不存在");
cbProjectFileMapper.updateById(file);
return false;
}
//解析数据
ExcelResult<CbSummaryCostAccountImportVo> importVoExcelResult = ExcelUtil.importExcel(inputStream, CbSummaryCostAccountImportVo.class,new CbSummaryCostAccountImportListener(projectId,file.getId()));
log.info(importVoExcelResult.getAnalysis());
List<CbSummary> addList = BeanUtil.copyToList(importVoExcelResult.getList(), CbSummary.class);
this.saveBatch(addList);
//处理父级id
List<CbSummary> cbSummaryList = baseMapper.selectList(
new LambdaQueryWrapper<CbSummary>()
.eq(CbSummary::getProjectId, projectId)
.eq(CbSummary::getCbType, 1)
.orderByAsc(CbSummary::getSort)
);
for (CbSummary cbSummary:cbSummaryList) {
if(cbSummary.getLevel()==0){
continue;
}
//获取父级id
Integer parentLevel = cbSummary.getLevel()-1;
CbSummary parent = cbSummaryList.stream().filter(summary -> summary.getSort()<cbSummary.getSort()&&summary.getLevel()==parentLevel)
.max(Comparator.comparing(CbSummary::getSort)).get();
cbSummary.setParentId(parent.getId());
}
this.updateBatchById(cbSummaryList);
//修改文件状态为解析成功
file.setFileParseStatus(CbProjectConstants.PROJECT_FILE_STATUS_PARSE_SUCCESS);
cbProjectFileMapper.updateById(file);
return true;
}
@Override @Override
public List<Map<String, Object>> getCbNameList(CbSummaryBo bo) { public List<Map<String, Object>> getCbNameList(CbSummaryBo bo) {
Assert.notNull(bo.getProjectId(), "项目id不能为空"); Assert.notNull(bo.getProjectId(), "项目id不能为空");
Assert.notNull(bo.getCbStage(), "成本阶段不能为空"); // Assert.notNull(bo.getCbStage(), "成本阶段不能为空");
Assert.notNull(bo.getCbType(), "成本类型不能为空"); Assert.notNull(bo.getCbType(), "成本类型不能为空");
List<Map<String, Object>> resultList = new ArrayList<>(); List<Map<String, Object>> resultList = new ArrayList<>();
...@@ -102,10 +226,11 @@ public class CbSummaryServiceImpl extends ServiceImpl<CbSummaryMapper, CbSummary ...@@ -102,10 +226,11 @@ public class CbSummaryServiceImpl extends ServiceImpl<CbSummaryMapper, CbSummary
//默认当前月 //默认当前月
bo.setExpenseDate(DatePattern.SIMPLE_MONTH_FORMAT.format(new Date())); bo.setExpenseDate(DatePattern.SIMPLE_MONTH_FORMAT.format(new Date()));
} }
List<CbSummaryActualListVo> list = new ArrayList<>();
//当前父级数据 //当前父级数据
CbSummaryActualListVo cbSummaryActualListVo = baseMapper.getById(bo.getId(), bo.getExpenseDate()); CbSummaryActualListVo cbSummaryActualListVo = baseMapper.getById(bo.getId(), bo.getExpenseDate());
if (ObjectUtil.isEmpty(cbSummaryActualListVo)) { if (ObjectUtil.isEmpty(cbSummaryActualListVo)) {
return null; return list;
} }
//截至本月费用汇总 //截至本月费用汇总
Map<String, BigDecimal> parentTotal = cbSummaryActualMapper.getTotal(cbSummaryActualListVo.getId(), bo.getExpenseDate()); Map<String, BigDecimal> parentTotal = cbSummaryActualMapper.getTotal(cbSummaryActualListVo.getId(), bo.getExpenseDate());
...@@ -127,7 +252,6 @@ public class CbSummaryServiceImpl extends ServiceImpl<CbSummaryMapper, CbSummary ...@@ -127,7 +252,6 @@ public class CbSummaryServiceImpl extends ServiceImpl<CbSummaryMapper, CbSummary
//成本科目汇总一级列表 //成本科目汇总一级列表
cbSummaryActualListVo.setChildren(childrenList); cbSummaryActualListVo.setChildren(childrenList);
List<CbSummaryActualListVo> list = new ArrayList<>();
list.add(cbSummaryActualListVo); list.add(cbSummaryActualListVo);
return list; return list;
} else { } else {
...@@ -135,7 +259,6 @@ public class CbSummaryServiceImpl extends ServiceImpl<CbSummaryMapper, CbSummary ...@@ -135,7 +259,6 @@ public class CbSummaryServiceImpl extends ServiceImpl<CbSummaryMapper, CbSummary
childrenList = getProjectSumList(bo); childrenList = getProjectSumList(bo);
cbSummaryActualListVo.setChildren(childrenList); cbSummaryActualListVo.setChildren(childrenList);
List<CbSummaryActualListVo> list = new ArrayList<>();
list.add(cbSummaryActualListVo); list.add(cbSummaryActualListVo);
return list; return list;
} }
......
...@@ -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