BookPageServiceImpl.java 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. package com.hssx.bms.service.impl;
  2. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  3. import com.hssx.bms.entity.Book;
  4. import com.hssx.bms.entity.BookCategory;
  5. import com.hssx.bms.entity.BookPage;
  6. import com.hssx.bms.mapper.BookCategoryMapper;
  7. import com.hssx.bms.mapper.BookPageMapper;
  8. import com.hssx.bms.service.BookPageService;
  9. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  10. import com.hssx.bms.until.HttpRespMsg;
  11. import com.hssx.bms.until.UploadFileToFileNameUtil;
  12. import net.lingala.zip4j.core.ZipFile;
  13. import net.lingala.zip4j.exception.ZipException;
  14. import net.lingala.zip4j.model.FileHeader;
  15. import org.springframework.beans.factory.annotation.Value;
  16. import org.springframework.stereotype.Service;
  17. import org.springframework.web.multipart.MultipartFile;
  18. import javax.annotation.Resource;
  19. import java.io.File;
  20. import java.util.List;
  21. /**
  22. * <p>
  23. * 服务实现类
  24. * </p>
  25. *
  26. * @author 吴涛涛
  27. * @since 2019-10-16
  28. */
  29. @Service
  30. public class BookPageServiceImpl extends ServiceImpl<BookPageMapper, BookPage> implements BookPageService {
  31. @Value("${upload.path}")
  32. private String path;
  33. @Resource
  34. private BookCategoryMapper bookCategoryMapper;
  35. @Resource
  36. private BookPageMapper bookPageMapper;
  37. @Override
  38. public HttpRespMsg addBookPage(BookPage bookPage, MultipartFile file) {
  39. HttpRespMsg msg = new HttpRespMsg();
  40. if(file != null){
  41. //上传之前删除数据
  42. Integer count = bookPageMapper.delete(new QueryWrapper<BookPage>().eq("book_id", bookPage.getBookId()));
  43. String fileName = UploadFileToFileNameUtil.uploadFile(file, path);
  44. String filePath = path.substring(0, path.length() - "/upload/".length()) + fileName;
  45. try {
  46. Unzip4j1(filePath,path+bookPage.getBookId(),bookPage);
  47. } catch (ZipException e) {
  48. e.printStackTrace();
  49. }
  50. }
  51. return msg;
  52. }
  53. // 解压方法2
  54. public void Unzip4j1(String zipFile,String folderPath,BookPage bookPage) throws ZipException {
  55. long startTime = System.currentTimeMillis();
  56. File folder = new File(folderPath);
  57. deleteDir(folder);
  58. ZipFile zipFile2 = new ZipFile(zipFile);
  59. //设置编码格式
  60. zipFile2.setFileNameCharset("GBK");
  61. if (!zipFile2.isValidZipFile()) {
  62. throw new ZipException("文件不合法或不存在");
  63. }
  64. //检查是否需要密码
  65. // checkEncrypted(zipFile2);
  66. List<FileHeader> fileHeaderList = zipFile2.getFileHeaders();
  67. for (int i = 0; i < fileHeaderList.size(); i++) {
  68. FileHeader fileHeader = fileHeaderList.get(i);
  69. if(!fileHeader.isDirectory()){
  70. bookPage.setFile(fileHeader.getFileName());
  71. Integer pageNum = Integer.parseInt(fileHeader.getFileName().substring(0,fileHeader.getFileName().indexOf(".")));
  72. bookPage.setPageNum(pageNum);
  73. bookPageMapper.insert(bookPage);
  74. zipFile2.extractFile(fileHeader, folderPath);
  75. }else{
  76. zipFile2.extractFile(fileHeader, folderPath);
  77. File destFolder = new File(folderPath);
  78. File[] files = destFolder.listFiles();
  79. for (File file : files) {
  80. bookPage.setFile(fileHeader.getFileName());
  81. Integer pageNum = Integer.parseInt(file.getName().substring(0,file.getName().indexOf(".")));
  82. bookPage.setPageNum(pageNum);
  83. bookPageMapper.insert(bookPage);
  84. }
  85. }
  86. }
  87. System.out.println("解压成功!");
  88. long endTime = System.currentTimeMillis();
  89. System.out.println("耗时:" + (endTime - startTime) + "ms");
  90. }
  91. private static boolean deleteDir(File dir) {
  92. if (dir.isDirectory()) {
  93. String[] children = dir.list();
  94. if (children != null && children.length > 0) {
  95. // 递归删除目录中的子目录下
  96. for (int i = 0; i < children.length; i++) {
  97. boolean success = deleteDir(new File(dir, children[i]));
  98. if (!success) {
  99. return false;
  100. }
  101. }
  102. }
  103. }
  104. // 目录此时为空,可以删除
  105. return dir.delete();
  106. }
  107. @Override
  108. public HttpRespMsg getBookPageList(BookPage bookPage) {
  109. HttpRespMsg msg = new HttpRespMsg();
  110. List<BookPage> list = bookPageMapper.selectList(new QueryWrapper<BookPage>().eq("book_id", bookPage.getBookId()).orderByAsc("page_num"));
  111. msg.data = list;
  112. return msg;
  113. }
  114. }