From b081758449c9d491adf1c70a030461b24dc163fe Mon Sep 17 00:00:00 2001 From: Fixiaobai <fixiaobai@163.com> Date: 星期一, 14 八月 2023 17:59:31 +0800 Subject: [PATCH] 满意度调查word解析 人员管理 --- cnas-server/src/main/java/com/yuanchu/limslaboratory/service/impl/CnasSatisfactionSurveyServiceImpl.java | 183 ++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 179 insertions(+), 4 deletions(-) diff --git a/cnas-server/src/main/java/com/yuanchu/limslaboratory/service/impl/CnasSatisfactionSurveyServiceImpl.java b/cnas-server/src/main/java/com/yuanchu/limslaboratory/service/impl/CnasSatisfactionSurveyServiceImpl.java index 846cd7c..57fb932 100644 --- a/cnas-server/src/main/java/com/yuanchu/limslaboratory/service/impl/CnasSatisfactionSurveyServiceImpl.java +++ b/cnas-server/src/main/java/com/yuanchu/limslaboratory/service/impl/CnasSatisfactionSurveyServiceImpl.java @@ -1,15 +1,28 @@ package com.yuanchu.limslaboratory.service.impl; +import cn.hutool.core.date.DateUtil; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.yuanchu.limslaboratory.mapper.CnasSatisfactionSurveyMapper; import com.yuanchu.limslaboratory.pojo.CnasSatisfactionSurvey; -import com.yuanchu.limslaboratory.pojo.Dto.CnasSatisfactionSurveyDto; +import com.yuanchu.limslaboratory.pojo.Dto.CnasSatisfactionSurveyPageDto; import com.yuanchu.limslaboratory.pojo.vo.CnasSatisfactionSurveyVo; import com.yuanchu.limslaboratory.service.CnasSatisfactionSurveyService; +import com.yuanchu.limslaboratory.service.UserService; +import com.yuanchu.limslaboratory.utils.MultipartFileToFileUtil; +import org.apache.poi.hwpf.HWPFDocument; +import org.apache.poi.hwpf.extractor.WordExtractor; +import org.apache.poi.xwpf.extractor.XWPFWordExtractor; +import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.util.*; +import java.util.stream.Collectors; /** * @Author 寮犲 @@ -18,14 +31,176 @@ @Service public class CnasSatisfactionSurveyServiceImpl implements CnasSatisfactionSurveyService { + private static final List<String> SELECT_LIST = Arrays.asList( "鈽戞弧鎰�=0", "鈽戜竴鑸�=1", "鈽戜笉婊℃剰=2"); + @Resource private CnasSatisfactionSurveyMapper mapper; + @Resource + private UserService userService; + @Override - public CnasSatisfactionSurveyVo getCnasSatisfactionSurvey(CnasSatisfactionSurveyDto cnasSatisfactionSurveyDto) { - Page<CnasSatisfactionSurvey>page=new Page<>(cnasSatisfactionSurveyDto.getCurrentPage(), cnasSatisfactionSurveyDto.getPageNum(),true); - IPage<CnasSatisfactionSurvey> cnasSatisfactionSurveyIPage = mapper.selectCnasSatisfactionSurvey(page, cnasSatisfactionSurveyDto); + public CnasSatisfactionSurveyVo getCnasSatisfactionSurvey(CnasSatisfactionSurveyPageDto cnasSatisfactionSurveyPageDto) { + Page<CnasSatisfactionSurvey>page=new Page<>(cnasSatisfactionSurveyPageDto.getCurrentPage(), cnasSatisfactionSurveyPageDto.getPageNum(),true); + String surveyDate=DateUtil.format(cnasSatisfactionSurveyPageDto.getSurveyDate(), "yyyyMMdd"); + String entryDate=DateUtil.format(cnasSatisfactionSurveyPageDto.getEntryDate(), "yyyyMMdd");; + IPage<CnasSatisfactionSurvey> cnasSatisfactionSurveyIPage = mapper.selectCnasSatisfactionSurvey(page,surveyDate,entryDate); return new CnasSatisfactionSurveyVo(cnasSatisfactionSurveyIPage.getRecords(),cnasSatisfactionSurveyIPage.getTotal()); } + + /** + * + * @param token + * @return + */ + @Override + public Map<String, Object> getFillNameAndTd(String token) { + Map<String, Object> userInfo = userService.getUserInfo(token); + return userInfo; + } + + @Override + public Map<String, String> wordParse(MultipartFile file) { + Map<String, String>result=null; + File multipartFileToFile = null; + try { + multipartFileToFile=MultipartFileToFileUtil.multipartFileToFile(file); + result=parseWord(multipartFileToFile); + } catch (Exception e) { + e.printStackTrace(); + }finally { + MultipartFileToFileUtil.delteTempFile(multipartFileToFile); + } + return result; + } + + @Override + public Boolean addSurvey(CnasSatisfactionSurvey cnasSatisfactionSurvey) { + cnasSatisfactionSurvey.setCreatedTime(DateUtil.toLocalDateTime(DateUtil.date())); + return mapper.insert(cnasSatisfactionSurvey)>1; + } + + /** + * 瑙f瀽word + * @param file + * @return + */ + public static Map<String,String> parseWord(File file){ + String info = ""; + try { + FileInputStream fis = new FileInputStream(file); + String[] split = file.getName().split("\\."); + if ("doc".equals(split[split.length-1])) { + // 璇诲彇doc鏂囦欢 + HWPFDocument doc = new HWPFDocument(fis); + WordExtractor docExtractor = new WordExtractor(doc); + String text = docExtractor.getText(); + info = text.trim(); + docExtractor.close(); + } else if ("docx".equals(split[split.length-1])) { + // 璇诲彇docx鏂囦欢 + XWPFDocument docx = new XWPFDocument(fis); + XWPFWordExtractor docxExtractor = new XWPFWordExtractor(docx); + String text = docxExtractor.getText(); + System.out.println("docx:"); + info = text.trim(); + docxExtractor.close(); + } else { + System.out.println("涓嶆槸word鏂囦欢"); + } + fis.close(); + } catch (IOException e) { + e.printStackTrace(); + } + List<String> infoList = new ArrayList<String>(); + String[] split = info.split("\n"); + for (int i = 0; i < split.length; i++) { + if (i > 2) { + infoList.add(split[i] + .replaceAll("\r","") + .replaceAll(" ","") + .replaceAll("\t","") + .replaceAll("\\s","").replaceAll(" +","")); + } + } + Map<String, String> result = new HashMap<>(); + //绗竴琛� + String unitName="鍗曚綅鍚嶇ОUnitname"; + String projectName="椤圭洰鍚嶇ОProjectname"; + String[] one = infoList.get(0).replace(unitName, "").split(projectName); + result.put("unitName",one[0]); + result.put("projectName",one[1]); + String fillName="濉〃浜哄鍚嶏紡鏃ユ湡Name/dateofthepersonfillingintheform"; + String post="鑱屼綅Posts"; + String telephone="鑱旂郴鐢佃瘽Contactnumber"; + String email="閭紪Zip"; + String[] split1 = infoList.get(1).replace(fillName, "").split(post); + result.put("fillName",split1[0]); + String[] split2 = split1[1].split(telephone); + result.put("post",split2[0]); + String[] split3 = split2[1].split(email); + result.put("telephone",split3[0]); + result.put("email",split3[1]); + //绗簩琛� + String serviceAttitude="鏈嶅姟鎬佸害Serviceattitude"; + //鏈嶅姟鎬佸害鍜屽缓璁� + String two = getSelectAndAdvise(infoList.get(2), serviceAttitude); + result.put("serviceAttitude",two); + //绗笁琛� + String technicalPower="鎶�鏈兘鍔汿echnicalcompetence"; + String three = getSelectAndAdvise(infoList.get(3), technicalPower); + result.put("technicalPower",three); + //绗洓琛� + String testJob="妫�娴嬪伐浣淚nspectionwork"; + String four = getSelectAndAdvise(infoList.get(4), testJob); + result.put("testJob",four); + //绗簲琛� + String reasonableCharge="鏀惰垂鍚堢悊鎬easonablefees"; + String five = getSelectAndAdvise(infoList.get(5), reasonableCharge); + result.put("reasonableCharge",five); + //绗叚琛� + String improvementRequirements="鏀硅繘鐨勮姹傦細"; + String requirementsForImprovement="Requirementsforimprovement:"; + String six = infoList.get(6).replace(improvementRequirements, "").replace(requirementsForImprovement, ""); + result.put("improvementRequirements",six); + //绗竷琛� + String otherSupplements="鎮ㄥ鎴戜滑鐨勫笇鏈涳細"; + String otherEnglish="Whatyouwantfromus:"; + String seven = infoList.get(7).replace(otherSupplements, "").replace(otherEnglish, ""); + result.put("otherSupplements",seven); + return result; + } + + + /** + * 鑾峰彇閫夋嫨浠ュ強寤鸿 + * @param str + * @param type + * @return + */ + public static String getSelectAndAdvise(String str,String type){ + String adviseInfo="寤鸿锛�"; + String suggestion="Suggestion:"; + String satisfied="Satisfied"; + String general="General"; + String dissatisfied="Dissatisfied"; + String[] split4 = str.replace(type, "").replace(suggestion, "").split(adviseInfo); + List<String>select=new ArrayList<>(); + String advise=split4[1]; + String[] split5 = split4[0].split(satisfied); + select.add(split5[0]); + String[] split6 = split5[1].split(general); + select.add(split6[0]); + select.add(split6[1].replace(dissatisfied,"")); + String selected = getSelected(select); + return selected+"/$"+advise; + } + + public static String getSelected(List<String> select){ + String collect = SELECT_LIST.stream().filter(item -> select.stream() + .map(e -> e).collect(Collectors.toList()) + .contains(item.split("=")[0])).collect(Collectors.joining()); + return collect.split("=")[1]; + } } -- Gitblit v1.9.3