diff --git a/src/com/engine/salary/entity/taxdeclaration/param/TaxDeclarationValueListQueryParam.java b/src/com/engine/salary/entity/taxdeclaration/param/TaxDeclarationValueListQueryParam.java index f0aa5cf97..864c4dac9 100644 --- a/src/com/engine/salary/entity/taxdeclaration/param/TaxDeclarationValueListQueryParam.java +++ b/src/com/engine/salary/entity/taxdeclaration/param/TaxDeclarationValueListQueryParam.java @@ -2,7 +2,6 @@ package com.engine.salary.entity.taxdeclaration.param; import com.engine.salary.common.BaseQueryParam; import com.engine.salary.enums.salarysob.IncomeCategoryEnum; -import io.swagger.annotations.ApiModel; import lombok.Data; /** @@ -14,7 +13,6 @@ import lombok.Data; * @version 1.0 **/ @Data -@ApiModel("个税申报表记录列表查询参数") public class TaxDeclarationValueListQueryParam extends BaseQueryParam { //个税申报记录id") diff --git a/src/com/engine/salary/service/TaxDeclarationExcelService.java b/src/com/engine/salary/service/TaxDeclarationExcelService.java index fb95a6e5c..15d6c81fd 100644 --- a/src/com/engine/salary/service/TaxDeclarationExcelService.java +++ b/src/com/engine/salary/service/TaxDeclarationExcelService.java @@ -1,5 +1,7 @@ package com.engine.salary.service; +import com.engine.salary.entity.taxdeclaration.param.AbnormalEmployeeListQueryParam; +import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationValueListQueryParam; import org.apache.poi.xssf.usermodel.XSSFWorkbook; /** @@ -15,7 +17,32 @@ public interface TaxDeclarationExcelService { /** * 导出个税申报表 * - * @param taxDeclarationId + * @param queryParam + * @return */ - XSSFWorkbook exportTaxDeclaration(Long taxDeclarationId); + XSSFWorkbook exportTaxDeclarationValue(TaxDeclarationValueListQueryParam queryParam); + + /** + * 导出未报送的人员 + * + * @param queryParam + * @return + */ + XSSFWorkbook exportEmployee4NotDeclare(AbnormalEmployeeListQueryParam queryParam); + + /** + * 导出缺少申报数据的人员 + * + * @param queryParam + * @return + */ + XSSFWorkbook exportEmployee4NoValue(AbnormalEmployeeListQueryParam queryParam); + + /** + * 导出申报失败的人员 + * + * @param queryParam + * @return + */ + XSSFWorkbook exportEmployee4Fail(AbnormalEmployeeListQueryParam queryParam); } diff --git a/src/com/engine/salary/service/impl/TaxDeclarationExcelServiceImpl.java b/src/com/engine/salary/service/impl/TaxDeclarationExcelServiceImpl.java index 957957790..8a7e8a3e3 100644 --- a/src/com/engine/salary/service/impl/TaxDeclarationExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxDeclarationExcelServiceImpl.java @@ -1,32 +1,30 @@ 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.TaxDeclarationAnnualListDTO; -import com.engine.salary.entity.taxdeclaration.dto.TaxDeclarationLaborListDTO; -import com.engine.salary.entity.taxdeclaration.dto.TaxDeclarationWageListDTO; -import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationDetailListQueryParam; -import com.engine.salary.entity.taxdeclaration.po.TaxDeclarationPO; -import com.engine.salary.enums.salarysob.IncomeCategoryEnum; -import com.engine.salary.mapper.taxdeclaration.TaxDeclarationDetailMapper; -import com.engine.salary.service.TaxDeclarationDetailService; -import com.engine.salary.service.TaxDeclarationExcelService; -import com.engine.salary.service.TaxDeclarationService; +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.db.MapperProxyFactory; +import com.engine.salary.util.excel.ExcelSheetData; import com.engine.salary.util.excel.ExcelUtil; -import com.engine.salary.util.page.PageInfo; 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; -import java.util.Objects; /** * 个税申报表导出 @@ -39,101 +37,126 @@ import java.util.Objects; @Slf4j public class TaxDeclarationExcelServiceImpl extends Service implements TaxDeclarationExcelService { - private TaxDeclarationDetailService getTaxDeclarationDetailService(User user) { - return ServiceUtil.getService(TaxDeclarationDetailServiceImpl.class, user); - } - private TaxDeclarationDetailMapper getTaxDeclarationDetailMapper() { - return MapperProxyFactory.getProxy(TaxDeclarationDetailMapper.class); - } 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 exportTaxDeclaration(Long taxDeclarationId) { - // 1.工作簿名称 - String sheetName = SalaryI18nUtil.getI18nLabel(85368, "个税申报表"); - - - TaxDeclarationPO taxDeclarationPO = getTaxDeclarationService(user).getById(taxDeclarationId); - // 查询当前个税申报表一共有多少人员 - int count = getTaxDeclarationDetailMapper().countEmployeeId(taxDeclarationId); - // 以1000个人员一页,一共有多少页 - int totalPages = (count % 1000 == 0) ? (count / 1000) : (count / 1000 + 1); //总页数 - // excel导出的数据 - List> rows = Lists.newArrayListWithExpectedSize(count); - List headerList = Lists.newArrayList(); - List dataIndexList = Lists.newArrayList(); - if (Objects.equals(taxDeclarationPO.getIncomeCategory(), IncomeCategoryEnum.WAGES_AND_SALARIES.getValue())) { - // 解析表头 - parseHeader(TaxDeclarationWageListDTO.class, headerList, dataIndexList); - rows.add(headerList); - for (int i = 0; i < totalPages; i++) { - TaxDeclarationDetailListQueryParam queryParam = new TaxDeclarationDetailListQueryParam(); - queryParam.setTaxDeclarationId(taxDeclarationId); - queryParam.setCurrent(i+1); - queryParam.setPageSize(1000); - PageInfo dtoPage = getTaxDeclarationDetailService(user).listDtoPageByParam4Wage(queryParam); - List list = dtoPage.getList(); - for (TaxDeclarationWageListDTO taxDeclarationWageListDTO : list) { - List row = Lists.newArrayListWithExpectedSize(dataIndexList.size()); - Map map = JsonUtil.parseMap(taxDeclarationWageListDTO, Object.class); - for (String dataIndex : dataIndexList) { - row.add(map.get(dataIndex)); - } - rows.add(row); - } - } - } - if (Objects.equals(taxDeclarationPO.getIncomeCategory(), IncomeCategoryEnum.REMUNERATION_FOR_LABOR.getValue())) { - // 解析表头 - parseHeader(TaxDeclarationLaborListDTO.class, headerList, dataIndexList); - rows.add(headerList); - for (int i = 0; i < totalPages; i++) { - TaxDeclarationDetailListQueryParam queryParam = new TaxDeclarationDetailListQueryParam(); - queryParam.setTaxDeclarationId(taxDeclarationId); - queryParam.setCurrent(i); - queryParam.setPageSize(1000); - PageInfo dtoPage = getTaxDeclarationDetailService(user).listDtoPageByParam4Labor(queryParam); - List list = dtoPage.getList(); - for (TaxDeclarationLaborListDTO taxDeclarationLaborListDTO : list) { - List row = Lists.newArrayListWithExpectedSize(dataIndexList.size()); - Map map = JsonUtil.parseMap(taxDeclarationLaborListDTO, Object.class); - for (String dataIndex : dataIndexList) { - row.add(map.get(dataIndex)); - } - rows.add(row); - } - } - } - - if (Objects.equals(taxDeclarationPO.getIncomeCategory(), IncomeCategoryEnum.ONETIME_ANNUAL_BONUS.getValue())) { - // 解析表头 - parseHeader(TaxDeclarationAnnualListDTO.class, headerList, dataIndexList); - rows.add(headerList); - for (int i = 0; i < totalPages; i++) { - TaxDeclarationDetailListQueryParam queryParam = new TaxDeclarationDetailListQueryParam(); - queryParam.setTaxDeclarationId(taxDeclarationId); - queryParam.setCurrent(i); - queryParam.setPageSize(1000); - PageInfo dtoPage = getTaxDeclarationDetailService(user).listDtoPageByParam4Annual(queryParam); - List list = dtoPage.getList(); - for (TaxDeclarationAnnualListDTO taxDeclarationLaborListDTO : list) { - List row = Lists.newArrayListWithExpectedSize(dataIndexList.size()); - Map map = JsonUtil.parseMap(taxDeclarationLaborListDTO, Object.class); - for (String dataIndex : dataIndexList) { - row.add(map.get(dataIndex)); - } - rows.add(row); - } - } - } - return ExcelUtil.genWorkbookV2(rows, sheetName); + 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; + } + /** * 解析表头 * @@ -142,14 +165,14 @@ public class TaxDeclarationExcelServiceImpl extends Service implements TaxDeclar * @param dataIndexList * @param */ - private void parseHeader(Class clazz, List headerList, List dataIndexList) { + 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( annotation.labelId(), annotation.text())); + headerList.add(SalaryI18nUtil.getI18nLabel((int) annotation.labelId(), annotation.text())); dataIndexList.add(declaredField.getName()); } } diff --git a/src/com/engine/salary/util/excel/ExcelSheetData.java b/src/com/engine/salary/util/excel/ExcelSheetData.java new file mode 100644 index 000000000..f4cf615ea --- /dev/null +++ b/src/com/engine/salary/util/excel/ExcelSheetData.java @@ -0,0 +1,15 @@ +package com.engine.salary.util.excel; + +import lombok.Data; + +import java.util.List; + +@Data +public class ExcelSheetData { + + private String sheetName; + private List headers; + private List> rows; + + +} diff --git a/src/com/engine/salary/util/excel/ExcelUtil.java b/src/com/engine/salary/util/excel/ExcelUtil.java index c733129fb..140e69bac 100644 --- a/src/com/engine/salary/util/excel/ExcelUtil.java +++ b/src/com/engine/salary/util/excel/ExcelUtil.java @@ -9,7 +9,7 @@ import org.apache.poi.ss.usermodel.IndexedColors; import org.apache.poi.xssf.usermodel.*; import java.awt.*; -import java.util.Date; +import java.util.*; import java.util.List; public class ExcelUtil { @@ -266,4 +266,11 @@ public class ExcelUtil { } return workbook; } + + public static XSSFWorkbook genWorkbook(ExcelSheetData excelSheetData) { + List> list = new ArrayList<>(); + list.add(Collections.singletonList(excelSheetData.getHeaders())); + list.addAll( excelSheetData.getRows()); + return genWorkbookV2(list, excelSheetData.getSheetName()); + } } diff --git a/src/com/engine/salary/web/TaxDeclarationController.java b/src/com/engine/salary/web/TaxDeclarationController.java index e30cd63e2..c717016f5 100644 --- a/src/com/engine/salary/web/TaxDeclarationController.java +++ b/src/com/engine/salary/web/TaxDeclarationController.java @@ -3,17 +3,22 @@ package com.engine.salary.web; import com.engine.common.util.ServiceUtil; import com.engine.salary.entity.taxdeclaration.dto.*; import com.engine.salary.entity.taxdeclaration.param.*; +import com.engine.salary.enums.salarysob.IncomeCategoryEnum; import com.engine.salary.service.TaxDeclarationExcelService; import com.engine.salary.service.TaxDeclarationService; import com.engine.salary.service.impl.TaxDeclarationExcelServiceImpl; import com.engine.salary.service.impl.TaxDeclarationServiceImpl; import com.engine.salary.util.ResponseResult; +import com.engine.salary.util.SalaryDateUtil; +import com.engine.salary.util.SalaryI18nUtil; import com.engine.salary.util.page.PageInfo; import com.engine.salary.wrapper.TaxDeclarationDetailWrapper; import com.engine.salary.wrapper.TaxDeclarationWrapper; import com.engine.salary.wrapper.TaxDeclareRecordWrapper; import io.swagger.v3.oas.annotations.parameters.RequestBody; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; import weaver.hrm.HrmUserVarify; import weaver.hrm.User; @@ -22,6 +27,11 @@ import javax.servlet.http.HttpServletResponse; import javax.ws.rs.*; import javax.ws.rs.core.Context; import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; +import javax.ws.rs.core.StreamingOutput; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.time.LocalDateTime; import java.util.Collection; import java.util.List; import java.util.Map; @@ -51,93 +61,6 @@ public class TaxDeclarationController { } -// //个税申报表列表 -// @POST -// @Path("/list") -// @Produces(MediaType.APPLICATION_JSON) -// public String list(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody TaxDeclarationListQueryParam queryParam) throws ParseException { -// User user = HrmUserVarify.getUser(request, response); -// queryParam.setFromSalaryMonth(SalaryDateUtil.stringToDate(queryParam.getFromSalaryMonthStr() == null ? "" : queryParam.getFromSalaryMonthStr())); -// queryParam.setEndSalaryMonth(SalaryDateUtil.stringToDate(queryParam.getEndSalaryMonthStr() == null ? "" : queryParam.getEndSalaryMonthStr())); -// return new ResponseResult>(user).run(getTaxDeclarationWrapper(user)::listPage, queryParam); -// } -// -// @POST -// @Path("/withDrawTaxDeclaration") -// @Produces(MediaType.APPLICATION_JSON) -// public String deleteTaxDeclaration(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody TaxDeclarationSaveParam param) { -// User user = HrmUserVarify.getUser(request, response); -// return new ResponseResult(user).run(getTaxDeclarationWrapper(user)::withDrawTaxDeclaration, param.getTaxDeclarationId()); -// } -// -// -// //个税申报表表单 -// @GET -// @Path("/getForm") -// @Produces(MediaType.APPLICATION_JSON) -// public String getForm(@Context HttpServletRequest request, @Context HttpServletResponse response, @QueryParam(value = "id") Long id) { -// User user = HrmUserVarify.getUser(request, response); -// return new ResponseResult(user).run(getTaxDeclarationWrapper(user)::getForm, id); -// } -// -// //个税申报表相关信息 -// @GET -// @Path("/getTaxDeclarationInfo") -// @Produces(MediaType.APPLICATION_JSON) -// public String getTaxDeclarationInfo(@Context HttpServletRequest request, @Context HttpServletResponse response, @QueryParam(value = "taxDeclarationId") Long taxDeclarationId) { -// User user = HrmUserVarify.getUser(request, response); -// return new ResponseResult(user).run(getTaxDeclarationWrapper(user)::getTaxDeclarationInfoById, taxDeclarationId); -// } -// -// //个税申报表生成 -// @POST -// @Path("/save") -// @Produces(MediaType.APPLICATION_JSON) -// public String save(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody TaxDeclarationSaveParam param) { -// User user = HrmUserVarify.getUser(request, response); -// param.setSalaryMonth(SalaryDateUtil.String2YearMonth(param.getSalaryMonthStr())); -// return new ResponseResult(user).run(getTaxDeclarationWrapper(user)::save, param); -// } -// -// //个税申报表详情列表 -// @POST -// @Path("/detail/list") -// @Produces(MediaType.APPLICATION_JSON) -// public String listTaxDeclarationDetail(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody TaxDeclarationDetailListQueryParam param) { -// User user = HrmUserVarify.getUser(request, response); -// param.setTaxDeclarationId(Long.parseLong(param.getTaxDeclarationIdStr())); -// return new ResponseResult(user).run(getTaxDeclarationDetailWrapper(user)::listPage, param); -// } -// -// //个税申报表相关信息 -// @GET -// @Path("/export") -// @Produces(MediaType.APPLICATION_OCTET_STREAM) -// public Response exportTaxDeclaration(@Context HttpServletRequest request, @Context HttpServletResponse response, @QueryParam(value = "taxDeclarationId") Long taxDeclarationId) { -// try { -// User user = HrmUserVarify.getUser(request, response); -// XSSFWorkbook workbook = getTaxDeclarationExcelService(user).exportTaxDeclaration(taxDeclarationId); -// -// String fileName = "个税申报表" + LocalDate.now(); -// try { -// fileName = URLEncoder.encode(fileName + ".xlsx", "UTF-8"); -// } catch (UnsupportedEncodingException e) { -// e.printStackTrace(); -// } -// -// StreamingOutput output = outputStream -> { -// workbook.write(outputStream); -// outputStream.flush(); -// }; -// response.setContentType("application/octet-stream"); -// return Response.ok(output).header("Content-disposition", "attachment;filename=" + fileName).header("Cache-Control", "no-cache").build(); -// } catch (Exception e) { -// log.error("个税申报表导出异常", e); -// throw e; -// } -// } - - /** * 个税申报表列表 * @@ -377,20 +300,70 @@ public class TaxDeclarationController { return new ResponseResult(user).run(getTaxDeclareRecordWrapper(user)::listValuePage, queryParam); } -// /** -// * 导出个税申报表申报数据 -// * -// * @param queryParam 导出参数 -// * @return -// */ -// @POST -// @Path("/detail/export") -// @Produces(MediaType.APPLICATION_JSON) -// public String exportTaxDeclaration(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody TaxDeclarationValueListQueryParam queryParam) { -// User user = HrmUserVarify.getUser(request, response); -// return new ResponseResult(user).run(getTaxDeclareRecordWrapper(user)::exportTaxDeclarationValue, queryParam); -// -// } + /** + * 导出个税申报表申报数据 + * + * @return + */ + @GET + @Path("/detail/export") + @Produces(MediaType.APPLICATION_OCTET_STREAM) + public Response exportDetail(@Context HttpServletRequest request, @Context HttpServletResponse response) { + + TaxDeclarationValueListQueryParam queryParam = genTaxDeclarationValueListQueryParam(request); + + try { + User user = HrmUserVarify.getUser(request, response); + + XSSFWorkbook workbook = getTaxDeclareRecordWrapper(user).exportTaxDeclarationValue(queryParam); + + String fileName = SalaryI18nUtil.getI18nLabel(156419, "个税申报表明细") + "-" + SalaryDateUtil.getFormatLocalDate(LocalDateTime.now()); + try { + fileName = URLEncoder.encode(fileName + ".xlsx", "UTF-8"); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + + StreamingOutput output = outputStream -> { + workbook.write(outputStream); + outputStream.flush(); + }; + + response.setContentType("application/octet-stream"); + return Response.ok(output) + .header("Content-disposition", "attachment;filename=" + fileName) + .header("Cache-Control", "no-cache").build(); + } catch (Exception e) { + log.error("个税申报表明细导出异常", e); + throw e; + } + } + + private TaxDeclarationValueListQueryParam genTaxDeclarationValueListQueryParam(HttpServletRequest request) { + TaxDeclarationValueListQueryParam param = new TaxDeclarationValueListQueryParam(); + String current = request.getParameter("current"); + if (StringUtils.isNotBlank(current)) { + param.setCurrent(Integer.valueOf(current)); + } + String pageSize = request.getParameter("pageSize"); + if (StringUtils.isNotBlank(pageSize)) { + param.setPageSize(Integer.valueOf(pageSize)); + } + String taxDeclareRecordId = request.getParameter("taxDeclareRecordId"); + if (StringUtils.isNotBlank(taxDeclareRecordId)) { + param.setTaxDeclareRecordId(Long.valueOf(taxDeclareRecordId)); + } + String taxDeclarationId = request.getParameter("taxDeclarationId"); + if (StringUtils.isNotBlank(taxDeclarationId)) { + param.setTaxDeclarationId(Long.valueOf(taxDeclarationId)); + } + String incomeCategory = request.getParameter("incomeCategory"); + if (StringUtils.isNotBlank(incomeCategory)) { + param.setIncomeCategory(IncomeCategoryEnum.valueOf(incomeCategory)); + } + return param; + } + /** * 个税申报表申报数据-人员未报送列表 @@ -434,47 +407,146 @@ public class TaxDeclarationController { return new ResponseResult>(user).run(getTaxDeclareRecordWrapper(user)::listEmployeePage4Fail, queryParam); } -// /** -// * 个税申报表申报数据-导出人员未报送列表 -// * -// * @param queryParam 查询条件 -// * @return -// */ -// @POST -// @Path("/employee/export4NotDeclare") -// @Produces(MediaType.APPLICATION_JSON) -// public String exportEmployee4NotDeclare(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody AbnormalEmployeeListQueryParam queryParam) { -// -// Map map = taxDeclareRecordWrapper.exportEmployee4NotDeclare(queryParam, UserContext.getCurrentUser()); -// return WeaResult.success(map); -// } + private AbnormalEmployeeListQueryParam genAbnormalEmployeeListQueryParam(HttpServletRequest request) { + AbnormalEmployeeListQueryParam param = new AbnormalEmployeeListQueryParam(); + String current = request.getParameter("current"); + if (StringUtils.isNotBlank(current)) { + param.setCurrent(Integer.valueOf(current)); + } + String pageSize = request.getParameter("pageSize"); + if (StringUtils.isNotBlank(pageSize)) { + param.setPageSize(Integer.valueOf(pageSize)); + } + String keyword = request.getParameter("keyword"); + if (StringUtils.isNotBlank(keyword)) { + param.setKeyword(keyword); + } + String taxDeclareRecordId = request.getParameter("taxDeclareRecordId"); + if (StringUtils.isNotBlank(taxDeclareRecordId)) { + param.setTaxDeclareRecordId(Long.valueOf(taxDeclareRecordId)); + } -// /** -// * 个税申报表申报数据-导出报送人员无申报数据列表 -// * -// * @param queryParam 查询条件 -// * @return -// */ -// @POST -// @Path("/employee/export4NoValue") -// @Produces(MediaType.APPLICATION_JSON) -// public String exportEmployee4NoValue(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody AbnormalEmployeeListQueryParam queryParam) { -// Map map = taxDeclareRecordWrapper.exportEmployee4NoValue(queryParam, UserContext.getCurrentUser()); -// return WeaResult.success(map); -// } -// -// /** -// * 个税申报表申报数据-导出申报失败列表 -// * -// * @param queryParam 导出参数 -// * @return -// */ -// @POST -// @Path("/employee/export4Fail") -// @Produces(MediaType.APPLICATION_JSON) -// public String exportEmployee4Fail(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody AbnormalEmployeeListQueryParam queryParam) { -// Map map = taxDeclareRecordWrapper.exportEmployee4Fail(queryParam, UserContext.getCurrentUser()); -// return WeaResult.success(map); -// } + String taxAgentId = request.getParameter("taxAgentId"); + if (StringUtils.isNotBlank(taxAgentId)) { + param.setTaxAgentId(Long.valueOf(taxAgentId)); + } + + String taxCycle = request.getParameter("taxCycle"); + if (StringUtils.isNotBlank(taxCycle)) { + param.setTaxCycle(SalaryDateUtil.stringToDate(taxCycle)); + } + + return param; + } + + /** + * 个税申报表申报数据-导出人员未报送列表 + * + * @return + */ + @GET + @Path("/employee/export4NotDeclare") + @Produces(MediaType.APPLICATION_OCTET_STREAM) + public Response exportEmployee4NotDeclare(@Context HttpServletRequest request, @Context HttpServletResponse response) { + try { + User user = HrmUserVarify.getUser(request, response); + + AbnormalEmployeeListQueryParam queryParam = genAbnormalEmployeeListQueryParam(request); + XSSFWorkbook workbook = getTaxDeclareRecordWrapper(user).exportEmployee4NotDeclare(queryParam); + + String fileName = SalaryI18nUtil.getI18nLabel(156420, "未报送的人员") + "-" + SalaryDateUtil.getFormatLocalDate(LocalDateTime.now()); + try { + fileName = URLEncoder.encode(fileName + ".xlsx", "UTF-8"); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + + StreamingOutput output = outputStream -> { + workbook.write(outputStream); + outputStream.flush(); + }; + + response.setContentType("application/octet-stream"); + return Response.ok(output) + .header("Content-disposition", "attachment;filename=" + fileName) + .header("Cache-Control", "no-cache").build(); + } catch (Exception e) { + log.error("未报送的人员导出异常", e); + throw e; + } + } + + /** + * 个税申报表申报数据-导出报送人员无申报数据列表 + * + * @return + */ + @GET + @Path("/employee/export4NoValue") + @Produces(MediaType.APPLICATION_OCTET_STREAM) + public Response exportEmployee4NoValue(@Context HttpServletRequest request, @Context HttpServletResponse response) { + + try { + User user = HrmUserVarify.getUser(request, response); + AbnormalEmployeeListQueryParam queryParam = genAbnormalEmployeeListQueryParam(request); + XSSFWorkbook workbook = getTaxDeclareRecordWrapper(user).exportEmployee4NoValue(queryParam); + + String fileName = SalaryI18nUtil.getI18nLabel(156421, "缺少申报数据的人员") + "-" + SalaryDateUtil.getFormatLocalDate(LocalDateTime.now()); + try { + fileName = URLEncoder.encode(fileName + ".xlsx", "UTF-8"); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + + StreamingOutput output = outputStream -> { + workbook.write(outputStream); + outputStream.flush(); + }; + + response.setContentType("application/octet-stream"); + return Response.ok(output) + .header("Content-disposition", "attachment;filename=" + fileName) + .header("Cache-Control", "no-cache").build(); + } catch (Exception e) { + log.error("缺少申报数据的人员导出异常", e); + throw e; + } + } + + /** + * 个税申报表申报数据-导出申报失败列表 + * + * @return + */ + @GET + @Path("/employee/export4Fail") + @Produces(MediaType.APPLICATION_OCTET_STREAM) + public Response exportEmployee4Fail(@Context HttpServletRequest request, @Context HttpServletResponse response) { + try { + User user = HrmUserVarify.getUser(request, response); + AbnormalEmployeeListQueryParam queryParam = genAbnormalEmployeeListQueryParam(request); + XSSFWorkbook workbook = getTaxDeclareRecordWrapper(user).exportEmployee4Fail(queryParam); + + String fileName = SalaryI18nUtil.getI18nLabel(156422, "申报失败人员") + "-" + SalaryDateUtil.getFormatLocalDate(LocalDateTime.now()); + try { + fileName = URLEncoder.encode(fileName + ".xlsx", "UTF-8"); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + + StreamingOutput output = outputStream -> { + workbook.write(outputStream); + outputStream.flush(); + }; + + response.setContentType("application/octet-stream"); + return Response.ok(output) + .header("Content-disposition", "attachment;filename=" + fileName) + .header("Cache-Control", "no-cache").build(); + } catch (Exception e) { + log.error("申报失败人员导出异常", e); + throw e; + } + } } diff --git a/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java b/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java index 3a1e7a192..277d1d9d0 100644 --- a/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java +++ b/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java @@ -32,6 +32,7 @@ import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.compress.utils.Lists; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.math.NumberUtils; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.springframework.stereotype.Component; import weaver.general.Util; import weaver.hrm.User; @@ -609,90 +610,43 @@ public class TaxDeclareRecordWrapper extends Service { } } -// /** -// * 导出个税申报明细列表 -// * -// * @param queryParam -// * @return -// */ -// public Map exportTaxDeclarationValue(TaxDeclarationValueListQueryParam queryParam) { -// ExcelExportParam excelExportParam = new ExcelExportParam() -// .setBiz(String.valueOf(IdGenerator.generate())) -// .setModule(EntityType.hrmsalary.name()) -// .setFunction("exportTaxDeclarationValue"); -// LocalRunnable localRunnable = new LocalRunnable() { -// @Override -// public void execute() { -// getTaxDeclarationExcelService(user).exportTaxDeclarationValue(excelExportParam, queryParam, simpleEmployee); -// } -// }; -// ThreadPoolUtil.fixedPoolExecute(ModulePoolEnum.OTHER, "exportTaxDeclarationValue", localRunnable); -// return JsonUtil.parseMap(excelExportParam, Object.class); -// } -// -// /** -// * 导出未报送的人员列表 -// * -// * @param queryParam -// * @param simpleEmployee -// * @return -// */ -// public Map exportEmployee4NotDeclare(AbnormalEmployeeListQueryParam queryParam) { -// ExcelExportParam excelExportParam = new ExcelExportParam() -// .setBiz(String.valueOf(IdGenerator.generate())) -// .setModule(EntityType.hrmsalary.name()) -// .setFunction("exportEmployee4NotDeclare"); -// LocalRunnable localRunnable = new LocalRunnable() { -// @Override -// public void execute() { -// getTaxDeclarationExcelService(user).exportEmployee4NotDeclare(excelExportParam, queryParam, simpleEmployee); -// } -// }; -// ThreadPoolUtil.fixedPoolExecute(ModulePoolEnum.OTHER, "exportEmployee4NotDeclare", localRunnable); -// return JsonUtil.parseMap(excelExportParam, Object.class); -// } -// -// /** -// * 导出没有申报数据的人员列表 -// * -// * @param queryParam -// * @param simpleEmployee -// * @return -// */ -// public Map exportEmployee4NoValue(AbnormalEmployeeListQueryParam queryParam, SimpleEmployee simpleEmployee) { -// ExcelExportParam excelExportParam = new ExcelExportParam() -// .setBiz(String.valueOf(IdGenerator.generate())) -// .setModule(EntityType.hrmsalary.name()) -// .setFunction("exportEmployee4NoValue"); -// LocalRunnable localRunnable = new LocalRunnable() { -// @Override -// public void execute() { -// getTaxDeclarationExcelService(user).exportEmployee4NoValue(excelExportParam, queryParam, simpleEmployee); -// } -// }; -// ThreadPoolUtil.fixedPoolExecute(ModulePoolEnum.OTHER, "exportEmployee4NoValue", localRunnable); -// return JsonUtil.parseMap(excelExportParam, Object.class); -// } -// -// /** -// * 导出申报失败的人员列表 -// * -// * @param queryParam -// * @param simpleEmployee -// * @return -// */ -// public Map exportEmployee4Fail(AbnormalEmployeeListQueryParam queryParam, SimpleEmployee simpleEmployee) { -// ExcelExportParam excelExportParam = new ExcelExportParam() -// .setBiz(String.valueOf(IdGenerator.generate())) -// .setModule(EntityType.hrmsalary.name()) -// .setFunction("exportEmployee4Fail"); -// LocalRunnable localRunnable = new LocalRunnable() { -// @Override -// public void execute() { -// getTaxDeclarationExcelService(user).exportEmployee4Fail(excelExportParam, queryParam, simpleEmployee); -// } -// }; -// ThreadPoolUtil.fixedPoolExecute(ModulePoolEnum.OTHER, "exportEmployee4Fail", localRunnable); -// return JsonUtil.parseMap(excelExportParam, Object.class); -// } + /** + * 导出个税申报明细列表 + * + * @param queryParam + * @return + */ + public XSSFWorkbook exportTaxDeclarationValue(TaxDeclarationValueListQueryParam queryParam) { + return getTaxDeclarationExcelService(user).exportTaxDeclarationValue(queryParam); + } + + /** + * 导出未报送的人员列表 + * + * @param queryParam + * @return + */ + public XSSFWorkbook exportEmployee4NotDeclare(AbnormalEmployeeListQueryParam queryParam) { + return getTaxDeclarationExcelService(user).exportEmployee4NotDeclare(queryParam); + } + + /** + * 导出没有申报数据的人员列表 + * + * @param queryParam + * @return + */ + public XSSFWorkbook exportEmployee4NoValue(AbnormalEmployeeListQueryParam queryParam) { + return getTaxDeclarationExcelService(user).exportEmployee4NoValue(queryParam); + } + + /** + * 导出申报失败的人员列表 + * + * @param queryParam + * @return + */ + public XSSFWorkbook exportEmployee4Fail(AbnormalEmployeeListQueryParam queryParam) { + return getTaxDeclarationExcelService(user).exportEmployee4Fail(queryParam); + } }