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,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())));
}
}
}
}
}