fix: 调整任务优先级
This commit is contained in:
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