From 90b2edb96c500920ca1b96e9591d93b4b4632ac6 Mon Sep 17 00:00:00 2001 From: fcli Date: Fri, 11 Nov 2022 13:59:37 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E8=96=AA=E8=B5=84=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=E5=88=86=E6=9D=83=E4=BB=A3=E7=A0=81=E5=90=88=E5=B9=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/salaryitem/bo/SalaryItemBO.java | 2 + .../salaryitem/param/SalaryItemSaveParam.java | 9 ++++ .../entity/salaryitem/po/SalaryItemPO.java | 10 ++++ .../bo/SalarySobItemAggregateBO.java | 32 +++++++------ .../mapper/salaryitem/SalaryItemMapper.xml | 46 ++++++++++--------- .../salary/service/SalaryItemService.java | 3 ++ .../service/impl/SalaryItemServiceImpl.java | 30 +++++++++++- .../impl/SalarySobItemServiceImpl.java | 19 +++++++- .../salary/util/page/SalaryPageUtil.java | 10 ++++ 9 files changed, 122 insertions(+), 39 deletions(-) diff --git a/src/com/engine/salary/entity/salaryitem/bo/SalaryItemBO.java b/src/com/engine/salary/entity/salaryitem/bo/SalaryItemBO.java index 972af6838..e65b6fdb0 100644 --- a/src/com/engine/salary/entity/salaryitem/bo/SalaryItemBO.java +++ b/src/com/engine/salary/entity/salaryitem/bo/SalaryItemBO.java @@ -201,6 +201,8 @@ public class SalaryItemBO { .createTime(now) .updateTime(now) .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) + .sharedType(Optional.ofNullable(saveParam.getSharedType()).orElse(0)) + .taxAgentIds(saveParam.getTaxAgentIds()) .build(); // 开启了"薪资档案引用",取值方式固定为输入 if (Objects.equals(saveParam.getUseInEmployeeSalary(), NumberUtils.INTEGER_ONE)) { diff --git a/src/com/engine/salary/entity/salaryitem/param/SalaryItemSaveParam.java b/src/com/engine/salary/entity/salaryitem/param/SalaryItemSaveParam.java index 4bd71d8f6..4e94963fa 100644 --- a/src/com/engine/salary/entity/salaryitem/param/SalaryItemSaveParam.java +++ b/src/com/engine/salary/entity/salaryitem/param/SalaryItemSaveParam.java @@ -84,4 +84,13 @@ public class SalaryItemSaveParam { //备注 private String description; + /** + * 可见范围:0公共|1私有 + */ + private Integer sharedType; + + /** + * 绑定人员范围,','分隔 + */ + private String taxAgentIds; } diff --git a/src/com/engine/salary/entity/salaryitem/po/SalaryItemPO.java b/src/com/engine/salary/entity/salaryitem/po/SalaryItemPO.java index 39cfb7285..6b5f9f299 100644 --- a/src/com/engine/salary/entity/salaryitem/po/SalaryItemPO.java +++ b/src/com/engine/salary/entity/salaryitem/po/SalaryItemPO.java @@ -134,4 +134,14 @@ public class SalaryItemPO { Collection ids; Collection sysSalaryItemIds; + + /** + * 可见性 + */ + private Integer sharedType; + + /** + * 可见范围 + */ + private String taxAgentIds; } diff --git a/src/com/engine/salary/entity/salarysob/bo/SalarySobItemAggregateBO.java b/src/com/engine/salary/entity/salarysob/bo/SalarySobItemAggregateBO.java index 9d97479e2..500163f12 100644 --- a/src/com/engine/salary/entity/salarysob/bo/SalarySobItemAggregateBO.java +++ b/src/com/engine/salary/entity/salarysob/bo/SalarySobItemAggregateBO.java @@ -101,22 +101,24 @@ public class SalarySobItemAggregateBO { for (int i = 0; i < v.size(); i++) { SalarySobItemPO salarySobItemPO = v.get(i); SalaryItemPO salaryItemPO = salaryItemMap.get(salarySobItemPO.getSalaryItemId()); - items.add(SalarySobItemDTO.builder() - .id(salarySobItemPO.getId()) - .salarySobId(salarySob.getId()) - .salaryItemGroupId(k) - .salaryItemId(salaryItemPO.getId()) - .dateType(salaryItemPO.getDataType()) - .valueType(salaryItemPO.getValueType()) + if (salaryItemPO != null) { + items.add(SalarySobItemDTO.builder() + .id(salarySobItemPO.getId()) + .salarySobId(salarySob.getId()) + .salaryItemGroupId(k) + .salaryItemId(salaryItemPO.getId()) + .dateType(salaryItemPO.getDataType()) + .valueType(salaryItemPO.getValueType()) .name(salaryItemPO.getName()) - .itemHide(salarySobItemPO.getItemHide()) - .formulaId(salarySobItemPO.getFormulaId()) - .formulaContent(formulaMap.getOrDefault(salarySobItemPO.getFormulaId(), "")) - .taxDeclarationColumn(SalaryItemBO.buildTaxDeclarationColumn(salaryItemPO.getCode())) - .sortedIndex(salarySobItemPO.getSortedIndex()) - .canEdit(openFormulaForcedEditing || Objects.equals(salaryItemPO.getCanEdit(), 1)) - .canDelete(salarySobItemPO.getCanDelete() == null || Objects.equals(salarySobItemPO.getCanDelete(), 1)) - .build()); + .itemHide(salarySobItemPO.getItemHide()) + .formulaId(salarySobItemPO.getFormulaId()) + .formulaContent(formulaMap.getOrDefault(salarySobItemPO.getFormulaId(), "")) + .taxDeclarationColumn(SalaryItemBO.buildTaxDeclarationColumn(salaryItemPO.getCode())) + .sortedIndex(salarySobItemPO.getSortedIndex()) + .canEdit(openFormulaForcedEditing || Objects.equals(salaryItemPO.getCanEdit(), 1)) + .canDelete(salarySobItemPO.getCanDelete() == null || Objects.equals(salarySobItemPO.getCanDelete(), 1)) + .build()); + } } if (!salarySobItemGroupDTOMap.containsKey(k)) { itemsWithoutGroup.addAll(items); diff --git a/src/com/engine/salary/mapper/salaryitem/SalaryItemMapper.xml b/src/com/engine/salary/mapper/salaryitem/SalaryItemMapper.xml index a65b35414..3ddbccb0b 100644 --- a/src/com/engine/salary/mapper/salaryitem/SalaryItemMapper.xml +++ b/src/com/engine/salary/mapper/salaryitem/SalaryItemMapper.xml @@ -21,32 +21,34 @@ + + - t - . - id - , t.name - , t.code - , t.system_type - , t.sys_salary_item_id - , t.use_default - , t.use_in_employee_salary - , t.rounding_mode - , t.pattern - , t.value_type - , t.formula_id - , t.description - , t.can_edit - , t.can_delete - , t.creator - , t.delete_type - , t.tenant_key - , t.create_time - , t.update_time - , t.data_type + t.id, + t.name, + t.code, + t.system_type, + t.sys_salary_item_id, + t.use_default, + t.use_in_employee_salary, + t.rounding_mode, + t.pattern, + t.value_type, + t.formula_id, + t.description, + t.can_edit, + t.can_delete, + t.creator, + t.delete_type, + t.tenant_key, + t.create_time, + t.update_time, + t.data_type, + t.shared_type, + t.tax_agent_ids diff --git a/src/com/engine/salary/service/SalaryItemService.java b/src/com/engine/salary/service/SalaryItemService.java index 13034fc0b..4978ba5bb 100644 --- a/src/com/engine/salary/service/SalaryItemService.java +++ b/src/com/engine/salary/service/SalaryItemService.java @@ -8,6 +8,7 @@ import com.engine.salary.util.page.PageInfo; import java.util.Collection; import java.util.List; +import java.util.Set; /** * 薪资项目 @@ -86,6 +87,8 @@ public interface SalaryItemService { PageInfo listPageByParam(SalaryItemSearchParam searchParam); + boolean filterInRange(Set userTaxAgentIds, SalaryItemPO po); + /** * 保存 * diff --git a/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java b/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java index d58d9ac47..94bb71556 100644 --- a/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java @@ -10,19 +10,24 @@ import com.engine.salary.entity.salaryitem.param.SalaryItemSearchParam; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; import com.engine.salary.entity.salaryitem.po.SysSalaryItemPO; import com.engine.salary.entity.salarysob.po.SalarySobItemPO; +import com.engine.salary.entity.taxagent.po.TaxAgentPO; import com.engine.salary.enums.SalarySystemTypeEnum; import com.engine.salary.enums.SalaryValueTypeEnum; +import com.engine.salary.enums.sicategory.SharedTypeEnum; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.service.SalaryItemService; import com.engine.salary.service.SalarySobItemService; +import com.engine.salary.service.TaxAgentService; import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryI18nUtil; import com.engine.salary.util.page.PageInfo; +import com.engine.salary.util.page.SalaryPageUtil; import org.apache.commons.collections4.CollectionUtils; import org.springframework.beans.BeanUtils; import weaver.hrm.User; import java.util.*; +import java.util.stream.Collectors; /** * 薪资项目 @@ -40,6 +45,10 @@ public class SalaryItemServiceImpl extends Service implements SalaryItemService return (SalarySobItemService) ServiceUtil.getService(SalarySobItemServiceImpl.class, user); } + private TaxAgentService getTaxAgentService(User user) { + return (TaxAgentServiceImpl) ServiceUtil.getService(TaxAgentServiceImpl.class, user); + } + private SysSalaryItemBiz sysSalaryItemBiz = new SysSalaryItemBiz(); // @Autowired @@ -93,7 +102,26 @@ public class SalaryItemServiceImpl extends Service implements SalaryItemService @Override public PageInfo listPageByParam(SalaryItemSearchParam searchParam) { - return salaryItemBiz.listPageByParam(searchParam); + Boolean needAuth = getTaxAgentService(user).isNeedAuth((long) user.getUID()); + List salaryItemPOS = salaryItemBiz.listByParam(searchParam); + if (needAuth) { + Set userTaxAgentIds = getTaxAgentService(user).listAllTaxAgents((long) user.getUID()) + .stream().map(TaxAgentPO::getId).collect(Collectors.toSet()); + salaryItemPOS = salaryItemPOS.stream() + .filter(po -> filterInRange(userTaxAgentIds, po) + ).collect(Collectors.toList()); + } + return SalaryPageUtil.buildPage(searchParam.getCurrent(), searchParam.getPageSize(), salaryItemPOS); + } + + @Override + public boolean filterInRange(Set userTaxAgentIds, SalaryItemPO po) { + return null == po.getSharedType() + || SharedTypeEnum.PUBLIC.getValue().equals(po.getSharedType().toString()) + || (po.getTaxAgentIds() != null + && Arrays.stream(po.getTaxAgentIds().split(",")) + .map(Long::valueOf) + .anyMatch(userTaxAgentIds::contains)); } // @Override diff --git a/src/com/engine/salary/service/impl/SalarySobItemServiceImpl.java b/src/com/engine/salary/service/impl/SalarySobItemServiceImpl.java index 913a60c68..db35eaa49 100644 --- a/src/com/engine/salary/service/impl/SalarySobItemServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySobItemServiceImpl.java @@ -12,6 +12,7 @@ import com.engine.salary.entity.salarysob.bo.SalarySobItemAggregateBO; import com.engine.salary.entity.salarysob.dto.SalarySobItemAggregateDTO; import com.engine.salary.entity.salarysob.param.SalarySobItemSaveParam; import com.engine.salary.entity.salarysob.po.*; +import com.engine.salary.entity.taxagent.po.TaxAgentPO; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.service.*; import com.engine.salary.util.SalaryEntityUtil; @@ -45,6 +46,10 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe return (SalarySobEmpFieldService) ServiceUtil.getService(SalarySobEmpFieldServiceImpl.class, user); } + private TaxAgentService getTaxAgentService(User user) { + return (TaxAgentService) ServiceUtil.getService(TaxAgentServiceImpl.class, user); + } + private SalarySobItemGroupService getSalarySobItemGroupService(User user) { return (SalarySobItemGroupService) ServiceUtil.getService(SalarySobItemGroupServiceImpl.class, user); } @@ -141,13 +146,25 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe Set salaryItemIds = SalaryEntityUtil.properties(salarySobItemPOS, SalarySobItemPO::getSalaryItemId); Set backCalcItemIds = SalaryEntityUtil.properties(salarySobBackItems, SalarySobBackItemPO::getSalaryItemId); salaryItemIds.addAll(backCalcItemIds); - List salaryItemPOS = getSalaryItemService(user).listByIds(salaryItemIds); + + Boolean needAuth = getTaxAgentService(user).isNeedAuth((long) user.getUID()); + final Set ids = new HashSet(); + if (needAuth) { + Set collect = getTaxAgentService(user).listAllTaxAgents((long) user.getUID()) + .stream().map(TaxAgentPO::getId).collect(Collectors.toSet()); + ids.addAll(collect); + } + List salaryItemPOS = getSalaryItemService(user).listByIds(salaryItemIds).stream() + .filter(po -> Boolean.FALSE.equals(needAuth) || getSalaryItemService(user).filterInRange(ids, po)) + .collect(Collectors.toList()); + // 转换成聚合dto SalarySobItemAggregateBO salarySobItemAggregateBO = new SalarySobItemAggregateBO(salarySobPO, salarySobEmpFieldPOS, salarySobItemGroupPOS, salarySobItemPOS, expressFormulas, salaryItemPOS, salarySobBackItems); return salarySobItemAggregateBO.convert2AggregateDTO(); } + @Override public SalarySobItemAggregateDTO getAggregateWithItemHideBySalarySobId(Long salarySobId, boolean isBackCalc) { // 查询薪资账套 diff --git a/src/com/engine/salary/util/page/SalaryPageUtil.java b/src/com/engine/salary/util/page/SalaryPageUtil.java index 58bca7ddf..486cb0e64 100644 --- a/src/com/engine/salary/util/page/SalaryPageUtil.java +++ b/src/com/engine/salary/util/page/SalaryPageUtil.java @@ -37,6 +37,16 @@ public class SalaryPageUtil { return pageInfo; } + public static PageInfo buildPage(Integer pageNo, Integer pageSize,List totalCollection) { + PageInfo pageInfo = new PageInfo<>(); + pageInfo.setTotal(totalCollection.size()); + totalCollection = subList(pageNo, pageSize, totalCollection); + pageInfo.setPageNum(pageNo); + pageInfo.setPageSize(pageSize); + pageInfo.setList(totalCollection); + return pageInfo; + } + /** * 内存分页 *