核算优先级

This commit is contained in:
钱涛 2023-09-06 15:48:43 +08:00
parent d03aed1d1b
commit 43cdf98411
3 changed files with 97 additions and 22 deletions

View File

@ -3,7 +3,6 @@ package com.engine.salary.entity.salaryacct.bo;
import com.engine.salary.entity.salaryformula.ExpressFormula;
import com.engine.salary.enums.SalaryRoundingModeEnum;
import com.engine.salary.enums.salaryitem.SalaryDataTypeEnum;
import lombok.Data;
import lombok.experimental.Accessors;
/**
@ -13,7 +12,6 @@ import lombok.experimental.Accessors;
* @date: Created in 2023/5/19 16:00
* @version:v1.0
*/
@Data
@Accessors(chain = true)
public class SalaryCalcItem {
@ -54,4 +52,82 @@ public class SalaryCalcItem {
*/
private ExpressFormula expressFormula;
public Long getSalaryItemId() {
return salaryItemId;
}
public void setSalaryItemId(Long salaryItemId) {
this.salaryItemId = salaryItemId;
}
public String getSalaryItemCode() {
return salaryItemCode;
}
public void setSalaryItemCode(String salaryItemCode) {
this.salaryItemCode = salaryItemCode;
}
public String getIncomeCategory() {
return incomeCategory;
}
public void setIncomeCategory(String incomeCategory) {
this.incomeCategory = incomeCategory;
}
public Integer getUseInEmployeeSalary() {
return useInEmployeeSalary;
}
public void setUseInEmployeeSalary(Integer useInEmployeeSalary) {
this.useInEmployeeSalary = useInEmployeeSalary;
}
public String getDataType() {
return dataType;
}
public void setDataType(String dataType) {
this.dataType = dataType;
}
public Integer getRoundingMode() {
return roundingMode;
}
public void setRoundingMode(Integer roundingMode) {
this.roundingMode = roundingMode;
}
public Integer getPattern() {
return pattern;
}
public void setPattern(Integer pattern) {
this.pattern = pattern;
}
public ExpressFormula getExpressFormula() {
return expressFormula;
}
public void setExpressFormula(ExpressFormula expressFormula) {
this.expressFormula = expressFormula;
}
@Override
public String toString() {
return "SalaryCalcItem{" +
"salaryItemId=" + salaryItemId +
", salaryItemCode='" + salaryItemCode + '\'' +
", incomeCategory='" + incomeCategory + '\'' +
", useInEmployeeSalary=" + useInEmployeeSalary +
", dataType='" + dataType + '\'' +
", roundingMode=" + roundingMode +
", pattern=" + pattern +
", expressFormula=" + expressFormula +
'}';
}
}

View File

@ -30,10 +30,8 @@ public class SalaryCalcItemGraph {
* @param expressFormulas 公式详情
*/
public SalaryCalcItemGraph(List<SalarySobItemPO> salarySobItems, List<ExpressFormula> expressFormulas) {
Map<String, SalarySobItemPO> salaryItemMap = SalaryEntityUtil.convert2Map(salarySobItems,
SalarySobItemPO::getSalaryItemCode);
Map<Long, ExpressFormula> expressFormulaMap = SalaryEntityUtil.convert2Map(expressFormulas,
ExpressFormula::getId);
Map<String, SalarySobItemPO> salaryItemMap = SalaryEntityUtil.convert2Map(salarySobItems, SalarySobItemPO::getSalaryItemCode);
Map<Long, ExpressFormula> expressFormulaMap = SalaryEntityUtil.convert2Map(expressFormulas, ExpressFormula::getId);
Map<Long, List<FormulaVar>> formulaVarMap = ExpressFormulaBO.buildFormulaVar(expressFormulas);
Map<Long, SalaryCalcItemGraphNode> nodeMap = new HashMap<>();
@ -42,7 +40,7 @@ public class SalaryCalcItemGraph {
SalaryCalcItemGraphNode node = nodeMap.computeIfAbsent(salarySobItem.getSalaryItemId(), key -> new SalaryCalcItemGraphNode(salarySobItem, expressFormula));
List<FormulaVar> formulaVars = expressFormula == null ? Collections.emptyList() : formulaVarMap.getOrDefault(expressFormula.getId(), Collections.emptyList());
for (FormulaVar formulaVar : formulaVars) {
if ( StringUtils.isNotEmpty(formulaVar.getFieldId())) {
if (StringUtils.isNotEmpty(formulaVar.getFieldId())) {
String salaryItemCode = formulaVar.getFieldId().split(SalaryConstant.FORMULA_VAR_SEPARATOR)[1];
SalarySobItemPO subSalarySobItem = salaryItemMap.get(salaryItemCode);
if (subSalarySobItem == null) {
@ -150,15 +148,16 @@ public class SalaryCalcItemGraph {
private List<SalaryCalcItemGraphNode> destNodes;
public SalaryCalcItemGraphNode(SalarySobItemPO salarySobItem, ExpressFormula expressFormula) {
this.salaryCalcItem = new SalaryCalcItem()
.setSalaryItemId(salarySobItem.getSalaryItemId())
.setSalaryItemCode(salarySobItem.getSalaryItemCode())
.setIncomeCategory(salarySobItem.getIncomeCategory())
// .setUseInEmployeeSalary(salarySobItem.getUseInEmployeeSalary())
// .setDataType(salarySobItem.getDataType())
.setRoundingMode(salarySobItem.getRoundingMode())
.setPattern(salarySobItem.getPattern())
.setExpressFormula(expressFormula);
SalaryCalcItem salaryCalcItem = new SalaryCalcItem();
salaryCalcItem.setSalaryItemId(salarySobItem.getSalaryItemId());
salaryCalcItem.setSalaryItemCode(salarySobItem.getSalaryItemCode());
salaryCalcItem.setIncomeCategory(salarySobItem.getIncomeCategory());
// salaryCalcItem.setUseInEmployeeSalary(salarySobItem.getUseInEmployeeSalary());
// salaryCalcItem.setDataType(salarySobItem.getDataType());
salaryCalcItem.setRoundingMode(salarySobItem.getRoundingMode());
salaryCalcItem.setPattern(salarySobItem.getPattern());
salaryCalcItem.setExpressFormula(expressFormula);
this.salaryCalcItem = salaryCalcItem;
this.inDegree = 0;
this.visited = false;
this.destNodes = new ArrayList<>();

View File

@ -733,12 +733,12 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
// 本次运算的回算薪资项目所涉及的变量
Set<String> issuedFieldIds = new HashSet<>();
// 9计算薪资项目的运算优先级
// List<List<Long>> salarySobItemsWithPriority = SalaryAcctCalculatePriorityBO.calculatePriority(salarySobItemPOS, salaryItemPOS, expressFormulas, salarySobBackItems, issuedFieldIds);
List<List<Long>> salarySobItemsWithPriority = new ArrayList<>();
SalaryCalcItemGraph salaryCalcItemGraph = new SalaryCalcItemGraph(salarySobItemPOS, expressFormulas);
List<SalaryCalcItem> salaryCalcItems = salaryCalcItemGraph.sort();
List<Long> properties = SalaryEntityUtil.properties(salaryCalcItems, SalaryCalcItem::getSalaryItemId, Collectors.toList());
salarySobItemsWithPriority.add(properties);
List<List<Long>> salarySobItemsWithPriority = SalaryAcctCalculatePriorityBO.calculatePriority(salarySobItemPOS, salaryItemPOS, expressFormulas, salarySobBackItems, issuedFieldIds);
// List<List<Long>> salarySobItemsWithPriority = new ArrayList<>();
// SalaryCalcItemGraph salaryCalcItemGraph = new SalaryCalcItemGraph(salarySobItemPOS, expressFormulas);
// List<SalaryCalcItem> salaryCalcItems = salaryCalcItemGraph.sort();
// List<Long> properties = SalaryEntityUtil.properties(salaryCalcItems, SalaryCalcItem::getSalaryItemId, Collectors.toList());
// salarySobItemsWithPriority.add(properties);
// 10根据id查询其他合并计税的薪资核算记录
List<SalaryAcctRecordPO> otherSalaryAcctRecordPOS = getSalaryAcctRecordService(user).listById4OtherConsolidatedTax(salaryAcctRecordPO.getId());