package com.engine.salary.service.impl; import com.cloudstore.eccom.pc.table.WeaTableColumn; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.salary.annotation.SalaryTableColumn; import com.engine.salary.entity.taxdeclaration.dto.AbnormalEmployeeListDTO; import com.engine.salary.entity.taxdeclaration.dto.FailEmployeeListDTO; import com.engine.salary.entity.taxdeclaration.dto.TaxDeclarationValueListDTO; import com.engine.salary.entity.taxdeclaration.param.AbnormalEmployeeListQueryParam; import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationValueListQueryParam; import com.engine.salary.entity.taxdeclaration.po.*; import com.engine.salary.service.*; import com.engine.salary.util.JsonUtil; import com.engine.salary.util.SalaryI18nUtil; import com.engine.salary.util.excel.ExcelSheetData; import com.engine.salary.util.excel.ExcelUtil; import com.google.common.collect.Lists; import lombok.extern.slf4j.Slf4j; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import weaver.general.Util; import weaver.hrm.User; import java.lang.reflect.Field; import java.util.Collections; import java.util.List; import java.util.Map; /** * 个税申报表导出 *

Copyright: Copyright (c) 2022

*

Company: 泛微软件

* * @author qiantao * @version 1.0 **/ @Slf4j public class TaxDeclarationExcelServiceImpl extends Service implements TaxDeclarationExcelService { private TaxDeclarationService getTaxDeclarationService(User user) { return ServiceUtil.getService(TaxDeclarationServiceImpl.class, user); } private TaxDeclarationValueService getTaxDeclarationValueService(User user) { return ServiceUtil.getService(TaxDeclarationValueServiceImpl.class, user); } private TaxDeclareRecordService getTaxDeclareRecordService(User user) { return ServiceUtil.getService(TaxDeclareRecordServiceImpl.class, user); } private TaxDeclareEmployeeService getTaxDeclareEmployeeService(User user) { return ServiceUtil.getService(TaxDeclareEmployeeServiceImpl.class, user); } private TaxDeclareFailService getTaxDeclareFailService(User user) { return ServiceUtil.getService(TaxDeclareFailServiceImpl.class, user); } @Override public XSSFWorkbook exportTaxDeclarationValue(TaxDeclarationValueListQueryParam queryParam) { // 查询个税申报表 TaxDeclarationPO taxDeclarationPO = getTaxDeclarationService(user).getById(queryParam.getTaxDeclarationId()); // 查询个税申报表明细 List taxDeclarationValues = getTaxDeclarationValueService(user).listByTaxDeclarationIds(Collections.singleton(queryParam.getTaxDeclarationId())); // 转成个税申报表明细 TaxDeclarationValueListDTO taxDeclarationValueListDTO = getTaxDeclarationValueService(user).convert2List(taxDeclarationPO, taxDeclarationValues); // excel导出的数据 List> rows = Lists.newArrayList(); List headerList = Lists.newArrayList(); List dataIndexList = Lists.newArrayList(); // 解析表头 for (WeaTableColumn column : taxDeclarationValueListDTO.getColumns()) { headerList.add(column.getText()); dataIndexList.add(column.getColumn()); } rows.add(headerList); // 解析表中数据 for (Map datum : taxDeclarationValueListDTO.getData()) { List row = Lists.newArrayList(); for (String dataIndex : dataIndexList) { row.add(Util.null2String(datum.get(dataIndex))); } rows.add(row); } String sheetName = SalaryI18nUtil.getI18nLabel(100090, "个税申报表"); return ExcelUtil.genWorkbook(rows, sheetName); } @Override public XSSFWorkbook exportEmployee4NotDeclare(AbnormalEmployeeListQueryParam queryParam) { // 查询个税申报记录 TaxDeclareRecordPO taxDeclareRecord = getTaxDeclareRecordService(user).getById(queryParam.getTaxDeclareRecordId()); queryParam.setTaxAgentId(taxDeclareRecord.getTaxAgentId()); queryParam.setTaxCycle(taxDeclareRecord.getTaxCycle()); // 查询个税申报表明细中的人员 List taxDeclareEmployees = getTaxDeclareEmployeeService(user).list4NotDeclareByParam(queryParam); // 转换成列表dto List dtoList = getTaxDeclareEmployeeService(user).convert2AbnormalEmployeeList(taxDeclareRecord, taxDeclareEmployees); ExcelSheetData excelSheetData = getExcelSheetData(AbnormalEmployeeListDTO.class, dtoList); return ExcelUtil.genWorkbook(excelSheetData); } @Override public XSSFWorkbook exportEmployee4NoValue(AbnormalEmployeeListQueryParam queryParam) { // 查询个税申报记录 TaxDeclareRecordPO taxDeclareRecord = getTaxDeclareRecordService(user).getById(queryParam.getTaxDeclareRecordId()); queryParam.setTaxAgentId(taxDeclareRecord.getTaxAgentId()); queryParam.setTaxCycle(taxDeclareRecord.getTaxCycle()); // 查询个税申报表明细中的人员 List taxDeclareEmployees = getTaxDeclareEmployeeService(user).list4NoValueByParam(queryParam); // 转换成列表dto List dtoList = getTaxDeclareEmployeeService(user).convert2AbnormalEmployeeList(taxDeclareRecord, taxDeclareEmployees); ExcelSheetData excelSheetData = getExcelSheetData(AbnormalEmployeeListDTO.class, dtoList); return ExcelUtil.genWorkbook(excelSheetData); } @Override public XSSFWorkbook exportEmployee4Fail(AbnormalEmployeeListQueryParam queryParam) { // 查询个税申报记录 TaxDeclareRecordPO taxDeclareRecord = getTaxDeclareRecordService(user).getById(queryParam.getTaxDeclareRecordId()); queryParam.setTaxAgentId(taxDeclareRecord.getTaxAgentId()); queryParam.setTaxCycle(taxDeclareRecord.getTaxCycle()); // 查询个税申报表明细中的人员 List taxDeclareFails = getTaxDeclareFailService(user).listByTaxDeclareRecordIds(Collections.singleton(taxDeclareRecord.getId())); // 转换成列表dto List dtoList = getTaxDeclareFailService(user).convert2FailEmployeeList(taxDeclareRecord, taxDeclareFails); ExcelSheetData excelSheetData = getExcelSheetData(FailEmployeeListDTO.class, dtoList); return ExcelUtil.genWorkbook(excelSheetData); } private ExcelSheetData getExcelSheetData(Class clazz, List dtoList) { // 导出的表头 List headerList = Lists.newArrayList(); List dataIndexList = Lists.newArrayList(); parseHeader(clazz, headerList, dataIndexList); // 导出的数据 List> rows = Lists.newArrayListWithExpectedSize(dtoList.size()); dtoList.forEach(dto -> { Map map = JsonUtil.parseMap(dto, Object.class); List row = Lists.newArrayListWithExpectedSize(dataIndexList.size()); dataIndexList.forEach(dataIndex -> row.add(map.get(dataIndex))); rows.add(row); }); // 组装excel导出数据 ExcelSheetData excelSheetData = new ExcelSheetData(); excelSheetData.setSheetName(SalaryI18nUtil.getI18nLabel(156423, "个税申报表人员")); excelSheetData.setHeaders(headerList); excelSheetData.setRows(rows); return excelSheetData; } /** * 解析表头 * * @param clazz * @param headerList * @param dataIndexList * @param */ private void parseHeader(Class clazz, List headerList, List dataIndexList) { Field[] declaredFields = clazz.getDeclaredFields(); for (Field declaredField : declaredFields) { if (!declaredField.isAnnotationPresent(SalaryTableColumn.class)) { continue; } SalaryTableColumn annotation = declaredField.getAnnotation(SalaryTableColumn.class); headerList.add(SalaryI18nUtil.getI18nLabel((int) annotation.labelId(), annotation.text())); dataIndexList.add(declaredField.getName()); } } }