Преглед изворни кода

[task-2906] 实现盖章和水印功能

Li Yuan пре 1 година
родитељ
комит
ad6b85272f

+ 12 - 5
ibps-comp-base-root/modules/comp-file-server-api/src/main/java/com/lc/ibps/file/server/api/IUploadService.java

@@ -2,14 +2,12 @@ package com.lc.ibps.file.server.api;
 
 import javax.validation.constraints.NotNull;
 
+import com.lc.ibps.api.base.file.FileInfo;
+import io.swagger.annotations.ApiOperation;
 import org.hibernate.validator.constraints.NotBlank;
 import org.springframework.http.MediaType;
 import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RequestPart;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
 import com.lc.ibps.cloud.entity.APIResult;
@@ -119,4 +117,13 @@ public interface IUploadService {
 			@NotBlank(message = "{com.lc.ibps.cloud.file.fileMd5}")
 			@RequestParam(name = "fileMd5", required = true)String fileMd5);
 
+	@ApiOperation(value = "文件盖章", notes = "文件盖章")
+	@RequestMapping(value = "/stamp", method = RequestMethod.POST)
+	public APIResult<AttachmentPo> stamp(
+			@NotNull(message = "文件ID不能为空")
+			@RequestParam(name = "attachmentId", required = true)String attachmentId,
+			@NotNull(message = "盖章动作不能为空,值可以为:controlled,void")
+			@RequestParam(name = "action", required = true)String action,
+			@RequestParam(name = "waterMark", required = false, defaultValue = "false") Boolean waterMark
+	);
 }

+ 8 - 0
ibps-comp-root/modules/comp-file-server/pom.xml

@@ -116,6 +116,14 @@
 			<artifactId>spring-boot-starter-test</artifactId>
 			<scope>test</scope>
 		</dependency>
+		<dependency>
+			<groupId>com.itextpdf</groupId>
+			<artifactId>itextpdf</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>com.itextpdf</groupId>
+			<artifactId>itext-asian</artifactId>
+		</dependency>
 	</dependencies>
 
 	<build>

+ 44 - 0
ibps-comp-root/modules/comp-file-server/src/main/java/com/lc/ibps/cloud/file/provider/UploadProvider.java

@@ -1,6 +1,7 @@
 package com.lc.ibps.cloud.file.provider;
 
 import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
 import java.io.FileInputStream;
 import java.io.InputStream;
 import java.net.URL;
@@ -11,9 +12,12 @@ import java.util.Map;
 import javax.servlet.http.HttpServletRequest;
 import javax.validation.constraints.NotNull;
 
+import com.lc.ibps.api.base.file.FileInfo;
 import com.lc.ibps.base.core.encrypt.Base64;
 import com.lc.ibps.base.db.util.TableMetaUtil;
 import com.lc.ibps.cloud.entity.APIRequest;
+import com.lc.ibps.cloud.file.util.PDFFileUtil;
+import com.lc.ibps.components.upload.util.UploadUtil;
 import org.springframework.http.MediaType;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.mock.web.MockMultipartFile;
@@ -388,6 +392,7 @@ public class UploadProvider extends GenericUploadProvider implements IUploadServ
 		return result;
 	}
 
+
 	@ApiOperation(value = "检查分块文件", notes = "检查分块文件")
 	@Override
 	public APIResult<String> checkChunk(
@@ -520,4 +525,43 @@ public class UploadProvider extends GenericUploadProvider implements IUploadServ
 		return params;
 	}
 
+	@Override
+	public APIResult<AttachmentPo> stamp(String attachmentId, String action, Boolean waterMark) {
+		APIResult<AttachmentPo> result = new APIResult<>();
+		try {
+			this.getUploadService();
+			FileInfo fileInfo = uploadService.downloadFile(attachmentId);
+			if (BeanUtils.isNotEmpty(fileInfo)) {
+				if(!"pdf".equalsIgnoreCase(fileInfo.getExt())){
+					result.setMessage("不支持非PDF文件!");
+					result.setState(StateEnum.ERROR_ATTACHMENT.getCode());
+					return result;
+				}
+				byte[] fileBlob = fileInfo.getFileBytes();
+				InputStream input = new ByteArrayInputStream(fileBlob);
+				ByteArrayOutputStream output = new ByteArrayOutputStream();
+				PDFFileUtil.stamp(input,output,action);
+
+				ByteArrayInputStream inputStream = new ByteArrayInputStream(output.toByteArray());
+				Map<String, Object> params = new HashMap<String, Object>();
+				params.put(FileParam.CUR_USER_ID, ContextUtil.getCurrentUser().getUserId());
+				params.put(FileParam.CUR_USER_ACCOUNT, ContextUtil.getCurrentUser().getAccount());
+				params.put(FileParam.CUR_USER_NAME, ContextUtil.getCurrentUser().getFullname());
+				params.put(FileParam.ORIGINAL_FILE_NAME,fileInfo.getFileName()+"."+fileInfo.getExt());
+				params.put(FileParam.FILE_SIZE,fileInfo.getTotalBytes());
+//				params.put(FileParam.UPLOAD_TYPE, fileInfo.get);
+//				params.put(FileParam.FILE_MD5, fileInfo.getMd5());
+//				params.put(FileParam.IS_CHUNK, isChunk);
+//				params.put(FileParam.CHUNK, chunk);
+//				params.put(FileParam.CHUNK_SIZE, chunkSize);
+				AttachmentPo attachmentPo = uploadService.uploadFile(inputStream, params);
+				result.setData(attachmentPo);
+			}
+		} catch (Exception e) {
+			logger.error("/upload/stamp", e);
+			result.setMessage(StateEnum.ERROR_ATTACHMENT.getText());
+			result.setState(StateEnum.ERROR_ATTACHMENT.getCode());
+		}
+		return result;
+	}
 }

Разлика између датотеке није приказан због своје велике величине
+ 80 - 0
ibps-comp-root/modules/comp-file-server/src/main/java/com/lc/ibps/cloud/file/util/PDFFileUtil.java


Неке датотеке нису приказане због велике количине промена