fix: 调整任务优先级
This commit is contained in:
@@ -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;
|
||||
|
||||
}
|
@@ -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 项目材料价格预算计算数值没有小数点
|
||||
*/
|
||||
}
|
||||
|
||||
|
@@ -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();
|
||||
}
|
||||
|
144
src/test/java/mjkf/xinke/MergeCommand.java
Normal file
144
src/test/java/mjkf/xinke/MergeCommand.java
Normal 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);
|
||||
}
|
||||
|
||||
}
|
100
src/test/java/mjkf/xinke/TableRenderTest.java
Normal file
100
src/test/java/mjkf/xinke/TableRenderTest.java
Normal 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("项目经理", "任职时间(月)", "技术负责人", "任职时间(月)", "年度考核期月"))
|
||||
);
|
||||
// 渲染
|
||||
|
||||
}
|
||||
}
|
48
src/test/java/mjkf/xinke/model/CompanyItem.java
Normal file
48
src/test/java/mjkf/xinke/model/CompanyItem.java
Normal 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;
|
||||
}
|
||||
}
|
34
src/test/java/mjkf/xinke/model/LevelItem.java
Normal file
34
src/test/java/mjkf/xinke/model/LevelItem.java
Normal 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;
|
||||
}
|
||||
}
|
42
src/test/java/mjkf/xinke/model/LevelTypeItem.java
Normal file
42
src/test/java/mjkf/xinke/model/LevelTypeItem.java
Normal 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;
|
||||
}
|
||||
}
|
54
src/test/java/mjkf/xinke/model/ProjectItem.java
Normal file
54
src/test/java/mjkf/xinke/model/ProjectItem.java
Normal 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;
|
||||
}
|
||||
}
|
107
src/test/java/mjkf/xinke/model/SheetItem.java
Normal file
107
src/test/java/mjkf/xinke/model/SheetItem.java
Normal 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())));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user