1
0
Переглянути джерело

邮件解析附件下载以及重新解析接口

chenjianhua 7 місяців тому
батько
коміт
2dc243681a

+ 199 - 0
service-base/src/main/java/com/simuwang/base/common/util/EncodeUtil.java

@@ -0,0 +1,199 @@
+package com.simuwang.base.common.util;
+
+import javax.crypto.*;
+import javax.crypto.spec.DESKeySpec;
+import javax.crypto.spec.SecretKeySpec;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
+import java.security.InvalidKeyException;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.security.SecureRandom;
+import java.util.Base64;
+
+/**
+ * TODO
+ *
+ * @author chenjianhua
+ * @version 1.0
+ * @date 2022/7/31 23:35
+ */
+public class EncodeUtil {
+    private EncodeUtil() {
+        throw new Error("该类不能被实例化!");
+    }
+
+    private static Cipher makeCipher() throws Exception {
+        return Cipher.getInstance("DES");
+    }
+
+    private static SecretKey makeKeyFactory(String sKey) {
+        SecretKey secretKey = null;
+
+        try {
+            SecretKeyFactory des = SecretKeyFactory.getInstance("DES");
+            secretKey = des.generateSecret(new DESKeySpec(sKey.getBytes()));
+            return secretKey;
+        } catch (Exception var3) {
+            var3.printStackTrace();
+            return secretKey;
+        }
+    }
+
+    public static String encrypt(String key, String text) {
+        try {
+            Cipher cipher = makeCipher();
+            SecretKey secretKey = makeKeyFactory(key);
+            cipher.init(1, secretKey);
+            return new String(Base64.getEncoder().encode(cipher.doFinal(text.getBytes())));
+        } catch (Exception var4) {
+            var4.printStackTrace();
+            return text;
+        }
+    }
+
+    public static String decrypt(String key, String text) {
+        try {
+            Cipher cipher = makeCipher();
+            SecretKey secretKey = makeKeyFactory(key);
+            cipher.init(2, secretKey);
+            return new String(cipher.doFinal(Base64.getDecoder().decode(text.getBytes())));
+        } catch (Exception var4) {
+            var4.printStackTrace();
+            return text;
+        }
+    }
+
+    public static final String md5(String s) {
+        char[] hexDigits = new char[]{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
+
+        try {
+            byte[] strTemp = s.getBytes();
+            MessageDigest mdTemp = MessageDigest.getInstance("MD5");
+            mdTemp.update(strTemp);
+            byte[] md = mdTemp.digest();
+            int j = md.length;
+            char[] str = new char[j * 2];
+            int k = 0;
+
+            for(int i = 0; i < j; ++i) {
+                byte byte0 = md[i];
+                str[k++] = hexDigits[byte0 >>> 4 & 15];
+                str[k++] = hexDigits[byte0 & 15];
+            }
+
+            return new String(str);
+        } catch (Exception var10) {
+            return null;
+        }
+    }
+
+    public static String encodeUTF8(String source) {
+        String result = source;
+
+        try {
+            result = URLEncoder.encode(source, StandardCharsets.UTF_8.name());
+            result = result.replace("+", "%20");
+        } catch (UnsupportedEncodingException var3) {
+            var3.printStackTrace();
+        }
+
+        return result;
+    }
+
+    public static String decodeUTF8(String source) {
+        String result = source;
+
+        try {
+            result = URLDecoder.decode(source, StandardCharsets.UTF_8.name());
+        } catch (UnsupportedEncodingException var3) {
+            var3.printStackTrace();
+        }
+
+        return result;
+    }
+
+    public static String AESEncrypt(String content, String key) {
+        try {
+            KeyGenerator kgen = KeyGenerator.getInstance("AES");
+            SecureRandom random = SecureRandom.getInstance("SHA1PRNG");
+            random.setSeed(key.getBytes());
+            kgen.init(128, random);
+            SecretKey secretKey = kgen.generateKey();
+            byte[] enCodeFormat = secretKey.getEncoded();
+            SecretKeySpec secretKeySpec = new SecretKeySpec(enCodeFormat, "AES");
+            Cipher cipher = Cipher.getInstance("AES");
+            byte[] byteContent = content.getBytes("utf-8");
+            cipher.init(1, secretKeySpec);
+            byte[] byteRresult = cipher.doFinal(byteContent);
+            StringBuffer sb = new StringBuffer();
+
+            for(int i = 0; i < byteRresult.length; ++i) {
+                String hex = Integer.toHexString(byteRresult[i] & 255);
+                if (hex.length() == 1) {
+                    hex = '0' + hex;
+                }
+
+                sb.append(hex.toUpperCase());
+            }
+
+            return sb.toString();
+        } catch (NoSuchAlgorithmException var13) {
+            var13.printStackTrace();
+        } catch (NoSuchPaddingException var14) {
+            var14.printStackTrace();
+        } catch (InvalidKeyException var15) {
+            var15.printStackTrace();
+        } catch (UnsupportedEncodingException var16) {
+            var16.printStackTrace();
+        } catch (IllegalBlockSizeException var17) {
+            var17.printStackTrace();
+        } catch (BadPaddingException var18) {
+            var18.printStackTrace();
+        }
+
+        return null;
+    }
+
+    public static String AESDecrypt(String content, String key) {
+        if (content.length() < 1) {
+            return null;
+        } else {
+            byte[] byteRresult = new byte[content.length() / 2];
+
+            for(int i = 0; i < content.length() / 2; ++i) {
+                int high = Integer.parseInt(content.substring(i * 2, i * 2 + 1), 16);
+                int low = Integer.parseInt(content.substring(i * 2 + 1, i * 2 + 2), 16);
+                byteRresult[i] = (byte)(high * 16 + low);
+            }
+
+            try {
+                KeyGenerator kgen = KeyGenerator.getInstance("AES");
+                SecureRandom random = SecureRandom.getInstance("SHA1PRNG");
+                random.setSeed(key.getBytes());
+                kgen.init(128, random);
+                SecretKey secretKey = kgen.generateKey();
+                byte[] enCodeFormat = secretKey.getEncoded();
+                SecretKeySpec secretKeySpec = new SecretKeySpec(enCodeFormat, "AES");
+                Cipher cipher = Cipher.getInstance("AES");
+                cipher.init(2, secretKeySpec);
+                byte[] result = cipher.doFinal(byteRresult);
+                return new String(result);
+            } catch (NoSuchAlgorithmException var10) {
+                var10.printStackTrace();
+            } catch (NoSuchPaddingException var11) {
+                var11.printStackTrace();
+            } catch (InvalidKeyException var12) {
+                var12.printStackTrace();
+            } catch (IllegalBlockSizeException var13) {
+                var13.printStackTrace();
+            } catch (BadPaddingException var14) {
+                var14.printStackTrace();
+            }
+
+            return null;
+        }
+    }
+}

+ 1 - 0
service-base/src/main/java/com/simuwang/base/mapper/EmailFileInfoMapper.java

@@ -9,4 +9,5 @@ public interface EmailFileInfoMapper {
 
     Integer insert(@Param("itemDo") EmailFileInfoDO emailFileInfoDO);
 
+    EmailFileInfoDO getEmailFileById(@Param("id") Integer fileId);
 }

+ 7 - 0
service-base/src/main/resources/mapper/EmailFileInfoMapper.xml

@@ -21,5 +21,12 @@
                 #{itemDo.isvalid}, #{itemDo.creatorId}, #{itemDo.createTime}, #{itemDo.updaterId}, #{itemDo.updateTime})
     </insert>
 
+    <select id="getEmailFileById" resultMap="BaseResultMap"
+            parameterType="java.lang.Integer">
+        select id ,email_id, file_name, file_path,
+               isvalid, creatorid, createtime, updaterid, updatetime
+        from PPW_EMAIL.email_file_info where id=#{id} and isvalid=1
+    </select>
+
 
 </mapper>

+ 45 - 0
service-manage/src/main/java/com/simuwang/manage/api/email/ParseEmailController.java

@@ -2,14 +2,23 @@ package com.simuwang.manage.api.email;
 
 import com.simuwang.base.common.page.TableDataInfo;
 import com.simuwang.base.common.result.AjaxResult;
+import com.simuwang.base.common.util.EncodeUtil;
+import com.simuwang.base.pojo.vo.EmailFileInfoVO;
 import com.simuwang.base.pojo.vo.EmailParseInfoVO;
 import com.simuwang.base.pojo.vo.EmailTypeRuleVO;
 import com.simuwang.manage.api.base.BaseController;
 import com.simuwang.manage.service.ParseEmailService;
+import jakarta.servlet.ServletOutputStream;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
 import org.apache.ibatis.annotations.Param;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
 import java.util.List;
 import java.util.Map;
 
@@ -95,4 +104,40 @@ public class ParseEmailController extends BaseController {
         Map<String,Integer> result = parseEmailService.searchEmailCount(parseDate);
         return AjaxResult.success(result);
     }
+
+    /**
+     * 下载邮件附件
+     * @param fileId
+     * @return
+     */
+    @PostMapping("/download-email-file")
+    public void downloadEmailFile(@RequestParam("fileId") Integer fileId, HttpServletResponse response, HttpServletRequest request){
+        try {
+            EmailFileInfoVO emailFileInfoVO = parseEmailService.getEmailFileById(fileId);
+            FileInputStream fileInputStream = new FileInputStream(emailFileInfoVO.getFilePath());
+            response.setContentType("application/octet-stream");
+            response.addHeader("Content-Disposition", "attachment;filename=" + EncodeUtil.encodeUTF8(emailFileInfoVO.getFileName()));
+            ServletOutputStream outputStream = response.getOutputStream();
+            byte[] b = new byte[1024];
+            while(fileInputStream.read(b) > 0){
+                outputStream.write(b);
+            }
+            fileInputStream.close();
+            outputStream.flush();
+            outputStream.close();
+        } catch (IOException e) {
+            logger.error(e.getMessage(),e);
+        }
+    }
+
+    /**
+     * 重新解析
+     * @param id
+     * @return
+     */
+    @GetMapping("/reparse/{id}")
+    public AjaxResult reparse(@PathVariable("id")Integer id){
+
+        return AjaxResult.success();
+    }
 }

+ 4 - 0
service-manage/src/main/java/com/simuwang/manage/service/ParseEmailService.java

@@ -1,5 +1,6 @@
 package com.simuwang.manage.service;
 
+import com.simuwang.base.pojo.vo.EmailFileInfoVO;
 import com.simuwang.base.pojo.vo.EmailParseInfoVO;
 import com.simuwang.base.pojo.vo.EmailTypeRuleVO;
 
@@ -13,6 +14,7 @@ import java.util.Map;
  * Description: ${DESCRIPTION}
  */
 public interface ParseEmailService {
+
     void saveEmailType(EmailTypeRuleVO emailTypeRuleVO);
 
     EmailTypeRuleVO searchEmailType();
@@ -22,4 +24,6 @@ public interface ParseEmailService {
     EmailParseInfoVO searchEmailById(Integer id);
 
     Map<String, Integer> searchEmailCount(String parseDate);
+
+    EmailFileInfoVO getEmailFileById(Integer fileId);
 }

+ 19 - 0
service-manage/src/main/java/com/simuwang/manage/service/impl/ParseEmailServiceImpl.java

@@ -1,10 +1,13 @@
 package com.simuwang.manage.service.impl;
 
 import com.simuwang.base.common.enums.ParseStatus;
+import com.simuwang.base.mapper.EmailFileInfoMapper;
 import com.simuwang.base.mapper.EmailParseInfoMapper;
 import com.simuwang.base.mapper.EmailTypeRuleMapper;
+import com.simuwang.base.pojo.dos.EmailFileInfoDO;
 import com.simuwang.base.pojo.dos.EmailParseInfoDO;
 import com.simuwang.base.pojo.dos.EmailTypeRuleDO;
+import com.simuwang.base.pojo.vo.EmailFileInfoVO;
 import com.simuwang.base.pojo.vo.EmailParseInfoVO;
 import com.simuwang.base.pojo.vo.EmailTypeRuleVO;
 import com.simuwang.manage.service.ParseEmailService;
@@ -30,6 +33,9 @@ public class ParseEmailServiceImpl implements ParseEmailService {
 
     @Autowired
     private EmailParseInfoMapper emailParseInfoMapper;
+
+    @Autowired
+    private EmailFileInfoMapper emailFileInfoMapper;
     @Override
     public void saveEmailType(EmailTypeRuleVO emailTypeRuleVO) {
         EmailTypeRuleDO  ruleDO = new EmailTypeRuleDO();
@@ -82,4 +88,17 @@ public class ParseEmailServiceImpl implements ParseEmailService {
         result.put("parseFail",parseFail);
         return result;
     }
+
+    @Override
+    public EmailFileInfoVO getEmailFileById(Integer fileId) {
+        EmailFileInfoDO emailFileInfoDO = emailFileInfoMapper.getEmailFileById(fileId);
+        EmailFileInfoVO fileInfoVO = new EmailFileInfoVO();
+        if(emailFileInfoDO != null){
+            fileInfoVO.setId(emailFileInfoDO.getId());
+            fileInfoVO.setEmailId(emailFileInfoDO.getEmailId());
+            fileInfoVO.setFilePath(emailFileInfoDO.getFilePath());
+            fileInfoVO.setFileName(emailFileInfoDO.getFileName());
+        }
+        return fileInfoVO;
+    }
 }