package com.engine.salary.wrapper; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.salary.constant.SalaryDefaultTenantConstant; import com.engine.salary.entity.salaryitem.bo.SysSalaryItemBO; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; import com.engine.salary.entity.salaryitem.po.SysSalaryItemPO; import com.engine.salary.entity.salarysob.bo.SalarySobBO; import com.engine.salary.entity.salarysob.bo.SalarySobBackItemBO; import com.engine.salary.entity.salarysob.dto.SalarySobBasicFormDTO; import com.engine.salary.entity.salarysob.dto.SalarySobListDTO; import com.engine.salary.entity.salarysob.param.*; import com.engine.salary.entity.salarysob.po.SalarySobBackItemPO; import com.engine.salary.entity.salarysob.po.SalarySobDefaultBackItemPO; import com.engine.salary.entity.salarysob.po.SalarySobPO; import com.engine.salary.entity.taxagent.po.TaxAgentPO; import com.engine.salary.enums.salarysob.DeclareReportTypeEnum; import com.engine.salary.enums.auth.AuthFilterTypeEnum; import com.engine.salary.enums.salarysob.IncomeCategoryEnum; import com.engine.salary.enums.sicategory.DeleteTypeEnum; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.service.*; import com.engine.salary.service.auth.AuthService; import com.engine.salary.service.auth.AuthServiceImpl; import com.engine.salary.service.impl.*; import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryI18nUtil; import com.engine.salary.util.SalarySobUtil; import com.engine.salary.util.db.IdGenerator; import com.engine.salary.util.page.PageInfo; import org.apache.commons.collections4.CollectionUtils; import weaver.hrm.User; import java.util.*; import java.util.stream.Collectors; /** * 薪资账套 *

Copyright: Copyright (c) 2022

*

Company: 泛微软件

* * @author qiantao * @version 1.0 **/ public class SalarySobWrapper extends Service { public SalarySobService getSalarySobService(User user) { return ServiceUtil.getService(SalarySobServiceImpl.class, user); } private TaxAgentService getTaxAgentService(User user) { return ServiceUtil.getService(TaxAgentServiceImpl.class, user); } private SalarySobBackItemService getSalarySobBackItemService(User user) { return ServiceUtil.getService(SalarySobBackItemServiceImpl.class, user); } private SalaryItemService getSalaryItemService(User user) { return ServiceUtil.getService(SalaryItemServiceImpl.class, user); } private SysSalaryItemService getSysSalaryItemService(User user) { return ServiceUtil.getService(SysSalaryItemServiceImpl.class, user); } private SalarySobItemService getSalarySobItemService(User user) { return ServiceUtil.getService(SalarySobItemServiceImpl.class, user); } public AuthService getAuthService(User user) { return ServiceUtil.getService(AuthServiceImpl.class, user); } /** * 薪资账套列表 * * @param queryParam 列表查询参数 * @return */ public PageInfo listPage(SalarySobListQueryParam queryParam) { // 处理历史数据,将薪资账套中将关联人员状态转换为List SalarySobUtil.handleEmployeeStatusHistory(); getSalarySobService(user).handleHistory(); // 查询薪资账套 PageInfo page = getSalarySobService(user).listPageByParam(queryParam); // 薪资账套po转换成薪资账套列表dto List taxAgentPOS = getTaxAgentService(user).listAll(); List salarySobListDTOS = page.getList().stream() .map(salarySobPO -> { List taxAgentIds = salarySobPO.getTaxAgentIds(); String taxAgentName = taxAgentPOS.stream().filter(po -> taxAgentIds.contains(po.getId())).map(TaxAgentPO::getName).collect(Collectors.joining(",")); return SalarySobListDTO.builder() .id(salarySobPO.getId()) .name(salarySobPO.getName()) .taxAgentName(taxAgentName) .taxAgentIds(taxAgentIds) .salaryCycle(SalarySobBO.buildSalaryCycle(salarySobPO)) .disable(salarySobPO.getDisable()) .description(salarySobPO.getDescription()) .opts(salarySobPO.getOpts()) .build(); }) .collect(Collectors.toList()); PageInfo dtoPage = new PageInfo<>(salarySobListDTOS, SalarySobListDTO.class); dtoPage.setTotal(page.getTotal()); dtoPage.setPageNum(page.getPageNum()); dtoPage.setPageSize(page.getPageSize()); // 处理历史数据,为薪资账套默认添加回算薪资项目 handleSalarySobBackItemHistory(queryParam); // 转换成前端所需的数据格式 return dtoPage; } /** * 薪资账套列表 * * @return */ public List listAll() { return getSalarySobService(user).listAll(); } /** * 薪资账套列表(分权) * * @return */ public List listAuth(SalarySobQueryParam param) { return getSalarySobService(user).listAuth(param); } private void handleSalarySobBackItemHistory(SalarySobListQueryParam queryParam) { queryParam.setPageSize(100000); List list = getSalarySobService(user).listPageByParam(queryParam).getList(); if (list != null && list.size() > 0) { List salarySobIds = list.stream().map(SalarySobPO::getId).collect(Collectors.toList()); Long count = getSalarySobBackItemService(user).getCountBySalarySobIdIn(salarySobIds); if (count.equals(0L)) { // 薪资账套的默认的回算薪资项目 Set SalarySobBackItemIds = SalaryEntityUtil.properties(SalarySobBackItemBO.getDefault(), SalarySobDefaultBackItemPO::getSysSalaryItemId); // 获取薪资项目中是否已经添加回算薪资项目 List salaryItemPOS = getSalaryItemService(user).listBySysSalaryItemIds(SalarySobBackItemIds); Set salaryBackItemSysIds = SalaryEntityUtil.properties(salaryItemPOS, SalaryItemPO::getSysSalaryItemId); // 需要添加进薪资项目中的回算薪资项目 List needAddSalaryBackItemIds = SalarySobBackItemIds.stream().filter(salarySobBackItemId -> !salaryBackItemSysIds.contains(salarySobBackItemId)).collect(Collectors.toList()); List needAddSysSalaryBackItemPOS = getSysSalaryItemService(user).listByIds(needAddSalaryBackItemIds); // 需要保存的回算薪资项目 List needInsertSalaryItemPOS = SysSalaryItemBO.convert2SalaryItemPO(needAddSysSalaryBackItemPOS, (long) user.getUID()); if (CollectionUtils.isNotEmpty(needInsertSalaryItemPOS)) { getSalaryItemService(user).batchSave(needInsertSalaryItemPOS); } // 没有回算薪资项目数据,给所有薪资账套添加默认回算薪资项目 List salarySobBackItems = new ArrayList<>(); // 获取默认添加后的回算薪资项目 List salaryBackItemPOS = getSalaryItemService(user).listBySysSalaryItemIds(SalarySobBackItemIds); for (Long id : salarySobIds) { for (SalarySobDefaultBackItemPO salarySobDefaultBackItemPO : SalarySobBackItemBO.getDefault()) { Date now = new Date(); Map sysSalaryItemMap = SalaryEntityUtil.convert2Map(salaryBackItemPOS, SalaryItemPO::getSysSalaryItemId); SalaryItemPO salaryItemPO = sysSalaryItemMap.get(salarySobDefaultBackItemPO.getSysSalaryItemId()); SalarySobBackItemPO salarySobBackItemPO = SalarySobBackItemPO.builder() .id(IdGenerator.generate()) .salarySobId(id) .salaryItemId(salaryItemPO.getId()) .salaryItemCode(salaryItemPO.getCode()) .dataType(salaryItemPO.getDataType()) .roundingMode(salaryItemPO.getRoundingMode()) .pattern(salaryItemPO.getPattern()) .valueType(salaryItemPO.getValueType()) .formulaId(salarySobDefaultBackItemPO.getFormulaId()) .backCalcType(salarySobDefaultBackItemPO.getBackCalcType()) .creator((long) user.getUID()) .createTime(now) .updateTime(now) .deleteType(DeleteTypeEnum.NOT_DELETED.getValue()) .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY).build(); salarySobBackItems.add(salarySobBackItemPO); } } // 入库 getSalarySobBackItemService(user).batchInsert(salarySobBackItems); } } } /** * 薪资账套详情 * * @param id 薪资账套id * @return */ public Map getForm(Long id) { long employeeId = user.getUID(); Map data = new HashMap<>(16); // 是否可以编辑(分权后,总管理员不可以编辑管理员新建的账套) boolean canEdit = Objects.isNull(id) || canEdit(id, employeeId); // 薪资账套基础设置详情(目前核算人员范围的值固定为"1") SalarySobBasicFormDTO basicForm = new SalarySobBasicFormDTO() .setEmployeeRange("1") .setTaxableItems(IncomeCategoryEnum.WAGES_AND_SALARIES.getValue()) .setCanEdit(canEdit); if (!Objects.isNull(id)) { // 查询薪资账套 SalarySobPO salarySobPO = getSalarySobService(user).getById(id); if (Objects.isNull(salarySobPO)) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98379, "参数错误,薪资账套不存在或者已被删除")); } // 薪资装套po转换成薪资账套详情dto basicForm = SalarySobBO.convert2FormDTO(basicForm, salarySobPO); } // 转换成前端所需的数据格式 data.put("basicForm", basicForm); return data; } /** * 保存 * * @param saveParam 保存参数 * @return */ public Long save(SalarySobBasicSaveParam saveParam) { return getSalarySobService(user).save(saveParam); } /** * 更新薪资账套的基础设置 * * @param saveParam 更新参数 * @return */ public Long update(SalarySobBasicSaveParam saveParam) { return getSalarySobService(user).update(saveParam); } /** * 启用/禁用薪资账套 * * @param disableParam 更新参数 */ public void updateDisable(SalarySobDisableParam disableParam) { getSalarySobService(user).updateDisable(disableParam); } /** * 删除薪资账套 * * @param ids 薪资账套的id */ public void delete(Collection ids) { getSalarySobService(user).deleteByIds(ids); } /** * 复制 * * @param duplicateParam 复制参数 */ public void duplicate(SalarySobDuplicateParam duplicateParam) { getSalarySobService(user).duplicate(duplicateParam); } /** * 判断是否可以编辑薪资账套 * * @param id * @param employeeId * @return */ public boolean canEdit(Long id, Long employeeId) { // 查询薪资账套 SalarySobPO salarySobPO = getSalarySobService(user).getById(id); if (Objects.isNull(salarySobPO)) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98379, "参数错误,薪资账套不存在或者已被删除")); } return getAuthService(user).auth(salarySobPO, AuthFilterTypeEnum.DATA_OPT, SalarySobPO.class); } public List listByTaxAgent(SalarySobQueryParam param) { return getSalarySobService(user).list(param); } public List> incomeCategoryList() { List> list = new ArrayList<>(); Arrays.stream(IncomeCategoryEnum.values()) .filter(incomeCategory -> incomeCategory.getReportType() == DeclareReportTypeEnum.COMPREHENSIVE_INCOME || incomeCategory.getReportType() == DeclareReportTypeEnum.CLASSIFIED_INCOME) .forEach(incomeCategory -> { Map map = new HashMap(); map.put("enum", incomeCategory); map.put("value", incomeCategory.getValue()); map.put("defaultLabel", incomeCategory.getDefaultLabel()); map.put("labelId", incomeCategory.getLabelId()); map.put("reportTypeName", incomeCategory.getReportType().getDefaultLabel()); list.add(map); }); return list; } }