修复加锁顺序

This commit is contained in:
钱涛 2022-11-17 18:53:22 +08:00
parent 4779cc861e
commit d07ded883f
3 changed files with 13 additions and 9 deletions

View File

@ -49,7 +49,8 @@ public class SalaryAcctCalculateBO {
/**
* 核算锁定值
*/
private Map<Long, SalaryAcctResultPO> salaryAcctLockResultPOS;
private Map<String, SalaryAcctResultPO> salaryAcctLockResultPOS;
private List<Long> lockSalaryItemIds;
/**

View File

@ -133,7 +133,8 @@ public class SalaryAcctCalculateServiceImpl extends Service implements SalaryAcc
Set<Long> salaryAcctEmployeeIds = SalaryEntityUtil.properties(salaryAcctCalculateBO.getSalaryAcctEmployeePOS(), SalaryAcctEmployeePO::getId);
List<SalaryAcctResultPO> salaryAcctResultPOS = getSalaryAcctResultService(user).listBySalaryAcctEmployeeIds(salaryAcctEmployeeIds);
//核算锁定的值
Map<Long, SalaryAcctResultPO> salaryAcctLockResultPOS = MapUtils.emptyIfNull(salaryAcctCalculateBO.getSalaryAcctLockResultPOS());
Map<String, SalaryAcctResultPO> salaryAcctLockResultPOS = MapUtils.emptyIfNull(salaryAcctCalculateBO.getSalaryAcctLockResultPOS());
List<Long> lockSalaryItemIds = salaryAcctCalculateBO.getLockSalaryItemIds();
// 9查询相同税款所属期内涉及合并计税的其他薪资核算结果
Set<Long> otherSalaryAcctRecordIds = SalaryEntityUtil.properties(salaryAcctCalculateBO.getOtherSalaryAcctRecordPOS(), SalaryAcctRecordPO::getId);
List<SalaryAcctResultPO> otherSalaryAcctResultPOS = getSalaryAcctResultService(user).listBySalaryAcctRecordIdsAndEmployeeIds(otherSalaryAcctRecordIds, employeeIds);
@ -156,6 +157,7 @@ public class SalaryAcctCalculateServiceImpl extends Service implements SalaryAcc
List<SalaryAcctResultTempPO> salaryAcctResultTempPOS = Lists.newArrayList();
// 开始核算
for (SalaryAcctEmployeePO salaryAcctEmployeePO : salaryAcctCalculateBO.getSalaryAcctEmployeePOS()) {
Long salaryAcctEmployeePOId = salaryAcctEmployeePO.getId();
//1 获取当前薪资核算人员的公式中的变量的值
List<CalculateFormulaVarBO.FormulaVarValue> formulaVarValues = formulaVarMap.get(salaryAcctEmployeePO.getEmployeeId() + "_" + salaryAcctEmployeePO.getTaxAgentId());
//2人员信息
@ -194,8 +196,8 @@ public class SalaryAcctCalculateServiceImpl extends Service implements SalaryAcc
resultValue = SalaryAcctFormulaBO.roundResultValue(resultValue, salaryItemPO);
//是否锁定
if (salaryAcctLockResultPOS.containsKey(salaryItemId) && salaryAcctLockResultPOS.get(salaryItemId) != null) {
resultValue = salaryAcctLockResultPOS.get(salaryItemId).getResultValue();
if (lockSalaryItemIds.contains(salaryItemId) && salaryAcctLockResultPOS.get(salaryItemId + "_" + salaryAcctEmployeePOId) != null) {
resultValue = salaryAcctLockResultPOS.get(salaryItemId + "_" + salaryAcctEmployeePOId).getResultValue();
}
// 将已经计算过的薪资项目的值转换成公式变量的值添加到集合中
@ -207,7 +209,7 @@ public class SalaryAcctCalculateServiceImpl extends Service implements SalaryAcc
// 转换成薪资核算结果po
SalaryAcctResultTempPO salaryAcctResultTempPO = new SalaryAcctResultTempPO()
.setSalaryAcctRecordId(salaryAcctEmployeePO.getSalaryAcctRecordId())
.setSalaryAcctEmpId(salaryAcctEmployeePO.getId())
.setSalaryAcctEmpId(salaryAcctEmployeePOId)
.setEmployeeId(salaryAcctEmployeePO.getEmployeeId())
.setTaxAgentId(salaryAcctEmployeePO.getTaxAgentId())
.setSalarySobId(salaryAcctEmployeePO.getSalarySobId())

View File

@ -548,14 +548,14 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
//核算锁定值
List<Long> lockSalaryItemIds = salaryAcctRecordPO.getLockSalaryItemIds();
Map<Long, SalaryAcctResultPO> acctResults = new HashMap<>();
Map<String, SalaryAcctResultPO> acctResults = new HashMap<>();
if (CollectionUtils.isNotEmpty(lockSalaryItemIds)) {
List<SalaryAcctResultPO> acctResultPOS = listBySalaryAcctRecordIds(Collections.singleton(calculateParam.getSalaryAcctRecordId()));
acctResults = Optional.ofNullable(acctResultPOS)
.orElse(new ArrayList<>())
.stream()
.filter(po -> lockSalaryItemIds.contains(po.getSalaryItemId()))
.collect(Collectors.toMap(SalaryAcctResultPO::getSalaryItemId, a -> a, (a, b) -> a));
.collect(Collectors.toMap(po -> po.getSalaryItemId() + "_" + po.getSalaryAcctEmpId(), a -> a, (a, b) -> a));
}
// 8查询公式详情
@ -595,6 +595,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
.setSalarySobCycleDTO(salarySobCycleDTO)
.setOtherSalaryAcctRecordPOS(otherSalaryAcctRecordPOS)
.setSalaryAcctLockResultPOS(MapUtils.emptyIfNull(acctResults))
.setLockSalaryItemIds(lockSalaryItemIds)
.setSalarySobItemPOS(salarySobItemPOS)
.setSalaryItemIdWithPriorityList(salarySobItemsWithPriority)
.setExpressFormulas(expressFormulas)
@ -741,14 +742,14 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
List<SalaryAcctResultPO> salaryAcctResultValues = this.listBySalaryAcctEmployeeIds(salaryAcctEmployeeIds);
Map<Long, SalaryAcctResultPO> salaryAcctResultValueMap = SalaryEntityUtil.convert2Map(salaryAcctResultValues, SalaryAcctResultPO::getSalaryAcctEmpId);
// 值可以锁定的薪资项目
Set<Long> salaryItemIds = canLockSalaryItemIds(salaryAcctRecord.getSalarySobId());
// Set<Long> salaryItemIds = canLockSalaryItemIds(salaryAcctRecord.getSalarySobId());
// if (Objects.nonNull(updateParam.getSalaryItemId())) {
// if (!salaryItemIds.contains(updateParam.getSalaryItemId())) {
// return;
// }
// salaryItemIds = Collections.singleton(updateParam.getSalaryItemId());
// }
salaryItemIds = Collections.singleton(updateParam.getSalaryItemId());
Set<Long> salaryItemIds = Collections.singleton(updateParam.getSalaryItemId());
if (updateParam.getLockStatus() == LockStatusEnum.LOCK) {
salaryAcctRecord.getLockSalaryItemIds().addAll(salaryItemIds);
} else {