Parcourir la source

1.集成加水印的投保单pdf文件下载接口。
2.完成身份证打包下载接口。

tomatozq il y a 5 ans
Parent
commit
08634f6232

+ 169 - 5
picc-admin-server/src/main/java/com/jpsoft/picc/modules/base/controller/AttachmentController.java

@@ -1,29 +1,75 @@
 package com.jpsoft.picc.modules.base.controller;
 
+import cn.hutool.core.io.FileUtil;
+import com.jpsoft.picc.modules.base.entity.Company;
+import com.jpsoft.picc.modules.base.entity.CompanyMember;
+import com.jpsoft.picc.modules.base.entity.InsuranceDefinitionLimit;
+import com.jpsoft.picc.modules.base.service.CompanyMemberService;
+import com.jpsoft.picc.modules.base.service.CompanyService;
+import com.jpsoft.picc.modules.base.service.InsuranceDefinitionLimitService;
+import com.jpsoft.picc.modules.business.entity.InsuranceApplication;
+import com.jpsoft.picc.modules.business.entity.InsurancePolicyMember;
+import com.jpsoft.picc.modules.business.service.InsuranceApplicationService;
+import com.jpsoft.picc.modules.business.service.InsurancePolicyMemberService;
 import com.jpsoft.picc.modules.common.config.OSSConfig;
+import com.jpsoft.picc.modules.common.config.PdfConfig;
 import com.jpsoft.picc.modules.common.dto.MessageResult;
-import com.jpsoft.picc.modules.common.utils.Uploader;
+import com.jpsoft.picc.modules.common.utils.ItextPDFUtil;
+import com.jpsoft.picc.modules.common.utils.OSSUtil;
+import com.jpsoft.picc.modules.common.utils.Watermark;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
+import org.joda.time.DateTime;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.multipart.MultipartFile;
 
+import javax.servlet.http.HttpServletResponse;
+import java.io.File;
+import java.io.OutputStream;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
 @Api(description="附件管理")
-@RestController
-@RequestMapping("/base/attachment")
+@Controller
 @Slf4j
 public class AttachmentController {
     @Autowired
     private OSSConfig ossConfig;
 
-    @PostMapping("upload")
+    @Autowired
+    private PdfConfig pdfConfig;
+
+    @Autowired
+    private InsuranceApplicationService insuranceApplicationService;
+
+    @Autowired
+    private InsuranceDefinitionLimitService insuranceDefinitionLimitService;
+
+    @Autowired
+    private InsurancePolicyMemberService insurancePolicyMemberService;
+
+    @Autowired
+    private CompanyService companyService;
+
+    @Autowired
+    private CompanyMemberService companyMemberService;
+
+    @PostMapping("/base/attachment/upload")
     @ApiOperation(value="附件上传")
     @ApiImplicitParams({
             @ApiImplicitParam(name = "fileName",value = "文件名", required = false, paramType = "form"),
@@ -38,7 +84,7 @@ public class AttachmentController {
                 fileName = uploadFile.getOriginalFilename();
             }
 
-            String retFileUrl = Uploader.ossUpload(ossConfig,subFolder,fileName,uploadFile.getInputStream());
+            String retFileUrl = OSSUtil.upload(ossConfig,subFolder,fileName,uploadFile.getInputStream());
 
             messageResult.setResult(true);
             messageResult.setData(retFileUrl);
@@ -52,4 +98,122 @@ public class AttachmentController {
 
         return messageResult;
     }
+
+    @ApiOperation(value="pdf文档生成与下载")
+    @RequestMapping(value = "/pub/attachment/downloadPolicyPDF",method = RequestMethod.GET)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name="applicationId",value = "投保单ID",required = true,paramType = "query"),
+            @ApiImplicitParam(name="policyId",value = "每月投保单ID",required = true,paramType = "query")
+    })
+    public ResponseEntity downloadPolicyPDF(String applicationId, String policyId){
+        String logoUrl = pdfConfig.getLogoUrl();
+        ResponseEntity entity;
+
+        try {
+            InsuranceApplication insuranceApplication = insuranceApplicationService.get(applicationId);
+            Company company = companyService.get(insuranceApplication.getCompanyId());
+
+            List<InsuranceDefinitionLimit> insuranceDefinitionLimitList = insuranceDefinitionLimitService.findByDefinitionId(insuranceApplication.getDefinitionId());
+
+            List<Map<String, Object>> mapList = new ArrayList<Map<String, Object>>();
+
+            for (InsuranceDefinitionLimit insuranceDefinitionLimit : insuranceDefinitionLimitList) {
+                Map<String, Object> map1 = new HashMap<String, Object>();
+                map1.put("id", insuranceDefinitionLimit.getId());
+                map1.put("name", insuranceDefinitionLimit.getName());
+                map1.put("limit", insuranceDefinitionLimit.getLimit());
+                map1.put("unit", insuranceDefinitionLimit.getUnit());
+                mapList.add(map1);
+            }
+
+            List<InsurancePolicyMember> list = insurancePolicyMemberService.findByPolicyId(policyId);
+
+            HttpHeaders headers = new HttpHeaders();
+            headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
+
+            //设置编码  为了解决中文名称乱码问题
+            String fileName = "投保单电子版.pdf";
+            String downloadFileName = new String(fileName.getBytes("UTF-8"), "iso-8859-1");
+
+            //将编码加到http头信息中
+            headers.setContentDispositionFormData("attachment", downloadFileName);
+
+            String folder=System.getProperty("java.io.tmpdir");
+
+            String filePath = folder + File.separator + DateTime.now().toString("yyyyMMddHHmmssSSS") + ".pdf";
+
+            ItextPDFUtil.createPdf(insuranceApplication, mapList, list, logoUrl,filePath);
+
+            String outputPath = folder + File.separator + DateTime.now().toString("yyyyMMddHHmmssSSS") + "-watermark.pdf";
+
+            //pdf文档添加图片水印
+            if (StringUtils.isNotEmpty(company.getCompanyStampFile())) {
+                Watermark.imageWatermark(filePath, outputPath, company.getCompanyStampFile());
+                filePath = outputPath;
+            }
+
+            byte[] buffer = FileUtil.readBytes(filePath);
+
+            entity = new ResponseEntity<byte[]>(buffer, headers, HttpStatus.OK);
+        }
+        catch (Exception ex){
+            log.error(ex.getMessage(),ex);
+            entity = new ResponseEntity<String>(ex.getMessage(),HttpStatus.OK);
+        }
+
+        return entity;
+    }
+
+    @ApiOperation(value="身份证附件打包下载")
+    @RequestMapping(value = "/pub/attachment/downloadIdCardZip",method = RequestMethod.GET)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name="policyId",value = "每月投保单ID",required = true,paramType = "query")
+    })
+    public void downloadIdCardZip(String policyId, HttpServletResponse response){
+        try {
+            response.setCharacterEncoding("utf-8");
+            response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
+
+            //设置编码  为了解决中文名称乱码问题
+            String fileName = "身份证";
+            String zipFileName = new String(fileName.getBytes("UTF-8"), "iso-8859-1");
+            response.setHeader("Content-Disposition", "attachment;fileName=" + zipFileName + ".zip");
+
+            List<InsurancePolicyMember> policyMemberList = insurancePolicyMemberService.findByPolicyId(policyId);
+
+            List<Map<String,String>> fileList = new ArrayList<>();
+
+            for (InsurancePolicyMember policyMember : policyMemberList) {
+                CompanyMember member = companyMemberService.get(policyMember.getMemberId());
+
+                String urls = member.getCardFiles();
+
+                if (StringUtils.isNotEmpty(urls)){
+                    String[] arr = urls.split("\\|");
+
+                    for(int i=0;i<arr.length;i++) {
+                        String url = arr[i];
+
+                        String ext = url.substring(url.lastIndexOf("."));
+
+                        Map<String,String> map = new HashMap<>();
+                        map.put("fileUrl",url);
+                        map.put("fileName", member.getCardNo() + "-" + (i+1) + ext);
+
+                        fileList.add(map);
+                    }
+                }
+            }
+
+            OutputStream output = response.getOutputStream();
+
+            OSSUtil.batchDownload(fileList,output);
+
+            output.flush();
+            output.close();
+        }
+        catch (Exception ex){
+            log.error(ex.getMessage(),ex);
+        }
+    }
 }

+ 0 - 108
picc-admin-server/src/main/java/com/jpsoft/picc/modules/pub/controller/PolicyPdfController.java

@@ -1,108 +0,0 @@
-package com.jpsoft.picc.modules.pub.controller;
-
-import cn.hutool.core.io.FileUtil;
-import com.jpsoft.picc.modules.base.entity.InsuranceDefinitionLimit;
-import com.jpsoft.picc.modules.base.service.InsuranceDefinitionLimitService;
-import com.jpsoft.picc.modules.business.entity.InsuranceApplication;
-import com.jpsoft.picc.modules.business.entity.InsurancePolicyMember;
-import com.jpsoft.picc.modules.business.service.InsuranceApplicationService;
-import com.jpsoft.picc.modules.business.service.InsurancePolicyMemberService;
-import com.jpsoft.picc.modules.common.config.PdfConfig;
-import com.jpsoft.picc.modules.common.utils.ItextPDFUtil;
-import com.jpsoft.picc.modules.common.utils.Watermark;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
-import lombok.extern.slf4j.Slf4j;
-import org.joda.time.DateTime;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.HttpHeaders;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.MediaType;
-import org.springframework.http.ResponseEntity;
-import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-@Api(description="投保单pdf下载")
-@Controller
-@RequestMapping(value = "/pub/policyPdf")
-@Slf4j
-public class PolicyPdfController {
-    @Autowired
-    private PdfConfig pdfConfig;
-
-    @Autowired
-    private InsuranceApplicationService insuranceApplicationService;
-
-    @Autowired
-    private InsuranceDefinitionLimitService insuranceDefinitionLimitService;
-
-    @Autowired
-    private InsurancePolicyMemberService insurancePolicyMemberService;
-
-    @ApiOperation(value="pdf文档生成与下载")
-    @RequestMapping(value = "download",method = RequestMethod.GET)
-    @ApiImplicitParams({
-            @ApiImplicitParam(name="applicationId",value = "投保单ID",required = true,paramType = "query"),
-            @ApiImplicitParam(name="policyId",value = "每月投保单ID",required = true,paramType = "query")
-    })
-    public ResponseEntity download(String applicationId, String policyId){
-        String logoUrl = pdfConfig.getLogoUrl();
-        ResponseEntity entity = null;
-
-        try {
-            InsuranceApplication insuranceApplication = insuranceApplicationService.get(applicationId);
-            List<InsuranceDefinitionLimit> insuranceDefinitionLimitList = insuranceDefinitionLimitService.findByDefinitionId(insuranceApplication.getDefinitionId());
-
-            List<Map<String, Object>> mapList = new ArrayList<Map<String, Object>>();
-
-            for (InsuranceDefinitionLimit insuranceDefinitionLimit : insuranceDefinitionLimitList) {
-                Map<String, Object> map1 = new HashMap<String, Object>();
-                map1.put("id", insuranceDefinitionLimit.getId());
-                map1.put("name", insuranceDefinitionLimit.getName());
-                map1.put("limit", insuranceDefinitionLimit.getLimit());
-                map1.put("unit", insuranceDefinitionLimit.getUnit());
-                mapList.add(map1);
-            }
-
-            List<InsurancePolicyMember> list = insurancePolicyMemberService.findByPolicyId(policyId);
-
-            HttpHeaders headers = new HttpHeaders();
-            headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
-
-            //设置编码  为了解决中文名称乱码问题
-            String fileName = "投保单电子版.pdf";
-            String downloadFileName = new String(fileName.getBytes("UTF-8"), "iso-8859-1");
-
-            //将编码加到http头信息中
-            headers.setContentDispositionFormData("attachment", downloadFileName);
-
-            String folder=System.getProperty("java.io.tmpdir");
-
-            String filePath = folder + File.separator + DateTime.now().toString("yyyyMMddHHmmssSSS") + ".pdf";
-
-            ItextPDFUtil.createPdf(insuranceApplication, mapList, list, logoUrl,"C:\\Users\\Administrator\\Desktop\\投保单.pdf");
-
-            //pdf文档添加图片水印
-            Watermark.imageWatermark("C:\\Users\\Administrator\\Desktop\\投保单.pdf",filePath,pdfConfig.getImageWaterMarkUrl());
-
-            byte[] buffer = FileUtil.readBytes(filePath);
-
-            entity = new ResponseEntity<byte[]>(buffer, headers, HttpStatus.OK);
-        }
-        catch (Exception ex){
-            log.error(ex.getMessage(),ex);
-            entity = new ResponseEntity<String>(ex.getMessage(),HttpStatus.OK);
-        }
-
-        return entity;
-    }
-}

+ 60 - 0
picc-admin-server/src/test/java/com/jpsoft/picc/test/OSSTest.java

@@ -0,0 +1,60 @@
+package com.jpsoft.picc.test;
+
+import com.jpsoft.picc.modules.common.config.OSSConfig;
+import com.jpsoft.picc.modules.common.utils.OSSUtil;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.util.ArrayList;
+import java.util.List;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest
+public class OSSTest {
+    @Autowired
+    private OSSConfig ossConfig;
+
+    @Test
+    public void testUpload(){
+        String fileName = "C:\\Users\\Administrator\\Desktop\\PICC\\企业人员名单导入模板.xls";
+
+        try {
+            FileInputStream fis = new FileInputStream(fileName);
+            String fileUrl = OSSUtil.upload(ossConfig,"/template","companyMember.xls", fis);
+            System.out.println(fileUrl);
+
+            fis.close();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    @Test
+    public void testDownload(){
+        //http://vod.wzgh.org
+        //?x-oss-process=image/resize,l_1024,limit_1
+        //String fileUrl = "picc/test/2020/2/身份证.png";
+        String fileUrl = "http://vod.wzgh.org/picc/test/2020/2/身份证.png?x-oss-process=image/resize,l_800,limit_1";
+
+        List<String> fileList = new ArrayList<>();
+        fileList.add(fileUrl);
+
+        FileOutputStream fos = null;
+
+        try {
+            fos = new FileOutputStream("H:\\test.zip");
+//            OSSUtil.batchDownload(fileList,fos);
+            OSSUtil.presignedDownload(ossConfig,fileList,fos);
+
+            fos.close();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+}

+ 196 - 0
picc-common/src/main/java/com/jpsoft/picc/modules/common/utils/OSSUtil.java

@@ -0,0 +1,196 @@
+package com.jpsoft.picc.modules.common.utils;
+
+import cn.hutool.core.date.DateTime;
+import com.aliyun.oss.HttpMethod;
+import com.aliyun.oss.OSS;
+import com.aliyun.oss.OSSClient;
+import com.aliyun.oss.OSSClientBuilder;
+import com.aliyun.oss.model.GeneratePresignedUrlRequest;
+import com.aliyun.oss.model.OSSObject;
+import com.aliyun.oss.model.PutObjectResult;
+import com.jpsoft.picc.modules.common.config.OSSConfig;
+import lombok.extern.slf4j.Slf4j;
+import net.sf.jsqlparser.expression.DateTimeLiteralExpression;
+import org.apache.commons.lang3.StringUtils;
+
+import java.io.BufferedInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URL;
+import java.net.URLConnection;
+import java.util.*;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipOutputStream;
+
+@Slf4j
+public class OSSUtil {
+    public static String upload(OSSConfig ossConfig,
+                                   String subFolder, String fileName,
+                                   InputStream fileInputStream) {
+        Date now = new Date();
+
+        Calendar cal = Calendar.getInstance();
+        cal.setTime(now);
+
+        String savePath = ossConfig.getObjectPre();
+
+        if (!subFolder.startsWith("/")) {
+            savePath += "/";
+        }
+
+        savePath += subFolder;
+
+        savePath = savePath + "/" + cal.get(Calendar.YEAR) + "/" + (cal.get(Calendar.MONTH) + 1) + "/";
+
+        OSS ossClient = new OSSClientBuilder().build(ossConfig.getEndpoint(), ossConfig.getAccessKeyId(), ossConfig.getAccessKeySecret());
+
+        String retFileUrl = savePath + fileName;
+
+        if(ossClient.doesObjectExist(ossConfig.getBucketName(), retFileUrl)){
+            String ext = fileName.substring(fileName.indexOf("."));
+
+            String newFileName = DateTime.now().toString("yyyyMMddHHmmssSSS") + ext;
+
+            retFileUrl = savePath + newFileName;
+        }
+
+        // 上传文件流
+        PutObjectResult result = ossClient.putObject(ossConfig.getBucketName(), retFileUrl, fileInputStream);
+
+        // 关闭OSSClient
+        ossClient.shutdown();
+
+        return ossConfig.getUrlPrefix() + "/" + retFileUrl;
+    }
+
+    public static void batchDownload(List<Map<String,String>> fileList, OutputStream output){
+        BufferedInputStream bis = null;
+
+        try{
+            ZipOutputStream zos = new ZipOutputStream(output);
+
+            for (Map<String,String> map : fileList) {
+                String fileUrl = map.get("fileUrl");
+
+                URL url = new URL(fileUrl);
+                URLConnection conn = url.openConnection();
+                InputStream inputStream = conn.getInputStream();
+
+                byte[] buffs = new byte[1024 * 10];
+
+                String fileName = map.get("fileName");
+
+                if (StringUtils.isEmpty(fileName)){
+                    fileName = fileUrl;
+                }
+
+                if (fileName.indexOf("?")!=-1){
+                    fileName = fileName.substring(0,fileName.indexOf("?"));
+                }
+
+                fileName = fileName.substring(fileName.lastIndexOf("/") + 1);
+
+                String zipFile = fileName;
+
+                ZipEntry zipEntry = new ZipEntry(zipFile);
+                zos.putNextEntry(zipEntry);
+                bis = new BufferedInputStream(inputStream, 1024 * 10);
+
+                int read;
+                while ((read = bis.read(buffs, 0, 1024 * 10)) != -1) {
+                    zos.write(buffs, 0, read);
+                }
+
+                inputStream.close();
+            }
+
+            zos.close();
+        }
+        catch(Exception ex){
+            log.error(ex.getMessage(),ex);
+        }
+        finally {
+            if(bis!=null){
+                try {
+                    bis.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+    }
+
+    public static void presignedDownload(OSSConfig ossConfig, List<String> fileList, OutputStream output){
+        BufferedInputStream bis = null;
+
+        try{
+            ZipOutputStream zos = new ZipOutputStream(output);
+
+            OSS ossClient = new OSSClientBuilder().build(ossConfig.getEndpoint(), ossConfig.getAccessKeyId(), ossConfig.getAccessKeySecret());
+
+            for (String filePath : fileList) {
+                Date expiration = new Date(System.currentTimeMillis() + 3600 * 1000);
+
+                if (filePath.startsWith(ossConfig.getUrlPrefix())){
+                    filePath = filePath.substring(ossConfig.getUrlPrefix().length());
+                }
+
+                if(filePath.indexOf("?")!=-1){
+                    filePath = filePath.substring(0,filePath.indexOf("?"));
+                }
+
+                if (filePath.startsWith("/")){
+                    filePath = filePath.substring(1);
+                }
+
+                GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(ossConfig.getBucketName(), filePath, HttpMethod.GET);
+
+                // 设置过期时间。
+                request.setExpiration(expiration);
+
+                //设置缩放
+                request.setProcess("image/resize,l_1024,limit_1");
+
+                // 生成签名URL(HTTP GET请求)。
+                URL signedUrl = ossClient.generatePresignedUrl(request);
+
+                // 使用签名URL发送请求。
+                OSSObject ossObject = ossClient.getObject(signedUrl, new HashMap<>());
+
+                if(ossObject!=null) {
+                    InputStream inputStream = ossObject.getObjectContent();
+                    byte[] buffs = new byte[1024 * 10];
+                    String fileName = filePath.substring(filePath.lastIndexOf("/") + 1);
+                    String zipFile = fileName;
+
+                    ZipEntry zipEntry = new ZipEntry(zipFile);
+                    zos.putNextEntry(zipEntry);
+                    bis = new BufferedInputStream(inputStream, 1024 * 10);
+
+                    int read;
+                    while ((read = bis.read(buffs, 0, 1024 * 10)) != -1) {
+                        zos.write(buffs, 0, read);
+                    }
+
+                    ossObject.close();
+                }
+            }
+
+            zos.close();
+            ossClient.shutdown();
+        }
+        catch(Exception ex){
+            log.error(ex.getMessage(),ex);
+        }
+        finally {
+            if(bis!=null){
+                try {
+                    bis.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+    }
+}

+ 0 - 43
picc-common/src/main/java/com/jpsoft/picc/modules/common/utils/Uploader.java

@@ -1,43 +0,0 @@
-package com.jpsoft.picc.modules.common.utils;
-
-import com.aliyun.oss.OSS;
-import com.aliyun.oss.OSSClientBuilder;
-import com.aliyun.oss.model.PutObjectResult;
-import com.jpsoft.picc.modules.common.config.OSSConfig;
-
-import java.io.InputStream;
-import java.util.Calendar;
-import java.util.Date;
-
-public class Uploader {
-    public static String ossUpload(OSSConfig ossConfig,
-                                   String subFolder, String fileName,
-                                   InputStream fileInputStream) {
-        Date now = new Date();
-
-        Calendar cal = Calendar.getInstance();
-        cal.setTime(now);
-
-        String savePath = ossConfig.getObjectPre();
-
-        if (!subFolder.startsWith("/")) {
-            savePath += "/";
-        }
-
-        savePath += subFolder;
-
-        savePath = savePath + "/" + cal.get(Calendar.YEAR) + "/" + (cal.get(Calendar.MONTH) + 1) + "/";
-
-        OSS ossClient = new OSSClientBuilder().build(ossConfig.getEndpoint(), ossConfig.getAccessKeyId(), ossConfig.getAccessKeySecret());
-
-        String retFileUrl = savePath + fileName;
-
-        // 上传文件流
-        PutObjectResult result = ossClient.putObject(ossConfig.getBucketName(), retFileUrl, fileInputStream);
-
-        // 关闭OSSClient
-        ossClient.shutdown();
-
-        return ossConfig.getUrlPrefix() + "/" + retFileUrl;
-    }
-}

+ 21 - 11
picc-common/src/main/java/com/jpsoft/picc/modules/common/utils/Watermark.java

@@ -47,29 +47,39 @@ public class Watermark extends PdfPageEventHelper {
             PdfReader reader = new PdfReader(inputPath);
             PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(outputPath));
             PdfGState gs1 = new PdfGState();
-            gs1.setFillOpacity(0.1f);
+            gs1.setFillOpacity(0.25f);
 
             Image image = Image.getInstance(images);
+            int imgHeight = (int)image.getHeight();
+            int imgWidth = (int)image.getWidth();
+
             int n = reader.getNumberOfPages();
             PdfContentByte under;
+
             for (int i = 1; i <= n; i++) {
-                PdfContentByte pdfContentByte = stamper.getOverContent(i);
                 // 获得PDF最顶层
                 under = stamper.getOverContent(i);
-                pdfContentByte.setGState(gs1);
+                under.setGState(gs1);
+
+                Rectangle pageRect = reader.getPageSizeWithRotation(i);
+
+                //A4像素 842*596
+                float maxSize = 842;
 
-                for (int y = 0; y < 8; y++) {
-                    for (int x = 0; x < 6; x++) {
+                for (int y = 0; y < Math.min(pageRect.getHeight(), maxSize); y += imgHeight)
+                {
+                    for (int x = 0; x < Math.min(pageRect.getWidth(), maxSize); x += imgWidth)
+                    {
                         // 水印文字成45度角倾斜
-                        image.setRotation(30);// 旋转 弧度
+//                        image.setRotation(30);// 旋转 弧度
                         // 设置旋转角度
-                        image.setRotationDegrees(-45);// 旋转 角度
+//                        image.setRotationDegrees(-45);// 旋转 角度
                         // 设置等比缩放
-                        under.setColorFill(BaseColor.GRAY);
-                        image.scaleToFit(80,120);
+//                        under.setColorFill(BaseColor.GRAY);
+//                        image.scaleToFit(80,120);
                         image.setRotation(45);
-                        image.setAbsolutePosition(70 + 140 * x, 125 * y);
-                        pdfContentByte.addImage(image);
+                        image.setAbsolutePosition(x, y);
+                        under.addImage(image);
                     }
                 }
             }

+ 2 - 2
picc-enterprise-server/src/main/java/com/jpsoft/picc/modules/auth/controller/AttachmentController.java

@@ -3,7 +3,7 @@ package com.jpsoft.picc.modules.auth.controller;
 import com.alibaba.druid.util.StringUtils;
 import com.jpsoft.picc.modules.common.config.OSSConfig;
 import com.jpsoft.picc.modules.common.dto.MessageResult;
-import com.jpsoft.picc.modules.common.utils.Uploader;
+import com.jpsoft.picc.modules.common.utils.OSSUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
@@ -38,7 +38,7 @@ public class AttachmentController {
                 fileName = uploadFile.getOriginalFilename();
             }
 
-            String retFileUrl = Uploader.ossUpload(ossConfig,subFolder,fileName,uploadFile.getInputStream());
+            String retFileUrl = OSSUtil.upload(ossConfig,subFolder,fileName,uploadFile.getInputStream());
 
             messageResult.setResult(true);
             messageResult.setData(retFileUrl);