diff --git a/src/com/engine/salary/entity/salaryacct/bo/SalaryCalcItem.java b/src/com/engine/salary/entity/salaryacct/bo/SalaryCalcItem.java new file mode 100644 index 000000000..576e14dc9 --- /dev/null +++ b/src/com/engine/salary/entity/salaryacct/bo/SalaryCalcItem.java @@ -0,0 +1,57 @@ +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; + +/** + * @description: 薪资核算涉及的薪资项目 + * @author: xiajun + * @modified By: xiajun + * @date: Created in 2023/5/19 16:00 + * @version:v1.0 + */ +@Data +@Accessors(chain = true) +public class SalaryCalcItem { + + /** + * 薪资项目id + */ + private Long salaryItemId; + /** + * 薪资项目编号 + */ + private String salaryItemCode; + /** + * 所得项目 + */ + private String incomeCategory; + /** + * 薪资档案引用。0:薪资档案未引用、1:薪资档案引用 + * 为处理历史数据而留,不再使用 + */ + @Deprecated + private Integer useInEmployeeSalary; + /** + * 字段类型 + * @see SalaryDataTypeEnum + */ + private String dataType; + /** + * 舍入规则 + * @see SalaryRoundingModeEnum + */ + private Integer roundingMode; + /** + * 小数位数 + */ + private Integer pattern; + /** + * 公式 + */ + private ExpressFormula expressFormula; + +} diff --git a/src/com/engine/salary/entity/salaryacct/bo/SalaryCalcItemGraph.java b/src/com/engine/salary/entity/salaryacct/bo/SalaryCalcItemGraph.java index e9f840fd3..a78bdfacf 100644 --- a/src/com/engine/salary/entity/salaryacct/bo/SalaryCalcItemGraph.java +++ b/src/com/engine/salary/entity/salaryacct/bo/SalaryCalcItemGraph.java @@ -1,14 +1,11 @@ package com.engine.salary.entity.salaryacct.bo; import com.engine.salary.entity.salaryformula.ExpressFormula; +import com.engine.salary.entity.salaryformula.po.FormulaVar; import com.engine.salary.entity.salarysob.po.SalarySobItemPO; +import com.engine.salary.report.common.constant.SalaryConstant; import com.engine.salary.util.SalaryEntityUtil; import com.google.common.collect.Lists; -import com.googlecode.aviator.Expression; -import com.weaver.excel.formula.api.entity.FormulaVar; -import com.weaver.hrm.salary.constant.SalaryConstant; -import com.weaver.hrm.salary.enums.salaryitem.SalaryFormulaReferenceEnum; -import com.weaver.teams.domain.user.SimpleEmployee; import lombok.Data; import org.apache.commons.lang3.StringUtils; @@ -32,33 +29,27 @@ public class SalaryCalcItemGraph { * @param salarySobItems 薪资账套的薪资项目 * @param expressFormulas 公式详情 */ - public SalaryCalcItemGraph(List salarySobItems, List expressFormulas, SimpleEmployee currentUser) { + public SalaryCalcItemGraph(List salarySobItems, List expressFormulas) { Map salaryItemMap = SalaryEntityUtil.convert2Map(salarySobItems, SalarySobItemPO::getSalaryItemCode); Map expressFormulaMap = SalaryEntityUtil.convert2Map(expressFormulas, ExpressFormula::getId); Map> formulaVarMap = ExpressFormulaBO.buildFormulaVar(expressFormulas); - Map expressionMap = ExpressFormulaBO.compile(expressFormulas, currentUser); Map nodeMap = new HashMap<>(); for (SalarySobItemPO salarySobItem : salarySobItems) { - Expression expression = expressionMap.get(salarySobItem.getFormulaId()); ExpressFormula expressFormula = expressFormulaMap.get(salarySobItem.getFormulaId()); - SalaryCalcItemGraphNode node = nodeMap.computeIfAbsent(salarySobItem.getSalaryItemId(), key -> new SalaryCalcItemGraphNode(salarySobItem, expressFormula, expression)); - List formulaVars = expressFormula == null ? Collections.emptyList() - : formulaVarMap.getOrDefault(expressFormula.getId(), Collections.emptyList()); + SalaryCalcItemGraphNode node = nodeMap.computeIfAbsent(salarySobItem.getSalaryItemId(), key -> new SalaryCalcItemGraphNode(salarySobItem, expressFormula)); + List formulaVars = expressFormula == null ? Collections.emptyList() : formulaVarMap.getOrDefault(expressFormula.getId(), Collections.emptyList()); for (FormulaVar formulaVar : formulaVars) { - if (StringUtils.equalsIgnoreCase(formulaVar.getModule(), SalaryConstant.MODULE) - && StringUtils.isNotEmpty(formulaVar.getFieldId()) - && StringUtils.startsWith(formulaVar.getFieldId(), SalaryFormulaReferenceEnum.CURRENT_CALC.getValue() + SalaryConstant.FORMULA_VAR_SEPARATOR)) { + if ( StringUtils.isNotEmpty(formulaVar.getFieldId())) { String salaryItemCode = formulaVar.getFieldId().split(SalaryConstant.FORMULA_VAR_SEPARATOR)[1]; SalarySobItemPO subSalarySobItem = salaryItemMap.get(salaryItemCode); if (subSalarySobItem == null) { continue; } ExpressFormula subExpressFormula = expressFormulaMap.get(subSalarySobItem.getFormulaId()); - Expression subExpression = expressionMap.get(subSalarySobItem.getFormulaId()); - SalaryCalcItemGraphNode destNode = nodeMap.computeIfAbsent(subSalarySobItem.getSalaryItemId(), key -> new SalaryCalcItemGraphNode(subSalarySobItem, subExpressFormula, subExpression)); + SalaryCalcItemGraphNode destNode = nodeMap.computeIfAbsent(subSalarySobItem.getSalaryItemId(), key -> new SalaryCalcItemGraphNode(subSalarySobItem, subExpressFormula)); node.getDestNodes().add(destNode); } } @@ -158,17 +149,16 @@ public class SalaryCalcItemGraph { */ private List destNodes; - public SalaryCalcItemGraphNode(SalarySobItemPO salarySobItem, ExpressFormula expressFormula, Expression expression) { + 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()) +// .setUseInEmployeeSalary(salarySobItem.getUseInEmployeeSalary()) +// .setDataType(salarySobItem.getDataType()) .setRoundingMode(salarySobItem.getRoundingMode()) .setPattern(salarySobItem.getPattern()) - .setExpressFormula(expressFormula) - .setExpression(expression); + .setExpressFormula(expressFormula); this.inDegree = 0; this.visited = false; this.destNodes = new ArrayList<>(); diff --git a/src/com/engine/salary/report/common/constant/SalaryConstant.java b/src/com/engine/salary/report/common/constant/SalaryConstant.java index b6af93d9d..4e3a32a5f 100644 --- a/src/com/engine/salary/report/common/constant/SalaryConstant.java +++ b/src/com/engine/salary/report/common/constant/SalaryConstant.java @@ -9,4 +9,35 @@ public class SalaryConstant { * 列表中薪资项目动态列后缀标识 */ public static final String DYNAMIC_SUFFIX = "_salaryItem"; + + /** + * 模块标识 + */ + public static final String MODULE = "hrmsalary"; + + /** + * 公共租户标识 + */ + public static final String DEFAULT_TENANT_KEY = "all_teams"; + /** + * 通用的分隔符 + */ + public static final String COMMON_SEPARATOR = "-"; + /** + * 下划线 + */ + public static final String FORMULA_VAR_SEPARATOR = "_"; + /** + * 下划线分隔符 + */ + public static final String UNDERLINE_SEPARATOR = "_"; + /** + * 完整主域名 + */ + public static final String PRIMARY_DOMAIN = "primary.domain"; + + /** + * 图片公共地址 + */ + public static final String IMG_URL = "/papi/file/preview?type=imgs&fileId=%s&random=123456"; } diff --git a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java index 717cfc917..ab3612b8c 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java @@ -733,7 +733,13 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe // 本次运算的回算薪资项目所涉及的变量 Set issuedFieldIds = new HashSet<>(); // 9、计算薪资项目的运算优先级 - List> salarySobItemsWithPriority = SalaryAcctCalculatePriorityBO.calculatePriority(salarySobItemPOS, salaryItemPOS, expressFormulas, salarySobBackItems, issuedFieldIds); +// List> salarySobItemsWithPriority = SalaryAcctCalculatePriorityBO.calculatePriority(salarySobItemPOS, salaryItemPOS, expressFormulas, salarySobBackItems, issuedFieldIds); + List> salarySobItemsWithPriority = new ArrayList<>(); + SalaryCalcItemGraph salaryCalcItemGraph = new SalaryCalcItemGraph(salarySobItemPOS, expressFormulas); + List salaryCalcItems = salaryCalcItemGraph.sort(); + List properties = SalaryEntityUtil.properties(salaryCalcItems, SalaryCalcItem::getSalaryItemId, Collectors.toList()); + salarySobItemsWithPriority.add(properties); + // 10、根据id查询其他合并计税的薪资核算记录 List otherSalaryAcctRecordPOS = getSalaryAcctRecordService(user).listById4OtherConsolidatedTax(salaryAcctRecordPO.getId()); // 11、查询本次核算人员