word模板
生成结果
生成word表格代码
/**
* 导出专家评分总结果表
*
* @param expertEvaSummaryFile 生成文件
* @param subpackageInfo 分包信息
* @param tenderBidEvaHeadVO 评审头信息
*/
private void expertEvaSummary(File expertEvaSummaryFile, TenderProjectItemSubpackage subpackageInfo, TenderBidEvaHeadVO tenderBidEvaHeadVO) {
InputStream inputStream = null;
OutputStream outputStream = null;
try {
ConfigureBuilder builder = Configure.builder();
builder.useSpringEL(false);
//封装数据
Map<String, Object> map = new HashMap<>();
//渲染文本
map.put("tenderProject", subpackageInfo.getTenderProject());//项目名称
map.put("openBiddingTime", DateUtil.formatDateTime(subpackageInfo.getOpenBiddingTime()));//评标时间
//评标信息ID
String evaInfoId = tenderBidEvaHeadVO.getEvaInfoId();
//查询所有环节信息
List<TenderAttachEvaMethod> evaGroupList = tenderAttachEvaMethodService.lambdaQuery()
.eq(TenderAttachEvaMethod::getSubpackageId, subpackageInfo.getObjectID()).orderByAsc(TenderAttachEvaMethod::getOrderBy).list();
Map<String, List<TenderAttachEvaMethod>> evaGroupMap = evaGroupList.stream().collect(Collectors.groupingBy(TenderAttachEvaMethod::getGroupTypeId));
evaGroupMap.forEach((key, value) -> {
if (TenderEvaGroupTypeEnum.REVIEW.getValue().equals(key)) {
//评审项
List<Map<String, Object>> reviewDynamic = new ArrayList<>();
for (TenderAttachEvaMethod evaMethod : value) {
Map<String, Object> reviewDynamicMap = getReviewSummaryDynamicMap(evaMethod, evaInfoId);
reviewDynamic.add(reviewDynamicMap);
}
map.put("reviewTable", reviewDynamic);
} else if (TenderEvaGroupTypeEnum.SCORE.getValue().equals(key)) {
//评分项
List<Map<String, Object>> scoreDynamic = new ArrayList<>();
for (TenderAttachEvaMethod evaMethod : value) {
//查询评审任务数据
Map<String, Object> scoreDynamicMap = getScoreSummaryDynamicMap(evaMethod, evaInfoId);
scoreDynamic.add(scoreDynamicMap);
}
map.put("scoreTable", scoreDynamic);
} else if (TenderEvaGroupTypeEnum.REVIEW_SCORE.getValue().equals(key)) {
//评审评分项
List<Map<String, Object>> reviewScoreDynamic = new ArrayList<>();
for (TenderAttachEvaMethod evaMethod : value) {
//查询评审任务数据
Map<String, Object> reviewScoreDynamicMap = getReviewScoreSummaryDynamicMap(evaMethod, evaInfoId);
reviewScoreDynamic.add(reviewScoreDynamicMap);
}
map.put("reviewScoreTable", reviewScoreDynamic);
} else if (TenderEvaGroupTypeEnum.PRICE_REVIEW.getValue().equals(key)) {
//价格评分项
List<Map<String, Object>> priceReviewDynamic = new ArrayList<>();
for (TenderAttachEvaMethod evaMethod : value) {
//查询评审任务数据
Map<String, Object> priceReviewDynamicMap = getPriceReviewSummaryDynamicMap(evaMethod, evaInfoId);
priceReviewDynamic.add(priceReviewDynamicMap);
}
map.put("priceReviewTable", priceReviewDynamic);
} else if (TenderEvaGroupTypeEnum.PRICE_COMPARISON.getValue().equals(key)) {
//价格比较项
//价格比较项
List<Map<String, Object>> priceComparisonDynamic = new ArrayList<>();
for (TenderAttachEvaMethod evaMethod : value) {
//查询评审任务数据
Map<String, Object> priceComparisonDynamicMap = getPriceComparisonSummaryDynamicMap(evaMethod, evaInfoId);
priceComparisonDynamic.add(priceComparisonDynamicMap);
}
map.put("priceComparisonTable", priceComparisonDynamic);
}
});
inputStream = resourceLoader.getResource("classpath:static/template/评标结果-附件2_专家打分汇总.docx").getInputStream();
XWPFTemplate template = XWPFTemplate.compile(Objects.requireNonNull(inputStream), builder.build()).render(map);
outputStream = new FileOutputStream(expertEvaSummaryFile);
template.write(outputStream);
} catch (Exception e) {
log.error("POI文件生成异常:{}", e);
} finally {
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {
log.error("IO异常:{}", e);
}
}
if (outputStream != null) {
try {
outputStream.close();
} catch (IOException e) {
log.error("IO异常:{}", e);
}
}
}
}
生成评审类表格
private Map<String, Object> getReviewSummaryDynamicMap(TenderAttachEvaMethod evaMethod, String evaInfoId) {
Map<String, Object> reviewDynamicMap = new HashMap<>();
reviewDynamicMap.put("groupName", evaMethod.getGroupName());
reviewDynamicMap.put("groupDesc", "有" + evaMethod.getVetoCondition().intValue() + "个不符合时否决投标。");
//查询环节汇总结果
SummaryEvaGroupResultVO summaryEvaGroupResultVO = tenderBidEvaHeadService.querySummaryEvaGroupResultByGroupId(evaMethod.getObjectID(), evaInfoId);
TenderAttachEvaMethodVO evaluationGroup = summaryEvaGroupResultVO.getEvaluationGroup();
List<TenderBidEvaSupplierVO> supplierList = summaryEvaGroupResultVO.getSupplierList();
List<Map<String, Object>> resultList = summaryEvaGroupResultVO.getResultList();
Map<Object, Map<String, Object>> resultListMap = resultList.stream().collect(Collectors.toMap(item -> item.get("id"), map -> map, (o1, o2) -> o1));
List<TenderEvaJudgesVO> evaJudgesVOList = null;
List<String> headerColList = new ArrayList<>();
int headerColSize = 0;
List<RowRenderData> rowList = new ArrayList<>();
MergeCellRule.MergeCellRuleBuilder builder = MergeCellRule.builder();
int groupStartRow = 1;
int groupEndRow = 1;
//列,开始行,结束行,此处合并第一行,和最后一行
for (TenderBidEvaSupplierVO tenderBidEvaSupplierVO : supplierList) {
List<TenderAttachEvaMethodReg> tenderAttachEvaMethodRegList = evaluationGroup.getTenderAttachEvaMethodRegList();
//查询供应商各评委的打分情况
EvaGroupRegulationResultVO evaGroupRegulationResultVO = tenderBidEvaHeadService
.querySupplierByEvaGroupId(evaMethod.getObjectID(), evaInfoId, tenderBidEvaSupplierVO.getSupplierAccount());
if (evaJudgesVOList == null) {
evaJudgesVOList = evaGroupRegulationResultVO.getEvaJudgesVOList();
//表头信息
headerColList.add("投标单位");
headerColList.add("条例名称");
headerColList.addAll(evaJudgesVOList.stream().map(item -> item.getJudgesName()).collect(Collectors.toList()));
headerColList.add("评审结论");
headerColList.add("汇总结论");
headerColSize = headerColList.size();
//表格头信息
RowRenderData headerRenderData = Rows.of(headerColList.stream().toArray(String[]::new)).center().textBold().create();
rowList.add(headerRenderData);
}
List<TenderBidEvaRegulationResult> evaRegulationResultList = evaGroupRegulationResultVO.getEvaRegulationResultList();
Map<String, TenderBidEvaRegulationResult> evaRegulationResultListMap = evaRegulationResultList.stream().
collect(Collectors.toMap(item -> item.getRegulationId() + "_" + item.getJudgesNameId(), item -> item, (o1, o2) -> o1));
for (TenderAttachEvaMethodReg tenderAttachEvaMethodReg : tenderAttachEvaMethodRegList) {
List<String> cellList = ListUtil.toList(tenderBidEvaSupplierVO.getSupplierName(), tenderAttachEvaMethodReg.getRegulationName());
//循环各评委信息,查看各评委,对应条例打分结果
for (TenderEvaJudgesVO tenderEvaJudgesVO : evaJudgesVOList) {
TenderBidEvaRegulationResult regulationResult = evaRegulationResultListMap
.get(tenderAttachEvaMethodReg.getObjectID() + "_" + tenderEvaJudgesVO.getJudgesNameId());
String expertRegResult = regulationResult != null &&
StrUtil.isNotBlank(regulationResult.getReviewResult()) ? regulationResult.getReviewResult() : "/";
cellList.add(expertRegResult);
}
Map<String, Object> resultMap = resultListMap.get(tenderAttachEvaMethodReg.getObjectID());
String result = (String) resultMap.get(tenderBidEvaSupplierVO.getSupplierAccount().concat("_result"));
cellList.add(Constants.YES.equals(result) ? "符合" : "不符合");
cellList.add(tenderBidEvaSupplierVO.getEvaReviewResult());
rowList.add(Rows.of(cellList.stream().toArray(String[]::new)).center().create());
groupEndRow++;
}
//结束行必须大于开始行,否则会异常
if (groupStartRow != groupEndRow - 1) {
builder.map(MergeCellRule.Grid.of(groupStartRow, 0), MergeCellRule.Grid.of(groupEndRow - 1, 0));
builder.map(MergeCellRule.Grid.of(groupStartRow, headerColSize - 1), MergeCellRule.Grid.of(groupEndRow - 1, headerColSize - 1));
}
groupStartRow = groupEndRow;
}
//计算列宽
int[] colWith = new int[headerColSize];
//总宽度100%
int totalWith = 100;
//第一列序号,第二列投标单位名称宽度固定
colWith[0] = 20;
colWith[1] = 20;
colWith[headerColSize - 2] = 10;
colWith[headerColSize - 1] = 10;
totalWith = totalWith - colWith[0] - colWith[1] - colWith[headerColSize - 2] - colWith[headerColSize - 1];
//剩余列取平均值
int otherWith = totalWith / (headerColSize - 4);
for (int i = 2; i < headerColSize - 2; i++) {
//为防止不满100,最后一列需要特殊处理
if (i == headerColSize - 2 - 1) {
colWith[i] = totalWith;
} else {
colWith[i] = otherWith;
totalWith = totalWith - otherWith;
}
}
TableRenderData tableRenderData = Tables.of(rowList.stream()
.toArray(RowRenderData[]::new)).left().percentWidth("100%", colWith).mergeRule(builder.build()).create();
//构建表格
reviewDynamicMap.put("reviewTableItem", tableRenderData);
return reviewDynamicMap;
}
生成打分类表格
private Map<String, Object> getScoreSummaryDynamicMap(TenderAttachEvaMethod evaMethod, String evaInfoId) {
Map<String, Object> scoreDynamicMap = new HashMap<>();
scoreDynamicMap.put("groupName", evaMethod.getGroupName());//环节名称
scoreDynamicMap.put("groupScoreTotal", evaMethod.getScore());//环节总分
scoreDynamicMap.put("groupWeight", evaMethod.getWeights());//权重
SummaryEvaGroupResultVO summaryEvaGroupResultVO = tenderBidEvaHeadService.querySummaryEvaGroupResultByGroupId(evaMethod.getObjectID(), evaInfoId);
TenderAttachEvaMethodVO evaluationGroup = summaryEvaGroupResultVO.getEvaluationGroup();
List<TenderBidEvaSupplierVO> supplierList = summaryEvaGroupResultVO.getSupplierList();
List<Map<String, Object>> resultList = summaryEvaGroupResultVO.getResultList();
//评委对应打分
Map<Object, Map<String, Object>> resultListMap = resultList.stream().collect(Collectors.toMap(item -> item.get("id"), map -> map, (o1, o2) -> o1));
List<TenderEvaJudgesVO> evaJudgesVOList = null;
List<String> headerColList = new ArrayList<>();
int headerColSize = 0;
List<RowRenderData> rowList = new ArrayList<>();
MergeCellRule.MergeCellRuleBuilder builder = MergeCellRule.builder();
int groupStartRow = 1;
int groupEndRow = 1;
//列,开始行,结束行
for (TenderBidEvaSupplierVO tenderBidEvaSupplierVO : supplierList) {
List<TenderAttachEvaMethodReg> tenderAttachEvaMethodRegList = evaluationGroup.getTenderAttachEvaMethodRegList();
//查询供应商各评委的打分情况
EvaGroupRegulationResultVO evaGroupRegulationResultVO = tenderBidEvaHeadService
.querySupplierByEvaGroupId(evaMethod.getObjectID(), evaInfoId, tenderBidEvaSupplierVO.getSupplierAccount());
if (evaJudgesVOList == null) {
evaJudgesVOList = evaGroupRegulationResultVO.getEvaJudgesVOList();
//表头信息
headerColList.add("投标单位");
headerColList.add("条例名称");
headerColList.add("分值范围");
headerColList.addAll(evaJudgesVOList.stream().map(item -> item.getJudgesName()).collect(Collectors.toList()));
headerColSize = headerColList.size();
//表格头信息
RowRenderData headerRenderData = Rows.of(headerColList.stream().toArray(String[]::new)).center().textBold().create();
rowList.add(headerRenderData);
}
List<TenderBidEvaRegulationResult> evaRegulationResultList = evaGroupRegulationResultVO.getEvaRegulationResultList();
Map<String, TenderBidEvaRegulationResult> evaRegulationResultListMap = evaRegulationResultList.stream().
collect(Collectors.toMap(item -> item.getRegulationId() + "_" + item.getJudgesNameId(), item -> item, (o1, o2) -> o1));
for (TenderAttachEvaMethodReg tenderAttachEvaMethodReg : tenderAttachEvaMethodRegList) {
List<String> cellList = ListUtil.toList(
tenderBidEvaSupplierVO.getSupplierName(),
tenderAttachEvaMethodReg.getRegulationName(),
tenderAttachEvaMethodReg.getScoreRange()
);
//循环各评委信息,查看各评委,对应条例打分结果
for (TenderEvaJudgesVO tenderEvaJudgesVO : evaJudgesVOList) {
TenderBidEvaRegulationResult regulationResult = evaRegulationResultListMap
.get(tenderAttachEvaMethodReg.getObjectID() + "_" + tenderEvaJudgesVO.getJudgesNameId());
String expertRegResult = regulationResult != null && regulationResult.getScore() != null ? MathUtil.doubleNullToZero(regulationResult.getScore()).stripTrailingZeros().toPlainString() : "/";
cellList.add(expertRegResult);
}
rowList.add(Rows.of(cellList.stream().toArray(String[]::new)).center().create());
groupEndRow++;
}
//合计得分
List<String> sumRegList = ListUtil.toList("", "合计", MathUtil.doubleNullToZero(evaluationGroup.getScore()).stripTrailingZeros().toPlainString());
for (TenderEvaJudgesVO tenderEvaJudgesVO : evaJudgesVOList) {
String totalScore = (String) resultListMap.get(tenderEvaJudgesVO.getJudgesNameId()).get(tenderBidEvaSupplierVO.getSupplierAccount() + "_totalScope");
sumRegList.add(totalScore);
}
rowList.add(Rows.of(sumRegList.stream().toArray(String[]::new)).center().create());
groupEndRow++;
//结论,前3列固定,后面都补null
List<String> resultRowList = ListUtil.toList("", "结论", tenderBidEvaSupplierVO.getTotalScore().stripTrailingZeros().toPlainString());
for (int i = resultRowList.size(); i < headerColList.size(); i++) {
resultRowList.add("");
}
rowList.add(Rows.of(resultRowList.stream().toArray(String[]::new)).center().create());
groupEndRow++;
builder.map(MergeCellRule.Grid.of(groupEndRow - 1, 2), MergeCellRule.Grid.of(groupEndRow - 1, headerColSize - 1));
//权重
List<String> weightRowList = ListUtil.toList("", "权重", tenderBidEvaSupplierVO.getWeights().stripTrailingZeros().toPlainString() + "%");
for (int i = weightRowList.size(); i < headerColList.size(); i++) {
weightRowList.add("");
}
rowList.add(Rows.of(weightRowList.stream().toArray(String[]::new)).center().create());
groupEndRow++;
builder.map(MergeCellRule.Grid.of(groupEndRow - 1, 2), MergeCellRule.Grid.of(groupEndRow - 1, headerColSize - 1));
//实际得分
List<String> realScoreRowList = ListUtil.toList("", "实际得分", tenderBidEvaSupplierVO.getWeightScore().stripTrailingZeros().toPlainString());
for (int i = realScoreRowList.size(); i < headerColList.size(); i++) {
realScoreRowList.add("");
}
rowList.add(Rows.of(realScoreRowList.stream().toArray(String[]::new)).center().create());
groupEndRow++;
builder.map(MergeCellRule.Grid.of(groupEndRow - 1, 2), MergeCellRule.Grid.of(groupEndRow - 1, headerColSize - 1));
//第一列合并
if (groupEndRow - 1 > groupStartRow) {
builder.map(MergeCellRule.Grid.of(groupStartRow, 0), MergeCellRule.Grid.of(groupEndRow - 1, 0));
}
groupStartRow = groupEndRow;
}
//计算列宽
int[] colWith = new int[headerColSize];
//总宽度100%
int totalWith = 100;
//第一列序号,第二列投标单位名称宽度固定
colWith[0] = 20;
colWith[1] = 20;
colWith[2] = 10;
totalWith = totalWith - colWith[0] - colWith[1] - colWith[2];
//剩余列取平均值
int otherWith = totalWith / (headerColSize - 3);
for (int i = 3; i < headerColSize; i++) {
//为防止不满100,最后一列需要特殊处理
if (i == headerColSize - 1) {
colWith[i] = totalWith;
} else {
colWith[i] = otherWith;
totalWith = totalWith - otherWith;
}
}
TableRenderData tableRenderData = Tables.of(rowList.stream()
.toArray(RowRenderData[]::new)).left().percentWidth("100%", colWith).mergeRule(builder.build()).create();
//构建表格
scoreDynamicMap.put("scoreTableItem", tableRenderData);
return scoreDynamicMap;
}
生成评审评分类表格
private Map<String, Object> getReviewScoreSummaryDynamicMap(TenderAttachEvaMethod evaMethod, String evaInfoId) {
Map<String, Object> reviewScoreDynamicMap = new HashMap<>();
reviewScoreDynamicMap.put("groupName", evaMethod.getGroupName());
reviewScoreDynamicMap.put("groupScoreTotal", evaMethod.getScore());
reviewScoreDynamicMap.put("groupWeight", evaMethod.getWeights());
reviewScoreDynamicMap.put("groupDesc", "环节内投标单位有" + evaMethod.getReviewGradingRules().intValue() + "个条例不符合时" + evaMethod.getReviewGradingType() + "。");
//查询环节汇总结果
SummaryEvaGroupResultVO summaryEvaGroupResultVO = tenderBidEvaHeadService.querySummaryEvaGroupResultByGroupId(evaMethod.getObjectID(), evaInfoId);
TenderAttachEvaMethodVO evaluationGroup = summaryEvaGroupResultVO.getEvaluationGroup();
List<TenderBidEvaSupplierVO> supplierList = summaryEvaGroupResultVO.getSupplierList();
List<Map<String, Object>> resultList = summaryEvaGroupResultVO.getResultList();
Map<Object, Map<String, Object>> resultListMap = resultList.stream().collect(Collectors.toMap(item -> item.get("id"), map -> map, (o1, o2) -> o1));
List<TenderEvaJudgesVO> evaJudgesVOList = null;
List<String> headerColList = new ArrayList<>();
int headerColSize = 0;
List<RowRenderData> rowList = new ArrayList<>();
MergeCellRule.MergeCellRuleBuilder builder = MergeCellRule.builder();
int groupStartRow = 1;
int groupEndRow = 1;
//列,开始行,结束行,此处合并第一行,和最后一行
for (TenderBidEvaSupplierVO tenderBidEvaSupplierVO : supplierList) {
List<TenderAttachEvaMethodReg> tenderAttachEvaMethodRegList = evaluationGroup.getTenderAttachEvaMethodRegList();
//查询供应商各评委的打分情况
EvaGroupRegulationResultVO evaGroupRegulationResultVO = tenderBidEvaHeadService
.querySupplierByEvaGroupId(evaMethod.getObjectID(), evaInfoId, tenderBidEvaSupplierVO.getSupplierAccount());
if (evaJudgesVOList == null) {
evaJudgesVOList = evaGroupRegulationResultVO.getEvaJudgesVOList();
//表头信息
headerColList.add("投标单位");
headerColList.add("条例名称");
headerColList.addAll(evaJudgesVOList.stream().map(item -> item.getJudgesName()).collect(Collectors.toList()));
headerColList.add("评审结论");
headerColList.add("汇总结论");
headerColList.add("得分");
headerColList.add("权重");
headerColList.add("最终得分");
headerColSize = headerColList.size();
//表格头信息
RowRenderData headerRenderData = Rows.of(headerColList.stream().toArray(String[]::new)).center().textBold().create();
rowList.add(headerRenderData);
}
List<TenderBidEvaRegulationResult> evaRegulationResultList = evaGroupRegulationResultVO.getEvaRegulationResultList();
Map<String, TenderBidEvaRegulationResult> evaRegulationResultListMap = evaRegulationResultList.stream().
collect(Collectors.toMap(item -> item.getRegulationId() + "_" + item.getJudgesNameId(), item -> item, (o1, o2) -> o1));
for (TenderAttachEvaMethodReg tenderAttachEvaMethodReg : tenderAttachEvaMethodRegList) {
List<String> cellList = ListUtil.toList(tenderBidEvaSupplierVO.getSupplierName(), tenderAttachEvaMethodReg.getRegulationName());
//循环各评委信息,查看各评委,对应条例打分结果
for (TenderEvaJudgesVO tenderEvaJudgesVO : evaJudgesVOList) {
TenderBidEvaRegulationResult regulationResult = evaRegulationResultListMap
.get(tenderAttachEvaMethodReg.getObjectID() + "_" + tenderEvaJudgesVO.getJudgesNameId());
String expertRegResult = regulationResult != null &&
StrUtil.isNotBlank(regulationResult.getReviewResult()) ? regulationResult.getReviewResult() : "/";
cellList.add(expertRegResult);
}
Map<String, Object> resultMap = resultListMap.get(tenderAttachEvaMethodReg.getObjectID());
String result = (String) resultMap.get(tenderBidEvaSupplierVO.getSupplierAccount().concat("_result"));
cellList.add(Constants.YES.equals(result) ? "符合" : "不符合");
cellList.add(tenderBidEvaSupplierVO.getEvaReviewResult());
cellList.add(tenderBidEvaSupplierVO.getTotalScore().toString());
cellList.add(tenderBidEvaSupplierVO.getWeights().toString() + "%");
cellList.add(tenderBidEvaSupplierVO.getWeightScore().toString());
rowList.add(Rows.of(cellList.stream().toArray(String[]::new)).center().create());
groupEndRow++;
}
//结束行必须大于开始行,否则会报异常
if (groupStartRow != groupEndRow - 1) {
builder.map(MergeCellRule.Grid.of(groupStartRow, 0), MergeCellRule.Grid.of(groupEndRow - 1, 0));
builder.map(MergeCellRule.Grid.of(groupStartRow, headerColSize - 1), MergeCellRule.Grid.of(groupEndRow - 1, headerColSize - 1));
builder.map(MergeCellRule.Grid.of(groupStartRow, headerColSize - 2), MergeCellRule.Grid.of(groupEndRow - 1, headerColSize - 2));
builder.map(MergeCellRule.Grid.of(groupStartRow, headerColSize - 3), MergeCellRule.Grid.of(groupEndRow - 1, headerColSize - 3));
builder.map(MergeCellRule.Grid.of(groupStartRow, headerColSize - 4), MergeCellRule.Grid.of(groupEndRow - 1, headerColSize - 4));
}
groupStartRow = groupEndRow;
}
//计算列宽
int[] colWith = new int[headerColSize];
//总宽度100%
int totalWith = 100;
//第一列序号,第二列投标单位名称宽度固定
colWith[0] = 20;
colWith[1] = 20;
colWith[headerColSize - 5] = 7;
colWith[headerColSize - 4] = 7;
colWith[headerColSize - 3] = 7;
colWith[headerColSize - 2] = 7;
colWith[headerColSize - 1] = 7;
totalWith = totalWith - colWith[0] - colWith[1] - colWith[headerColSize - 1] -
colWith[headerColSize - 2] - colWith[headerColSize - 3] - colWith[headerColSize - 4] - colWith[headerColSize - 5];
//剩余列取平均值
int otherWith = totalWith / (headerColSize - 7);
for (int i = 2; i < headerColSize - 5; i++) {
//为防止不满100,最后一列需要特殊处理
if (i == headerColSize - 5 - 1) {
colWith[i] = totalWith;
} else {
colWith[i] = otherWith;
totalWith = totalWith - otherWith;
}
}
TableRenderData tableRenderData = Tables.of(rowList.stream()
.toArray(RowRenderData[]::new)).left().percentWidth("100%", colWith).mergeRule(builder.build()).create();
//构建表格
reviewScoreDynamicMap.put("reviewScoreTableItem", tableRenderData);
return reviewScoreDynamicMap;
}
生成价格评分类表格
private Map<String, Object> getPriceReviewSummaryDynamicMap(TenderAttachEvaMethod evaMethod, String evaInfoId) {
Map<String, Object> priceReviewDynamicMap = new HashMap<>();
//环节名称
priceReviewDynamicMap.put("groupName", evaMethod.getGroupName());
//总分
priceReviewDynamicMap.put("groupScoreTotal", evaMethod.getScore());
//权重
priceReviewDynamicMap.put("groupWeight", evaMethod.getWeights());
SummaryEvaGroupResultVO summaryEvaGroupResultVO = tenderBidEvaHeadService.querySummaryEvaGroupResultByGroupId(evaMethod.getObjectID(), evaInfoId);
TenderAttachEvaMethodVO evaluationGroup = summaryEvaGroupResultVO.getEvaluationGroup();
List<TenderBidEvaSupplierVO> supplierList = summaryEvaGroupResultVO.getSupplierList();
//计算描述
StringBuffer buffer = new StringBuffer();
TenderAttachEvaMethodPrice tenderAttachEvaMethodPrice = evaluationGroup.getTenderAttachEvaMethodPrice();
if (Constants.YES.equals(tenderAttachEvaMethodPrice.getCalTypeId())) {
//人工计算
buffer.append("人工计算:").append(StrUtil.nullToDefault(tenderAttachEvaMethodPrice.getCalArtificialRulesDesc(), ""));
} else {
buffer.append("系统计算:").append(tenderAttachEvaMethodPrice.getPricePointsCalFormula()).append(",");
switch (tenderAttachEvaMethodPrice.getPricePointsCalFormulaId()) {
case "operationMinPriceStrategy":
buffer.append("基准价得满分,得分=基准价/投标价*总分。");
break;
case "operationMinPricePositiveDeviationStrategy":
buffer.append("基准价得满分,报价每高于基准价1%扣" + tenderAttachEvaMethodPrice.getAboveScore() + "分,最低扣至" + tenderAttachEvaMethodPrice.getLowestScore() + "分。");
break;
case "operationStandardPriceStrategy":
buffer.append("基准价得满分,报价每高于基准价1%扣" + tenderAttachEvaMethodPrice.getAboveScore() +
"分,每低于基准价1%扣" + tenderAttachEvaMethodPrice.getBelowScore() + "分,最低扣至" + tenderAttachEvaMethodPrice.getLowestScore() + "分。");
break;
case "operationMinRatePriceStrategy":
buffer.append("基准价得满分,得分=(1-(报价-基准价)/基准价) * 总分。");
break;
default:
}
}
priceReviewDynamicMap.put("groupDesc", buffer.toString());
List<Map<String, Object>> resultList = summaryEvaGroupResultVO.getResultList();
Map<Object, Map<String, Object>> resultListMap = resultList.stream().collect(Collectors.toMap(item -> item.get("id"), map -> map, (o1, o2) -> o1));
List<TenderEvaJudgesVO> evaJudgesVOList = null;
List<String> headerColList = new ArrayList<>();
int headerColSize = 0;
List<RowRenderData> rowList = new ArrayList<>();
for (TenderBidEvaSupplierVO tenderBidEvaSupplierVO : supplierList) {
//查询供应商各评委的打分情况
EvaGroupRegulationResultVO evaGroupRegulationResultVO = tenderBidEvaHeadService
.querySupplierByEvaGroupId(evaMethod.getObjectID(), evaInfoId, tenderBidEvaSupplierVO.getSupplierAccount());
if (evaJudgesVOList == null) {
evaJudgesVOList = evaGroupRegulationResultVO.getEvaJudgesVOList();
//表头信息
headerColList.add("投标单位");
headerColList.add("投标报价(元)");
headerColList.addAll(evaJudgesVOList.stream().map(item -> item.getJudgesName()).collect(Collectors.toList()));
headerColList.add("权重(%)");
headerColList.add("实际得分");
headerColSize = headerColList.size();
//表格头信息
RowRenderData headerRenderData = Rows.of(headerColList.stream().toArray(String[]::new)).center().textBold().create();
rowList.add(headerRenderData);
}
List<TenderBidEvaRegulationResult> evaRegulationResultList = evaGroupRegulationResultVO.getEvaRegulationResultList();
Map<String, TenderBidEvaRegulationResult> evaRegulationResultListMap = evaRegulationResultList.stream().
collect(Collectors.toMap(item -> item.getJudgesNameId(), item -> item, (o1, o2) -> o1));
List<String> dataRowCellList = ListUtil.toList(tenderBidEvaSupplierVO.getSupplierName());
for (int i = 0; i < evaJudgesVOList.size(); i++) {
TenderEvaJudgesVO tenderEvaJudgesVO = evaJudgesVOList.get(i);
String judgesNameId = tenderEvaJudgesVO.getJudgesNameId();
TenderBidEvaRegulationResult regulationResult = evaRegulationResultListMap.get(judgesNameId);
if (i == 0) {
dataRowCellList.add(MathUtil.doubleNullToZero(regulationResult.getQuote()).stripTrailingZeros().toPlainString());
}
dataRowCellList.add(MathUtil.doubleNullToZero(regulationResult.getScore()).stripTrailingZeros().toPlainString());
}
dataRowCellList.add(tenderBidEvaSupplierVO.getWeights() + "%");
dataRowCellList.add(tenderBidEvaSupplierVO.getWeightScore().toString());
RowRenderData renderData = Rows.of(dataRowCellList.stream().toArray(String[]::new)).center().create();
rowList.add(renderData);
}
//计算列宽
int[] colWith = new int[headerColSize];
//总宽度100%
int totalWith = 100;
//第一列序号,第二列投标单位名称宽度固定
colWith[0] = 30;
colWith[1] = 25;
colWith[headerColSize - 2] = 10;
colWith[headerColSize - 1] = 10;
totalWith = totalWith - colWith[0] - colWith[1] - colWith[headerColSize - 1] - colWith[headerColSize - 2];
//剩余列取平均值
int otherWith = totalWith / (headerColSize - 4);
for (int i = 2; i < headerColSize - 2; i++) {
//为防止不满100,最后一列需要特殊处理
if (i == headerColSize - 2 - 1) {
colWith[i] = totalWith;
} else {
colWith[i] = otherWith;
totalWith = totalWith - otherWith;
}
}
TableRenderData tableRenderData = Tables.of(rowList.stream().toArray(RowRenderData[]::new)).left().percentWidth("100%", colWith).create();
//构建表格
priceReviewDynamicMap.put("priceReviewTableItem", tableRenderData);
return priceReviewDynamicMap;
}
生成价格比较类表格
private Map<String, Object> getPriceComparisonSummaryDynamicMap(TenderAttachEvaMethod evaMethod, String evaInfoId) {
Map<String, Object> priceComparisonDynamicMap = new HashMap<>();
SummaryEvaGroupResultVO summaryEvaGroupResultVO = tenderBidEvaHeadService.querySummaryEvaGroupResultByGroupId(evaMethod.getObjectID(), evaInfoId);
TenderAttachEvaMethodVO evaluationGroup = summaryEvaGroupResultVO.getEvaluationGroup();
List<TenderBidEvaSupplierVO> supplierList = summaryEvaGroupResultVO.getSupplierList();
TenderAttachEvaMethodPrice tenderAttachEvaMethodPrice = evaluationGroup.getTenderAttachEvaMethodPrice();
priceComparisonDynamicMap.put("groupName", evaMethod.getGroupName());
priceComparisonDynamicMap.put("groupDesc", tenderAttachEvaMethodPrice.getRankingRules());
List<Map<String, Object>> resultList = summaryEvaGroupResultVO.getResultList();
Map<Object, Map<String, Object>> resultListMap = resultList.stream().collect(Collectors.toMap(item -> item.get("id"), map -> map, (o1, o2) -> o1));
List<TenderEvaJudgesVO> evaJudgesVOList = null;
List<String> headerColList = new ArrayList<>();
int headerColSize = 0;
List<RowRenderData> rowList = new ArrayList<>();
for (TenderBidEvaSupplierVO tenderBidEvaSupplierVO : supplierList) {
//查询供应商各评委的打分情况
EvaGroupRegulationResultVO evaGroupRegulationResultVO = tenderBidEvaHeadService
.querySupplierByEvaGroupId(evaMethod.getObjectID(), evaInfoId, tenderBidEvaSupplierVO.getSupplierAccount());
if (evaJudgesVOList == null) {
evaJudgesVOList = evaGroupRegulationResultVO.getEvaJudgesVOList();
//表头信息
headerColList.add("投标单位");
headerColList.add("投标报价(元)");
headerColList.addAll(evaJudgesVOList.stream().map(item -> item.getJudgesName()).collect(Collectors.toList()));
headerColSize = headerColList.size();
//表格头信息
RowRenderData headerRenderData = Rows.of(headerColList.stream().toArray(String[]::new)).center().textBold().create();
rowList.add(headerRenderData);
}
List<TenderBidEvaRegulationResult> evaRegulationResultList = evaGroupRegulationResultVO.getEvaRegulationResultList();
Map<String, TenderBidEvaRegulationResult> evaRegulationResultListMap = evaRegulationResultList.stream().
collect(Collectors.toMap(item -> item.getJudgesNameId(), item -> item, (o1, o2) -> o1));
List<String> dataRowCellList = ListUtil.toList(tenderBidEvaSupplierVO.getSupplierName());
for (int i = 0; i < evaJudgesVOList.size(); i++) {
TenderEvaJudgesVO tenderEvaJudgesVO = evaJudgesVOList.get(i);
String judgesNameId = tenderEvaJudgesVO.getJudgesNameId();
TenderBidEvaRegulationResult regulationResult = evaRegulationResultListMap.get(judgesNameId);
if (i == 0) {
dataRowCellList.add(MathUtil.doubleNullToZero(regulationResult.getQuote()).stripTrailingZeros().toPlainString());
}
dataRowCellList.add(String.valueOf(regulationResult.getOrderBy().intValue()));
}
RowRenderData renderData = Rows.of(dataRowCellList.stream().toArray(String[]::new)).center().create();
rowList.add(renderData);
}
//计算列宽
int[] colWith = new int[headerColSize];
//总宽度100%
int totalWith = 100;
//第一列序号,第二列投标单位名称宽度固定
colWith[0] = 30;
colWith[1] = 30;
totalWith = totalWith - colWith[0] - colWith[1];
//剩余列取平均值
int otherWith = totalWith / (headerColSize - 2);
for (int i = 2; i < headerColSize; i++) {
//为防止不满100,最后一列需要特殊处理
if (i == headerColSize - 1) {
colWith[i] = totalWith;
} else {
colWith[i] = otherWith;
totalWith = totalWith - otherWith;
}
}
TableRenderData tableRenderData = Tables.of(rowList.stream().toArray(RowRenderData[]::new)).left().percentWidth("100%", colWith).create();
//构建表格
priceComparisonDynamicMap.put("priceComparisonTableItem", tableRenderData);
return priceComparisonDynamicMap;
}