package com.engine.salary.wrapper; import com.engine.salary.service.OtherDeductionService; import com.engine.salary.service.SalaryEmployeeService; import com.weaver.common.authority.format.FormatManager; import com.weaver.common.component.search.WeaSearchCondition; import com.weaver.common.component.table.WeaTable; import com.weaver.common.component.table.page.Page; import com.weaver.datasecurity.interceptor.DSTenantKeyThreadVar; import com.weaver.framework.rpc.context.impl.TenantRpcContext; import com.weaver.hrm.salary.common.excel.ExcelImportParam; import com.weaver.hrm.salary.entity.datacollection.bo.DataCollectionBO; import com.weaver.hrm.salary.entity.datacollection.dto.OtherDeductionListDTO; import com.weaver.hrm.salary.entity.datacollection.dto.OtherDeductionRecordDTO; import com.weaver.hrm.salary.entity.datacollection.dto.OtherDeductionSearchConditionDTO; import com.weaver.hrm.salary.entity.datacollection.param.OtherDeductionQueryParam; import com.weaver.hrm.salary.entity.datacollection.po.OtherDeductionPO; import com.weaver.hrm.salary.exception.SalaryRunTimeException; import com.weaver.hrm.salary.service.TaxAgentService; import com.weaver.hrm.salary.util.SalaryFormatUtil; import com.weaver.hrm.salary.util.SalaryI18nUtil; import com.weaver.teams.domain.hr.SimpleUserInfo; import com.weaver.teams.security.context.TenantContext; import com.weaver.teams.security.context.UserContext; import org.apache.commons.collections4.CollectionUtils; import org.springframework.stereotype.Component; import java.time.LocalDate; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * @Description: 其他免税扣除 * @Author: wangxiangzhong * @Date: 2022/3/14 16:09 */ @Component public class OtherDeductionWrapper { private OtherDeductionService otherDeductionService; private TaxAgentService taxAgentService; private SalaryEmployeeService salaryEmployeeService; /** * 数据采集-其他免税扣除列表的高级搜索 * * @param currentEmployeeId * @param currentTenantKey * @return */ public WeaSearchCondition getSearchCondition(Long currentEmployeeId, String currentTenantKey) { WeaSearchCondition weaSearchCondition = SalaryFormatUtil.getInstance() .buildCondition(OtherDeductionSearchConditionDTO.class, new OtherDeductionSearchConditionDTO()); // 入职日期-添加范围 DataCollectionBO.addDatePickerRangeOtherParams(weaSearchCondition, "hiredate", currentEmployeeId, currentTenantKey); // 只保留常用条件 weaSearchCondition.setGroups(weaSearchCondition.getGroups().stream().filter(e-> "commonGroup".equals(e.getId())).collect(Collectors.toList())); return weaSearchCondition; } /** * 数据采集-其他免税扣除列表(分页) * * @param queryParam * @param currentEmployeeId * @param currentTenantKey * @return */ public WeaTable list(OtherDeductionQueryParam queryParam, Long currentEmployeeId, String currentTenantKey) { queryParam.setDeclareMonthDate(CollectionUtils.emptyIfNull(queryParam.getDeclareMonth()).stream().map(e-> LocalDate.of(e.getYear(),e.getMonthValue(),1)).collect(Collectors.toList())); Page page = new Page<>(queryParam.getCurrent(), queryParam.getPageSize(), true); page = otherDeductionService.listPage(page, queryParam, currentEmployeeId, currentTenantKey); List list = page.getRecords(); List simpleUserInfos = salaryEmployeeService.listByEmployeeIds(list.stream().map(OtherDeductionListDTO::getEmployeeId).collect(Collectors.toList()), currentTenantKey); // 人员信息赋值 list.forEach(m->{ // 身份证号 m.setIdNo(DataCollectionBO.getIdNo(m.getEmployeeId(), simpleUserInfos)); }); WeaTable weaTable = FormatManager.getInstance().genTable(OtherDeductionListDTO.class, page); // 在外展示操作按钮 weaTable.getOperates().get(0).setOuter(Boolean.TRUE); weaTable.setModule("hrmsalary"); return weaTable; } /** * 数据采集-其他免税扣除详情列表(分页) * * @param queryParam * @param currentEmployeeId * @param currentTenantKey * @return */ public WeaTable getDetailList(OtherDeductionQueryParam queryParam, Long currentEmployeeId, String currentTenantKey) { Long id = queryParam.getOtherTaxExemptDeductionId(); OtherDeductionPO po = otherDeductionService.getById(id, currentTenantKey); if (po == null) { throw new SalaryRunTimeException(String.format(SalaryI18nUtil.getI18nLabel(currentTenantKey, currentEmployeeId, 100415, "其他免税扣除不存在")+"[id:%s]", id)); } queryParam.setDeclareMonthDate(CollectionUtils.emptyIfNull(queryParam.getDeclareMonth()).stream().map(e-> LocalDate.of(e.getYear(),e.getMonthValue(),1)).collect(Collectors.toList())); queryParam.setEmployeeId(po.getEmployeeId()); Page page = new Page<>(queryParam.getCurrent(), queryParam.getPageSize(), true); page = otherDeductionService.recordListPage(page, queryParam, currentEmployeeId, currentTenantKey); // 记录表格 WeaTable weaTable = FormatManager.getInstance() .genTable(OtherDeductionRecordDTO.class, page); weaTable.setModule("hrmsalary"); return weaTable; } /** * 导出-其他免税扣除列表 * * @param queryParam * @param currentEmployeeId * @param currentTenantKey * @return */ public Map export(OtherDeductionQueryParam queryParam, Long currentEmployeeId, String currentTenantKey) { // 构建异步导出参数 Map map = salaryBatchService.buildeExportParam("exportOtherDeduction"); String username = UserContext.getCurrentUser().getUsername(); String eteamsId = TenantRpcContext.getEteamsId(); boolean isChief = taxAgentService.isChief(currentEmployeeId, currentTenantKey); taskExecutor.execute(() -> { try { DSTenantKeyThreadVar.tenantKey.set(currentTenantKey); otherDeductionService.export(map, username, eteamsId, isChief, queryParam, currentEmployeeId, currentTenantKey); } finally { DSTenantKeyThreadVar.tenantKey.remove(); } }); return map; } /** * 导出-其他免税扣除详情列表 * * @param queryParam * @param currentEmployeeId * @param currentTenantKey * @return */ public Map exportDetail(OtherDeductionQueryParam queryParam, Long currentEmployeeId, String currentTenantKey) { Long id = queryParam.getOtherTaxExemptDeductionId(); OtherDeductionPO po = otherDeductionService.getById(id, currentTenantKey); if (po == null) { throw new SalaryRunTimeException(String.format(SalaryI18nUtil.getI18nLabel(currentTenantKey, currentEmployeeId, 100415, "其他免税扣除不存在")+"[id:%s]", id)); } boolean isChief = taxAgentService.isChief(currentEmployeeId, currentTenantKey); // 构建异步导出参数 Map map = salaryBatchService.buildeExportParam("exportOtherDeductionDetail"); String username = UserContext.getCurrentUser().getUsername(); String eteamsId = TenantRpcContext.getEteamsId(); taskExecutor.execute(() -> { try { DSTenantKeyThreadVar.tenantKey.set(currentTenantKey); otherDeductionService.exportDetail(map, username, eteamsId, po.getEmployeeId(), isChief, queryParam, currentEmployeeId, currentTenantKey); } finally { DSTenantKeyThreadVar.tenantKey.remove(); } }); return map; } /** * 下载导入模板 * * @param queryParam * @param currentEmployeeId * @param currentTenantKey * @return */ public Map downloadTemplate(OtherDeductionQueryParam queryParam, Long currentEmployeeId, String currentTenantKey) { // 构建异步导出参数 Map map = salaryBatchService.buildeExportParam("exportOtherDeduction"); boolean isChief = taxAgentService.isChief(currentEmployeeId, currentTenantKey); String username = UserContext.getCurrentUser().getUsername(); String eteamsId = TenantRpcContext.getEteamsId(); taskExecutor.execute(() -> { try { DSTenantKeyThreadVar.tenantKey.set(currentTenantKey); otherDeductionService.export(map, username, eteamsId, isChief, queryParam, currentEmployeeId, currentTenantKey); } finally { DSTenantKeyThreadVar.tenantKey.remove(); } }); return map; } /** * 获取导入参数 * * @return */ public ExcelImportParam getImportParams() { return salaryBatchService.buildImportParam("importOtherDeduction", "importOtherDeduction", SalaryI18nUtil.getI18nLabel(TenantContext.getCurrentTenantKey(), UserContext.getCurrentEmployeeId(), 93849, "其他免税扣除"), null, null); } }