feat: 全部范围部分发放撤回功能

This commit is contained in:
fcli 2022-11-25 10:53:23 +08:00
parent 0aabfcd68a
commit fc81955b15
28 changed files with 1208 additions and 130 deletions

View File

@ -0,0 +1,8 @@
package com.api.salary.web;
import javax.ws.rs.Path;
@Path("/bs/hrmsalary/salarySendRange")
public class SalarySendRangeController extends com.engine.salary.web.SalarySendRangeController{
}

View File

@ -0,0 +1,71 @@
package com.engine.salary.biz;
import com.engine.common.util.ServiceUtil;
import com.engine.salary.entity.salaryBill.dto.SalarySendUserInfoDTO;
import com.engine.salary.entity.salaryBill.po.SalarySendRangeObj;
import com.engine.salary.entity.taxagent.dto.TaxAgentEmployeeTaxAgentDTO;
import com.engine.salary.mapper.salarybill.SalarySendRangeObjMapper;
import com.engine.salary.service.TaxAgentService;
import com.engine.salary.service.impl.TaxAgentServiceImpl;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.ibatis.session.SqlSession;
import weaver.conn.mybatis.MyBatisFactory;
import java.util.*;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.stream.Collectors;
import static com.engine.salary.constant.SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY;
public class SalarySendRangeObjBiz {
private TaxAgentService getTaxAgentService() {
return ServiceUtil.getService(TaxAgentServiceImpl.class);
}
public <R> R applyMapper(Function<SalarySendRangeObjMapper, R> mapper) {
try (SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession()) {
final SalarySendRangeObjMapper salarySendRangeObjMapper = sqlSession.getMapper(SalarySendRangeObjMapper.class);
R apply = mapper.apply(salarySendRangeObjMapper);
sqlSession.commit();
return apply;
}
}
public void runMapper(Consumer<SalarySendRangeObjMapper> mapper) {
try (SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession()) {
final SalarySendRangeObjMapper salarySendRangeObjMapper = sqlSession.getMapper(SalarySendRangeObjMapper.class);
mapper.accept(salarySendRangeObjMapper);
sqlSession.commit();
}
}
public List<SalarySendUserInfoDTO> getSalarySendUserInfoDTOs(List<Long> employees) {
List<SalarySendUserInfoDTO> userDTOs = applyMapper(mapper -> mapper.getUserInfoByEmployeeIds(employees));
Map<Long, SalarySendUserInfoDTO> userMap = userDTOs.stream()
.collect(Collectors.toMap(SalarySendUserInfoDTO::getResourceId, Function.identity()));
List<Long> employeeIds = userDTOs.stream()
.map(SalarySendUserInfoDTO::getResourceId)
.collect(Collectors.toList());
Collection<TaxAgentEmployeeTaxAgentDTO> employeeAgents
= getTaxAgentService().listAllTaxAgentsAsRange(employeeIds);
for (TaxAgentEmployeeTaxAgentDTO employeeAgent : employeeAgents) {
SalarySendUserInfoDTO info = userMap.get(employeeAgent.getEmployeeId());
if (info != null) {
if (CollectionUtils.isEmpty(info.getTaxAgentIds())) {
info.setTaxAgentIds(new ArrayList<>());
}
info.getTaxAgentIds().addAll(Optional.ofNullable(employeeAgent.getTaxAgentIds()).orElse(Collections.emptyList()));
}
}
return userDTOs;
}
public void replaceAllByRangeId(Long rangeId, List<SalarySendRangeObj> rangeObjs) {
runMapper(mapper -> {
mapper.deleteByRangeIds(Collections.singletonList(rangeId), DEFAULT_TENANT_KEY);
mapper.batchInsert(rangeObjs);
});
}
}

View File

@ -0,0 +1,186 @@
package com.engine.salary.entity.salaryBill.bo;
import com.engine.salary.entity.salaryBill.dto.SalarySendUserInfoDTO;
import com.engine.salary.entity.salaryBill.po.SalarySendRangeObj;
import com.engine.salary.enums.salarysend.SalarySendRangeTargetTypeEnum;
import com.engine.salary.enums.salarysend.SalarySendRangeTypeEnum;
import com.google.common.collect.Sets;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.apache.commons.collections4.CollectionUtils;
import java.util.*;
/**
* @Description: 工资单发放范围
*/
@NoArgsConstructor
public class SalarySendRangeBO {
private static final SalarySendRangeItem EMPTY_ITEM = new SalarySendRangeItem(null, null, Collections.emptySet());
private static final Integer INCLUDED = 1;
private static final Integer EXCLUDED = -1;
private static final Integer NOT_IN = 0;
/**
* 索引map
*/
private final Map<SalarySendRangeTargetTypeEnum, Map<SalarySendRangeTypeEnum, SalarySendRangeItem>> indexMap
= new HashMap<>(6);
/**
* 排除所有人
*/
private boolean isExcludeAll = false;
/**
* 增加所有人
*/
private boolean isIncludeAll = false;
public boolean putNew(SalarySendRangeObj salarySendRangeObj) {
//如果已经设置了排除所有人 或者 添加所有人 直接跳过处理
if (isExcludeAll || isIncludeAll) {
return true;
}
Integer rangeType = salarySendRangeObj.getRangeType();
SalarySendRangeTypeEnum rangeTypeE = SalarySendRangeTypeEnum.fromValue(rangeType);
Integer targetType = salarySendRangeObj.getTargetType();
SalarySendRangeTargetTypeEnum targetTypeE = SalarySendRangeTargetTypeEnum.fromValue(targetType);
if (rangeTypeE == null || targetTypeE == null) {
return false;
}
//所有人 筛选
if (targetTypeE == SalarySendRangeTargetTypeEnum.ALL) {
isIncludeAll = rangeTypeE == SalarySendRangeTypeEnum.INCLUDE_OBJ;
isExcludeAll = rangeTypeE == SalarySendRangeTypeEnum.EXCLUDE_OBJ;
}
//未存入时插入
indexMap.computeIfAbsent(targetTypeE, k -> {
Map<SalarySendRangeTypeEnum, SalarySendRangeItem> value = new HashMap<>();
SalarySendRangeItem rangeItem =
new SalarySendRangeItem(rangeTypeE, targetTypeE, Sets.newHashSet(salarySendRangeObj.getTargetId()));
value.put(rangeTypeE, rangeItem);
return value;
});
//已存在时更新
indexMap.computeIfPresent(targetTypeE, (k, v) -> {
SalarySendRangeItem item = v.get(rangeTypeE);
if (null == item) {
item = new SalarySendRangeItem(rangeTypeE, targetTypeE, Sets.newHashSet(salarySendRangeObj.getTargetId()));
} else {
item.getTargetIds().add(salarySendRangeObj.getTargetId());
}
v.put(rangeTypeE, item);
return v;
});
return true;
}
private Set<Long> getTargetIds(SalarySendRangeTargetTypeEnum targetType, SalarySendRangeTypeEnum rangeType) {
Map<SalarySendRangeTypeEnum, SalarySendRangeItem> itemMap = indexMap.get(targetType);
if (itemMap != null) {
SalarySendRangeItem item = itemMap.getOrDefault(rangeType, EMPTY_ITEM);
return item.getTargetIds();
}
return Collections.emptySet();
}
/**
* 判断是否在人员范围内
* 如果已经有 所有人 的范围设置不判断是否有其他范围直接返回
*
* @param targetType 目标类型
* @param targetId 目标id
* @return 是否在范围内
*/
private int doJudgeInRange(SalarySendRangeTargetTypeEnum targetType, Long targetId) {
//如果所有人范围已经设置
if (isExcludeAll) {
return EXCLUDED;
}
Set<Long> includeTargetIds = getTargetIds(targetType, SalarySendRangeTypeEnum.INCLUDE_OBJ);
Set<Long> excludeTargetIds = getTargetIds(targetType, SalarySendRangeTypeEnum.EXCLUDE_OBJ);
if (excludeTargetIds.contains(targetId)) {
return EXCLUDED;
} else if (includeTargetIds.contains(targetId)) {
return INCLUDED;
} else {
//默认值是是否选择所有人
return isIncludeAll ? INCLUDED : NOT_IN;
}
}
private int doJudgeInRange(SalarySendRangeTargetTypeEnum targetType, Collection<Long> targetIds) {
if (CollectionUtils.isEmpty(targetIds)) {
return NOT_IN;
}
//如果所有人范围已经设置
if (isExcludeAll) {
return EXCLUDED;
}
if (isIncludeAll) {
return INCLUDED;
}
Set<Long> includeTargetIds = getTargetIds(targetType, SalarySendRangeTypeEnum.INCLUDE_OBJ);
Set<Long> excludeTargetIds = getTargetIds(targetType, SalarySendRangeTypeEnum.EXCLUDE_OBJ);
if (targetIds.stream().anyMatch(excludeTargetIds::contains)) {
return EXCLUDED;
} else if (targetIds.stream().anyMatch(includeTargetIds::contains)) {
return INCLUDED;
} else {
return NOT_IN;
}
}
public boolean judgeInRange(SalarySendUserInfoDTO dto) {
//如果所有人范围已经设置
if (isExcludeAll) {
return false;
}
Integer isInRange = NOT_IN;
// 默认值为是否选择所有人
boolean result = isIncludeAll;
for (SalarySendRangeTargetTypeEnum targetType : SalarySendRangeTargetTypeEnum.values()) {
switch (targetType) {
case DEPT:
isInRange = doJudgeInRange(targetType, dto.getDepartmentId());
break;
case USER:
isInRange = doJudgeInRange(targetType, dto.getResourceId());
break;
case POSITION:
isInRange = doJudgeInRange(targetType, dto.getJobTitle());
break;
case TAX_AGENT:
isInRange = doJudgeInRange(targetType, dto.getTaxAgentIds());
break;
case SUB_COMPANY:
isInRange = doJudgeInRange(targetType, dto.getSubCompanyId());
break;
}
if (isInRange.equals(EXCLUDED)) {
//如果被排除返回false
return false;
} else {
// 只要没有被排除在范围内即为true
result |= isInRange.equals(INCLUDED);
}
}
return result;
}
@AllArgsConstructor
@NoArgsConstructor
@Data
private static class SalarySendRangeItem {
private SalarySendRangeTypeEnum rangeType;
private SalarySendRangeTargetTypeEnum targetType;
private Set<Long> targetIds;
}
}

View File

@ -0,0 +1,36 @@
package com.engine.salary.entity.salaryBill.dto;
import com.cloudstore.eccom.pc.table.WeaTableType;
import com.engine.salary.annotation.SalaryTable;
import com.engine.salary.annotation.SalaryTableColumn;
import com.engine.salary.annotation.TableTitle;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@SalaryTable(pageId = "a4fa2487-d36a82d0dc050a5465f1252f9ecaa107",
tableType = WeaTableType.CHECKBOX)
public class SalarySendRangeListDTO {
@JsonSerialize(using = ToStringSerializer.class)
@SalaryTableColumn(column = "id", display = false)
private Long id;
private String grantType;
@SalaryTableColumn(text = "对象", width = "50%", column = "includeObj")
@TableTitle(title = "对象", key = "includeObj", dataIndex = "includeObj")
private List<SalarySendRangeObjDTO> includeObj;
@SalaryTableColumn(text = "对象中排除", width = "50%", column = "excludeObj")
@TableTitle(title = "对象中排除", key = "excludeObj", dataIndex = "excludeObj")
private List<SalarySendRangeObjDTO> excludeObj;
}

View File

@ -0,0 +1,44 @@
package com.engine.salary.entity.salaryBill.dto;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 工资单发放撤回筛选范围对象
*/
@AllArgsConstructor
@NoArgsConstructor
@Data
@Builder
public class SalarySendRangeObjDTO {
/**
* id
*/
@JsonSerialize(using = ToStringSerializer.class)
private Long targetId;
/**
* 名称
*/
private String targetName;
/**
* 类型
*/
private Integer targetType;
/**
* 类型名称
*/
private String targetTypeName;
/**
* @see com.engine.salary.enums.salarysend.SalarySendRangeTypeEnum
*/
private Integer rangeType;
}

View File

@ -0,0 +1,38 @@
package com.engine.salary.entity.salaryBill.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@AllArgsConstructor
@NoArgsConstructor
@Data
public class SalarySendUserInfoDTO {
/**
* 岗位
*/
private Long jobTitle;
/**
* 部门
*/
private Long departmentId;
/**
* 分部
*/
private Long subCompanyId;
/**
* 人员id
*/
private Long resourceId;
/**
* 个税扣缴义务人id
*/
private List<Long> taxAgentIds;
}

View File

@ -7,6 +7,7 @@ import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Collection;
import java.util.List;
/**
* @Description: 工资单发放参数
@ -26,6 +27,11 @@ public class SalarySendGrantParam {
// @ApiModelProperty("工资单发放Id")
private Long salarySendId;
/**
* 工资单发放范围id
*/
private List<Long> salarySendRangeIds;
public static String checkParam(SalarySendGrantParam param, Long employeeId, String tenantKey) {
if (param.getSalarySendId() == null) {
throw new SalaryRunTimeException("工资单发放Id必传");

View File

@ -0,0 +1,30 @@
package com.engine.salary.entity.salaryBill.param;
import com.engine.salary.common.BaseQueryParam;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
//@ApiModel("工资单发放范围查询参数")
public class SalarySendRangeQueryParam extends BaseQueryParam {
/**
* 发放类型
* @see com.engine.salary.enums.salarysend.SalarySendGrantTypeEnum
*/
private String grantType;
/**
* 发放单id
*/
private Long salarySendId;
/**
* 对象名称关键字
*/
private String targetName;
}

View File

@ -0,0 +1,122 @@
package com.engine.salary.entity.salaryBill.param;
import com.alibaba.nacos.client.naming.utils.CollectionUtils;
import com.engine.salary.entity.salaryBill.po.SalarySendRangeObj;
import com.engine.salary.entity.salaryBill.po.SalarySendRangePO;
import com.engine.salary.enums.salarysend.SalarySendGrantTypeEnum;
import com.engine.salary.enums.salarysend.SalarySendRangeTypeEnum;
import com.engine.salary.exception.SalaryRunTimeException;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import weaver.hrm.User;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
import static com.engine.salary.constant.SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class SalarySendRangeSaveParam {
/**
* 发放id
*/
private Long salarySendId;
/**
* 发放范围id
*/
private Long salarySendRangeId;
/**
* 发放/撤回
*
* @see SalarySendGrantTypeEnum
*/
private String grantType;
private List<SalarySendRangeTargetParam> includeObjParams;
private List<SalarySendRangeTargetParam> excludeObjParams;
public static void checkParam(SalarySendRangeSaveParam saveParam, Long employeeId, String tenantKey) {
if (saveParam.getSalarySendId() == null) {
throw new SalaryRunTimeException("工资单发放id不能为空");
}
if (saveParam.getGrantType() == null) {
throw new SalaryRunTimeException("操作类型不能为空");
}
if (CollectionUtils.isEmpty(saveParam.getIncludeObjParams())) {
throw new SalaryRunTimeException("对象不能为空");
}
}
@Data
@AllArgsConstructor
@NoArgsConstructor
public static class SalarySendRangeTargetParam {
/**
* 对象不能为空
*/
private Long targetId;
/**
* 对象类型不能为空
* @see com.engine.salary.enums.salarysend.SalarySendRangeTargetTypeEnum
*/
private Integer targetType;
}
public SalarySendRangePO toSalarySendRangePO(User user) {
return SalarySendRangePO.builder()
.id(salarySendRangeId)
.grantType(grantType)
.salarySendId(salarySendId)
.updateTime(new Date())
.creator((long) user.getUID())
.deleteType(0)
.tenantKey(DEFAULT_TENANT_KEY)
.createTime(salarySendId == null ? new Date() : null)
.build();
}
public List<SalarySendRangeObj> toSalarySendRangeObj(User user) {
List<SalarySendRangeObj> includeObjs = includeObjParams.stream()
.map(obj -> mapObj(user, obj))
.map(obj->obj.setRangeType(SalarySendRangeTypeEnum.INCLUDE_OBJ.getValue()))
.collect(Collectors.toList());
List<SalarySendRangeObj> excludeObjs = excludeObjParams.stream()
.map(obj -> mapObj(user, obj))
.map(obj -> obj.setRangeType(SalarySendRangeTypeEnum.EXCLUDE_OBJ.getValue()))
.collect(Collectors.toList());
List<SalarySendRangeObj> rangeObjs = new ArrayList<>();
rangeObjs.addAll(includeObjs);
rangeObjs.addAll(excludeObjs);
return rangeObjs;
}
private SalarySendRangeObj mapObj(User user, SalarySendRangeTargetParam obj) {
return SalarySendRangeObj.builder()
.salarySendRangeId(salarySendRangeId)
.salarySendId(salarySendId)
.targetId(obj.getTargetId())
.targetType(obj.getTargetType())
.deleteType(0)
.tenantKey(DEFAULT_TENANT_KEY)
.updateTime(new Date())
.createTime(new Date())
.creator((long) user.getUID())
.build();
}
}

View File

@ -7,6 +7,7 @@ import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Collection;
import java.util.List;
/**
* @Description: 工资单撤回参数
@ -26,6 +27,8 @@ public class SalarySendWithdrawParam {
// @ApiModelProperty("工资单发放Id")
private Long salarySendId;
private List<Long> salarySendRangeIds;
public static String checkParam(SalarySendWithdrawParam param, Long employeeId, String tenantKey) {
if (param.getSalarySendId() == null) {
throw new SalaryRunTimeException("工资单发放Id必传");

View File

@ -1,10 +1,12 @@
package com.engine.salary.entity.salaryBill.po;
package com.engine.salary.entity.salaryBill.po;
import java.util.Date;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import java.util.Date;
/**
* 工资单发放范围项目表
@ -13,6 +15,7 @@ import lombok.NoArgsConstructor;
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true)
public class SalarySendRangeObj {
/**
* 主键id

View File

@ -1,11 +1,12 @@
package com.engine.salary.entity.salaryBill.po;
package com.engine.salary.entity.salaryBill.po;
import java.util.Date;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
/**
* 工资单发放范围表
*/

View File

@ -0,0 +1,50 @@
package com.engine.salary.enums.salarysend;
import cn.hutool.core.util.StrUtil;
import java.util.Arrays;
import java.util.Objects;
public enum SalarySendGrantTypeEnum {
GRANT("grant", "发放", 98590),
WITHDRAW("withdraw", "撤回", 93351);
private String value;
private String defaultLabel;
private int labelId;
SalarySendGrantTypeEnum(String value, String defaultLabel, int labelId) {
this.value = value;
this.defaultLabel = defaultLabel;
this.labelId = labelId;
}
public String getValue() {
return value;
}
public String getDefaultLabel() {
return defaultLabel;
}
public int getLabelId() {
return labelId;
}
public static String getDefaultLabelByValue(String value, Long employeeId, String tenantKey) {
return Arrays.stream(SalarySendGrantTypeEnum.values()).filter(r -> r.getValue().equals(value)).findFirst()
.map(SalarySendGrantTypeEnum::getDefaultLabel)
.orElse(StrUtil.EMPTY);
}
public SalarySendGrantTypeEnum fromValue(String value) {
for (SalarySendGrantTypeEnum salarySendGrantTypeEnum : values()) {
if (Objects.equals(salarySendGrantTypeEnum.getValue(), value)) {
return salarySendGrantTypeEnum;
}
}
return null;
}
}

View File

@ -1,32 +0,0 @@
package com.engine.salary.enums.salarysend;
import com.engine.salary.enums.BaseEnum;
import com.engine.salary.util.SalaryI18nUtil;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Arrays;
import java.util.Optional;
/**
* @Description: 范围类型
* @Author: lfc
* @Date: 2022/11/14 09:33
*/
@AllArgsConstructor
@Getter
public enum SalarySendOperateTypeEnum implements BaseEnum<String> {
GRANT("grant", "发放", 98590),
WITHDRAW("withdraw", "撤回", 93351);
private final String value;
private final String defaultLabel;
private final int labelId;
public static String getDefaultLabelByValue(String value, Long employeeId, String tenantKey) {
Optional<SalarySendOperateTypeEnum> optional = Arrays.stream(SalarySendOperateTypeEnum.values()).filter(r->r.getValue().equals(value)).findFirst();
return optional.isPresent()? SalaryI18nUtil.getI18nLabel(optional.get().getLabelId(), optional.get().getDefaultLabel()):"";
}
}

View File

@ -1,4 +1,4 @@
package com.engine.salary.enums.salarysend;
package com.engine.salary.enums.salarysend;
import com.engine.salary.enums.BaseEnum;
import lombok.AllArgsConstructor;
@ -22,7 +22,22 @@ public enum SalarySendRangeTargetTypeEnum implements BaseEnum<Integer> {
private final int labelId;
public static SalarySendRangeTargetTypeEnum parseByValue(Integer value) {
@Override
public Integer getLabelId() {
return labelId;
}
@Override
public Integer getValue() {
return value;
}
@Override
public String getDefaultLabel() {
return defaultLabel;
}
public static SalarySendRangeTargetTypeEnum fromValue(Integer value) {
for (SalarySendRangeTargetTypeEnum targetTypeEnum : SalarySendRangeTargetTypeEnum.values()) {
if (Objects.equals(targetTypeEnum.getValue(), value)) {
return targetTypeEnum;

View File

@ -1,4 +1,4 @@
package com.engine.salary.enums.salarysend;
package com.engine.salary.enums.salarysend;
import com.engine.salary.enums.BaseEnum;
import com.engine.salary.util.SalaryI18nUtil;
@ -21,8 +21,33 @@ public enum SalarySendRangeTypeEnum implements BaseEnum<Integer> {
private final int labelId;
@Override
public Integer getLabelId() {
return labelId;
}
@Override
public Integer getValue() {
return value;
}
@Override
public String getDefaultLabel() {
return defaultLabel;
}
public static String getDefaultLabelByValue(Integer value, Long employeeId, String tenantKey) {
Optional<SalarySendRangeTypeEnum> optional = Arrays.stream(SalarySendRangeTypeEnum.values()).filter(r->Integer.valueOf(r.getValue()).equals(value)).findFirst();
return optional.isPresent()? SalaryI18nUtil.getI18nLabel(optional.get().getLabelId(), optional.get().getDefaultLabel()):"";
}
public static SalarySendRangeTypeEnum fromValue(int value) {
for (SalarySendRangeTypeEnum salarySendRangeTypeEnum : values()) {
boolean equals = salarySendRangeTypeEnum.getValue().equals(value);
if (equals) {
return salarySendRangeTypeEnum;
}
}
return null;
}
}

View File

@ -1,9 +1,11 @@
package com.engine.salary.mapper.salarybill;
package com.engine.salary.mapper.salarybill;
import com.engine.salary.entity.salaryBill.dto.SalarySendRangeListDTO;
import com.engine.salary.entity.salaryBill.param.SalarySendRangeQueryParam;
import com.engine.salary.entity.salaryBill.po.SalarySendRangePO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import org.apache.ibatis.annotations.Param;
public interface SalarySendRangeMapper {
int deleteByPrimaryKey(Long id);
@ -16,9 +18,17 @@ public interface SalarySendRangeMapper {
List<SalarySendRangePO> selectByAll(SalarySendRangePO salarySendRangePO);
List<SalarySendRangePO> selectAllBySalarySendIdAndGrantType(@Param("salarySendId") Long salarySendId, @Param("grantType") String grantType);
List<SalarySendRangePO> selectBySendIdAndGrantType(@Param("salarySendId") Long salarySendId,
@Param("grantType") String grantType);
List<Long> selectIdsBySendIdAndGrantType(@Param("salarySendId") Long salarySendId,
@Param("grantType") String grantType);
int updateBatchSelective(List<SalarySendRangePO> list);
int batchInsert(@Param("list") List<SalarySendRangePO> list);
List<SalarySendRangeListDTO> selectByParam(@Param("queryParam") SalarySendRangeQueryParam queryParam);
}

View File

@ -13,6 +13,12 @@
<result column="delete_type" jdbcType="INTEGER" property="deleteType" />
<result column="tenant_key" jdbcType="VARCHAR" property="tenantKey" />
</resultMap>
<resultMap id="RangeListMap" type="com.engine.salary.entity.salaryBill.dto.SalarySendRangeListDTO">
<result column="id" jdbcType="BIGINT" property="id"/>
<result column="grant_type" jdbcType="VARCHAR" property="grantType"/>
</resultMap>
<sql id="Base_Column_List">
<!--@mbg.generated-->
id, salary_send_id, grant_type, creator, create_time, update_time, delete_type, tenant_key
@ -25,11 +31,15 @@
where id = #{id,jdbcType=BIGINT}
</select>
<delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
<!--@mbg.generated-->
delete from hrsa_salary_send_range
where id = #{id,jdbcType=BIGINT}
update hrsa_salary_send_range
set delete_type = 1
where id = #{id,jdbcType=BIGINT} and delete_type = 0
</delete>
<insert id="insertSelective" keyColumn="id" keyProperty="id" parameterType="com.engine.salary.entity.salaryBill.po.SalarySendRangePO" useGeneratedKeys="true">
<insert id="insertSelective" keyColumn="id" keyProperty="id"
parameterType="com.engine.salary.entity.salaryBill.po.SalarySendRangePO"
useGeneratedKeys="true">
<!--@mbg.generated-->
insert into hrsa_salary_send_range
<trim prefix="(" suffix=")" suffixOverrides=",">
@ -79,6 +89,64 @@
</if>
</trim>
</insert>
<insert id="insertSelective" databaseId="oracle"
parameterType="com.engine.salary.entity.salaryBill.po.SalarySendRangePO">
<!--@mbg.generated-->
<selectKey keyProperty="id" resultType="long" order="AFTER">
select HRSA_S_S_R_ID.currval from dual
</selectKey>
insert into hrsa_salary_send_range
<trim prefix="(" suffix=")" suffixOverrides=",">
id,
<if test="salarySendId != null">
salary_send_id,
</if>
<if test="grantType != null">
grant_type,
</if>
<if test="creator != null">
creator,
</if>
<if test="createTime != null">
create_time,
</if>
<if test="updateTime != null">
update_time,
</if>
<if test="deleteType != null">
delete_type,
</if>
<if test="tenantKey != null">
tenant_key,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
#{id,jdbcType=BIGINT},
<if test="salarySendId != null">
#{salarySendId,jdbcType=BIGINT},
</if>
<if test="grantType != null">
#{grantType,jdbcType=VARCHAR},
</if>
<if test="creator != null">
#{creator,jdbcType=BIGINT},
</if>
<if test="createTime != null">
#{createTime,jdbcType=TIMESTAMP},
</if>
<if test="updateTime != null">
#{updateTime,jdbcType=TIMESTAMP},
</if>
<if test="deleteType != null">
#{deleteType,jdbcType=INTEGER},
</if>
<if test="tenantKey != null">
#{tenantKey,jdbcType=VARCHAR},
</if>
</trim>
</insert>
<update id="updateByPrimaryKeySelective" parameterType="com.engine.salary.entity.salaryBill.po.SalarySendRangePO">
<!--@mbg.generated-->
update hrsa_salary_send_range
@ -107,6 +175,8 @@
</set>
where id = #{id,jdbcType=BIGINT}
</update>
<select id="selectByAll" resultMap="BaseResultMap">
<!--@mbg.generated-->
select
@ -139,13 +209,22 @@
</if>
</where>
</select>
<select id="selectAllBySalarySendIdAndGrantType" resultMap="BaseResultMap">
<!--@mbg.generated-->
<select id="selectBySendIdAndGrantType" resultMap="BaseResultMap">
select
<include refid="Base_Column_List"/>
from hrsa_salary_send_range
where salary_send_id=#{salarySendId,jdbcType=BIGINT} and grant_type=#{grantType,jdbcType=VARCHAR}
<where>
delete_type = 0
and salary_send_id=#{salarySendId,jdbcType=BIGINT}
<if test="grantType != null and grantType != ''">
and grant_type=#{grantType,jdbcType=VARCHAR}
</if>
</where>
</select>
<update id="updateBatchSelective" parameterType="java.util.List">
<!--@mbg.generated-->
update hrsa_salary_send_range
@ -205,6 +284,8 @@
#{item.id,jdbcType=BIGINT}
</foreach>
</update>
<insert id="batchInsert" keyColumn="id" keyProperty="id" parameterType="map" useGeneratedKeys="true">
<!--@mbg.generated-->
insert into hrsa_salary_send_range
@ -217,4 +298,61 @@
#{item.tenantKey,jdbcType=VARCHAR})
</foreach>
</insert>
<insert id="batchInsert" databaseId="sqlserver">
<foreach collection="list" item="item" separator=";">
insert into hrsa_salary_send_range
(salary_send_id, grant_type, creator, create_time, update_time, delete_type, tenant_key
)
values
(#{item.salarySendId,jdbcType=BIGINT}, #{item.grantType,jdbcType=VARCHAR}, #{item.creator,jdbcType=BIGINT},
#{item.createTime,jdbcType=TIMESTAMP}, #{item.updateTime,jdbcType=TIMESTAMP}, #{item.deleteType,jdbcType=INTEGER},
#{item.tenantKey,jdbcType=VARCHAR})
</foreach>
</insert>
<insert id="batchInsert" databaseId="oracle">
<!--@mbg.generated-->
insert into hrsa_salary_send_range
(salary_send_id, grant_type, creator, create_time, update_time, delete_type, tenant_key
)
select
<foreach collection="list" item="item" separator=",">
#{item.salarySendId,jdbcType=BIGINT}, #{item.grantType,jdbcType=VARCHAR}, #{item.creator,jdbcType=BIGINT},
#{item.createTime,jdbcType=TIMESTAMP}, #{item.updateTime,jdbcType=TIMESTAMP}, #{item.deleteType,jdbcType=INTEGER},
#{item.tenantKey,jdbcType=VARCHAR}
</foreach>
from dual
</insert>
<select id="selectIdsBySendIdAndGrantType" resultType="java.lang.Long">
select
id
from hrsa_salary_send_range
<where>
delete_type = 0
and salary_send_id=#{salarySendId,jdbcType=BIGINT}
<if test="grantType != null and grantType != ''">
and grant_type=#{grantType,jdbcType=VARCHAR}
</if>
</where>
</select>
<select id="selectByParam" resultMap="RangeListMap">
select r.id,
r.grant_type
from hrsa_salary_send_range r
<where>
delete_type = 0
<if test="queryParam.grantType != null">
and r.grant_type = #{queryParam.grantType}
</if>
<if test="queryParam.salarySendId">
and r.salary_send_id = #{queryParam.salarySendId}
</if>
</where>
<if test="queryParam.orderRule != null">
order by ${queryParam.orderRule.orderRule} ${queryParam.orderRule.ascOrDesc}
</if>
</select>
</mapper>

View File

@ -1,5 +1,6 @@
package com.engine.salary.mapper.salarybill;
package com.engine.salary.mapper.salarybill;
import com.engine.salary.entity.salaryBill.dto.SalarySendUserInfoDTO;
import com.engine.salary.entity.salaryBill.po.SalarySendRangeObj;
import org.apache.ibatis.annotations.Param;
@ -23,9 +24,12 @@ public interface SalarySendRangeObjMapper {
int updateBatchSelective(List<SalarySendRangeObj> list);
void deleteByRangeIds(@Param("salarySendRangeIds") List<Long> salarySendRangeIds,
@Param("tenantKey") String tenantKey);
int batchInsert(@Param("list") List<SalarySendRangeObj> list);
int deleteBySalarySendIds(@Param("salarySendIds") Collection<Long> salarySendIds);
List<SalarySendUserInfoDTO> getUserInfoByEmployeeIds(@Param("employeeIds") List<Long> employeeIds);
}

View File

@ -293,7 +293,7 @@
</foreach>
</insert>
<insert id="batchInsert" databaseId="sqlserver">
<foreach collection="list" item="item" separator=",">
<foreach collection="list" item="item" separator=";">
insert into hrsa_salary_send_range_obj
(salary_send_id, salary_send_range_id, range_type, target_type, target_id, creator,
create_time, update_time, delete_type, tenant_key)
@ -329,4 +329,34 @@
)
and delete_type = 0
</update>
<update id="deleteByRangeIds">
update hrsa_salary_send_range_obj
set delete_type = 1
where delete_type = 0
and salary_send_range_id in (
<foreach collection="salarySendRangeIds" item="salarySendId" separator=",">
#{salarySendId}
</foreach>
)
</update>
<resultMap id="userInfoMap" type="com.engine.salary.entity.salaryBill.dto.SalarySendUserInfoDTO">
<result column="id" property="resourceId" jdbcType="BIGINT"/>
<result column="departmentid" property="departmentId" jdbcType="BIGINT"/>
<result column="subcompanyid1" property="subCompanyId" jdbcType="BIGINT"/>
<result column="jobtitle" property="jobTitle" jdbcType="BIGINT"/>
</resultMap>
<select id="getUserInfoByEmployeeIds" resultMap="userInfoMap">
select id,
departmentid,
subcompanyid1,
jobtitle
from hrmresource
where id in (
<foreach collection="employeeIds" item="item" separator=",">
#{item}
</foreach>
)
</select>
</mapper>

View File

@ -1,4 +1,4 @@
package com.engine.salary.service;
package com.engine.salary.service;
import com.engine.salary.entity.salaryBill.po.SalarySendRangeObj;
@ -20,13 +20,6 @@ public interface SalarySendRangeObjService {
*/
List<SalarySendRangeObj> listBySalarySendIdAndRangeIds(Long salarySendId, List<Long> rangeIds);
/**
* 保存筛选范围对象
*
* @param listObj
*/
void batchInsert(List<SalarySendRangeObj> listObj);
/**
* 根据工资饭发放id删除
*
@ -34,22 +27,16 @@ public interface SalarySendRangeObjService {
*/
void deleteBySalarySendIds(Collection<Long> salarySendIds);
/**
* 根据范围id删除
*
* @param rangeIds
* @param currentEmployeeId
* @param currentTenantKey
*/
void deleteByRangeIds(Collection<Long> rangeIds, Long currentEmployeeId);
void replaceAllByRangeIds(Long rangeIds, List<SalarySendRangeObj> rangeObjs);
/**
* 根据发放id和范围id获取发放信息id
*
* @param salarySendId
* @param rangeIds
* @param employeeId
* @return
*/
List<Long> getSendInfoIdsBySalarySendIdAndRangeIds(Long salarySendId, List<Long> rangeIds, Long employeeId);
List<Long> getSendInfoIdsBySalarySendIdAndRangeIds(Long salarySendId, List<Long> rangeIds);
void deleteBySalarySendRangeIds(List<Long> salarySendRangeIds);
}

View File

@ -1,31 +1,24 @@
package com.engine.salary.service;
package com.engine.salary.service;
import com.engine.salary.entity.salaryBill.dto.*;
import com.engine.salary.entity.salaryBill.param.*;
import com.engine.salary.entity.salaryBill.po.SalarySendPO;
import com.engine.salary.entity.salaryBill.po.SalaryTemplatePO;
import com.engine.salary.entity.salaryBill.dto.SalarySendRangeListDTO;
import com.engine.salary.entity.salaryBill.param.SalarySendRangeQueryParam;
import com.engine.salary.entity.salaryBill.param.SalarySendRangeSaveParam;
import com.engine.salary.util.page.PageInfo;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.util.Collection;
import java.util.List;
import java.util.Map;
/**
* @Description: 工资单发放范围
*/
public interface SalarySendRangeService {
void save();
void save(SalarySendRangeSaveParam param);
void listPage();
void listDTO();
void listByIds();
void getById(Long id);
PageInfo<SalarySendRangeListDTO> listPage(SalarySendRangeQueryParam queryParam);
void deleteBySalarySendIds(Collection<Long> sendIds);
void getSendInfoIdsBySendId(Collection<Long> sendIds);
void deleteByIds(List<Long> sendRangeIds);
List<Long> getSendInfoIdsBySendId(Long sendId, List<Long> sendRangeIds);
}

View File

@ -84,6 +84,7 @@ public interface SalarySendService {
*/
PageInfo<SalarySendInfoListDTO> salarySendInfoListPage(SalarySendInfoQueryParam queryParam);
List<SalarySendInfoListDTO> salarySendInfoList(Long salarySendId);
/**
* 我的工资单列表详情
*

View File

@ -1,61 +1,101 @@
package com.engine.salary.service.impl;
package com.engine.salary.service.impl;
import com.engine.common.util.ServiceUtil;
import com.engine.core.impl.Service;
import com.engine.hrm.service.RolesMembersService;
import com.engine.hrm.service.impl.RolesMembersServiceImpl;
import com.engine.salary.biz.SalarySendRangeObjBiz;
import com.engine.salary.entity.salaryBill.bo.SalarySendRangeBO;
import com.engine.salary.entity.salaryBill.dto.SalarySendInfoListDTO;
import com.engine.salary.entity.salaryBill.dto.SalarySendUserInfoDTO;
import com.engine.salary.entity.salaryBill.po.SalarySendRangeObj;
import com.engine.salary.mapper.salarybill.SalarySendRangeObjMapper;
import com.engine.salary.enums.salarysend.SalarySendRangeTargetTypeEnum;
import com.engine.salary.exception.SalaryRunTimeException;
import com.engine.salary.service.SalarySendRangeObjService;
import com.google.common.collect.Lists;
import com.engine.salary.service.SalarySendService;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.ibatis.session.SqlSession;
import weaver.conn.mybatis.MyBatisFactory;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.function.Function;
import java.util.Set;
import java.util.stream.Collectors;
import static com.engine.salary.constant.SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY;
public class SalarySendRangeObjServiceImpl extends Service implements SalarySendRangeObjService {
private <R> R runSalarySendRangeObjMapper(Function<SalarySendRangeObjMapper, R> mapper) {
try (SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession()) {
final SalarySendRangeObjMapper salarySendRangeObjMapper = sqlSession.getMapper(SalarySendRangeObjMapper.class);
return mapper.apply(salarySendRangeObjMapper);
}
private SalarySendService getSalarySendService() {
return ServiceUtil.getService(SalarySendServiceImpl.class, user);
}
private RolesMembersService getRolesMembersService() {
return ServiceUtil.getService(RolesMembersServiceImpl.class, user);
}
private final SalarySendRangeObjBiz salarySendRangeObjBiz = new SalarySendRangeObjBiz();
@Override
public List<SalarySendRangeObj> listBySalarySendIdAndRangeIds(Long salarySendId, List<Long> rangeIds) {
if (salarySendId == null || CollectionUtils.isEmpty(rangeIds)) {
return Collections.emptyList();
}
return runSalarySendRangeObjMapper(mapper ->
return salarySendRangeObjBiz.applyMapper(mapper ->
mapper.listBySalarySendIdAndRangeIds(salarySendId, rangeIds, DEFAULT_TENANT_KEY)
);
}
@Override
public void batchInsert(List<SalarySendRangeObj> listObj) {
if (listObj == null) {
return;
}
List<List<SalarySendRangeObj>> p = Lists.partition(listObj, 150);
p.forEach(list-> runSalarySendRangeObjMapper(m->m.batchInsert(list)));
}
@Override
public void deleteBySalarySendIds(Collection<Long> salarySendIds) {
runSalarySendRangeObjMapper(mapper->mapper.deleteBySalarySendIds(salarySendIds));
salarySendRangeObjBiz.runMapper(mapper -> mapper.deleteBySalarySendIds(salarySendIds));
}
@Override
public void deleteByRangeIds(Collection<Long> rangeIds, Long currentEmployeeId) {
public void replaceAllByRangeIds(Long rangeIds, List<SalarySendRangeObj> rangeObjs) {
for (SalarySendRangeObj rangeObj : rangeObjs) {
SalarySendRangeTargetTypeEnum targetEnum = SalarySendRangeTargetTypeEnum.fromValue(rangeObj.getTargetType());
if (targetEnum == null) {
throw new SalaryRunTimeException("传入范围类型非法");
}
if (rangeObj.getTargetType().equals(SalarySendRangeTargetTypeEnum.ALL.getValue())) {
rangeObj.setTargetId(0L);
}
}
salarySendRangeObjBiz.replaceAllByRangeId(rangeIds, rangeObjs);
}
@Override
public List<Long> getSendInfoIdsBySalarySendIdAndRangeIds(Long salarySendId, List<Long> rangeIds, Long employeeId) {
return null;
public List<Long> getSendInfoIdsBySalarySendIdAndRangeIds(Long salarySendId, List<Long> rangeIds) {
// 获取范围
List<SalarySendRangeObj> rangeList =
salarySendRangeObjBiz.applyMapper(mapper -> mapper.listBySalarySendIdAndRangeIds(salarySendId, rangeIds, DEFAULT_TENANT_KEY));
// 初始化范围操作类
SalarySendRangeBO rangeBO = new SalarySendRangeBO();
for (SalarySendRangeObj rangeObj : rangeList) {
rangeBO.putNew(rangeObj);
}
// 获取当前发放单人员详情
List<SalarySendInfoListDTO> sendInfoList = getSalarySendService().salarySendInfoList(salarySendId);
// 获取全部人员id
List<Long> employeeIds = sendInfoList.stream().map(SalarySendInfoListDTO::getEmployeeId)
.distinct().collect(Collectors.toList());
// 查找人员的多维度关联id
List<SalarySendUserInfoDTO> userInfos =
salarySendRangeObjBiz.getSalarySendUserInfoDTOs(employeeIds);
// 筛选在范围中的人员id
Set<Long> empIds = userInfos.stream()
.filter(rangeBO::judgeInRange)
.map(SalarySendUserInfoDTO::getResourceId)
.distinct().collect(Collectors.toSet());
// 返回发放详情的id
return sendInfoList.stream().filter(s -> empIds.contains(s.getEmployeeId()))
.map(SalarySendInfoListDTO::getId)
.collect(Collectors.toList());
}
@Override
public void deleteBySalarySendRangeIds(List<Long> salarySendRangeIds) {
salarySendRangeObjBiz.runMapper(mapper -> mapper.deleteByRangeIds(salarySendRangeIds, DEFAULT_TENANT_KEY));
}
}

View File

@ -1,34 +1,172 @@
package com.engine.salary.service.impl;
package com.engine.salary.service.impl;
import cn.hutool.core.util.StrUtil;
import com.engine.common.util.ServiceUtil;
import com.engine.core.impl.Service;
import com.engine.salary.biz.EmployBiz;
import com.engine.salary.entity.datacollection.DataCollectionEmployee;
import com.engine.salary.entity.hrm.DeptInfo;
import com.engine.salary.entity.hrm.PositionInfo;
import com.engine.salary.entity.hrm.SubCompanyInfo;
import com.engine.salary.entity.salaryBill.dto.SalarySendRangeListDTO;
import com.engine.salary.entity.salaryBill.dto.SalarySendRangeObjDTO;
import com.engine.salary.entity.salaryBill.param.SalarySendRangeQueryParam;
import com.engine.salary.entity.salaryBill.param.SalarySendRangeSaveParam;
import com.engine.salary.entity.salaryBill.po.SalarySendRangeObj;
import com.engine.salary.entity.salaryBill.po.SalarySendRangePO;
import com.engine.salary.entity.taxagent.po.TaxAgentPO;
import com.engine.salary.enums.salarysend.SalarySendRangeTargetTypeEnum;
import com.engine.salary.enums.salarysend.SalarySendRangeTypeEnum;
import com.engine.salary.exception.SalaryRunTimeException;
import com.engine.salary.mapper.salarybill.SalarySendRangeMapper;
import com.engine.salary.service.SalaryEmployeeService;
import com.engine.salary.service.SalarySendRangeObjService;
import com.engine.salary.service.SalarySendRangeService;
import com.engine.salary.service.TaxAgentService;
import com.engine.salary.util.db.MapperProxyFactory;
import com.engine.salary.util.page.PageInfo;
import com.engine.salary.util.page.SalaryPageUtil;
import org.apache.ibatis.session.SqlSession;
import weaver.conn.mybatis.MyBatisFactory;
import java.util.Collection;
import java.util.*;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.stream.Collectors;
import static com.engine.salary.constant.SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY;
public class SalarySendRangeServiceImpl extends Service implements SalarySendRangeService {
@Override
public void save() {
private SalaryEmployeeService getSalaryEmployeeService() {
return ServiceUtil.getService(SalaryEmployeeServiceImpl.class, user);
}
private TaxAgentService getTaxAgentService() {
return ServiceUtil.getService(TaxAgentServiceImpl.class, user);
}
private EmployBiz employBiz = new EmployBiz();
private <R> R applyMapper(Function<SalarySendRangeMapper, R> mapper) {
try (SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession()) {
final SalarySendRangeMapper salarySendRangeMapper = sqlSession.getMapper(SalarySendRangeMapper.class);
R apply = mapper.apply(salarySendRangeMapper);
sqlSession.commit();
return apply;
}
}
private void runMapper(Consumer<SalarySendRangeMapper> mapper) {
try (SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession()) {
final SalarySendRangeMapper salarySendRangeMapper = sqlSession.getMapper(SalarySendRangeMapper.class);
mapper.accept(salarySendRangeMapper);
sqlSession.commit();
}
}
private SalarySendRangeObjService getSalarySendRangeObjService() {
return ServiceUtil.getService(SalarySendRangeObjServiceImpl.class, user);
}
@Override
public void listPage() {
public void save(SalarySendRangeSaveParam param) {
SalarySendRangeSaveParam.checkParam(param, (long) user.getUID(), DEFAULT_TENANT_KEY);
SalarySendRangePO salarySendRangePO = param.toSalarySendRangePO(user);
// 如果传入id 则做查询后更新
if (salarySendRangePO.getId() != null) {
SalarySendRangePO oldInfo = applyMapper(mapper -> mapper.selectByPrimaryKey(salarySendRangePO.getId()));
if (oldInfo == null) {
throw new SalaryRunTimeException("传入发放范围不存在");
}
runMapper(mapper -> mapper.updateByPrimaryKeySelective(salarySendRangePO));
} else {
runMapper(mapper -> mapper.insertSelective(salarySendRangePO));
}
param.setSalarySendRangeId(salarySendRangePO.getId());
List<SalarySendRangeObj> rangeObjs = param.toSalarySendRangeObj(user);
getSalarySendRangeObjService().replaceAllByRangeIds(salarySendRangePO.getId(), rangeObjs);
}
@Override
public void listDTO() {
}
@Override
public void listByIds() {
}
@Override
public void getById(Long id) {
public PageInfo<SalarySendRangeListDTO> listPage(SalarySendRangeQueryParam queryParam) {
if (StrUtil.isEmpty(queryParam.getTargetName())) {
SalaryPageUtil.start(queryParam.getCurrent(), queryParam.getPageSize());
}
SalarySendRangeMapper mapper = MapperProxyFactory.getProxy(SalarySendRangeMapper.class);
List<SalarySendRangeListDTO> listDTOs = mapper.selectByParam(queryParam);
PageInfo<SalarySendRangeListDTO> page = new PageInfo<>(listDTOs, SalarySendRangeListDTO.class);
listDTOs = listDTOs.stream().map(s -> {
List<SalarySendRangeObj> rangeObjs = getSalarySendRangeObjService().listBySalarySendIdAndRangeIds(queryParam.getSalarySendId(),
Collections.singletonList(s.getId()));
Map<Integer, List<SalarySendRangeObjDTO>> groupedMap = rangeObjs.stream()
.map(rangeObj -> {
SalarySendRangeTargetTypeEnum typeEnum = SalarySendRangeTargetTypeEnum.fromValue(rangeObj.getTargetType());
if (typeEnum == null) {
return null;
}
String targetName = null;
switch (typeEnum) {
case USER:
DataCollectionEmployee employee =
getSalaryEmployeeService().getEmployeeById(rangeObj.getTargetId());
targetName = Optional.ofNullable(employee)
.map(DataCollectionEmployee::getUsername)
.orElse(null);
break;
case DEPT:
targetName = employBiz.getDeptInfoList(Collections.singletonList(rangeObj.getTargetId()))
.stream().findFirst()
.map(DeptInfo::getName).orElse(null);
break;
case SUB_COMPANY:
targetName = employBiz.getSubCompanyInfoList(Collections.singletonList(rangeObj.getTargetId()))
.stream().findFirst()
.map(SubCompanyInfo::getName).orElse(null);
break;
case POSITION:
targetName = employBiz.listPositionInfo(Collections.singletonList(rangeObj.getTargetId()))
.stream().findFirst()
.map(PositionInfo::getName).orElse(null);
break;
case TAX_AGENT:
targetName = Optional.ofNullable(getTaxAgentService().getById(rangeObj.getTargetId()))
.map(TaxAgentPO::getName).orElse(null);
break;
}
return SalarySendRangeObjDTO.builder()
.targetType(rangeObj.getTargetType())
.targetTypeName(typeEnum.getDefaultLabel())
.targetName(targetName)
.rangeType(rangeObj.getRangeType())
.targetId(rangeObj.getTargetId())
.build();
}).filter(Objects::nonNull)
.collect(Collectors.groupingBy(SalarySendRangeObjDTO::getRangeType));
//如果有查询则做筛选
if (StrUtil.isNotEmpty(queryParam.getTargetName())) {
boolean nameLike = false;
for (List<SalarySendRangeObjDTO> value : groupedMap.values()) {
nameLike |= value.stream()
.anyMatch(item -> Optional.ofNullable(item.getTargetName()).orElse("")
.contains(queryParam.getTargetName()));
}
if (!nameLike) {
return null;
}
}
s.setIncludeObj(groupedMap.getOrDefault(SalarySendRangeTypeEnum.INCLUDE_OBJ.getValue(), Collections.emptyList()));
s.setExcludeObj(groupedMap.getOrDefault(SalarySendRangeTypeEnum.EXCLUDE_OBJ.getValue(), Collections.emptyList()));
return s;
}).filter(Objects::nonNull)
.collect(Collectors.toList());
if (StrUtil.isNotEmpty(queryParam.getTargetName())) {
page.setTotal(listDTOs.size());
List<SalarySendRangeListDTO> list = SalaryPageUtil.subList(queryParam.getCurrent(), queryParam.getPageSize(), listDTOs);
page.setList(list);
}
return page;
}
@Override
@ -37,7 +175,23 @@ public class SalarySendRangeServiceImpl extends Service implements SalarySendRan
}
@Override
public void getSendInfoIdsBySendId(Collection<Long> sendIds) {
public void deleteByIds(List<Long> sendRangeIds) {
runMapper(mapper-> {
for (Long sendRangeId : sendRangeIds) {
mapper.deleteByPrimaryKey(sendRangeId);
}
});
getSalarySendRangeObjService().deleteBySalarySendRangeIds(sendRangeIds);
}
@Override
public List<Long> getSendInfoIdsBySendId(Long sendId, List<Long> sendRangeIds) {
List<Long> rangeIdList =
applyMapper(mapper -> mapper.selectIdsBySendIdAndGrantType(sendId, null));
rangeIdList = rangeIdList.stream()
.filter(sendRangeIds::contains)
.collect(Collectors.toList());
return getSalarySendRangeObjService().getSendInfoIdsBySalarySendIdAndRangeIds(sendId, rangeIdList);
}
}

View File

@ -76,6 +76,10 @@ public class SalarySendServiceImpl extends Service implements SalarySendService
private SalarySendBiz mapper = new SalarySendBiz();
private SalarySendInfoBiz salarySendInfoMapper = new SalarySendInfoBiz();
private SalarySendRangeService getSalarySendRangeService(User user) {
return ServiceUtil.getService(SalarySendRangeServiceImpl.class, user);
}
private SalaryTemplateService getSalaryTemplateService(User user) {
return ServiceUtil.getService(SalaryTemplateServiceImpl.class, user);
@ -453,6 +457,11 @@ public class SalarySendServiceImpl extends Service implements SalarySendService
return result;
}
@Override
public List<SalarySendInfoListDTO> salarySendInfoList(Long salarySendId) {
return salarySendInfoMapper.list(SalarySendInfoQueryParam.builder().salarySendId(salarySendId).build());
}
@Override
public PageInfo<SalaryMySalaryBillListDTO> mySalaryBillListPage(SalaryBillQueryParam queryParam) {
List<SalaryMySalaryBillListDTO> list = salarySendInfoMapper.mySalaryBillList(queryParam);
@ -659,6 +668,12 @@ public class SalarySendServiceImpl extends Service implements SalarySendService
Long salarySendId = param.getSalarySendId();
Collection<Long> ids = param.getIds();
if (param.getSalarySendRangeIds() != null) {
//如果传了范围id则使用范围id发放
ids = getSalarySendRangeService(user)
.getSendInfoIdsBySendId(salarySendId, param.getSalarySendRangeIds());
}
SalarySendPO salarySend = mapper.getById(salarySendId);
if (salarySend == null) {
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100512, "工资单发放不存在"));
@ -916,6 +931,12 @@ public class SalarySendServiceImpl extends Service implements SalarySendService
Long salarySendId = param.getSalarySendId();
Collection<Long> ids = param.getIds();
if (param.getSalarySendRangeIds() != null) {
//如果传了范围id则使用范围id撤回
ids = getSalarySendRangeService(user)
.getSendInfoIdsBySendId(salarySendId, param.getSalarySendRangeIds());
}
SalarySendPO salarySend = mapper.getById(salarySendId);
if (salarySend == null) {
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100512, "工资单发放不存在"));

View File

@ -0,0 +1,58 @@
package com.engine.salary.web;
import com.engine.common.util.ServiceUtil;
import com.engine.salary.entity.salaryBill.dto.SalarySendRangeListDTO;
import com.engine.salary.entity.salaryBill.param.SalarySendRangeQueryParam;
import com.engine.salary.entity.salaryBill.param.SalarySendRangeSaveParam;
import com.engine.salary.util.ResponseResult;
import com.engine.salary.util.page.PageInfo;
import com.engine.salary.wrapper.SalarySendRangeWrapper;
import io.swagger.v3.oas.annotations.parameters.RequestBody;
import weaver.hrm.HrmUserVarify;
import weaver.hrm.User;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import java.util.Collection;
/**
* @Description: 工资单范围
*/
public class SalarySendRangeController {
private SalarySendRangeWrapper getSalarySendRangeWrapper(User user) {
return ServiceUtil.getService(SalarySendRangeWrapper.class, user);
}
@POST
@Path("/save")
@Produces(MediaType.APPLICATION_JSON)
public String save(@Context HttpServletRequest request, @Context HttpServletResponse response,
@RequestBody SalarySendRangeSaveParam saveParam) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<SalarySendRangeSaveParam, Void>(user).run(getSalarySendRangeWrapper(user)::save, saveParam);
}
@POST
@Path("/deleteByIds")
@Produces(MediaType.APPLICATION_JSON)
public String deleteByIds(@Context HttpServletRequest request, @Context HttpServletResponse response,
@RequestBody Collection<Long> ids) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<Collection<Long>, Void>(user).run(getSalarySendRangeWrapper(user)::deleteByIds, ids);
}
@POST
@Path("/listPage")
@Produces(MediaType.APPLICATION_JSON)
public String save(@Context HttpServletRequest request, @Context HttpServletResponse response,
@RequestBody SalarySendRangeQueryParam queryParam) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<SalarySendRangeQueryParam, PageInfo<SalarySendRangeListDTO>>(user).run(getSalarySendRangeWrapper(user)::listPage, queryParam);
}
}

View File

@ -0,0 +1,36 @@
package com.engine.salary.wrapper;
import com.engine.common.util.ServiceUtil;
import com.engine.core.impl.Service;
import com.engine.salary.entity.salaryBill.dto.SalarySendRangeListDTO;
import com.engine.salary.entity.salaryBill.param.SalarySendRangeQueryParam;
import com.engine.salary.entity.salaryBill.param.SalarySendRangeSaveParam;
import com.engine.salary.service.SalarySendRangeService;
import com.engine.salary.service.impl.SalarySendRangeServiceImpl;
import com.engine.salary.util.page.PageInfo;
import weaver.hrm.User;
import java.util.ArrayList;
import java.util.Collection;
public class SalarySendRangeWrapper extends Service {
private SalarySystemConfigWrapper getSalarySysConfService(User user) {
return ServiceUtil.getService(SalarySystemConfigWrapper.class, user);
}
private SalarySendRangeService getSalarySendRangeService(User user) {
return ServiceUtil.getService(SalarySendRangeServiceImpl.class, user);
}
public PageInfo<SalarySendRangeListDTO> listPage(SalarySendRangeQueryParam queryParam) {
return getSalarySendRangeService(user).listPage(queryParam);
}
public void save(SalarySendRangeSaveParam saveParam) {
getSalarySendRangeService(user).save(saveParam);
}
public void deleteByIds(Collection<Long> ids) {
getSalarySendRangeService(user).deleteByIds(new ArrayList<>(ids));
}
}