From 86d0a38916d2edb66e451c44f1f1b9729dee965b Mon Sep 17 00:00:00 2001
From: yangys <y_ys79@sina.com>
Date: 星期五, 25 七月 2025 15:02:04 +0800
Subject: [PATCH] 增加首页查询接口

---
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/vo/NcNodeVO.java                           |   20 ++++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/NcNodeMapper.java                   |    5 +
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/ProgramFlowStatusQueryService.java |   60 ++++++++++++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/NcNodeMapper.xml                    |   43 ++++++++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/NcNodeController.java           |   40 +++++++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcNodeService.java                 |   63 ++++++++++++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/vo/NcNodeQueryVO.java                      |   20 ++++
 7 files changed, 248 insertions(+), 3 deletions(-)

diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/NcNodeController.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/NcNodeController.java
index 8a64c8c..3bdbf63 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/NcNodeController.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/NcNodeController.java
@@ -12,13 +12,16 @@
 import lombok.extern.slf4j.Slf4j;
 import org.springblade.core.tenant.annotation.NonDS;
 import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.Func;
 import org.springblade.mdm.basesetting.machine.vo.MachineQueryVO;
 import org.springblade.mdm.basesetting.machine.vo.MachineVO;
 import org.springblade.mdm.program.entity.NcProgram;
 import org.springblade.mdm.program.service.NcNodeService;
 import org.springblade.mdm.program.service.NcProgramService;
+import org.springblade.mdm.program.service.ProgramFlowStatusQueryService;
 import org.springblade.mdm.program.vo.NcNodeProgramQueryVO;
 import org.springblade.mdm.program.vo.NcNodeProgramVO;
+import org.springblade.mdm.program.vo.NcNodeQueryVO;
 import org.springblade.mdm.program.vo.NcNodeVO;
 import org.springframework.web.bind.annotation.*;
 
@@ -38,7 +41,7 @@
 public class NcNodeController {
 	private final NcProgramService ncProgramService;
 	private final NcNodeService ncNodeService;
-
+	private final ProgramFlowStatusQueryService programFlowStatusQueryService;
 	/**
 	 * 鏂板
 	 */
@@ -80,6 +83,9 @@
 					ncNodeVO.setMachineCode(program.getMachineCode());
 					ncNodeVO.setProcessName(program.getProcessName());
 					ncNodeVO.setVersionNumber(program.getVersionNumber());
+
+					//record涓壘涓嶅埌鏃舵湭鍚姩0锛涙壘鍒颁簡闇�瑕佹煡璇㈡祦绋嬪疄渚媔d锛屾槸鍚﹁繍琛屼腑
+					ncNodeVO.setFlowStatus(programFlowStatusQueryService.queryFlowStatus(program.getId()));
 				}
 			}
 
@@ -87,6 +93,38 @@
 		return R.data(list);
 	}
 
+	@GetMapping("/search-list")
+	@Operation(summary = "鏌ヨ鏍戠姸鍒楄〃", description = "绋嬪簭鐩綍鏍戝舰缁撴瀯锛堟煡璇笓鐢級")
+	public R<List<NcNodeVO>> searchList(NcNodeQueryVO queryVO) {
+		if(Func.isEmpty(queryVO.getName())){
+			return R.fail("璇疯緭鍏ュ悕绉�");
+		}
+		List<NcNodeVO> list = ncNodeService.searchList(queryVO);
+		/*
+		if(list != null && !list.isEmpty()) {
+			for(NcNodeVO ncNodeVO : list) {
+				if(!"70".equals(ncNodeVO.getNodeType())){
+					break;
+				}
+				NcProgram program = ncProgramService.getByBindNodeId(ncNodeVO.getId());
+				if(program != null) {
+					ncNodeVO.setProcessEdition(program.getProcessEdition());
+					ncNodeVO.setDrawingNo(program.getDrawingNo());
+					ncNodeVO.setMachineCode(program.getMachineCode());
+					ncNodeVO.setProcessName(program.getProcessName());
+					ncNodeVO.setVersionNumber(program.getVersionNumber());
+
+					//record涓壘涓嶅埌鏃舵湭鍚姩0锛涙壘鍒颁簡闇�瑕佹煡璇㈡祦绋嬪疄渚媔d锛屾槸鍚﹁繍琛屼腑
+					ncNodeVO.setFlowStatus(programFlowStatusQueryService.queryFlowStatus(program.getId()));
+				}
+			}
+
+		}
+
+		 */
+		return R.data(list);
+	}
+
 	/*
 	@Operation(summary = "绋嬪簭鍒嗛〉鏌ヨ", description = "鐢ㄤ簬鍦ㄧ紪鍒惰妭鐐归�夋嫨娴佺▼瀵瑰簲鐨勭▼搴�")
 	@GetMapping("/programpickpage")
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/NcNodeMapper.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/NcNodeMapper.java
index 59b9a2f..fc66170 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/NcNodeMapper.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/NcNodeMapper.java
@@ -7,6 +7,7 @@
 import org.springblade.mdm.program.entity.NcProgram;
 import org.springblade.mdm.program.vo.NcNodeProgramQueryVO;
 import org.springblade.mdm.program.vo.NcNodeProgramVO;
+import org.springblade.mdm.program.vo.NcNodeQueryVO;
 import org.springblade.mdm.program.vo.NcNodeVO;
 
 import java.util.List;
@@ -22,4 +23,8 @@
 	 * @return 绋嬪簭鑺傜偣
 	 */
 	NcNode getLastProgramNode(String name);
+
+    List<NcNodeVO> searchList(NcNodeQueryVO queryVO);
+
+	List<NcNodeVO> searchListInIds(List<Long> ids);
 }
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/NcNodeMapper.xml b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/NcNodeMapper.xml
index 7513fc0..27d7e00 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/NcNodeMapper.xml
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/NcNodeMapper.xml
@@ -34,8 +34,8 @@
         limit 1
     </select>
 
-    <sql id="all_columns">id,tenant_id,name,parent_id,node_type,status,create_dept,is_deleted,create_time,create_user,update_time,update_user</sql>
-    <sql id="all_columns_n">n.id,n.tenant_id,n.name,n.parent_id,n.node_type,n.description,n.remark,n.status,n.create_dept,n.is_deleted,n.create_time,n.create_user,n.update_time,n.update_user</sql>
+    <sql id="all_columns">id,tenant_id,name,parent_id,parent_ids,node_type,status,create_dept,is_deleted,create_time,create_user,update_time,update_user</sql>
+    <sql id="all_columns_n">n.id,n.tenant_id,n.name,n.parent_id,n.parent_ids,n.node_type,n.description,n.remark,n.status,n.create_dept,n.is_deleted,n.create_time,n.create_user,n.update_time,n.update_user</sql>
     <select id="lazyList" resultType="org.springblade.mdm.program.vo.NcNodeVO">
         select <include refid="all_columns_n"/>,dt.dict_value as node_type_name,u.name create_user_name,(
         SELECT
@@ -55,4 +55,43 @@
         select <include refid="all_columns"/> from mdm_nc_node
         where is_deleted=0 and node_type='60' and is_last_edition=1 order by create_time desc limit 1
     </select>
+
+    <!--棣栭〉鏌ヨ-->
+    <select id="searchList" resultType="org.springblade.mdm.program.vo.NcNodeVO">
+        select <include refid="all_columns_n"/>,dt.dict_value as node_type_name,u.name create_user_name,(
+        SELECT
+        CASE WHEN count(1) > 0 THEN 1 ELSE 0 END
+        FROM
+        mdm_nc_node
+        WHERE
+        parent_id = n.id and is_deleted = 0
+        ) AS "has_children" from mdm_nc_node n left join blade_user u on n.create_user=u.id
+        left join blade_dict_biz dt on n.node_type=dt.dict_key and dt.code='nc_node_type' and dt.is_deleted=0
+        where n.is_deleted=0 and n.node_type=#{nodeType} and n.name like CONCAT('%', #{name}, '%')
+
+    </select>
+    <select id="searchListInIds" resultType="org.springblade.mdm.program.vo.NcNodeVO">
+        select <include refid="all_columns_n"/>,dt.dict_value as node_type_name,u.name create_user_name,(
+        SELECT
+        CASE WHEN count(1) > 0 THEN 1 ELSE 0 END
+        FROM
+        mdm_nc_node
+        WHERE
+        parent_id = n.id and is_deleted = 0
+        ) AS "has_children" from mdm_nc_node n left join blade_user u on n.create_user=u.id
+        left join blade_dict_biz dt on n.node_type=dt.dict_key and dt.code='nc_node_type' and dt.is_deleted=0
+        <where>
+                <if test="ids != null and ids.size() > 0">
+                    n.id IN
+                    <foreach collection="ids" item="id" open="(" separator="," close=")">
+                        #{id}
+                    </foreach>
+                </if>
+                <if test="ids == null or ids.size() == 0">
+                    1=0
+                </if>
+        </where>
+    </select>
+
+
 </mapper>
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcNodeService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcNodeService.java
index 7dbff0f..e3c8dc6 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcNodeService.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcNodeService.java
@@ -12,11 +12,14 @@
 import org.springblade.mdm.program.mapper.NcNodeMapper;
 import org.springblade.mdm.program.vo.NcNodeProgramQueryVO;
 import org.springblade.mdm.program.vo.NcNodeProgramVO;
+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;
 
 /**
  * 绋嬪簭鑺傜偣
@@ -94,4 +97,64 @@
 	}
 
 
+	/**
+	 * 棣栭〉鏍戞煡璇�
+	 * @param queryVO
+	 * @return
+	 */
+	public List<NcNodeVO> searchList(NcNodeQueryVO queryVO) {
+		//1.鏍规嵁鍏宠繘瀛楀拰鑺傜偣绫诲瀷鏌ヨ鍒濆鍒楄〃,鏌ヨ鐨勫師濮嬪垪琛紝闇�瑕乭asChild瀛楁锛屾墍浠ヤ娇鐢╩apper.xml
+		List<NcNodeVO> oriList = this.getBaseMapper().searchList(queryVO);
+		//List<NcNode> list = this.lambdaQuery().eq(NcNode::getNodeType, queryVO.getNodeType()).like(NcNode::getName, queryVO.getName()).list();
+		if ("10".equals(queryVO.getNodeType())) {
+			//鎼滅储鐨勬牴绾у埆锛岀洿鎺ヨ繑鍥�
+			return oriList;
+		}
+
+		List<NcNodeVO> allVos = new ArrayList<NcNodeVO>();//宸茬粡鍔犲叆杩囩殑鑺傜偣锛岀敤浜庡幓閲�
+		List<NcNodeVO> rootVos = new ArrayList<NcNodeVO>();
+
+		//List<NcNode> rootNodes = new ArrayList<>();
+
+		for(NcNodeVO vo : oriList){
+			allVos.add(vo);
+			//涓婄骇鍚勭骇鐨勮妭鐐�
+			List<NcNodeVO> parents = this.getBaseMapper().searchListInIds(Func.toLongList(vo.getParentIds()));
+
+			for(NcNodeVO pvo : parents){
+				if(pvo.getParentId() == 0L){
+					rootVos.add(pvo);
+				}
+				allVos.add(pvo);
+			}
+		}
+		for(NcNodeVO root : rootVos){
+			addNodeChildren(root, allVos);
+
+		}
+		return rootVos;
+	}
+
+	void addNodeChildren(NcNodeVO node, List<NcNodeVO> allNodes) {
+		for(NcNodeVO vo : allNodes){
+			if(Objects.equals(vo.getParentId(), node.getId())){
+				node.addChildren(vo);
+			}
+		}
+
+		if(node.getChildren()!=null && !node.getChildren().isEmpty()){
+			for(NcNodeVO child : node.getChildren()){
+				addNodeChildren(child, allNodes);
+			}
+		}
+	}
+
+	NcNodeVO toNodeVO(NcNode node){
+		NcNodeVO vo = new NcNodeVO();
+
+		BeanUtils.copyProperties(node, vo);
+
+		return vo;
+	}
+
 }
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/ProgramFlowStatusQueryService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/ProgramFlowStatusQueryService.java
new file mode 100644
index 0000000..d1cb144
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/ProgramFlowStatusQueryService.java
@@ -0,0 +1,60 @@
+
+package org.springblade.mdm.program.service;
+
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.flowable.engine.HistoryService;
+import org.flowable.engine.RuntimeService;
+import org.flowable.engine.history.HistoricProcessInstance;
+import org.springblade.core.mp.base.BizServiceImpl;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.mdm.flow.entity.ApproveRecord;
+import org.springblade.mdm.flow.service.ApproveRecordService;
+import org.springblade.mdm.program.entity.NcNode;
+import org.springblade.mdm.program.mapper.NcNodeMapper;
+import org.springblade.mdm.program.vo.NcNodeVO;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 绋嬪簭鑺傜偣
+ *
+ * @author yangys
+ */
+@Slf4j
+@Service
+@AllArgsConstructor
+public class ProgramFlowStatusQueryService {
+	private final RuntimeService runtimeService;
+
+	private final ApproveRecordService approveRecordService;
+	private final HistoryService historyService;
+	public int queryFlowStatus(Long ncPogramId) {
+
+		List<ApproveRecord> records = approveRecordService.lambdaQuery().eq(ApproveRecord::getNcProgramId, ncPogramId).orderByDesc(ApproveRecord::getCreateTime).last("limit 1").list();
+
+		if(records.isEmpty()){
+			return 0;
+		}
+		String processInstanceId = records.get(0).getProcessInstanceId();
+
+		int status = 0;
+		HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery()
+			.processInstanceId(processInstanceId)
+			.singleResult();
+
+		if (historicProcessInstance != null && historicProcessInstance.getEndTime() != null) {
+			// 娴佺▼宸插畬鎴�
+			status = 2; //宸查�氳繃锛屾湁鏃犻┏鍥炲憿锛�
+			//妫�鏌ユ渶鍚庝竴涓鎵圭粨鏋滐紝濡傛灉鏃禢锛岄偅灏辨椂椹冲洖浜唖tatus = =3;
+		} else {
+			// 娴佺▼鏈畬鎴�
+			status = 1;
+		}
+		return status;
+	}
+
+
+}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/vo/NcNodeQueryVO.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/vo/NcNodeQueryVO.java
new file mode 100644
index 0000000..1af251c
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/vo/NcNodeQueryVO.java
@@ -0,0 +1,20 @@
+package org.springblade.mdm.program.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+import org.springblade.mdm.commons.vo.BaseVO;
+
+
+@Schema(description = "棣栭〉 鏍戞煡璇㈠弬鏁板璞�")
+@Setter
+@Getter
+public class NcNodeQueryVO {
+	@Schema(description = "鑺傜偣鍚嶇О锛堟煡璇㈠叧閿瓧锛�")
+	private String name;
+
+	@Schema(description = "鑺傜偣绫诲瀷锛屽瓧鍏�(绋嬪簭鑺傜偣绫诲瀷nc_node_type)")
+	private String nodeType;
+
+
+}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/vo/NcNodeVO.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/vo/NcNodeVO.java
index 9ef5b21..ebbbbe8 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/vo/NcNodeVO.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/vo/NcNodeVO.java
@@ -1,17 +1,24 @@
 package org.springblade.mdm.program.vo;
 
 import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.EqualsAndHashCode;
 import lombok.Getter;
 import lombok.Setter;
 import org.springblade.mdm.commons.vo.BaseVO;
 
+import java.util.ArrayList;
+import java.util.List;
+
 @Setter
 @Getter
+@EqualsAndHashCode
 public class NcNodeVO extends BaseVO {
 	@Schema(description = "鑺傜偣鍚嶇О")
 	private String name;
 	@Schema(description = "鐖禝D,鏍硅妭鐐圭埗id=0")
 	private Long parentId;
+	@Schema(description = "鎵�鏈変笂绾ц妭鐐筰d")
+	private String parentIds;
 	@Schema(description = "璁惧缂栧彿")
 	private String machineCode;
 	@Schema(description = "鑺傜偣绫诲瀷锛屽瓧鍏�(绋嬪簭鑺傜偣绫诲瀷nc_node_type)")
@@ -36,4 +43,17 @@
 
 	@Schema(description = "鐗堟湰鍙�,绋嬪簭鏂囦欢鑺傜偣鐨勫睘鎬�")
 	private Integer versionNumber;
+	@Schema(description = "娴佺▼鐘舵��,绋嬪簭鏂囦欢鑺傜偣鐨勫睘鎬�")
+	private Integer flowStatus;
+	@Schema(description = "瀛愯妭鐐�")
+	private List<NcNodeVO> children;
+
+	public void addChildren(NcNodeVO node){
+		if(children == null){
+			children = new ArrayList<NcNodeVO>();
+		}
+		if(!children.contains(node)){
+			children.add(node);
+		}
+	}
 }

--
Gitblit v1.9.3