diff --git a/laws-module-system/src/main/java/com/jero/modules/oss/controller/OSSFileController.java b/laws-module-system/src/main/java/com/jero/modules/oss/controller/OSSFileController.java index b9a86491..25ad5396 100644 --- a/laws-module-system/src/main/java/com/jero/modules/oss/controller/OSSFileController.java +++ b/laws-module-system/src/main/java/com/jero/modules/oss/controller/OSSFileController.java @@ -1,5 +1,6 @@ package com.jero.modules.oss.controller; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -81,12 +82,18 @@ public class OSSFileController { public Result queryById(@RequestParam(name = "id") String id) { Result result = new Result<>(); OSSFile file = ossFileService.getById(id); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(OSSFile::getBindId, id); + OSSFile pdfFile = ossFileService.getOne(queryWrapper); if (file == null) { return Result.error("未找到对应实体"); } else { result.setResult(file); result.setSuccess(true); + if (pdfFile != null) { + file.setPdfId(pdfFile.getId()); + } } return result; } diff --git a/laws-module-system/src/main/java/com/jero/modules/oss/entity/OSSFile.java b/laws-module-system/src/main/java/com/jero/modules/oss/entity/OSSFile.java index 5032c05c..799adb33 100644 --- a/laws-module-system/src/main/java/com/jero/modules/oss/entity/OSSFile.java +++ b/laws-module-system/src/main/java/com/jero/modules/oss/entity/OSSFile.java @@ -59,6 +59,13 @@ public class OSSFile extends JeroEntity { @ApiModelProperty(value = "所属部门") private String sysOrgCode; + @ApiModelProperty(value = "docx文件对应的pdf文件 使用此字段绑定docx的版本") + private String bindId; + + @TableField(exist = false) + @ApiModelProperty(value = "PDF版本对应的文件Id") + private String pdfId; + /** * 带文件下载的相对路径 */ diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esChange/listener/ProcessESChangeEndListener.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esChange/listener/ProcessESChangeEndListener.java index 4ded80a1..6d8dc898 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/esChange/listener/ProcessESChangeEndListener.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esChange/listener/ProcessESChangeEndListener.java @@ -4,13 +4,10 @@ import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.jero.common.api.CommonAPI; import com.jero.common.api.vo.Result; -import com.jero.common.constant.enums.YesOrNoEnum; import com.jero.common.exception.JeroBootException; import com.jero.common.system.vo.DictModel; import com.jero.common.system.vo.SysDictItemCore; import com.jero.modules.activiti.entity.ProcessApprovalRecord; -import com.jero.modules.activiti.enums.CommitFlagEnum; -import com.jero.modules.activiti.enums.FinishFlagEnum; import com.jero.modules.activiti.process.common.enums.StandardStateEnum; import com.jero.modules.activiti.process.esChange.entity.EsChangeOpinion; import com.jero.modules.activiti.process.esChange.entity.EsChangeTaskNameConstant; @@ -28,7 +25,6 @@ import com.jero.modules.oss.entity.OSSFile; import com.jero.modules.oss.service.IOSSFileService; import com.jero.modules.system.controller.CommonController; import com.jero.modules.system.entity.SysDepart; -import com.jero.modules.system.entity.SysUser; import com.jero.modules.system.service.*; import com.jero.modules.tag.enums.TableNameEnum; import lombok.extern.slf4j.Slf4j; @@ -75,12 +71,6 @@ public class ProcessESChangeEndListener implements ExecutionListener { @Resource private ILawsCommonService commonService; - @Resource - private ISysUserService sysUserService; - - @Resource - private ISysUserDepartService sysUserDepartService; - @Resource private ISysDepartService sysDepartService; diff --git a/laws-modules/src/main/java/com/jero/modules/onlyoffice/service/impl/BusProcessModelHisServiceImpl.java b/laws-modules/src/main/java/com/jero/modules/onlyoffice/service/impl/BusProcessModelHisServiceImpl.java index 1ada901b..c3d5d4db 100644 --- a/laws-modules/src/main/java/com/jero/modules/onlyoffice/service/impl/BusProcessModelHisServiceImpl.java +++ b/laws-modules/src/main/java/com/jero/modules/onlyoffice/service/impl/BusProcessModelHisServiceImpl.java @@ -3,6 +3,7 @@ package com.jero.modules.onlyoffice.service.impl; import cn.hutool.core.collection.CollUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.jero.common.exception.JeroBootException; import com.jero.common.util.CommonUtils; @@ -18,6 +19,7 @@ import com.jero.modules.onlyoffice.entity.StandardFileType; import com.jero.modules.onlyoffice.mapper.BusProcessModelHisMapper; import com.jero.modules.onlyoffice.mapper.OnlineFileLogDao; import com.jero.modules.onlyoffice.service.IBusProcessModelHisService; +import com.jero.modules.onlyoffice.utils.OnlyOfficePdfUtil; import com.jero.modules.oss.entity.OSSFile; import com.jero.modules.oss.service.IOSSFileService; import org.apache.commons.io.FileUtils; @@ -75,6 +77,9 @@ public class BusProcessModelHisServiceImpl extends ServiceImpl parameters = new HashMap<>(); + parameters.put("async", false); + parameters.put("filetype", "docx"); + parameters.put("key", key); + parameters.put("outputtype", "pdf"); + parameters.put("title", fileName + ".pdf"); + parameters.put("url", downloadFileUrl + onlineFilePath); + log.info("转换文件参数: {}", parameters); + JSONObject requestJson = new JSONObject(parameters); + String data = requestJson.toString(); + + try (CloseableHttpClient httpClient = createHttpClient()) { + String url = onlyOfficeUrl + transferPDfUrl; + log.info("访问onlyOfficeUrl:{}", url); + HttpPost httpPost = new HttpPost(url); + httpPost.setEntity(new StringEntity(data, "UTF-8")); + httpPost.setHeader("Content-type", "application/json; charset=UTF-8"); + + try (CloseableHttpResponse response = httpClient.execute(httpPost)) { + return handleResponse(response); + } + } + } + + @SneakyThrows + private void fetchAndSaveFile(CloseableHttpClient httpClient, String fileName, String fileUrl, String key) { + String pdfFileName = fileName + ".pdf"; + HttpGet get = new HttpGet(fileUrl); + try (CloseableHttpResponse response = httpClient.execute(get)) { + if (response.getStatusLine().getStatusCode() != HttpStatus.SC_OK) { + throw new JeroBootException("Failed to fetch the file: " + response); + } + HttpEntity entity = response.getEntity(); + if (entity != null) { + try (InputStream content = entity.getContent()) { + MultipartFile file = new MockMultipartFile(pdfFileName, pdfFileName, ContentType.APPLICATION_OCTET_STREAM.toString(), content); + // 保存文件逻辑 + String savePath = CommonUtils.upload(file, "", uploadType); + if (oConvertUtils.isNotEmpty(savePath)) { + // 如果有的话,删除原来的pdf版本 + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.eq(OSSFile::getBindId, key); + ossFileService.remove(lambdaQueryWrapper); + + // 上传成功 进行数据库存储 + OSSFile ossFile = new OSSFile(); + // 文件名 + ossFile.setFileName(pdfFileName); + ossFile.setUrl(savePath); + ossFile.setBindId(key); + ossFileService.save(ossFile); + } + } + } + } + } + + @SneakyThrows + private String handleResponse(CloseableHttpResponse response) { + HttpEntity entity = response.getEntity(); + if (entity != null) { + String responseData = EntityUtils.toString(entity, "UTF-8"); + return analysisXML(responseData); + } + return null; + } + + @SneakyThrows + public static String analysisXML(String xmlString) { + log.info("OnlyOffice返回xmlString:{}", xmlString); + Document document = DocumentHelper.parseText(xmlString); + Element root = document.getRootElement(); + return root.elementText("FileUrl").replaceAll("&", "&"); + } + +}