From 4ab2cb495ccece311bbd8d0ecb992c7de0bc8500 Mon Sep 17 00:00:00 2001
From: yangys <y_ys79@sina.com>
Date: 星期二, 22 七月 2025 11:43:10 +0800
Subject: [PATCH] 审批表打印

---
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/ApproveRecordService.java               |    2 
 blade-service/blade-mdm/src/test/java/org/springblade/mdm/flow/service/ApproveTableServiceTest.java            |   21 +++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/ApproveTableService.java                |  234 +++++++++++++++++++++++++++++++++++++++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/entity/NcProgram.java                        |   10 +
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/controller/FlowMgrController.java               |   27 ++++
 blade-service/blade-mdm/pom.xml                                                                                |   11 +
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/entity/ApproveRecord.java                       |    4 
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/FlowBusinessService.java                |   13 +
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/NcProgramExportDNCController.java |   16 --
 9 files changed, 318 insertions(+), 20 deletions(-)

diff --git a/blade-service/blade-mdm/pom.xml b/blade-service/blade-mdm/pom.xml
index e627995..67c5676 100644
--- a/blade-service/blade-mdm/pom.xml
+++ b/blade-service/blade-mdm/pom.xml
@@ -89,7 +89,16 @@
             <artifactId>blade-core-test</artifactId>
             <scope>test</scope>
         </dependency>
-
+        <dependency>
+            <groupId>com.itextpdf</groupId>
+            <artifactId>itextpdf</artifactId>
+            <version>5.5.13.4</version>
+        </dependency>
+        <dependency>
+            <groupId>com.itextpdf</groupId>
+            <artifactId>itext-asian</artifactId>
+            <version>5.2.0</version>
+        </dependency>
         <!--<dependency>
             <groupId>org.springblade</groupId>
             <artifactId>blade-starter-transaction</artifactId>
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/controller/FlowMgrController.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/controller/FlowMgrController.java
index 1dee81f..bfd6ab9 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/controller/FlowMgrController.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/controller/FlowMgrController.java
@@ -13,12 +13,15 @@
 import org.flowable.engine.task.Comment;
 import org.flowable.task.api.history.HistoricTaskInstance;
 import org.springblade.core.excel.util.ExcelUtil;
+import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.DateUtil;
 import org.springblade.mdm.basesetting.machine.vo.MachineExcelVO;
+import org.springblade.mdm.commons.vo.IdsVO;
 import org.springblade.mdm.flow.service.ApproveRecordService;
+import org.springblade.mdm.flow.service.ApproveTableService;
 import org.springblade.mdm.flow.service.FlowBusinessService;
 import org.springblade.mdm.flow.vo.FlowVO;
 import org.springblade.mdm.flow.vo.OvertimeTaskExcelVO;
@@ -27,6 +30,9 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
+import java.io.IOException;
+import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
 import java.time.LocalDate;
 import java.util.ArrayList;
 import java.util.Collections;
@@ -46,6 +52,8 @@
 	private HistoryService historyService;
 	@Autowired
 	private RuntimeService runtimeService;
+	@Autowired
+	private ApproveTableService approveTableService;
 
 	@GetMapping("overtime-list")
 	@ApiOperationSupport(order = 3)
@@ -108,7 +116,8 @@
 	@Operation(summary = "娴佺▼鍒犻櫎", description = "鍒犻櫎id鎸囧畾鐨勬祦绋嬪疄渚�")
 	public R<Void> deleteInstance(@Parameter(description = "浠诲姟鍒拌揪鏃堕棿寮�濮�") String processInstancesId) {
 		try {
-			runtimeService.deleteProcessInstance(processInstancesId, "娴佺▼鏌ヨ-鍒犻櫎");
+			businessService.deleteProcessInstance(processInstancesId);
+
 		} catch (Exception e) {
 			log.error("鍒犻櫎娴佺▼澶辫触",e);
 			return R.fail(e.getMessage());
@@ -116,5 +125,21 @@
 		return R.success();
 	}
 
+	@PostMapping("/export-approve-table")
+	@Operation(summary = "瀵煎嚭瀹℃壒琛�", description = "瀵煎嚭瀹℃壒琛╡xcel")
+	public void exportApproveTable(String processInstanceId, HttpServletResponse response) {
 
+		try {
+
+			String filename = URLEncoder.encode("鏁版帶绋嬪簭缂栧埗瀹℃壒鍗�", StandardCharsets.UTF_8)+ DateUtil.format(DateUtil.now(), "yyyyMMddHHmm")+".pdf";
+
+			response.setHeader("Content-Disposition", "attachment; filename="+filename);
+			response.setContentType("application/octet-stream");
+			approveTableService.exportApproveTable(processInstanceId,response.getOutputStream());
+		} catch (Exception e) {
+			log.error("瀵煎嚭DNC寮傚父", e);
+			throw new RuntimeException(e);
+		}
+
+	}
 }
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/entity/ApproveRecord.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/entity/ApproveRecord.java
index 5904520..bdd7869 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/entity/ApproveRecord.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/entity/ApproveRecord.java
@@ -24,6 +24,10 @@
 	private String processDefinitionKey;
 
 	/**
+	 * 浠诲姟鐨刱ey
+	 */
+	private String taskDefinitionId;
+	/**
 	 * 浠诲姟鍚嶇О
 	 */
 	private String taskName;
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/ApproveRecordService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/ApproveRecordService.java
index d644a61..52732ab 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/ApproveRecordService.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/ApproveRecordService.java
@@ -63,6 +63,8 @@
 			//濡傛灉杩樻病鏈夊叧鑱旂殑绋嬪簭鏁版嵁锛屽垯鎻掑叆涓�涓猵rogramId涓簄ull鐨�
 			ApproveRecord rec = new ApproveRecord();
 			rec.setTaskName(task.getName());
+			rec.setTaskDefinitionId(task.getTaskDefinitionId());
+			;
 			rec.setComment(comment==null? StringUtils.EMPTY:comment);
 			rec.setProcessInstanceId(processInstanceId);
 			rec.setProcessDefinitionKey(processDefinitionKey);
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/ApproveTableService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/ApproveTableService.java
new file mode 100644
index 0000000..14566e6
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/ApproveTableService.java
@@ -0,0 +1,234 @@
+
+package org.springblade.mdm.flow.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.flowable.task.api.Task;
+import org.springblade.core.mp.base.BizServiceImpl;
+import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tool.utils.DateUtil;
+import org.springblade.mdm.basesetting.machine.MachineService;
+import org.springblade.mdm.basesetting.machine.entity.Machine;
+import org.springblade.mdm.flow.entity.ApproveRecord;
+import org.springblade.mdm.flow.mapper.ApproveRecordMapper;
+import org.springblade.mdm.flow.vo.ApproveRecordVO;
+import org.springblade.mdm.program.entity.NcProgram;
+import org.springblade.mdm.program.entity.ProcessProgRef;
+import org.springblade.mdm.program.service.NcProgramService;
+import org.springblade.mdm.program.service.ProcessProgRefService;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.List;
+import com.itextpdf.text.*;
+import com.itextpdf.text.pdf.*;
+/**
+ * 瀹℃壒璁板綍锛岀敤浜庢煡璇㈡墽琛岃建杩�
+ *
+ * @author yangys
+ */
+@Slf4j
+@Service
+@AllArgsConstructor
+public class ApproveTableService{
+	private final ProcessProgRefService processProgRefService;
+	private final FlowCommonService flowCommonService;
+	private final ApproveRecordService approveRecordService;
+	private final NcProgramService ncProgramService;
+	private final MachineService machineService;
+	private static final String UNCHECK_BOX = "鈽�";
+	private static final String CHECKED_BOX = "鈽�";
+	static Chunk square = new Chunk("o", new Font(Font.FontFamily.ZAPFDINGBATS, 12)); // 绌烘柟妗�
+	static Chunk check = new Chunk("4", new Font(Font.FontFamily.ZAPFDINGBATS, 12)); // 甯﹀嬀鏂规
+
+	BaseFont getBaseFont() throws DocumentException, IOException {
+		return BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
+	}
+	Font getChineseFont() throws DocumentException, IOException {
+		BaseFont bfChinese = getBaseFont();
+		return new Font(bfChinese, 12, Font.NORMAL);
+	}
+	/**
+	 * 瀵煎嚭瀹℃壒纭琛�
+	 * @param processInstanceId
+	 */
+	public void exportApproveTable(String processInstanceId, OutputStream os) throws DocumentException, IOException {
+
+		BaseFont bfChinese =  getBaseFont();
+
+		Document document = new Document(PageSize.B5.rotate());
+		PdfWriter.getInstance(document,os);
+
+		document.open();
+
+		List<ApproveRecord> records = approveRecordService.lambdaQuery().eq(ApproveRecord::getProcessInstanceId, processInstanceId).orderByAsc(ApproveRecord::getCreateTime).list();
+		for(int i=0;i<records.size();i++){
+			ApproveRecord record = records.get(i);
+			printStep(document,bfChinese,record);
+			if(i<records.size()-1){
+				document.newPage();
+			}
+		}
+
+		document.close();
+	}
+
+	void printStep(Document document,BaseFont bfChinese,ApproveRecord record) throws DocumentException, IOException {
+		NcProgram ncProgram;
+		Machine machine;
+		if(record.getNcProgramId() !=null ) {
+			ncProgram = ncProgramService.getById(record.getNcProgramId());
+			machine = machineService.getByCode(ncProgram.getMachineCode());
+		}else{
+			ncProgram = new NcProgram();
+			machine = new Machine();
+		}
+
+
+		Font titleFont = new Font(bfChinese, 14, Font.NORMAL);
+		Paragraph title = new Paragraph("鏁版帶绋嬪簭缂栧埗瀹℃壒鍗�",titleFont);
+		title.setAlignment(Element.ALIGN_CENTER);
+
+		title.setLeading(40f, 0f);
+		title.setSpacingAfter(10); // 娈靛悗闂磋窛
+		document.add(title);
+		// 鍒涘缓琛ㄦ牸锛�4鍒楋級
+		PdfPTable table = new PdfPTable(5);
+		table.setWidths(new float[]{2,1.2f, 1.2f, 1.2f,2});
+
+		Font ft = this.getChineseFont();
+		// 娣诲姞琛ㄥご
+		PdfPCell tempCell = new PdfPCell();//getCell("闆剁粍浠跺彿");
+		tempCell.setHorizontalAlignment(Element.ALIGN_CENTER);
+		tempCell.setVerticalAlignment(Element.ALIGN_MIDDLE);
+
+		Phrase pt1 = new Phrase("闆剁粍浠跺彿",ft);
+		tempCell.setPhrase(pt1);
+		//tempCell.addElement(pt1);
+		//
+		table.addCell(tempCell);
+		table.addCell(getCell("宸ュ簭鍙�",ft));
+		table.addCell(getCell("宸ヨ壓鐗堟",ft));
+		table.addCell(getCell("鏈哄簥鍨嬪彿",ft));
+		table.addCell(getCell("宸ユ璐熻矗浜�/鍗曞厓璐焅n璐d汉娲惧嚭鏃堕棿",ft));
+
+		//PdfPCell cell12 = new PdfPCell();
+		//cell12.setColspan(2);
+		//cell12.addElement(new Phrase(ncProgram.getDrawingNo()));
+		table.addCell(getCell(ncProgram.getDrawingNo(),ft));//闆剁粍浠跺彿
+
+		table.addCell(getCell(ncProgram.getProcessNo(),ft));//宸ュ簭鍙�
+		table.addCell(getCell(ncProgram.getCraftEdition(),ft));//宸ヨ壓鐗堟
+		table.addCell(getCell(machine.getName(),ft));//鏈哄簥鍨嬪彿
+		table.addCell("");//璐熻矗浜猴紝宸ユ璐熻矗浜烘淳鍑烘椂闂�
+
+		//涓棿澶ф牸
+		PdfPCell cell = new PdfPCell();
+		cell.setColspan(5);
+		cell.setCalculatedHeight(400);
+		Paragraph mainPara1 = new Paragraph();
+		mainPara1.setLeading(30f, 0f);
+		mainPara1.setFont(ft);
+		mainPara1.setAlignment(Element.ALIGN_LEFT); // 瀵归綈鏂瑰紡
+		mainPara1.setIndentationLeft(20); // 宸︾缉杩�(鍍忕礌)
+		mainPara1.setIndentationRight(20); // 鍙崇缉杩�
+		mainPara1.setSpacingBefore(10); // 娈靛墠闂磋窛
+		mainPara1.setSpacingAfter(10); // 娈靛悗闂磋窛
+
+
+		mainPara1.add("鏁版帶绋嬪簭缂栧埗浠诲姟瀹夋帓:\n");
+		cell.addElement(mainPara1);
+
+		Paragraph line2Para = new Paragraph();
+		line2Para.setLeading(30f, 0f);
+		line2Para.setFont(ft);
+		line2Para.setAlignment(Element.ALIGN_LEFT); // 瀵归綈鏂瑰紡
+		line2Para.setIndentationLeft(40); // 宸︾缉杩�(鍍忕礌)
+		line2Para.add("璇�");
+
+		Font underLineFt = new Font(bfChinese, 12, Font.UNDERLINE);
+
+		String personName = record.getUserNickname();
+		Chunk block1 = square;
+		Chunk block2 = square;
+		if(StringUtils.equals(record.getTaskDefinitionId(),"programmingTask")){
+			block1 = check;
+		}else if(StringUtils.equals(record.getTaskDefinitionId(),"check")){
+			block2 = check;
+		}
+		Phrase p = new Phrase("       "+personName+"        ",underLineFt);
+
+		line2Para.add(p);
+
+		Phrase p2 = new Phrase("璐熻矗鏁版帶绋嬪簭锛堢紪鍒�");
+		p2.add(block1);
+		p2.add(new Chunk("   鏍″",ft));
+		p2.add(block2);
+		p2.add(new Chunk("锛�",ft));
+		line2Para.add(p2);
+
+		cell.addElement(line2Para);
+
+		Paragraph fangzhen = new Paragraph();
+		fangzhen.setAlignment(Element.ALIGN_LEFT); // 瀵归綈鏂瑰紡
+		fangzhen.setIndentationLeft(20); // 宸︾缉杩�(鍍忕礌)
+		fangzhen.setIndentationRight(20); // 鍙崇缉杩�
+		fangzhen.setSpacingBefore(10); // 娈靛墠闂磋窛
+		fangzhen.setSpacingAfter(10); // 娈靛悗闂磋窛
+		fangzhen.setFont(ft);
+		fangzhen.setLeading(30f, 0f);
+		fangzhen.add("鏄惁闇�瑕佷豢鐪燂紙鏄�");
+		fangzhen.add(square);
+		fangzhen.add(";鍚�");
+		fangzhen.add(square);
+		fangzhen.add("锛塡n");
+
+		cell.addElement(fangzhen);
+		table.addCell(cell);
+		//涓嬩竴琛�
+		PdfPCell cell21 = getCell("鏁版帶绋嬪簭缂栧彿",ft);// PdfPCell();
+		cell21.setColspan(2);
+		//cell21.setPhrase(new Phrase("鏁版帶绋嬪簭缂栧彿",ft));
+		table.addCell(cell21);
+		table.addCell(getCell("缂栧埗/鏃ユ湡",ft));
+		table.addCell(getCell("鏍″/鏃ユ湡",ft));
+		table.addCell(getCell("鎵瑰噯/鏃ユ湡",ft));
+
+		PdfPCell cell2 = new PdfPCell();
+		cell2.addElement(new Phrase(" ",ft));
+		cell2.setColspan(2);
+		table.addCell(cell2);
+		table.addCell(getCell(" ",ft));
+		table.addCell(getCell(" ",ft));
+		table.addCell(getCell(" ",ft));
+
+		// 璁剧疆琛ㄦ牸瀹藉害鍗犻〉闈㈠搴︾殑100%
+		table.setWidthPercentage(100);
+
+		// 娣诲姞琛ㄦ牸鍒版枃妗�
+		document.add(table);
+
+		Phrase lastPhrase = new Phrase("娉�:宸ユ娲惧伐搴旈鍏堣鍒掋�佸悎鐞嗗畨鎺掓暟鎺х▼搴忕紪鍒躲�傜珛鍔犮�佹暟閾c�佹暟杞︾瓑鍗曢亾宸ュ簭绋嬪簭(涓よ酱绋嬪簭)闇�鎻愬墠1涓伐浣滄棩锛屽崸寮忓姞宸ヤ腑蹇冨崟閬撳伐搴�(鍚杞寸▼搴�)闇�鎻愬墠3涓伐浣滄棩銆� ",ft);
+		document.add(lastPhrase);
+	}
+
+	PdfPCell getCell(String text,Font font) throws DocumentException, IOException {
+		PdfPCell cell = new PdfPCell();
+		cell.setPadding(10);
+		cell.setHorizontalAlignment(Element.ALIGN_CENTER);
+		cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
+		if(StringUtils.isNotBlank(text)){
+			Phrase p = new Phrase(text,font);
+			p.setLeading(25);
+			cell.setPhrase(p);
+		}
+
+		return cell;
+	}
+
+
+}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/FlowBusinessService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/FlowBusinessService.java
index ba5d354..99126f6 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/FlowBusinessService.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/FlowBusinessService.java
@@ -4,6 +4,7 @@
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import lombok.AllArgsConstructor;
 import org.flowable.engine.HistoryService;
+import org.flowable.engine.RuntimeService;
 import org.flowable.engine.TaskService;
 import org.flowable.engine.history.HistoricProcessInstance;
 import org.flowable.engine.task.Comment;
@@ -18,6 +19,8 @@
 import org.springblade.mdm.flow.entity.MdmFlowProcess;
 import org.springblade.mdm.flow.util.MdmFlowCache;
 import org.springblade.mdm.flow.vo.FlowVO;
+import org.springblade.mdm.program.entity.ProcessProgRef;
+import org.springblade.mdm.program.service.ProcessProgRefService;
 import org.springblade.system.feign.IUserClient;
 import org.springblade.system.pojo.entity.User;
 import org.springframework.stereotype.Service;
@@ -38,10 +41,12 @@
 @Service
 @AllArgsConstructor
 public class FlowBusinessService {
-
+	private final RuntimeService runtimeService;
 	private final TaskService taskService;
 	private final HistoryService historyService;
 	private final IUserClient userClient;
+	private final ProcessProgRefService processProgRefService;
+	private final ApproveRecordService approveRecordService;
 
 	/**
 	 * 鏌ヨ鎴戠殑娴佺▼(涓汉寰呭姙鍒楄〃)
@@ -425,7 +430,6 @@
 	 * @param page
 	 * @param createTimeBegin
 	 * @param createTimeEnd
-	 * @param assigneeName
 	 * @param keyword
 	 * @return
 	 */
@@ -459,4 +463,9 @@
 		page.setRecords(flowList);
 		return page;
 	}
+
+	public void deleteProcessInstance(String processInstancesId) {
+		runtimeService.deleteProcessInstance(processInstancesId, "娴佺▼鏌ヨ-鍒犻櫎");
+		//TODO 鍒犻櫎鍑哄叧鑱斿瓧娈�
+	}
 }
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/NcProgramExportDNCController.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/NcProgramExportDNCController.java
index 7c899dc..feb0f0d 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/NcProgramExportDNCController.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/NcProgramExportDNCController.java
@@ -64,22 +64,6 @@
 
 	}
 
-	@PostMapping("/export-approve-table")
-	@Operation(summary = "瀵煎嚭瀹℃壒琛�", description = "瀵煎嚭瀹℃壒琛╡xcel")
-	public void exportApproveTaable(@RequestBody @Parameter(description = "瀹℃壒琛╥d鏁扮粍") IdsVO vo, HttpServletResponse response) {
-		if(vo.getIds() == null || vo.getIds().length == 0) {
-			throw new ServiceException("鏈�夋嫨鏂囦欢瀵煎嚭");
-		}
-		try {
-			String filename = "todncexp-"+ DateUtil.format(DateUtil.now(), "yyyyMMddHHmm")+".zip";
-			response.setHeader("Content-Disposition", "attachment; filename="+filename);
-			response.setContentType("application/octet-stream");
-			ncProgramExportDNCService.exportDnc(vo.getIds(),response.getOutputStream());
-		} catch (IOException e) {
-			log.error("瀵煎嚭DNC寮傚父", e);
-			throw new RuntimeException(e);
-		}
 
-	}
 
 }
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/entity/NcProgram.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/entity/NcProgram.java
index 2b78637..6f2c0d5 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/entity/NcProgram.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/entity/NcProgram.java
@@ -47,6 +47,11 @@
 	 * 宸ュ簭锛屽鈥滅簿閾b��
 	 */
 	private String processName;
+
+	/**
+	 * 宸ュ簭鍙�
+	 */
+	private String processNo;
 	/**
 	 * 澶囨敞
 	 */
@@ -76,6 +81,11 @@
 	 * 宸ュ簭鐗堟
 	 */
 	private String processEdition;
+
+	/**
+	 * 宸ヨ壓鐗堟
+	 */
+	private String craftEdition;
 	/**
 	 * 鏄惁鏈�鏂扮増娆★紝1锛氭渶鏂扮増娆★紱0:鍘嗗彶鐗堟
 	 */
diff --git a/blade-service/blade-mdm/src/test/java/org/springblade/mdm/flow/service/ApproveTableServiceTest.java b/blade-service/blade-mdm/src/test/java/org/springblade/mdm/flow/service/ApproveTableServiceTest.java
new file mode 100644
index 0000000..beb3b56
--- /dev/null
+++ b/blade-service/blade-mdm/src/test/java/org/springblade/mdm/flow/service/ApproveTableServiceTest.java
@@ -0,0 +1,21 @@
+package org.springblade.mdm.flow.service;
+
+import com.google.common.io.FileBackedOutputStream;
+import com.itextpdf.text.DocumentException;
+import org.junit.jupiter.api.Test;
+
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+
+public class ApproveTableServiceTest {
+	@Test
+	public void test(){
+		ApproveTableService s = new ApproveTableService(null,null,null,null,null);
+		try {
+			//s.exportApproveTable("1",new FileOutputStream("d:/t.pdf"));
+		} catch (Exception e) {
+			throw new RuntimeException(e);
+		}
+	}
+}

--
Gitblit v1.9.3