| | |
| | | private static Logger log = LogManager.getLogger("ExercisePyService"); |
| | | |
| | | /** |
| | | * 上传解析 |
| | | * 上传解析 |
| | | */ |
| | | public Map<String, Object> parserPyExercise(String groupId, String fullPath, |
| | | String module) { |
| | |
| | | List<String> lst = generateLstFromFile(file, fullPath); |
| | | |
| | | if (null == lst || lst.isEmpty()) { |
| | | return CollectionUtils.newObjectMap("resultCode",0,"msg","文档解析内容为空"); |
| | | return CollectionUtils.newObjectMap("resultCode",0,"msg","文档解析内容为空"); |
| | | } |
| | | |
| | | return exerciseParsePy(lst, fullPath); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 校验 |
| | | * 校验 |
| | | * |
| | | * @param content |
| | | * 习题文本内容 |
| | | * 习题文本内容 |
| | | * @return |
| | | */ |
| | | public Map<String, Object> validatePyExercise(String content) { |
| | |
| | | lst.add(arrLine[i]); |
| | | } |
| | | |
| | | // 判断:是否为空 |
| | | // 判断:是否为空 |
| | | if (null == lst || lst.isEmpty()) { |
| | | return CollectionUtils.newObjectMap("resultCode",0,"msg","文档解析内容为空"); |
| | | return CollectionUtils.newObjectMap("resultCode",0,"msg","文档解析内容为空"); |
| | | } |
| | | |
| | | return exerciseParsePy(lst, "" ); |
| | |
| | | public Result doImportPyExercise(List<ExerciseItemData> lstItems,String groupId) { |
| | | |
| | | if(null == lstItems || lstItems.isEmpty()){ |
| | | return new Result(false, "没有记录"); |
| | | return new Result(false, "没有记录"); |
| | | } |
| | | |
| | | ExerciseGroupItemRe re ; |
| | |
| | | new Object[]{ iCount,ClientUtils.getUserId(), ClientUtils.getUserName(), groupId } ); |
| | | |
| | | } catch (Exception e) { |
| | | log.error("解析习题copyProperties 失败:" ,e ); |
| | | return new Result(false , "服务器内部转换错误"); |
| | | log.error("解析习题copyProperties 失败:" ,e ); |
| | | return new Result(false , "服务器内部转换错误"); |
| | | } |
| | | |
| | | return new Result(true , "成功导入" + iCount + "道习题"); |
| | | return new Result(true , "成功导入" + iCount + "道习题"); |
| | | } |
| | | |
| | | |
| | |
| | | } |
| | | |
| | | /** |
| | | * post传参 |
| | | * post传参 |
| | | * @param key |
| | | * @param size |
| | | * @return |
| | |
| | | |
| | | |
| | | /** |
| | | * 缓存版本 |
| | | * 缓存版本 |
| | | * @param key |
| | | * @param size |
| | | * @return |
| | |
| | | } |
| | | } |
| | | } catch (Exception e) { |
| | | log.error("解析练习txt文档失败:" + fullPath, e); |
| | | log.error("解析练习txt文档失败:" + fullPath, e); |
| | | } finally { |
| | | IOUtils.closeQuietly(br); |
| | | IOUtils.closeQuietly(reader); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 从office转换到txt:2007转换:自带序号格式会丢失;2003会解析出来 |
| | | * 从office转换到txt:2007转换:自带序号格式会丢失;2003会解析出来 |
| | | * |
| | | * @param file |
| | | * @return |
| | |
| | | |
| | | if ("doc".equals(fileExtention)) { |
| | | WordExtractor extractor = new WordExtractor(is); |
| | | // 获取Word文件中的文本+自带序号 |
| | | // 获取Word文件中的文本+自带序号 |
| | | strText = extractor.getText(); |
| | | extractor.close(); |
| | | } else if ("docx".equals(fileExtention)) { |
| | |
| | | .getAbsolutePath()); |
| | | POIXMLTextExtractor extractor = new XWPFWordExtractor( |
| | | opcPackage); |
| | | // 只能获取Word文件中的文本,不能取到office序号 |
| | | // 只能获取Word文件中的文本,不能取到office序号 |
| | | strText = extractor.getText(); |
| | | extractor.close(); |
| | | } else { |
| | | throw new RuntimeException("文件格式错误, 请上传word文档(.doc及.docx)格式", |
| | | throw new RuntimeException("文件格式错误, 请上传word文档(.doc及.docx)格式", |
| | | null); |
| | | } |
| | | |
| | | // 将得到的文本全角转半角 |
| | | // 将得到的文本全角转半角 |
| | | strText = formatFullToHalf(strText); |
| | | |
| | | // 解决空格保存为txt的时候,乱码为? |
| | | // 解决空格保存为txt的时候,乱码为? |
| | | byte bytes[] = { (byte) 0xC2, (byte) 0xA0 }; |
| | | String UTFSpace = new String(bytes, "UTF-8"); |
| | | strText = strText.replaceAll(UTFSpace, " "); |
| | |
| | | return txtFile.getAbsolutePath(); |
| | | |
| | | } catch (FileNotFoundException e) { |
| | | throw new RuntimeException("office文档未找到", e); |
| | | throw new RuntimeException("office文档未找到", e); |
| | | } catch (IOException e) { |
| | | throw new RuntimeException("office文档读取失败", e); |
| | | throw new RuntimeException("office文档读取失败", e); |
| | | } catch (Exception e) { |
| | | throw new RuntimeException(e.getMessage(), e); |
| | | } finally { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 全角转半角 |
| | | * 全角转半角 |
| | | * |
| | | * @param oriText |
| | | * @return |
| | |
| | | } |
| | | |
| | | char[] charArray = oriText.toCharArray(); |
| | | // 对全角字符转换的char数组遍历 |
| | | // 对全角字符转换的char数组遍历 |
| | | for (int i = 0; i < charArray.length; ++i) { |
| | | int charIntValue = (int) charArray[i]; |
| | | |
| | | // 如果符合转换关系,将对应下标之间减掉偏移量65248;如果是空格的话,直接做转换 |
| | | // 如果符合转换关系,将对应下标之间减掉偏移量65248;如果是空格的话,直接做转换 |
| | | if (charIntValue >= 65281 && charIntValue <= 65374) { |
| | | charArray[i] = (char) (charIntValue - 65248); |
| | | } else if (charIntValue == 12288) { |
| | | charArray[i] = (char) 32; |
| | | } else if (charIntValue == 58033) { |
| | | // 空格 |
| | | // 空格 |
| | | charArray[i] = (char) 32; |
| | | } else if (charIntValue == 65380) { |
| | | // 顿号 |
| | | // 顿号 |
| | | charArray[i] = (char) 12289; |
| | | } else if (charIntValue == 65377) { |
| | | // 句号 |
| | | // 句号 |
| | | charArray[i] = (char) 12290; |
| | | } |
| | | } |
| | |
| | | } |
| | | |
| | | /** |
| | | * 解析文件后缀 |
| | | * 解析文件后缀 |
| | | * |
| | | * @param filename |
| | | * @return |