From 8e60278048df6d44a81ca8626cac63e5deab2761 Mon Sep 17 00:00:00 2001
From: yangys <y_ys79@sina.com>
Date: 星期四, 28 八月 2025 15:10:05 +0800
Subject: [PATCH] 机床修改,增加文件对比
---
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/ApproveTableService.java | 316 ++++++++++++++++++++++++++++++++++++----------------
1 files changed, 216 insertions(+), 100 deletions(-)
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
index 530f8b9..dfcccae 100644
--- 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
@@ -1,30 +1,35 @@
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.flowable.engine.HistoryService;
+import org.flowable.engine.history.HistoricProcessInstance;
+import org.flowable.engine.runtime.ProcessInstance;
+import org.flowable.task.api.history.HistoricTaskInstance;
+import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.DateUtil;
+import org.springblade.core.tool.utils.Func;
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.springblade.mdm.flow.constants.FlowContants;
+import org.springblade.mdm.flow.vo.ApproveTableInfo;
+import org.springblade.mdm.program.entity.NcNode;
+import org.springblade.mdm.program.entity.NcProgramApproved;
+import org.springblade.mdm.program.service.NcNodeService;
+import org.springblade.mdm.program.service.NcProgramApprovedService;
+import org.springblade.system.feign.IUserClient;
+import org.springblade.system.pojo.entity.User;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Date;
import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+
import com.itextpdf.text.*;
import com.itextpdf.text.pdf.*;
/**
@@ -34,72 +39,104 @@
*/
@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;
+public class ApproveTableService {
+ @Autowired
+ private FlowCommonService flowCommonService;
+ @Autowired
+ private NcNodeService ncNodeService;
+ @Autowired
+ private MachineService machineService;
+ @Autowired
+ private HistoryService historyService;
+ @Autowired
+ private IUserClient useClient;
+ @Autowired
+ private NcProgramApprovedService programApprovedService;
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)); // 甯﹀嬀鏂规
- //static SimpleDateFormat
+
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();
+ BaseFont bfChinese = getBaseFont();
Document document = new Document(PageSize.B5.rotate());
- PdfWriter.getInstance(document,os);
+ 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();
- }
- }
+ FlowProgramProperties props = flowCommonService.getProgramPropertiesFromHis(processInstanceId);
+
+ ApproveTableInfo appInfo = getApproveInfo(props);
+ Machine machine;
+ String machineCode = props.getMachineCode();
+ machine = machineService.getByCode(machineCode);
+
+ int flag = props.getProcessDefinitionKey().equals(FlowContants.TRY_PROCESS_KEY)?1:2;
+ printPage(document, bfChinese, props, machine, flag, appInfo);
+ //document.newPage();
+
+
+ //printPage(document, bfChinese, props, machine, 2, appInfo);
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();
- }
+
+ /**
+ * 鎵撳嵃涓�涓楠わ紙缂栧埗/鏍″锛�
+ * @param document
+ * @param bfChinese
+ * @param props
+ * @param machine
+ * @param flag
+ * @param approveInfo
+ * @throws DocumentException
+ * @throws IOException
+ */
+ void printPage(Document document, BaseFont bfChinese, FlowProgramProperties props, Machine machine, int flag, ApproveTableInfo approveInfo) throws DocumentException, IOException {
+ Font tipFont = new Font(bfChinese, 10, Font.NORMAL);
+ Paragraph tip = new Paragraph("鑹鸿〃6", tipFont);
+ tip.setAlignment(Element.ALIGN_RIGHT);
+ tip.setSpacingAfter(-5); // 娈靛悗闂磋窛
+ tip.setIndentationRight(220f);
+
+ // 璁剧疆琛岃窛锛堣闂磋窛锛�
+ //mixedParagraph.setLeading(24f); // 缁濆琛岃窛
+ //mixedParagraph.setLeading(1.5f, 2f);
+ // 涔熷彲浠ヤ娇鐢ㄧ浉瀵硅璺濓細mixedParagraph.setLeading(1.5f, 24f);
+ // 绗竴涓弬鏁版槸鏂囨湰楂樺害鐨勫�嶆暟锛岀浜屼釜鍙傛暟鏄澶栫殑鍥哄畾琛岃窛
Font titleFont = new Font(bfChinese, 14, Font.NORMAL);
- Paragraph title = new Paragraph("鏁版帶绋嬪簭缂栧埗瀹℃壒鍗�",titleFont);
- title.setAlignment(Element.ALIGN_CENTER);
-
- title.setLeading(40f, 0f);
+ Paragraph title = new Paragraph("鏁版帶绋嬪簭瀹℃壒鍗�", titleFont);
+ //title.setLeading(40f, 0f);
+ tip.setSpacingBefore(-0.5f);
title.setSpacingAfter(10); // 娈靛悗闂磋窛
- document.add(title);
+ title.setAlignment(Element.ALIGN_CENTER);
+ title.setPaddingTop(-0.6f);
+
+ Paragraph mixedParagraph = new Paragraph();
+ mixedParagraph.add(tip);
+ mixedParagraph.add(title);
+ mixedParagraph.setSpacingAfter(10);
+ document.add(mixedParagraph);
+
+
+ //document.add(title);
// 鍒涘缓琛ㄦ牸锛�4鍒楋級
PdfPTable table = new PdfPTable(5);
- table.setWidths(new float[]{2,1.2f, 1.2f, 1.2f,2});
+ table.setWidths(new float[]{1.5f, 1.4f, 1.4f, 1.4f, 1.5f});
Font ft = this.getChineseFont();
// 娣诲姞琛ㄥご
@@ -107,25 +144,24 @@
tempCell.setHorizontalAlignment(Element.ALIGN_CENTER);
tempCell.setVerticalAlignment(Element.ALIGN_MIDDLE);
- Phrase pt1 = new Phrase("闆剁粍浠跺彿",ft);
+ 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));
+ 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("");//璐熻矗浜猴紝宸ユ璐熻矗浜烘淳鍑烘椂闂�
+ table.addCell(getCell(props.getDrawingNo(), ft));//闆剁粍浠跺彿
+
+ table.addCell(getCell(props.getProcessNo(), ft));//宸ュ簭鍙�
+
+ table.addCell(getCell(props.getCraftEdition(), ft));//宸ヨ壓鐗堟
+ table.addCell(getCell(machine.getName(), ft));//鏈哄簥鍨嬪彿
+ table.addCell(getCell(approveInfo.getTeamLeaderName(), ft));//璐熻矗浜猴紝宸ユ璐熻矗浜烘淳鍑烘椂闂�
//涓棿澶ф牸
PdfPCell cell = new PdfPCell();
@@ -153,27 +189,32 @@
Font underLineFt = new Font(bfChinese, 12, Font.UNDERLINE);
- String personName = record.getUserNickname();
+ //String personName = record.getUserNickname();
Chunk block1 = square;
- Chunk block2 = square;
- Date programDate = null;
- Date checkDate = null;
- if(StringUtils.equals(record.getTaskDefinitionId(),"programmingTask")){
- block1 = check;
- programDate = record.getCreateTime();
- }else if(StringUtils.equals(record.getTaskDefinitionId(),"check")){
- block2 = check;
- checkDate = record.getCreateTime();
- }
- Phrase p = new Phrase(" "+personName+" ",underLineFt);
+ Chunk block2 = check;
+ Date programDate = approveInfo.getProgrammingDate(); //TODO 鏌ヨ鏃堕棿
+ Date checkDate = approveInfo.getCheckDate();
+ Phrase p;
+ if (1 == flag) {
+ p = new Phrase(" " + approveInfo.getProgrammerName() + " ", underLineFt);
+ } else {
+ p = new Phrase(" " + approveInfo.getCheckerName() + " ", underLineFt);
+ }
line2Para.add(p);
Phrase p2 = new Phrase("璐熻矗鏁版帶绋嬪簭锛堢紪鍒�");
- p2.add(block1);
- p2.add(new Chunk(" 鏍″",ft));
- p2.add(block2);
- p2.add(new Chunk("锛�",ft));
+ if (flag == 1) {
+ p2.add(block2);
+ p2.add(new Chunk(" 鏍″", ft));
+ p2.add(block1);
+ } else {
+ p2.add(block1);
+ p2.add(new Chunk(" 鏍″", ft));
+ p2.add(block2);
+ }
+
+ p2.add(new Chunk("锛�", ft));
line2Para.add(p2);
cell.addElement(line2Para);
@@ -187,38 +228,50 @@
fangzhen.setFont(ft);
fangzhen.setLeading(30f, 0f);
fangzhen.add("鏄惁闇�瑕佷豢鐪燂紙鏄�");
+ fangzhen.add(check);//鍥哄畾鏄豢鐪�
+ fangzhen.add(" 鍚�");
fangzhen.add(square);
- fangzhen.add(";鍚�");
- fangzhen.add(square);
- fangzhen.add("锛塡n");
+ fangzhen.add("锛塡n\n");
cell.addElement(fangzhen);
table.addCell(cell);
//涓嬩竴琛�
- PdfPCell cell21 = getCell("鏁版帶绋嬪簭缂栧彿",ft);// PdfPCell();
+ 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));
+ table.addCell(getCell("缂栧埗/鏃ユ湡", ft));
+ table.addCell(getCell("鏍″/鏃ユ湡", ft));
+ table.addCell(getCell("鎵瑰噯/鏃ユ湡", ft));
- PdfPCell cell2 = new PdfPCell();
+ PdfPCell cell2 = getCell("00001", ft);
cell2.setColspan(2);
- cell2.addElement(new Phrase(ncProgram.getCode(),ft));//鏁版帶绋嬪簭缂栧彿
+
+ //cell2.addElement(new Phrase(programPackageNode.getProgramNo(),ft));//鏁版帶绋嬪簭缂栧彿
+ //cell2.addElement(new Phrase("00001",ft));
table.addCell(cell2);
String pDateStr = " ";
- if(programDate!=null){
- pDateStr = DateUtil.format(programDate,"yyyy-MM-dd");
+ if (programDate != null) {
+ pDateStr = DateUtil.format(programDate, "yyyy-MM-dd");
}
String checkDateStr = " ";
- if(checkDate!=null){
- checkDateStr = DateUtil.format(programDate,"yyyy-MM-dd");
+ if (checkDate != null) {
+ checkDateStr = DateUtil.format(programDate, "yyyy-MM-dd");
}
- table.addCell(getCell(pDateStr,ft));//缂栧埗鏃ユ湡
- table.addCell(getCell(checkDateStr,ft));
- table.addCell(getCell(" ",ft));
+
+ String approveDateStr = " ";
+ if (approveInfo.getApproveDate() != null) {
+ approveDateStr = DateUtil.format(approveInfo.getApproveDate(), "yyyy-MM-dd");
+ }
+ table.addCell(getCell(approveInfo.getProgrammerName()+" " +pDateStr, ft));//缂栧埗/鏃ユ湡
+ table.addCell(getCell(approveInfo.getCheckerName()+" " +checkDateStr, ft));
+ table.addCell(getCell(approveInfo.getSeniorName()+" " +approveDateStr, ft));
+
+ PdfPCell sendPathCell = getCell("鏁版帶绋嬪簭浼犺緭璺緞锛�" + (machine.getProgSendDir() == null ? "" : machine.getProgSendDir()), ft);// PdfPCell();
+ sendPathCell.setHorizontalAlignment(Element.ALIGN_LEFT);
+ sendPathCell.setColspan(5);
+ table.addCell(sendPathCell);
// 璁剧疆琛ㄦ牸瀹藉害鍗犻〉闈㈠搴︾殑100%
table.setWidthPercentage(100);
@@ -226,17 +279,17 @@
// 娣诲姞琛ㄦ牸鍒版枃妗�
document.add(table);
- Phrase lastPhrase = new Phrase("娉�:宸ユ娲惧伐搴旈鍏堣鍒掋�佸悎鐞嗗畨鎺掓暟鎺х▼搴忕紪鍒躲�傜珛鍔犮�佹暟閾c�佹暟杞︾瓑鍗曢亾宸ュ簭绋嬪簭(涓よ酱绋嬪簭)闇�鎻愬墠1涓伐浣滄棩锛屽崸寮忓姞宸ヤ腑蹇冨崟閬撳伐搴�(鍚杞寸▼搴�)闇�鎻愬墠3涓伐浣滄棩銆� ",ft);
+ Phrase lastPhrase = new Phrase("娉�:宸ユ娲惧伐搴旈鍏堣鍒掋�佸悎鐞嗗畨鎺掓暟鎺х▼搴忕紪鍒躲�傜珛鍔犮�佹暟閾c�佹暟杞︾瓑鍗曢亾宸ュ簭绋嬪簭(涓よ酱绋嬪簭)闇�鎻愬墠1涓伐浣滄棩锛屽崸寮忓姞宸ヤ腑蹇冨崟閬撳伐搴�(鍚杞寸▼搴�)闇�鎻愬墠3涓伐浣滄棩銆� ", ft);
document.add(lastPhrase);
}
- PdfPCell getCell(String text,Font font) throws DocumentException, IOException {
+ 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);
+ if (StringUtils.isNotBlank(text)) {
+ Phrase p = new Phrase(text, font);
p.setLeading(25);
cell.setPhrase(p);
}
@@ -244,5 +297,68 @@
return cell;
}
+ ApproveTableInfo getApproveInfo(FlowProgramProperties props){
+ //缂栧埗
+ R<User> leaderR = useClient.userInfoById(props.getTeamLeaderId());
+ String leaderName = "";
+ if (leaderR.isSuccess()) {
+ leaderName = leaderR.getData().getName();
+ }
+ //缂栧埗
+ R<User> programmerR = useClient.userInfoById(props.getProgrammerId());
+ String programmerName = "";
+ if (programmerR.isSuccess()) {
+ programmerName = programmerR.getData().getName();
+ }
+ Machine machine;
+ String machineCode = props.getMachineCode();
+ machine = machineService.getByCode(machineCode);
+
+ //鏍″
+ R<User> checkerR = useClient.userInfoById(props.getCheckerId());
+ String checkerName = "";
+ if (checkerR.isSuccess()) {
+ checkerName = checkerR.getData().getName();
+ }
+ //瀹℃牳
+ R<User> seniorR = useClient.userInfoById(props.getCheckerId());
+ String senioirName = "";
+ if (seniorR.isSuccess()) {
+ senioirName = seniorR.getData().getName();
+ }
+ ApproveTableInfo appInfo = new ApproveTableInfo();
+ appInfo.setTeamLeaderName(leaderName);
+ appInfo.setProgrammerName(programmerName);
+ appInfo.setCheckerName(checkerName);
+ appInfo.setSeniorName(senioirName);
+
+ //鑾峰彇鏃堕棿淇℃伅
+ List<HistoricTaskInstance> hisTasks = historyService.createHistoricTaskInstanceQuery()
+ .processInstanceId(props.getProcessInstanceId()).orderByTaskCreateTime().desc().list();
+
+ for(HistoricTaskInstance task : hisTasks){
+ if(appInfo.getProgrammingDate()== null && task.getTaskDefinitionKey().contains("program")){
+ appInfo.setProgrammingDate(task.getEndTime());
+ }
+
+ if(appInfo.getCheckDate()== null && task.getTaskDefinitionKey().contains("check")){
+ appInfo.setCheckDate(task.getEndTime());
+ }
+
+ if(appInfo.getApproveDate()== null && task.getTaskDefinitionKey().contains("approve")){
+ appInfo.setApproveDate(task.getEndTime());
+ }
+ }
+
+ //鏌ヨ鏁版帶绋嬪簭缂栧彿
+ Optional<NcProgramApproved> appOpt = programApprovedService.lambdaQuery().eq(NcProgramApproved::getProcessInstanceId, props.getProcessInstanceId()).oneOpt();
+ if(appOpt.isEmpty()){
+ appInfo.setProgramNo("锛堟湭鐢熸垚锛�");
+ }else{
+ NcNode programPkgNameNode = this.ncNodeService.getById(appOpt.get().getNcNodeId());
+ appInfo.setProgramNo(programPkgNameNode.getProgramNo());
+ }
+ return appInfo;
+ }
}
--
Gitblit v1.9.3