From 4fe9de70ae6bc4315774d005b7abbcc74ada2a21 Mon Sep 17 00:00:00 2001 From: zhuyy Date: Thu, 20 Jul 2023 14:13:04 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AF=BC=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 28 ++++ .../controller/RecruitmentController.java | 10 +- .../ydool/staff/dto/ExportRecruitmentDto.java | 26 ++++ .../ydool/staff/dto/RecruitmentListDto.java | 26 ++++ .../ydool/staff/excel/ExcelRecruitment.java | 33 +++++ .../staff/service/IRecruitmentService.java | 8 +- .../service/impl/RecruitmentServiceImpl.java | 126 +++++++++++++++++- .../doc/象山县国有企业人员招聘报备表.docx | Bin 0 -> 13811 bytes 8 files changed, 247 insertions(+), 10 deletions(-) create mode 100644 src/main/java/com/ydool/staff/dto/ExportRecruitmentDto.java create mode 100644 src/main/java/com/ydool/staff/dto/RecruitmentListDto.java create mode 100644 src/main/java/com/ydool/staff/excel/ExcelRecruitment.java create mode 100644 src/main/resources/doc/象山县国有企业人员招聘报备表.docx diff --git a/pom.xml b/pom.xml index 4590b34..24179ef 100644 --- a/pom.xml +++ b/pom.xml @@ -233,6 +233,34 @@ 1.1.0 + + org.apache.poi + ooxml-schemas + 1.1 + + + cn.afterturn + easypoi-base + 4.1.2 + + + cn.afterturn + easypoi-web + 4.1.2 + + + cn.afterturn + easypoi-annotation + 4.1.2 + + + + + org.docx4j + docx4j-export-fo + 6.1.0 + + diff --git a/src/main/java/com/ydool/staff/controller/RecruitmentController.java b/src/main/java/com/ydool/staff/controller/RecruitmentController.java index ed30e6b..7bff0b1 100644 --- a/src/main/java/com/ydool/staff/controller/RecruitmentController.java +++ b/src/main/java/com/ydool/staff/controller/RecruitmentController.java @@ -1,6 +1,5 @@ package com.ydool.staff.controller; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import com.github.xiaoymin.knife4j.annotations.ApiSupport; import com.github.xiaoymin.knife4j.annotations.DynamicParameter; @@ -9,7 +8,6 @@ import com.ydool.common.base.BaseController; import com.ydool.common.constant.UrlConstant; import com.ydool.common.data.dto.AjaxResult; import com.ydool.staff.dto.RecruitmentDto; -import com.ydool.staff.entity.Audit; import com.ydool.staff.request.RecruitmentRequest; import com.ydool.staff.service.IAuditService; import com.ydool.staff.service.IRecruitmentService; @@ -20,6 +18,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; @RestController @RequestMapping(UrlConstant.RECRUITMENT) @@ -65,4 +65,10 @@ public class RecruitmentController extends BaseController { public AjaxResult waiting() { return auditService.waitingAudit(getPage()); } + + @GetMapping + @ApiOperation("招聘导出") + public void export(String id, HttpServletRequest request, HttpServletResponse response) { + recruitmentService.export(id, request, response); + } } diff --git a/src/main/java/com/ydool/staff/dto/ExportRecruitmentDto.java b/src/main/java/com/ydool/staff/dto/ExportRecruitmentDto.java new file mode 100644 index 0000000..6d1eb1b --- /dev/null +++ b/src/main/java/com/ydool/staff/dto/ExportRecruitmentDto.java @@ -0,0 +1,26 @@ +package com.ydool.staff.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class ExportRecruitmentDto { + + private String id; + + @ApiModelProperty(value = "企业名称") + private String companyName; + + @ApiModelProperty(value = "原核定用工指标人数") + private Long checkNumber; + + @ApiModelProperty(value = "在职人数") + private Long activeStaff; + + @ApiModelProperty(value = "剩余指标人数") + private Long residualNumber; + + private List recruitmentListDtoList; +} diff --git a/src/main/java/com/ydool/staff/dto/RecruitmentListDto.java b/src/main/java/com/ydool/staff/dto/RecruitmentListDto.java new file mode 100644 index 0000000..131c1e5 --- /dev/null +++ b/src/main/java/com/ydool/staff/dto/RecruitmentListDto.java @@ -0,0 +1,26 @@ +package com.ydool.staff.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class RecruitmentListDto { + + private String id; + + @ApiModelProperty(value = "部门") + private String deptId; + + @ApiModelProperty(value = "岗位职务") + private String position; + + @ApiModelProperty(value = "名额") + private Long places; + + @ApiModelProperty(value = "条件要求") + private String requirements; +} diff --git a/src/main/java/com/ydool/staff/excel/ExcelRecruitment.java b/src/main/java/com/ydool/staff/excel/ExcelRecruitment.java new file mode 100644 index 0000000..9b5cb2a --- /dev/null +++ b/src/main/java/com/ydool/staff/excel/ExcelRecruitment.java @@ -0,0 +1,33 @@ +package com.ydool.staff.excel; + +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.alibaba.excel.annotation.write.style.HeadStyle; +import lombok.Data; +import org.apache.poi.ss.usermodel.HorizontalAlignment; +import org.apache.poi.ss.usermodel.VerticalAlignment; + +@Data +@HeadRowHeight(20) +@ColumnWidth(20) +@HeadStyle(horizontalAlignment = HorizontalAlignment.CENTER) +@ContentStyle(verticalAlignment = VerticalAlignment.CENTER) +public class ExcelRecruitment { + + @ExcelProperty("企业名称") + private String companyId; + + @ExcelProperty("部门") + private String deptId; + + @ExcelProperty("岗位") + private String position; + + @ExcelProperty("名额") + private Long places; + + @ExcelProperty("要求") + private String requirements; +} diff --git a/src/main/java/com/ydool/staff/service/IRecruitmentService.java b/src/main/java/com/ydool/staff/service/IRecruitmentService.java index f09811a..c299fe3 100644 --- a/src/main/java/com/ydool/staff/service/IRecruitmentService.java +++ b/src/main/java/com/ydool/staff/service/IRecruitmentService.java @@ -1,13 +1,11 @@ package com.ydool.staff.service; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ydool.common.data.dto.AjaxResult; -import com.ydool.staff.entity.Recruitment; import com.ydool.staff.request.RecruitmentRequest; -import com.ydool.staff.request.RecruitmentSearch; import com.ydool.system.request.IdsRequest; -import java.util.List; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; public interface IRecruitmentService { @@ -32,4 +30,6 @@ public interface IRecruitmentService { */ AjaxResult selectRecruitmentById(String id); + void export(String id, HttpServletRequest request, HttpServletResponse response); + } diff --git a/src/main/java/com/ydool/staff/service/impl/RecruitmentServiceImpl.java b/src/main/java/com/ydool/staff/service/impl/RecruitmentServiceImpl.java index f551847..6c6ed4d 100644 --- a/src/main/java/com/ydool/staff/service/impl/RecruitmentServiceImpl.java +++ b/src/main/java/com/ydool/staff/service/impl/RecruitmentServiceImpl.java @@ -1,17 +1,21 @@ package com.ydool.staff.service.impl; +import cn.afterturn.easypoi.word.WordExportUtil; import cn.dev33.satoken.stp.StpUtil; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DateUtil; -import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.spire.doc.Document; +import com.spire.doc.FileFormat; import com.ydool.common.cache.ConfigCache; import com.ydool.common.constant.ArgsConst; import com.ydool.common.data.dto.AjaxResult; +import com.ydool.common.exception.ResultException; import com.ydool.staff.dto.RecruitmentDto; import com.ydool.staff.entity.*; import com.ydool.common.base.BaseService; @@ -25,14 +29,20 @@ import com.ydool.system.entity.User; import com.ydool.system.mapper.ConfigMapper; import com.ydool.system.mapper.UserMapper; import com.ydool.system.request.IdsRequest; +import com.ydool.system.service.impl.DeptServiceImpl; +import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.Assert; -import java.util.Arrays; -import java.util.List; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.*; +import java.net.URLDecoder; +import java.net.URLEncoder; +import java.util.*; import java.util.concurrent.atomic.AtomicInteger; -import java.util.stream.Collectors; /** *

@@ -47,6 +57,7 @@ public class RecruitmentServiceImpl extends BaseService params) { + org.springframework.util.Assert.notNull(templatePath, "模板路径不能为空"); + org.springframework.util.Assert.notNull(saveDir, "临时文件路径不能为空"); + org.springframework.util.Assert.notNull(fileName, "导出文件名不能为空"); + Assert.isTrue(fileName.endsWith(".docx"), "word导出请使用docx格式"); + if (!saveDir.endsWith("/")) { + saveDir = saveDir + File.separator; + } + + File dir = new File(saveDir); + if (!dir.exists()) { + dir.mkdirs(); + } + String savePath = saveDir + fileName; + + try { + XWPFDocument doc = WordExportUtil.exportWord07(templatePath, params); + FileOutputStream fos = new FileOutputStream(savePath); + doc.write(fos); + fos.flush(); + fos.close(); + } catch (Exception e) { + e.printStackTrace(); + } + return savePath; + } } diff --git a/src/main/resources/doc/象山县国有企业人员招聘报备表.docx b/src/main/resources/doc/象山县国有企业人员招聘报备表.docx new file mode 100644 index 0000000000000000000000000000000000000000..aacd0e539232c443f816e2c77ae53b3dffc315ae GIT binary patch literal 13811 zcmeIZWmKHW);8S1ArRc%0>RxSXprFU!JWnl?h-tW1$TnG2X}XOcXtW!_RO5~%uLRF z-&*hc_c?d3b+7KKx^{Qhx@y<8ckNqV8WIWv00V#n005)_kP&^F@hboz6&e6Q2f#sS zi2!XJjcpwDlwEC&9dsBzTU(K2K|xSw03g8Q|9kx}o`LGvLD^0w6tP>0pCViIQcIQZ z;n z$P=Gh-rIOkOc*HF!^r`==HcG(rWH)AmlsHY{NGk*qKX&vGq`6Ry!c*&SEru6v6TZO z!*BQhuFC(#OYtv%y%;1T4atlWbn5p)I@HX&NJBQUtSh=FWAyY&gyqpU85vYi`?5kE z$}m+EOvLKC+s`U8liW-=P20=%S*^X2TBu@j1+lbft-)1&$xljnWNeR6&2|kc`QgIg zsf%3FM(PO#G=PynvnSR;XfVOAB^8K#bRlz?P1)Z&r%&=EOt@J{2V{CSdC#w3SW-Y@ zGmM$PgK~#a3tSYsY@X#El#S%`ZNhdA8Yb&nA~x=u%nvf?RrEc7U`{|+gcB2oB;wRe zwYj>jHq+>fMzJ7vUD+jPrmE)K4bA&PoXkm#lvH++GJMT#eZ}yl?xlE_^|B-&CQ73f z@}HJVvsZw`B6wf(5dr{E!E@vSv^Qcj0vbA5gLkywwz4B_4Iq9mp*LgnDG7>e&23AF zMEivlVvdh~?(n5OH$~k_(GL+qBnSx^O|4Q)US9$#0konTbZDXFd`bLnP&6_+gQVa+ zt)mGth-`MlUQ*K8oZr^DboJ-1_prB#>2*&sZID166oFdR&^@A4+R)G|r5c(fjpWgv zC(9Gu%&fb@-Nn?6#(wuhG`6fjhNhcj&iE=!X=|Le00+1Z$Ev|vp7a6{GgJ5umBTjq zrOTi^o_I@@b=PSYxFXGI<@a=2vVj?rp;zfv;5j_ZI=={Q$f-|6k=2n5QniaUp2CH! z4A4{~fKzqDnVKUZAVu9^LP>>y8;;Hk%KTQ5`58iq9jYr2LRcAz)NVi8;BD`Bk*wga z0ge(wOrURX%q3F8^`YymK4lFQZsQ<`YJ3;R33X`DPZw#cg{Y~_v$Vz32YEnco9%34 zU}Wm*K=~JhN06Wdsl4J*`XXO^|FM&~O8>=S`T5(G)tKPNMt+|(D|NOMQ6J3wA4~^_ z6ze);%_uxr>6QVIj$I!H9S@V1uiuDkvMFmsy^oJHYy)L}IF7fb$t>U>t-*v~z5>KV z6Az4xK@LQH$mxTc=t5a0l9b@$F%kXZ%T~{6OEYuDoFKL5K?ZPx^HCG(=qBqx5kV9_ z*5K?JM@v!(K$n2tG~@44g!fz{VfF;rK&u`YW{#oi!7r)#O6l1B2#rK-|14^!Q?HU8 z^}*SiMdb5f1)ejqOfurJ@F*q2=9&>=@mR(~#8PVbx9&y*ayj$-`Pb}|_OX?b)WSQ= z!E7EQ34mv@P(Sn+)Z)8s^%;k`UL!1dWtCc*BCZ+*!sHsv4-G!Cpn>f^0xAdGR*Vu! zlmvuzVw&MBxKev_0TEDO%6pb>8--WOaY1kFWX^V@4D=jr{Y=l&vNI|wr4cTUje^>` zz2&nZJ`_#s%kM$yED4G^v4zowln3qk!3eH9^s{7!xlOU7j{`8U2TJpxLPq^HM>?QS z&z&tdO@Wv3E}P#?VO?wq5j8(r!qMFpThh{?#T)~$xui*|m|Tn~_zLv(&j>o1(Grp+ zaP(!;nGEWQnAy|b#M54U6pGI)#^C2suC{{M4Y?ci%1d#9of{lO?YvaS@-#-LmUw6{ zN96snxN=f@d(ODB+&R-6vD5D6a4LJ*kA506s^$G-QRAh_>Gf?>3DYYk8gJyd%$oF0;SW)^(>)JmLE@2k zO@Wza?baz@UuWB@s�Wu>kjxAWuoMAM)FP2AaU#F`~-kN6+Z6ohi9n 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 literal 0 HcmV?d00001