From ef4a26bca3552aed5865e5ef3ef2804b8509d31b Mon Sep 17 00:00:00 2001
From: yangys <y_ys79@sina.com>
Date: 星期二, 08 七月 2025 13:57:06 +0800
Subject: [PATCH] 增加param调用接口

---
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/vo/NcNodeVO.java                       |    2 
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/MdmParamController.java     |   47 +++++++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramExportDNCService.java |   11 +
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/NcNodeMapper.xml                |    7 
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/StartDispatcher.java             |   44 ++++--
 blade-service/blade-mdm/pom.xml                                                                          |    4 
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/MdmProgramImportService.java   |   45 +++++++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramExchangeService.java  |  173 ++++++++++++++++++++++++++--
 8 files changed, 302 insertions(+), 31 deletions(-)

diff --git a/blade-service/blade-mdm/pom.xml b/blade-service/blade-mdm/pom.xml
index 9c621b1..1c880ef 100644
--- a/blade-service/blade-mdm/pom.xml
+++ b/blade-service/blade-mdm/pom.xml
@@ -44,6 +44,10 @@
         </dependency>
         <dependency>
             <groupId>org.springblade</groupId>
+            <artifactId>blade-system-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
             <artifactId>blade-flow-api</artifactId>
         </dependency>
         <!-- 宸ヤ綔娴� -->
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/StartDispatcher.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/StartDispatcher.java
index 675d536..49b4588 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/StartDispatcher.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/StartDispatcher.java
@@ -1,6 +1,7 @@
 package org.springblade.mdm.flow.excution;
 
 import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
 import org.flowable.common.engine.impl.identity.Authentication;
 import org.flowable.engine.IdentityService;
 import org.flowable.engine.runtime.ProcessInstance;
@@ -11,7 +12,9 @@
 import org.springblade.flow.core.utils.TaskUtil;
 import org.springblade.mdm.flow.vo.TaskAssignVO;
 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.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.flowable.engine.RuntimeService;
@@ -19,20 +22,23 @@
 import java.util.List;
 import java.util.Map;
 
+@AllArgsConstructor
 @Service("startDispatcher")
 public class StartDispatcher  {
 
-	@Autowired
-	private RuntimeService runtimeService;
-	@Autowired
-	private AutoAssignUsersService autoAssignUsersService;
-	@Autowired
-	private IdentityService identityService;
+	private final RuntimeService runtimeService;
+	private final AutoAssignUsersService autoAssignUsersService;
 
-	@Autowired
-	private NcProgramService ncProgramService;
+	private final IdentityService identityService;
+	private final ProcessProgRefService processProgRefService;
+	private final NcProgramService ncProgramService;
+
 	private static final String PROCESS_KEY = "dispatch";
 
+	/**
+	 * 鍚姩娲惧伐娴佺▼
+	 * @param startVO
+	 */
 	public void start(TaskAssignVO startVO){
 
 		Map<String,Object> preAssignee = autoAssignUsersService.autoAssignUsers(startVO.getProducePlanId());
@@ -51,22 +57,27 @@
 		vars.put("partNoEdition",startVO.getPartNoEdition());
 		vars.put("planLockDays",startVO.getPlanLockDays());
 		vars.put("productModel",startVO.getProductModel());
-		//闆剁粍浠朵唬鐮�
-		String partNo = generatePartNo(startVO);
-		vars.put("partNo",partNo);
 
-		List<NcProgram> curedNcProgram = ncProgramService.getCuredNcProgram(partNo,startVO.getMachineCode());
-		//vars.put("curedNcProgram",curedNcProgram);
 
+		List<NcProgram> curedNcPrograms = ncProgramService.getCuredNcProgram(startVO.getPartNo(),startVO.getMachineCode());
 		//璁剧疆鏄惁鏈夊浐鍖栫▼搴忔爣璁�
-		vars.put("hasCuredProgram",!curedNcProgram.isEmpty() ? "Y":"N");
+		vars.put("hasCuredProgram",!curedNcPrograms.isEmpty() ? "Y":"N");
+
 
 		String businessKey = "0";//涓氬姟琛╧ey
 
 		identityService.setAuthenticatedUserId(String.valueOf(AuthUtil.getUserId()));//璁剧疆娴佺▼鍙戣捣浜�
 		ProcessInstance pinst = runtimeService.startProcessInstanceByKey(PROCESS_KEY,businessKey,vars);
 
-		int a=1;
+		//濡傛灉鏈夊凡鍥哄寲绋嬪簭锛屽垯灏嗙▼搴廼d鎻掑叆娴佺晠鍏宠仈琛�
+		for(NcProgram ncProgram : curedNcPrograms){
+			ProcessProgRef ref = new ProcessProgRef();
+			ref.setProcessInstanceId(pinst.getId());
+			ref.setNcProgramId(ncProgram.getId());
+
+			processProgRefService.save(ref);
+		}
+
 		//log.info()
 	}
 
@@ -76,6 +87,7 @@
 	 * @param startVO
 	 * @return
 	 */
+	/*
 	String generatePartNo(TaskAssignVO startVO){
 		//TODO 杩欎釜鏍煎紡鏈‘瀹氾紝闇�瑕佺‘璁�
 		return String.format("%s-%s-%s-%s-%s-%s",
@@ -85,5 +97,5 @@
 			startVO.getProcessName(),
 			startVO.getCraftEdition(),
 			startVO.getProcessEdition());
-	}
+	}*/
 }
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/MdmParamController.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/MdmParamController.java
new file mode 100644
index 0000000..7f028d8
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/MdmParamController.java
@@ -0,0 +1,47 @@
+
+package org.springblade.mdm.program.controller;
+
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springblade.core.tenant.annotation.NonDS;
+import org.springblade.core.tool.api.R;
+import org.springblade.mdm.program.service.NcProgramExchangeService;
+import org.springblade.mdm.program.vo.DncSendBackData;
+import org.springblade.system.feign.ISysClient;
+import org.springblade.system.feign.IUserClient;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.List;
+
+/**
+ * 娴佺▼绠$悊鎺ュ彛
+ *
+ * @author Chill
+ */
+@NonDS
+@RestController
+@RequestMapping("/system/param/")
+@AllArgsConstructor
+@Tag(name = "DNC瀵煎叆", description = "DNC瀵煎叆鎺ュ彛")
+@Slf4j
+public class MdmParamController {
+	private final ISysClient sysClient;
+
+	@GetMapping("/getValue")
+	@ApiOperationSupport(order = 2)
+	@Operation(summary = "鑾峰彇鍙傛暟鍊�")
+	public R<String> detail(@Parameter(description = "鍙傛暟Key") @RequestParam String paramKey) {
+		try {
+			return sysClient.getParamValue(paramKey);
+		}catch (Exception e){
+			log.error("鍏ュ簱閿欒",e);
+			return R.fail(e.getMessage());
+		}
+
+	}
+}
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 67157f3..19b09ce 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
@@ -35,15 +35,16 @@
     </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.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"/>,(
+        select <include refid="all_columns_n"/>,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 where is_deleted=0 and parent_id=#{parentId}
+        parent_id = id and is_deleted = 0
+        ) AS "has_children" from mdm_nc_node n left join blade_user u on n.create_user=u.id where n.is_deleted=0 and n.parent_id=#{parentId}
     </select>
 
 
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/MdmProgramImportService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/MdmProgramImportService.java
index bf389c3..1f285df 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/MdmProgramImportService.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/MdmProgramImportService.java
@@ -9,6 +9,7 @@
 import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
 import org.apache.commons.compress.archivers.zip.ZipFile;
 import org.apache.commons.compress.utils.SeekableInMemoryByteChannel;
+import org.springblade.core.mp.base.BizEntity;
 import org.springblade.core.mp.base.BizServiceImpl;
 import org.springblade.core.oss.OssTemplate;
 import org.springblade.core.oss.model.BladeFile;
@@ -17,6 +18,8 @@
 import org.springblade.core.tool.utils.FileUtil;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.core.tool.utils.IoUtil;
+import org.springblade.mdm.flow.entity.ApproveRecord;
+import org.springblade.mdm.flow.service.ApproveRecordService;
 import org.springblade.mdm.flow.service.CureFlowService;
 import org.springblade.mdm.program.entity.NcNode;
 import org.springblade.mdm.program.entity.NcProgram;
@@ -48,6 +51,7 @@
 	private final CureFlowService cureFlowService;
 	private final NcProgramService ncProgramService;
 	private final NcNodeService ncNodeService;
+	private final ApproveRecordService approveRecordService;
 	private final BladeRedis bladeRedis;
 	private final OssTemplate ossTemplate;
 
@@ -214,6 +218,8 @@
 
 		List<NcNode> nodeList = new ArrayList<>();
 		List<NcProgram> progList = new ArrayList<>();
+		List<ApproveRecord> recordList = new ArrayList<>();
+
 		try (SeekableInMemoryByteChannel channel = new SeekableInMemoryByteChannel(bytes);
 			 ZipFile zipFile = new ZipFile(channel)) {
 
@@ -249,6 +255,8 @@
 								d.setPartNo(jsonObject.getString("partNo"));
 								d.setProcessEdition(jsonObject.getString("processEdition"));
 
+								setBaseProperties(d,jsonObject);
+
 								progList.add(d);
 							}
 
@@ -271,7 +279,27 @@
 								node.setParentIds(jsonObject.getString("parentIds"));
 								node.setIsCured(jsonObject.getInteger("isCured"));
 
+								setBaseProperties(node,jsonObject);
+
 								nodeList.add(node);
+							}
+						}
+					}else if(entryName.equals(NcProgramExportDNCService.APPROVE_RECORD_JSON_FILE)){
+						try (InputStream insJson = zipFile.getInputStream(entry)) {
+							String jsonStr = IoUtil.readToString(insJson);
+							JSONArray jsonArray = JSONArray.parseArray(jsonStr);
+							for (int i = 0; i < jsonArray.size(); i++) {
+								JSONObject jsonObject = jsonArray.getJSONObject(i);
+								ApproveRecord record = new ApproveRecord();
+								record.setId(jsonObject.getLong("id"));
+								record.setNcProgramId(jsonObject.getLong("ncProgramId"));
+								record.setUserId(jsonObject.getLong("userId"));
+								record.setUserNickname(jsonObject.getString("userNickname"));
+								record.setOperateResult(jsonObject.getString("operateResult"));
+								record.setOperateTime(jsonObject.getDate("operateTime"));
+								setBaseProperties(record,jsonObject);
+
+								recordList.add(record);
 							}
 						}
 					}
@@ -327,5 +355,22 @@
 			}
 		}
 
+		for(ApproveRecord record:recordList) {
+			ApproveRecord recordTemp = this.approveRecordService.getById(record.getId());
+			if (recordTemp == null) {
+				approveRecordService.save(record);
+			} else {
+				approveRecordService.updateById(record);
+			}
+		}
+
+	}
+
+	void setBaseProperties(BizEntity entity,JSONObject jsonObject){
+		entity.setCreateTime(jsonObject.getDate("createTime"));
+		entity.setUpdateTime(jsonObject.getDate("updateTime"));
+		entity.setStatus(jsonObject.getInteger("status"));
+		entity.setCreateUser(jsonObject.getLong("createUser"));
+		entity.setUpdateUser(jsonObject.getLong("updateUser"));
 	}
 }
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramExchangeService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramExchangeService.java
index 7ead897..e2e2241 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramExchangeService.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramExchangeService.java
@@ -12,13 +12,20 @@
 import org.apache.commons.compress.archivers.zip.ZipFile;
 import org.apache.commons.compress.utils.SeekableInMemoryByteChannel;
 import org.apache.commons.io.IOUtils;
+import org.springblade.core.mp.base.BizEntity;
 import org.springblade.core.mp.base.BizServiceImpl;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
+import org.springblade.core.oss.OssTemplate;
+import org.springblade.core.oss.model.BladeFile;
+import org.springblade.core.redis.cache.BladeRedis;
+import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.utils.FileUtil;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.core.tool.utils.IoUtil;
+import org.springblade.mdm.flow.entity.ApproveRecord;
 import org.springblade.mdm.flow.service.CureFlowService;
+import org.springblade.mdm.program.entity.NcNode;
 import org.springblade.mdm.program.entity.NcProgram;
 import org.springblade.mdm.program.entity.NcProgramExchange;
 import org.springblade.mdm.program.mapper.NcProgramExchangeMapper;
@@ -32,6 +39,7 @@
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
+import java.time.Duration;
 import java.time.LocalDateTime;
 import java.util.*;
 
@@ -46,6 +54,13 @@
 public class NcProgramExchangeService extends BizServiceImpl<NcProgramExchangeMapper, NcProgramExchange> {
 	private final CureFlowService cureFlowService;
 	private final NcProgramService ncProgramService;
+	private final NcNodeService ncNodeService;
+	private final OssTemplate ossTemplate;
+	private final BladeRedis bladeRedis;
+
+	private String getFileKey(){
+		return "dncexpfile-"+ AuthUtil.getUserId();
+	}
 	/**
 	 * dnc鍥炰紶鏂囦欢涓婁紶锛堣В鏋愬悗淇濆瓨鍏pload琛級
 	 * @param file DNC鍥炰紶鏂囦欢
@@ -54,13 +69,15 @@
 	public List<DncSendBackData> dncSendBackUpload(MultipartFile file) {
 		List<DncSendBackData> list;
 		try {
-			//String fileName = file.getOriginalFilename();
+			BladeFile bfile = ossTemplate.putFile(file);//涓婁紶锛屼緵鍚庣画鍏ュ簱浣跨敤
+			//璁剧疆涓�涓紦瀛橈紝2灏忔椂杩囨湡
+			bladeRedis.setEx(getFileKey(),bfile.getName(), Duration.ofHours(2));
+
 			//InputStream zipFileInputStream = FileExchangeUtil.convertFileToZip(file.getInputStream());
 			InputStream zipFileInputStream = file.getInputStream();//test
 
 			byte[] bytes = FileUtil.copyToByteArray(zipFileInputStream);
 			list = parseDncZipFromByteArray(bytes);
-
 
 		} catch (IOException e) {
 			log.error("涓婁紶dnc鍥炰紶鏂囦欢澶辫触",e);
@@ -138,11 +155,6 @@
 						}
 
 					}
-					System.out.println("鏂囦欢鍚�: " + entry.getName());
-					System.out.println("澶у皬: " + entry.getSize());
-
-					// 璇诲彇鏂囦欢鍐呭鍒板瓧鑺傛暟缁�
-					ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
 
 				}
 
@@ -164,13 +176,13 @@
 	 * @param ids id鍒楄〃閫楀彿鍒嗛殧
 	 * @return
 	 */
-	public void dncFileAccept(String ids) {
+	public void dncFileAccept(String ids) throws IOException {
 		List<Long> idList = Func.toLongList(ids);
-		List<NcProgram> progList = ncProgramService.listByIds(idList);
+		//
 		NcProgramExchange exchange;
-		//NcProgram program;
-		//NcNode programNode;
-
+		String pkgFileName = bladeRedis.get(getFileKey());
+		updateProgramData(pkgFileName,idList);
+		List<NcProgram> progList = ncProgramService.listByIds(idList);
 		for(NcProgram prog:progList){
 			exchange = new NcProgramExchange();
 			exchange.setName(prog.getName());
@@ -182,6 +194,143 @@
 		}
 
 		cureFlowService.startCure(progList);
+	}
 
+	void updateProgramData(String pkgFileName,List<Long> idList) throws IOException {
+		InputStream inputStream = this.ossTemplate.statFileStream(pkgFileName);
+		byte[] bytes = FileUtil.copyToByteArray(inputStream);
+
+		List<NcNode> nodeList = new ArrayList<>();
+		List<NcProgram> progList = new ArrayList<>();
+
+		try (SeekableInMemoryByteChannel channel = new SeekableInMemoryByteChannel(bytes);
+			 ZipFile zipFile = new ZipFile(channel)) {
+
+			ZipArchiveEntry entry;
+			Enumeration<ZipArchiveEntry> entries = zipFile.getEntries();
+			while (entries.hasMoreElements()) {
+				entry = entries.nextElement();
+
+				String entryName = entry.getName();
+
+				if (entry.isDirectory()) {
+					continue;
+				}
+				if(entryName.equals(NcProgramExportDNCService.PROGRAM_JSON_FILE)){
+
+					try (InputStream insJson = zipFile.getInputStream(entry)) {
+						String jsonStr = IoUtil.readToString(insJson);
+
+						JSONArray jsonArray = JSONArray.parseArray(jsonStr);
+						for(int i=0;i<jsonArray.size();i++){
+							JSONObject jsonObject = jsonArray.getJSONObject(i);
+							NcProgram program = new NcProgram();
+							program.setId(jsonObject.getLong("id"));
+							if(!idList.contains(program.getId())){//涓嶆槸閫夊畾鍏ュ簱鐨�
+								continue;
+							}
+							program.setName(jsonObject.getString("name"));
+
+							program.setCode(jsonObject.getString("code"));
+							program.setDescription(jsonObject.getString("description"));
+							program.setCategory(jsonObject.getString("category"));
+							program.setBindNcNodeId(jsonObject.getLong("bindNcNodeId"));
+							program.setIsLastEdition(jsonObject.getInteger("isLastEdition"));
+							program.setIsLocked(jsonObject.getInteger("isLocked"));
+							program.setIsTest(jsonObject.getInteger("isTest"));
+							program.setMachineCode(jsonObject.getString("machineCode"));
+							program.setNcNodeId(jsonObject.getLong("ncNodeId"));
+							program.setPartNo(jsonObject.getString("partNo"));
+							program.setProcessEdition(jsonObject.getString("processEdition"));
+
+							setBaseProperties(program,jsonObject);
+
+							progList.add(program);
+						}
+
+					}
+				}else if(entryName.equals(NcProgramExportDNCService.NODE_JSON_FILE)){
+					try (InputStream insJson = zipFile.getInputStream(entry)) {
+						String jsonStr = IoUtil.readToString(insJson);
+						JSONArray jsonArray = JSONArray.parseArray(jsonStr);
+						for (int i = 0; i < jsonArray.size(); i++) {
+							JSONObject jsonObject = jsonArray.getJSONObject(i);
+							NcNode node = new NcNode();
+							node.setId(jsonObject.getLong("id"));
+							node.setName(jsonObject.getString("name"));
+							node.setDescription(jsonObject.getString("description"));
+							node.setNodeType(jsonObject.getString("nodeType"));
+							node.setProcessName(jsonObject.getString("processName"));
+							node.setPartNo(jsonObject.getString("partNo"));
+							node.setMachineCode(jsonObject.getString("machineCode"));
+							node.setParentId(jsonObject.getLong("parentId"));
+							node.setParentIds(jsonObject.getString("parentIds"));
+							node.setIsCured(jsonObject.getInteger("isCured"));
+
+							setBaseProperties(node,jsonObject);
+
+							nodeList.add(node);
+						}
+					}
+				}
+
+			}
+
+		}
+
+		//涓婁紶鍘嬬缉鍖呭唴鐨勭▼搴忓苟鏇存柊绋嬪簭鏂囦欢鍦板潃
+		try (SeekableInMemoryByteChannel channel = new SeekableInMemoryByteChannel(bytes);
+			 ZipFile zipFile = new ZipFile(channel)) {
+
+			ZipArchiveEntry entry;
+			Enumeration<ZipArchiveEntry> entries = zipFile.getEntries();
+			while (entries.hasMoreElements()) {
+				entry = entries.nextElement();
+
+				String entryName = entry.getName();
+
+				if (!entry.isDirectory() && !NcProgramExportDNCService.isDataFile(entryName)) {
+
+					for(NcProgram prog:progList){
+						if(prog.getName().equals(entryName)){
+							try (InputStream ncFileStream = zipFile.getInputStream(entry)) {
+								BladeFile bfile = this.ossTemplate.putFile(prog.getName(),ncFileStream);
+								prog.setOssName(bfile.getName());
+								prog.setUrl(bfile.getLink());
+							}
+							break;
+						}
+					}
+
+				}
+			}
+		}
+
+		for(NcNode node:nodeList){
+			NcNode nodeTemp = this.ncNodeService.getById(node.getId());
+			if(nodeTemp == null){
+				ncNodeService.save(node);
+			}else{
+				ncNodeService.updateById(node);
+			}
+		}
+
+		for(NcProgram prog:progList){
+			NcProgram ncTemp = ncProgramService.getById(prog.getId());
+			if(ncTemp == null){
+				ncProgramService.save(prog);
+			}else{
+				ncProgramService.updateById(prog);
+			}
+		}
+
+	}
+
+	void setBaseProperties(BizEntity entity, JSONObject jsonObject){
+		entity.setCreateTime(jsonObject.getDate("createTime"));
+		entity.setUpdateTime(jsonObject.getDate("updateTime"));
+		entity.setStatus(jsonObject.getInteger("status"));
+		entity.setCreateUser(jsonObject.getLong("createUser"));
+		entity.setUpdateUser(jsonObject.getLong("updateUser"));
 	}
 }
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramExportDNCService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramExportDNCService.java
index 30e65b2..378e5cd 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramExportDNCService.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramExportDNCService.java
@@ -46,6 +46,7 @@
 @Service
 @AllArgsConstructor
 public class NcProgramExportDNCService extends BizServiceImpl<NcProgramExchangeMapper, NcProgramExchange> {
+
 	private final NcProgramService progService;
 	private final NcProgramApprovedService approvedService;
 	private final ApproveRecordService approveRecordService;
@@ -54,6 +55,16 @@
 
 	public static final String PROGRAM_JSON_FILE = "exp_mdm_nc_program.json";
 	public static final String NODE_JSON_FILE = "exp_mdm_nc_node.json";
+	public static final String APPROVE_RECORD_JSON_FILE = "exp_mdm_approve_record.json";
+
+	/**
+	 * 鏄惁鍘嬬缉鍖呭唴鐨勬暟鎹枃浠�
+	 * @param filename 鏂囦欢鍚嶇О
+	 * @return
+	 */
+	public static boolean isDataFile(String filename){
+		return StringUtils.equals(filename, PROGRAM_JSON_FILE) || StringUtils.equals(filename, NODE_JSON_FILE) || StringUtils.equals(filename, APPROVE_RECORD_JSON_FILE);
+	}
 	/**
 	 * 鍒嗛〉鏌ヨ
 	 * @param query 鏌ヨ鍙傛暟
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 38418c9..9317ef7 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
@@ -22,4 +22,6 @@
 	private String description;
 	@Schema(description = "澶囨敞")
 	private String remark;
+	@Schema(description = "鍒涘缓鐢ㄦ埛鍚嶇О")
+	private String createUserName;
 }

--
Gitblit v1.9.3