123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217 |
- package com.ruoyi.web.controller.tool;
- import java.text.SimpleDateFormat;
- import java.util.*;
- import javax.servlet.http.HttpServletResponse;
- import com.alibaba.fastjson2.JSONObject;
- import com.ruoyi.common.config.RuoYiConfig;
- import com.ruoyi.common.utils.SecurityUtils;
- import com.ruoyi.common.utils.StringUtils;
- import com.ruoyi.common.utils.file.FileUploadUtils;
- import com.ruoyi.framework.config.ServerConfig;
- import com.ruoyi.system.domain.resume.Resume;
- import com.ruoyi.system.domain.resume.ResumeFile;
- import com.ruoyi.system.service.resume.IResumeService;
- import com.ruoyi.utils.resumeAnalysis.FileUtils;
- import com.ruoyi.utils.resumeAnalysis.ResumeAnalysisUtil;
- import io.swagger.annotations.Api;
- import io.swagger.annotations.ApiOperation;
- import org.springframework.http.MediaType;
- import org.springframework.http.ResponseEntity;
- import org.springframework.security.access.prepost.PreAuthorize;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.util.Base64Utils;
- import org.springframework.util.CollectionUtils;
- import org.springframework.web.bind.annotation.*;
- import com.ruoyi.common.annotation.Log;
- import com.ruoyi.common.core.controller.BaseController;
- import com.ruoyi.common.core.domain.AjaxResult;
- import com.ruoyi.common.enums.BusinessType;
- import com.ruoyi.common.utils.poi.ExcelUtil;
- import com.ruoyi.common.core.page.TableDataInfo;
- import org.springframework.web.client.RestTemplate;
- import org.springframework.web.multipart.MultipartFile;
- /**
- * 简历管理Controller
- *
- * @author ruoyi
- * @date 2024-02-18
- */
- @Api(tags = "智能简历系统")
- @RestController
- @RequestMapping("/system/resume")
- public class ResumeController extends BaseController
- {
- @Autowired
- private IResumeService resumeService;
- @Autowired
- private ServerConfig serverConfig;
- private static final List<String> TYPE_LIST = Arrays.asList(".jpg", ".jpe", ".jpeg", ".jfif", ".png", ".webp", ".bmp", ".tif", ".tiff");
- /**
- * 查询简历管理列表
- */
- //@PreAuthorize("@ss.hasPermi('system:resume:list')")
- @ApiOperation(value = "分页查询简历管理列表")
- @GetMapping("/list")
- public TableDataInfo list(Resume resume)
- {
- startPage();
- if (StringUtils.isNotEmpty( SecurityUtils.getLoginUser().getCorpid())){
- resume.setCorpId(SecurityUtils.getLoginUser().getCorpid());
- }
- List<Resume> list = resumeService.selectResumeList(resume);
- return getDataTable(list);
- }
- /**
- * 导出简历管理列表
- */
- //@PreAuthorize("@ss.hasPermi('system:resume:export')")
- //@Log(title = "简历管理", businessType = BusinessType.EXPORT)
- @PostMapping("/export")
- public void export(HttpServletResponse response, Resume resume)
- {
- if (StringUtils.isNotEmpty(SecurityUtils.getLoginUser().getCorpid())) {
- resume.setCorpId(SecurityUtils.getLoginUser().getCorpid());
- }
- List<Resume> list = resumeService.selectResumeList(resume);
- ExcelUtil<Resume> util = new ExcelUtil<Resume>(Resume.class);
- util.exportExcel(response, list, "简历管理数据");
- }
- /**
- * 获取简历管理详细信息
- */
- @ApiOperation(value = "查询简历管理详情")
- //@PreAuthorize("@ss.hasPermi('system:resume:query')")
- @GetMapping(value = "/{resumeId}")
- public AjaxResult getInfo(@PathVariable("resumeId") Long resumeId)
- {
- String corpid = SecurityUtils.getPrincipal();
- return success(resumeService.selectResumeByResumeId(resumeId,corpid));
- }
- /**
- * 新增简历管理
- */
- @ApiOperation(value = "新增简历管理")
- //@PreAuthorize("@ss.hasPermi('system:resume:add')")
- //@Log(title = "简历管理", businessType = BusinessType.INSERT)
- @PostMapping
- public AjaxResult add(@RequestBody Resume resume)
- {
- if (StringUtils.isNotEmpty(SecurityUtils.getLoginUser().getCorpid())) {
- resume.setCorpId(SecurityUtils.getLoginUser().getCorpid());
- }
- return toAjax(resumeService.insertResume(resume));
- }
- /**
- * 方法描述 上传简历并进行解析
- * @author
- * @date
- */
- @ApiOperation(value = "上传简历并进行解析")
- @PostMapping(value = "/uploadResumeSimilarity",consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
- public AjaxResult uploadResumeSimilarity(MultipartFile file) {
- String corpId = "";
- if (StringUtils.isNotEmpty(SecurityUtils.getLoginUser().getCorpid())) {
- corpId = SecurityUtils.getLoginUser().getCorpid();
- }
- try{
- if (file == null || StringUtils.isBlank(file.getOriginalFilename())) {
- return AjaxResult.error("请上传简历");
- }
- String path = RuoYiConfig.getUploadPath();
- String originalFilename = file.getOriginalFilename();
- String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));
- String fileName = FileUploadUtils.upload(path, file);
- String newFileName = com.ruoyi.common.utils.file.FileUtils.getName(fileName);
- // 上传位置
- SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
- String ymd = sdf.format(new Date());
- String lastPath = "/" + ymd + "/";
- String fileUrl = path + lastPath + newFileName;
- if(suffix.equals(".doc")||suffix.equals(".docx")||TYPE_LIST.contains(suffix)){
- List<String> content = null;
- try {
- if(suffix.equals(".doc")){
- content = FileUtils.readWord(fileUrl);
- } else if (suffix.equals(".docx")) {
- content = FileUtils.readWordDocx(fileUrl);
- }else if (TYPE_LIST.contains(suffix)){
- String encodeToString = Base64Utils.encodeToString(file.getBytes());
- RestTemplate restTemplate = new RestTemplate();
- Map<String,Object> map = new HashMap<>();
- map.put("base64",encodeToString);
- Map<String,Object> options = new HashMap<>();
- options.put("tbpu.parser","single_line");
- options.put("data.format","text");
- options.put("ocr.angle",false);
- options.put("ocr.language","简体中文");
- options.put("ocr.maxSideLen",1024);
- map.put("options",options);
- ResponseEntity<String> responseEntity = restTemplate.postForEntity(
- "http://127.0.0.1:1224/api/ocr", map, String.class);
- JSONObject parse = JSONObject.parse(responseEntity.getBody());
- if (100 != parse.getInteger("code")) {
- return AjaxResult.error("文件不存在解析失败");
- }
- content=new ArrayList<>();
- String[] split = parse.getString("data").split("\n");
- content.addAll(Arrays.asList(split));
- }
- } catch (Exception e) {
- return AjaxResult.error("文件不存在解析失败");
- }
- //处理标识分段,并判断内容情况
- Resume resume = ResumeAnalysisUtil.toResumeAnalysis(content);
- resume.setCorpId(corpId);
- //处理文件信息
- String url = serverConfig.getUrl() + fileName;
- ResumeFile resumeFile = new ResumeFile();
- resumeFile.setUploadPath(url);
- resumeFile.setUploadName(newFileName);
- resumeFile.setUploadType(newFileName.split("\\.")[1]);
- resume.setResumeFile(resumeFile);
- return AjaxResult.success(resume);
- }else{
- return AjaxResult.error("文件格式不正确请上传.doc或者.docx格式文件!");
- }
- } catch (Exception e) {
- e.printStackTrace();
- return AjaxResult.error("解析失败!请手动录入");
- }
- }
- /**
- * 修改简历管理
- */
- @ApiOperation(value = "修改简历管理")
- //@PreAuthorize("@ss.hasPermi('system:resume:edit')")
- //@Log(title = "简历管理", businessType = BusinessType.UPDATE)
- @PutMapping
- public AjaxResult edit(@RequestBody Resume resume)
- {
- return toAjax(resumeService.updateResume(resume));
- }
- /**
- * 删除简历管理
- */
- @ApiOperation(value = "删除简历管理")
- //@PreAuthorize("@ss.hasPermi('system:resume:remove')")
- //@Log(title = "简历管理", businessType = BusinessType.DELETE)
- @DeleteMapping("/{resumeIds}")
- public AjaxResult remove(@PathVariable Long[] resumeIds)
- {
- return toAjax(resumeService.deleteResumeByResumeIds(resumeIds));
- }
- }
|