package com.engine.salary.wrapper; import com.cloudstore.eccom.pc.table.WeaTableColumn; import com.cloudstore.eccom.result.WeaResultMsg; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.salary.component.SalaryWeaTable; import com.engine.salary.config.SalaryElogConfig; import com.engine.salary.elog.entity.dto.LoggerContext; import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.salaryarchive.bo.SalaryArchiveBO; import com.engine.salary.entity.salaryarchive.dto.SalaryArchiveBaseInfoFormDTO; import com.engine.salary.entity.salaryarchive.dto.SalaryArchiveFormDTO; import com.engine.salary.entity.salaryarchive.dto.SalaryArchiveListDTO; import com.engine.salary.entity.salaryarchive.param.*; import com.engine.salary.entity.salaryarchive.po.SalaryArchiveDimissionPO; import com.engine.salary.entity.salaryarchive.po.SalaryArchiveItemPO; import com.engine.salary.entity.salaryarchive.po.SalaryArchivePO; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; import com.engine.salary.entity.taxagent.dto.TaxAgentListDTO; import com.engine.salary.entity.taxagent.po.TaxAgentPO; import com.engine.salary.enums.OperateTypeEnum; import com.engine.salary.enums.UserStatusEnum; import com.engine.salary.enums.salaryarchive.*; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.process.salaryArchive.SalaryArchiveProcessQueryParam; import com.engine.salary.service.*; import com.engine.salary.service.impl.*; import com.engine.salary.util.SalaryI18nUtil; import com.engine.salary.util.page.PageInfo; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import weaver.hrm.User; import java.util.*; import java.util.stream.Collectors; /** * 薪资档案 *

Copyright: Copyright (c) 2022

*

Company: 泛微软件

* * @author qiantao * @version 1.0 **/ public class SalaryArchiveWrapper extends Service { private SalaryArchiveService getSalaryArchiveService(User user) { return ServiceUtil.getService(SalaryArchiveServiceImpl.class, user); } private SalaryArchiveItemService getSalaryArchiveItemService(User user) { return ServiceUtil.getService(SalaryArchiveItemServiceImpl.class, user); } private TaxAgentService getTaxAgentService(User user) { return ServiceUtil.getService(TaxAgentServiceImpl.class, user); } private SalaryItemService getSalaryItemService(User user) { return ServiceUtil.getService(SalaryItemServiceImpl.class, user); } private SalaryArchiveExcelService getSalaryArchiveExcelService(User user) { return ServiceUtil.getService(SalaryArchiveExcelServiceImpl.class, user); } private SalaryEmployeeService getSalaryEmployeeService(User user) { return ServiceUtil.getService(SalaryEmployeeServiceImpl.class, user); } /** * 薪资档案列表(分页) * * @param queryParam * @return */ public Map list(SalaryArchiveQueryParam queryParam) { //薪资档案列表 PageInfo pageInfo = getSalaryArchiveService(user).listPage(queryParam); Collection salaryArchives = pageInfo.getList(); //所有个税扣缴义务人 Collection taxAgentLists = getTaxAgentService(user).listAll(); // 获取所有可被引用的薪资项目 List salaryItems = getSalaryArchiveItemService(user).getCanAdjustSalaryItems(); //整合所有的显示列(固定列+薪资项目动态列) List> listMaps = getSalaryArchiveService(user).buildSalaryArchiveData(salaryArchives, taxAgentLists, salaryItems, Boolean.TRUE); PageInfo> pageInfos = new PageInfo>(listMaps); pageInfos.setTotal(pageInfo.getTotal()); pageInfos.setPageNum(pageInfo.getPageNum()); pageInfos.setPageSize(pageInfo.getPageSize()); //动态列组装 List columns = SalaryArchiveBO.buildSalaryArchiveTable(salaryItems); SalaryWeaTable table = new SalaryWeaTable(user, SalaryArchiveListDTO.class); table.setColumns(columns); WeaResultMsg result = new WeaResultMsg(false); result.putAll(table.makeDataResult()); result.success(); Map datas = new HashMap<>(); datas.put("pageInfo", pageInfos); datas.put("dataKey", result.getResultMap()); datas.put("salaryArchives", salaryArchives); return datas; } /** * 薪资档案列表(分页) * * @param queryParam * @return */ public Map list(SalaryArchiveQueryParam queryParam, SalaryArchiveListTypeEnum listTypeEnum) { //薪资档案列表 PageInfo pageInfo = getSalaryArchiveService(user).listPage(queryParam); Collection salaryArchives = pageInfo.getList(); //所有个税扣缴义务人 Collection taxAgentLists = getTaxAgentService(user).listAll(); // 获取所有可被引用的薪资项目 List salaryItems = getSalaryArchiveItemService(user).getCanAdjustSalaryItems(); Set userTaxAgentIds = getTaxAgentService(user).listAllTaxAgents((long) user.getUID()) .stream().map(TaxAgentPO::getId).collect(Collectors.toSet()); salaryItems = salaryItems.stream() .filter(po -> getSalaryItemService(user).filterInRange(userTaxAgentIds, po)) .collect(Collectors.toList()); //整合所有的显示列(固定列+薪资项目动态列) List> listMaps = getSalaryArchiveService(user).buildSalaryArchiveData(salaryArchives, taxAgentLists, salaryItems, Boolean.TRUE); PageInfo> pageInfos = new PageInfo>(listMaps); pageInfos.setTotal(pageInfo.getTotal()); pageInfos.setPageNum(pageInfo.getPageNum()); pageInfos.setPageSize(pageInfo.getPageSize()); //动态列组装 List columns = SalaryArchiveBO.buildSalaryArchiveTable(salaryItems); SalaryWeaTable table = new SalaryWeaTable(user, SalaryArchiveListDTO.class); table.setColumns(columns); WeaResultMsg result = new WeaResultMsg(false); result.putAll(table.makeDataResult()); result.success(); Map datas = new HashMap<>(); datas.put("pageInfo", pageInfos); datas.put("dataKey", result.getResultMap()); datas.put("salaryArchives", salaryArchives); datas.put("listType", listTypeEnum.getValue()); //记录操作日志 LoggerContext loggerContext = new LoggerContext<>(); loggerContext.setUser(user); loggerContext.setTargetName(listTypeEnum.getDefaultLabel()); loggerContext.setOperateType(OperateTypeEnum.READ.getValue()); loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "查看薪资档案列表")); loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "查看薪资档案列表")); SalaryElogConfig.salaryArchiveLoggerTemplate.write(loggerContext); return datas; } /** * 获取各tab总人数 * * @return */ public Map queryTabTotal() { return getSalaryArchiveService(user).queryTabTotal(); } /** * 待定薪列表 * * @param queryParam * @return */ public Map listPage(SalaryArchiveQueryParam queryParam) { Map list = list(queryParam); return list; } /** * 待定薪列表 * * @param queryParam * @return */ public Map pendingList(SalaryArchiveQueryParam queryParam) { queryParam.setRunStatusList(Arrays.asList(SalaryArchiveStatusEnum.PENDING.getValue())); return list(queryParam, SalaryArchiveListTypeEnum.PENDING); } /** * 删除待定薪待办 * * @param ids * @return */ public String deletePendingTodo(Collection ids) { return getSalaryArchiveService(user).deletePendingTodo(ids); } /** * 定薪列表 * * @param queryParam * @return */ public Map fixedList(SalaryArchiveQueryParam queryParam) { queryParam.setRunStatusList(Arrays.asList(SalaryArchiveStatusEnum.FIXED.getValue(), SalaryArchiveStatusEnum.SUSPEND.getValue())); return list(queryParam, SalaryArchiveListTypeEnum.FIXED); } /** * 待停薪列表 * * @param queryParam * @return */ public Map suspendList(SalaryArchiveQueryParam queryParam) { queryParam.setRunStatusList(Arrays.asList(SalaryArchiveStatusEnum.SUSPEND.getValue())); return list(queryParam, SalaryArchiveListTypeEnum.SUSPEND); } /** * 停薪列表 * * @param queryParam * @return */ public Map stopList(SalaryArchiveQueryParam queryParam) { queryParam.setRunStatusList(Arrays.asList(SalaryArchiveStatusEnum.STOP_FROM_PENDING.getValue(), SalaryArchiveStatusEnum.STOP_FROM_SUSPEND.getValue())); return list(queryParam, SalaryArchiveListTypeEnum.STOP); } /** * 设为定薪员工 * * @param ids * @return */ public Map gotoFixed(Collection ids) { return getSalaryArchiveService(user).gotoFixed(ids); } /** * 一键全部定薪 * * @param queryParam * @return */ public Map allGotoFixed(SalaryArchiveQueryParam queryParam) { return getSalaryArchiveService(user).allGotoFixed(queryParam); } /** * 停薪 * * @param ids * @return */ public Map gotoStop(Collection ids) { return getSalaryArchiveService(user).gotoStop(ids); } /** * 一键全部停薪 * * @param queryParam * @return */ public Map allGotoStop(SalaryArchiveQueryParam queryParam) { return getSalaryArchiveService(user).allGotoStop(queryParam); } /** * 删除待停薪待办 * * @param ids * @return */ public String deleteSuspendTodo(Collection ids) { return getSalaryArchiveService(user).deleteSuspendTodo(ids); } /** * 取消停薪 * * @param ids * @return */ public String cancelStop(Collection ids) { return getSalaryArchiveService(user).cancelStop(ids); } /** * 外部人员 * * @param queryParam * @return */ public Map extList(SalaryArchiveQueryParam queryParam) { queryParam.setRunStatusList(Arrays.asList(SalaryArchiveStatusEnum.FIXED.getValue())); queryParam.setExtSalaryArchiveList(true); return list(queryParam, SalaryArchiveListTypeEnum.EXT); } /** * 获取薪资档案详情表单 * * @param salaryArchiveId * @return */ public SalaryArchiveFormDTO getFrom(Long salaryArchiveId) { if (salaryArchiveId == null) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100425, "薪资档案id不能为空")); } SalaryArchivePO po = getSalaryArchiveService(user).getById(salaryArchiveId); if (po == null) { throw new SalaryRunTimeException(String.format(SalaryI18nUtil.getI18nLabel(100463, "薪资档案不存在") + "[id:%s]", salaryArchiveId)); } List employeeList = getSalaryEmployeeService(user).getEmployeeByIdsAll(Collections.singletonList(po.getEmployeeId())); if (CollectionUtils.isEmpty(employeeList)) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100465, "薪资档案员工信息不存在")); } Long taxAgentId = po.getTaxAgentId(); TaxAgentPO taxAgent = getTaxAgentService(user).getById(taxAgentId); // 1.基本信息表单 Map baseInfo = new HashMap<>(); DataCollectionEmployee employee = employeeList.get(0); SalaryArchiveBaseInfoFormDTO build = SalaryArchiveBaseInfoFormDTO.builder() .username(employee.getUsername()) .department(employee.getDepartmentName()) .position(employee.getJobtitleName() == null ? "" : employee.getJobtitleName()) .hiredate(employee.getCompanystartdate()) .mobile(employee.getMobile()) .taxAgent(taxAgent.getName()) .build(); baseInfo.put("employee", build); List> salaryItems = Lists.newArrayList(); // 2.发薪设置表单 Map paySetForm = new HashMap<>(); paySetForm.put("data", po); // 获取所有可被引用的薪资项目 List salaryItemList = getSalaryArchiveItemService(user).getCanAdjustSalaryItems() .stream().filter(item -> getSalaryItemService(user).filterInRange(Collections.singleton(taxAgentId), item)) .collect(Collectors.toList()); Collection salaryItemIds = salaryItemList.stream().map(SalaryItemPO::getId).collect(Collectors.toList()); List salaryArchiveItemList = getSalaryArchiveService(user).getCurrentEffectiveItemList(Collections.singletonList(salaryArchiveId), salaryItemIds); salaryItemList.forEach(s -> { Optional optionalItem = salaryArchiveItemList.stream().filter(f -> f.getSalaryItemId().equals(s.getId())).findFirst(); Map salaryItemMap = new LinkedHashMap<>(); salaryItemMap.put("id", s.getId()); salaryItemMap.put("name", s.getName()); salaryItemMap.put("value", optionalItem.isPresent() ? optionalItem.get().getItemValue() : ""); salaryItemMap.put("dataType", s.getDataType()); salaryItemMap.put("pattern", s.getPattern()); salaryItems.add(salaryItemMap); }); return SalaryArchiveFormDTO.builder() .id(salaryArchiveId) .employeeId(employee.getEmployeeId()) .baseInfo(baseInfo) .paySet(paySetForm) .adjustSalaryItems(salaryItems) .build(); } /** * 保存发薪设置 * * @param saveParam * @return */ public String savePaySet(SalaryArchiveSetPaySaveParam saveParam) { return getSalaryArchiveService(user).savePaySet(saveParam); } /** * 获取离职时段设置表单 * * @return */ public Map getDimissionSetForm() { List dimissionSets = getSalaryArchiveService(user).dimissionSets(); Map data = new LinkedHashMap<>(); if (CollectionUtils.isNotEmpty(dimissionSets)) { data.put("dimissionTimeInterval", dimissionSets.get(0).getDimissionTimeInterval()); } return data; } /** * 保存离职时段设置 * * @param saveParam * @return */ public String saveDimissionSet(SalaryArchiveDimissionSaveParam saveParam) { return getSalaryArchiveService(user).saveDimissionSet(saveParam); } public List> getImportTypes() { List> importTypes = Arrays.stream(SalaryArchiveImportTypeEnum.values()).map(m -> { Map map = new HashMap<>(2); map.put("id", String.valueOf(m.getValue())); map.put("content", SalaryI18nUtil.getI18nLabel(m.getLabelId(), m.getDefaultLabel())); return map; }).collect(Collectors.toList()); return importTypes; } /** * 下载导入模板 * * @param queryParam * @return */ public XSSFWorkbook downloadTemplate(SalaryArchiveQueryParam queryParam) { if (!queryParam.isExtSalaryArchiveList()) { if (queryParam.getListType() == null) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(109712, "列表类型必传")); } else { // 定薪列表导入有调薪导入和初始化导入 if (queryParam.getListType().equals(SalaryArchiveListTypeEnum.FIXED.getValue())) { Optional optional = Arrays.stream(SalaryArchiveImportTypeEnum.values()) .filter(e -> StringUtils.isNotEmpty(queryParam.getImportType()) && e.getValue().equals(queryParam.getImportType())).findFirst(); if (!optional.isPresent()) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100593, "导入类型不正确")); } } } } return getSalaryArchiveExcelService(user).downloadTemplate(queryParam); } /** * 预览 * * @param param * @return */ public Map preview(SalaryArchiveImportHandleParam param) { return getSalaryArchiveService(user).preview(param); } /** * 导入档案 * * @param param * @return */ public Map importSalaryArchive(SalaryArchiveImportHandleParam param) { return getSalaryArchiveExcelService(user).batchImportEbatch(param); } /** * 导出列表 * * @param queryParam * @return */ public XSSFWorkbook exportList(SalaryArchiveQueryParam queryParam) { return getSalaryArchiveService(user).exportList(queryParam); } /** * 检查导入文件 * * @param param * @return */ public Map checkImportSalaryArchiveParam(SalaryArchiveImportHandleParam param) { param.setOnlyCheck(true); return getSalaryArchiveExcelService(user).batchImportEbatch(param); } /** * 人员状态列表 * * @return */ public Map searchCondition() { List> userStatus = UserStatusEnum.getList(); List> itemAdjustReasons = SalaryArchiveItemAdjustReasonEnum.getList(); List> TaxAgentAdjustReason = SalaryArchiveTaxAgentAdjustReasonEnum.getList(); Collection taxAgentList = getTaxAgentService(user).findAll(); HashMap map = Maps.newHashMap(); map.put("userStatus", userStatus); map.put("itemAdjustReasons", itemAdjustReasons); map.put("TaxAgentAdjustReason", TaxAgentAdjustReason); map.put("taxAgentList", taxAgentList); return map; } public Map selectSalaryArchiveColumns(String importType) { return getSalaryArchiveService(user).selectSalaryArchiveColumns(SalaryArchiveImportTypeEnum.parseByValue(importType)); } public Map checkSalaryArchiveInit(SalaryArchiveImportActionParam importData) { importData.setImportType("init"); importData.setListType("FIXED"); importData.setAddData(false); return getSalaryArchiveExcelService(user).processInit(importData); } public Map importSalaryArchiveInit(SalaryArchiveImportActionParam importData) { importData.setImportType("init"); importData.setListType("FIXED"); importData.setAddData(true); return getSalaryArchiveExcelService(user).processInit(importData); } public Map checkAdjustmentSalaryArchive(SalaryArchiveImportActionParam importData) { importData.setImportType("salaryItemAdjust"); importData.setListType("FIXED"); importData.setAddData(false); return getSalaryArchiveExcelService(user).processInit(importData); } public Map adjustmentSalaryArchive(SalaryArchiveImportActionParam importData) { importData.setImportType("salaryItemAdjust"); importData.setListType("FIXED"); importData.setAddData(true); return getSalaryArchiveExcelService(user).processInit(importData); } /** * 停薪 * * @param stopSalaryParam * @return */ public void stopSalary(SalaryArchiveStopParam stopSalaryParam) { getSalaryArchiveService(user).stopSalary(stopSalaryParam); } public Map handleRepeatData() { return getSalaryArchiveService(user).handleRepeatData(); } @Deprecated public SalaryArchivePO getSalaryArchiveInfo(SalaryArchiveProcessQueryParam param) { if (param.getEmployeeId() == null) { throw new SalaryRunTimeException("人员id为空!"); } SalaryArchivePO po = SalaryArchivePO.builder().employeeId(param.getEmployeeId()).build(); if (param.getTaxAgentId() != null) { po.setTaxAgentId(param.getTaxAgentId()); } if (CollectionUtils.isNotEmpty(param.getRunStatusList())) { po.setRunStatusList(param.getRunStatusList()); } List list = getSalaryArchiveService(user).listSome(po); if (CollectionUtils.isEmpty(list)) { throw new SalaryRunTimeException("薪资档案不存在!"); } if (list.size() > 1) { throw new SalaryRunTimeException("存在多个薪资档案!"); } return list.get(0); } public List getSalaryArchiveInfoV2(SalaryArchiveProcessQueryParam param) { if (param.getEmployeeId() == null) { throw new SalaryRunTimeException("人员id为空!"); } SalaryArchivePO po = SalaryArchivePO.builder().employeeId(param.getEmployeeId()).build(); if (param.getTaxAgentId() != null) { po.setTaxAgentId(param.getTaxAgentId()); } if (CollectionUtils.isNotEmpty(param.getRunStatusList())) { po.setRunStatusList(param.getRunStatusList()); } List list = getSalaryArchiveService(user).listSome(po); if (CollectionUtils.isEmpty(list)) { throw new SalaryRunTimeException("薪资档案不存在!"); } return list.stream().map(a -> getFrom(a.getId())).collect(Collectors.toList()); } /** * 删除薪资档案 * * @param salaryArchiveIds */ public void deleteSalaryArchive(Collection salaryArchiveIds) { getSalaryArchiveService(user).deleteSalaryArchive(salaryArchiveIds); } /** * 同步所有档案起始发薪日期变为入职日期 * * @return */ public String syncPayStartDate() { return getSalaryArchiveService(user).syncPayStartDate(); } }