From e1c6d113abb7c36c48573009e09d30a42513417a Mon Sep 17 00:00:00 2001
From: yangys <y_ys79@sina.com>
Date: 星期六, 02 八月 2025 10:57:05 +0800
Subject: [PATCH] 程序上传接口

---
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/constants/FlowContants.java                                |   24 ++++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/mapper/FlowProgramMapper.xml                               |   21 ++++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/producedivision/service/ProduceDivisionService.java |    5 -
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/mapper/FlowProgramFileMapper.java                          |   13 ++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/FlowProgramProperties.java                         |   41 ++++++++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/FlowCommonService.java                             |   25 +++++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/producedivision/vo/ProduceDivisionViewVO.java       |    5 
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/entity/FlowProgramFile.java                                |   46 +++++++++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/controller/FlowProgramController.java                      |   13 ++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/FlowProgramFileService.java                        |   97 +++++++++++++++++++
 10 files changed, 279 insertions(+), 11 deletions(-)

diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/producedivision/service/ProduceDivisionService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/producedivision/service/ProduceDivisionService.java
index 38b9c52..16ac7c4 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/producedivision/service/ProduceDivisionService.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/producedivision/service/ProduceDivisionService.java
@@ -39,11 +39,6 @@
 	 * @return 鍒嗛〉鏁版嵁
 	 */
 	public IPage<ProduceDivisionViewVO> pageQuery(String name, Query query) {
-
-		LambdaQueryWrapper<ProduceDivision> queryWrapper = new LambdaQueryWrapper<>();
-
-
-
 		return this.getBaseMapper().pageQuery(Condition.getPage(query),name);
 	}
 }
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/producedivision/vo/ProduceDivisionViewVO.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/producedivision/vo/ProduceDivisionViewVO.java
index 9bb771d..cfcb999 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/producedivision/vo/ProduceDivisionViewVO.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/producedivision/vo/ProduceDivisionViewVO.java
@@ -22,10 +22,9 @@
 
 	@Schema(description = "缂栧埗宸ヨ壓鍛榠d")
 	private Long programmerId;
+	@Schema(description = "缂栧埗宸ヨ壓鍛樺鍚�")
+	private String programmerName;
 
-	/**
-     * 鏍″宸ヨ壓鍛樿处鍙�
-	 */
 	@Schema(description = "鏍″宸ヨ壓鍛榠d")
 	private Long checkerId;
 	@Schema(description = "鏍″宸ヨ壓鍛樺鍚�")
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 1101ab4..40c7ce7 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
@@ -3,4 +3,28 @@
 public class FlowContants {
 	public static final String PROGRAM_IDS_KEY = "programids";
 
+	/**
+	 * 鍥惧彿
+	 */
+	public static final String DRAWING_NO = "drawingNo";
+	/**
+	 * 宸ュ簭鍙�
+	 */
+	public static final String PROCESS_NO = "processNo";
+	/**
+	 * 鍥惧彿鐗堟
+	 */
+	public static final String DRAWING_NO_EDITION = "drawingNoEdition";
+	/**
+	 * 宸ュ簭鐗堟
+	 */
+	public static final String PROCESS_EDITION = "processEdition";
+	/*
+	鏈哄簥缂栫爜
+	 */
+	public static final String MACHINE_CODE = "machineCode";
+	/**
+	 * 宸ヨ壓鐗堟
+	 */
+	public static final String CRAFT_EDITION = "craftEdition";
 }
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/controller/FlowProgramController.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/controller/FlowProgramController.java
index 7532e33..28564ce 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/controller/FlowProgramController.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/controller/FlowProgramController.java
@@ -10,6 +10,7 @@
 import org.springblade.core.tenant.annotation.NonDS;
 import org.springblade.core.tool.api.R;
 import org.springblade.mdm.flow.service.ApproveRecordService;
+import org.springblade.mdm.flow.service.FlowProgramFileService;
 import org.springblade.mdm.flow.vo.ApproveRecordVO;
 import org.springblade.mdm.flow.vo.ProgramUploadVO;
 import org.springblade.mdm.flow.vo.TaskTraceVO;
@@ -39,7 +40,7 @@
 	private final NcProgramService ncProgramService;
 	private final ProcessProgRefService ncProcessProgRefService;
 
-	private final ApproveRecordService approveRecordService;
+	private final FlowProgramFileService flowProgramFileService;
 
 	@PostMapping("/ncupload")
 	@Operation(summary = "涓婁紶绋嬪簭鏂囦欢", description = "涓婁紶绋嬪簭鏂囦欢")
@@ -53,11 +54,17 @@
 		return R.success();
 	}
 
+	@GetMapping("/list-by-node")
+	@Operation(summary = "鑺傜偣绋嬪簭鏂囦欢鍒楄〃", description = "鏌愯妭鐐瑰唴鐨勭▼搴忓垪琛紝浠呪�樼▼搴忓寘鈥欏瓧鍏稿��60")
+	public R<List<NcProgramVO>> listByNode(@Parameter(description="鎵�灞炶妭鐐笽D")@RequestParam Long nodeId) {
+		return R.data(ncProgramService.listByNode(nodeId));
+	}
+
 	@PostMapping("/remove")
 	@Operation(summary = "鍒犻櫎涓存椂绋嬪簭鏂囦欢", description = "")
 	public R<Boolean> removeFile(Long id) {
 		try {
-
+			flowProgramFileService.removeById(id);
 		}catch(Exception e) {
 			log.error("鍒犻櫎鏂囦欢澶辫触",e);
 			return R.fail(e.getMessage());
@@ -69,7 +76,7 @@
 	@Operation(summary = "鑾峰彇鏂囦欢鍐呭", description = "浠呴檺鏂囨湰鏍煎紡鐨勫唴瀹癸紝浜岃繘鍒舵枃浠跺皢杩斿洖绌轰覆")
 	public R<String> fileContent(@Parameter(description = "绋嬪簭鏂囦欢id") Long id) {
 		try {
-			return R.data(ncProgramService.getFileContent(id));
+			return R.data(flowProgramFileService.getFileContent(id));
 		}catch(Exception e) {
 			log.error("鍒犻櫎鏂囦欢澶辫触",e);
 			return R.fail(e.getMessage());
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/entity/FlowProgramFile.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/entity/FlowProgramFile.java
new file mode 100644
index 0000000..79c214a
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/entity/FlowProgramFile.java
@@ -0,0 +1,46 @@
+package org.springblade.mdm.flow.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+import org.springblade.core.mp.base.BizEntity;
+
+import java.util.Date;
+
+/**
+ * 娴佺▼绋嬪簭鏂囦欢
+ */
+@Setter
+@Getter
+@TableName("mdm_flow_program_file")
+public class FlowProgramFile extends BizEntity {
+
+	private String processInstanceId;
+	/**
+	 * 鏂囦欢鍚� 绗﹀悎鏍煎紡鐨勬枃浠跺悕锛屾鏌ユ枃浠跺悕闇�瑕佹帓闄ゆ墿灞曞悕
+	 */
+	private String name;
+	/**
+	 * oss鏂囦欢鍚�
+	 */
+	private String ossName;
+	/**
+	 * oss鏂囦欢鍚�
+	 */
+	private String programName;
+	/*
+	@Schema(description = "浜у搧鍨嬪彿")
+	private String productModel;
+	private String drawingNo;
+
+	@Schema(description = "宸ヨ壓鐗堟")
+	private String craftEdition;
+
+	@Schema(description = "宸ュ簭鍙�")
+	private String processNo;
+
+	private String machineCode;
+*/
+
+}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/mapper/FlowProgramFileMapper.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/mapper/FlowProgramFileMapper.java
new file mode 100644
index 0000000..669b337
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/mapper/FlowProgramFileMapper.java
@@ -0,0 +1,13 @@
+package org.springblade.mdm.flow.mapper;
+
+import org.springblade.core.mp.mapper.BladeMapper;
+import org.springblade.mdm.flow.entity.ApproveRecord;
+import org.springblade.mdm.flow.entity.FlowProgramFile;
+import org.springblade.mdm.flow.vo.ApproveRecordVO;
+
+import java.util.List;
+
+public interface FlowProgramFileMapper extends BladeMapper<FlowProgramFile> {
+
+
+}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/mapper/FlowProgramMapper.xml b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/mapper/FlowProgramMapper.xml
new file mode 100644
index 0000000..e1ec540
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/mapper/FlowProgramMapper.xml
@@ -0,0 +1,21 @@
+<?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.flow.mapper.FlowProgramFileMapper">
+    <resultMap id="BaseResultMap" type="org.springblade.mdm.flow.entity.FlowProgramFile">
+        <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>
+
+
+
+    <sql id="all_columns">id,tenant_id,nc_program_id,process_instances_id,operate_time,operate_result,user_id,user_nickname,status,create_dept,is_deleted,create_time,create_user,update_time,update_user</sql>
+    <select id="listByNcProgramId" resultType="org.springblade.mdm.flow.vo.ApproveRecordVO">
+        select <include refid="all_columns"/> FROM mdm_approve_record
+        WHERE  nc_program_id = ${ncProgramId} and is_deleted = 0 order by create_time desc
+
+    </select>
+
+</mapper>
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 2ff1ba2..b85c8a1 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
@@ -3,7 +3,10 @@
 import lombok.AllArgsConstructor;
 import org.flowable.engine.RuntimeService;
 import org.flowable.engine.runtime.ProcessInstance;
+import org.springblade.mdm.flow.constants.FlowContants;
 import org.springframework.stereotype.Service;
+
+import java.util.Map;
 
 @AllArgsConstructor
 @Service
@@ -23,4 +26,26 @@
 		return processInstance.getProcessDefinitionKey();
 	}
 
+	/**
+	 * 浠庢祦绋嬪彉閲忚幏鍙栧彂璧锋祦绋嬬殑鏍戝舰
+	 * @param processInstanceId
+	 * @return
+	 */
+	public FlowProgramProperties getProgramProperties(String processInstanceId){
+		FlowProgramProperties programProperties = new FlowProgramProperties();
+
+		Map<String, Object> vars = runtimeService.getVariables(processInstanceId);
+
+		programProperties.setDrawingNo(String.valueOf(vars.get(FlowContants.DRAWING_NO)));
+		programProperties.setDrawingNoEdition(String.valueOf(vars.get(FlowContants.DRAWING_NO_EDITION)));
+		programProperties.setProcessNo(String.valueOf(vars.get(FlowContants.PROCESS_NO)));
+		programProperties.setProcessEdition(String.valueOf(vars.get(FlowContants.PROCESS_EDITION)));//宸ュ簭鐗堟
+		programProperties.setMachineCode(String.valueOf(vars.get(FlowContants.MACHINE_CODE)));
+		//鏁版嵁澶勭悊鍚嶇О涓虹増娆′互鍓嶏紝闆朵欢鍙峰姞宸ュ簭鍙凤細YZL4-1100-01-50 闆剁粍浠跺彿锛歒ZL4-1100-01 宸ュ簭鍙� 50
+
+		programProperties.setCraftEdition(String.valueOf(vars.get(FlowContants.CRAFT_EDITION)));
+
+		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
new file mode 100644
index 0000000..3be54f8
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/FlowProgramFileService.java
@@ -0,0 +1,97 @@
+
+package org.springblade.mdm.flow.service;
+
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.io.FilenameUtils;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.flowable.engine.RuntimeService;
+import org.springblade.core.log.exception.ServiceException;
+import org.springblade.core.mp.base.BizServiceImpl;
+import org.springblade.core.oss.OssTemplate;
+import org.springblade.core.oss.model.BladeFile;
+import org.springblade.mdm.flow.entity.FlowProgramFile;
+import org.springblade.mdm.flow.mapper.FlowProgramFileMapper;
+import org.springblade.mdm.flow.vo.ProgramUploadVO;
+import org.springblade.mdm.program.entity.NcProgram;
+import org.springblade.mdm.program.service.ProcessProgRefService;
+import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.charset.StandardCharsets;
+import java.util.Map;
+
+/**
+ * 娴佺▼绋嬪簭澶勭悊锛屽寘鎷笂浼狅紝鏌ヨ灞曠ず
+ *
+ * @author yangys
+ */
+@Slf4j
+@Service
+@AllArgsConstructor
+public class FlowProgramFileService extends BizServiceImpl<FlowProgramFileMapper, FlowProgramFile> {
+	private final OssTemplate ossTemplate;
+	private final RuntimeService runtimeService;
+	private final FlowCommonService flowCommonService;
+	public void uploadFlowProgramFile(ProgramUploadVO uploadVO) {
+
+		Map<String, Object> vars = runtimeService.getVariables(uploadVO.getProcessInstanceId());
+		checkFilenames(uploadVO.getFiles(),flowCommonService.getProgramProperties(uploadVO.getProcessInstanceId()));
+
+
+		//
+		//BladeFile bfile = ossTemplate.putFile(uploadVO.getFile());
+		//String link = bfile.getLink();
+		//淇濆瓨profame
+		/*
+		NcProgram prog = new NcProgram();
+		prog.setCode(generageCode());
+		prog.setName(file.getOriginalFilename());
+		prog.setNcNodeId(uploadVO.getNodeId());
+		prog.setOssName(bfile.getName());
+		prog.setDrawingNo(uploadVO.getDrawingNo());
+		prog.setProcessEdition(uploadVO.getProcessEdition());
+		prog.setIsLastEdition(1);
+
+		 */
+	}
+
+	public void checkFilenames(MultipartFile[] files,FlowProgramProperties programProperties){
+		for (MultipartFile file : files){
+			checkFilename(file.getOriginalFilename(),programProperties);
+		}
+	}
+
+	void checkFilename(String filename,FlowProgramProperties programProperties){
+		//绋嬪簭鍚嶇О锛氶浂浠跺彿鍔犲伐搴忓彿锛屾枃浠跺悕搴旇浠ユ寮�澶�
+		String expectedProgramName = programProperties.getDrawingNo()+"-"+programProperties.getProcessNo();
+		if(!StringUtils.startsWith(filename,expectedProgramName)){
+			throw new ServiceException("绋嬪簭鏂囦欢鍚嶄笉鍚堟硶锛屽簲涓猴細"+expectedProgramName+"-"+programProperties.getCraftEdition()+"-[娈垫暟]-[娈靛彿].[鏂囦欢鎵╁睍鍚峕");
+		}
+	}
+
+	/**
+	 * 鑾峰彇鏂囦欢鍐呭
+	 * @param id
+	 * @return
+	 */
+	public String getFileContent(Long id) {
+		String result  ="";
+
+		FlowProgramFile programFile = this.getById(id);
+		//if(prog.getIsTextFile()!=null && programFile.getIsTextFile()){
+			String fileName = programFile.getOssName();
+			try (InputStream inputStream = ossTemplate.statFileStream(fileName)) {
+				result = IOUtils.toString(inputStream, StandardCharsets.UTF_8);
+			} catch (IOException e) {
+				throw new RuntimeException(e);
+			}
+		//}else{
+		//	result = "闈炴枃鏈牸寮忔枃浠�";
+		//}
+		return result;
+	}
+}
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
new file mode 100644
index 0000000..85e0b58
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/FlowProgramProperties.java
@@ -0,0 +1,41 @@
+package org.springblade.mdm.flow.service;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDate;
+
+/**
+ * 娲惧伐娴佺▼鐨勭▼搴忔爲褰�
+ */
+@Data
+public class FlowProgramProperties {
+	@Schema(description = "闆剁粍浠�/鍥惧彿")
+	private String drawingNo;
+	@Schema(description = "鍥惧彿鐗堟/璁捐鐗堟")
+	private String drawingNoEdition;
+	@Schema(description = "宸ュ簭鍙�")
+	private String processNo;
+	@Schema(description = "宸ュ簭鍚嶇О")
+	private String processName;
+	@Schema(description = "浜у搧鍨嬪彿")
+	private String productModel;
+	@Schema(description = "宸ュ簭鐗堟")
+	private String processEdition;
+
+	@Schema(description = "宸ヨ壓鐗堟")
+	private String craftEdition;
+
+	@Schema(description = "璁惧缂栧彿")
+	private String machineCode;
+
+	@Schema(description = "璁惧鍨嬪彿")
+	private String machineMode;
+
+	@Schema(description = "璁″垝閿佸畾鏃堕棿(澶�)")
+	private Integer planLockDays;
+
+	@Schema(description = "璁″垝寮�宸ユ椂闂�")
+	private LocalDate planStartTime;
+
+}

--
Gitblit v1.9.3