From b854c5cde81a88e8dea0b5df03219a2fcfef6ac6 Mon Sep 17 00:00:00 2001
From: yangys <y_ys79@sina.com>
Date: 星期六, 02 八月 2025 17:18:46 +0800
Subject: [PATCH] 自动创建节点
---
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/constants/FlowContants.java | 5 +
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/controller/DispatchController.java | 12 ++
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/FlowProgramProperties.java | 2
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/FlowCommonService.java | 2
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcNodeAutoCreateService.java | 203 ++++++++++++++++++++++++++++++++++++++++
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/task/dispatch/CureProgramCheckTask.java | 3
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/entity/NcNode.java | 53 +++++++++
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/FlowProgramFileService.java | 1
8 files changed, 273 insertions(+), 8 deletions(-)
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/constants/FlowContants.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/constants/FlowContants.java
index adf4479..049a9a4 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/constants/FlowContants.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/constants/FlowContants.java
@@ -31,4 +31,9 @@
* 浜у搧鍨嬪彿
*/
public static final String PRODUCT_MODEL = "productModel";
+
+ /**
+ * 鏄惁鏈夊浐鍖栫▼搴�
+ */
+ public static final String HAS_CURED_PROGRAM = "hasCuredProgram";
}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/controller/DispatchController.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/controller/DispatchController.java
index 090b3b1..81ed709 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/controller/DispatchController.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/controller/DispatchController.java
@@ -24,6 +24,7 @@
import org.springblade.mdm.flow.service.FlowProgramFileService;
import org.springblade.mdm.flow.vo.TaskAssignVO;
import org.springblade.mdm.program.entity.ProcessProgRef;
+import org.springblade.mdm.program.service.NcNodeAutoCreateService;
import org.springblade.mdm.program.service.ProcessProgRefService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
@@ -52,6 +53,8 @@
private final FlowCommonService flowCommonService;
private final FlowProgramFileService flowProgramFileService;
+
+ private final NcNodeAutoCreateService ncNodeAutoCreateService;
/**
* 鍙戣捣娲惧伐娴佺▼
*/
@@ -69,8 +72,8 @@
Task task = taskService.createTaskQuery()
.taskId(taskId)
.singleResult();
+ String operateResult = variables.get("approve")+"";
if(task.getTaskDefinitionKey().equals("programmingTask")) {//缂栧埗鑺傜偣
- String operateResult = variables.get("approve")+"";
flowProgramFileService.checkProgramFiles(processInstanceId,"Y".equals(operateResult));
}
// 澧炲姞璇勮
@@ -81,6 +84,7 @@
if (Func.isEmpty(variables)) {
variables = Kv.create();
}
+ /*
String programIds = null;
if(variables.containsKey(FlowContants.PROGRAM_IDS_KEY)){
programIds = variables.get("programIds").toString();
@@ -90,6 +94,7 @@
//杩欏凡缁忔病鐢ㄤ簡锛岀洿鎺ヤ娇鐢ㄤ复鏃舵枃浠�
processProgRefService.addRelations(processInstanceId,Func.toLongList(programIds));
}
+ */
//鍔犲叆瀹℃壒鐢ㄦ埛
variables.put("approveUserNickName",AuthUtil.getNickName());
@@ -98,7 +103,10 @@
addApproveRecord(taskId,processInstanceId,comment,variables);
//鎸囧畾浜嗕笅涓�姝ユ墽琛屼汉
taskService.complete(taskId, variables);
-
+ //鍦ㄧ紪鍒朵换鍔℃椂锛屽垱寤鸿妭鐐癸紙娌℃湁鑺傜偣鍒欏垱寤猴紝鏈夊氨鐩存帴浣跨敤
+ if(task.getTaskDefinitionKey().equals("programmingTask") && "Y".equals(operateResult)) {
+ ncNodeAutoCreateService.createNodeTree(processInstanceId);
+ }
return R.success("娴佺▼鎻愪氦鎴愬姛");
}else {
// 瀹屾垚浠诲姟,缁欓粯璁ょ敤鎴�
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/FlowCommonService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/FlowCommonService.java
index 218c7bd..128e032 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/FlowCommonService.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/FlowCommonService.java
@@ -46,7 +46,7 @@
//鏁版嵁澶勭悊鍚嶇О涓虹増娆′互鍓嶏紝闆朵欢鍙峰姞宸ュ簭鍙凤細YZL4-1100-01-50 闆剁粍浠跺彿锛歒ZL4-1100-01 宸ュ簭鍙� 50
programProperties.setCraftEdition(String.valueOf(vars.get(FlowContants.CRAFT_EDITION)));
-
+ programProperties.setHasCuredProgram(String.valueOf(vars.get(FlowContants.HAS_CURED_PROGRAM)));
return programProperties;
}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/FlowProgramFileService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/FlowProgramFileService.java
index 085a2a3..c1c02af 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/FlowProgramFileService.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/FlowProgramFileService.java
@@ -189,6 +189,7 @@
throw new ServiceException("搴斾笂浼�"+totalSeg+"娈电▼搴忥紝瀹為檯涓婁紶"+flowPrograms.size()+"娈�");
}
+
}
/**
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/FlowProgramProperties.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/FlowProgramProperties.java
index 85e0b58..2fb1a5c 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/FlowProgramProperties.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/FlowProgramProperties.java
@@ -38,4 +38,6 @@
@Schema(description = "璁″垝寮�宸ユ椂闂�")
private LocalDate planStartTime;
+ @Schema(description = "鏄惁鏈夊浐鍖栫▼搴�")
+ private String hasCuredProgram;
}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/task/dispatch/CureProgramCheckTask.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/task/dispatch/CureProgramCheckTask.java
index 8b013e1..f801545 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/task/dispatch/CureProgramCheckTask.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/task/dispatch/CureProgramCheckTask.java
@@ -10,7 +10,8 @@
public class CureProgramCheckTask {
public void execute(DelegateExecution execution) {
- //鍥哄寲绋嬪簭妫�鏌ユ湁鏁堟湡锛�
+ //鍥哄寲绋嬪簭妫�鏌ユ湁鏁堟湡锛屽伐搴忕増娆℃槸鍚︿竴鑷寸殑妫�鏌ワ紝瀹屽叏鏍规嵁绋嬪簭鍖呭悕杩涜妫�鏌ュ嵆鍙�
+ //TODO
String hasCuredProgram = (String)execution.getVariable("hasCuredProgram");
NcProgram ncProgram = (NcProgram)execution.getVariable("curedNcProgram");
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/entity/NcNode.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/entity/NcNode.java
index fbc670b..3363924 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/entity/NcNode.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/entity/NcNode.java
@@ -9,6 +9,46 @@
@Getter
@TableName("mdm_nc_node")
public class NcNode extends BizEntity {
+ /**
+ * 鑺傜偣绫诲瀷锛� 绋嬪簭鐘舵�� 10
+ */
+ public static final String TYPE_PROGRAM_STATUS = "10";
+ /*
+ 浜у搧鍨嬪彿
+ */
+ public static final String TYPE_PRODUCT_MODEL = "15";
+ /**
+ * 鑺傜偣绫诲瀷锛� 闆剁粍浠跺彿/鍥惧彿 10
+ */
+ public static final String TYPE_DRAWING_NO = "20";
+ /**
+ * 宸ヨ壓鐗堟
+ *
+ */
+ public static final String TYPE_CRAFT_EDITION = "30";
+ /**
+ * 宸ュ簭鍙�
+ *
+ */
+ public static final String TYPE_PROCESS_NO = "40";
+ /**
+ * 宸ュ簭鐗堟
+ */
+ public static final String TYPE_PROCESS_EDITION = "45";
+ /**
+ * 鍔犲伐鏈哄簥
+ */
+ public static final String TYPE_MACHINE_CODE = "50";
+ /**
+ * 绋嬪簭鍖呭悕
+ */
+ public static final String TYPE_PROGRAM_PACKAGE = "60";
+
+ /**
+ * 绋嬪簭鏂囦欢
+ */
+ public static final String TYPE_PROGRAM_FILE = "70";
+
private String name;
private Long parentId;
@@ -31,12 +71,12 @@
/**
* 宸ュ簭鐗堟
*/
- //private String processEdition;
+ private String processEdition;
/**
* 宸ヨ壓鐗堟
*/
- //private String craftEdition;
+ private String craftEdition;
/**
* 闆剁粍浠跺彿/鍥惧彿
*/
@@ -44,7 +84,7 @@
/**
* 鍥惧彿鐗堟
*/
- //private String partNoEdition;
+ private String drawingNoEdition;
/**
* 鏄惁鍥哄寲
@@ -65,6 +105,11 @@
private String description;
private String remark;
+ //0808鏂板
+ /**
+ * 绋嬪簭鏂囦欢鑺傜偣鐨勬暟鎹�
+ */
+ private String processNo;
-
+ private String productModel;
}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcNodeAutoCreateService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcNodeAutoCreateService.java
new file mode 100644
index 0000000..d528ca7
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcNodeAutoCreateService.java
@@ -0,0 +1,203 @@
+
+package org.springblade.mdm.program.service;
+
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springblade.core.mp.base.BizServiceImpl;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.mdm.flow.entity.FlowProgramFile;
+import org.springblade.mdm.flow.service.FlowCommonService;
+import org.springblade.mdm.flow.service.FlowProgramFileService;
+import org.springblade.mdm.flow.service.FlowProgramProperties;
+import org.springblade.mdm.program.entity.NcNode;
+import org.springblade.mdm.program.mapper.NcNodeMapper;
+import org.springblade.mdm.program.vo.NcNodeQueryVO;
+import org.springblade.mdm.program.vo.NcNodeVO;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+import java.util.Optional;
+
+/**
+ * 绋嬪簭鑺傜偣
+ *
+ * @author yangys
+ */
+@Slf4j
+@Service
+@AllArgsConstructor
+public class NcNodeAutoCreateService {
+ private final NcNodeService ncNodeService;
+ private final FlowCommonService flowCommonService;
+ private final FlowProgramFileService flowProgramFileService;
+
+ public static final String SHIQIE_NAME = "璇曞垏";
+ public static final String GUHUA_NAME = "鍥哄寲";
+ public static final String PIANLI_NAME = "鍋忕";
+ /**
+ * 鏍规嵁娴佺▼淇℃伅锛岃嚜鍔ㄥ垱寤哄悇涓妭鐐�
+ * @param processInstanceId
+ */
+ public void createNodeTree(String processInstanceId) {
+ FlowProgramProperties programProperties = flowCommonService.getProgramProperties(processInstanceId);
+
+ //,int rootNodeCatgory = 1:璇曞垏锛�2鍥哄寲锛�3鍋忕
+ NcNode programPkdNode = createTreeToProgramPackageByRootCategory(1,programProperties);
+
+ List<FlowProgramFile> programFiles = flowProgramFileService.lambdaQuery().eq(FlowProgramFile::getProcessInstanceId, processInstanceId).list();
+ for (FlowProgramFile programFile : programFiles) {
+ createProgramFileNode(programFile,programPkdNode,programProperties);
+ }
+ }
+
+ private void createProgramFileNode(FlowProgramFile programFile, NcNode programPkdNode, FlowProgramProperties programProperties) {
+ NcNode node = new NcNode();
+ node.setNodeType(NcNode.TYPE_PROGRAM_FILE);
+ node.setName(programFile.getProgramName());
+ node.setParentId(programPkdNode.getId());
+ node.setParentIds(programPkdNode.getParentIds()+","+programPkdNode.getId());
+
+ node.setDrawingNo(programPkdNode.getDrawingNo());
+ node.setDrawingNoEdition(programProperties.getDrawingNoEdition());
+ node.setProcessNo(programProperties.getProcessNo());
+ node.setMachineCode(programProperties.getMachineCode());
+ node.setProductModel(programProperties.getProductModel());
+ ncNodeService.save(node);
+ }
+
+ NcNode createTreeToProgramPackageByRootCategory(int category,FlowProgramProperties programProperties) {
+ NcNode root;
+ if(category == 1){
+ //璇曞垏
+ root = rootNodeByName(SHIQIE_NAME);
+ if(root == null){
+ root = createShiqieNode();
+ }
+ }else if(category == 2){
+ root = rootNodeByName(GUHUA_NAME);
+ if(root == null){
+ root = createCureNode();
+ }
+ }else{
+ root = rootNodeByName(PIANLI_NAME);
+ if(root == null){
+ root = createPianliNode();
+ }
+ }
+
+ //鍒涘缓浜у搧鍨嬪彿鑺傜偣
+ //NcNode productModelNode = createProductModelNode(programProperties.getProductModel(), root);
+ NcNode productModelNode = createNodeIfNotExists(programProperties.getProductModel(),NcNode.TYPE_PRODUCT_MODEL, root);
+ //闆剁粍浠跺彿鑺傜偣
+ NcNode drawingNoNode = createNodeIfNotExists(programProperties.getDrawingNo(),NcNode.TYPE_DRAWING_NO, productModelNode);
+ //宸ヨ壓鐗堟鑺傜偣
+ NcNode craftEditionNode = createNodeIfNotExists(programProperties.getCraftEdition(),NcNode.TYPE_CRAFT_EDITION, drawingNoNode);
+ //宸ュ簭鍙疯妭
+ NcNode processNoNode = createNodeIfNotExists(programProperties.getCraftEdition(),NcNode.TYPE_PROCESS_NO, craftEditionNode);
+ //宸ュ簭鐗堟鑺傜偣
+ NcNode processEditionNode = createNodeIfNotExists(programProperties.getCraftEdition(),NcNode.TYPE_PROCESS_EDITION, processNoNode);
+ //鍔犲伐鏈哄簥鑺傜偣
+ NcNode machineCodeNode = createNodeIfNotExists(programProperties.getCraftEdition(),NcNode.TYPE_MACHINE_CODE, processEditionNode);
+ //绋嬪簭鍖呭悕鑺傜偣
+ NcNode programPkgNode = createNodeIfNotExists(programProperties.getCraftEdition(),NcNode.TYPE_PROGRAM_PACKAGE, machineCodeNode);
+
+ return programPkgNode;
+ //绋嬪簭鏂囦欢鑺傜偣锛屽涓枃浠堕渶瑕佸惊鐜垱寤�
+
+ }
+ /*
+ NcNode createProductModelNode(String name,NcNode parentNode){
+ NcNode ncNode = new NcNode();
+ ncNode.setName(name);
+ ncNode.setParentId(parentNode.getId());
+ ncNode.setParentIds(parentNode.getParentIds()+","+parentNode.getId());
+ ncNode.setNodeType("15");
+ ncNodeService.save(ncNode);
+
+ return ncNode;
+ }
+
+ */
+
+ /**
+ * 涓嶅瓨鍦ㄥ垯鍒涘缓鑺傜偣
+ * @param name 鑺傜偣鍚嶇О
+ * @param nodeType 鑺傜偣绫诲瀷
+ * @param parentNode 鐖惰妭鐐�
+ * @return
+ */
+ NcNode createNodeIfNotExists(String name,String nodeType,NcNode parentNode){
+ Optional<NcNode> nodeOpt = this.ncNodeService.lambdaQuery().eq(NcNode::getName,name).eq(NcNode::getNodeType,nodeType).eq(NcNode::getParentId,parentNode.getId()).oneOpt();
+ if(nodeOpt.isPresent()){
+ return nodeOpt.get();
+ }else {
+ NcNode ncNode = new NcNode();
+ ncNode.setName(name);
+ ncNode.setParentId(parentNode.getId());
+ ncNode.setParentIds(parentNode.getParentIds() + "," + parentNode.getId());
+ ncNode.setNodeType(nodeType);
+ ncNodeService.save(ncNode);
+
+ return ncNode;
+ }
+ }
+
+ /**
+ * 鏍硅妭鐐规槸鍚﹀瓨鍦紝鏍硅妭鐐瑰彧鏈� 璇曞垏/鍒嗙/鍥哄寲 3涓�
+ * @param name 鑺傜偣鍚嶇О
+ * @return
+ */
+ boolean rootNodeExists(String name){
+ return ncNodeService.lambdaQuery().eq(NcNode::getName, name).eq(NcNode::getParentId, 0).count()>0;
+ }
+
+ NcNode rootNodeByName(String name){
+ Optional<NcNode> rootOpt = ncNodeService.lambdaQuery().eq(NcNode::getName, name).eq(NcNode::getParentId, 0).oneOpt();
+ return rootOpt.orElse(null);
+ }
+
+ /**
+ * 鍒涘缓璇曞垏鑺傜偣锛堟牴锛�
+ */
+ NcNode createShiqieNode() {
+ NcNode ncNode = new NcNode();
+ ncNode.setId(1L);
+ ncNode.setName(SHIQIE_NAME);
+ ncNode.setParentId(0L);
+ ncNode.setParentIds("");
+ ncNode.setNodeType("10");
+ ncNodeService.save(ncNode);
+
+ return ncNode;
+ }
+
+ /**
+ * 鍒涘缓鍥哄寲鑺傜偣锛堟牴锛�
+ */
+ NcNode createCureNode() {
+ NcNode ncNode = new NcNode();
+ ncNode.setId(2L);
+ ncNode.setName(GUHUA_NAME);
+ ncNode.setParentId(0L);
+ ncNode.setParentIds("");
+ ncNode.setNodeType("10");
+ ncNodeService.save(ncNode);
+
+ return ncNode;
+ }
+
+ NcNode createPianliNode() {
+ NcNode ncNode = new NcNode();
+ ncNode.setId(3L);
+ ncNode.setName(PIANLI_NAME);
+ ncNode.setParentId(0L);
+ ncNode.setParentIds("");
+ ncNode.setNodeType("10");
+ ncNodeService.save(ncNode);
+
+ return ncNode;
+ }
+}
--
Gitblit v1.9.3