package com.engine.salary.report.wrapper; import com.alibaba.fastjson.JSONArray; import com.cloudstore.eccom.pc.table.WeaTableColumn; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.salary.component.WeaFormOption; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.report.entity.bo.SalaryStatisticsReportBO; import com.engine.salary.report.entity.param.SalaryStatisticsReportDataQueryParam; import com.engine.salary.report.entity.param.SalaryStatisticsReportQueryParam; import com.engine.salary.report.entity.param.SalaryStatisticsReportSaveParam; import com.engine.salary.report.entity.param.SalaryStatisticsSearchConditionSaveParam; import com.engine.salary.report.entity.po.SalaryStatisticsDimensionPO; import com.engine.salary.report.entity.po.SalaryStatisticsItemPO; import com.engine.salary.report.entity.po.SalaryStatisticsReportPO; import com.engine.salary.report.service.SalaryStatisticsDimensionService; import com.engine.salary.report.service.SalaryStatisticsItemService; import com.engine.salary.report.service.SalaryStatisticsReportService; import com.engine.salary.report.service.SubTableExportService; import com.engine.salary.report.service.impl.SalaryStatisticsDimensionServiceImpl; import com.engine.salary.report.service.impl.SalaryStatisticsItemServiceImpl; import com.engine.salary.report.service.impl.SalaryStatisticsReportServiceImpl; import com.engine.salary.report.service.impl.SubTableExportServiceImpl; import com.engine.salary.util.*; import com.engine.salary.util.page.PageInfo; import com.google.common.collect.Maps; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Component; import weaver.hrm.User; import java.util.*; import java.util.stream.Collectors; /** * @Description: 薪酬统计维度 * @Author: wangxiangzhong * @Date: 2022/12/15 13:46 */ @Component public class SalaryStatisticsReportWrapper extends Service { private static final String conditionId = "salaryStatisticsReportSearchCondition"; private SalaryStatisticsReportService getSalaryStatisticsReportService(User user) { return ServiceUtil.getService(SalaryStatisticsReportServiceImpl.class, user); } private SalaryStatisticsItemService getSalaryStatisticsItemService(User user) { return ServiceUtil.getService(SalaryStatisticsItemServiceImpl.class, user); } private SalaryStatisticsDimensionService getSalaryStatisticsDimensionService(User user) { return ServiceUtil.getService(SalaryStatisticsDimensionServiceImpl.class, user); } private SubTableExportService getSubTableExportService(User user) { return ServiceUtil.getService(SubTableExportServiceImpl.class, user); } /** * 报表列表 * * @param queryParam * @return */ public List> list(SalaryStatisticsReportQueryParam queryParam) { // 初始化 getSalaryStatisticsDimensionService(user).init((long) user.getUID()); List reportList = getSalaryStatisticsReportService(user).list(); if (StringUtils.isNotEmpty(queryParam.getReportName())) { reportList = reportList.stream().filter(rp -> rp.getReportName().contains(queryParam.getReportName())).collect(Collectors.toList()); } List salaryStatisticsDimensionList = this.getSalaryStatisticsDimensionService(user).listAll(); Map salaryStatisticsDimensionMap = SalaryEntityUtil.convert2Map(salaryStatisticsDimensionList, k -> k.getId().toString(), SalaryStatisticsDimensionPO::getDimName); List> result = new ArrayList<>(); reportList.forEach(po -> { Map temp = new HashMap<>(); temp.put("id", po.getId().toString()); temp.put("reportName", po.getReportName()); List dimNames = Arrays.stream(po.getDimension().split(",")).map(dim -> Optional.ofNullable(salaryStatisticsDimensionMap.get(dim)).orElse("")).collect(Collectors.toList()); temp.put("dimension", StringUtils.join(dimNames, ",")); temp.put("dimensionId", po.getDimension()); result.add(temp); }); return result; } /** * 获取薪酬统计报表表单 * * @param id * @param * @return */ public Map getFrom(Long id) { List salaryStatisticsDimensions = getSalaryStatisticsDimensionService(user).listAll(); List statsDimOptions = salaryStatisticsDimensions.stream().map(sd -> new WeaFormOption(sd.getId().toString(), sd.getDimName())).collect(Collectors.toList()); // 1.构建基础信息表单 Map weaForm = new HashMap<>(); weaForm.put("statsDimOptions", statsDimOptions); if (id != null) { SalaryStatisticsReportPO po = this.getSalaryStatisticsReportService(user).getById(id); if (po == null) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(161845, "薪酬统计报表不存在")); } Map dataMap = JsonUtil.parseMap(po, Object.class); dataMap.put("dimension", Arrays.asList(po.getDimension().split(","))); weaForm.put("data", dataMap); } return weaForm; } /** * 保存薪酬统计报表 * * @param saveParam * @param * @return */ public String save(SalaryStatisticsReportSaveParam saveParam) { return getSalaryStatisticsReportService(user).save(saveParam); } /** * 删除薪酬统计报表 * * @param ids * @param * @return */ public Map delete(Collection ids) { return getSalaryStatisticsReportService(user).delete(ids); } /** * 获取统计条件 * * @param id * @return */ public Map getSearchCondition(Long id) { // 高级搜索实例 Map map = new HashMap<>(); if (id != null) { SalaryStatisticsReportPO po = getSalaryStatisticsReportService(user).getById(id); SalaryAssert.notNull(po, SalaryI18nUtil.getI18nLabel(152563, "报表不存在")); Map data = new HashMap<>(); data.put("salaryStartMonth", SalaryDateUtil.localDate2YearMonth(po.getSalaryStartMonth())); data.put("salaryEndMonth", SalaryDateUtil.localDate2YearMonth(po.getSalaryEndMonth())); data.put("taxAgent", JSONArray.parseArray(po.getTaxAgentSetting())); data.put("incomeCategory", JSONArray.parseArray(po.getIncomeCategorySetting())); data.put("subCompany", JSONArray.parseArray(po.getSubCompanySetting())); data.put("department", JSONArray.parseArray(po.getDepartSetting())); data.put("grade", JSONArray.parseArray(po.getGradeSetting())); data.put("position", JSONArray.parseArray(po.getPositionSetting())); data.put("status", JSONArray.parseArray(po.getStatusSetting())); data.put("employee", JSONArray.parseArray(po.getEmployeeSetting())); data.put("hiredate", JSONArray.parseArray(po.getHiredateSetting())); // data.put("leavedate", JSONArray.parseArray(po.getLeavedateSetting())); map.put("data", data); } return map; } public String saveSearchCondition(SalaryStatisticsSearchConditionSaveParam param) { return this.getSalaryStatisticsReportService(user).saveSearchCondition(param); } /** * 获取报表数据 * * @param param * @return */ public Map getData(SalaryStatisticsReportDataQueryParam param) { if (param.getId() == null || param.getDimensionId() == null) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(84026, "参数错误")); } SalaryStatisticsDimensionPO dimension = getSalaryStatisticsDimensionService(user).getById(param.getDimensionId()); if (dimension == null) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(161300, "统计维度不存在")); } // weaTable对象 Map weaTable = new HashMap<>(); // 查询报表配置 SalaryStatisticsReportPO po = this.getSalaryStatisticsReportService(user).getById(param.getId()); if (po == null) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(161845, "薪酬统计报表不存在")); } // 查询自定义统计项目 List salaryStatisticsItemList = this.getSalaryStatisticsItemService(user).listByStatisticsReportId(po.getId()); // 列表data PageInfo> page = this.getSalaryStatisticsReportService(user).buildReportRecords(dimension, param, po, salaryStatisticsItemList); // 组装合计 Map countResultMap = SalaryStatisticsReportBO.buildTotal(page, salaryStatisticsItemList, (long) user.getUID()); // 列表columns List weaTableColumns = SalaryStatisticsReportBO.buildReportColumns(dimension.getDimName(), salaryStatisticsItemList); Map resultMap = Maps.newHashMap(); resultMap.putAll(JsonUtil.parseMap(weaTable, Object.class)); resultMap.put("columns", weaTableColumns); resultMap.put("pageInfo", page); resultMap.put("countResult", countResultMap); return resultMap; } /** * 导出报表数据 * * @param param * @param employeeId * @param tenantKey * @return */ public Map exportData(SalaryStatisticsReportDataQueryParam param, Long employeeId, String tenantKey) { // if (param.getId() == null || param.getDimensionId() == null) { // throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(84026, "参数错误")); // } // // SalaryStatisticsReportPO po = this.getSalaryStatisticsReportService(user).getById(param.getId()); // if (po == null) { // throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(161845, "薪酬统计报表不存在")); // } // SalaryStatisticsDimensionPO dimension = getSalaryStatisticsDimensionService(user).getById(param.getDimensionId()); // if (dimension == null) { // throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(161300, "统计维度不存在")); // } // // 查询自定义统计项目 // List salaryStatisticsItemList = this.getSalaryStatisticsItemService(user).listByStatisticsReportId(po.getId()); // // 列表data // Page> page = this.getSalaryStatisticsReportService(user).buildReportRecords(dimension, param, po, salaryStatisticsItemList); // // 组装合计 // Map countResultMap = SalaryStatisticsReportBO.buildTotal(page, salaryStatisticsItemList); // if (CollectionUtils.isNotEmpty(page.getRecords()) && MapUtils.isNotEmpty(countResultMap)) { // page.getRecords().add(countResultMap); // } // // 获取数据 // List> records = CollectionUtils.emptyIfNull(page.getRecords()).stream().map(m -> m.entrySet().stream().collect(Collectors.toMap(Map.Entry::getKey, e -> e.getValue() + StringUtils.EMPTY))).collect(Collectors.toList()); // // // 获取列头 // List weaTableColumns = SalaryStatisticsReportBO.buildReportColumns(dimension.getDimName(), salaryStatisticsItemList); // // // 组装导出参数 // ExportCommonParam exportParam = SalaryStatisticsReportBO.buildExportParam(dimension.getDimName(), weaTableColumns, records); // exportParam.setSheetName(SalaryI18nUtil.getI18nLabel(179263, "薪酬统计报表") + "-" + exportParam.getDimensionName()); // return getSubTableExportService(user).exportCommon(exportParam, UserContext.getCurrentUser(), TenantContext.get()); return null; } }