昂立薪酬二开
This commit is contained in:
parent
ae25e554c1
commit
137006b6bd
|
|
@ -1,5 +1,6 @@
|
|||
package com.engine.salary.biz;
|
||||
|
||||
import com.engine.salary.common.LocalDateRange;
|
||||
import com.engine.salary.config.SalaryElogConfig;
|
||||
import com.engine.salary.encrypt.EncryptUtil;
|
||||
import com.engine.salary.entity.salaryarchive.dto.SalaryItemAdjustRecordListDTO;
|
||||
|
|
@ -248,4 +249,16 @@ public class SalaryArchiveItemBiz {
|
|||
sqlSession.close();
|
||||
}
|
||||
}
|
||||
|
||||
public List<Long> listArchiveIdByEffectiveTimeAndArchiveIds(LocalDateRange salaryCycle, List<Long> salaryArchiveIds) {
|
||||
SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession();
|
||||
try {
|
||||
SalaryArchiveItemMapper mapper = sqlSession.getMapper(SalaryArchiveItemMapper.class);
|
||||
List<Long> salaryArchiveItemPOS = mapper.listArchiveIdByEffectiveTimeAndArchiveIds(salaryCycle, salaryArchiveIds);
|
||||
sqlSession.commit();
|
||||
return salaryArchiveItemPOS;
|
||||
} finally {
|
||||
sqlSession.close();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -167,7 +167,7 @@ public class SalaryAcctResultBO {
|
|||
* @param salarySobItemAggregateDTO
|
||||
* @return
|
||||
*/
|
||||
public static List<WeaTableColumnGroup> buildTableColumns(SalarySobItemAggregateDTO salarySobItemAggregateDTO, List<Long> lockSalaryItemIds) {
|
||||
public static List<WeaTableColumnGroup> buildTableColumns(SalarySobItemAggregateDTO salarySobItemAggregateDTO, List<Long> lockSalaryItemIds, Long onlySalaryItemId) {
|
||||
List<WeaTableColumnGroup> columns = Lists.newArrayList();
|
||||
// 员工信息字段
|
||||
for (SalarySobEmpFieldDTO salarySobEmpFieldDTO : salarySobItemAggregateDTO.getEmpFields()) {
|
||||
|
|
@ -180,17 +180,30 @@ public class SalaryAcctResultBO {
|
|||
}
|
||||
List<WeaTableColumnGroup> childrenColumns = Lists.newArrayList();
|
||||
for (SalarySobItemDTO salarySobItemDTO : salarySobItemGroupDTO.getItems()) {
|
||||
if (onlySalaryItemId != null) {
|
||||
if (!onlySalaryItemId.equals(salarySobItemDTO.getSalaryItemId())) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
if (lockSalaryItemIds.contains(salarySobItemDTO.getSalaryItemId())) {
|
||||
childrenColumns.add(new WeaTableColumnGroup(SalaryPageUtil.selfAdaption(salarySobItemDTO.getName(), salarySobItemDTO.getWidth()), salarySobItemDTO.getName(), "" + salarySobItemDTO.getSalaryItemId(), LockStatusEnum.LOCK.getValue(), salarySobItemDTO.getPattern(), salarySobItemDTO.getDataType()));
|
||||
} else {
|
||||
childrenColumns.add(new WeaTableColumnGroup(SalaryPageUtil.selfAdaption(salarySobItemDTO.getName(), salarySobItemDTO.getWidth()), salarySobItemDTO.getName(), "" + salarySobItemDTO.getSalaryItemId(), LockStatusEnum.UNLOCK.getValue(), salarySobItemDTO.getPattern(), salarySobItemDTO.getDataType()));
|
||||
}
|
||||
}
|
||||
if (CollectionUtils.isEmpty(childrenColumns)) {
|
||||
continue;
|
||||
}
|
||||
WeaTableColumnGroup weaTableColumnWapper = new WeaTableColumnGroup(SalaryPageUtil.selfAdaption(salarySobItemGroupDTO.getName(), 0), salarySobItemGroupDTO.getName(), String.valueOf(salarySobItemGroupDTO.getId()), childrenColumns);
|
||||
columns.add(weaTableColumnWapper);
|
||||
}
|
||||
// 没有分类的薪资项目
|
||||
for (SalarySobItemDTO salarySobItemDTO : salarySobItemAggregateDTO.getItems()) {
|
||||
if (onlySalaryItemId != null) {
|
||||
if (!onlySalaryItemId.equals(salarySobItemDTO.getSalaryItemId())) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
if (lockSalaryItemIds.contains(salarySobItemDTO.getSalaryItemId())) {
|
||||
columns.add(new WeaTableColumnGroup(SalaryPageUtil.selfAdaption(salarySobItemDTO.getName(), salarySobItemDTO.getWidth()), salarySobItemDTO.getName(), "" + salarySobItemDTO.getSalaryItemId(), LockStatusEnum.LOCK.getValue(), salarySobItemDTO.getPattern(), salarySobItemDTO.getDataType()));
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -0,0 +1,30 @@
|
|||
package com.engine.salary.entity.salaryacct.dto;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author Harryxzy
|
||||
* @ClassName alWorkflowInfoDTO
|
||||
* @date 2024/06/03 11:12
|
||||
* @description
|
||||
*/
|
||||
@Builder
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@Data
|
||||
public class AlWorkflowInfoDTO {
|
||||
|
||||
// 薪资核算人数
|
||||
private Integer empNum;
|
||||
|
||||
// 核算记录id
|
||||
private Long salaryAcctRecordId;
|
||||
|
||||
List<Map<String, Object>> resultList;
|
||||
}
|
||||
|
|
@ -67,4 +67,7 @@ public class SalaryAcctEmployeeQueryParam extends BaseQueryParam {
|
|||
private List<Long> ids;
|
||||
|
||||
private String workcode;
|
||||
|
||||
// 人员id
|
||||
private List<Long> employeeIds;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -31,6 +31,11 @@ public class SalaryAcctResultQueryParam extends BaseQueryParam {
|
|||
@DataCheck(require = true, message = "参数错误,薪资核算记录ID不能为空")
|
||||
private Long salaryAcctRecordId;
|
||||
|
||||
/**
|
||||
* 昂立 - 是否是流程
|
||||
*/
|
||||
private boolean isWorkflow;
|
||||
|
||||
//人员姓名
|
||||
private String employeeName;
|
||||
|
||||
|
|
@ -69,6 +74,10 @@ public class SalaryAcctResultQueryParam extends BaseQueryParam {
|
|||
private List<OtherCondition> otherConditions;
|
||||
|
||||
|
||||
// 员工id
|
||||
private Collection<Long> employeeIds;
|
||||
|
||||
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
|
|
|
|||
|
|
@ -90,7 +90,7 @@ public enum FilterEnum implements BaseEnum<String> {
|
|||
return StringUtils::isEmpty;
|
||||
}
|
||||
},
|
||||
ISNOTEMPTY("ISNOTEMPTY", "包含", 1) {
|
||||
ISNOTEMPTY("ISNOTEMPTY", "不为空", 1) {
|
||||
@Override
|
||||
public Predicate<String> filter(List<String> params) {
|
||||
return StringUtils::isNotEmpty;
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
package com.engine.salary.mapper.archive;
|
||||
|
||||
import com.engine.salary.common.LocalDateRange;
|
||||
import com.engine.salary.entity.salaryarchive.dto.SalaryItemAdjustRecordListDTO;
|
||||
import com.engine.salary.entity.salaryarchive.param.SalaryArchiveItemQueryParam;
|
||||
import com.engine.salary.entity.salaryarchive.param.SalaryItemAdjustRecordQueryParam;
|
||||
import com.engine.salary.entity.salaryarchive.po.SalaryArchiveItemPO;
|
||||
import com.engine.salary.entity.siarchives.po.InsuranceArchivesOtherSchemePO;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.List;
|
||||
|
|
@ -97,4 +97,6 @@ public interface SalaryArchiveItemMapper {
|
|||
void batchDeleteHistoryData(SalaryArchiveItemPO build);
|
||||
|
||||
int batchUpdate(@Param("collection") List<SalaryArchiveItemPO> pos);
|
||||
|
||||
List<Long> listArchiveIdByEffectiveTimeAndArchiveIds(@Param("salaryCycle")LocalDateRange salaryCycle, @Param("archiveIds") List<Long> salaryArchiveIds);
|
||||
}
|
||||
|
|
@ -1071,6 +1071,25 @@
|
|||
ORDER BY t.effective_time DESC
|
||||
</select>
|
||||
|
||||
<select id="listArchiveIdByEffectiveTimeAndArchiveIds" resultType="java.lang.Long">
|
||||
SELECT
|
||||
distinct salary_archive_Id
|
||||
FROM hrsa_salary_archive_item t
|
||||
WHERE delete_type = 0
|
||||
<if test="archiveIds != null and archiveIds.size()>0">
|
||||
AND salary_archive_id IN
|
||||
<foreach collection="archiveIds" open="(" item="archiveId" separator="," close=")">
|
||||
#{archiveId}
|
||||
</foreach>
|
||||
</if>
|
||||
<if test="salaryCycle.fromDate != null">
|
||||
AND effective_time >= #{salaryCycle.fromDate}
|
||||
</if>
|
||||
<if test="salaryCycle.endDate != null">
|
||||
AND effective_time <= #{salaryCycle.endDate}
|
||||
</if>
|
||||
</select>
|
||||
|
||||
|
||||
<update id="deleteBatchIds">
|
||||
UPDATE hrsa_salary_archive_item
|
||||
|
|
|
|||
|
|
@ -503,6 +503,7 @@
|
|||
or (param.departmentIds != null and param.departmentIds.size()>0)
|
||||
or (param.positionIds != null and param.positionIds.size()>0)
|
||||
or (param.statuses != null and param.statuses.size()>0)
|
||||
or (param.employeeIds != null and param.employeeIds.size()>0)
|
||||
or (param.status != null and param.status.toString != 'ALL')">
|
||||
AND t.employee_id IN
|
||||
(
|
||||
|
|
@ -540,6 +541,12 @@
|
|||
#{userStatus}
|
||||
</foreach>
|
||||
</if>
|
||||
<if test="param.employeeIds != null and param.employeeIds.size()>0">
|
||||
AND em.id IN
|
||||
<foreach collection="param.employeeIds" open="(" item="employeeId" separator="," close=")">
|
||||
#{employeeId}
|
||||
</foreach>
|
||||
</if>
|
||||
-- 在职
|
||||
<if test="param.status != null and param.status.toString == 'NORMAL'">
|
||||
AND em.status in (0,1,2,3)
|
||||
|
|
@ -612,6 +619,12 @@
|
|||
#{userStatus}
|
||||
</foreach>
|
||||
</if>
|
||||
<if test="param.employeeIds != null and param.employeeIds.size()>0">
|
||||
AND extem.id IN
|
||||
<foreach collection="param.employeeIds" open="(" item="employeeId" separator="," close=")">
|
||||
#{employeeId}
|
||||
</foreach>
|
||||
</if>
|
||||
-- 在职
|
||||
<if test="param.status != null and param.status.toString == 'NORMAL'">
|
||||
AND extem.status in (0,1,2,3)
|
||||
|
|
@ -667,6 +680,7 @@
|
|||
or (param.departmentIds != null and param.departmentIds.size()>0)
|
||||
or (param.positionIds != null and param.positionIds.size()>0)
|
||||
or (param.statuses != null and param.statuses.size()>0)
|
||||
or (param.employeeIds != null and param.employeeIds.size()>0)
|
||||
or (param.status != null and param.status.toString != 'ALL')">
|
||||
AND t.employee_id IN
|
||||
(
|
||||
|
|
@ -702,6 +716,12 @@
|
|||
#{userStatus}
|
||||
</foreach>
|
||||
</if>
|
||||
<if test="param.employeeIds != null and param.employeeIds.size()>0">
|
||||
AND em.id IN
|
||||
<foreach collection="param.employeeIds" open="(" item="employeeId" separator="," close=")">
|
||||
#{employeeId}
|
||||
</foreach>
|
||||
</if>
|
||||
-- 在职
|
||||
<if test="param.status != null and param.status.toString == 'NORMAL'">
|
||||
AND em.status in (0,1,2,3)
|
||||
|
|
@ -772,6 +792,12 @@
|
|||
#{userStatus}
|
||||
</foreach>
|
||||
</if>
|
||||
<if test="param.employeeIds != null and param.employeeIds.size()>0">
|
||||
AND extem.id IN
|
||||
<foreach collection="param.employeeIds" open="(" item="employeeId" separator="," close=")">
|
||||
#{employeeId}
|
||||
</foreach>
|
||||
</if>
|
||||
-- 在职
|
||||
<if test="param.status != null and param.status.toString == 'NORMAL'">
|
||||
AND extem.status in (0,1,2,3)
|
||||
|
|
@ -827,6 +853,7 @@
|
|||
or (param.departmentIds != null and param.departmentIds.size()>0)
|
||||
or (param.positionIds != null and param.positionIds.size()>0)
|
||||
or (param.statuses != null and param.statuses.size()>0)
|
||||
or (param.employeeIds != null and param.employeeIds.size()>0)
|
||||
or (param.status != null and param.status.toString != 'ALL')">
|
||||
AND t.employee_id IN
|
||||
(
|
||||
|
|
@ -862,6 +889,12 @@
|
|||
#{userStatus}
|
||||
</foreach>
|
||||
</if>
|
||||
<if test="param.employeeIds != null and param.employeeIds.size()>0">
|
||||
AND em.id IN
|
||||
<foreach collection="param.employeeIds" open="(" item="employeeId" separator="," close=")">
|
||||
#{employeeId}
|
||||
</foreach>
|
||||
</if>
|
||||
-- 在职
|
||||
<if test="param.status != null and param.status.toString == 'NORMAL'">
|
||||
AND em.status in (0,1,2,3)
|
||||
|
|
@ -933,6 +966,12 @@
|
|||
#{userStatus}
|
||||
</foreach>
|
||||
</if>
|
||||
<if test="param.employeeIds != null and param.employeeIds.size()>0">
|
||||
AND extem.id IN
|
||||
<foreach collection="param.employeeIds" open="(" item="employeeId" separator="," close=")">
|
||||
#{employeeId}
|
||||
</foreach>
|
||||
</if>
|
||||
-- 在职
|
||||
<if test="param.status != null and param.status.toString == 'NORMAL'">
|
||||
AND extem.status in (0,1,2,3)
|
||||
|
|
|
|||
|
|
@ -7,10 +7,7 @@ import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO;
|
|||
import com.engine.salary.report.entity.param.SalaryStatisticsReportDataQueryParam;
|
||||
import com.engine.salary.util.page.PageInfo;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* 薪资核算人员
|
||||
|
|
@ -258,4 +255,5 @@ public interface SalaryAcctEmployeeService {
|
|||
*/
|
||||
List<SalaryAcctEmployeePO> listByTaxAgentAndSalaryMonth(List<Long> taxAgentIds, Set<Date> salaryMonths);
|
||||
|
||||
PageInfo<Map<String, Object>> adjustSalaryList(SalaryAcctEmployeeQueryParam queryParam);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -27,6 +27,15 @@ public interface SalaryAcctExcelService {
|
|||
*/
|
||||
XSSFWorkbook exportSalaryAcctEmployee(SalaryAcctEmployeeQueryParam queryParam);
|
||||
|
||||
|
||||
/**
|
||||
* 薪资核算人员导出
|
||||
*
|
||||
* @param queryParam
|
||||
* @return
|
||||
*/
|
||||
XSSFWorkbook exportAdjustSalaryList(SalaryAcctEmployeeQueryParam queryParam);
|
||||
|
||||
/**
|
||||
* 薪资核算环比减少人员导出
|
||||
*
|
||||
|
|
@ -51,12 +60,20 @@ public interface SalaryAcctExcelService {
|
|||
*/
|
||||
XSSFWorkbook exportSalaryAcctResult(SalaryAcctResultQueryParam queryParam);
|
||||
|
||||
/**
|
||||
* 核算差异对比导出
|
||||
*
|
||||
* @param queryParam
|
||||
* @return
|
||||
*/
|
||||
XSSFWorkbook exportSalaryAcctResultDiffer(SalaryAcctResultQueryParam queryParam);
|
||||
|
||||
/**
|
||||
* 表头
|
||||
* @param salaryAcctRecordPO
|
||||
* @return
|
||||
*/
|
||||
List<WeaTableColumnGroup> listWeaTableColumn(SalaryAcctRecordPO salaryAcctRecordPO);
|
||||
List<WeaTableColumnGroup> listWeaTableColumn(SalaryAcctRecordPO salaryAcctRecordPO, Long onlySalaryItemId);
|
||||
|
||||
List<WeaTableColumnGroup> listWeaTableColumnForWorkflow(SalaryAcctRecordPO salaryAcctRecordPO);
|
||||
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ import com.engine.salary.entity.salaryacct.dto.ConsolidatedTaxDetailDTO;
|
|||
import com.engine.salary.entity.salaryacct.dto.SalaryAcctResultDetailDTO;
|
||||
import com.engine.salary.entity.salaryacct.dto.SalaryAcctResultListColumnDTO;
|
||||
import com.engine.salary.entity.salaryacct.param.*;
|
||||
import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO;
|
||||
import com.engine.salary.entity.salaryacct.po.SalaryAcctResultPO;
|
||||
import com.engine.salary.util.page.PageInfo;
|
||||
|
||||
|
|
@ -210,4 +211,12 @@ public interface SalaryAcctResultService {
|
|||
* @param param
|
||||
*/
|
||||
void batchUpdate(SalaryAcctResultBatchUpdateParam param);
|
||||
|
||||
/**
|
||||
* 昂立 - 薪资核算结果差异对比
|
||||
* @param param
|
||||
*/
|
||||
Map<String, Object> listSalaryAcctResultDiffer(SalaryAcctResultQueryParam param);
|
||||
|
||||
List<Long> differEmpList(SalaryAcctResultQueryParam param, SalaryAcctRecordPO salaryAcctRecordPO);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
package com.engine.salary.service;
|
||||
|
||||
import com.engine.salary.common.LocalDateRange;
|
||||
import com.engine.salary.entity.salaryarchive.dto.SalaryItemAdjustRecordListDTO;
|
||||
import com.engine.salary.entity.salaryarchive.param.SalaryArchiveItemSaveParam;
|
||||
import com.engine.salary.entity.salaryarchive.param.SalaryItemAdjustBeforeParam;
|
||||
|
|
@ -156,4 +157,11 @@ public interface SalaryArchiveItemService {
|
|||
* @date 2022/11/14 13:38
|
||||
*/
|
||||
String editSingleSalaryItem(SalaryArchiveItemSaveParam salaryArchiveItemSaveParam);
|
||||
|
||||
/**
|
||||
* 根据生效时间获取
|
||||
* @param salaryCycle
|
||||
* @return
|
||||
*/
|
||||
List<Long> listArchiveIdByEffectiveTimeAndArchiveIds(LocalDateRange salaryCycle, List<Long> salaryArchiveIds);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,9 +5,10 @@ import cn.hutool.core.date.DateUtil;
|
|||
import com.api.formmode.mybatis.util.SqlProxyHandle;
|
||||
import com.engine.common.util.ServiceUtil;
|
||||
import com.engine.core.impl.Service;
|
||||
import com.engine.hrmelog.entity.dto.LoggerContext;
|
||||
import com.engine.salary.common.LocalDateRange;
|
||||
import com.engine.salary.config.SalaryElogConfig;
|
||||
import com.engine.salary.constant.SalaryDefaultTenantConstant;
|
||||
import com.engine.hrmelog.entity.dto.LoggerContext;
|
||||
import com.engine.salary.entity.datacollection.DataCollectionEmployee;
|
||||
import com.engine.salary.entity.salaryacct.bo.SalaryAcctEmployeeBO;
|
||||
import com.engine.salary.entity.salaryacct.dto.SalaryAcctEmployeeCountDTO;
|
||||
|
|
@ -15,10 +16,15 @@ import com.engine.salary.entity.salaryacct.param.*;
|
|||
import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO;
|
||||
import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO;
|
||||
import com.engine.salary.entity.salaryarchive.dto.SalaryArchiveDataDTO;
|
||||
import com.engine.salary.entity.salaryarchive.po.SalaryArchiveItemPO;
|
||||
import com.engine.salary.entity.salaryarchive.po.SalaryArchivePO;
|
||||
import com.engine.salary.entity.salaryitem.po.SalaryItemPO;
|
||||
import com.engine.salary.entity.salarysob.dto.SalarySobCycleDTO;
|
||||
import com.engine.salary.entity.salarysob.po.SalarySobPO;
|
||||
import com.engine.salary.entity.taxagent.po.TaxAgentPO;
|
||||
import com.engine.salary.enums.OperateTypeEnum;
|
||||
import com.engine.salary.enums.salaryaccounting.SalaryAcctRecordStatusEnum;
|
||||
import com.engine.salary.enums.salarysob.SalaryEmployeeStatusEnum;
|
||||
import com.engine.salary.exception.SalaryRunTimeException;
|
||||
import com.engine.salary.mapper.salaryacct.SalaryAcctEmployeeMapper;
|
||||
import com.engine.salary.mapper.sys.SalarySysConfMapper;
|
||||
|
|
@ -31,6 +37,7 @@ import com.engine.salary.util.SalaryDateUtil;
|
|||
import com.engine.salary.util.SalaryEntityUtil;
|
||||
import com.engine.salary.util.SalaryI18nUtil;
|
||||
import com.engine.salary.util.db.MapperProxyFactory;
|
||||
import com.engine.salary.util.page.Column;
|
||||
import com.engine.salary.util.page.PageInfo;
|
||||
import com.engine.salary.util.page.SalaryPageUtil;
|
||||
import com.engine.salary.util.valid.ValidUtil;
|
||||
|
|
@ -100,6 +107,10 @@ public class SalaryAcctEmployeeServiceImpl extends Service implements SalaryAcct
|
|||
return ServiceUtil.getService(SalarySysConfServiceImpl.class, user);
|
||||
}
|
||||
|
||||
private SalaryArchiveItemService getSalaryArchiveItemService(User user) {
|
||||
return ServiceUtil.getService(SalaryArchiveItemServiceImpl.class, user);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public List<SalaryAcctEmployeeCountDTO> countBySalaryAcctRecordId(Collection<Long> salaryAcctRecordIds) {
|
||||
|
|
@ -228,7 +239,7 @@ public class SalaryAcctEmployeeServiceImpl extends Service implements SalaryAcct
|
|||
BeanUtils.copyProperties(queryParam, salaryAcctEmployeeQueryParam);
|
||||
// 查询薪资核算人员(分页)
|
||||
// 如果需要筛选是否合并计税
|
||||
if (StringUtils.isNotEmpty(queryParam.getConsolidatedTaxation())) {
|
||||
if (StringUtils.isNotEmpty(queryParam.getConsolidatedTaxation()) && queryParam.getConsolidatedTaxation().equals("1")) {
|
||||
return listPageByParam4ConsolidatedTax(salaryAcctEmployeeQueryParam);
|
||||
} else {
|
||||
return listPageByParam(salaryAcctEmployeeQueryParam);
|
||||
|
|
@ -759,4 +770,81 @@ public class SalaryAcctEmployeeServiceImpl extends Service implements SalaryAcct
|
|||
return getSalaryAcctEmployeeMapper().listSome(SalaryAcctEmployeePO.builder().taxAgentIds(taxAgentIds).salaryMonths(salaryMonths).build());
|
||||
}
|
||||
|
||||
@Override
|
||||
public PageInfo<Map<String, Object>> adjustSalaryList(SalaryAcctEmployeeQueryParam queryParam) {
|
||||
PageInfo<Map<String, Object>> resultPageInfo = new PageInfo<>();
|
||||
// 获取薪资核算数据
|
||||
SalaryAcctRecordPO salaryAcctRecordPO = getSalaryAcctRecordService(user).getById(queryParam.getSalaryAcctRecordId());
|
||||
if (salaryAcctRecordPO == null) {
|
||||
throw new SalaryRunTimeException("薪资核算记录不存在或已被删除");
|
||||
}
|
||||
SalarySobCycleDTO salarySobCycleById = getSalaryAcctRecordService(user).getSalarySobCycleById(queryParam.getSalaryAcctRecordId());
|
||||
LocalDateRange salaryCycle = salarySobCycleById.getSalaryCycle();
|
||||
// 获取薪资周期内发生过调薪的人
|
||||
List<SalaryAcctEmployeePO> salaryAcctEmployeePOS = getSalaryAcctEmployeeMapper().listPage(queryParam);
|
||||
List<Long> employeeIds = salaryAcctEmployeePOS.stream().map(SalaryAcctEmployeePO::getEmployeeId).collect(Collectors.toList());
|
||||
SalarySobPO salarySobPO = getSalarySobService(user).getById(salaryAcctRecordPO.getSalarySobId());
|
||||
TaxAgentPO taxAgentPO = getTaxAgentService(user).getById(salarySobPO.getTaxAgentId());
|
||||
List<SalaryArchivePO> salaryArchivePOList = getSalaryArchiveService(user).listSome(SalaryArchivePO.builder().taxAgentId(salarySobPO.getTaxAgentId()).employeeIds(employeeIds).build());
|
||||
List<Long> salaryArchiveIds = salaryArchivePOList.stream().map(SalaryArchivePO::getId).collect(Collectors.toList());
|
||||
List<Long> adjustSalaryArchiveIds = getSalaryArchiveItemService(user).listArchiveIdByEffectiveTimeAndArchiveIds(salaryCycle, salaryArchiveIds);
|
||||
|
||||
List<Map<String, Object>> resultList = new ArrayList<>();
|
||||
PageInfo<Long> archiveIdPageInfo = new PageInfo<>();
|
||||
// 获取所有可被引用的薪资项目
|
||||
List<SalaryItemPO> salaryItems = getSalaryArchiveItemService(user).getCanAdjustSalaryItems();
|
||||
if (CollectionUtils.isNotEmpty(adjustSalaryArchiveIds)) {
|
||||
// 分页
|
||||
archiveIdPageInfo = SalaryPageUtil.buildPage(queryParam.getCurrent(), queryParam.getPageSize(), adjustSalaryArchiveIds);
|
||||
|
||||
// 获取薪资档案信息
|
||||
salaryArchivePOList = getSalaryArchiveService(user).listSome(SalaryArchivePO.builder().ids(archiveIdPageInfo.getList()).build());
|
||||
// 获取人员信息
|
||||
Map<Long, DataCollectionEmployee> employeeMap = SalaryEntityUtil.convert2Map(getSalaryEmployeeService(user).listByIds(employeeIds), DataCollectionEmployee::getEmployeeId);
|
||||
List<Long> salaryItemIds = salaryItems.stream().map(SalaryItemPO::getId).collect(Collectors.toList());
|
||||
// 获取当前生效的薪资项目
|
||||
List<SalaryArchiveItemPO> salaryArchiveItemCurrentList = getSalaryArchiveItemService(user).getCurrentEffectiveItemList(archiveIdPageInfo.getList(), salaryItemIds);
|
||||
Map<Long, List<SalaryArchiveItemPO>> groupByArchiveId = SalaryEntityUtil.group2Map(salaryArchiveItemCurrentList, SalaryArchiveItemPO::getSalaryArchiveId);
|
||||
|
||||
for (SalaryArchivePO po : salaryArchivePOList) {
|
||||
DataCollectionEmployee employee = employeeMap.get(po.getEmployeeId());
|
||||
HashMap<String, Object> valueMap = new HashMap<>();
|
||||
valueMap.put("userName", employee == null ? "" : employee.getUsername());
|
||||
valueMap.put("taxAgentName", taxAgentPO.getName());
|
||||
valueMap.put("departmentName", employee == null ? "" : employee.getDepartmentName());
|
||||
valueMap.put("mobile", employee == null ? "" : employee.getMobile());
|
||||
valueMap.put("workCode", employee == null ? "" : employee.getWorkcode());
|
||||
valueMap.put("status", employee == null ? "" : SalaryEmployeeStatusEnum.parseByValue(Integer.valueOf(employee.getStatus())).getDefaultLabel());
|
||||
List<SalaryArchiveItemPO> archiveItemList = groupByArchiveId.getOrDefault(po.getId(), Collections.emptyList());
|
||||
List<Date> dateList = archiveItemList.stream().map(SalaryArchiveItemPO::getEffectiveTime).sorted().collect(Collectors.toList());
|
||||
Collections.reverse(dateList);
|
||||
valueMap.put("effectiveTime",CollectionUtils.isEmpty(dateList) ? "" : SalaryDateUtil.getFormatDate(dateList.get(0)));
|
||||
for (SalaryArchiveItemPO salaryArchiveItem : archiveItemList) {
|
||||
valueMap.put(salaryArchiveItem.getSalaryItemId().toString(), salaryArchiveItem.getItemValue());
|
||||
}
|
||||
resultList.add(valueMap);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// 表格表头
|
||||
List<Column> columns = new ArrayList<>();
|
||||
columns.add(new Column(SalaryI18nUtil.getI18nLabel(0, "姓名"), "userName", "userName"));
|
||||
columns.add(new Column(SalaryI18nUtil.getI18nLabel(0, "个税扣缴义务人"), "taxAgentName", "taxAgentName"));
|
||||
columns.add(new Column(SalaryI18nUtil.getI18nLabel(0, "部门"), "departmentName", "departmentName"));
|
||||
columns.add(new Column(SalaryI18nUtil.getI18nLabel(0, "手机号"), "mobile", "mobile"));
|
||||
columns.add(new Column(SalaryI18nUtil.getI18nLabel(0, "工号"), "workCode", "workCode"));
|
||||
columns.add(new Column(SalaryI18nUtil.getI18nLabel(0, "员工状态"), "status", "status"));
|
||||
columns.add(new Column(SalaryI18nUtil.getI18nLabel(0, "调薪生效日期"), "effectiveTime", "effectiveTime"));
|
||||
for (SalaryItemPO salaryItem : salaryItems) {
|
||||
columns.add(new Column(SalaryI18nUtil.getI18nLabel(0, salaryItem.getName()), salaryItem.getId().toString(), salaryItem.getId().toString()));
|
||||
}
|
||||
|
||||
resultPageInfo.setList(resultList);
|
||||
resultPageInfo.setTotal(archiveIdPageInfo.getTotal());
|
||||
resultPageInfo.setPageSize(queryParam.getPageSize());
|
||||
resultPageInfo.setPageNum(queryParam.getCurrent());
|
||||
resultPageInfo.setColumns(columns);
|
||||
return resultPageInfo;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -47,6 +47,7 @@ import com.engine.salary.util.db.IdGenerator;
|
|||
import com.engine.salary.util.excel.ExcelParseHelper;
|
||||
import com.engine.salary.util.excel.ExcelSupport;
|
||||
import com.engine.salary.util.excel.ExcelUtilPlus;
|
||||
import com.engine.salary.util.page.Column;
|
||||
import com.engine.salary.util.page.PageInfo;
|
||||
import com.engine.salary.util.page.SalaryPageUtil;
|
||||
import com.engine.salary.util.valid.ValidUtil;
|
||||
|
|
@ -205,6 +206,51 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc
|
|||
return ExcelUtilPlus.genWorkbookV2(rows, sheetName);
|
||||
}
|
||||
|
||||
@Override
|
||||
public XSSFWorkbook exportAdjustSalaryList(SalaryAcctEmployeeQueryParam queryParam) {
|
||||
ValidUtil.doValidator(queryParam);
|
||||
|
||||
SalaryAcctRecordPO salaryAcctRecordPO = getSalaryAcctRecordService(user).getById(queryParam.getSalaryAcctRecordId());
|
||||
if (salaryAcctRecordPO == null) {
|
||||
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"薪资核算记录不存在或已被删除"));
|
||||
}
|
||||
// 1.工作簿名称
|
||||
String sheetName = SalaryI18nUtil.getI18nLabel(85368, "薪酬调整人员");
|
||||
queryParam.setCurrent(1);
|
||||
queryParam.setPageSize(1000000000);
|
||||
PageInfo<Map<String, Object>> pageInfo = getSalaryAcctEmployeeService(user).adjustSalaryList(queryParam);
|
||||
List<Column> columns = pageInfo.getColumns();
|
||||
List<Map<String, Object>> list = pageInfo.getList();
|
||||
|
||||
// 2.表头
|
||||
List<Object> headerList = columns.stream().map(Column::getTitle).collect(Collectors.toList());
|
||||
|
||||
List<List<Object>> rows = new ArrayList<>();
|
||||
rows.add(headerList);
|
||||
|
||||
// 3.表数据
|
||||
for (Map<String, Object> map : list) {
|
||||
List<Object> row = new ArrayList<>();
|
||||
for (Column column : columns) {
|
||||
row.add(map.getOrDefault(column.getKey(), ""));
|
||||
}
|
||||
rows.add(row);
|
||||
}
|
||||
|
||||
// 记录日志
|
||||
SalarySobPO salarySobPO = getSalarySobService(user).getById(salaryAcctRecordPO.getSalarySobId());
|
||||
String targetName = salarySobPO.getName() + ":" + SalaryDateUtil.localDate2YearMonth(salaryAcctRecordPO.getSalaryMonth());
|
||||
SalaryLoggerUtil.recordExportSingleLog(SalaryElogConfig.salaryAcctRecordLoggerTemplate,
|
||||
queryParam.getSalaryAcctRecordId(),
|
||||
targetName,
|
||||
SalaryI18nUtil.getI18nLabel(0, "导出薪酬调整人员"),
|
||||
SalaryI18nUtil.getI18nLabel(0, "导出薪酬调整人员") + ":" + targetName,
|
||||
user
|
||||
);
|
||||
|
||||
return ExcelUtilPlus.genWorkbookV2(rows, sheetName);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public XSSFWorkbook exportReducedEmployee(SalaryAcctEmployeeQueryParam queryParam) {
|
||||
|
|
@ -343,7 +389,7 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc
|
|||
// excel导出的表头
|
||||
List<WeaTableColumnGroup> headerColumnGroup = Lists.newArrayList();
|
||||
// 查询列表的表头
|
||||
List<WeaTableColumnGroup> weaTableColumns = listWeaTableColumn(salaryAcctRecordPO);
|
||||
List<WeaTableColumnGroup> weaTableColumns = listWeaTableColumn(salaryAcctRecordPO, null);
|
||||
|
||||
//判断是否按照自定义字段导出表头
|
||||
List<WeaTableColumnGroup> finalWeaTableColumns = new ArrayList<>();
|
||||
|
|
@ -438,6 +484,68 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc
|
|||
return ExcelUtilPlus.genWorkbookWithChildTitleColumnWithExcelFormat(rows, sheetName, total);
|
||||
}
|
||||
|
||||
@Override
|
||||
public XSSFWorkbook exportSalaryAcctResultDiffer(SalaryAcctResultQueryParam queryParam) {
|
||||
ValidUtil.doValidator(queryParam);
|
||||
|
||||
// 查询薪资核算记录
|
||||
SalaryAcctRecordPO salaryAcctRecordPO = getSalaryAcctRecordService(user).getById(queryParam.getSalaryAcctRecordId());
|
||||
if (Objects.isNull(salaryAcctRecordPO)) {
|
||||
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98747, "薪资核算记录不存在或已被删除"));
|
||||
}
|
||||
// excel导出的表头
|
||||
List<WeaTableColumnGroup> headerColumnGroup = Lists.newArrayList();
|
||||
// 查询列表的表头
|
||||
List<WeaTableColumnGroup> weaTableColumns = listWeaTableColumn(salaryAcctRecordPO, null);
|
||||
|
||||
//判断是否按照自定义字段导出表头
|
||||
List<WeaTableColumnGroup> finalWeaTableColumns = weaTableColumns;
|
||||
|
||||
parseHeader(headerColumnGroup, finalWeaTableColumns);
|
||||
List<Object> headerList = new ArrayList<>(finalWeaTableColumns);
|
||||
// 查询薪资核算结果
|
||||
List<Long> differEmpList = getSalaryAcctResultService(user).differEmpList(queryParam, salaryAcctRecordPO);
|
||||
queryParam.setEmployeeIds(differEmpList);
|
||||
List<Map<String, Object>> resultMapList = new ArrayList<>();
|
||||
if (CollectionUtils.isNotEmpty(differEmpList)) {
|
||||
resultMapList = getSalaryAcctResultService(user).listByParam(queryParam);
|
||||
}
|
||||
|
||||
|
||||
// excel导出的数据
|
||||
String DATA_TYPE_SUFFIX = "_type";
|
||||
List<List<Object>> rows = new ArrayList<>();
|
||||
rows.add(headerList);
|
||||
for (Map<String, Object> map : resultMapList) {
|
||||
List<Object> row = Lists.newArrayListWithExpectedSize(headerColumnGroup.size());
|
||||
for (WeaTableColumnGroup weaTableColumn : headerColumnGroup) {
|
||||
String fieldType = (String) map.getOrDefault(weaTableColumn.getColumn().toString() + DATA_TYPE_SUFFIX, StringUtils.EMPTY);
|
||||
if (StringUtils.equals("number", fieldType)) {
|
||||
row.add(new BigDecimal(StringUtils.isBlank(map.get(weaTableColumn.getColumn()).toString()) ? "0" : map.get(weaTableColumn.getColumn()).toString()));
|
||||
} else {
|
||||
row.add(map.getOrDefault(weaTableColumn.getColumn(), StringUtils.EMPTY));
|
||||
}
|
||||
|
||||
}
|
||||
rows.add(row);
|
||||
}
|
||||
|
||||
// 记录日志
|
||||
SalarySobPO salarySobPO = getSalarySobService(user).getById(salaryAcctRecordPO.getSalarySobId());
|
||||
String targetName = salarySobPO.getName() + ":" + SalaryDateUtil.localDate2YearMonth(salaryAcctRecordPO.getSalaryMonth());
|
||||
SalaryLoggerUtil.recordExportSingleLog(SalaryElogConfig.salaryAcctRecordLoggerTemplate,
|
||||
queryParam.getSalaryAcctRecordId(),
|
||||
targetName,
|
||||
SalaryI18nUtil.getI18nLabel(0, "导出核算差异对比"),
|
||||
SalaryI18nUtil.getI18nLabel(0, "导出核算差异对比") + ":" + targetName,
|
||||
user
|
||||
);
|
||||
|
||||
|
||||
String sheetName = "导出核算差异对比";
|
||||
// return ExcelUtil.genWorkbookV2(rows, sheetName, total);
|
||||
return ExcelUtilPlus.genWorkbookWithChildTitleColumnWithExcelFormat(rows, sheetName, false);
|
||||
}
|
||||
|
||||
/**
|
||||
* 构建薪资核算结果列表的表头
|
||||
|
|
@ -445,14 +553,14 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc
|
|||
* @param salaryAcctRecordPO 薪资核算记录
|
||||
* @return
|
||||
*/
|
||||
public List<WeaTableColumnGroup> listWeaTableColumn(SalaryAcctRecordPO salaryAcctRecordPO) {
|
||||
public List<WeaTableColumnGroup> listWeaTableColumn(SalaryAcctRecordPO salaryAcctRecordPO, Long onlySalaryItemId) {
|
||||
// 是否是回算
|
||||
SalaryAcctRecordPO byId = getSalaryAcctRecordService(user).getById(salaryAcctRecordPO.getId());
|
||||
boolean isBackCalc = Objects.equals(byId.getBackCalcStatus(), 1);
|
||||
// 查询薪资账套下的薪资项目+员工信息字段
|
||||
SalarySobItemAggregateDTO salarySobItemAggregateDTO = getSalarySobItemService(user).getAggregateWithItemHideBySalarySobId(salaryAcctRecordPO.getSalarySobId(), isBackCalc);
|
||||
// 构建薪资核算结果列表表头
|
||||
List<WeaTableColumnGroup> columnList = SalaryAcctResultBO.buildTableColumns(salarySobItemAggregateDTO, ListUtils.emptyIfNull(salaryAcctRecordPO.getLockSalaryItemIds()));
|
||||
List<WeaTableColumnGroup> columnList = SalaryAcctResultBO.buildTableColumns(salarySobItemAggregateDTO, ListUtils.emptyIfNull(salaryAcctRecordPO.getLockSalaryItemIds()), onlySalaryItemId);
|
||||
// 获取固定列头数
|
||||
SalarySysConfPO salaryAcctFixedColumns = getSalarySysConfMapper().getOneByCode(SALARY_ACCT_FIXED_COLUMNS);
|
||||
if (salaryAcctFixedColumns != null) {
|
||||
|
|
@ -460,7 +568,7 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc
|
|||
if (fixedNum == 0) {
|
||||
fixedNum = 3;
|
||||
}
|
||||
for (int i = 0; i < fixedNum; i++) {
|
||||
for (int i = 0; i < fixedNum && i < columnList.size(); i++) {
|
||||
columnList.get(i).setFixed("left");
|
||||
}
|
||||
}
|
||||
|
|
@ -729,7 +837,7 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc
|
|||
headerRangeList.add("taxAgentName");
|
||||
headerRangeList.add("departmentName");
|
||||
// 查询列表的表头
|
||||
List<WeaTableColumnGroup> weaTableColumns = listWeaTableColumn(salaryAcctRecordPO);
|
||||
List<WeaTableColumnGroup> weaTableColumns = listWeaTableColumn(salaryAcctRecordPO, null);
|
||||
List<WeaTableColumnGroup> finalWeaTableColumns = new ArrayList<>();
|
||||
for (WeaTableColumnGroup tableColumn : weaTableColumns) {
|
||||
WeaTableColumnGroup columnGroupItem = (WeaTableColumnGroup) tableColumn;
|
||||
|
|
@ -912,7 +1020,7 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc
|
|||
// 无分类薪资项目id
|
||||
List<String> noGroupItemIds = salarySobItemAggregateDTO.getItems().stream().map(dto -> String.valueOf(dto.getSalaryItemId())).collect(Collectors.toList());
|
||||
// 查询列表的表头
|
||||
List<WeaTableColumnGroup> weaTableColumns = listWeaTableColumn(salaryAcctRecordPO);
|
||||
List<WeaTableColumnGroup> weaTableColumns = listWeaTableColumn(salaryAcctRecordPO, null);
|
||||
List<Object> finalWeaTableColumns = new ArrayList<>();
|
||||
// 查询薪资核算所用的薪资账套的员工信息字段
|
||||
List<SalarySobEmpFieldPO> salarySobEmpFieldPOS = getSalarySobEmpFieldService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId());
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ import com.engine.core.impl.Service;
|
|||
import com.engine.hrmelog.entity.dto.LoggerContext;
|
||||
import com.engine.salary.cache.SalaryCacheKey;
|
||||
import com.engine.salary.common.LocalDateRange;
|
||||
import com.engine.salary.component.WeaTableColumnGroup;
|
||||
import com.engine.salary.config.SalaryElogConfig;
|
||||
import com.engine.salary.constant.SalaryDefaultTenantConstant;
|
||||
import com.engine.salary.encrypt.EncryptUtil;
|
||||
|
|
@ -69,6 +70,8 @@ import org.jetbrains.annotations.NotNull;
|
|||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
|
||||
import org.springframework.util.StopWatch;
|
||||
import weaver.general.BaseBean;
|
||||
import weaver.general.Util;
|
||||
import weaver.hrm.User;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
|
@ -195,6 +198,9 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
|
|||
return ServiceUtil.getService(TaxAgentAdminServiceImpl.class, user);
|
||||
}
|
||||
|
||||
private SalaryAcctExcelService getSalaryAcctExcelService(User user) {
|
||||
return ServiceUtil.getService(SalaryAcctExcelServiceImpl.class, user);
|
||||
}
|
||||
|
||||
private SalaryCheckResultService salaryCheckResultService;
|
||||
|
||||
|
|
@ -1248,4 +1254,84 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
|
|||
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, Object> listSalaryAcctResultDiffer(SalaryAcctResultQueryParam param) {
|
||||
ValidUtil.doValidator(param);
|
||||
SalaryAcctRecordPO salaryAcctRecordPO = getSalaryAcctRecordService(user).getById(param.getSalaryAcctRecordId());
|
||||
if (salaryAcctRecordPO == null) {
|
||||
throw new SalaryRunTimeException("薪资核算记录不存在或已被删除");
|
||||
}
|
||||
List<Long> diffEmpIds = differEmpList(param, salaryAcctRecordPO);
|
||||
|
||||
Map<String, Object> datas = new HashMap<>();
|
||||
List<WeaTableColumnGroup> columns = null;
|
||||
PageInfo<Map<String, Object>> page = new PageInfo<>();
|
||||
// 构建薪资核算结果列表的表头
|
||||
columns = getSalaryAcctExcelService(user).listWeaTableColumn(salaryAcctRecordPO, null);
|
||||
if (CollectionUtils.isNotEmpty(diffEmpIds)) {
|
||||
// 获取这些有差异的人的薪资核算结果
|
||||
SalaryAcctResultQueryParam resultQueryParam = SalaryAcctResultQueryParam.builder().salaryAcctRecordId(salaryAcctRecordPO.getId()).employeeIds(diffEmpIds).build();
|
||||
resultQueryParam.setCurrent(param.getCurrent());
|
||||
resultQueryParam.setPageSize(param.getPageSize());
|
||||
page = getSalaryAcctResultService(user).listPageByParam(resultQueryParam);
|
||||
|
||||
datas.put("pageInfo", page);
|
||||
}
|
||||
|
||||
datas.put("columns", columns);
|
||||
datas.put("pageInfo", page);
|
||||
return datas;
|
||||
}
|
||||
|
||||
public List<Long> differEmpList(SalaryAcctResultQueryParam param, SalaryAcctRecordPO salaryAcctRecordPO) {
|
||||
|
||||
BaseBean baseBean = new BaseBean();
|
||||
List<Long> needSumItemIds = Arrays.stream(baseBean.getPropValue("alSalary3012551", "approvalWorkflowItemIds").split(",")).filter(org.apache.commons.lang.math.NumberUtils::isNumber).map(Long::valueOf).collect(Collectors.toList());
|
||||
// 获取本次的核算结果
|
||||
List<SalaryAcctResultPO> resultPOList = listBySalaryAcctRecordIdsAndSalaryItemIds(Collections.singletonList(salaryAcctRecordPO.getId()), needSumItemIds);
|
||||
Map<Long, List<SalaryAcctResultPO>> resultGroupByEmpId = SalaryEntityUtil.group2Map(resultPOList, SalaryAcctResultPO::getEmployeeId);
|
||||
List<Long> diffEmpIds = new ArrayList<>();
|
||||
|
||||
// 获取上月的薪资核算结果
|
||||
Date lastMonth = SalaryDateUtil.localDateToDate(SalaryDateUtil.dateToLocalDate(salaryAcctRecordPO.getSalaryMonth()).minusMonths(1));
|
||||
LocalDateRange dateRange = new LocalDateRange(lastMonth, lastMonth);
|
||||
List<SalaryAcctRecordPO> lastMonthSalaryAcctRecordPOS = getSalaryAcctRecordService(user).listBySalarySobIdsAndSalaryMonth(Collections.singletonList(salaryAcctRecordPO.getSalarySobId()), dateRange);
|
||||
if (CollectionUtils.isEmpty(lastMonthSalaryAcctRecordPOS)) {
|
||||
// 所有人均有差异
|
||||
diffEmpIds = resultPOList.stream().map(SalaryAcctResultPO::getEmployeeId).collect(Collectors.toList());
|
||||
} else {
|
||||
SalaryAcctRecordPO lastMonthSalaryAcctRecord = lastMonthSalaryAcctRecordPOS.get(0);
|
||||
List<SalaryAcctResultPO> lastMonthResultPOList = listBySalaryAcctRecordIdsAndSalaryItemIds(Collections.singletonList(lastMonthSalaryAcctRecord.getId()), needSumItemIds);
|
||||
Map<Long, List<SalaryAcctResultPO>> lastMonthResultGroupByEmpId = SalaryEntityUtil.group2Map(lastMonthResultPOList, SalaryAcctResultPO::getEmployeeId);
|
||||
for (Map.Entry<Long, List<SalaryAcctResultPO>> entrySet : resultGroupByEmpId.entrySet()) {
|
||||
boolean flag = false;
|
||||
List<SalaryAcctResultPO> lastMonthResultList = lastMonthResultGroupByEmpId.get(entrySet.getKey());
|
||||
if (CollectionUtils.isEmpty(lastMonthResultList)) {
|
||||
// 上月该账套中该员工没有核算数据
|
||||
flag = true;
|
||||
diffEmpIds.add(entrySet.getKey());
|
||||
} else {
|
||||
Map<Long, SalaryAcctResultPO> reslultMap = SalaryEntityUtil.convert2Map(entrySet.getValue(), SalaryAcctResultPO::getSalaryItemId);
|
||||
Map<Long, SalaryAcctResultPO> lastMonthReslultMap = SalaryEntityUtil.convert2Map(lastMonthResultList, SalaryAcctResultPO::getSalaryItemId);
|
||||
for (int i = 0; i < needSumItemIds.size() && flag == false; i++) {
|
||||
Long salaryItemId = needSumItemIds.get(i);
|
||||
SalaryAcctResultPO result = reslultMap.get(salaryItemId);
|
||||
SalaryAcctResultPO lastMonthResult = lastMonthReslultMap.get(salaryItemId);
|
||||
if ((result == null && lastMonthResult != null) || (result != null && lastMonthResult == null)) {
|
||||
// 一个为null 一个不为null
|
||||
flag = true;
|
||||
diffEmpIds.add(entrySet.getKey());
|
||||
} else if (result != null && lastMonthResult != null
|
||||
&& !Util.null2String(result.getResultValue()).equals(Util.null2String(lastMonthResult.getResultValue()))) {
|
||||
// 结果不等
|
||||
flag = true;
|
||||
diffEmpIds.add(entrySet.getKey());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return diffEmpIds;
|
||||
}
|
||||
}
|
||||
|
|
@ -5,6 +5,7 @@ import com.engine.core.impl.Service;
|
|||
import com.engine.salary.biz.SalaryArchiveBiz;
|
||||
import com.engine.salary.biz.SalaryArchiveItemBiz;
|
||||
import com.engine.salary.biz.SalaryItemBiz;
|
||||
import com.engine.salary.common.LocalDateRange;
|
||||
import com.engine.salary.config.SalaryElogConfig;
|
||||
import com.engine.salary.constant.SalaryDefaultTenantConstant;
|
||||
import com.engine.salary.entity.datacollection.DataCollectionEmployee;
|
||||
|
|
@ -725,5 +726,14 @@ public class SalaryArchiveItemServiceImpl extends Service implements SalaryArchi
|
|||
return ExcelUtil.genWorkbookV2(rows, sheetName);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public List<Long> listArchiveIdByEffectiveTimeAndArchiveIds(LocalDateRange salaryCycle, List<Long> salaryArchiveIds) {
|
||||
if (salaryCycle == null || CollectionUtils.isEmpty(salaryArchiveIds)) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
List<Long> resultList = new ArrayList<>();
|
||||
List<List<Long>> partition = Lists.partition(salaryArchiveIds, 800);
|
||||
partition.forEach(part -> resultList.addAll(salaryArchiveItemMapper.listArchiveIdByEffectiveTimeAndArchiveIds(salaryCycle, part)));
|
||||
return resultList;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -173,6 +173,17 @@ public class SalaryAcctController {
|
|||
|
||||
/**********************************薪资核算人员相关 start*********************************/
|
||||
|
||||
|
||||
//昂立 - 薪酬调整人员列表
|
||||
@POST
|
||||
@Path("/acctemployee/adjustSalaryList")
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
public String adjustSalaryList(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryAcctEmployeeQueryParam param) {
|
||||
User user = HrmUserVarify.getUser(request, response);
|
||||
return new ResponseResult<SalaryAcctEmployeeQueryParam, PageInfo<Map<String, Object>>>(user).run(getSalaryAcctEmployeeWrapper(user)::adjustSalaryList, param);
|
||||
}
|
||||
|
||||
|
||||
//薪资核算人员确认列表
|
||||
@POST
|
||||
@Path("/acctemployee/list")
|
||||
|
|
@ -320,6 +331,36 @@ public class SalaryAcctController {
|
|||
return param;
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出薪酬调整人员
|
||||
*/
|
||||
@GET
|
||||
@Path("/adjustSalaryList/export")
|
||||
@Produces(MediaType.APPLICATION_OCTET_STREAM)
|
||||
public Response exportAdjustSalaryList(@Context HttpServletRequest request, @Context HttpServletResponse response) {
|
||||
try {
|
||||
SalaryAcctEmployeeQueryParam param = buildSalaryAcctEmployeeQueryParam(request);
|
||||
User user = HrmUserVarify.getUser(request, response);
|
||||
XSSFWorkbook workbook = getSalaryAcctExcelWrapper(user).exportAdjustSalaryList(param);
|
||||
String time = LocalDate.now().toString();
|
||||
String fileName = "薪酬调整人员" + time;
|
||||
try {
|
||||
fileName = URLEncoder.encode(fileName + ".xlsx", "UTF-8");
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
StreamingOutput output = outputStream -> {
|
||||
workbook.write(outputStream);
|
||||
outputStream.flush();
|
||||
};
|
||||
response.setContentType("application/octet-stream");
|
||||
return Response.ok(output).header("Content-disposition", "attachment;filename=" + fileName).header("Cache-Control", "no-cache").build();
|
||||
} catch (Exception e) {
|
||||
log.error("薪酬调整人员导出异常", e);
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出环比减少人员
|
||||
*/
|
||||
|
|
@ -402,6 +443,15 @@ public class SalaryAcctController {
|
|||
return new ResponseResult<SalaryAcctResultQueryParam, Map<String, Object>>(user).run(getSalaryAcctResultWrapper(user)::listPage, param);
|
||||
}
|
||||
|
||||
// 昂立 - 薪资核算结果差异对比
|
||||
@POST
|
||||
@Path("/acctresult/differList")
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
public String listSalaryAcctResultDiffer(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryAcctResultQueryParam param) {
|
||||
User user = HrmUserVarify.getUser(request, response);
|
||||
return new ResponseResult<SalaryAcctResultQueryParam, Map<String, Object>>(user).run(getSalaryAcctResultWrapper(user)::listSalaryAcctResultDiffer, param);
|
||||
}
|
||||
|
||||
//薪资核算结果列表
|
||||
@POST
|
||||
@Path("/acctresult/listForWorkflow")
|
||||
|
|
@ -411,6 +461,20 @@ public class SalaryAcctController {
|
|||
return new ResponseResult<SalaryAcctResultQueryParam, Map<String, Object>>(user).run(getSalaryAcctResultWrapper(user)::listForWorkflow, param);
|
||||
}
|
||||
|
||||
/**
|
||||
* @description listForWorkflowV2 昂立 240603 审批流程版本2
|
||||
* @return null
|
||||
* @author Harryxzy
|
||||
* @date 2024/6/3 10:12
|
||||
*/
|
||||
@POST
|
||||
@Path("/acctresult/listForWorkflowV2")
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
public String listForWorkflowV2(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryAcctResultQueryParam param) {
|
||||
User user = HrmUserVarify.getUser(request, response);
|
||||
return new ResponseResult<SalaryAcctResultQueryParam, List<AlWorkflowInfoDTO>>(user).run(getSalaryAcctResultWrapper(user)::listForWorkflowV2, param);
|
||||
}
|
||||
|
||||
//合计行
|
||||
@POST
|
||||
@Path("/acctresult/sum")
|
||||
|
|
@ -513,6 +577,34 @@ public class SalaryAcctController {
|
|||
}
|
||||
}
|
||||
|
||||
//导出核算差异对比
|
||||
@GET
|
||||
@Path("/acctresultDiffer/export")
|
||||
@Produces(MediaType.APPLICATION_OCTET_STREAM)
|
||||
public Response exportSalaryAcctResultDiffer(@Context HttpServletRequest request, @Context HttpServletResponse response) {
|
||||
try {
|
||||
SalaryAcctResultQueryParam param = new SalaryAcctResultQueryParam();
|
||||
setSalaryAcctResultQueryParam(request, param);
|
||||
User user = HrmUserVarify.getUser(request, response);
|
||||
XSSFWorkbook workbook = getSalaryAcctExcelWrapper(user).exportSalaryAcctResultDiffer(param);
|
||||
String fileName = "核算差异对比" + LocalDate.now();
|
||||
try {
|
||||
fileName = URLEncoder.encode(fileName + ".xlsx", "UTF-8");
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
StreamingOutput output = outputStream -> {
|
||||
workbook.write(outputStream);
|
||||
outputStream.flush();
|
||||
};
|
||||
response.setContentType("application/octet-stream");
|
||||
return Response.ok(output).header("Content-disposition", "attachment;filename=" + fileName).header("Cache-Control", "no-cache").build();
|
||||
} catch (Exception e) {
|
||||
log.error("核算差异对比导出异常", e);
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
//导出核算结果(自定义导出字段)
|
||||
@GET
|
||||
@Path("/acctresult/exportWithCustomFields")
|
||||
|
|
|
|||
|
|
@ -25,6 +25,7 @@ import org.apache.commons.lang3.math.NumberUtils;
|
|||
import weaver.hrm.User;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
|
|
@ -49,6 +50,16 @@ public class SalaryAcctEmployeeWrapper extends Service {
|
|||
return ServiceUtil.getService(TaxAgentServiceImpl.class, user);
|
||||
}
|
||||
|
||||
/**
|
||||
* 昂立 - 薪酬调整人员列表
|
||||
*
|
||||
* @param queryParam 列表查询参数
|
||||
* @return
|
||||
*/
|
||||
public PageInfo<Map<String, Object>> adjustSalaryList(SalaryAcctEmployeeQueryParam queryParam) {
|
||||
return getSalaryAcctEmployeeService(user).adjustSalaryList(queryParam);
|
||||
}
|
||||
|
||||
/**
|
||||
* 薪资核算人员列表
|
||||
*
|
||||
|
|
|
|||
|
|
@ -30,6 +30,17 @@ public class SalaryAcctExcelWrapper extends Service {
|
|||
return getSalaryAcctExcelService(user).exportSalaryAcctEmployee(queryParam);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 昂立 - 导出薪酬调整人员
|
||||
*
|
||||
* @param queryParam
|
||||
* @return
|
||||
*/
|
||||
public XSSFWorkbook exportAdjustSalaryList(SalaryAcctEmployeeQueryParam queryParam) {
|
||||
return getSalaryAcctExcelService(user).exportAdjustSalaryList(queryParam);
|
||||
}
|
||||
|
||||
/**
|
||||
* 薪资核算环比减少人员导出
|
||||
*
|
||||
|
|
@ -62,6 +73,16 @@ public class SalaryAcctExcelWrapper extends Service {
|
|||
return getSalaryAcctExcelService(user).exportSalaryAcctResult(queryParam);
|
||||
}
|
||||
|
||||
/**
|
||||
* 核算差异对比导出
|
||||
*
|
||||
* @param queryParam
|
||||
* @return
|
||||
*/
|
||||
public XSSFWorkbook exportSalaryAcctResultDiffer(SalaryAcctResultQueryParam queryParam) {
|
||||
return getSalaryAcctExcelService(user).exportSalaryAcctResultDiffer(queryParam);
|
||||
}
|
||||
|
||||
/**
|
||||
* 下载薪资核算导入模板
|
||||
*
|
||||
|
|
|
|||
|
|
@ -3,14 +3,19 @@ package com.engine.salary.wrapper;
|
|||
import com.engine.common.util.ServiceUtil;
|
||||
import com.engine.core.impl.Service;
|
||||
import com.engine.salary.cache.SalaryCacheKey;
|
||||
import com.engine.salary.common.LocalDateRange;
|
||||
import com.engine.salary.component.WeaTableColumnGroup;
|
||||
import com.engine.salary.entity.datacollection.DataCollectionEmployee;
|
||||
import com.engine.salary.entity.progress.ProgressDTO;
|
||||
import com.engine.salary.entity.salaryacct.dto.AlWorkflowInfoDTO;
|
||||
import com.engine.salary.entity.salaryacct.dto.ConsolidatedTaxDetailDTO;
|
||||
import com.engine.salary.entity.salaryacct.dto.SalaryAcctResultDetailDTO;
|
||||
import com.engine.salary.entity.salaryacct.dto.SalaryAcctResultListColumnDTO;
|
||||
import com.engine.salary.entity.salaryacct.param.*;
|
||||
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.po.SalaryItemPO;
|
||||
import com.engine.salary.entity.salarysob.po.WorkflowItemHidePO;
|
||||
import com.engine.salary.enums.salaryaccounting.LockStatusEnum;
|
||||
import com.engine.salary.exception.SalaryRunTimeException;
|
||||
|
|
@ -18,6 +23,7 @@ import com.engine.salary.service.*;
|
|||
import com.engine.salary.service.impl.*;
|
||||
import com.engine.salary.sys.service.SalarySysConfService;
|
||||
import com.engine.salary.sys.service.impl.SalarySysConfServiceImpl;
|
||||
import com.engine.salary.util.SalaryDateUtil;
|
||||
import com.engine.salary.util.SalaryEntityUtil;
|
||||
import com.engine.salary.util.SalaryI18nUtil;
|
||||
import com.engine.salary.util.page.PageInfo;
|
||||
|
|
@ -27,6 +33,7 @@ import lombok.extern.slf4j.Slf4j;
|
|||
import org.apache.commons.collections.CollectionUtils;
|
||||
import org.apache.commons.lang.math.NumberUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import weaver.general.BaseBean;
|
||||
import weaver.hrm.User;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
|
@ -83,6 +90,14 @@ public class SalaryAcctResultWrapper extends Service {
|
|||
return ServiceUtil.getService(WorkflowItemHideServiceImpl.class, user);
|
||||
}
|
||||
|
||||
private SalaryAcctEmployeeService getSalaryAcctEmployeeService(User user) {
|
||||
return ServiceUtil.getService(SalaryAcctEmployeeServiceImpl.class, user);
|
||||
}
|
||||
|
||||
private SalaryItemService getSalaryItemService(User user) {
|
||||
return ServiceUtil.getService(SalaryItemServiceImpl.class, user);
|
||||
}
|
||||
|
||||
/**
|
||||
* 薪资核算列表
|
||||
*
|
||||
|
|
@ -101,7 +116,13 @@ public class SalaryAcctResultWrapper extends Service {
|
|||
PageInfo<Map<String, Object>> page = getSalaryAcctResultService(user).listPageByParam(queryParam);
|
||||
|
||||
// 构建薪资核算结果列表的表头
|
||||
List<WeaTableColumnGroup> columns = getSalaryAcctExcelService(user).listWeaTableColumn(salaryAcctRecordPO);
|
||||
List<WeaTableColumnGroup> columns = null;
|
||||
if (queryParam.isWorkflow()) {
|
||||
Long itemId = queryParam.getOtherConditions().get(0).getItemId();
|
||||
columns = getSalaryAcctExcelService(user).listWeaTableColumn(salaryAcctRecordPO, itemId);
|
||||
} else {
|
||||
columns = getSalaryAcctExcelService(user).listWeaTableColumn(salaryAcctRecordPO, null);
|
||||
}
|
||||
|
||||
Map<String, Object> datas = new HashMap<>();
|
||||
datas.put("pageInfo", page);
|
||||
|
|
@ -160,6 +181,89 @@ public class SalaryAcctResultWrapper extends Service {
|
|||
return datas;
|
||||
}
|
||||
|
||||
/**
|
||||
* 薪资核算列表 - 审批流程使用
|
||||
*
|
||||
* @param queryParam 列表查询条件
|
||||
* @return
|
||||
*/
|
||||
public List<AlWorkflowInfoDTO> listForWorkflowV2(SalaryAcctResultQueryParam queryParam) {
|
||||
ValidUtil.doValidator(queryParam);
|
||||
// 查询薪资核算记录
|
||||
SalaryAcctRecordPO salaryAcctRecordPO = getSalaryAcctRecordService(user).getById(queryParam.getSalaryAcctRecordId());
|
||||
if (Objects.isNull(salaryAcctRecordPO)) {
|
||||
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98747, "薪资核算记录不存在或已被删除"));
|
||||
}
|
||||
|
||||
// 获取本月薪资核算人员
|
||||
List<SalaryAcctEmployeePO> salaryAcctEmployeePOS = getSalaryAcctEmployeeService(user).listBySalaryAcctRecordId(queryParam.getSalaryAcctRecordId());
|
||||
if (CollectionUtils.isEmpty(salaryAcctEmployeePOS)) {
|
||||
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "无薪资核算人员"));
|
||||
}
|
||||
List<AlWorkflowInfoDTO> reslutList = new ArrayList<>();
|
||||
// 获取审批流程需要展示的薪资项目
|
||||
BaseBean baseBean = new BaseBean();
|
||||
List<Long> needSumItemIds = Arrays.stream(baseBean.getPropValue("alSalary3012551", "approvalWorkflowItemIds").split(",")).filter(NumberUtils::isNumber).map(Long::valueOf).collect(Collectors.toList());
|
||||
List<SalaryItemPO> salaryItemPOList = getSalaryItemService(user).listByIds(needSumItemIds);
|
||||
Map<Long, String> salaryItemMap = SalaryEntityUtil.convert2Map(salaryItemPOList, SalaryItemPO::getId, SalaryItemPO::getName);
|
||||
// 获取这些薪资项目的核算结果
|
||||
List<SalaryAcctResultPO> resultPOS = getSalaryAcctResultService(user).listBySalaryAcctRecordIdsAndSalaryItemIds(Collections.singletonList(queryParam.getSalaryAcctRecordId()), needSumItemIds);
|
||||
Map<Long, List<SalaryAcctResultPO>> resultGroupByItemId = SalaryEntityUtil.group2Map(resultPOS, SalaryAcctResultPO::getSalaryItemId);
|
||||
AlWorkflowInfoDTO thisMonthDTO = AlWorkflowInfoDTO.builder().empNum(salaryAcctEmployeePOS.size()).salaryAcctRecordId(queryParam.getSalaryAcctRecordId()).build();
|
||||
List<Map<String, Object>> itemList = new ArrayList<>();
|
||||
for (Long itemId : needSumItemIds) {
|
||||
String itemName = salaryItemMap.get(itemId);
|
||||
if (StringUtils.isNotBlank(itemName)) {
|
||||
List<SalaryAcctResultPO> resultPOList = resultGroupByItemId.get(itemId);
|
||||
BigDecimal sumValue = resultPOList.stream().map(SalaryAcctResultPO::getResultValue).filter(NumberUtils::isNumber).map(BigDecimal::new).reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||
Map<String, Object> resultItemMap = new HashMap<>();
|
||||
resultItemMap.put("name", itemName);
|
||||
resultItemMap.put("id", itemId);
|
||||
resultItemMap.put("resultValue", sumValue);
|
||||
itemList.add(resultItemMap);
|
||||
}
|
||||
}
|
||||
thisMonthDTO.setResultList(itemList);
|
||||
reslutList.add(thisMonthDTO);
|
||||
|
||||
// 查询上月薪资核算记录
|
||||
// StringBuilder lastRecordStr = new StringBuilder();
|
||||
Date lastMonth = SalaryDateUtil.localDateToDate(SalaryDateUtil.dateToLocalDate(salaryAcctRecordPO.getSalaryMonth()).minusMonths(1));
|
||||
LocalDateRange dateRange = new LocalDateRange(lastMonth, lastMonth);
|
||||
List<SalaryAcctRecordPO> lastMonthSalaryAcctRecordPOS = getSalaryAcctRecordService(user).listBySalarySobIdsAndSalaryMonth(Collections.singletonList(salaryAcctRecordPO.getSalarySobId()), dateRange);
|
||||
Long lastMonthSalaryAcctRecordId = null;
|
||||
if (CollectionUtils.isNotEmpty(lastMonthSalaryAcctRecordPOS)) {
|
||||
lastMonthSalaryAcctRecordId = lastMonthSalaryAcctRecordPOS.get(0).getId();
|
||||
List<SalaryAcctEmployeePO> lastMonthSalaryAcctEmployeePOS = getSalaryAcctEmployeeService(user).listBySalaryAcctRecordId(lastMonthSalaryAcctRecordId);
|
||||
if (CollectionUtils.isNotEmpty(lastMonthSalaryAcctEmployeePOS)) {
|
||||
// lastRecordStr.append("上月发薪员工数:").append(lastMonthSalaryAcctEmployeePOS.size()).append("人");
|
||||
// 获取这些薪资项目的核算结果
|
||||
List<SalaryAcctResultPO> lastMonthResultPOS = getSalaryAcctResultService(user).listBySalaryAcctRecordIdsAndSalaryItemIds(Collections.singletonList(lastMonthSalaryAcctRecordId), needSumItemIds);
|
||||
Map<Long, List<SalaryAcctResultPO>> lastMonthResultGroupByItemId = SalaryEntityUtil.group2Map(lastMonthResultPOS, SalaryAcctResultPO::getSalaryItemId);
|
||||
AlWorkflowInfoDTO lastMonthDTO = AlWorkflowInfoDTO.builder().empNum(lastMonthSalaryAcctEmployeePOS.size()).salaryAcctRecordId(lastMonthSalaryAcctRecordId).build();
|
||||
List<Map<String, Object>> lastMonthItemList = new ArrayList<>();
|
||||
for (Long itemId : needSumItemIds) {
|
||||
String itemName = salaryItemMap.get(itemId);
|
||||
if (StringUtils.isNotBlank(itemName)) {
|
||||
List<SalaryAcctResultPO> resultPOList = lastMonthResultGroupByItemId.get(itemId);
|
||||
BigDecimal sumValue = resultPOList.stream().map(SalaryAcctResultPO::getResultValue).filter(NumberUtils::isNumber).map(BigDecimal::new).reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||
// lastRecordStr.append(" ").append(itemName).append(":").append(sumValue.toString());
|
||||
Map<String, Object> resultItemMap = new HashMap<>();
|
||||
resultItemMap.put("name", itemName);
|
||||
resultItemMap.put("id", itemId);
|
||||
resultItemMap.put("resultValue", sumValue);
|
||||
lastMonthItemList.add(resultItemMap);
|
||||
}
|
||||
}
|
||||
lastMonthDTO.setResultList(lastMonthItemList);
|
||||
reslutList.add(lastMonthDTO);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return reslutList;
|
||||
}
|
||||
|
||||
/**
|
||||
* 合计行
|
||||
*
|
||||
|
|
@ -324,6 +428,14 @@ public class SalaryAcctResultWrapper extends Service {
|
|||
getSalaryAcctResultService(user).batchUpdate(param);
|
||||
}
|
||||
|
||||
/**
|
||||
* 昂立 - 薪资核算结果差异对比
|
||||
* @param param
|
||||
*/
|
||||
public Map<String, Object> listSalaryAcctResultDiffer(SalaryAcctResultQueryParam param) {
|
||||
return getSalaryAcctResultService(user).listSalaryAcctResultDiffer(param);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 薪资核算-校验
|
||||
|
|
|
|||
Loading…
Reference in New Issue