浏览代码

6个小优化调整

helongjun 3 年之前
父节点
当前提交
656461bd9b

+ 7 - 0
src/main/java/com/ads/business/controller/ConversationController.java

@@ -51,6 +51,13 @@ public class ConversationController {
         return conversationService.sync(chatId);
     }
 
+
+    @PutMapping("/batch/sync")
+    @ApiOperation(value = "一键同步会话")
+    public JsonResult batchSync(String conversationName, String ownerName) {
+        return conversationService.batchSync(conversationName, ownerName);
+    }
+
     @GetMapping("/getDropList")
     @ApiOperation(value = "会话下拉列表", response = ConversationDropListResponse.class)
     public JsonResult getDropList() {

+ 8 - 0
src/main/java/com/ads/business/service/ConversationService.java

@@ -50,6 +50,14 @@ public interface ConversationService extends IService<Conversation> {
      */
     JsonResult sync(String chatId);
 
+    /**
+     * 一键同步会话信息
+     * @param conversationName
+     * @param ownerName
+     * @return
+     */
+    JsonResult batchSync(String conversationName, String ownerName);
+
     /***
      * 会话下拉列表
      * @return

+ 20 - 3
src/main/java/com/ads/business/service/impl/ConversationServiceImpl.java

@@ -23,6 +23,7 @@ import com.ads.common.util.UtilMessage;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.dingtalk.api.request.OapiChatCreateRequest;
@@ -32,6 +33,7 @@ import com.dingtalk.api.response.OapiV2UserGetbymobileResponse;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
 
 import javax.annotation.Resource;
 import java.util.*;
@@ -160,6 +162,7 @@ public class ConversationServiceImpl extends ServiceImpl<ConversationDao, Conver
         if (StringUtils.isNotBlank(request.getConversationName())) {
             wrapper.like("conversation_name", request.getConversationName());
         }
+        wrapper.like(StringUtils.isNotBlank(request.getOwnerName()), "owner_name", request.getOwnerName());
         wrapper.eq("status", CONVERSATION_STTAUS_NORMAL);
         wrapper.orderByDesc("create_time");
         return JsonResult.success(new PageUtils(this.baseMapper.findPage(page, wrapper)), UtilMessage.GET_MESSAGE_SUCCESS);
@@ -216,7 +219,7 @@ public class ConversationServiceImpl extends ServiceImpl<ConversationDao, Conver
         conversation.setStatus(chatInfo.getStatus().intValue());
         //群成员的userid列表
         List<String> useridlist = chatInfo.getUseridlist();
-        if (CollUtil.isEmpty(useridlist)){
+        if (CollUtil.isEmpty(useridlist)) {
             //所有成员退出,群已解散
             conversation.setStatus(CONVERSATION_STTAUS_DISMISS);
         }
@@ -225,10 +228,10 @@ public class ConversationServiceImpl extends ServiceImpl<ConversationDao, Conver
         if (CONVERSATION_STTAUS_DISMISS.equals(conversation.getStatus())) {
             //删除会话文件关系
             docConversationRelService.remove(new LambdaQueryWrapper<DocConversationRel>()
-                    .eq(DocConversationRel::getChatId,conversation.getChatId()));
+                    .eq(DocConversationRel::getChatId, conversation.getChatId()));
             //删除会话文件分类关系
             docTypeConversationRelService.remove(new LambdaQueryWrapper<DocTypeConversationRel>()
-                    .eq(DocTypeConversationRel::getChatId,conversation.getChatId()));
+                    .eq(DocTypeConversationRel::getChatId, conversation.getChatId()));
             //群已解散
             return JsonResult.success(SYNC_SUCCESS);
         }
@@ -268,6 +271,20 @@ public class ConversationServiceImpl extends ServiceImpl<ConversationDao, Conver
     }
 
     @Override
+    public JsonResult batchSync(String conversationName, String ownerName) {
+        LambdaQueryWrapper<Conversation> queryWrapper = Wrappers.lambdaQuery(new Conversation()).eq(Conversation::getStatus, CONVERSATION_STTAUS_NORMAL)
+                .like(StringUtils.isNotBlank(conversationName), Conversation::getConversationName, conversationName)
+                .like(StringUtils.isNotBlank(ownerName), Conversation::getOwnerName, ownerName);
+        List<Conversation> conversations = baseMapper.selectList(queryWrapper);
+        if (!CollectionUtils.isEmpty(conversations)) {
+            conversations.parallelStream().forEach(conversation -> {
+                sync(conversation.getChatId());
+            });
+        }
+        return JsonResult.success(SYNC_SUCCESS);
+    }
+
+    @Override
     public List<ConversationDropListResponse> getDropList() {
         List<Conversation> conversationList = this.baseMapper.selectList(new LambdaQueryWrapper<Conversation>()
                 .eq(Conversation::getStatus, 1)

+ 13 - 5
src/main/java/com/ads/business/service/impl/DocServiceImpl.java

@@ -41,11 +41,9 @@ import java.io.BufferedOutputStream;
 import java.io.File;
 import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
+import java.util.stream.IntStream;
 
 /**
  * <p>
@@ -320,8 +318,9 @@ public class DocServiceImpl extends ServiceImpl<DocDao, Doc> implements DocServi
 
         String fileName = doc.getName();
         String docUrl = doc.getDocUrl();
-        String path = request.getScheme() + "://" + request.getServerName() + ":" + "19050" + request.getContextPath() + "/";
+        String path = request.getScheme() + "://" + request.getServerName() + ":" + "8083" + request.getContextPath() + "/";
         String filePath = pictureConfig.getServerBasePath() + "/" + pictureConfig.getUploadPath() + "/" + userNo + "/" + docId + fileName + ".pdf";
+        String imageFilePath = pictureConfig.getServerBasePath() + "/" + pictureConfig.getUploadPath() + "/" + userNo + "/" + docId + fileName + File.separator;
         String createPath = pictureConfig.getBasePath() + "/" + pictureConfig.getUploadPath() + "/" + userNo + "/" + docId + fileName + ".pdf";
         File fromFile = new File(createPath);
         //判断目标文件所在的目录是否存在
@@ -339,9 +338,18 @@ public class DocServiceImpl extends ServiceImpl<DocDao, Doc> implements DocServi
             throw new BusinessException("生成pdf文件水印有异常!");
         }
         log.info("pdfDetail--文件路径:{}", path + filePath);
+        // 生成图片
+        int pageSize = PdfUtil.toImages(createPath);
+        LinkedList<String> images = new LinkedList<>();
+        if (pageSize > 0) {
+            for (int i = 1; i <= pageSize; i++) {
+                images.add(path + imageFilePath + i + ".png");
+            }
+        }
         PdfDetailResponse rs = new PdfDetailResponse();
         rs.setPath(path + filePath);
         rs.setFileName(fileName);
+        rs.setImageFiles(images);
         return JsonResult.success(rs, UtilMessage.GET_MESSAGE_SUCCESS);
     }
 

+ 1 - 1
src/main/java/com/ads/business/service/model/request/ConversationAddRequest.java

@@ -27,7 +27,7 @@ public class ConversationAddRequest {
     /**
      * 群主的手机号
      */
-    @Pattern(regexp = "^[1][3,4,5,7,8,9][0-9]{9}$", message = "请输入正确的手机号")
+    //@Pattern(regexp = "^[1][3,4,5,7,8,9][0-9]{9}$", message = "请输入正确的手机号")
     @ApiModelProperty(name = "群主手机号")
     private String ownerMobile;
 

+ 6 - 0
src/main/java/com/ads/business/service/model/request/ConversationListRequest.java

@@ -18,4 +18,10 @@ public class ConversationListRequest extends BasePageRequest {
      */
     @ApiModelProperty("群名称")
     private String conversationName;
+
+    /**
+     * 群主名称
+     */
+    @ApiModelProperty("群主名称")
+    private String ownerName;
 }

+ 5 - 0
src/main/java/com/ads/business/service/model/response/PdfDetailResponse.java

@@ -4,6 +4,8 @@ import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import java.util.LinkedList;
+
 /**
  * @author: stamm
  * @Date: 2021/11/02/13:27
@@ -16,4 +18,7 @@ public class PdfDetailResponse {
 
     @ApiModelProperty("文件名称")
     private String fileName;
+
+    @ApiModelProperty("文件图片列表")
+    private LinkedList<String> imageFiles;
 }

+ 42 - 0
src/main/java/com/ads/common/util/PdfUtil.java

@@ -12,13 +12,19 @@ import org.apache.pdfbox.pdmodel.PDPage;
 import org.apache.pdfbox.pdmodel.PDPageContentStream;
 import org.apache.pdfbox.pdmodel.font.PDType0Font;
 import org.apache.pdfbox.pdmodel.graphics.state.PDExtendedGraphicsState;
+import org.apache.pdfbox.rendering.PDFRenderer;
 import org.apache.pdfbox.util.Matrix;
+import org.springframework.util.StringUtils;
 
+import javax.imageio.ImageIO;
 import javax.swing.*;
 import java.awt.*;
+import java.awt.image.BufferedImage;
 import java.io.BufferedOutputStream;
 import java.io.File;
 import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Paths;
 
 /**
  * @author: stamm
@@ -155,12 +161,48 @@ public class PdfUtil {
     }
 
 
+    /**
+     * pdf to image
+     *
+     * @param sourcePdf pdf source file path
+     */
+    public static int toImages(String sourcePdf) {
+        if (StringUtils.isEmpty(sourcePdf)) {
+            log.error("pdf source file path cannot be empty!");
+        }
+        int numberOfPages = 0;
+        byte[] pdfBytes = null;
+        try {
+            pdfBytes = Files.readAllBytes(Paths.get(sourcePdf));
+            // 图片目录
+            File imagesDirectory = new File(sourcePdf.substring(0, sourcePdf.lastIndexOf('.')));
+            if (!imagesDirectory.exists()) {
+                imagesDirectory.mkdirs();
+            }
+            PDDocument pdDocument = PDDocument.load(pdfBytes);
+            PDFRenderer pdfRenderer = new PDFRenderer(pdDocument);
+            // 总页数
+            numberOfPages = pdDocument.getNumberOfPages();
+            int pageStartIndex = 0;
+            int pageEndIndex = numberOfPages - 1;
+            for (int i = pageStartIndex; i <= pageEndIndex; i++) {
+                BufferedImage bufferedImage = pdfRenderer.renderImageWithDPI(i, 250);
+                ImageIO.write(bufferedImage, "png", new File(imagesDirectory.getPath() + File.separator + (i + 1) + ".png"));
+            }
+        } catch (IOException ioException) {
+            ioException.printStackTrace();
+        }
+        return numberOfPages;
+    }
+
+
     public static void main(String[] args) throws Exception {
 
         //usePDFBox("E:\\111.pdf","E:\\333.pdf","Z21HJQLISZPWOYXXXX");
 
         // 将pdf文件先加水印然后输出
         //setWatermark(new BufferedOutputStream(new FileOutputStream(new File("E:\\444.pdf"))), "E:\\111.pdf", "陆迪龙12345");
+        toImages("D:\\Project\\沪上阿姨\\test_file\\能源费核算改造方案.pdf");
     }
 
 }