许鹏程
2024-09-26 4e2dbadb64676b7913ad8bd6f1394b9983e4365c
src/main/java/com/product/file/service/OnlineDocumentEditService.java
@@ -59,9 +59,31 @@
      try {
         String document_template = ff.getString("document_template");
         String document_template_tail = ff.getString("document_template_tail");
         String fileUuid = ff.getString("file_uuid");
         FieldSetEntity fieldSetEntity = getBaseDao().getFieldSetEntity(CmnConst.PRODUCT_SYS_ATTACHMENTS, fileUuid, false);
         //获取文件类型
         String fileName = fieldSetEntity.getString(CmnConst.FILE_NAME);
         //判断是否为doc文件
         String fileType = fileName.substring(fileName.lastIndexOf(".") + 1);
         if ("doc".equals(fileType)) {
            //将doc文件转换为docx文件
            File f = file;
            file = com.product.file.util.FileUtil.toDocx(file);
            if (f != null) {
               f.delete();
            }
         }
         List<File> fileList = new ArrayList<>(3);
         if (!StringUtils.isEmpty(document_template)) {
            fileList.add(fileManagerService.getFile(document_template));
            File file1 = fileManagerService.getFile(document_template);
            //判断file1的文件类型
            if (file1.getName().substring(file1.getName().lastIndexOf(".") + 1).equals("doc")) {
               //转换为docx
               File docx = com.product.file.util.FileUtil.toDocx(file1);
               FileUtil.del(file1);
               file1 = docx;
            }
            fileList.add(file1);
            fileList.add(file);
         } else {
            fileList.add(file);
@@ -69,18 +91,27 @@
         if (!StringUtils.isEmpty(document_template_tail)) {
            fileList.add(fileManagerService.getFile(document_template_tail));
         }
         File mergeFile = MergeDoc.mergeDoc(fileList, Global.getSystemConfig("upload.file.temp.path", "./attachment/temp") +
               File.separator + "nest_red_document_" + IdUtil.randomUUID() + "_" + ff.getString("file_uuid"));
         File mergeFile = MergeDoc.mergeDoc(fileList, Global.getSystemConfig("upload.file.temp.path", "./attachment/temp") + File.separator + "nest_red_document_" + IdUtil.randomUUID() + "_" + ff.getString("file_uuid"));
         if (mergeFile != null && mergeFile.isFile()) {
            if ("doc".equals(fileType)) {
               //将docx文件转换为doc文件
               File f = mergeFile;
               mergeFile = com.product.file.util.FileUtil.toDoc(f);
               if (f != null) {
                  f.delete();
               }
            }
            HashMap<String, File> objectObjectHashMap = new HashMap<>();
            objectObjectHashMap.put("mergeFile", mergeFile);
            uploadFile(ff.getString("file_uuid"), objectObjectHashMap);
         } else {
            throw new BaseException(FileCode.NEST_RED_DOCUMENT_FAIL);
         }
         fileList.forEach(FileUtil::del);
      } catch (BaseException e) {
         throw e;
      } catch (Exception e) {
         e.printStackTrace();
         throw new BaseException(FileCode.NEST_RED_DOCUMENT_FAIL);
      }
   }
@@ -135,12 +166,15 @@
         return;
      }
      //正则匹配redis中的key
      try (Jedis jedis = RedisUtil.getJedis()) {
         Set<String> keys = jedis.keys(this.DOCUMENT_EDIT_KEY + "*-" + userId);
         if (keys != null && keys.size() > 0) {
            //清空redis
            RedisUtil.del(keys.toArray(new String[keys.size()]));
      Set<byte[]> keys = RedisUtil.keys(this.DOCUMENT_EDIT_KEY + "*-" + userId);
      if (keys != null && keys.size() > 0) {
         String[] strKeys = new String[keys.size()];
         int i = 0;
         for (byte[] key : keys) {
            strKeys[i++] = new String(key);
         }
         //清空redis
         RedisUtil.del(keys.toArray(new String[keys.size()]));
      }
   }
@@ -278,30 +312,28 @@
         throw new BaseException(FileCode.GET_FILE_RECORD_FAIL);
      }
      String key = this.DOCUMENT_EDIT_KEY + fileUuid + "-" + userId;
      try (Jedis jedis = RedisUtil.getJedis()) {
         //模糊匹配key
         Set<byte[]> keyBytes = jedis.keys((this.DOCUMENT_EDIT_KEY + fileUuid + "-*").getBytes(StandardCharsets.UTF_8));
         if (!CollectionUtil.isEmpty(keyBytes)) {
            Set<String> keys = keyBytes.stream().map(item -> new String(item, StandardCharsets.UTF_8)).collect(Collectors.toSet());
            boolean remove = keys.remove(this.DOCUMENT_EDIT_KEY + fileUuid + "-" + userId);
            if (keys != null && keys.size() > 0) {
               //正在被编辑
               String existsKey = keys.toArray(new String[]{})[0];
               //这里会抛出正在编辑的异常
               throwBeingEditDocument(existsKey.substring(existsKey.lastIndexOf("-")+1));
            } else if (remove) {
               RedisUtil.setOutTime(key, getExpirationTime());
               return;
            }
      //模糊匹配key
      Set<byte[]> keyBytes = RedisUtil.keys((this.DOCUMENT_EDIT_KEY + fileUuid + "-*").getBytes(StandardCharsets.UTF_8));
      if (!CollectionUtil.isEmpty(keyBytes)) {
         Set<String> keys = keyBytes.stream().map(item -> new String(item, StandardCharsets.UTF_8)).collect(Collectors.toSet());
         boolean remove = keys.remove(this.DOCUMENT_EDIT_KEY + fileUuid + "-" + userId);
         if (keys != null && keys.size() > 0) {
            //正在被编辑
            String existsKey = keys.toArray(new String[]{})[0];
            //这里会抛出正在编辑的异常
            throwBeingEditDocument(existsKey.substring(existsKey.lastIndexOf("-") + 1));
         } else if (remove) {
            RedisUtil.setOutTime(key, getExpirationTime());
            return;
         }
         Map<String, Object> params = new HashMap<>();
         params.put("userId", userId);
         params.put("fileUuid", fileUuid);
         params.put("uniqueKey", IdUtil.randomUUID());
         RedisUtil.set(key, params);
         RedisUtil.setOutTime(key, getExpirationTime());
      }
      Map<String, Object> params = new HashMap<>();
      params.put("userId", userId);
      params.put("fileUuid", fileUuid);
      params.put("uniqueKey", IdUtil.randomUUID());
      RedisUtil.set(key, params);
      RedisUtil.setOutTime(key, getExpirationTime());
   }
   /**