weaver-hrm-salary/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctFormulaBO.java

123 lines
5.9 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.engine.salary.entity.salaryacct.bo;
import com.engine.salary.entity.datacollection.DataCollectionEmployee;
import com.engine.salary.entity.salaryformula.dto.SalaryFormulaEmployeeDTO;
import com.engine.salary.entity.salaryitem.po.SalaryItemPO;
import com.engine.salary.entity.salarysob.po.SalarySobBackItemPO;
import com.engine.salary.entity.salarysob.po.SalarySobItemPO;
import com.engine.salary.enums.SalaryRoundingModeEnum;
import com.engine.salary.enums.salaryitem.SalaryDataTypeEnum;
import com.engine.salary.util.JsonUtil;
import com.engine.salary.util.SalaryEntityUtil;
import com.engine.salary.util.SalaryI18nUtil;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.*;
/**
* 薪资核算公式变量
* <p>Copyright: Copyright (c) 2022</p>
* <p>Company: 泛微软件</p>
*
* @author qiantao
* @version 1.0
**/
public class SalaryAcctFormulaBO {
/**
* 对核算结果做舍入操作
*
* @param value
* @param salaryItem
* @param salarySobBackItems 薪资账套回算项目List
* @param salarySobBackItemMap 薪资账套回算项目Map
* @param salaryItemIdKeySalarySobItemPOMap 薪资账套下薪资项目Map
* @return
*/
public static String roundResultValue(String value, SalaryItemPO salaryItem,
List<SalarySobBackItemPO> salarySobBackItems,
Map<Long, SalarySobBackItemPO> salarySobBackItemMap,
Map<Long, SalarySobItemPO> salaryItemIdKeySalarySobItemPOMap) {
// 值为空,不需要四舍五入
if (StringUtils.isEmpty(value) || salaryItem == null) {
return StringUtils.EMPTY;
}
// 薪资项目字段类型为string无需四舍五入
SalaryDataTypeEnum dataTypeEnum = SalaryDataTypeEnum.parseByValue(salaryItem.getDataType());
if (dataTypeEnum == SalaryDataTypeEnum.STRING) {
return value;
}
// 获取薪资账套副本中的舍入规则和保留位数,拿不到再去薪资项目中取
Integer salaryItemRoundingMode = Optional.ofNullable(salaryItemIdKeySalarySobItemPOMap.get(salaryItem.getId())).map(SalarySobItemPO::getRoundingMode)
.orElse(salaryItem.getRoundingMode());
Integer salaryItemPattern = Optional.ofNullable(salaryItemIdKeySalarySobItemPOMap.get(salaryItem.getId())).map(SalarySobItemPO::getPattern)
.orElse(salaryItem.getPattern());
if(CollectionUtils.isNotEmpty(salarySobBackItems) && salarySobBackItemMap.containsKey(salaryItem.getId())){
// 薪资项目是回算项目
salaryItemRoundingMode = salarySobBackItemMap.get(salaryItem.getId()).getRoundingMode();
salaryItemPattern = salarySobBackItemMap.get(salaryItem.getId()).getPattern();
}
BigDecimal bigDecimalValue = SalaryEntityUtil.empty2Zero(value);
RoundingMode roundingMode = RoundingMode.HALF_UP;
if (Objects.equals(salaryItemRoundingMode, SalaryRoundingModeEnum.ROUND_UP.getValue())) {
roundingMode = RoundingMode.UP;
}
if (Objects.equals(salaryItemRoundingMode, SalaryRoundingModeEnum.ROUND_DOWN.getValue())) {
roundingMode = RoundingMode.DOWN;
}
//见分取角(只取保留小数后一位向上舍入)
if (Objects.equals(salaryItemRoundingMode, SalaryRoundingModeEnum.CEILING.getValue())) {
bigDecimalValue = bigDecimalValue.setScale(salaryItemPattern + 1, RoundingMode.FLOOR);
roundingMode = RoundingMode.UP;
}
//向上取偶
if (Objects.equals(salaryItemRoundingMode, SalaryRoundingModeEnum.UP_EVEN.getValue())) {
bigDecimalValue = bigDecimalValue.setScale(0, RoundingMode.UP);
int number = bigDecimalValue.intValue();
if (number % 2 != 0) {
bigDecimalValue = bigDecimalValue.add(BigDecimal.valueOf(1));
}
}
return bigDecimalValue.setScale(salaryItemPattern, roundingMode).toPlainString();
}
/**
* 变量中的人员信息
*
* @param simpleEmployee
* @return
*/
public static Map<String, String> convert2FormulaEmployee(DataCollectionEmployee simpleEmployee) {
if (simpleEmployee == null) {
return Collections.emptyMap();
}
String sexName = Optional.ofNullable(simpleEmployee.getSex())
.map(sex -> StringUtils.equals(sex, "0") ? SalaryI18nUtil.getI18nLabel(102440, "")
: SalaryI18nUtil.getI18nLabel(102442, ""))
.orElse(StringUtils.EMPTY);
SalaryFormulaEmployeeDTO formulaEmployee = SalaryFormulaEmployeeDTO.builder()
.employeeId(simpleEmployee.getEmployeeId())
.username(simpleEmployee.getUsername())
.email(simpleEmployee.getEmail())
.mobile(simpleEmployee.getMobile())
.telephone(simpleEmployee.getTelephone())
.sex(sexName)
.status(simpleEmployee.getStatus())
.statusName(simpleEmployee.getStatusName())
.departmentName(simpleEmployee.getDepartmentName())
.departmentId(simpleEmployee.getDepartmentId())
.subcompanyName(simpleEmployee.getSubcompanyName())
.jobtitleName(simpleEmployee.getJobtitleName())
.jobtitleId(simpleEmployee.getJobtitleId())
.jobcall(simpleEmployee.getJobcall())
.companystartdate(simpleEmployee.getCompanystartdate())
.birthday(simpleEmployee.getBirthday())
.workcode(simpleEmployee.getWorkcode())
.build();
return JsonUtil.parseMap(JsonUtil.toJsonString(formulaEmployee), String.class);
}
}