合计行

This commit is contained in:
Harryxzy 2024-12-25 10:00:26 +08:00
parent e9b347c07c
commit 425b4c7171
4 changed files with 119 additions and 4 deletions

View File

@ -1,5 +1,6 @@
package com.engine.salary.service;
import com.engine.salary.entity.salaryacct.param.SalaryAcctResultQueryParam;
import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO;
import com.engine.salary.entity.salaryitem.param.SalaryItemSearchParam;
import com.engine.salary.entity.salaryitem.po.SalaryItemPO;
@ -10,6 +11,7 @@ import com.engine.salary.entity.salarysob.po.SalaryApprovalRulePO;
import java.util.Collection;
import java.util.List;
import java.util.Map;
/**
* @author Harryxzy
@ -114,4 +116,8 @@ public interface SalaryApprovalRuleService {
void deleteBySalarySobIds(Collection<Long> ids);
List<SalaryApprovalRulePO> listBySalarySobIds(Collection<Long> salarySobIds);
Map<String, Object> sumRow(SalaryAcctResultQueryParam queryParam);
}

View File

@ -2,7 +2,11 @@ package com.engine.salary.service.impl;
import com.engine.common.util.ServiceUtil;
import com.engine.core.impl.Service;
import com.engine.salary.entity.salaryacct.bo.SalaryAcctFormulaBO;
import com.engine.salary.entity.salaryacct.param.SalaryAcctResultQueryParam;
import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO;
import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO;
import com.engine.salary.entity.salaryacct.po.SalaryAcctResultPO;
import com.engine.salary.entity.salaryitem.param.SalaryItemSearchParam;
import com.engine.salary.entity.salaryitem.po.SalaryItemPO;
import com.engine.salary.entity.salarysob.bo.SalaryApprovalBO;
@ -11,8 +15,11 @@ import com.engine.salary.entity.salarysob.dto.SalarySobItemAggregateDTO;
import com.engine.salary.entity.salarysob.param.ApprovalRequestSaveParam;
import com.engine.salary.entity.salarysob.param.SalaryApprovalQueryParam;
import com.engine.salary.entity.salarysob.po.SalaryApprovalRulePO;
import com.engine.salary.entity.salarysob.po.SalarySobBackItemPO;
import com.engine.salary.entity.salarysob.po.SalarySobItemPO;
import com.engine.salary.entity.salarysob.po.SalarySobPO;
import com.engine.salary.enums.common.FilterEnum;
import com.engine.salary.enums.salaryitem.SalaryDataTypeEnum;
import com.engine.salary.exception.SalaryRunTimeException;
import com.engine.salary.mapper.salaryacct.SalaryAcctRecordMapper;
import com.engine.salary.mapper.salarysob.SalaryApprovalRuleMapper;
@ -22,18 +29,19 @@ import com.engine.salary.sys.entity.po.SalarySysConfPO;
import com.engine.salary.sys.service.SalarySysConfService;
import com.engine.salary.sys.service.impl.SalarySysConfServiceImpl;
import com.engine.salary.util.JsonUtil;
import com.engine.salary.util.SalaryEntityUtil;
import com.engine.salary.util.SalaryI18nUtil;
import com.engine.salary.util.db.IdGenerator;
import com.engine.salary.util.db.MapperProxyFactory;
import com.engine.salary.util.valid.ValidUtil;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.math.NumberUtils;
import weaver.conn.RecordSet;
import weaver.hrm.User;
import java.util.Collection;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
/**
@ -72,6 +80,18 @@ public class SalaryApprovalRuleServiceImpl extends Service implements SalaryAppr
return ServiceUtil.getService(SalarySysConfServiceImpl.class, user);
}
private SalaryAcctEmployeeService getSalaryAcctEmployeeService(User user) {
return ServiceUtil.getService(SalaryAcctEmployeeServiceImpl.class, user);
}
private SalaryAcctResultService getSalaryAcctResultService(User user) {
return ServiceUtil.getService(SalaryAcctResultServiceImpl.class, user);
}
private SalarySobBackItemService getSalarySobBackItemService(User user) {
return ServiceUtil.getService(SalarySobBackItemServiceImpl.class, user);
}
@Override
public List<SalaryApprovalRulePO> listAll() {
return getSalaryApprovalRuleMapper().listAll();
@ -245,4 +265,68 @@ public class SalaryApprovalRuleServiceImpl extends Service implements SalaryAppr
}
return getSalaryApprovalRuleMapper().listSome(SalaryApprovalRulePO.builder().salarySobIds(salarySobIds).build());
}
@Override
public Map<String, Object> sumRow(SalaryAcctResultQueryParam queryParam) {
// 审批信息
SalaryApprovalDTO approvalInfoByRecordId = getApprovalInfoByRecordId(queryParam.getSalaryAcctRecordId());
List<Long> salaryItemIds = new ArrayList<>();
for (SalaryApprovalDTO.approvalItemGroup groupDTO : approvalInfoByRecordId.getApprovalItemGroup()) {
salaryItemIds.addAll(groupDTO.getApprovalItems().stream().map(SalaryApprovalDTO.approvalItem::getSalaryItemId).collect(Collectors.toList()));
}
//其他条件
List<SalaryAcctResultQueryParam.OtherCondition> otherConditions = queryParam.getOtherConditions();
List<SalaryAcctEmployeePO> salaryAcctEmployeePOList = new ArrayList<>();
if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(otherConditions)) {
List<Long> items = SalaryEntityUtil.properties(otherConditions, SalaryAcctResultQueryParam.OtherCondition::getItemId, Collectors.toList());
List<SalaryAcctResultPO> list = getSalaryAcctResultService(user).listBySalaryAcctRecordIdsAndSalaryItemIds(Collections.singletonList(queryParam.getSalaryAcctRecordId()), items);
for (int i = 0; i < otherConditions.size(); i++) {
SalaryAcctResultQueryParam.OtherCondition otherCondition = otherConditions.get(i);
Long itemId = otherCondition.getItemId();
FilterEnum filter = otherCondition.getFilter();
List<String> params = otherCondition.getParams();
list = list.stream().filter(a -> Objects.equals(a.getSalaryItemId(), itemId)).filter(a -> filter.filter(params).test(a.getResultValue())).collect(Collectors.toList());
}
List<Long> salaryAcctEmpId = SalaryEntityUtil.properties(list, SalaryAcctResultPO::getSalaryAcctEmpId, Collectors.toList());
if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(salaryAcctEmpId)) {
queryParam.setIds(salaryAcctEmpId);
}
}
// 查询薪资核算人员分页
salaryAcctEmployeePOList = getSalaryAcctEmployeeService(user).listByResultQueryParam(queryParam);
if (org.apache.commons.collections4.CollectionUtils.isEmpty(salaryAcctEmployeePOList)) {
return null;
}
// 查询薪资核算记录
SalaryAcctRecordPO salaryAcctRecordPO = getSalaryAcctRecordService(user).getById(queryParam.getSalaryAcctRecordId());
if (Objects.isNull(salaryAcctRecordPO)) {
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98747, "薪资核算记录不存在或已被删除"));
}
// 查询薪资核算所用薪资账套的薪资项目
List<SalarySobItemPO> salarySobItemPOS = getSalarySobItemService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId());
salarySobItemPOS = salarySobItemPOS.stream().filter(sobItem -> salaryItemIds.contains(sobItem.getSalaryItemId())).collect(Collectors.toList());
Map<Long, SalarySobItemPO> salaryItemIdKeySalarySobItemPOMap = SalaryEntityUtil.convert2Map(salarySobItemPOS, SalarySobItemPO::getSalaryItemId);
if (Objects.equals(salaryAcctRecordPO.getBackCalcStatus(), NumberUtils.INTEGER_ONE)) {
// 是回算获取回算项
List<SalarySobBackItemPO> salarySobBackItemPOS = getSalarySobBackItemService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId());
salaryItemIds.addAll(salarySobBackItemPOS.stream().map(SalarySobBackItemPO::getSalaryItemId).collect(Collectors.toList()));
}
List<SalaryItemPO> salaryItemPOS = getSalaryItemService(user).listByIds(salaryItemIds);
List<Long> itemIds = salaryItemPOS.stream().map(SalaryItemPO::getId).collect(Collectors.toList());
// 查询薪资核算结果
List<Long> salaryAcctEmployeeIds = SalaryEntityUtil.properties(salaryAcctEmployeePOList, SalaryAcctEmployeePO::getId, Collectors.toList());
List<SalaryAcctResultPO> salaryAcctResultPOS = getSalaryAcctResultService(user).listByAcctEmployeeIdsAndSalaryItemIds(salaryAcctEmployeeIds, itemIds);
Map<String, Object> map = new HashMap<>();
Map<Long, List<SalaryAcctResultPO>> acctResultMap = SalaryEntityUtil.group2Map(salaryAcctResultPOS, SalaryAcctResultPO::getSalaryItemId);
salaryItemPOS.stream().filter(item -> SalaryDataTypeEnum.NUMBER.getValue().equals(item.getDataType())).forEach(item -> {
BigDecimal sum = Optional.ofNullable(acctResultMap.get(item.getId())).orElse(new ArrayList<>()).stream().map(SalaryAcctResultPO::getResultValue).filter(NumberUtils::isCreatable).map(BigDecimal::new).reduce(BigDecimal.ZERO, BigDecimal::add);
map.put(item.getId().toString(), SalaryAcctFormulaBO.roundResultValue(sum.toString(), item, Collections.emptyList(), Collections.emptyMap(), salaryItemIdKeySalarySobItemPOMap));
});
return map;
}
}

View File

@ -626,6 +626,22 @@ public class SalarySobController {
return new ResponseResult<SalaryAcctResultQueryParam, Map<String, Object>>(user).run(getSalaryApprovalWrapper(user)::listSalaryApprovalAcctResult, param);
}
/**
* 获取审批时薪资核算结果合计行
* @param request
* @param response
* @param param
* @return
*/
@POST
@Path("/salaryApproval/acctresult/sum")
@Produces(MediaType.APPLICATION_JSON)
public String sumSalaryApprovalAcctResult(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryAcctResultQueryParam param) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<SalaryAcctResultQueryParam, Map<String, Object>>(user).run(getSalaryApprovalWrapper(user)::sumSalaryApprovalAcctResult, param);
}
/**
* 保存审批流程id
* @param request

View File

@ -165,4 +165,13 @@ public class SalaryApprovalWrapper extends Service {
public void saveApprovalRequestId(ApprovalRequestSaveParam saveParam) {
getSalaryApprovalRuleService(user).saveApprovalRequestId(saveParam);
}
public Map<String, Object> sumSalaryApprovalAcctResult(SalaryAcctResultQueryParam queryParam) {
ValidUtil.doValidator(queryParam);
Map<String, Object> datas = new HashMap<>();
Map<String, Object> sumRow = getSalaryApprovalRuleService(user).sumRow(queryParam);
datas.put("sumRow", sumRow);
return datas;
}
}