Merge branch 'feature/快照条件搜索报表' into feature/权限

# Conflicts:
#	src/com/engine/salary/report/service/impl/SalaryStatisticsEmployeeServiceImpl.java
This commit is contained in:
钱涛 2024-10-08 16:20:32 +08:00
commit f487e060a2
6 changed files with 281 additions and 166 deletions

View File

@ -7,7 +7,9 @@ import com.engine.salary.util.valid.DataCheck;
import lombok.*;
import java.util.Collection;
import java.util.Date;
import java.util.List;
import java.util.Set;
/**
* 薪资核算人员列表查询条件
@ -59,4 +61,7 @@ public class SalaryAcctEmployeeQueryParam extends BaseQueryParam {
private List<Long> ids;
private String workcode;
private List<Long> taxAgentIds;
private Set<Date> salaryMonths;
}

View File

@ -521,7 +521,6 @@
LEFT JOIN hrmdepartment d ON d.id = e.departmentid
LEFT JOIN hrmsubcompany c ON c.id = e.subcompanyid1
WHERE delete_type = 0
AND salary_acct_record_id = #{param.salaryAcctRecordId}
<include refid="SalaryAcctEmployeeParamSql"/>
<!-- 排序 -->
<if test="param.orderRule != null">
@ -538,7 +537,6 @@
LEFT JOIN hrmdepartment d ON d.id = e.departmentid
LEFT JOIN hrmsubcompany c ON c.id = e.subcompanyid1
WHERE delete_type = 0
AND salary_acct_record_id = #{param.salaryAcctRecordId}
<include refid="SalaryAcctEmployeeParamSql"/>
<!-- 排序 -->
<if test="param.orderRule != null">
@ -555,7 +553,6 @@
LEFT JOIN hrmdepartment d ON d.id = e.departmentid
LEFT JOIN hrmsubcompany c ON c.id = e.subcompanyid1
WHERE delete_type = 0
AND salary_acct_record_id = #{param.salaryAcctRecordId}
<include refid="SalaryAcctEmployeeParamSql"/>
<!-- 排序 -->
<if test="param.orderRule != null">
@ -564,6 +561,9 @@
</select>
<sql id="SalaryAcctEmployeeParamSql">
<if test="param.salaryAcctRecordId != null">
AND t.salary_acct_record_id = #{param.salaryAcctRecordId}
</if>
<if test="param.ids != null and param.ids.size()>0">
AND t.id IN
<foreach collection="param.ids" open="(" item="id" separator="," close=")">
@ -573,6 +573,18 @@
<if test="param.taxAgentId != null">
AND t.tax_agent_id = #{param.taxAgentId}
</if>
<if test="param.taxAgentIds != null and param.taxAgentIds.size()>0">
AND t.tax_agent_id IN
<foreach collection="param.taxAgentIds" open="(" item="taxAgentId" separator="," close=")">
#{taxAgentId}
</foreach>
</if>
<if test="param.salaryMonths != null and param.salaryMonths.size()>0">
AND t.salary_month IN
<foreach collection="param.salaryMonths" open="(" item="salaryMonth" separator="," close=")">
#{salaryMonth}
</foreach>
</if>
-- 分部
<if test="param.subcompanyIds != null and param.subcompanyIds.size()>0">
AND t.subcompany_id IN
@ -625,6 +637,9 @@
</if>
</sql>
<sql id="SalaryAcctEmployeeParamSql" databaseId="oracle">
<if test="param.salaryAcctRecordId != null">
AND t.salary_acct_record_id = #{param.salaryAcctRecordId}
</if>
<if test="param.ids != null and param.ids.size()>0">
AND t.id IN
<foreach collection="param.ids" open="(" item="id" separator="," close=")">
@ -634,6 +649,18 @@
<if test="param.taxAgentId != null">
AND t.tax_agent_id = #{param.taxAgentId}
</if>
<if test="param.taxAgentIds != null and param.taxAgentIds.size()>0">
AND t.tax_agent_id IN
<foreach collection="param.taxAgentIds" open="(" item="taxAgentId" separator="," close=")">
#{taxAgentId}
</foreach>
</if>
<if test="param.salaryMonths != null and param.salaryMonths.size()>0">
AND t.salary_month IN
<foreach collection="param.salaryMonths" open="(" item="salaryMonth" separator="," close=")">
#{salaryMonth}
</foreach>
</if>
-- 分部
<if test="param.subcompanyIds != null and param.subcompanyIds.size()>0">
AND t.subcompany_id IN
@ -684,6 +711,9 @@
</if>
</sql>
<sql id="SalaryAcctEmployeeParamSql" databaseId="sqlserver">
<if test="param.salaryAcctRecordId != null">
AND t.salary_acct_record_id = #{param.salaryAcctRecordId}
</if>
<if test="param.ids != null and param.ids.size()>0">
AND t.id IN
<foreach collection="param.ids" open="(" item="id" separator="," close=")">
@ -693,6 +723,18 @@
<if test="param.taxAgentId != null">
AND t.tax_agent_id = #{param.taxAgentId}
</if>
<if test="param.taxAgentIds != null and param.taxAgentIds.size()>0">
AND t.tax_agent_id IN
<foreach collection="param.taxAgentIds" open="(" item="taxAgentId" separator="," close=")">
#{taxAgentId}
</foreach>
</if>
<if test="param.salaryMonths != null and param.salaryMonths.size()>0">
AND t.salary_month IN
<foreach collection="param.salaryMonths" open="(" item="salaryMonth" separator="," close=")">
#{salaryMonth}
</foreach>
</if>
-- 分部
<if test="param.subcompanyIds != null and param.subcompanyIds.size()>0">
AND t.subcompany_id IN

View File

@ -4,6 +4,7 @@ import cn.hutool.core.util.NumberUtil;
import com.engine.common.util.ServiceUtil;
import com.engine.core.impl.Service;
import com.engine.salary.entity.datacollection.DataCollectionEmployee;
import com.engine.salary.entity.salaryacct.param.SalaryAcctEmployeeQueryParam;
import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO;
import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO;
import com.engine.salary.entity.salaryacct.po.SalaryAcctResultPO;
@ -117,14 +118,16 @@ public class SalaryStatisticsEmployeeServiceImpl extends Service implements Sala
.collect(Collectors.toSet());
// 查询薪资核算人员
List<SalaryAcctEmployeePO> salaryAcctEmployeeList = getSalaryAcctEmployeeService(user).listByTaxAgentAndSalaryMonth(taxAgentIds, salaryMonths);
SalaryAcctEmployeeQueryParam salaryAcctEmployeeQueryParam = SalaryAcctEmployeeQueryParam.builder().salaryMonths(salaryMonths).taxAgentIds(taxAgentIds).build();
List<SalaryAcctEmployeePO> salaryAcctEmployeeList = getSalaryAcctEmployeeService(user).listByParam(salaryAcctEmployeeQueryParam);
salaryAcctEmployeeList = getAuthService(user).auth(salaryAcctEmployeeList, AuthFilterTypeEnum.QUERY_DATA,SalaryAcctEmployeePO.class,"report");
if (CollectionUtils.isEmpty(salaryAcctEmployeeList)) {
return page;
}
Set<Long> innerEmployeeIds = SalaryEntityUtil.properties(salaryAcctEmployeeList, SalaryAcctEmployeePO::getEmployeeId);
// 内部人员id
Set<Long> innerEmployeeIds = salaryAcctEmployeeList.stream().map(SalaryAcctEmployeePO::getEmployeeId).collect(Collectors.toCollection(LinkedHashSet::new));
// 3.关键字搜索参数
if (StringUtils.isNotEmpty(queryParam.getKeyword())) {
if (CollectionUtils.isNotEmpty(innerEmployeeIds)) {
@ -283,7 +286,8 @@ public class SalaryStatisticsEmployeeServiceImpl extends Service implements Sala
.collect(Collectors.toSet());
// 查询薪资核算人员
List<SalaryAcctEmployeePO> salaryAcctEmployeeList = getSalaryAcctEmployeeService(user).listByTaxAgentAndSalaryMonth(taxAgentIds, salaryMonths);
SalaryAcctEmployeeQueryParam salaryAcctEmployeeQueryParam = SalaryAcctEmployeeQueryParam.builder().salaryMonths(salaryMonths).taxAgentIds(taxAgentIds).build();
List<SalaryAcctEmployeePO> salaryAcctEmployeeList = getSalaryAcctEmployeeService(user).listByParam(salaryAcctEmployeeQueryParam);
salaryAcctEmployeeList = getAuthService(user).auth(salaryAcctEmployeeList, AuthFilterTypeEnum.QUERY_DATA,SalaryAcctEmployeePO.class,"report");
if (CollectionUtils.isNotEmpty(queryParam.getSubCompanyIds()) || CollectionUtils.isNotEmpty(queryParam.getDepartmentIds()) || StringUtils.isNotBlank(queryParam.getKeyword())) {
@ -306,8 +310,7 @@ public class SalaryStatisticsEmployeeServiceImpl extends Service implements Sala
if (CollectionUtils.isNotEmpty(queryParam.getIds())) {
salaryAcctEmployeeList = salaryAcctEmployeeList.stream().filter(emp -> queryParam.getIds().contains(emp.getId())).collect(Collectors.toList());
}
salaryAcctEmployeeList = salaryAcctEmployeeList.stream().sorted(Comparator.comparing(SalaryAcctEmployeePO::getSalaryMonth)).collect(Collectors.toList());
Collections.reverse(salaryAcctEmployeeList);
salaryAcctEmployeeList = salaryAcctEmployeeList.stream().sorted(Comparator.comparing(SalaryAcctEmployeePO::getSalaryMonth).reversed()).collect(Collectors.toList());
PageInfo<SalaryAcctEmployeePO> SalaryAcctEmployeePageInfo = SalaryPageUtil.buildPage(queryParam.getCurrent(), queryParam.getPageSize(), salaryAcctEmployeeList);
if (queryParam.isExport()) {
SalaryAcctEmployeePageInfo.setList(salaryAcctEmployeeList);

View File

@ -54,6 +54,8 @@ import weaver.wechat.util.Utils;
import java.util.*;
import java.util.stream.Collectors;
import static com.engine.salary.sys.constant.SalarySysConstant.REPORT_ORGANIZATIN_TYPE;
/**
* 薪酬统计报表
* <p>Copyright: Copyright (c) 2022</p>
@ -71,6 +73,7 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary
public static final String LAST_INFO = "lastInfoList";
public static final String SAME_INFO = "sameInfoList";
private boolean isRealOrg = "1".equals(getSalaryCacheService(user).get(REPORT_ORGANIZATIN_TYPE));
private SalaryStatisticsReportMapper getSalaryStatisticsReportMapper() {
return MapperProxyFactory.getProxy(SalaryStatisticsReportMapper.class);
@ -197,16 +200,16 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary
this.getSalaryStatisticsReportMapper().updateIgnoreNull(poNew);
// 记录日志
LoggerContext<SalaryStatisticsReportPO> loggerContext = new LoggerContext<>();
loggerContext.setUser(user);
loggerContext.setTargetId(String.valueOf(poNew.getId()));
loggerContext.setTargetName(poNew.getReportName());
loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue());
loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel( 0, "更新报表"));
loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel( 0, "更新报表"));
loggerContext.setOldValues(po);
loggerContext.setNewValues(poNew);
SalaryElogConfig.salaryStatReportLoggerTemplate.write(loggerContext);
LoggerContext<SalaryStatisticsReportPO> loggerContext = new LoggerContext<>();
loggerContext.setUser(user);
loggerContext.setTargetId(String.valueOf(poNew.getId()));
loggerContext.setTargetName(poNew.getReportName());
loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue());
loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "更新报表"));
loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "更新报表"));
loggerContext.setOldValues(po);
loggerContext.setNewValues(poNew);
SalaryElogConfig.salaryStatReportLoggerTemplate.write(loggerContext);
} else {
List<SalaryStatisticsReportPO> list = listByName(saveParam.getReportName());
if (CollectionUtils.isNotEmpty(list)) {
@ -217,15 +220,15 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary
getSalaryStatisticsReportMapper().insertIgnoreNull(poNew);
// 记录日志
LoggerContext<SalaryStatisticsReportPO> loggerContext = new LoggerContext<>();
loggerContext.setUser(user);
loggerContext.setTargetId(String.valueOf(poNew.getId()));
loggerContext.setTargetName(poNew.getReportName());
loggerContext.setOperateType(OperateTypeEnum.ADD.getValue());
loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel( 0, "新增报表"));
loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel( 0, "新增报表"));
loggerContext.setNewValues(poNew);
SalaryElogConfig.salaryStatReportLoggerTemplate.write(loggerContext);
LoggerContext<SalaryStatisticsReportPO> loggerContext = new LoggerContext<>();
loggerContext.setUser(user);
loggerContext.setTargetId(String.valueOf(poNew.getId()));
loggerContext.setTargetName(poNew.getReportName());
loggerContext.setOperateType(OperateTypeEnum.ADD.getValue());
loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "新增报表"));
loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "新增报表"));
loggerContext.setNewValues(poNew);
SalaryElogConfig.salaryStatReportLoggerTemplate.write(loggerContext);
}
return StringUtils.EMPTY;
}
@ -305,16 +308,16 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary
getSalaryStatisticsItemService(user).saveOrUpdateBatch(salaryStatisticsItemList);
//记录日志
LoggerContext<SalaryStatisticsReportPO> loggerContext = new LoggerContext<>();
loggerContext.setUser(user);
loggerContext.setTargetId(String.valueOf(po.getId()));
loggerContext.setTargetName(po.getReportName());
loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue());
loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel( 0, "更新报表"));
loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "更新报表"));
loggerContext.setOldValues(oldPO);
loggerContext.setNewValues(po);
SalaryElogConfig.salaryStatReportLoggerTemplate.write(loggerContext);
LoggerContext<SalaryStatisticsReportPO> loggerContext = new LoggerContext<>();
loggerContext.setUser(user);
loggerContext.setTargetId(String.valueOf(po.getId()));
loggerContext.setTargetName(po.getReportName());
loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue());
loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "更新报表"));
loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "更新报表"));
loggerContext.setOldValues(oldPO);
loggerContext.setNewValues(po);
SalaryElogConfig.salaryStatReportLoggerTemplate.write(loggerContext);
return StringUtils.EMPTY;
}
@ -333,17 +336,17 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary
getSalaryStatisticsReportMapper().deleteByIds(deleteIds);
//删除薪资项
getSalaryStatisticsItemService(user).deleteByReportIds(deleteIds);
list.forEach(e -> {
// 记录日志
LoggerContext<SalaryStatisticsReportPO> loggerContext = new LoggerContext<>();
loggerContext.setUser(user);
loggerContext.setTargetId(String.valueOf(e.getId()));
loggerContext.setTargetName(e.getReportName());
loggerContext.setOperateType(OperateTypeEnum.DELETE.getValue());
loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel( 0, "删除报表"));
loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel( 0, "删除报表") + e.getReportName());
SalaryElogConfig.salaryStatReportLoggerTemplate.write(loggerContext);
});
list.forEach(e -> {
// 记录日志
LoggerContext<SalaryStatisticsReportPO> loggerContext = new LoggerContext<>();
loggerContext.setUser(user);
loggerContext.setTargetId(String.valueOf(e.getId()));
loggerContext.setTargetName(e.getReportName());
loggerContext.setOperateType(OperateTypeEnum.DELETE.getValue());
loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "删除报表"));
loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "删除报表") + e.getReportName());
SalaryElogConfig.salaryStatReportLoggerTemplate.write(loggerContext);
});
}
Map<String, Object> resultMap = new HashMap<>(2);
@ -396,8 +399,8 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary
loggerContext.setTargetId(String.valueOf(po.getId()));
loggerContext.setTargetName(po.getReportName());
loggerContext.setOperateType(OperateTypeEnum.ADD.getValue());
loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel( 0, "新增报表"));
loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel( 0, "新增报表"));
loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "新增报表"));
loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "新增报表"));
loggerContext.setNewValues(po);
SalaryElogConfig.salaryStatReportLoggerTemplate.write(loggerContext);
}
@ -474,7 +477,15 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary
List<SalaryAcctEmployeePO> salaryAcctEmployeeList = getSalaryAcctEmployeeService(user).listBySalaryStatisticsReportParam(queryParam);
// 设置dimensionValue为维度值
SalaryStatisticsReportDataDTO salaryStatisticsReportData = SalaryStatisticsReportDataDTO.builder().list(salaryAcctEmployeeList).lastList(Collections.emptyList()).sameList(Collections.emptyList()).salaryStatisticsItemList(salaryStatisticsItemPOS).employeeId((long) user.getUID()).tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY).dimensionValue(param.getDimensionValue()).build();
SalaryStatisticsReportDataDTO salaryStatisticsReportData = SalaryStatisticsReportDataDTO.builder()
.list(salaryAcctEmployeeList)
.lastList(Collections.emptyList())
.sameList(Collections.emptyList())
.salaryStatisticsItemList(salaryStatisticsItemPOS)
.employeeId((long) user.getUID())
.dimensionValue(param.getDimensionValue())
.tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY)
.build();
Map<Long, Map<String, String>> resultMap = new HashMap<>();
List<Long> salaryAcctEmployeeIds = salaryAcctEmployeeList.stream().map(SalaryAcctEmployeePO::getId).collect(Collectors.toList());
@ -780,38 +791,74 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary
Map<Long, String> subComIdNameMap = new HashMap<>();
Map<Long, Long> lastEmpIdSubComMap = new HashMap<>();
Map<Long, Long> sameEmpIdSubComMap = new HashMap<>();
comInfoMap.forEach((k, v) -> {
subComIdNameMap.put(v.getSubcompanyid(), v.getSubcompanyName());
empIdSubComMap.put(k, v.getSubcompanyid());
subComIds.add(v.getSubcompanyid());
});
lastComInfoMap.forEach((k, v) -> {
lastEmpIdSubComMap.put(k, v.getSubcompanyid());
});
sameComInfoMap.forEach((k, v) -> {
sameEmpIdSubComMap.put(k, v.getSubcompanyid());
});
if (isRealOrg) {
comInfoMap.forEach((k, v) -> {
subComIdNameMap.put(v.getSubcompanyid(), v.getSubcompanyName());
empIdSubComMap.put(k, v.getSubcompanyid());
subComIds.add(v.getSubcompanyid());
});
lastComInfoMap.forEach((k, v) -> {
lastEmpIdSubComMap.put(k, v.getSubcompanyid());
});
sameComInfoMap.forEach((k, v) -> {
sameEmpIdSubComMap.put(k, v.getSubcompanyid());
});
} else {
data.getList().forEach(employee -> {
if (employee.getSubcompanyId() != null && employee.getSubcompanyId() != null) {
subComIdNameMap.put(employee.getSubcompanyId(), employee.getSubcompanyName());
subComIds.add(employee.getDepartmentId());
empIdSubComMap.put(employee.getEmployeeId(), employee.getSubcompanyId());
}
});
data.getLastList().forEach(employee -> {
if (employee.getSubcompanyId() != null && employee.getSubcompanyId() != null) {
lastEmpIdSubComMap.put(employee.getEmployeeId(), employee.getSubcompanyId());
}
});
data.getSameList().forEach(employee -> {
if (employee.getSubcompanyId() != null && employee.getSubcompanyId() != null) {
sameEmpIdSubComMap.put(employee.getEmployeeId(), employee.getSubcompanyId());
}
});
}
String dimensionValue = data.getDimensionValue();
subComIds.forEach(subComId -> {
if (dimensionValue == null) {
List<SalaryAcctEmployeePO> subComEmployeePOS = data.getList().stream().filter(po -> Objects.equals(empIdSubComMap.get(po.getEmployeeId()), subComId)).collect(Collectors.toList());
List<SalaryAcctEmployeePO> lastSubComEmployeePOS = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdSubComMap.get(po.getEmployeeId()), subComId)).collect(Collectors.toList());
List<SalaryAcctEmployeePO> sameSubComEmployeePOS = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdSubComMap.get(po.getEmployeeId()), subComId)).collect(Collectors.toList());
List<SalaryAcctEmployeePO> subComEmployeePOS = data.getList().stream().filter(po -> Objects.equals(po.getSubcompanyId(), subComId)).collect(Collectors.toList());
List<SalaryAcctEmployeePO> lastSubComEmployeePOS = data.getLastList().stream().filter(po -> Objects.equals(po.getSubcompanyId(), subComId)).collect(Collectors.toList());
List<SalaryAcctEmployeePO> sameSubComEmployeePOS = data.getSameList().stream().filter(po -> Objects.equals(po.getSubcompanyId(), subComId)).collect(Collectors.toList());
if (isRealOrg) {
subComEmployeePOS = data.getList().stream().filter(po -> Objects.equals(empIdSubComMap.get(po.getEmployeeId()), subComId)).collect(Collectors.toList());
lastSubComEmployeePOS = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdSubComMap.get(po.getEmployeeId()), subComId)).collect(Collectors.toList());
sameSubComEmployeePOS = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdSubComMap.get(po.getEmployeeId()), subComId)).collect(Collectors.toList());
}
Map<String, Object> temp = new HashMap<>();
temp.put(DM, subComIdNameMap.get(subComId));
temp.putAll(SalaryStatisticsReportBO.calculateItem(subComEmployeePOS, lastSubComEmployeePOS, sameSubComEmployeePOS, salaryAcctResultValueMap, data.getSalaryStatisticsItemList()));
records.add(temp);
} else if (StringUtils.equals(dimensionValue, subComIdNameMap.get(subComId))) {
List<SalaryAcctEmployeePO> subComEmployeePOS = data.getList().stream().filter(po -> Objects.equals(empIdSubComMap.get(po.getEmployeeId()), subComId)).collect(Collectors.toList());
List<SalaryAcctEmployeePO> subComEmployeePOS = data.getList().stream().filter(po -> Objects.equals(po.getSubcompanyId(), subComId)).collect(Collectors.toList());
if (isRealOrg) {
subComEmployeePOS = data.getList().stream().filter(po -> Objects.equals(empIdSubComMap.get(po.getEmployeeId()), subComId)).collect(Collectors.toList());
}
data.setListByDimensionValue(subComEmployeePOS);
}
});
if (dimensionValue == null) {
List<SalaryAcctEmployeePO> noGroupingList = data.getList().stream().filter(po -> empIdSubComMap.get(po.getEmployeeId()) == null).collect(Collectors.toList());
List<SalaryAcctEmployeePO> lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdSubComMap.get(po.getEmployeeId()) == null).collect(Collectors.toList());
List<SalaryAcctEmployeePO> sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdSubComMap.get(po.getEmployeeId()) == null).collect(Collectors.toList());
List<SalaryAcctEmployeePO> noGroupingList = data.getList().stream().filter(po -> po.getSubcompanyId() == null).collect(Collectors.toList());
List<SalaryAcctEmployeePO> lastNoGroupingList = data.getLastList().stream().filter(po -> po.getSubcompanyId() == null).collect(Collectors.toList());
List<SalaryAcctEmployeePO> sameNoGroupingList = data.getSameList().stream().filter(po -> po.getSubcompanyId() == null).collect(Collectors.toList());
if (isRealOrg) {
noGroupingList = data.getList().stream().filter(po -> empIdSubComMap.get(po.getEmployeeId()) == null).collect(Collectors.toList());
lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdSubComMap.get(po.getEmployeeId()) == null).collect(Collectors.toList());
sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdSubComMap.get(po.getEmployeeId()) == null).collect(Collectors.toList());
}
if (CollectionUtils.isNotEmpty(noGroupingList)) {
Map<String, Object> noGrouping = new HashMap<>();
noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(153462, "无分组"));
@ -820,6 +867,9 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary
}
} else if (StringUtils.equals(dimensionValue, "无分组")) {
List<SalaryAcctEmployeePO> noGroupingList = data.getList().stream().filter(po -> empIdSubComMap.get(po.getEmployeeId()) == null).collect(Collectors.toList());
if (isRealOrg) {
noGroupingList = data.getList().stream().filter(po -> po.getSubcompanyId() == null).collect(Collectors.toList());
}
data.setListByDimensionValue(noGroupingList);
}
@ -843,44 +893,78 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary
Map<Long, Long> lastEmpIdDepartIdMap = new HashMap<>();
Map<Long, Long> sameEmpIdDepartIdMap = new HashMap<>();
Map<Long, String> departIdNameMap = new HashMap<>();
simpleEmployeeList.forEach(employee -> {
if (employee.getDepartmentName() != null && employee.getDepartmentId() != null) {
departIdNameMap.put(employee.getDepartmentId(), employee.getDepartmentName());
departIds.add(employee.getDepartmentId());
empIdDepartIdMap.put(employee.getEmployeeId(), employee.getDepartmentId());
}
});
lastSimpleEmployeeList.forEach(employee -> {
if (employee.getDepartmentName() != null && employee.getDepartmentId() != null) {
lastEmpIdDepartIdMap.put(employee.getEmployeeId(), employee.getDepartmentId());
}
});
sameSimpleEmployeeList.forEach(employee -> {
if (employee.getDepartmentName() != null && employee.getDepartmentId() != null) {
sameEmpIdDepartIdMap.put(employee.getEmployeeId(), employee.getDepartmentId());
}
});
if (isRealOrg) {
simpleEmployeeList.forEach(employee -> {
if (employee.getDepartmentName() != null && employee.getDepartmentId() != null) {
departIdNameMap.put(employee.getDepartmentId(), employee.getDepartmentName());
departIds.add(employee.getDepartmentId());
empIdDepartIdMap.put(employee.getEmployeeId(), employee.getDepartmentId());
}
});
lastSimpleEmployeeList.forEach(employee -> {
if (employee.getDepartmentName() != null && employee.getDepartmentId() != null) {
lastEmpIdDepartIdMap.put(employee.getEmployeeId(), employee.getDepartmentId());
}
});
sameSimpleEmployeeList.forEach(employee -> {
if (employee.getDepartmentName() != null && employee.getDepartmentId() != null) {
sameEmpIdDepartIdMap.put(employee.getEmployeeId(), employee.getDepartmentId());
}
});
} else {
data.getList().forEach(employee -> {
if (employee.getDepartmentName() != null && employee.getDepartmentId() != null) {
departIdNameMap.put(employee.getDepartmentId(), employee.getDepartmentName());
departIds.add(employee.getDepartmentId());
empIdDepartIdMap.put(employee.getEmployeeId(), employee.getDepartmentId());
}
});
data.getLastList().forEach(employee -> {
if (employee.getDepartmentName() != null && employee.getDepartmentId() != null) {
lastEmpIdDepartIdMap.put(employee.getEmployeeId(), employee.getDepartmentId());
}
});
data.getSameList().forEach(employee -> {
if (employee.getDepartmentName() != null && employee.getDepartmentId() != null) {
sameEmpIdDepartIdMap.put(employee.getEmployeeId(), employee.getDepartmentId());
}
});
}
String dimensionValue = data.getDimensionValue();
departIds.forEach(departId -> {
if (dimensionValue == null) {
List<SalaryAcctEmployeePO> departEmployeePOS = data.getList().stream().filter(po -> Objects.equals(empIdDepartIdMap.get(po.getEmployeeId()), departId)).collect(Collectors.toList());
List<SalaryAcctEmployeePO> lastDepartEmployeePOS = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdDepartIdMap.get(po.getEmployeeId()), departId)).collect(Collectors.toList());
List<SalaryAcctEmployeePO> sameDepartEmployeePOS = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdDepartIdMap.get(po.getEmployeeId()), departId)).collect(Collectors.toList());
List<SalaryAcctEmployeePO> departEmployeePOS = data.getList().stream().filter(po -> Objects.equals(po.getDepartmentId(), departId)).collect(Collectors.toList());
List<SalaryAcctEmployeePO> lastDepartEmployeePOS = data.getLastList().stream().filter(po -> Objects.equals(po.getDepartmentId(), departId)).collect(Collectors.toList());
List<SalaryAcctEmployeePO> sameDepartEmployeePOS = data.getSameList().stream().filter(po -> Objects.equals(po.getDepartmentId(), departId)).collect(Collectors.toList());
if (isRealOrg) {
departEmployeePOS = data.getList().stream().filter(po -> Objects.equals(empIdDepartIdMap.get(po.getEmployeeId()), departId)).collect(Collectors.toList());
lastDepartEmployeePOS = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdDepartIdMap.get(po.getEmployeeId()), departId)).collect(Collectors.toList());
sameDepartEmployeePOS = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdDepartIdMap.get(po.getEmployeeId()), departId)).collect(Collectors.toList());
}
Map<String, Object> temp = new HashMap<>();
temp.put(DM, departIdNameMap.get(departId));
temp.putAll(SalaryStatisticsReportBO.calculateItem(departEmployeePOS, lastDepartEmployeePOS, sameDepartEmployeePOS, salaryAcctResultValueMap, data.getSalaryStatisticsItemList()));
records.add(temp);
} else if (StringUtils.equals(dimensionValue, departIdNameMap.get(departId))) {
List<SalaryAcctEmployeePO> departEmployeePOS = data.getList().stream().filter(po -> Objects.equals(empIdDepartIdMap.get(po.getEmployeeId()), departId)).collect(Collectors.toList());
List<SalaryAcctEmployeePO> departEmployeePOS = data.getList().stream().filter(po -> Objects.equals(po.getDepartmentId(), departId)).collect(Collectors.toList());
if (isRealOrg) {
data.getList().stream().filter(po -> Objects.equals(empIdDepartIdMap.get(po.getEmployeeId()), departId)).collect(Collectors.toList());
}
data.setListByDimensionValue(departEmployeePOS);
}
});
if (dimensionValue == null) {
List<SalaryAcctEmployeePO> noGroupingList = data.getList().stream().filter(po -> empIdDepartIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList());
List<SalaryAcctEmployeePO> lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdDepartIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList());
List<SalaryAcctEmployeePO> sameNoGroupingList = data.getSameList().stream().filter(po -> lastEmpIdDepartIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList());
List<SalaryAcctEmployeePO> noGroupingList = data.getList().stream().filter(po -> po.getDepartmentId() == null).collect(Collectors.toList());
List<SalaryAcctEmployeePO> lastNoGroupingList = data.getLastList().stream().filter(po -> po.getDepartmentId() == null).collect(Collectors.toList());
List<SalaryAcctEmployeePO> sameNoGroupingList = data.getSameList().stream().filter(po -> po.getDepartmentId() == null).collect(Collectors.toList());
if (isRealOrg) {
noGroupingList = data.getList().stream().filter(po -> empIdDepartIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList());
lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdDepartIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList());
sameNoGroupingList = data.getSameList().stream().filter(po -> lastEmpIdDepartIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList());
}
if (CollectionUtils.isNotEmpty(noGroupingList)) {
Map<String, Object> noGrouping = new HashMap<>();
noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(153462, "无分组"));
@ -888,7 +972,10 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary
records.add(noGrouping);
}
} else if (StringUtils.equals(dimensionValue, "无分组")) {
List<SalaryAcctEmployeePO> noGroupingList = data.getList().stream().filter(po -> empIdDepartIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList());
List<SalaryAcctEmployeePO> noGroupingList = data.getList().stream().filter(po -> po.getDepartmentId() == null).collect(Collectors.toList());
if (isRealOrg) {
noGroupingList = data.getList().stream().filter(po -> empIdDepartIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList());
}
data.setListByDimensionValue(noGroupingList);
}

View File

@ -53,6 +53,8 @@ import weaver.hrm.User;
import java.util.*;
import java.util.stream.Collectors;
import static com.engine.salary.sys.constant.SalarySysConstant.REPORT_ORGANIZATIN_TYPE;
/**
* 薪资核算人员
* <p>Copyright: Copyright (c) 2022</p>
@ -116,6 +118,11 @@ public class SalaryAcctEmployeeServiceImpl extends Service implements SalaryAcct
return ServiceUtil.getService(SalarySysConfServiceImpl.class, user);
}
private SalaryCacheService getSalaryCacheService(User user) {
return ServiceUtil.getService(SalaryCacheServiceImpl.class, user);
}
private boolean isRealOrg = "1".equals(getSalaryCacheService(user).get(REPORT_ORGANIZATIN_TYPE));
@Override
public List<SalaryAcctEmployeeCountDTO> countBySalaryAcctRecordId(Collection<Long> salaryAcctRecordIds) {
@ -667,11 +674,6 @@ public class SalaryAcctEmployeeServiceImpl extends Service implements SalaryAcct
lambdaQueryChainWrapper.setSalaryMonths(yearMonths);
}
// 收入所得项目
// if (CollectionUtils.isNotEmpty(param.getIncomeCategory())) {
// lambdaQueryChainWrapper.in(SalaryAcctEmployeePO::getIncomeCategory, param.getIncomeCategory().stream().map(Object::toString).collect(Collectors.toList()));
// }
//排除未归档数据
List<SalaryAcctRecordPO> salaryAcctRecordPOS = getSalaryAcctRecordService(user).listAll();
List<Long> salaryAcctRecordIds = salaryAcctRecordPOS.stream()
@ -701,70 +703,47 @@ public class SalaryAcctEmployeeServiceImpl extends Service implements SalaryAcct
// 获取分部信息
List<Long> subCompanyIds = param.getSubCompany();
if (CollectionUtils.isNotEmpty(subCompanyIds)) {
// SubCompanyComInfo subCompanyComInfo = new SubCompanyComInfo();
// List<String> allSubcompanyIds = new ArrayList<>();
// for (Long subCompanyId : subCompanyIds) {
// String organizationIds = Util.null2String(subCompanyId);
// String allChildSubcompanyId = subCompanyComInfo.getAllChildSubcompanyId(subCompanyId.toString(), organizationIds);
// allSubcompanyIds.addAll(Arrays.asList(allChildSubcompanyId.split(",")));
// }
employeeList = employeeList.stream().filter(emp -> subCompanyIds.contains(emp.getSubcompanyid())).collect(Collectors.toList());
if (isRealOrg) {
employeeList = employeeList.stream().filter(emp -> subCompanyIds.contains(emp.getSubcompanyid())).collect(Collectors.toList());
} else {
list.stream().filter(emp -> subCompanyIds.contains(emp.getSubcompanyId())).collect(Collectors.toList());
}
}
// 部门过滤
List<Long> depart = param.getDepart();
if (CollectionUtils.isNotEmpty(depart)) {
// List<String> allDepartIds = new ArrayList<>();
// for (Long subDepartId : depart) {
// String ids = Util.null2String(subDepartId);
// try {
// String allDepartId = DepartmentComInfo.getAllChildDepartId(subDepartId.toString(), ids);
// allDepartIds.addAll(Arrays.asList(allDepartId.toString().split(",")));
// } catch (Exception e) {
// log.error("获取子部门失败", e);
// }
// }
employeeList = employeeList.stream().filter(emp -> depart.contains(emp.getDepartmentId())).collect(Collectors.toList());
if (isRealOrg) {
employeeList = employeeList.stream().filter(emp -> depart.contains(emp.getDepartmentId())).collect(Collectors.toList());
} else {
list = list.stream().filter(emp -> depart.contains(emp.getDepartmentId())).collect(Collectors.toList());
}
}
// 职级过滤
// if (CollectionUtils.isNotEmpty(param.getGrade())) {
// Set<Long> employeeIdsByGradeFilter = new HashSet<>();
// simpleEmployeeList.forEach(simpleEmployee -> {
// if (simpleEmployee.getGrade() != null && param.getGrade().contains(simpleEmployee.getGrade().getId())) {
// employeeIdsByGradeFilter.add(simpleEmployee.getEmployeeId());
// }
// });
// if (CollectionUtils.isEmpty(employeeIdsByGradeFilter)) {
// return Lists.newArrayList();
// }
// list = list.stream().filter(po -> employeeIdsByGradeFilter.contains(po.getEmployeeId())).collect(Collectors.toList());
// }
// 岗位过滤
List<Long> position = param.getPosition();
if (CollectionUtils.isNotEmpty(position)) {
// Set<Long> employeeIdsByPostionFilter = new HashSet<>();
// simpleEmployeeList.forEach(simpleEmployee -> {
// if (simpleEmployee.getPosition() != null && param.getPosition().contains(simpleEmployee.getPosition().getId())) {
// employeeIdsByPostionFilter.add(simpleEmployee.getEmployeeId());
// }
// });
// if (CollectionUtils.isEmpty(employeeIdsByPostionFilter)) {
// return Lists.newArrayList();
// }
employeeList = employeeList.stream().filter(emp -> position.contains(emp.getJobtitleId())).collect(Collectors.toList());
if (isRealOrg) {
employeeList = employeeList.stream().filter(emp -> position.contains(emp.getJobtitleId())).collect(Collectors.toList());
} else {
list = list.stream().filter(emp -> position.contains(emp.getJobtitleId())).collect(Collectors.toList());
}
}
// 人事状态过滤
if (CollectionUtils.isNotEmpty(param.getStatus())) {
Set<Long> employeeIdsByStatus = new HashSet<>();
employeeList.forEach(simpleEmployee -> {
if (simpleEmployee.getStatus() != null && param.getStatus().contains(simpleEmployee.getStatus())) {
employeeIdsByStatus.add(simpleEmployee.getEmployeeId());
if (isRealOrg) {
Set<Long> employeeIdsByStatus = new HashSet<>();
employeeList.forEach(simpleEmployee -> {
if (simpleEmployee.getStatus() != null && param.getStatus().contains(simpleEmployee.getStatus())) {
employeeIdsByStatus.add(simpleEmployee.getEmployeeId());
}
});
if (CollectionUtils.isEmpty(employeeIdsByStatus)) {
return Lists.newArrayList();
}
});
if (CollectionUtils.isEmpty(employeeIdsByStatus)) {
return Lists.newArrayList();
list = list.stream().filter(po -> employeeIdsByStatus.contains(po.getEmployeeId())).collect(Collectors.toList());
} else {
list = list.stream().filter(po -> po.getStatus() != null && param.getStatus().contains(po.getStatus())).collect(Collectors.toList());
}
list = list.stream().filter(po -> employeeIdsByStatus.contains(po.getEmployeeId())).collect(Collectors.toList());
}
// 入职日期
if (CollectionUtils.isNotEmpty(param.getHiredate())) {
@ -780,27 +759,15 @@ public class SalaryAcctEmployeeServiceImpl extends Service implements SalaryAcct
}
list = list.stream().filter(po -> employeeIdsByHiredate.contains(po.getEmployeeId())).collect(Collectors.toList());
}
// // 离职日期 todo
// if (CollectionUtils.isNotEmpty(param.getLeavedate())) {
// Set<Long> employeeIdsByLeavedate = new HashSet<>();
// simpleEmployeeList.forEach(simpleEmployee -> {
//
// if (simpleEmployee.get() != null && ) {
// employeeIdsByLeavedate.add(simpleEmployee.getEmployeeId());
// }
// });
// if (CollectionUtils.isEmpty(employeeIdsByLeavedate)) {
// return Lists.newArrayList();
// }
// list = list.stream().filter(po -> employeeIdsByLeavedate.contains(po.getEmployeeId())).collect(Collectors.toList());
// }
// 人员
if (CollectionUtils.isNotEmpty(param.getEmployee())) {
list = list.stream().filter(po -> param.getEmployee().contains(po.getEmployeeId())).collect(Collectors.toList());
}
Set<Long> empIds = SalaryEntityUtil.properties(employeeList, DataCollectionEmployee::getEmployeeId);
list = list.stream().filter(po -> empIds.contains(po.getEmployeeId())).collect(Collectors.toList());
if(isRealOrg){
Set<Long> empIds = SalaryEntityUtil.properties(employeeList, DataCollectionEmployee::getEmployeeId);
list = list.stream().filter(po -> empIds.contains(po.getEmployeeId())).collect(Collectors.toList());
}
return list;
}

View File

@ -145,4 +145,15 @@ public class SalarySysConstant {
* 我的薪资福利工资单个税扣缴义务人显示状态
*/
public static final String TAX_AGENT_SHOW_STATUS = "taxAgentShowStatus";
/**
* 报表是否开启缓存0关闭 1开启
*/
public static final String REPORT_CACHE = "REPORT_CACHE";
/**
* 报表组织类型null/0 核算时组织信息 1实时组织信息
*/
public static final String REPORT_ORGANIZATIN_TYPE = "REPORT_ORGANIZATIN_TYPE";
}