diff --git a/src/com/engine/salary/entity/salaryitem/param/SalaryItemDownloadTemplateParam.java b/src/com/engine/salary/entity/salaryitem/param/SalaryItemDownloadTemplateParam.java new file mode 100644 index 000000000..36edcd24b --- /dev/null +++ b/src/com/engine/salary/entity/salaryitem/param/SalaryItemDownloadTemplateParam.java @@ -0,0 +1,24 @@ +package com.engine.salary.entity.salaryitem.param; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 薪资项目查询参数 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SalaryItemDownloadTemplateParam { + + //下载模板是否带数据 + private boolean hasData; +} diff --git a/src/com/engine/salary/service/SalaryItemService.java b/src/com/engine/salary/service/SalaryItemService.java index 7e469e24b..15df4b07f 100644 --- a/src/com/engine/salary/service/SalaryItemService.java +++ b/src/com/engine/salary/service/SalaryItemService.java @@ -152,5 +152,8 @@ public interface SalaryItemService { List getConfig(SalaryItemExportParam param); + Map preview(SalaryItemImportParam param); + ImportExcelResponse importSalaryItem(SalaryItemImportParam param); + } diff --git a/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java b/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java index c294cb100..1354b6729 100644 --- a/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java @@ -35,6 +35,7 @@ import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryI18nUtil; import com.engine.salary.util.db.IdGenerator; import com.engine.salary.util.excel.ExcelParseHelper; +import com.engine.salary.util.excel.ExcelSupport; import com.engine.salary.util.excel.ImportExcelResponse; import com.engine.salary.util.page.PageInfo; import com.engine.salary.util.page.SalaryPageUtil; @@ -45,6 +46,7 @@ import lombok.Data; import lombok.NoArgsConstructor; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; +import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.util.IOUtils; import org.springframework.beans.BeanUtils; import weaver.file.ImageFileManager; @@ -533,6 +535,21 @@ public class SalaryItemServiceImpl extends Service implements SalaryItemService return getSalaryItemMapper().getConfig(param.getIds()); } + @Override + public Map preview(SalaryItemImportParam param) { + InputStream fileInputStream = null; + try { + fileInputStream = ImageFileManager.getInputStreamById(Integer.parseInt(param.getImageId())); + Sheet sheet = ExcelSupport.parseFile(fileInputStream, 0, EXCEL_TYPE_XLSX); + Map apidatas = new HashMap(); + apidatas.put("headers", ExcelSupport.getSheetHeader(sheet, 0)); + apidatas.put("list", ExcelParseHelper.parse2List(sheet, 1)); + return apidatas; + } finally { + IOUtils.closeQuietly(fileInputStream); + } + } + @Override public ImportExcelResponse importSalaryItem(SalaryItemImportParam param) { diff --git a/src/com/engine/salary/web/SalaryItemController.java b/src/com/engine/salary/web/SalaryItemController.java index fd6afad09..91fa153ad 100644 --- a/src/com/engine/salary/web/SalaryItemController.java +++ b/src/com/engine/salary/web/SalaryItemController.java @@ -14,6 +14,7 @@ import com.engine.salary.util.page.PageInfo; import com.engine.salary.wrapper.SalaryItemWrapper; import com.engine.salary.wrapper.SysSalaryItemWrapper; import io.swagger.v3.oas.annotations.parameters.RequestBody; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import weaver.hrm.HrmUserVarify; @@ -41,6 +42,7 @@ import java.util.Map; * @author qiantao * @version 1.0 **/ +@Slf4j public class SalaryItemController { private SalaryItemWrapper getSalaryItemWrapper(User user) { @@ -209,10 +211,45 @@ public class SalaryItemController { 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; } } + @POST + @Path("/downloadTemplate") + @Produces(MediaType.APPLICATION_OCTET_STREAM) + public Response downloadTemplate(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryItemDownloadTemplateParam param) { + try { + User user = HrmUserVarify.getUser(request, response); + XSSFWorkbook workbook = getSalaryItemWrapper(user).downloadTemplate(param); + String time = LocalDate.now().toString(); + String fileName = "薪资项目导入模板" + time; + 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; + } + } + + @POST + @Path("/preview") + @Produces(MediaType.APPLICATION_JSON) + public String preview(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryItemImportParam importParam) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult>(user).run(getSalaryItemWrapper(user)::preview, importParam); + } + @POST @Path("/import") @Produces(MediaType.APPLICATION_JSON) diff --git a/src/com/engine/salary/wrapper/SalaryItemWrapper.java b/src/com/engine/salary/wrapper/SalaryItemWrapper.java index cf3283b07..fcc7d91a7 100644 --- a/src/com/engine/salary/wrapper/SalaryItemWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryItemWrapper.java @@ -342,7 +342,44 @@ public class SalaryItemWrapper extends Service { return ExcelUtil.genWorkbookV2(rows, "薪资项目"); } + public Map preview(SalaryItemImportParam param) { + return getSalaryItemService(user).preview(param); + } public ImportExcelResponse importSalaryItem(SalaryItemImportParam param) { return getSalaryItemService(user).importSalaryItem(param); } + + + public XSSFWorkbook downloadTemplate(SalaryItemDownloadTemplateParam param) { + + List titles = Lists.newArrayList(); + List dataIndexList = Lists.newArrayList(); + ExcelUtil.parseHeader(SalaryItemExcelConfig.class, titles, dataIndexList); + + + + List> rows = new ArrayList<>(); + rows.add(titles); + if (param.isHasData()){ + List configs = getSalaryItemService(user).getConfig(SalaryItemExportParam.builder().build()); + configs.forEach(e -> { + List row = new ArrayList<>(); + row.add(e.getName()); + row.add(SalaryOnOffEnum.parseByValue(e.getUseDefault()).getDefaultLabel()); + row.add(SalaryOnOffEnum.parseByValue(e.getHideDefault()).getDefaultLabel()); + row.add(SalaryRoundingModeEnum.parseByValue(e.getRoundingMode()).getDefaultLabel()); + row.add(e.getPattern()); + row.add(SalaryValueTypeEnum.parseByValue(e.getValueType()).getDefaultLabel()); + row.add(SalaryDataTypeEnum.parseByValue(e.getDataType()).getDefaultLabel()); + row.add(e.getFormula() == null ? "" : e.getFormula().getFormula()); + row.add(e.getFormula() == null ? "" : JsonUtil.parseMap(Util.null2String(e.getFormula().getExtendParam()), String.class).getOrDefault("sqlReturnKey", "")); + row.add(e.getSortedIndex()); + row.add(e.getWidth()); + row.add(e.getDefaultValue()); + row.add(e.getDescription()); + rows.add(row); + }); + } + return ExcelUtil.genWorkbookV2(rows, "薪资项目"); + } }