ResumeController.java 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  1. package com.ruoyi.web.controller.tool;
  2. import java.text.SimpleDateFormat;
  3. import java.util.*;
  4. import javax.servlet.http.HttpServletResponse;
  5. import com.alibaba.fastjson2.JSONObject;
  6. import com.ruoyi.common.config.RuoYiConfig;
  7. import com.ruoyi.common.utils.SecurityUtils;
  8. import com.ruoyi.common.utils.StringUtils;
  9. import com.ruoyi.common.utils.file.FileUploadUtils;
  10. import com.ruoyi.framework.config.ServerConfig;
  11. import com.ruoyi.system.domain.resume.Resume;
  12. import com.ruoyi.system.domain.resume.ResumeFile;
  13. import com.ruoyi.system.service.resume.IResumeService;
  14. import com.ruoyi.utils.resumeAnalysis.FileUtils;
  15. import com.ruoyi.utils.resumeAnalysis.ResumeAnalysisUtil;
  16. import io.swagger.annotations.Api;
  17. import io.swagger.annotations.ApiOperation;
  18. import org.springframework.http.MediaType;
  19. import org.springframework.http.ResponseEntity;
  20. import org.springframework.security.access.prepost.PreAuthorize;
  21. import org.springframework.beans.factory.annotation.Autowired;
  22. import org.springframework.util.Base64Utils;
  23. import org.springframework.util.CollectionUtils;
  24. import org.springframework.web.bind.annotation.*;
  25. import com.ruoyi.common.annotation.Log;
  26. import com.ruoyi.common.core.controller.BaseController;
  27. import com.ruoyi.common.core.domain.AjaxResult;
  28. import com.ruoyi.common.enums.BusinessType;
  29. import com.ruoyi.common.utils.poi.ExcelUtil;
  30. import com.ruoyi.common.core.page.TableDataInfo;
  31. import org.springframework.web.client.RestTemplate;
  32. import org.springframework.web.multipart.MultipartFile;
  33. /**
  34. * 简历管理Controller
  35. *
  36. * @author ruoyi
  37. * @date 2024-02-18
  38. */
  39. @Api(tags = "智能简历系统")
  40. @RestController
  41. @RequestMapping("/system/resume")
  42. public class ResumeController extends BaseController
  43. {
  44. @Autowired
  45. private IResumeService resumeService;
  46. @Autowired
  47. private ServerConfig serverConfig;
  48. private static final List<String> TYPE_LIST = Arrays.asList(".jpg", ".jpe", ".jpeg", ".jfif", ".png", ".webp", ".bmp", ".tif", ".tiff");
  49. /**
  50. * 查询简历管理列表
  51. */
  52. //@PreAuthorize("@ss.hasPermi('system:resume:list')")
  53. @ApiOperation(value = "分页查询简历管理列表")
  54. @GetMapping("/list")
  55. public TableDataInfo list(Resume resume)
  56. {
  57. startPage();
  58. if (StringUtils.isNotEmpty( SecurityUtils.getLoginUser().getCorpid())){
  59. resume.setCorpId(SecurityUtils.getLoginUser().getCorpid());
  60. }
  61. List<Resume> list = resumeService.selectResumeList(resume);
  62. return getDataTable(list);
  63. }
  64. /**
  65. * 导出简历管理列表
  66. */
  67. //@PreAuthorize("@ss.hasPermi('system:resume:export')")
  68. //@Log(title = "简历管理", businessType = BusinessType.EXPORT)
  69. @PostMapping("/export")
  70. public void export(HttpServletResponse response, Resume resume)
  71. {
  72. if (StringUtils.isNotEmpty(SecurityUtils.getLoginUser().getCorpid())) {
  73. resume.setCorpId(SecurityUtils.getLoginUser().getCorpid());
  74. }
  75. List<Resume> list = resumeService.selectResumeList(resume);
  76. ExcelUtil<Resume> util = new ExcelUtil<Resume>(Resume.class);
  77. util.exportExcel(response, list, "简历管理数据");
  78. }
  79. /**
  80. * 获取简历管理详细信息
  81. */
  82. @ApiOperation(value = "查询简历管理详情")
  83. //@PreAuthorize("@ss.hasPermi('system:resume:query')")
  84. @GetMapping(value = "/{resumeId}")
  85. public AjaxResult getInfo(@PathVariable("resumeId") Long resumeId)
  86. {
  87. String corpid = SecurityUtils.getPrincipal();
  88. return success(resumeService.selectResumeByResumeId(resumeId,corpid));
  89. }
  90. /**
  91. * 新增简历管理
  92. */
  93. @ApiOperation(value = "新增简历管理")
  94. //@PreAuthorize("@ss.hasPermi('system:resume:add')")
  95. //@Log(title = "简历管理", businessType = BusinessType.INSERT)
  96. @PostMapping
  97. public AjaxResult add(@RequestBody Resume resume)
  98. {
  99. if (StringUtils.isNotEmpty(SecurityUtils.getLoginUser().getCorpid())) {
  100. resume.setCorpId(SecurityUtils.getLoginUser().getCorpid());
  101. }
  102. return toAjax(resumeService.insertResume(resume));
  103. }
  104. /**
  105. * 方法描述 上传简历并进行解析
  106. * @author
  107. * @date
  108. */
  109. @ApiOperation(value = "上传简历并进行解析")
  110. @PostMapping(value = "/uploadResumeSimilarity",consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
  111. public AjaxResult uploadResumeSimilarity(MultipartFile file) {
  112. String corpId = "";
  113. if (StringUtils.isNotEmpty(SecurityUtils.getLoginUser().getCorpid())) {
  114. corpId = SecurityUtils.getLoginUser().getCorpid();
  115. }
  116. try{
  117. if (file == null || StringUtils.isBlank(file.getOriginalFilename())) {
  118. return AjaxResult.error("请上传简历");
  119. }
  120. String path = RuoYiConfig.getUploadPath();
  121. String originalFilename = file.getOriginalFilename();
  122. String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));
  123. String fileName = FileUploadUtils.upload(path, file);
  124. String newFileName = com.ruoyi.common.utils.file.FileUtils.getName(fileName);
  125. // 上传位置
  126. SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
  127. String ymd = sdf.format(new Date());
  128. String lastPath = "/" + ymd + "/";
  129. String fileUrl = path + lastPath + newFileName;
  130. if(suffix.equals(".doc")||suffix.equals(".docx")||TYPE_LIST.contains(suffix)){
  131. List<String> content = null;
  132. try {
  133. if(suffix.equals(".doc")){
  134. content = FileUtils.readWord(fileUrl);
  135. } else if (suffix.equals(".docx")) {
  136. content = FileUtils.readWordDocx(fileUrl);
  137. }else if (TYPE_LIST.contains(suffix)){
  138. String encodeToString = Base64Utils.encodeToString(file.getBytes());
  139. RestTemplate restTemplate = new RestTemplate();
  140. Map<String,Object> map = new HashMap<>();
  141. map.put("base64",encodeToString);
  142. Map<String,Object> options = new HashMap<>();
  143. options.put("tbpu.parser","single_line");
  144. options.put("data.format","text");
  145. options.put("ocr.angle",false);
  146. options.put("ocr.language","简体中文");
  147. options.put("ocr.maxSideLen",1024);
  148. map.put("options",options);
  149. ResponseEntity<String> responseEntity = restTemplate.postForEntity(
  150. "http://127.0.0.1:1224/api/ocr", map, String.class);
  151. JSONObject parse = JSONObject.parse(responseEntity.getBody());
  152. if (100 != parse.getInteger("code")) {
  153. return AjaxResult.error("文件不存在解析失败");
  154. }
  155. content=new ArrayList<>();
  156. String[] split = parse.getString("data").split("\n");
  157. content.addAll(Arrays.asList(split));
  158. }
  159. } catch (Exception e) {
  160. return AjaxResult.error("文件不存在解析失败");
  161. }
  162. //处理标识分段,并判断内容情况
  163. Resume resume = ResumeAnalysisUtil.toResumeAnalysis(content);
  164. resume.setCorpId(corpId);
  165. //处理文件信息
  166. String url = serverConfig.getUrl() + fileName;
  167. ResumeFile resumeFile = new ResumeFile();
  168. resumeFile.setUploadPath(url);
  169. resumeFile.setUploadName(newFileName);
  170. resumeFile.setUploadType(newFileName.split("\\.")[1]);
  171. resume.setResumeFile(resumeFile);
  172. return AjaxResult.success(resume);
  173. }else{
  174. return AjaxResult.error("文件格式不正确请上传.doc或者.docx格式文件!");
  175. }
  176. } catch (Exception e) {
  177. e.printStackTrace();
  178. return AjaxResult.error("解析失败!请手动录入");
  179. }
  180. }
  181. /**
  182. * 修改简历管理
  183. */
  184. @ApiOperation(value = "修改简历管理")
  185. //@PreAuthorize("@ss.hasPermi('system:resume:edit')")
  186. //@Log(title = "简历管理", businessType = BusinessType.UPDATE)
  187. @PutMapping
  188. public AjaxResult edit(@RequestBody Resume resume)
  189. {
  190. return toAjax(resumeService.updateResume(resume));
  191. }
  192. /**
  193. * 删除简历管理
  194. */
  195. @ApiOperation(value = "删除简历管理")
  196. //@PreAuthorize("@ss.hasPermi('system:resume:remove')")
  197. //@Log(title = "简历管理", businessType = BusinessType.DELETE)
  198. @DeleteMapping("/{resumeIds}")
  199. public AjaxResult remove(@PathVariable Long[] resumeIds)
  200. {
  201. return toAjax(resumeService.deleteResumeByResumeIds(resumeIds));
  202. }
  203. }