公式变量支持获取上月数据

This commit is contained in:
钱涛 2025-02-17 15:54:35 +08:00
parent 22077f431e
commit 291cd426fe
7 changed files with 76 additions and 7 deletions

View File

@ -101,6 +101,11 @@ public class CalculateFormulaVarBO {
*/
private List<Map<String, Object>> variableArchiveList;
/**
* 上月核算结果
*/
List<SalaryAcctResultPO> lastMonthResultPOS;
public CalculateFormulaVarBO(List<DataCollectionEmployee> simpleEmployees,
List<SalaryArchiveDataDTO> salaryArchiveData,
List<AddUpSituation> addUpSituationPOS,
@ -109,7 +114,8 @@ public class CalculateFormulaVarBO {
List<Map<String, Object>> welfareData,
List<AttendQuoteDataDTO> attendQuoteDataDTOS,
List<SalaryAcctResultPO> salaryAcctResultPOS,
List<Map<String, Object>> variableArchiveList) {
List<Map<String, Object>> variableArchiveList,
List<SalaryAcctResultPO> lastMonthResultPOS) {
this.simpleEmployees = simpleEmployees;
this.salaryArchiveData = salaryArchiveData;
this.addUpSituationPOS = addUpSituationPOS;
@ -119,6 +125,7 @@ public class CalculateFormulaVarBO {
this.attendQuoteDataDTOS = attendQuoteDataDTOS;
this.salaryAcctResultPOS = salaryAcctResultPOS;
this.variableArchiveList = variableArchiveList;
this.lastMonthResultPOS = lastMonthResultPOS;
}
/**
@ -147,7 +154,10 @@ public class CalculateFormulaVarBO {
handleAttendQuoteData(salaryAcctCalculateBO, resultMap);
//处理核算人员信息
handleSalaryAcctEmployee(salaryAcctCalculateBO, resultMap);
//处理人员信息
handleSimpleEmployees(resultMap);
//处理上月薪资核算结果
handleLastMonthResult(salaryAcctCalculateBO, resultMap);
return resultMap;
}
@ -231,6 +241,25 @@ public class CalculateFormulaVarBO {
});
}
private void handleLastMonthResult(SalaryAcctCalculateBO salaryAcctCalculateBO, Map<String, List<FormulaVarValue>> resultMap) {
// key:薪资项目的idvalue:薪资项目的code
Map<Long, String> salaryItemCodeMap = SalaryEntityUtil.convert2Map(salaryAcctCalculateBO.getSalaryItemPOS(), SalaryItemPO::getId, SalaryItemPO::getCode);
// key:employeeId_taxAgentIdvalue:薪资核算结果集合
Map<String, List<SalaryAcctResultPO>> salaryAcctResultMap = SalaryEntityUtil.group2Map(lastMonthResultPOS,
salaryAcctResultPO -> salaryAcctResultPO.getEmployeeId() + "_" + salaryAcctResultPO.getTaxAgentId());
// 填充到返回结果集中
salaryAcctResultMap.forEach((key, salaryAcctResultPOS) -> {
List<FormulaVarValue> formulaVarValues = resultMap.computeIfAbsent(key, k -> Lists.newArrayList());
formulaVarValues.addAll(salaryAcctResultPOS.stream()
.map(salaryAcctResultPO -> {
String fieldId = SalaryFormulaReferenceEnum.LAST_MONTH_CALC.getValue()
+ SalaryFormulaFieldConstant.FIELD_ID_SEPARATOR
+ salaryItemCodeMap.getOrDefault(salaryAcctResultPO.getSalaryItemId(), StringUtils.EMPTY);
return new FormulaVarValue().setFieldId(fieldId).setFieldValue(salaryAcctResultPO.getResultValue());
})
.collect(Collectors.toList()));
});
}
/**
* 处理薪资档案会涉及调薪计薪规则+处理核算日期

View File

@ -17,6 +17,7 @@ public enum SalaryFormulaReferenceEnum implements BaseEnum<String> {
SALARY_ITEM("salaryItem", "薪资项目", 84960),
// SALARY_ITEM_OF_HISTORY("salaryItemOfHistory", "历史台账薪资项目", 85364),
LAST_MONTH_CALC("lastMonthCalc", "上月核算", 257728),
EMPLOYEE_INFO("employeeInfo", "员工基本信息", 85366),
SALARY_ARCHIVES("salaryArchives", "薪资档案", 85368),
ATTEND("attend", "考勤引用", 85367),

View File

@ -9,6 +9,7 @@ import com.engine.salary.entity.salaryacct.po.SalaryAcctResultPO;
import com.engine.salary.util.page.PageInfo;
import java.util.Collection;
import java.util.Date;
import java.util.List;
import java.util.Map;
@ -159,6 +160,7 @@ public interface SalaryAcctResultService {
/**
* 锁定单元格
*
* @param param
*/
void lock(SalaryAcctResultLockParam param);
@ -179,8 +181,8 @@ public interface SalaryAcctResultService {
void batchUpdateOriginResultValue(List<SalaryAcctResultPO> salaryAcctResultValues);
/**
* @description 薪资回算
* @return void
* @description 薪资回算
* @author Harryxzy
* @date 2022/11/24 20:26
*/
@ -196,8 +198,8 @@ public interface SalaryAcctResultService {
List<SalaryAcctResultPO> listBySalaryAcctRecordIdsAndSalaryItemIds(Collection<Long> salaryAcctRecordIds, Collection<Long> salaryItemIds);
/**
* @description 根据薪资核算人员id薪资项目id获取薪资核算结果
* @return List<SalaryAesultPO>
* @description 根据薪资核算人员id薪资项目id获取薪资核算结果
* @author Harryxzy
* @date 2022/12/26 22:24
*/
@ -207,6 +209,7 @@ public interface SalaryAcctResultService {
/**
* 检查当前用户是否有查看权限
*
* @param salaryAcctRecordId
* @return
*/
@ -214,7 +217,18 @@ public interface SalaryAcctResultService {
/**
* 薪资核算结果批量更新
*
* @param param
*/
void batchUpdate(SalaryAcctResultBatchUpdateParam param);
/**
* 查询指定账套月份的数据
* <p>Copyright: Copyright (c) 2024</p>
* <p>Company: 泛微软件</p>
*
* @author qiantao
* @version 1.0
**/
List<SalaryAcctResultPO> listBySobSalaryMonth(Date salaryMonth, Long salarySobId, List<Long> employeeIds);
}

View File

@ -289,7 +289,7 @@ public class PushServiceImpl extends Service implements PushService {
List<Long> salaryAcctEmployeeIds = SalaryEntityUtil.properties(salaryAcctCalculateBO.getSalaryAcctEmployeePOS(), SalaryAcctEmployeePO::getId, Collectors.toList());
List<SalaryAcctResultPO> salaryAcctResultPOS = getSalaryAcctResultService(user).listBySalaryAcctEmployeeIds(salaryAcctEmployeeIds);
CalculateFormulaVarBO calculateFormulaVarBO = new CalculateFormulaVarBO(simpleEmployees, new ArrayList<>(), new ArrayList<>(), new ArrayList<>(), new ArrayList<>(), new ArrayList<>(), new ArrayList<>(), salaryAcctResultPOS, new ArrayList<>());
CalculateFormulaVarBO calculateFormulaVarBO = new CalculateFormulaVarBO(simpleEmployees, new ArrayList<>(), new ArrayList<>(), new ArrayList<>(), new ArrayList<>(), new ArrayList<>(), new ArrayList<>(), salaryAcctResultPOS, new ArrayList<>(),new ArrayList<>());
Map<String, List<CalculateFormulaVarBO.FormulaVarValue>> formulaVarMap = calculateFormulaVarBO.convert2FormulaVar(salaryAcctCalculateBO);
@ -403,7 +403,7 @@ public class PushServiceImpl extends Service implements PushService {
List<Long> salaryAcctEmployeeIds = SalaryEntityUtil.properties(salaryAcctCalculateBO.getSalaryAcctEmployeePOS(), SalaryAcctEmployeePO::getId, Collectors.toList());
List<SalaryAcctResultPO> salaryAcctResultPOS = getSalaryAcctResultService(user).listBySalaryAcctEmployeeIds(salaryAcctEmployeeIds);
CalculateFormulaVarBO calculateFormulaVarBO = new CalculateFormulaVarBO(simpleEmployees, new ArrayList<>(), new ArrayList<>(), new ArrayList<>(), new ArrayList<>(), new ArrayList<>(), new ArrayList<>(), salaryAcctResultPOS, new ArrayList<>());
CalculateFormulaVarBO calculateFormulaVarBO = new CalculateFormulaVarBO(simpleEmployees, new ArrayList<>(), new ArrayList<>(), new ArrayList<>(), new ArrayList<>(), new ArrayList<>(), new ArrayList<>(), salaryAcctResultPOS, new ArrayList<>(), new ArrayList<>());
Map<String, List<CalculateFormulaVarBO.FormulaVarValue>> formulaVarMap = calculateFormulaVarBO.convert2FormulaVar(salaryAcctCalculateBO);
List<PushSettingPO> pushSettingPOS = getPushSettingMapper().listSome(PushSettingPO.builder().able(1).build());

View File

@ -143,6 +143,7 @@ public class RemoteExcelServiceImpl extends Service implements RemoteExcelServic
if (referenceEnum != null) {
switch (referenceEnum) {
case SALARY_ITEM:
case LAST_MONTH_CALC:
case ISSUED:
vars = salaryItem2FormulaVar(referenceEnum, extendParam);
break;
@ -241,6 +242,8 @@ public class RemoteExcelServiceImpl extends Service implements RemoteExcelServic
if (ReferenceTypeEnum.FORMULA.equals(referenceTypeEnum)) {
result.put(SalaryFormulaReferenceEnum.SALARY_ITEM.getDefaultLabel(),
salaryItem2FormulaVar(SalaryFormulaReferenceEnum.SALARY_ITEM, null));
result.put(SalaryFormulaReferenceEnum.LAST_MONTH_CALC.getDefaultLabel(),
salaryItem2FormulaVar(SalaryFormulaReferenceEnum.LAST_MONTH_CALC, null));
result.put(SalaryFormulaReferenceEnum.ISSUED.getDefaultLabel(),
salaryItem2FormulaVar(SalaryFormulaReferenceEnum.ISSUED, null));
result.put(SalaryFormulaReferenceEnum.SALARY_ARCHIVES.getDefaultLabel(),

View File

@ -27,6 +27,7 @@ import com.engine.salary.enums.salaryformula.SalaryFormulaReferenceEnum;
import com.engine.salary.formlua.entity.standard.ExcelResult;
import com.engine.salary.service.*;
import com.engine.salary.sys.enums.TaxDeclarationFunctionEnum;
import com.engine.salary.util.SalaryDateUtil;
import com.engine.salary.util.SalaryEntityUtil;
import com.google.common.collect.Lists;
import lombok.extern.slf4j.Slf4j;
@ -189,9 +190,13 @@ public class SalaryAcctCalculateServiceImpl extends Service implements SalaryAcc
List<SalaryAcctEmployeePO> otherSalaryAcctEmployeePOS = getSalaryAcctEmployeeService(user).listBySalaryAcctRecordIdsAndEmployeeIds(otherSalaryAcctRecordIds, employeeIds);
Map<String, List<SalaryAcctEmployeePO>> otherSalaryAcctEmployeePOMap = SalaryEntityUtil.group2Map(otherSalaryAcctEmployeePOS, salaryAcctEmployeePO -> salaryAcctEmployeePO.getEmployeeId() + "_" + salaryAcctEmployeePO.getTaxAgentId());
sw.stop();
// 查询上个薪资所属月核算人员薪资数据
sw.start("查询上个薪资所属月核算人员薪资数据");
List<SalaryAcctResultPO> lastMonthResultPOS = getSalaryAcctResultService(user).listBySobSalaryMonth(SalaryDateUtil.toDate(salarySobCycleDTO.getSalaryMonth().minusMonths(1), 1), salaryAcctCalculateBO.getSalarySobPO().getId(), employeeIds);
sw.stop();
// 10转换成公式编辑器中的变量
sw.start("转换成公式编辑器中的变量");
CalculateFormulaVarBO calculateFormulaVarBO = new CalculateFormulaVarBO(simpleEmployees, salaryArchiveData, addUpSituationPOS, addUpDeductionPOS, otherDeductionPOS, welfareData, attendQuoteDataDTOS, salaryAcctResultPOS, variableArchiveList);
CalculateFormulaVarBO calculateFormulaVarBO = new CalculateFormulaVarBO(simpleEmployees, salaryArchiveData, addUpSituationPOS, addUpDeductionPOS, otherDeductionPOS, welfareData, attendQuoteDataDTOS, salaryAcctResultPOS, variableArchiveList,lastMonthResultPOS);
Map<String, List<CalculateFormulaVarBO.FormulaVarValue>> formulaVarMap = calculateFormulaVarBO.convert2FormulaVar(salaryAcctCalculateBO);
sw.stop();
sw.start("数据结构准备");

View File

@ -1,5 +1,6 @@
package com.engine.salary.service.impl;
import cn.hutool.core.collection.CollUtil;
import com.engine.common.util.ServiceUtil;
import com.engine.core.impl.Service;
import com.engine.hrmelog.entity.dto.LoggerContext;
@ -192,6 +193,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
private VariableItemService getVariableItemService(User user) {
return ServiceUtil.getService(VariableItemServiceImpl.class, user);
}
private SalaryApprovalRuleService getSalaryApprovalRuleService(User user) {
return ServiceUtil.getService(SalaryApprovalRuleServiceImpl.class, user);
}
@ -917,7 +919,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
getSalaryAcctProgressService(user).finish(SalaryCacheKey.ACCT_PROGRESS + calculateParam.getSalaryAcctRecordId(), true);
//更新薪资核算记录最后操作日期
getSalaryAcctRecordService(user).updateDate(salaryAcctRecordPO.getId(),new Date());
getSalaryAcctRecordService(user).updateDate(salaryAcctRecordPO.getId(), new Date());
stopWatch.stop();
log.info(stopWatch.prettyPrint());
@ -1244,4 +1246,19 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
}
}
@Override
public List<SalaryAcctResultPO> listBySobSalaryMonth(Date salaryMonth, Long salarySobId, List<Long> employeeIds) {
List<SalaryAcctRecordPO> salaryAcctRecordPOS = getSalaryAcctRecordService(user).listSome(SalaryAcctRecordPO.builder().salarySobId(salarySobId).salaryMonth(salaryMonth).build());
List<Long> recordIds = SalaryEntityUtil.properties(salaryAcctRecordPOS, SalaryAcctRecordPO::getId, Collectors.toList());
SalaryAcctResultPO resultParam = SalaryAcctResultPO.builder().salaryAcctRecordIds(recordIds).build();
if(CollUtil.isNotEmpty(employeeIds)){
resultParam.setEmployeeIds(employeeIds);
}
List<SalaryAcctResultPO> salaryAcctResultPOS = getSalaryAcctResultMapper().listSome(resultParam);
encryptUtil.decryptList(salaryAcctResultPOS, SalaryAcctResultPO.class);
return salaryAcctResultPOS;
}
}