From fc81955b1578369cd335b1019e52bb200c16b1aa Mon Sep 17 00:00:00 2001 From: fcli Date: Fri, 25 Nov 2022 10:53:23 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=85=A8=E9=83=A8=E8=8C=83=E5=9B=B4?= =?UTF-8?q?=E9=83=A8=E5=88=86=E5=8F=91=E6=94=BE=E6=92=A4=E5=9B=9E=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/web/SalarySendRangeController.java | 8 + .../salary/biz/SalarySendRangeObjBiz.java | 71 +++++++ .../salaryBill/bo/SalarySendRangeBO.java | 186 +++++++++++++++++ .../dto/SalarySendRangeListDTO.java | 36 ++++ .../salaryBill/dto/SalarySendRangeObjDTO.java | 44 ++++ .../salaryBill/dto/SalarySendUserInfoDTO.java | 38 ++++ .../param/SalarySendGrantParam.java | 6 + .../param/SalarySendRangeQueryParam.java | 30 +++ .../param/SalarySendRangeSaveParam.java | 122 +++++++++++ .../param/SalarySendWithdrawParam.java | 3 + .../salaryBill/po/SalarySendRangeObj.java | 7 +- .../salaryBill/po/SalarySendRangePO.java | 5 +- .../salarysend/SalarySendGrantTypeEnum.java | 50 +++++ .../salarysend/SalarySendOperateTypeEnum.java | 32 --- .../SalarySendRangeTargetTypeEnum.java | 19 +- .../salarysend/SalarySendRangeTypeEnum.java | 27 ++- .../salarybill/SalarySendRangeMapper.java | 16 +- .../salarybill/SalarySendRangeMapper.xml | 152 +++++++++++++- .../salarybill/SalarySendRangeObjMapper.java | 8 +- .../salarybill/SalarySendRangeObjMapper.xml | 32 ++- .../service/SalarySendRangeObjService.java | 23 +-- .../service/SalarySendRangeService.java | 25 +-- .../salary/service/SalarySendService.java | 1 + .../impl/SalarySendRangeObjServiceImpl.java | 92 ++++++--- .../impl/SalarySendRangeServiceImpl.java | 190 ++++++++++++++++-- .../service/impl/SalarySendServiceImpl.java | 21 ++ .../salary/web/SalarySendRangeController.java | 58 ++++++ .../wrapper/SalarySendRangeWrapper.java | 36 ++++ 28 files changed, 1208 insertions(+), 130 deletions(-) create mode 100644 src/com/api/salary/web/SalarySendRangeController.java create mode 100644 src/com/engine/salary/biz/SalarySendRangeObjBiz.java create mode 100644 src/com/engine/salary/entity/salaryBill/bo/SalarySendRangeBO.java create mode 100644 src/com/engine/salary/entity/salaryBill/dto/SalarySendRangeListDTO.java create mode 100644 src/com/engine/salary/entity/salaryBill/dto/SalarySendRangeObjDTO.java create mode 100644 src/com/engine/salary/entity/salaryBill/dto/SalarySendUserInfoDTO.java create mode 100644 src/com/engine/salary/entity/salaryBill/param/SalarySendRangeQueryParam.java create mode 100644 src/com/engine/salary/entity/salaryBill/param/SalarySendRangeSaveParam.java create mode 100644 src/com/engine/salary/enums/salarysend/SalarySendGrantTypeEnum.java delete mode 100644 src/com/engine/salary/enums/salarysend/SalarySendOperateTypeEnum.java create mode 100644 src/com/engine/salary/web/SalarySendRangeController.java create mode 100644 src/com/engine/salary/wrapper/SalarySendRangeWrapper.java diff --git a/src/com/api/salary/web/SalarySendRangeController.java b/src/com/api/salary/web/SalarySendRangeController.java new file mode 100644 index 000000000..94d817da2 --- /dev/null +++ b/src/com/api/salary/web/SalarySendRangeController.java @@ -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{ + +} diff --git a/src/com/engine/salary/biz/SalarySendRangeObjBiz.java b/src/com/engine/salary/biz/SalarySendRangeObjBiz.java new file mode 100644 index 000000000..05ccaaadb --- /dev/null +++ b/src/com/engine/salary/biz/SalarySendRangeObjBiz.java @@ -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 applyMapper(Function 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 mapper) { + try (SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession()) { + final SalarySendRangeObjMapper salarySendRangeObjMapper = sqlSession.getMapper(SalarySendRangeObjMapper.class); + mapper.accept(salarySendRangeObjMapper); + sqlSession.commit(); + } + } + + public List getSalarySendUserInfoDTOs(List employees) { + List userDTOs = applyMapper(mapper -> mapper.getUserInfoByEmployeeIds(employees)); + Map userMap = userDTOs.stream() + .collect(Collectors.toMap(SalarySendUserInfoDTO::getResourceId, Function.identity())); + + List employeeIds = userDTOs.stream() + .map(SalarySendUserInfoDTO::getResourceId) + .collect(Collectors.toList()); + Collection 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 rangeObjs) { + runMapper(mapper -> { + mapper.deleteByRangeIds(Collections.singletonList(rangeId), DEFAULT_TENANT_KEY); + mapper.batchInsert(rangeObjs); + }); + } +} diff --git a/src/com/engine/salary/entity/salaryBill/bo/SalarySendRangeBO.java b/src/com/engine/salary/entity/salaryBill/bo/SalarySendRangeBO.java new file mode 100644 index 000000000..cc3f5831b --- /dev/null +++ b/src/com/engine/salary/entity/salaryBill/bo/SalarySendRangeBO.java @@ -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> 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 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 getTargetIds(SalarySendRangeTargetTypeEnum targetType, SalarySendRangeTypeEnum rangeType) { + Map 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 includeTargetIds = getTargetIds(targetType, SalarySendRangeTypeEnum.INCLUDE_OBJ); + Set 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 targetIds) { + if (CollectionUtils.isEmpty(targetIds)) { + return NOT_IN; + } + //如果所有人范围已经设置 + if (isExcludeAll) { + return EXCLUDED; + } + if (isIncludeAll) { + return INCLUDED; + } + Set includeTargetIds = getTargetIds(targetType, SalarySendRangeTypeEnum.INCLUDE_OBJ); + Set 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 targetIds; + } +} diff --git a/src/com/engine/salary/entity/salaryBill/dto/SalarySendRangeListDTO.java b/src/com/engine/salary/entity/salaryBill/dto/SalarySendRangeListDTO.java new file mode 100644 index 000000000..4a407645b --- /dev/null +++ b/src/com/engine/salary/entity/salaryBill/dto/SalarySendRangeListDTO.java @@ -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 includeObj; + + @SalaryTableColumn(text = "对象中排除", width = "50%", column = "excludeObj") + @TableTitle(title = "对象中排除", key = "excludeObj", dataIndex = "excludeObj") + private List excludeObj; +} diff --git a/src/com/engine/salary/entity/salaryBill/dto/SalarySendRangeObjDTO.java b/src/com/engine/salary/entity/salaryBill/dto/SalarySendRangeObjDTO.java new file mode 100644 index 000000000..e6a85c9ed --- /dev/null +++ b/src/com/engine/salary/entity/salaryBill/dto/SalarySendRangeObjDTO.java @@ -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; +} \ No newline at end of file diff --git a/src/com/engine/salary/entity/salaryBill/dto/SalarySendUserInfoDTO.java b/src/com/engine/salary/entity/salaryBill/dto/SalarySendUserInfoDTO.java new file mode 100644 index 000000000..0b2648af0 --- /dev/null +++ b/src/com/engine/salary/entity/salaryBill/dto/SalarySendUserInfoDTO.java @@ -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 taxAgentIds; +} diff --git a/src/com/engine/salary/entity/salaryBill/param/SalarySendGrantParam.java b/src/com/engine/salary/entity/salaryBill/param/SalarySendGrantParam.java index a61f1eef4..12268806f 100644 --- a/src/com/engine/salary/entity/salaryBill/param/SalarySendGrantParam.java +++ b/src/com/engine/salary/entity/salaryBill/param/SalarySendGrantParam.java @@ -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 salarySendRangeIds; + public static String checkParam(SalarySendGrantParam param, Long employeeId, String tenantKey) { if (param.getSalarySendId() == null) { throw new SalaryRunTimeException("工资单发放Id必传"); diff --git a/src/com/engine/salary/entity/salaryBill/param/SalarySendRangeQueryParam.java b/src/com/engine/salary/entity/salaryBill/param/SalarySendRangeQueryParam.java new file mode 100644 index 000000000..65a4bb257 --- /dev/null +++ b/src/com/engine/salary/entity/salaryBill/param/SalarySendRangeQueryParam.java @@ -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; +} diff --git a/src/com/engine/salary/entity/salaryBill/param/SalarySendRangeSaveParam.java b/src/com/engine/salary/entity/salaryBill/param/SalarySendRangeSaveParam.java new file mode 100644 index 000000000..7b4edd800 --- /dev/null +++ b/src/com/engine/salary/entity/salaryBill/param/SalarySendRangeSaveParam.java @@ -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 includeObjParams; + + + private List 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 toSalarySendRangeObj(User user) { + List includeObjs = includeObjParams.stream() + .map(obj -> mapObj(user, obj)) + .map(obj->obj.setRangeType(SalarySendRangeTypeEnum.INCLUDE_OBJ.getValue())) + .collect(Collectors.toList()); + List excludeObjs = excludeObjParams.stream() + .map(obj -> mapObj(user, obj)) + .map(obj -> obj.setRangeType(SalarySendRangeTypeEnum.EXCLUDE_OBJ.getValue())) + .collect(Collectors.toList()); + List 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(); + } +} \ No newline at end of file diff --git a/src/com/engine/salary/entity/salaryBill/param/SalarySendWithdrawParam.java b/src/com/engine/salary/entity/salaryBill/param/SalarySendWithdrawParam.java index 6e3573beb..df4808dbc 100644 --- a/src/com/engine/salary/entity/salaryBill/param/SalarySendWithdrawParam.java +++ b/src/com/engine/salary/entity/salaryBill/param/SalarySendWithdrawParam.java @@ -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 salarySendRangeIds; + public static String checkParam(SalarySendWithdrawParam param, Long employeeId, String tenantKey) { if (param.getSalarySendId() == null) { throw new SalaryRunTimeException("工资单发放Id必传"); diff --git a/src/com/engine/salary/entity/salaryBill/po/SalarySendRangeObj.java b/src/com/engine/salary/entity/salaryBill/po/SalarySendRangeObj.java index b29818b32..f3f682063 100644 --- a/src/com/engine/salary/entity/salaryBill/po/SalarySendRangeObj.java +++ b/src/com/engine/salary/entity/salaryBill/po/SalarySendRangeObj.java @@ -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 diff --git a/src/com/engine/salary/entity/salaryBill/po/SalarySendRangePO.java b/src/com/engine/salary/entity/salaryBill/po/SalarySendRangePO.java index f2e0675f5..0831b153b 100644 --- a/src/com/engine/salary/entity/salaryBill/po/SalarySendRangePO.java +++ b/src/com/engine/salary/entity/salaryBill/po/SalarySendRangePO.java @@ -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; + /** * 工资单发放范围表 */ diff --git a/src/com/engine/salary/enums/salarysend/SalarySendGrantTypeEnum.java b/src/com/engine/salary/enums/salarysend/SalarySendGrantTypeEnum.java new file mode 100644 index 000000000..36d9114c8 --- /dev/null +++ b/src/com/engine/salary/enums/salarysend/SalarySendGrantTypeEnum.java @@ -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; + } +} \ No newline at end of file diff --git a/src/com/engine/salary/enums/salarysend/SalarySendOperateTypeEnum.java b/src/com/engine/salary/enums/salarysend/SalarySendOperateTypeEnum.java deleted file mode 100644 index 30e674b12..000000000 --- a/src/com/engine/salary/enums/salarysend/SalarySendOperateTypeEnum.java +++ /dev/null @@ -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 { - 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 optional = Arrays.stream(SalarySendOperateTypeEnum.values()).filter(r->r.getValue().equals(value)).findFirst(); - return optional.isPresent()? SalaryI18nUtil.getI18nLabel(optional.get().getLabelId(), optional.get().getDefaultLabel()):""; - } -} \ No newline at end of file diff --git a/src/com/engine/salary/enums/salarysend/SalarySendRangeTargetTypeEnum.java b/src/com/engine/salary/enums/salarysend/SalarySendRangeTargetTypeEnum.java index cff60f34d..39f9f76f6 100644 --- a/src/com/engine/salary/enums/salarysend/SalarySendRangeTargetTypeEnum.java +++ b/src/com/engine/salary/enums/salarysend/SalarySendRangeTargetTypeEnum.java @@ -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 { 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; diff --git a/src/com/engine/salary/enums/salarysend/SalarySendRangeTypeEnum.java b/src/com/engine/salary/enums/salarysend/SalarySendRangeTypeEnum.java index 00cf96618..a604013b3 100644 --- a/src/com/engine/salary/enums/salarysend/SalarySendRangeTypeEnum.java +++ b/src/com/engine/salary/enums/salarysend/SalarySendRangeTypeEnum.java @@ -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 { 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 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; + } } diff --git a/src/com/engine/salary/mapper/salarybill/SalarySendRangeMapper.java b/src/com/engine/salary/mapper/salarybill/SalarySendRangeMapper.java index 00a7be206..aee1b22aa 100644 --- a/src/com/engine/salary/mapper/salarybill/SalarySendRangeMapper.java +++ b/src/com/engine/salary/mapper/salarybill/SalarySendRangeMapper.java @@ -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 selectByAll(SalarySendRangePO salarySendRangePO); - List selectAllBySalarySendIdAndGrantType(@Param("salarySendId") Long salarySendId, @Param("grantType") String grantType); + List selectBySendIdAndGrantType(@Param("salarySendId") Long salarySendId, + @Param("grantType") String grantType); + + List selectIdsBySendIdAndGrantType(@Param("salarySendId") Long salarySendId, + @Param("grantType") String grantType); int updateBatchSelective(List list); int batchInsert(@Param("list") List list); + + List selectByParam(@Param("queryParam") SalarySendRangeQueryParam queryParam); + + } \ No newline at end of file diff --git a/src/com/engine/salary/mapper/salarybill/SalarySendRangeMapper.xml b/src/com/engine/salary/mapper/salarybill/SalarySendRangeMapper.xml index cdbc77602..b3b46a54c 100644 --- a/src/com/engine/salary/mapper/salarybill/SalarySendRangeMapper.xml +++ b/src/com/engine/salary/mapper/salarybill/SalarySendRangeMapper.xml @@ -13,6 +13,12 @@ + + + + + + id, salary_send_id, grant_type, creator, create_time, update_time, delete_type, tenant_key @@ -25,11 +31,15 @@ where id = #{id,jdbcType=BIGINT} - - 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 - + + + insert into hrsa_salary_send_range @@ -79,6 +89,64 @@ + + + + select HRSA_S_S_R_ID.currval from dual + + insert into hrsa_salary_send_range + + id, + + salary_send_id, + + + grant_type, + + + creator, + + + create_time, + + + update_time, + + + delete_type, + + + tenant_key, + + + + #{id,jdbcType=BIGINT}, + + #{salarySendId,jdbcType=BIGINT}, + + + #{grantType,jdbcType=VARCHAR}, + + + #{creator,jdbcType=BIGINT}, + + + #{createTime,jdbcType=TIMESTAMP}, + + + #{updateTime,jdbcType=TIMESTAMP}, + + + #{deleteType,jdbcType=INTEGER}, + + + #{tenantKey,jdbcType=VARCHAR}, + + + + + update hrsa_salary_send_range @@ -107,6 +175,8 @@ where id = #{id,jdbcType=BIGINT} + + - select from hrsa_salary_send_range - where salary_send_id=#{salarySendId,jdbcType=BIGINT} and grant_type=#{grantType,jdbcType=VARCHAR} + + delete_type = 0 + and salary_send_id=#{salarySendId,jdbcType=BIGINT} + + and grant_type=#{grantType,jdbcType=VARCHAR} + + + + update hrsa_salary_send_range @@ -205,6 +284,8 @@ #{item.id,jdbcType=BIGINT} + + insert into hrsa_salary_send_range @@ -217,4 +298,61 @@ #{item.tenantKey,jdbcType=VARCHAR}) + + + 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}) + + + + + insert into hrsa_salary_send_range + (salary_send_id, grant_type, creator, create_time, update_time, delete_type, tenant_key + ) + select + + #{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} + + from dual + + + + + + + \ No newline at end of file diff --git a/src/com/engine/salary/mapper/salarybill/SalarySendRangeObjMapper.java b/src/com/engine/salary/mapper/salarybill/SalarySendRangeObjMapper.java index 4d4836eb6..ad98471c9 100644 --- a/src/com/engine/salary/mapper/salarybill/SalarySendRangeObjMapper.java +++ b/src/com/engine/salary/mapper/salarybill/SalarySendRangeObjMapper.java @@ -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 list); + void deleteByRangeIds(@Param("salarySendRangeIds") List salarySendRangeIds, + @Param("tenantKey") String tenantKey); + int batchInsert(@Param("list") List list); int deleteBySalarySendIds(@Param("salarySendIds") Collection salarySendIds); - + List getUserInfoByEmployeeIds(@Param("employeeIds") List employeeIds); } \ No newline at end of file diff --git a/src/com/engine/salary/mapper/salarybill/SalarySendRangeObjMapper.xml b/src/com/engine/salary/mapper/salarybill/SalarySendRangeObjMapper.xml index 46e6cb0b9..fd10b04c0 100644 --- a/src/com/engine/salary/mapper/salarybill/SalarySendRangeObjMapper.xml +++ b/src/com/engine/salary/mapper/salarybill/SalarySendRangeObjMapper.xml @@ -293,7 +293,7 @@ - + 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 hrsa_salary_send_range_obj + set delete_type = 1 + where delete_type = 0 + and salary_send_range_id in ( + + #{salarySendId} + + ) + + + + + + + + + \ No newline at end of file diff --git a/src/com/engine/salary/service/SalarySendRangeObjService.java b/src/com/engine/salary/service/SalarySendRangeObjService.java index 4f623ee32..dd3d5355c 100644 --- a/src/com/engine/salary/service/SalarySendRangeObjService.java +++ b/src/com/engine/salary/service/SalarySendRangeObjService.java @@ -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 listBySalarySendIdAndRangeIds(Long salarySendId, List rangeIds); - /** - * 保存筛选范围对象 - * - * @param listObj - */ - void batchInsert(List listObj); - /** * 根据工资饭发放id删除 * @@ -34,22 +27,16 @@ public interface SalarySendRangeObjService { */ void deleteBySalarySendIds(Collection salarySendIds); - /** - * 根据范围id删除 - * - * @param rangeIds - * @param currentEmployeeId - * @param currentTenantKey - */ - void deleteByRangeIds(Collection rangeIds, Long currentEmployeeId); + void replaceAllByRangeIds(Long rangeIds, List rangeObjs); /** * 根据发放id和范围id获取发放信息id * * @param salarySendId * @param rangeIds - * @param employeeId * @return */ - List getSendInfoIdsBySalarySendIdAndRangeIds(Long salarySendId, List rangeIds, Long employeeId); + List getSendInfoIdsBySalarySendIdAndRangeIds(Long salarySendId, List rangeIds); + + void deleteBySalarySendRangeIds(List salarySendRangeIds); } \ No newline at end of file diff --git a/src/com/engine/salary/service/SalarySendRangeService.java b/src/com/engine/salary/service/SalarySendRangeService.java index 5f5ba97a5..e3d82f4c0 100644 --- a/src/com/engine/salary/service/SalarySendRangeService.java +++ b/src/com/engine/salary/service/SalarySendRangeService.java @@ -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 listPage(SalarySendRangeQueryParam queryParam); void deleteBySalarySendIds(Collection sendIds); - void getSendInfoIdsBySendId(Collection sendIds); + void deleteByIds(List sendRangeIds); + + List getSendInfoIdsBySendId(Long sendId, List sendRangeIds); } diff --git a/src/com/engine/salary/service/SalarySendService.java b/src/com/engine/salary/service/SalarySendService.java index c6f0b89cd..5f8184184 100644 --- a/src/com/engine/salary/service/SalarySendService.java +++ b/src/com/engine/salary/service/SalarySendService.java @@ -84,6 +84,7 @@ public interface SalarySendService { */ PageInfo salarySendInfoListPage(SalarySendInfoQueryParam queryParam); + List salarySendInfoList(Long salarySendId); /** * 我的工资单列表详情 * diff --git a/src/com/engine/salary/service/impl/SalarySendRangeObjServiceImpl.java b/src/com/engine/salary/service/impl/SalarySendRangeObjServiceImpl.java index 9b71f5e3b..38da21b98 100644 --- a/src/com/engine/salary/service/impl/SalarySendRangeObjServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySendRangeObjServiceImpl.java @@ -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 runSalarySendRangeObjMapper(Function 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 listBySalarySendIdAndRangeIds(Long salarySendId, List 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 listObj) { - if (listObj == null) { - return; - } - List> p = Lists.partition(listObj, 150); - p.forEach(list-> runSalarySendRangeObjMapper(m->m.batchInsert(list))); - } - @Override public void deleteBySalarySendIds(Collection salarySendIds) { - runSalarySendRangeObjMapper(mapper->mapper.deleteBySalarySendIds(salarySendIds)); + salarySendRangeObjBiz.runMapper(mapper -> mapper.deleteBySalarySendIds(salarySendIds)); } @Override - public void deleteByRangeIds(Collection rangeIds, Long currentEmployeeId) { - + public void replaceAllByRangeIds(Long rangeIds, List 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 getSendInfoIdsBySalarySendIdAndRangeIds(Long salarySendId, List rangeIds, Long employeeId) { - return null; + public List getSendInfoIdsBySalarySendIdAndRangeIds(Long salarySendId, List rangeIds) { + // 获取范围 + List rangeList = + salarySendRangeObjBiz.applyMapper(mapper -> mapper.listBySalarySendIdAndRangeIds(salarySendId, rangeIds, DEFAULT_TENANT_KEY)); + + // 初始化范围操作类 + SalarySendRangeBO rangeBO = new SalarySendRangeBO(); + for (SalarySendRangeObj rangeObj : rangeList) { + rangeBO.putNew(rangeObj); + } + // 获取当前发放单人员详情 + List sendInfoList = getSalarySendService().salarySendInfoList(salarySendId); + // 获取全部人员id + List employeeIds = sendInfoList.stream().map(SalarySendInfoListDTO::getEmployeeId) + .distinct().collect(Collectors.toList()); + // 查找人员的多维度关联id + List userInfos = + salarySendRangeObjBiz.getSalarySendUserInfoDTOs(employeeIds); + // 筛选在范围中的人员id + Set 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 salarySendRangeIds) { + salarySendRangeObjBiz.runMapper(mapper -> mapper.deleteByRangeIds(salarySendRangeIds, DEFAULT_TENANT_KEY)); } } diff --git a/src/com/engine/salary/service/impl/SalarySendRangeServiceImpl.java b/src/com/engine/salary/service/impl/SalarySendRangeServiceImpl.java index bfa89b7be..6c7d102e4 100644 --- a/src/com/engine/salary/service/impl/SalarySendRangeServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySendRangeServiceImpl.java @@ -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 applyMapper(Function 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 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 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 listPage(SalarySendRangeQueryParam queryParam) { + if (StrUtil.isEmpty(queryParam.getTargetName())) { + SalaryPageUtil.start(queryParam.getCurrent(), queryParam.getPageSize()); + } + SalarySendRangeMapper mapper = MapperProxyFactory.getProxy(SalarySendRangeMapper.class); + List listDTOs = mapper.selectByParam(queryParam); + PageInfo page = new PageInfo<>(listDTOs, SalarySendRangeListDTO.class); + listDTOs = listDTOs.stream().map(s -> { + List rangeObjs = getSalarySendRangeObjService().listBySalarySendIdAndRangeIds(queryParam.getSalarySendId(), + Collections.singletonList(s.getId())); + Map> 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 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 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 sendIds) { + public void deleteByIds(List sendRangeIds) { + runMapper(mapper-> { + for (Long sendRangeId : sendRangeIds) { + mapper.deleteByPrimaryKey(sendRangeId); + } + }); + getSalarySendRangeObjService().deleteBySalarySendRangeIds(sendRangeIds); + } + @Override + public List getSendInfoIdsBySendId(Long sendId, List sendRangeIds) { + List rangeIdList = + applyMapper(mapper -> mapper.selectIdsBySendIdAndGrantType(sendId, null)); + + rangeIdList = rangeIdList.stream() + .filter(sendRangeIds::contains) + .collect(Collectors.toList()); + return getSalarySendRangeObjService().getSendInfoIdsBySalarySendIdAndRangeIds(sendId, rangeIdList); } } diff --git a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java index e9126f8a6..fcf053795 100644 --- a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java @@ -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 salarySendInfoList(Long salarySendId) { + return salarySendInfoMapper.list(SalarySendInfoQueryParam.builder().salarySendId(salarySendId).build()); + } + @Override public PageInfo mySalaryBillListPage(SalaryBillQueryParam queryParam) { List list = salarySendInfoMapper.mySalaryBillList(queryParam); @@ -659,6 +668,12 @@ public class SalarySendServiceImpl extends Service implements SalarySendService Long salarySendId = param.getSalarySendId(); Collection 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 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, "工资单发放不存在")); diff --git a/src/com/engine/salary/web/SalarySendRangeController.java b/src/com/engine/salary/web/SalarySendRangeController.java new file mode 100644 index 000000000..aaf00002a --- /dev/null +++ b/src/com/engine/salary/web/SalarySendRangeController.java @@ -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(user).run(getSalarySendRangeWrapper(user)::save, saveParam); + } + + @POST + @Path("/deleteByIds") + @Produces(MediaType.APPLICATION_JSON) + public String deleteByIds(@Context HttpServletRequest request, @Context HttpServletResponse response, + @RequestBody Collection ids) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult, 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>(user).run(getSalarySendRangeWrapper(user)::listPage, queryParam); + } + +} diff --git a/src/com/engine/salary/wrapper/SalarySendRangeWrapper.java b/src/com/engine/salary/wrapper/SalarySendRangeWrapper.java new file mode 100644 index 000000000..a4edde955 --- /dev/null +++ b/src/com/engine/salary/wrapper/SalarySendRangeWrapper.java @@ -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 listPage(SalarySendRangeQueryParam queryParam) { + return getSalarySendRangeService(user).listPage(queryParam); + } + + public void save(SalarySendRangeSaveParam saveParam) { + getSalarySendRangeService(user).save(saveParam); + } + + public void deleteByIds(Collection ids) { + getSalarySendRangeService(user).deleteByIds(new ArrayList<>(ids)); + } +}