fix: 调整任务优先级

This commit is contained in:
han0
2024-07-08 10:40:23 +08:00
parent a30edc2d46
commit 9c91f40d91
10 changed files with 587 additions and 36 deletions

View File

@@ -0,0 +1,13 @@
package mjkf.xinke.main.common.property;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Data
@ConfigurationProperties(prefix = "path")
@Component
public class PathProperty {
private String historyFile;
}

View File

@@ -15,46 +15,46 @@ public class MaterialTaskType {
// 三明钢铁
public static final Integer SANMING_STEEL = 301;
// 材料信息
public static final Integer FUZHOU_TRANSPORTATION_BUREAU = 40101; // todo 福州交通局
public static final Integer LONGYAN_TRANSPORTATION_BUREAU = 40102; // todo 龙岩交通局
public static final Integer NANPING_TRANSPORTATION_BUREAU = 40103; // todo 南平交通局
public static final Integer NINGDE_TRANSPORTATION_BUREAU = 40104; // todo 宁德交通局
public static final Integer PINTAN_TRANSPORTATION_BUREAU = 40105; // todo 平潭交通局
public static final Integer PUTIAN_TRANSPORTATION_BUREAU = 40106; // todo 莆田交通局
public static final Integer QUANZHOU_TRANSPORTATION_BUREAU = 40107; // todo 泉州交通局
public static final Integer SANMING_TRANSPORTATION_BUREAU = 40108; // todo 三明交通局
public static final Integer XIAMEN_TRANSPORTATION_BUREAU = 40109; // todo 厦门交通局
public static final Integer ZHANGZHOU_TRANSPORTATION_BUREAU = 40110; // todo 漳州交通局
public static final Integer ZHANGZHOUKFQ_TRANSPORTATION_BUREAU = 40111; // todo 漳州开发区交通局
public static final Integer FUZHOU_TRANSPORTATION_BUREAU = 40101; // todo-1 福州交通局
public static final Integer LONGYAN_TRANSPORTATION_BUREAU = 40102; // todo-1 龙岩交通局
public static final Integer NANPING_TRANSPORTATION_BUREAU = 40103; // todo-1 南平交通局
public static final Integer NINGDE_TRANSPORTATION_BUREAU = 40104; // todo-1 宁德交通局
public static final Integer PINTAN_TRANSPORTATION_BUREAU = 40105; // todo-1 平潭交通局
public static final Integer PUTIAN_TRANSPORTATION_BUREAU = 40106; // todo-1 莆田交通局
public static final Integer QUANZHOU_TRANSPORTATION_BUREAU = 40107; // todo-1 泉州交通局
public static final Integer SANMING_TRANSPORTATION_BUREAU = 40108; // todo-1 三明交通局
public static final Integer XIAMEN_TRANSPORTATION_BUREAU = 40109; // todo-1 厦门交通局
public static final Integer ZHANGZHOU_TRANSPORTATION_BUREAU = 40110; // todo-1 漳州交通局
public static final Integer ZHANGZHOUKFQ_TRANSPORTATION_BUREAU = 40111; // todo-1 漳州开发区交通局
public static final Integer FUZHOU_HIGHWAY_BUREAU = 40201; // todo 福州公路局
public static final Integer LONGYAN_HIGHWAY_BUREAU = 40202; // todo 龙岩公路局
public static final Integer NANPING_HIGHWAY_BUREAU = 40203; // todo 南平公路局
public static final Integer NINGDE_HIGHWAY_BUREAU = 40204; // todo 宁德公路局
public static final Integer PINTAN_HIGHWAY_BUREAU = 40205; // todo 平潭公路局
public static final Integer PUTIAN_HIGHWAY_BUREAU = 40206; // todo 莆田公路局
public static final Integer QUANZHOU_HIGHWAY_BUREAU = 40207; // todo 泉州公路局
public static final Integer SANMING_HIGHWAY_BUREAU = 40208; // todo 三明公路局
public static final Integer XIAMEN_HIGHWAY_BUREAU = 40209; // todo 厦门公路局
public static final Integer ZHANGZHOU_HIGHWAY_BUREAU = 40210; // todo 漳州公路局
public static final Integer ZHANGZHOUKFQ_HIGHWAY_BUREAU = 40211; // todo 漳州开发区公路局
public static final Integer FUZHOU_HIGHWAY_BUREAU = 40201; // todo-1 福州公路局
public static final Integer LONGYAN_HIGHWAY_BUREAU = 40202; // todo-1 龙岩公路局
public static final Integer NANPING_HIGHWAY_BUREAU = 40203; // todo-1 南平公路局
public static final Integer NINGDE_HIGHWAY_BUREAU = 40204; // todo-1 宁德公路局
public static final Integer PINTAN_HIGHWAY_BUREAU = 40205; // todo-1 平潭公路局
public static final Integer PUTIAN_HIGHWAY_BUREAU = 40206; // todo-1 莆田公路局
public static final Integer QUANZHOU_HIGHWAY_BUREAU = 40207; // todo-1 泉州公路局
public static final Integer SANMING_HIGHWAY_BUREAU = 40208; // todo-1 三明公路局
public static final Integer XIAMEN_HIGHWAY_BUREAU = 40209; // todo-1 厦门公路局
public static final Integer ZHANGZHOU_HIGHWAY_BUREAU = 40210; // todo-1 漳州公路局
public static final Integer ZHANGZHOUKFQ_HIGHWAY_BUREAU = 40211; // todo-1 漳州开发区公路局
// 地市调查表
public static final Integer FUZHOU_SURVEY = 501; // todo 福州调查表
public static final Integer LONGYAN_SURVEY = 502; // todo 龙岩调查表
public static final Integer NANPING_SURVEY = 503; // todo 南平调查表
public static final Integer NINGDE_SURVEY = 504; // todo 宁德调查表
public static final Integer PINTAN_SURVEY = 505; // todo 平潭调查表
public static final Integer PUTIAN_SURVEY = 506; // todo 莆田调查表
public static final Integer QUANZHOU_SURVEY = 507; // todo 泉州调查表
public static final Integer SANMING_SURVEY = 508; // todo 三明调查表
public static final Integer XIAMEN_SURVEY = 509; // todo 厦门调查表
public static final Integer ZHANGZHOU_SURVEY = 510; // todo 漳州调查表
public static final Integer ZHANGZHOUKFQ_SURVEY = 511; // todo 漳州开发区调查表
public static final Integer FUZHOU_SURVEY = 501; // todo-1 福州调查表
public static final Integer LONGYAN_SURVEY = 502; // todo-1 龙岩调查表
public static final Integer NANPING_SURVEY = 503; // todo-1 南平调查表
public static final Integer NINGDE_SURVEY = 504; // todo-1 宁德调查表
public static final Integer PINTAN_SURVEY = 505; // todo-1 平潭调查表
public static final Integer PUTIAN_SURVEY = 506; // todo-1 莆田调查表
public static final Integer QUANZHOU_SURVEY = 507; // todo-1 泉州调查表
public static final Integer SANMING_SURVEY = 508; // todo-1 三明调查表
public static final Integer XIAMEN_SURVEY = 509; // todo-1 厦门调查表
public static final Integer ZHANGZHOU_SURVEY = 510; // todo-1 漳州调查表
public static final Integer ZHANGZHOUKFQ_SURVEY = 511; // todo-1 漳州开发区调查表
// 其他省份
public static final Integer OTHER_ZHEJIANG = 601; // 浙江
public static final Integer OTHER_GIANLZHOU = 602; // 广州
public static final Integer OTHER_YUNNAN = 603; // 云南
public static final Integer OTHER_JIANGXI = 604; // todo 江西
public static final Integer OTHER_JIANGXI = 604; // todo-2 江西
// 住建厅
public static final Integer FUJIAN_DEPARTMENT = 701;
// 发改委
@@ -81,7 +81,7 @@ public class MaterialTaskType {
public static final Integer LOCAL_ZHANGZHOU = 1108; // 漳州
// 网络价格
public static final Integer NETWORK = 1201; // todo 网络价格
public static final Integer NETWORK = 1201; // todo-1 网络价格
public static final List<Integer> list = List.of(
NETWORK,
@@ -173,5 +173,14 @@ public class MaterialTaskType {
);
return dataFromSpiderTypes.contains(type);
}
/**
* todo-1 数据展示模块 地市暂不切换
* todo-1 十一个地市接口
* todo-1 采集结果“产地”改成“品牌产商”
* todo-1 传采集数据网络价格树变动
* todo-1 趋势图一年每月打点
* todo-1 项目材料价格预算“最高(低)总金额”携带上价格的月份
* todo-1 项目材料价格预算计算数值没有小数点
*/
}

View File

@@ -47,7 +47,7 @@ public class MaterialController {
query.eq(Material::getType, type);
List<Map<String, Object>> maps = materialService.listMaps(query);
maps = maps.stream().map(map -> convertKeysToLowercase(map)).collect(Collectors.toList());
// todo 列转树改为泛型对象入参
// todo-3 列转树改为泛型对象入参
List<Map<String, Object>> result = CommonUtil.listToTree(maps, Material.Fields.id, StrUtil.toUnderlineCase(Material.Fields.parentId), "00.00.00.00");
return FuHttpResponse.Builder().dataResponse(result).build();
}

View File

@@ -0,0 +1,144 @@
package mjkf.xinke;
import jxl.write.WriteException;
import lombok.Data;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.math.NumberUtils;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;
import org.jxls.area.Area;
import org.jxls.command.AbstractCommand;
import org.jxls.command.Command;
import org.jxls.common.CellRef;
import org.jxls.common.Context;
import org.jxls.common.Size;
import org.jxls.transform.Transformer;
import org.jxls.transform.jexcel.JexcelTransformer;
import org.jxls.transform.poi.PoiTransformer;
/**
* 合并单元格命令
*/
@Data
public class MergeCommand extends AbstractCommand {
/**
* 合并的列数
*/
private String cols;
/**
* 合并的行数
*/
private String rows;
private Area area;
/**
* 单元格的样式
*/
private CellStyle cellStyle;
@Override
public String getName() {
return "merge";
}
@Override
public Command addArea(Area area) {
if (super.getAreaList().size() >= 1) {
throw new IllegalArgumentException("You can add only a single area to 'merge' command");
}
this.area = area;
return super.addArea(area);
}
@Override
public Size applyAt(CellRef cellRef, Context context) {
int rows = 1, cols = 1;
if (StringUtils.isNotBlank(this.rows)) {
Object rowsObj = getTransformationConfig().getExpressionEvaluator().evaluate(this.rows, context.toMap());
if (rowsObj != null && NumberUtils.isDigits(rowsObj.toString())) {
rows = NumberUtils.toInt(rowsObj.toString());
}
}
if (StringUtils.isNotBlank(this.cols)) {
Object colsObj = getTransformationConfig().getExpressionEvaluator().evaluate(this.cols, context.toMap());
if (colsObj != null && NumberUtils.isDigits(colsObj.toString())) {
cols = NumberUtils.toInt(colsObj.toString());
}
}
if (rows > 1 || cols > 1) {
Transformer transformer = this.getTransformer();
if (transformer instanceof PoiTransformer) {
return poiMerge(cellRef, context, (PoiTransformer) transformer, rows, cols);
} else if (transformer instanceof JexcelTransformer) {
return jexcelMerge(cellRef, context, (JexcelTransformer) transformer, rows, cols);
}
}
area.applyAt(cellRef, context);
return new Size(1, 1);
}
protected Size poiMerge(CellRef cellRef, Context context, PoiTransformer transformer, int rows, int cols) {
Sheet sheet = transformer.getWorkbook().getSheet(cellRef.getSheetName());
CellRangeAddress region = new CellRangeAddress(
cellRef.getRow(),
cellRef.getRow() + rows - 1,
cellRef.getCol(),
cellRef.getCol() + cols - 1);
sheet.addMergedRegion(region);
area.applyAt(cellRef, context);
if (cellStyle == null) {
setPoiCellStyle(transformer);
}
setRegionStyle(cellStyle, region, sheet);
return new Size(cols, rows);
}
protected Size jexcelMerge(CellRef cellRef, Context context, JexcelTransformer transformer, int rows, int cols) {
try {
transformer.getWritableWorkbook().getSheet(cellRef.getSheetName())
.mergeCells(
cellRef.getRow(),
cellRef.getCol(),
cellRef.getRow() + rows - 1,
cellRef.getCol() + cols - 1);
area.applyAt(cellRef, context);
} catch (WriteException e) {
throw new IllegalArgumentException("合并单元格失败");
}
return new Size(cols, rows);
}
public static void setRegionStyle(CellStyle cs, CellRangeAddress region, Sheet sheet) {
for (int i = region.getFirstRow(); i <= region.getLastRow(); i++) {
Row row = sheet.getRow(i);
if (row == null) {
row = sheet.createRow(i);
}
for (int j = region.getFirstColumn(); j <= region.getLastColumn(); j++) {
Cell cell = row.getCell(j);
if (cell == null) {
cell = row.createCell(j);
}
cell.setCellStyle(cs);
}
}
}
/**
* 设置单元格格式
* 根据自己需求修改
* @param transformer
* @return
*/
private void setPoiCellStyle(PoiTransformer transformer) {
cellStyle = transformer.getWorkbook().createCellStyle();
cellStyle.setBorderRight(BorderStyle.THIN);
cellStyle.setBorderRight(BorderStyle.THIN);
cellStyle.setBorderBottom(BorderStyle.THIN);
cellStyle.setAlignment(HorizontalAlignment.CENTER_SELECTION);
cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
cellStyle.setWrapText(true);
}
}

View File

@@ -0,0 +1,100 @@
package mjkf.xinke;
import lombok.extern.slf4j.Slf4j;
import mjkf.xinke.model.*;
import org.jxls.builder.xls.XlsCommentAreaBuilder;
import org.springframework.web.bind.annotation.RestController;
import springfox.documentation.swagger2.annotations.EnableSwagger2WebMvc;
import java.util.List;
@Slf4j
@EnableSwagger2WebMvc
@RestController
public class TableRenderTest {
public static void main(String[] args) throws Exception {
XlsCommentAreaBuilder.addCommandMapping("merge", MergeCommand.class);
var srcFilePath = "c:\\jxls_template.xls";
var destFilePath = "c:\\jxls_target.xls";
var projectType = "高速公路";
var year = "2021";
var projectItem0 = new ProjectItem("中交第一航务工程局有限公司f", "911200001030d610685",
"A", 1, "AA", "A", "厦门第二东通道工程",
"A3", "203765.922", "A", List.of("89.5", "89.5", "89.5"),
"89.5", "89.5", List.of("卢磊", "12", "吴波", "12", "12"), "备注");
var projectItem01 = new ProjectItem("中交第一航务工程局有限公司f", "911200001030d610685",
"A", 1, "AA", "A", "厦门第二东通道工程",
"A4", "203765.922", "A", List.of("89.5", "89.5", "89.5"),
"89.5", "89.5", List.of("卢磊", "12", "吴波", "12", "12"), "备注");
var projectItem02 = new ProjectItem("中交第一航务工程局有限公司f", "911200001030d610685",
"A", 1, "AA", "A", "厦门第二东通道工程",
"A4", "203765.922", "A", List.of("89.5", "89.5", "89.5"),
"89.5", "89.5", List.of("卢磊", "12", "吴波", "12", "12"), "备注");
var projectItem1 = new ProjectItem("中交第一航务工程局有限公司", "911200001030610685",
"A", 1, "AA", "A", "厦门第二东通道工程",
"A3", "203765.922", "A", List.of("89.5", "89.5", "89.5"),
"89.5", "89.5", List.of("卢磊", "12", "吴波", "12", "12"), "备注");
var projectItem2 = new ProjectItem("中交第一航务工程局有限公司", "911200001030610685",
"A", 1, "AA", "A", "厦门第二东通道工程2",
"A3", "209754.922", "AA", List.of("89.5", "89.5", "89.5"),
"89.5", "89.5", List.of("卢磊", "12", "吴波", "12", "12"), "备注");
var projectItem21 = new ProjectItem("中交第一航务工程局有限公司", "911200001030610685",
"A", 1, "AA", "A", "厦门第二东通道工程21",
"A3", "209754.922", "A", List.of("89.5", "89.5", "89.5"),
"89.5", "89.5", List.of("卢磊", "12", "吴波", "12", "12"), "备注");
var projectItem3 = new ProjectItem("中交第一航务工程局有限公司11", "91120000103061068511",
"A", 2, "A", "A", "厦门第二东通道工程3",
"A3", "207854.922", "B", List.of("89.5", "89.5", "89.5"),
"89.5", "89.5", List.of("卢磊", "12", "吴波", "12", "12"), "备注");
var projectItem4 = new ProjectItem("中交第一航务工程局有限公司113", "911200001030610685113",
"AA", 2, "A", "A", "厦门第二东通道工程3",
"A3", "204465.922", "C", List.of("89.5", "89.5", "89.5"),
"89.5", "89.5", List.of("卢磊", "12", "吴波", "12", "12"), "备注");
var projectItem5 = new ProjectItem("中交第一航务工程局有限公司113", "911200001030610685113",
"AA", 2, "A", "A", "厦门第二东通道工程3",
"A3", "201238.922", "AA", List.of("89.5", "89.5", "89.5"),
"89.5", "89.5", List.of("卢磊", "12", "吴波", "12", "12"), "备注");
var projectItem6 = new ProjectItem("中交第一航务工程局有限公司113", "911200001030610685113",
"AA", 2, "A", "A", "厦门第二东通道工程4",
"A3", "201187.922", "B", List.of("89.5", "89.5", "89.5"),
"89.5", "89.5", List.of("卢磊", "12", "吴波", "12", "12"), "备注");
var projectItem7 = new ProjectItem("中交第一航务工程局有限公司1131", "911200001030610685123",
"B", 2, "A", "A", "厦门第二东通道工程4",
"A3", "201187.922", "B", List.of("89.5", "89.5", "89.5"),
"89.5", "89.5", List.of("卢磊", "12", "吴波", "12", "12"), "备注");
var projectItem8 = new ProjectItem("中交第一航务工程局有限公司1131", "911200001030610685123",
"B", 2, "A", "A", "厦门第二东通道工程4",
"A3", "201187.922", "B", List.of("89.5", "89.5", "89.5"),
"89.5", "89.5", List.of("卢磊", "12", "吴波", "12", "12"), "备注");
var projectItem9 = new ProjectItem("福建省高速路桥建设发展有限公司", "91350203MA347QRM7Y",
"B", 1, "A", "B", "滨海东大道(沈海高速-海翔大道段)二期工程",
"A1", "201187.922", "B", List.of("89.5", "89.5", "89.5"),
"89.5", "89.5", List.of("卢磊", "12", "吴波", "12", "12"), "AA");
var projectItem10 = new ProjectItem("福建省交通科研院", "91350203MA347QRM7Y",
"B", 1, "A", "B", "滨海东大道(沈海高速-海翔大道段)二期工程",
"A2", "201187.922", "B", List.of("89.5", "89.5", "89.5"),
"89.5", "89.5", List.of("卢磊", "12", "吴波", "12", "12"), "A");
var projectItem11 = new ProjectItem("福建省交发信科", "91350203MA347QRM7Y",
"B", 1, "AA", "B", "滨海东大道(沈海高速-海翔大道段)二期工程",
"A3", "201187.922", "B", List.of("89.5", "89.5", "89.5"),
"89.5", "89.5", List.of("卢磊", "12", "吴波", "12", "12"), "A");
var projectItems = List.of(
projectItem0, projectItem01, projectItem02, projectItem1, projectItem2, projectItem21, projectItem3,
projectItem4, projectItem5, projectItem6, projectItem7, projectItem8,
projectItem9, projectItem10, projectItem11
);
var levelItems = LevelItem.toItems(LevelTypeItem.toItems(CompanyItem.toItems(projectItems)));
var sheetItems = List.of(
new SheetItem("路基施工", List.of("省高指", "省交通质监局", "项目法人"), levelItems, "1-1", List.of("项目经理", "任职时间(月)", "技术负责人", "任职时间(月)", "年度考核期月")),
new SheetItem("路面施工", List.of("省高指", "省交通质监局", "项目法人"), levelItems, "1-2", List.of("项目经理", "任职时间(月)", "技术负责人", "任职时间(月)", "年度考核期月"))
);
// 渲染
}
}

View File

@@ -0,0 +1,48 @@
package mjkf.xinke.model;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
@Data
public class CompanyItem {
public String no;
public String name;
public String code;
public String level;
public String score;
public Integer levelType; // 1=降级2=其他
public String projectLevel;
public String sheetName;
public String originGrade;
public String currentGrade;
public List<ProjectItem> projectItems;
public String remark;
static public List<CompanyItem> toItems(List<ProjectItem> projectItems) {
var no = 1;
var groupMap = projectItems.stream().collect(Collectors.groupingBy(item->List.of(item.getCompanyCode(), item.getCompanyName()), Collectors.toList()));
var result = new ArrayList<CompanyItem>();
for (var key: groupMap.keySet()) {
var item = new CompanyItem();
item.setProjectItems(groupMap.get(key));
var project = groupMap.get(key).get(0);
item.setName(project.getCompanyName());
item.setCode(project.getCompanyCode());
item.setLevel(project.getCompanyLevel());
item.setLevelType(project.getLevelType());
item.setProjectLevel(project.getContractSectionFinalGrade());
item.setSheetName(project.getSheetName());
item.setOriginGrade(project.getOriginGrade());
item.setCurrentGrade(project.getCurrentGrade());
item.setNo(String.valueOf(no));
item.setScore(project.getCompanyScore());
item.setRemark(project.getCompanyRemark());
no++;
result.add(item);
}
return result;
}
}

View File

@@ -0,0 +1,34 @@
package mjkf.xinke.model;
import cn.hutool.core.convert.Convert;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
@Data
public class LevelItem {
public String name;
public String level;
public String sheetName;
public String no;
public List<LevelTypeItem> levelTypeItems;
static public List<LevelItem> toItems(List<LevelTypeItem> levelTypeItems) {
var no = 1;
var groupMap = levelTypeItems.stream().collect(Collectors.groupingBy(item->item.getLevel(), Collectors.toList()));
var result = new ArrayList<LevelItem>();
for (String key: groupMap.keySet()) {
var item = new LevelItem();
item.setLevelTypeItems(groupMap.get(key));
var company = groupMap.get(key).get(0);
item.setLevel(company.getLevel());
item.setSheetName(company.getSheetName());
item.setNo(Convert.numberToChinese(no, false));
no++;
result.add(item);
}
return result;
}
}

View File

@@ -0,0 +1,42 @@
package mjkf.xinke.model;
import cn.hutool.core.convert.Convert;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
@Data
public class LevelTypeItem {
public String no;
public Integer levelType; // 1=降级2=其他
public String originGrade;
public String currentGrade;
public String level;
public List<CompanyItem> companyItems;
public String sheetName;
static public List<LevelTypeItem> toItems(List<CompanyItem> companyItems) {
var groupMap = companyItems.stream().collect(Collectors.groupingBy(item->List.of(
item.getLevelType(), item.getLevel(), item.getOriginGrade()
), Collectors.toList()));
var result = new ArrayList<LevelTypeItem>();
for (List key: groupMap.keySet()) {
var levelType = (Integer) key.get(0);
var level = (String) key.get(1);
var originGrade = (String) key.get(2);
var item = new LevelTypeItem();
item.setLevelType(levelType);
item.setLevel(level);
item.setCompanyItems(groupMap.get(key));
var company = groupMap.get(key).get(0);
item.setOriginGrade(originGrade);
item.setCurrentGrade(company.getCurrentGrade());
item.setSheetName(company.getSheetName());
item.setNo(Convert.numberToChinese(levelType, false));
result.add(item);
}
return result;
}
}

View File

@@ -0,0 +1,54 @@
package mjkf.xinke.model;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
@Data
public class ProjectItem {
public String companyName;
public String companyCode;
public String companyLevel;
public Integer levelType; // 1=降级2=其他
public String sheetName;
public String OriginGrade;
public String CurrentGrade;
public String name;
public String contractSectionNo;
public String contractPrice;
public String contractSectionFinalGrade;
public String companyScore;
public String score;
public List<String> otherField;
public List<String> otherField2;
public String companyRemark;
public ProjectItem() {}
public ProjectItem(
String companyName, String companyCode, String companyLevel, Integer levelType,
String OriginGrade, String CurrentGrade, String name, String contractSectionNo, String contractPrice,
String contractSectionFinalGrade, List<String> otherField, String score, String companyScore,
List<String> otherField2, String companyRemark
) {
this.companyName = companyName;
this.companyCode = companyCode;
this.companyLevel = companyLevel;
this.levelType = levelType;
// this.sheetName = sheetName;
this.OriginGrade = OriginGrade;
this.CurrentGrade = CurrentGrade;
this.name = name;
this.contractSectionNo = contractSectionNo;
this.contractPrice = contractPrice;
this.contractSectionFinalGrade = contractSectionFinalGrade;
this.otherField = new ArrayList<>();
this.otherField.addAll(otherField);
this.score = score;
this.companyScore = companyScore;
this.otherField2 = otherField2;
this.companyRemark = companyRemark;
}
}

View File

@@ -0,0 +1,107 @@
package mjkf.xinke.model;
import cn.hutool.core.convert.Convert;
import lombok.Data;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Data
public class SheetItem {
public String name;
public List<String> headers;
public List<String> headers2;
public List<LevelItem> levelItems;
public String no;
static public List<SheetItem> toItems(List<LevelItem> levelItems) {
var groupMap = levelItems.stream().collect(Collectors.groupingBy(item->item.getSheetName(), Collectors.toList()));
var result = new ArrayList<SheetItem>();
for (String key: groupMap.keySet()) {
var item = new SheetItem();
item.setLevelItems(groupMap.get(key));
var levelItem = groupMap.get(key).get(0);
item.setName(levelItem.getSheetName());
result.add(item);
}
return result;
}
public SheetItem() {
}
public SheetItem(String name, List<String> headers, List<LevelItem> levelItems, String no, List<String> headers2) {
this.name = name;
this.headers = headers;
this.headers2 = headers2;
this.levelItems = levelItems;
this.no = no;
this.sort();
this.buildNo();
}
/**
* 生成序号
*/
private void buildNo() {
var companyNo = 0;
var levelTypeNo = 1;
var levelNo = 1;
var levelItems = this.levelItems;
for (var levelItem: levelItems) {
levelItem.setNo(Convert.numberToChinese(levelNo, false));
levelNo++;
levelTypeNo = 1;
companyNo = 0;
var previousCompanyProjectCount = 0;
var previousCompanyScore = "";
for (var levelTypeItem : levelItem.levelTypeItems) {
levelTypeItem.setNo(Convert.numberToChinese(levelTypeNo, false));
levelTypeNo++;
for (var companyItem: levelTypeItem.companyItems) {
if (companyItem.projectItems.size() == previousCompanyProjectCount && companyItem.score.equals(previousCompanyScore)) {
// 项目数量相同且公司分数相同时排名并列
} else {
companyNo++;
}
previousCompanyProjectCount = companyItem.projectItems.size();
previousCompanyScore = companyItem.score;
companyItem.setNo(String.valueOf(companyNo));
}
}
}
}
private Integer gradeSortFlag(String grade) {
var map = Map.of("AA", 0, "A", 1, "B", 2, "C", 3, "D", 4);
var result = map.get(grade);
if (result == null) {
return 999999999;
}
return result;
}
/**
* 排序
*/
private void sort() {
var levelItems = this.levelItems;
levelItems.sort(Comparator.comparing(item -> gradeSortFlag(item.getLevel())));
for (var levelItem: levelItems) {
levelItem.levelTypeItems.sort(Comparator.comparingInt(LevelTypeItem::getLevelType));
for (var levelTypeItem : levelItem.levelTypeItems) {
levelTypeItem.companyItems.sort(Comparator.comparing(item -> -Float.valueOf(item.score)));
levelTypeItem.companyItems.sort(Comparator.comparing(item -> -item.projectItems.size()));
for (var companyItem: levelTypeItem.companyItems) {
companyItem.projectItems.sort(Comparator.comparing(item->-Float.valueOf(item.contractPrice)));
companyItem.projectItems.sort(Comparator.comparing(item -> gradeSortFlag(item.getContractSectionFinalGrade())));
}
}
}
}
}