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

122 lines
5.8 KiB
Java
Raw Normal View History

2022-04-08 19:08:59 +08:00
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;
2023-07-25 16:46:57 +08:00
import com.engine.salary.entity.salarysob.po.SalarySobItemPO;
2022-04-08 19:08:59 +08:00
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;
2023-07-25 16:46:57 +08:00
import org.apache.commons.collections.CollectionUtils;
2022-04-08 19:08:59 +08:00
import org.apache.commons.lang3.StringUtils;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.*;
2022-04-08 19:08:59 +08:00
/**
* 薪资核算公式变量
* <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
2023-07-25 16:46:57 +08:00
* @param salaryItemIdKeySalarySobItemPOMap 薪资账套下薪资项目Map
2022-04-08 19:08:59 +08:00
* @return
*/
2023-07-25 16:46:57 +08:00
public static String roundResultValue(String value, SalaryItemPO salaryItem,
List<SalarySobBackItemPO> salarySobBackItems,
Map<Long, SalarySobBackItemPO> salarySobBackItemMap,
Map<Long, SalarySobItemPO> salaryItemIdKeySalarySobItemPOMap) {
2022-04-08 19:08:59 +08:00
// 值为空,不需要四舍五入
if (StringUtils.isEmpty(value) || salaryItem == null) {
return StringUtils.EMPTY;
}
// 薪资项目字段类型为string无需四舍五入
SalaryDataTypeEnum dataTypeEnum = SalaryDataTypeEnum.parseByValue(salaryItem.getDataType());
if (dataTypeEnum == SalaryDataTypeEnum.STRING) {
return value;
}
2023-07-25 16:46:57 +08:00
// 获取薪资账套副本中的舍入规则和保留位数,拿不到再去薪资项目中取
2023-07-26 13:43:53 +08:00
Integer salaryItemRoundingMode = Optional.ofNullable(salaryItemIdKeySalarySobItemPOMap.get(salaryItem.getId())).map(SalarySobItemPO::getRoundingMode)
2023-07-25 16:46:57 +08:00
.orElse(salaryItem.getRoundingMode());
2023-07-26 13:43:53 +08:00
Integer salaryItemPattern = Optional.ofNullable(salaryItemIdKeySalarySobItemPOMap.get(salaryItem.getId())).map(SalarySobItemPO::getPattern)
2023-07-25 16:46:57 +08:00
.orElse(salaryItem.getPattern());
if(CollectionUtils.isNotEmpty(salarySobBackItems) && salarySobBackItemMap.containsKey(salaryItem.getId())){
// 薪资项目是回算项目
salaryItemRoundingMode = salarySobBackItemMap.get(salaryItem.getId()).getRoundingMode();
salaryItemPattern = salarySobBackItemMap.get(salaryItem.getId()).getPattern();
}
2022-04-08 19:08:59 +08:00
BigDecimal bigDecimalValue = SalaryEntityUtil.empty2Zero(value);
RoundingMode roundingMode = RoundingMode.HALF_UP;
if (Objects.equals(salaryItemRoundingMode, SalaryRoundingModeEnum.ROUND_UP.getValue())) {
2022-04-08 19:08:59 +08:00
roundingMode = RoundingMode.UP;
}
if (Objects.equals(salaryItemRoundingMode, SalaryRoundingModeEnum.ROUND_DOWN.getValue())) {
2022-04-08 19:08:59 +08:00
roundingMode = RoundingMode.DOWN;
}
2022-08-17 18:33:46 +08:00
//见分取角(只取保留小数后一位向上舍入)
if (Objects.equals(salaryItemRoundingMode, SalaryRoundingModeEnum.CEILING.getValue())) {
bigDecimalValue = bigDecimalValue.setScale(salaryItemPattern + 1, RoundingMode.FLOOR);
2022-08-17 18:33:46 +08:00
roundingMode = RoundingMode.UP;
}
2022-09-01 16:17:27 +08:00
//向上取偶
if (Objects.equals(salaryItemRoundingMode, SalaryRoundingModeEnum.UP_EVEN.getValue())) {
2022-09-01 16:17:27 +08:00
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();
2022-04-08 19:08:59 +08:00
}
/**
* 变量中的人员信息
*
* @param simpleEmployee
* @return
*/
public static Map<String, String> convert2FormulaEmployee(DataCollectionEmployee simpleEmployee) {
if (simpleEmployee == null) {
return Collections.emptyMap();
}
String sexName = Optional.ofNullable(simpleEmployee.getSex())
2022-09-01 16:17:27 +08:00
.map(sex -> StringUtils.equals(sex, "0") ? SalaryI18nUtil.getI18nLabel(102440, "")
2022-04-08 19:08:59 +08:00
: 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())
.departmentName(simpleEmployee.getDepartmentName())
2022-09-08 10:13:57 +08:00
.departmentId(simpleEmployee.getDepartmentId())
2022-08-29 14:50:26 +08:00
.subcompanyName(simpleEmployee.getSubcompanyName())
2022-04-29 14:17:31 +08:00
.jobtitleName(simpleEmployee.getJobtitleName())
2022-09-08 10:13:57 +08:00
.jobtitleId(simpleEmployee.getJobtitleId())
2022-04-29 14:17:31 +08:00
.jobcall(simpleEmployee.getJobcall())
.companystartdate(simpleEmployee.getCompanystartdate())
2022-04-08 19:08:59 +08:00
.birthday(simpleEmployee.getBirthday())
2022-07-04 18:58:49 +08:00
.workcode(simpleEmployee.getWorkcode())
2022-04-08 19:08:59 +08:00
.build();
return JsonUtil.parseMap(JsonUtil.toJsonString(formulaEmployee), String.class);
}
}