diff --git a/pom.xml b/pom.xml
index 9c71e50..f1dff9d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -27,7 +27,7 @@
2.0.43
6.6.1
2.13.0
- 4.1.2
+ 5.2.2
2.3
0.9.1
3.5.1
@@ -121,6 +121,16 @@
poi-ooxml
${poi.version}
+
+ org.apache.poi
+ poi
+ ${poi.version}
+
+
+ org.apache.poi
+ poi-ooxml-schemas
+ ${poi.version}
+
diff --git a/ruoyi-bussiness/pom.xml b/ruoyi-bussiness/pom.xml
index 3ccfa26..6ab2cd7 100644
--- a/ruoyi-bussiness/pom.xml
+++ b/ruoyi-bussiness/pom.xml
@@ -111,6 +111,12 @@
org.springframework.boot
spring-boot-starter-websocket
+
+ com.deepoove
+ poi-tl
+ 1.12.2
+ compile
+
\ No newline at end of file
diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/app/AppUserController.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/app/AppUserController.java
index 33942dc..d4dbc7c 100644
--- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/app/AppUserController.java
+++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/app/AppUserController.java
@@ -1,6 +1,13 @@
package com.ruoyi.cms.controller.app;
+import com.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.config.Configure;
+import com.deepoove.poi.plugin.table.LoopRowTableRenderPolicy;
+import com.deepoove.poi.util.PoitlIOUtils;
import com.ruoyi.cms.domain.AppReviewJob;
+import com.ruoyi.cms.util.DictUtils;
+import com.ruoyi.cms.util.StringUtil;
+import com.ruoyi.common.core.domain.entity.AppSkill;
import com.ruoyi.common.core.domain.entity.AppUser;
import com.ruoyi.common.core.domain.entity.Company;
import com.ruoyi.cms.domain.Job;
@@ -11,6 +18,7 @@ import com.ruoyi.common.annotation.BussinessLog;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.cms.domain.vo.AppUserLky;
+import com.ruoyi.common.core.domain.entity.UserWorkExperiences;
import com.ruoyi.common.core.domain.model.RegisterBody;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.utils.DateUtils;
@@ -21,9 +29,13 @@ import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
+import javax.servlet.http.HttpServletResponse;
+import java.io.BufferedOutputStream;
+import java.io.OutputStream;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
+import java.util.Map;
/**
* app用户Controller
@@ -180,4 +192,63 @@ public class AppUserController extends BaseController
appReviewJob.setUserId(SiteSecurityUtils.getUserId());
return toAjax(appReviewJobService.insertAppReviewJob(appReviewJob));
}
+
+ @ApiOperation("生成简历")
+ @GetMapping("/createResume")
+ public void createResume(HttpServletResponse response){
+ try {
+ Long userId=null;
+ if(SiteSecurityUtils.isLogin()){
+ userId=SiteSecurityUtils.getUserId();
+ }
+ String templatePath="/data/downloadmodel/简历.docx";
+ AppUser result=appUserService.selectAppUserByUserId(userId);
+ Map dataMap = new HashMap<>();
+ dataMap.put("name", result.getName());
+ dataMap.put("sex", DictUtils.getDictLabel("app_sex",result.getSex()));
+ dataMap.put("birthDate", StringUtil.getBirthDateFromIdCard(result.getIdCard()));
+ dataMap.put("education", DictUtils.getDictLabel("education",result.getEducation()));
+ dataMap.put("politicalAffiliation", DictUtils.getDictLabel("political_affiliation",result.getPoliticalAffiliation()));
+ dataMap.put("nation", DictUtils.getDictLabel("nation",result.getNation()));
+ dataMap.put("domicileAddress", result.getDomicileAddress());
+ dataMap.put("address", result.getAddress());
+ String salary=result.getSalaryMin()+"-"+result.getSalaryMax();
+ dataMap.put("salary", salary);
+ dataMap.put("area", DictUtils.getDictLabel("area",result.getArea()));
+ dataMap.put("jobTitle", String.join(",",result.getJobTitle()));
+
+ LoopRowTableRenderPolicy policy = new LoopRowTableRenderPolicy();
+ Configure builder = Configure.builder()
+ .bind("workExperiences",policy)
+ .bind("skillList",policy)
+ .build();
+
+ List userWorkExperiences = result.getExperiencesList();
+ List skillList=result.getAppSkillsList();
+ skillList.forEach(it->it.setLevels(DictUtils.getDictLabel("skill_level",it.getLevels())));
+
+ dataMap.put("workExperiences", userWorkExperiences);
+ dataMap.put("skillList", skillList);
+
+ String name=result.getName();
+ name = new String(name.getBytes("gb2312"), "ISO8859-1");
+ XWPFTemplate template = XWPFTemplate.compile(templatePath,builder).render(dataMap);
+
+ response.setCharacterEncoding("utf-8");
+ response.setContentType("application/octet-stream");
+ response.setHeader("Content-Disposition", "attachment; filename="+ name);
+ response.setHeader("Pragma", "public");
+ response.setHeader("Cache-Control", "max-age=0");
+
+ OutputStream out = response.getOutputStream();
+ BufferedOutputStream bos = new BufferedOutputStream(out);
+ template.write(bos);
+ bos.flush();
+ out.flush();
+ PoitlIOUtils.closeQuietlyMulti(template, bos, out);
+
+ }catch (Exception e){
+ e.printStackTrace();
+ }
+ }
}
diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsAppUserController.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsAppUserController.java
index 8748220..5bf7291 100644
--- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsAppUserController.java
+++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/cms/CmsAppUserController.java
@@ -1,10 +1,14 @@
package com.ruoyi.cms.controller.cms;
-import java.util.Date;
-import java.util.List;
-import java.util.Objects;
+import java.io.BufferedOutputStream;
+import java.io.OutputStream;
+import java.util.*;
import javax.servlet.http.HttpServletResponse;
+import com.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.config.Configure;
+import com.deepoove.poi.plugin.table.LoopRowTableRenderPolicy;
+import com.deepoove.poi.util.PoitlIOUtils;
import com.ruoyi.cms.domain.AppReviewJob;
import com.ruoyi.cms.domain.vo.AppUserLky;
import com.ruoyi.cms.service.IAppReviewJobService;
@@ -13,11 +17,13 @@ import com.ruoyi.cms.util.RoleUtils;
import com.ruoyi.cms.util.StringUtil;
import com.ruoyi.common.annotation.Anonymous;
import com.ruoyi.common.annotation.BussinessLog;
+import com.ruoyi.common.core.domain.entity.AppSkill;
import com.ruoyi.common.core.domain.entity.AppUserShow;
+import com.ruoyi.common.core.domain.entity.UserWorkExperiences;
import com.ruoyi.common.core.domain.model.RegisterBody;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.SecurityUtils;
-import com.ruoyi.common.utils.SiteSecurityUtils;
+import com.ruoyi.cms.util.DictUtils;
import com.ruoyi.common.utils.StringUtils;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
@@ -297,4 +303,63 @@ public class CmsAppUserController extends BaseController
return error("查询简历失败,请稍后重试");
}
}
+
+ @ApiOperation("生成简历")
+ @GetMapping("/createResume")
+ public void createResume(HttpServletResponse response){
+ try {
+ Long userId=null;
+ if(SecurityUtils.isLogin()){
+ userId=SecurityUtils.getUserId();
+ }
+ String templatePath="/data/downloadmodel/简历.docx";
+ AppUser result=appUserService.selectAppUserByUserId(userId);
+ Map dataMap = new HashMap<>();
+ dataMap.put("name", result.getName());
+ dataMap.put("sex", DictUtils.getDictLabel("app_sex",result.getSex()));
+ dataMap.put("birthDate", StringUtil.getBirthDateFromIdCard(result.getIdCard()));
+ dataMap.put("education", DictUtils.getDictLabel("education",result.getEducation()));
+ dataMap.put("politicalAffiliation", DictUtils.getDictLabel("political_affiliation",result.getPoliticalAffiliation()));
+ dataMap.put("nation", DictUtils.getDictLabel("nation",result.getNation()));
+ dataMap.put("domicileAddress", result.getDomicileAddress());
+ dataMap.put("address", result.getAddress());
+ String salary=result.getSalaryMin()+"-"+result.getSalaryMax();
+ dataMap.put("salary", salary);
+ dataMap.put("area", DictUtils.getDictLabel("area",result.getArea()));
+ dataMap.put("jobTitle", String.join(",",result.getJobTitle()));
+
+ LoopRowTableRenderPolicy policy = new LoopRowTableRenderPolicy();
+ Configure builder = Configure.builder()
+ .bind("workExperiences",policy)
+ .bind("skillList",policy)
+ .build();
+
+ List userWorkExperiences = result.getExperiencesList();
+ List skillList=result.getAppSkillsList();
+ skillList.forEach(it->it.setLevels(DictUtils.getDictLabel("skill_level",it.getLevels())));
+
+ dataMap.put("workExperiences", userWorkExperiences);
+ dataMap.put("skillList", skillList);
+
+ String name=result.getName();
+ name = new String(name.getBytes("gb2312"), "ISO8859-1");
+ XWPFTemplate template = XWPFTemplate.compile(templatePath,builder).render(dataMap);
+
+ response.setCharacterEncoding("utf-8");
+ response.setContentType("application/octet-stream");
+ response.setHeader("Content-Disposition", "attachment; filename="+ name);
+ response.setHeader("Pragma", "public");
+ response.setHeader("Cache-Control", "max-age=0");
+
+ OutputStream out = response.getOutputStream();
+ BufferedOutputStream bos = new BufferedOutputStream(out);
+ template.write(bos);
+ bos.flush();
+ out.flush();
+ PoitlIOUtils.closeQuietlyMulti(template, bos, out);
+
+ }catch (Exception e){
+ e.printStackTrace();
+ }
+ }
}
diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/DictUtils.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/DictUtils.java
index 1f24961..e4ffb76 100644
--- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/DictUtils.java
+++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/DictUtils.java
@@ -103,7 +103,7 @@ public class DictUtils
{
for (String value : dictValue.split(separator))
{
- if (value.equals(dict.getDictValue()))
+ if (value.trim().equals(dict.getDictValue().trim()))
{
propertyString.append(dict.getDictLabel()).append(separator);
break;
@@ -115,7 +115,7 @@ public class DictUtils
{
for (BussinessDictData dict : datas)
{
- if (dictValue.equals(dict.getDictValue()))
+ if (dictValue.trim().equals(dict.getDictValue().trim()))
{
return dict.getDictLabel();
}
diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/StringUtil.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/StringUtil.java
index 2507870..2404908 100644
--- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/StringUtil.java
+++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/StringUtil.java
@@ -3,6 +3,7 @@ package com.ruoyi.cms.util;
import com.ruoyi.common.utils.StringUtils;
import javax.servlet.http.HttpServletRequest;
+import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
@@ -315,4 +316,31 @@ public class StringUtil {
.filter(StringUtils::hasText)
.collect(Collectors.toList());
}
+
+ /**
+ * 从身份证号码中提取出生日期,格式化为 YYYY-MM-DD
+ * @param idCard 身份证号码(15位或18位)
+ * @return 格式化后的出生日期,解析失败返回空字符串
+ */
+ public static String getBirthDateFromIdCard(String idCard) {
+ if (idCard == null || (idCard.length() != 15 && idCard.length() != 18)) {
+ return "";
+ }
+ String birthDateStr = "";
+ try {
+ if (idCard.length() == 18) {
+ birthDateStr = idCard.substring(6, 14);
+ } else if (idCard.length() == 15) {
+ birthDateStr = "20" + idCard.substring(6, 12);
+ }
+
+ SimpleDateFormat sdfInput = new SimpleDateFormat("yyyyMMdd");
+ SimpleDateFormat sdfOutput = new SimpleDateFormat("yyyy-MM-dd");
+ Date birthDate = sdfInput.parse(birthDateStr);
+ return sdfOutput.format(birthDate);
+
+ } catch (Exception e) {
+ return "";
+ }
+ }
}