From 44fda5fa3787c78e74d62f9713dd36abdeadcac8 Mon Sep 17 00:00:00 2001
From: yangys <y_ys79@sina.com>
Date: 星期五, 18 七月 2025 21:27:38 +0800
Subject: [PATCH] 上传接口调整

---
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/vo/NcProgramUploadVO.java                     |   10 
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/config/InitBean.java                                  |   12 +
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/DncBackFileMapper.java                 |   20 ++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/CureFlowService.java                     |   12 -
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/entity/NcProgram.java                         |    5 
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramService.java                 |   31 +++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/NcNodeController.java              |    1 
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/DncBackFileMapper.xml                  |   36 +++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/ProgramExchangeStatController.java |    7 
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/DncSendBackController.java         |    5 
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/commons/contants/ParamContants.java                   |    5 
 /dev/null                                                                                                       |   18 -
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/vo/NcNodeVO.java                              |    3 
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/entity/DncBackFile.java                       |   34 +++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/NcProgramController.java           |   28 ++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/vo/DncBackFileQueryVO.java                    |   21 ++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/DncBackFileController.java         |   81 ++++++++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/vo/DncBackFileVO.java                         |   24 ++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/vo/NcProgramVO.java                           |    2 
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/DncBackFileService.java               |   99 +++++++++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/filewatch/ProgramBackMonitor.java             |  135 +++++++++++++
 21 files changed, 537 insertions(+), 52 deletions(-)

diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/commons/contants/ParamContants.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/commons/contants/ParamContants.java
index f40f2c8..2d9cce4 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/commons/contants/ParamContants.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/commons/contants/ParamContants.java
@@ -2,6 +2,11 @@
 
 public class ParamContants {
 	public static final String NETWORK_TYPE_KEY = "networkType";
+
+	/**
+	 * 宸ユ帶缃戝洖浼犵▼搴忕洃鎺х洰褰曢�楀彿鍒嗛殧
+	 */
+	public static final String PROGRAM_MONITOR_DIR_KEY = "programMonitorDir";
 	/**
 	 * 娑夊瘑缃�
 	 */
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/config/InitBean.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/config/InitBean.java
index 8decdc5..c4787dd 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/config/InitBean.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/config/InitBean.java
@@ -14,6 +14,7 @@
 import org.springblade.mdm.machineback.filewatch.FileWatcherService;
 import org.springblade.mdm.machineback.filewatch.MachineFileBackListener;
 import org.springblade.mdm.machineback.service.MachineBackFileService;
+import org.springblade.mdm.program.filewatch.ProgramBackMonitor;
 import org.springblade.mdm.program.service.NcProgramService;
 import org.springblade.system.feign.ISysClient;
 import org.springframework.context.annotation.Bean;
@@ -31,21 +32,28 @@
 	private final DirectorLockService directorLockService;
 	private final MachineService machineService;
 	private final FileWatcherService fileWatcherService;
-	private final ISysClient sysClient;
+
 	private final DynamicDirectoryWatcher directoryWatcher;
 	private final MachineBackFileService machineBackFileService;
 	private final NcProgramService ncProgramService;
 	private final OssTemplate ossTemplate;
+
+	private final ProgramBackMonitor programBackMonitor;
 	//private final FileWatcherService.FileChangeListener listener;
 	@PostConstruct
 	public void init() {
-		System.out.println("搴旂敤鍚姩鏃舵墽琛屽垵濮嬪寲鎿嶄綔 @PostConstruct");
+		log.info("搴旂敤鍚姩鏃舵墽琛屽垵濮嬪寲鎿嶄綔 @PostConstruct");
+
+		programBackMonitor.monitorDir();
 		// 鍒濆鍖栭�昏緫
+		/*
 		R<String> networkTypeR = sysClient.getParamValue(ParamContants.NETWORK_TYPE_KEY);
 		String networkType = networkTypeR.getData() == null ? ParamContants.NETWORK_TYPE_SHEMI : networkTypeR.getData();
 		if (networkType.equals(ParamContants.NETWORK_TYPE_GONGKONG)) {
 			initMachineDirMonitor();
 		}
+		*/
+
 	}
 
 	/**
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/CureFlowService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/CureFlowService.java
index 0b4c7d0..78da526 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/CureFlowService.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/CureFlowService.java
@@ -50,17 +50,7 @@
 	 */
 	private static final String PROCESS_KEY = "program-cure";
 
-	/**
-	 * 鍚姩鍥哄寲娴佺▼
-	 * @param programId 绋嬪簭id
-	 */
-	public void start(long programId){
 
-
-		//pinst.getProcessInstanceId();
-		int a=1;
-		//log.info()
-	}
 
 	@Transactional
 	public void startCure(List<NcProgram> programs) {
@@ -76,7 +66,7 @@
 	 * 鍚姩涓�涓暟鎺х▼搴忕殑鍥哄寲娴佺▼
 	 * @param prog 鏁版帶绋嬪簭瀹炰綋
 	 */
-	void startOne(NcProgram prog){
+	public void startOne(NcProgram prog){
 		Map<String, Object> vars = new HashMap<>();
 
 		//NcProgram prog = programs.get(0);
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/DncBackFileController.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/DncBackFileController.java
new file mode 100644
index 0000000..f117a05
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/DncBackFileController.java
@@ -0,0 +1,81 @@
+package org.springblade.mdm.program.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.servlet.http.HttpServletResponse;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springblade.core.excel.util.ExcelUtil;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.DateUtil;
+import org.springblade.mdm.program.service.DncBackFileService;
+import org.springblade.mdm.program.vo.DncBackFileQueryVO;
+import org.springblade.mdm.program.vo.DncBackFileVO;
+import org.springframework.web.bind.annotation.*;
+
+@AllArgsConstructor
+@Slf4j
+@RestController
+@RequestMapping("/program/file")
+@Tag(name = "DNC鍥炰紶鏂囦欢", description = "DNC鍥炰紶鏂囦欢")
+public class DncBackFileController {
+
+	private final DncBackFileService service;
+
+
+	/**
+	 * 鎺ユ敹
+	 */
+	@Operation(summary = "鎺ユ敹", description = "鎺ユ敹鏂囦欢")
+	@PostMapping("/accept")
+	public R<Void> accept(@RequestParam String ids) {
+		service.accept(ids);
+		return R.success();
+	}
+
+	/**
+	 *鎷掔粷锛屽氨鏄垹闄�
+	 */
+	@Operation(summary = "鎷掔粷", description = "鎷掔粷")
+	@PostMapping("/reject")
+	public R<Void> reject(@RequestParam String ids) {
+		try {
+			service.reject(ids);
+		} catch (Exception e) {
+			log.error("鎷掔粷寮傚父",e);
+			return R.fail(e.getMessage());
+		}
+		return R.status(true);
+	}
+
+	/**
+	 * 鍒嗛〉
+	 */
+	@Operation(summary = "鍒嗛〉鏌ヨ", description = "鍚嶇О鎴栫紪鐮�")
+	@GetMapping("/page")
+	public R<IPage<DncBackFileVO>> page(DncBackFileQueryVO query) {
+		IPage<DncBackFileVO> pages = service.pageQuery(query);
+		return R.data(pages);
+	}
+
+	/*
+	@Operation(summary = "瀵煎嚭Excel", description = "瀵煎嚭Excel")
+	@GetMapping("/export-excel")
+	public void exportExcel(MachineBackFileQueryVO query, HttpServletResponse response) {
+		query.setCurrent(1);
+		query.setSize(Integer.MAX_VALUE);
+
+		IPage<MachineBackFileVO> pages = service.pageQuery(query);
+		List<MachineBackFileExcelVO> list = new ArrayList<>();
+		pages.getRecords().forEach(m ->{
+			MachineBackFileExcelVO excelVO = new MachineBackFileExcelVO();
+			BeanUtils.copyProperties(m, excelVO);
+			excelVO.setCureStatus(m.getIsCured()==1?"宸插浐鍖�":"鏈浐鍖�");
+			list.add(excelVO);
+		});
+		ExcelUtil.export(response, "鏈哄簥鍥炰紶鏂囦欢" + DateUtil.time(), "鏈哄簥鍥炰紶鏂囦欢琛�", list, MachineBackFileExcelVO.class);
+	}
+
+	 */
+}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/DncSendBackController.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/DncSendBackController.java
index 8a48d27..b288a78 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/DncSendBackController.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/DncSendBackController.java
@@ -1,20 +1,15 @@
 
 package org.springblade.mdm.program.controller;
 
-import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
-import org.springblade.core.mp.support.Query;
 import org.springblade.core.tenant.annotation.NonDS;
 import org.springblade.core.tool.api.R;
-import org.springblade.mdm.basesetting.machine.vo.MachineVO;
-import org.springblade.mdm.program.service.DncSendBackService;
 import org.springblade.mdm.program.service.NcProgramExchangeService;
 import org.springblade.mdm.program.vo.DncSendBackData;
-import org.springblade.mdm.program.vo.ProgramExchangeStatQueryVO;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
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 824c5e3..8a64c8c 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
@@ -79,6 +79,7 @@
 					ncNodeVO.setDrawingNo(program.getDrawingNo());
 					ncNodeVO.setMachineCode(program.getMachineCode());
 					ncNodeVO.setProcessName(program.getProcessName());
+					ncNodeVO.setVersionNumber(program.getVersionNumber());
 				}
 			}
 
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/NcProgramController.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/NcProgramController.java
index a8aa0e8..b08d919 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/NcProgramController.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/NcProgramController.java
@@ -49,10 +49,30 @@
 	@PostMapping("/upload")
 	@Operation(summary = "涓婁紶鏂囦欢", description = "涓婁紶绋嬪簭/闄勪欢鏂囦欢")
 	public R<Boolean> upload(NcProgramUploadVO uploadVO) {
-		//@Parameter(description="鏂囦欢") @RequestPart("file") MultipartFile file, @Parameter(description="鎵�灞炶妭鐐笽D")@RequestParam Long nodeId,
-		//							 @Parameter(description="鏂囦欢鍒嗙被锛屼娇鐢ㄥ瓧鍏�(node_file_type)") @RequestParam String category
-		ncProgramService.uploadProgramFileNew(uploadVO);
-		return R.<Boolean>status(true);
+		try {
+			boolean existOther = ncProgramService.programExistsUnderOtherNode(uploadVO.getNodeId(), uploadVO.getFile().getOriginalFilename());
+			if (existOther) {
+				//绋嬪簭瀛樺湪锛屽垯杩斿洖鎻愮ず淇℃伅
+				return R.fail("绋嬪簭鍏朵粬鑺傜偣宸插瓨鍦�");
+			}
+			if (uploadVO.getConfirm() == null || uploadVO.getConfirm() != 1) {
+				//榛樿鎯呭喌锛岄渶瑕佹鏌ョ▼搴忔槸鍚﹀瓨鍦�
+				boolean exists = ncProgramService.programExistsUnderNode(uploadVO.getNodeId(), uploadVO.getFile().getOriginalFilename());
+				if (exists) {
+					//绋嬪簭瀛樺湪锛屽垯杩斿洖鎻愮ず淇℃伅
+					return R.fail(2, "瀛樺湪閲嶅绋嬪簭鍚�");
+				} else {
+					ncProgramService.uploadProgramFileNew(uploadVO);
+				}
+			} else {
+				//鍚屽悕鏂囦欢鐢ㄦ埛纭涓婁紶浜嗭紙锛�
+				ncProgramService.uploadProgramFileNew(uploadVO);
+			}
+		}catch(Exception e) {
+			log.error("绋嬪簭涓婁紶鎵ц閿欒",e);
+			return R.fail("涓婁紶澶辫触:" + e.getMessage());
+		}
+		return R.success();
 	}
 
 	@PostMapping("/remove")
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/ProgramExchangeStatController.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/ProgramExchangeStatController.java
index b5c4fce..2cc2f61 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/ProgramExchangeStatController.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/ProgramExchangeStatController.java
@@ -2,23 +2,16 @@
 package org.springblade.mdm.program.controller;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import io.swagger.v3.oas.annotations.Operation;
 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.basesetting.machine.vo.MachineQueryVO;
 import org.springblade.mdm.basesetting.machine.vo.MachineVO;
-import org.springblade.mdm.program.service.DncSendBackService;
 import org.springblade.mdm.program.service.NcProgramExchangeStatService;
-import org.springblade.mdm.program.vo.DncSendBackData;
 import org.springblade.mdm.program.vo.ProgramExchangeStatQueryVO;
 import org.springframework.web.bind.annotation.*;
-import org.springframework.web.multipart.MultipartFile;
-
-import java.util.List;
 
 /**
  * 娴佺▼绠$悊鎺ュ彛
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/entity/DncBackFile.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/entity/DncBackFile.java
new file mode 100644
index 0000000..8b75f94
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/entity/DncBackFile.java
@@ -0,0 +1,34 @@
+package org.springblade.mdm.program.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Getter;
+import lombok.Setter;
+import org.springblade.core.mp.base.BizEntity;
+
+import java.util.Date;
+
+/**
+ * DNC鍥炰紶鏂囦欢,鏁版嵁閫氳繃鐩戞帶鐩綍鑾峰彇鏂囦欢骞跺叆搴�
+ */
+@Setter
+@Getter
+@TableName("mdm_dnc_back_file")
+public class DncBackFile extends BizEntity {
+	public static int STATUS_ACCEPTED = 2;
+	public static int STATUS_REJECTED = 3;
+
+	private Long ncProgramId;
+	/**
+	 * 纭鏃堕棿
+	 */
+	private Date confirmTime;
+	/**
+	 * 瀵硅薄瀛樺偍鏂囦欢鍚�
+	 */
+	private String ossName;
+
+	/**
+	 * 瀵硅薄瀛樺偍鏂囦欢鍦板潃
+	 */
+	private String url;
+}
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 cf73928..2b78637 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
@@ -94,6 +94,11 @@
 	private LocalDateTime taskAssignTime;
 
 	/**
+	 * 鐗堟湰鍙凤紝涓婁紶涓�娆$▼搴忥紝灏变細+1
+	 */
+	private Integer versionNumber;
+
+	/**
 	 * 鏄惁鍦ㄦ湁鏁堟湡鍐�
 	 * @param effectiveMonths 鏈夋晥鏃堕暱锛堟湀鏁帮級锛屽湪绯荤粺鍙傛暟涓厤缃�
 	 * @return
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/filewatch/ProgramBackMonitor.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/filewatch/ProgramBackMonitor.java
new file mode 100644
index 0000000..c3fc2d4
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/filewatch/ProgramBackMonitor.java
@@ -0,0 +1,135 @@
+
+package org.springblade.mdm.program.filewatch;
+
+
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springblade.core.oss.OssTemplate;
+import org.springblade.core.oss.model.BladeFile;
+import org.springblade.core.tool.api.R;
+import org.springblade.mdm.commons.contants.ParamContants;
+import org.springblade.mdm.flow.service.CureFlowService;
+import org.springblade.mdm.machineback.entity.MachineBackFile;
+import org.springblade.mdm.machineback.filewatch.*;
+import org.springblade.mdm.program.entity.DncBackFile;
+import org.springblade.mdm.program.entity.NcProgram;
+import org.springblade.mdm.program.mapper.NcProgramExchangeMapper;
+import org.springblade.mdm.program.service.DncBackFileService;
+import org.springblade.mdm.program.service.NcNodeService;
+import org.springblade.mdm.program.service.NcProgramService;
+import org.springblade.system.feign.ISysClient;
+import org.springframework.stereotype.Service;
+
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * DNC鍥炰紶鍙婄洃鎺�
+ *
+ * @author yangys
+ */
+@Slf4j
+@Service
+@AllArgsConstructor
+public class ProgramBackMonitor {
+	private final DirectorLockService directorLockService;
+	private final NcNodeService ncNodeService;
+	private final NcProgramService ncProgramService;
+	private final CureFlowService cureFlowService;
+	private final NcProgramExchangeMapper ncProgramExchangeMapper;
+	private final ISysClient sysClient;
+	private final DynamicDirectoryWatcher directoryWatcher;
+	private final OssTemplate ossTemplate;
+	private final DncBackFileService dncBackFileService;
+	private final String DEFAULT_MONITOR_DIR = "programback";
+
+	/**
+	 * 鐩戞帶鍥炰紶鐩綍锛堟墜鍔ㄥ洖浼狅級
+	 */
+	public void monitorDir(){
+		boolean locked = directorLockService.acquireLock();
+		if (!locked) {
+			log.info("鍥炰紶鎺ユ敹鐩綍宸茬粡琚叾浠栭儴缃茬偣浣嶉攣瀹氾紝鐩存帴杩斿洖");
+			return;
+		}
+		List<String> monitorDirList = getMonitorDirs();
+
+		for (String dir : monitorDirList) {
+			Path dirPath = Paths.get(dir);
+			try {
+				if(!dirPath.toFile().exists()) {
+					dirPath.toFile().mkdirs();
+				}
+				directoryWatcher.addDirectory(dirPath,getListener());
+			} catch (Exception e) {
+				log.error("娣诲姞鐩戞帶鐩綍寮傚父",e);
+			}
+		}
+	}
+
+	List<String> getMonitorDirs(){
+		R<String> monitorDirRes = sysClient.getParamValue(ParamContants.PROGRAM_MONITOR_DIR_KEY);
+		String dirStr = monitorDirRes.getData();
+		if(StringUtils.isNotEmpty(dirStr)){
+			dirStr = DEFAULT_MONITOR_DIR;
+		}
+		String[] dirs = StringUtils.split(dirStr,",");
+
+		return Arrays.asList(dirs);
+	}
+
+
+	FileWatcherService.FileChangeListener getListener() {
+		return new FileWatcherService.FileChangeListener() {
+			@Override
+			public void onFileCreated(Path filePath) {
+				log.info("鏂囦欢鍒涘缓锛屽鐞�");
+			}
+
+			@Override
+			public void onFileModified(Path filePath) {
+				try {
+					if(FileLockChecker.isFileComplete(filePath)){
+						log.info("鏂囦欢[{}]浼犺緭瀹屾垚,寮�濮嬪鐞�",filePath);
+
+						String programName = filePath.getFileName().toFile().getName();
+						NcProgram prog = ncProgramService.getByName(programName);
+						if(prog == null){
+							log.warn("鏂囦欢鍚嶆棤娉曞尮閰嶅埌鏁版帶绋嬪簭,{}",filePath);
+							return;
+						}
+						DncBackFile backFile = new DncBackFile();
+						backFile.setNcProgramId(prog.getId());
+						//淇濆瓨鏂囦欢鍒癱ss锛岄伩鍏嶅悗缁笉鍚岄儴缃茶妭鐐规嬁涓嶅埌鏂囦欢
+						try(FileInputStream fins = new FileInputStream(filePath.toFile());){
+							BladeFile bfile = ossTemplate.putFile(programName, fins);
+							backFile.setOssName(bfile.getName());
+							backFile.setUrl(bfile.getLink());
+						}
+						dncBackFileService.save(backFile);
+					}else{
+						log.warn("鏂囦欢浼犺緭涓紝鍚庣画鍐嶆搷浣�:{}",filePath);
+					}
+				} catch (IOException e) {
+					log.error("鍥炰紶鏂囦欢鎿嶄綔IO閿欒",e);
+					throw new RuntimeException(e);
+				} catch (InterruptedException e) {
+					log.error("sleep鍑洪敊",e);
+				} catch (Exception e) {
+					log.error("鏈哄簥鍥炰紶鏂囦欢澶勭悊寮傚父",e);
+				}
+			}
+
+			@Override
+			public void onFileDeleted(Path filePath) {
+				log.info("鏂囦欢鍒犻櫎锛屼笉澶勭悊");
+			}
+		};
+	}
+}
+
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/DncBackFileMapper.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/DncBackFileMapper.java
new file mode 100644
index 0000000..3cedc0d
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/DncBackFileMapper.java
@@ -0,0 +1,20 @@
+package org.springblade.mdm.program.mapper;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.apache.ibatis.annotations.Param;
+import org.springblade.core.mp.mapper.BladeMapper;
+import org.springblade.mdm.program.vo.DncBackFileVO;
+import org.springblade.mdm.program.entity.DncBackFile;
+import org.springblade.mdm.program.vo.DncBackFileQueryVO;
+
+public interface DncBackFileMapper extends BladeMapper<DncBackFile> {
+
+	/**
+	 * DNC鍥炰紶鏂囦欢鍒嗛〉鏌ヨ
+	 * @param page
+	 * @param queryVO
+	 * @return
+	 */
+	IPage<DncBackFileVO> pageQuery(IPage<DncBackFile> page, @Param("query") DncBackFileQueryVO queryVO);
+
+}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/DncBackFileMapper.xml b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/DncBackFileMapper.xml
new file mode 100644
index 0000000..e971831
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/DncBackFileMapper.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.springblade.mdm.program.mapper.DncBackFileMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="org.springblade.mdm.program.entity.DncBackFile">
+        <id column="id" property="id"/>
+        <result column="status" property="status"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_time" property="updateTime"/>
+        <result column="is_deleted" property="isDeleted"/>
+    </resultMap>
+
+    <!--DNC鍥炰紶绋嬪簭澶勭悊鍒嗛〉-->
+    <select id="pageQuery" resultType="org.springblade.mdm.program.vo.DncBackFileVO">
+        select f.id,p.name name,p.is_cured,f.create_time,m.code machine_code, m.name machine_name,f.create_time arrived_time
+        from mdm_dnc_back_file f
+             left join mdm_nc_program p on f.nc_program_id=p.id
+             left join mdm_machine m on p.machine_code=m.code
+       <where>
+           f.status=1 and f.is_deleted=0
+
+        <if test="query.machineSpec!=null and query.machineSpec!=''">
+            and m.machine_spec=#{query.machineSpec,jdbcType=VARCHAR}
+        </if>
+        <if test="query.keyword!=null and query.keyword!=''">
+            and (m.code like CONCAT('%', #{query.keyword,jdbcType=VARCHAR},'%') or m.name like CONCAT('%', #{query.keyword,jdbcType=VARCHAR},'%')
+            or p.name like CONCAT('%', #{query.keyword,jdbcType=VARCHAR},'%')
+                )
+        </if>
+      </where>
+    </select>
+
+
+
+</mapper>
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/DncBackFileService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/DncBackFileService.java
new file mode 100644
index 0000000..9cb255f
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/DncBackFileService.java
@@ -0,0 +1,99 @@
+package org.springblade.mdm.program.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import lombok.AllArgsConstructor;
+import org.springblade.core.mp.base.BizServiceImpl;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.oss.OssTemplate;
+import org.springblade.core.tool.utils.DateUtil;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.mdm.flow.service.CureFlowService;
+import org.springblade.mdm.program.entity.DncBackFile;
+import org.springblade.mdm.program.entity.NcProgram;
+import org.springblade.mdm.program.mapper.DncBackFileMapper;
+import org.springblade.mdm.program.vo.DncBackFileQueryVO;
+import org.springblade.mdm.program.vo.DncBackFileVO;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@AllArgsConstructor
+@Service
+public class DncBackFileService extends BizServiceImpl<DncBackFileMapper, DncBackFile> {
+	private final NcProgramService progService;
+	private final OssTemplate ossTemplate;
+
+	private final CureFlowService cureFlowService;
+	/**
+	 * 鎺ュ彈
+	 * @param ids
+	 */
+	public void accept(String ids) {
+
+		List<Long> idList = Func.toLongList(ids);
+
+		for(Long id : idList){
+			DncBackFile backFile = this.getById(id);
+			backFile.setStatus(DncBackFile.STATUS_ACCEPTED);
+			backFile.setConfirmTime(DateUtil.now());
+			this.updateById(backFile);
+
+			//鏂板缓涓�涓▼搴忥紝灏嗚�佺殑绋嬪簭isLastEditon璁剧疆鏈�0锛岀劧鍚庡惎鍔ㄦ祦绋�
+			this.upgradeProgramAndStartCure(backFile.getNcProgramId(),backFile);
+		}
+	}
+
+	void upgradeProgramAndStartCure(long ncProgramId,DncBackFile backFile) {
+		NcProgram oldProgram = this.progService.getById(ncProgramId);
+		//鏇存柊鏂囦欢淇℃伅
+		oldProgram.setOssName(backFile.getOssName());
+		oldProgram.setUrl(backFile.getUrl());
+		//TODO锛屾槸鍚﹀垹闄ゅ師鏉ョ殑鏂囦欢锛�
+		progService.updateById(oldProgram);
+		/*
+		NcProgram newProgram = new NcProgram();
+		BeanUtils.copyProperties(oldProgram,newProgram);
+
+		oldProgram.setIsLastEdition(0);
+		progService.updateById(oldProgram);
+
+		newProgram.setId(null);
+		newProgram.setIsLastEdition(1);
+		progService.updateById(newProgram);
+
+		 */
+
+		cureFlowService.startOne(oldProgram);//鍚姩涓�涓▼搴忕殑鍥哄寲娴佺▼
+	}
+
+	/**
+	 * 鎷掔粷
+	 * @param ids
+	 */
+	public void reject(String ids) {
+		List<Long> idList = Func.toLongList(ids);
+
+		for(Long id : idList){
+			DncBackFile backFile = this.getById(id);
+			backFile.setStatus(DncBackFile.STATUS_REJECTED);
+			backFile.setConfirmTime(DateUtil.now());
+			this.ossTemplate.removeFile(backFile.getOssName());
+			this.updateById(backFile);
+		}
+
+	}
+
+	/**
+	 * DNC鍥炰紶绋嬪簭澶勭悊鍒嗛〉鏌ヨ
+	 * @param query 鏌ヨ鍙傛暟
+	 * @return 鍒嗛〉鏁版嵁
+	 */
+	public IPage<DncBackFileVO> pageQuery(DncBackFileQueryVO query) {
+		/*
+		IPage<DncBackFileVO> page = this.getBaseMapper().pageQuery(Condition.getPage(query),query);
+		*/
+		return this.getBaseMapper().pageQuery(Condition.getPage(query),query);
+	}
+
+}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/DncSendBackService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/DncSendBackService.java
deleted file mode 100644
index 8a9381d..0000000
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/DncSendBackService.java
+++ /dev/null
@@ -1,35 +0,0 @@
-
-package org.springblade.mdm.program.service;
-
-import lombok.AllArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.mdm.flow.service.CureFlowService;
-import org.springblade.mdm.program.entity.NcNode;
-import org.springblade.mdm.program.entity.NcProgramExchange;
-import org.springblade.mdm.program.mapper.NcProgramExchangeMapper;
-import org.springframework.stereotype.Service;
-
-import java.util.List;
-
-/**
- * DNC鍥炰紶
- *
- * @author yangys
- */
-@Slf4j
-@Service
-@AllArgsConstructor
-public class DncSendBackService  {
-	private final NcNodeService ncNodeService;
-	private final NcProgramService ncProgramService;
-	private final CureFlowService cureFlowService;
-	private final NcProgramExchangeMapper ncProgramExchangeMapper;
-
-
-
-
-
-
-}
-
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramService.java
index f378729..4c76756 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramService.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramService.java
@@ -328,11 +328,40 @@
 	 * @param name 绋嬪簭鍚嶇О
 	 * @return
 	 */
-	public NcProgram getByName(String name) {LambdaQueryWrapper<NcProgram> wrapper = new LambdaQueryWrapper<>();
+	public NcProgram getByName(String name) {
+		LambdaQueryWrapper<NcProgram> wrapper = new LambdaQueryWrapper<>();
 		wrapper.eq(NcProgram::getName, name);
 		wrapper.eq(NcProgram::getIsLastEdition,1);
 		Optional<NcProgram> progOpt = this.getOneOpt(wrapper);
 
 		return progOpt.orElse(null);
 	}
+
+	/**
+	 *
+	 * @param nodeId 涓婄骇鑺傜偣id
+	 * @param name 绋嬪簭鍚嶇О
+	 */
+	public boolean programExistsUnderNode(Long nodeId, String name) {
+		LambdaQueryWrapper<NcProgram> wrapper = new LambdaQueryWrapper<>();
+		wrapper.eq(nodeId!=null,NcProgram::getNcNodeId, nodeId);
+		wrapper.eq(NcProgram::getName, name);
+		wrapper.eq(NcProgram::getIsLastEdition,1);
+
+		return this.count(wrapper)>0;
+	}
+
+	/**
+	 *
+	 * @param nodeId 涓婄骇鑺傜偣id
+	 * @param name 绋嬪簭鍚嶇О
+	 */
+	public boolean programExistsUnderOtherNode(Long nodeId, String name) {
+		LambdaQueryWrapper<NcProgram> wrapper = new LambdaQueryWrapper<>();
+		wrapper.ne(NcProgram::getNcNodeId, nodeId);
+		wrapper.eq(NcProgram::getName, name);
+		wrapper.eq(NcProgram::getIsLastEdition,1);
+
+		return this.count(wrapper)>0;
+	}
 }
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/vo/DncBackFileQueryVO.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/vo/DncBackFileQueryVO.java
new file mode 100644
index 0000000..9883d68
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/vo/DncBackFileQueryVO.java
@@ -0,0 +1,21 @@
+package org.springblade.mdm.program.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+import org.springblade.core.mp.support.Query;
+
+/**
+ * 鍒嗛〉鏌ヨ鍙傛暟
+ */
+
+@Schema(description = "DNC鍥炰紶鏂囦欢鏌ヨ瀵硅薄")
+@Setter
+@Getter
+public class DncBackFileQueryVO extends Query {
+	@Schema(description = "鍏抽敭瀛�")
+	private String keyword;
+	@Schema(description = "瑙勬牸")
+	private String machineSpec;
+
+}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/vo/DncBackFileVO.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/vo/DncBackFileVO.java
new file mode 100644
index 0000000..97c746f
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/vo/DncBackFileVO.java
@@ -0,0 +1,24 @@
+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;
+
+import java.util.Date;
+
+@Schema(description = "DNC鍥炰紶鏂囦欢")
+@Setter
+@Getter
+public class DncBackFileVO extends BaseVO {
+	@Schema(description = "鏂囦欢鍚嶇О")
+	private String name;
+	@Schema(description = "鏈哄簥缂栧彿/鍥炰紶鏈哄簥")
+	private String machineCode;
+	@Schema(description = "绋嬪簭缂栧彿")
+	private String code;
+	@Schema(description = "鍥哄寲鐘舵��")
+	private Integer isCured=0;
+	@Schema(description = "鏂囦欢鍒拌揪鏃堕棿")
+	private Date arrivedTime;
+}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/vo/MachineBackFileVO.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/vo/MachineBackFileVO.java
deleted file mode 100644
index 38d0b92..0000000
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/vo/MachineBackFileVO.java
+++ /dev/null
@@ -1,18 +0,0 @@
-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;
-
-@Setter
-@Getter
-@Schema(description = "鏈哄簥鍥炰紶鏂囦欢")
-public class MachineBackFileVO extends BaseVO {
-
-
-	@Schema(description = "绋嬪簭鍚嶇О")
-	private String programName;
-	@Schema(description = "鏈哄簥缂栫爜/璁惧缂栫爜")
-	private String programNo;
-}
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 ba1d1c0..9ef5b21 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
@@ -33,4 +33,7 @@
 	private String processEdition;
 	@Schema(description = "闆剁粍浠跺彿/鍥惧彿,绋嬪簭鏂囦欢鑺傜偣鐨勫睘鎬�")
 	private String drawingNo;
+
+	@Schema(description = "鐗堟湰鍙�,绋嬪簭鏂囦欢鑺傜偣鐨勫睘鎬�")
+	private Integer versionNumber;
 }
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/vo/NcProgramUploadVO.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/vo/NcProgramUploadVO.java
index 9392022..802662e 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/vo/NcProgramUploadVO.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/vo/NcProgramUploadVO.java
@@ -7,7 +7,7 @@
 import org.springframework.web.multipart.MultipartFile;
 
 /**
- * NC绋嬪簭VO
+ * NC绋嬪簭涓婁紶VO
  */
 @Setter
 @Getter
@@ -32,8 +32,10 @@
 	@Schema(description = "宸ュ簭鐗堟湰")
 	private String processEdition;
 
-	/**
-	 * 鏄惁娴嬭瘯绋嬪簭銆�1鏄紱0鍚�
-	 */
+	@Schema(description = "鏄惁涓烘祴璇曠▼搴忥紝1鏄紱0鍚�")
 	private Integer isTest;
+
+	@Schema(description = "纭鏍囪锛�1:纭涓婁紶蹇界暐鍚屽悕;鍏朵粬鍊兼垨null:榛樿涓婁紶")
+	private Integer confirm;
+
 }
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/vo/NcProgramVO.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/vo/NcProgramVO.java
index b855e81..5913f07 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/vo/NcProgramVO.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/vo/NcProgramVO.java
@@ -34,4 +34,6 @@
 
 	@Schema(description = "鏄惁娴嬭瘯绋嬪簭.1鏄�;0鍚�")
 	private Integer isTest;
+	@Schema(description = "鐗堟湰鍙�")
+	private Integer versionNumber;
 }

--
Gitblit v1.9.3