From 4295f6d8006cc02cd98d19f46829a9dc3e5b36d4 Mon Sep 17 00:00:00 2001
From: yangys <y_ys79@sina.com>
Date: 星期一, 08 九月 2025 20:28:33 +0800
Subject: [PATCH] 修复新编程序报表错误,增加mes接口

---
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/task/ExceptionDispathCleanTask.java               |   43 ++++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/constants/FlowVariableContants.java          |    4 
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/gkw/programnode/service/ProgramNodeService.java   |    2 
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/mapper/TaskDispatchMapper.java               |    7 
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/commons/service/ParamService.java                 |   38 ++-
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/entity/TaskDispatch.java                     |   27 +++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/thirdpart/vo/MesTaskFinishVO.java                 |   23 ++
 blade-service/blade-mdm/pom.xml                                                                             |    4 
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/thirdpart/vo/MesTaskVO.java                       |   71 +++++++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/vo/TaskAssignVO.java                         |    2 
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/mapper/TaskDispatchMapper.xml                |    5 
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/thirdpart/service/MesTaskService.java             |   63 +++++++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/statreport/service/NewProgrammingStatService.java |    2 
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/commons/contants/ParamConstants.java              |   12 +
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/execute/TryFlowCompleteService.java  |    4 
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/thirdpart/controller/MesController.java           |  169 ++++++++++++++++++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/TaskDispatchService.java             |   30 ++
 17 files changed, 473 insertions(+), 33 deletions(-)

diff --git a/blade-service/blade-mdm/pom.xml b/blade-service/blade-mdm/pom.xml
index 63ca8cf..0d51ae1 100644
--- a/blade-service/blade-mdm/pom.xml
+++ b/blade-service/blade-mdm/pom.xml
@@ -71,10 +71,6 @@
             <artifactId>qiniu-java-sdk</artifactId>
         </dependency>
         <dependency>
-            <groupId>org.springblade</groupId>
-            <artifactId>blade-flow-api</artifactId>
-        </dependency>
-        <dependency>
             <groupId>org.apache.tika</groupId>
             <artifactId>tika-core</artifactId>
             <version>3.2.0</version>
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/commons/contants/ParamConstants.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/commons/contants/ParamConstants.java
index 861faea..ce6296b 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/commons/contants/ParamConstants.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/commons/contants/ParamConstants.java
@@ -4,9 +4,9 @@
 	public static final String NETWORK_TYPE_KEY = "networkType";
 
 	/**
-	 * 宸ユ帶缃戝洖浼犵▼搴忕洃鎺х洰褰曢�楀彿鍒嗛殧
+	 * 閲嶅娲惧伐澶╂暟楠岃瘉闂撮殧澶╂暟
 	 */
-	public static final String PROGRAM_MONITOR_DIR_KEY = "programMonitorDir";
+	public static String TASK_DUPLICATE_CHECK_DAYS= "taskDuplicateCheckDays";
 	/**
 	 * 娑夊瘑缃�
 	 */
@@ -25,4 +25,12 @@
 	 * 绯荤粺鍙傛暟锛屾満鏋勪腑杞﹂棿鐨刱ey
 	 */
 	public static final String WORKSHOP_DICT_KEY = "workshopDictKey";
+	/**
+	 * 璺熺洰褰曠殑id
+	 */
+	public static String ROOT_DEPT_ID= "rootDeptId";
+	/**
+	 * 閲嶅娲惧伐澶╂暟楠岃瘉闂撮殧澶╂暟
+	 */
+	public static String TASK_EXPIRE_DAYS = "taskExpireDays";
 }
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/commons/service/ParamService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/commons/service/ParamService.java
index 6a9a25a..4ba8b22 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/commons/service/ParamService.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/commons/service/ParamService.java
@@ -4,6 +4,8 @@
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.mdm.commons.contants.ParamConstants;
 import org.springblade.system.feign.ISysClient;
 import org.springframework.stereotype.Service;
 
@@ -17,15 +19,9 @@
 @AllArgsConstructor
 public class ParamService{
 	public static String NETWORK_TYPE= "networkType";
-	/**
-	 * 閲嶅娲惧伐澶╂暟楠岃瘉闂撮殧澶╂暟
-	 */
-	public static String TASK_DUPLATE_CHECK_DAYS= "taskDuplicateCheckDays";
 
-	/**
-	 * 閲嶅娲惧伐澶╂暟楠岃瘉闂撮殧澶╂暟
-	 */
-	public static String TASK_EXPIRE_DAYS= "taskExpireDays";
+
+
 
 	/**
 	 * 瀹℃壒鐢ㄦ埛瑙掕壊鍒悕鍙傛暟key锛岄�楀彿鍒嗛殧
@@ -51,14 +47,14 @@
 	public static String APPROVE_TABLE_TEMPLATE= "approveTableTemplate";
 
 
-	/**
-	 * 瀹℃壒鐢ㄦ埛瑙掕壊鍒悕鍙傛暟key锛岄�楀彿鍒嗛殧
-	 */
-	public static String ROOT_DEPT_ID= "rootDeptId";
+
 	/**
 	 * 杞﹀簥鐨刱ey锛屽弬鏁板�兼寚鍚戞満搴婄被鍨嬩腑鐨勮溅搴�
 	 */
 	public static String MACHINE_SPEC_RURNING = "machineSecTurning";
+
+
+
 	private final ISysClient sysClient;
 
 	public String getParamValue(String paramKey,String defaultValue){
@@ -89,9 +85,9 @@
 	 * 鑾峰彇浠诲姟閲嶅妫�鏌ュぉ鏁�
 	 * @return 澶╂暟
 	 */
-	public String taskDuplicateCheckDays(){
-		return getParamValue(
-			TASK_DUPLATE_CHECK_DAYS,"30");
+	public int taskDuplicateCheckDays(){
+		return Func.toInt(getParamValue(
+			ParamConstants.TASK_DUPLICATE_CHECK_DAYS,"30"));
 	}
 
 
@@ -100,9 +96,9 @@
 			CONFIRM_TABLE_TEMPLATE,"");
     }
 
-	public String rootDetpId() {
+	public String rootDeptId() {
 		return getParamValue(
-			ROOT_DEPT_ID,"0");
+			ParamConstants.ROOT_DEPT_ID,"0");
 	}
 
 	public String approveTableTemplateOssFileName() {
@@ -125,4 +121,12 @@
 	}
 
 
+	/**
+	 * 寮傚父鑰屽崡鏃犱繚鐣欏ぉ鏁�
+	 * @return
+	 */
+	public int getTaskExpireDays() {
+		String valueStr = getParamValue(ParamConstants.TASK_EXPIRE_DAYS,"30");
+		return Func.toInt(valueStr);
+	}
 }
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/constants/FlowVariableContants.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/constants/FlowVariableContants.java
index fa60bbc..58da7fc 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/constants/FlowVariableContants.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/constants/FlowVariableContants.java
@@ -23,4 +23,8 @@
 	 * 瀹為檯瀹℃壒楂樺笀id
 	 */
 	public static final String ACT_SENIOR = "actSenior";
+	/**
+	 * 杩囩▼鍗″彿鍙橀噺鍚�
+	 */
+	public static final String PROCESS_CARD = "processCard";
 }
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/entity/TaskDispatch.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/entity/TaskDispatch.java
index db9525e..5ef26b8 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/entity/TaskDispatch.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/entity/TaskDispatch.java
@@ -1,6 +1,7 @@
 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;
@@ -88,4 +89,30 @@
 	 * 绋嬪簭缂栧彿
 	 */
 	private String programNo;
+
+	/**
+	 * mes浠诲姟鍞竴鏍囪瘑
+	 */
+	private String mesTaskId;
+
+	/**
+	 * 妫�楠屽憳锛坢es鎻愪緵锛�
+	 */
+	private String inspector;
+
+	/**
+	 * 妫�楠屽弽棣堟椂闂达紙mes鎻愪緵锛�
+	 */
+	private Date checkTime;
+	/**
+	 * 杩囩▼鍗″彿
+	 */
+	private String processCard;
+	/**
+	 * 鏄惁涓洪噸澶嶆淳宸ユ暟鎹�
+	 * @return 鏄惁
+	 */
+	public boolean isDuplicateTask(){
+		return this.getStatus() == STATUS_DUP;
+	}
 }
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/mapper/TaskDispatchMapper.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/mapper/TaskDispatchMapper.java
index 9782ab8..76aa4af 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/mapper/TaskDispatchMapper.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/mapper/TaskDispatchMapper.java
@@ -4,9 +4,16 @@
 import org.springblade.mdm.flow.entity.FlowProgramFile;
 import org.springblade.mdm.flow.entity.TaskDispatch;
 
+import java.time.LocalDateTime;
 import java.util.List;
 
 public interface TaskDispatchMapper extends BladeMapper<TaskDispatch> {
 
 	List<String> distinctAllDrawingNo();
+
+	/**
+	 * 鍒犻櫎瓒呰繃杩囨湡澶╂暟鐨勫紓甯镐换鍔�
+	 * @param expiredTime 杩囨湡鐨勬椂闂寸偣
+	 */
+	void deleteExpiredExceptionTasks(LocalDateTime expiredTime);
 }
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/mapper/TaskDispatchMapper.xml b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/mapper/TaskDispatchMapper.xml
index 82a6f18..7dce5dd 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/mapper/TaskDispatchMapper.xml
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/mapper/TaskDispatchMapper.xml
@@ -8,9 +8,12 @@
         <result column="update_time" property="updateTime"/>
         <result column="is_deleted" property="isDeleted"/>
     </resultMap>
+
     <select id="distinctAllDrawingNo" resultType="java.lang.String">
         select distinct drawing_no from mdm_task_dispatch
     </select>
 
-
+    <delete id="deleteExpiredExceptionTasks">
+        delete from mdm_task_dispatch where status not in (1,2) and create_time &lt; #{expiredTime}
+    </delete>
 </mapper>
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/TaskDispatchService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/TaskDispatchService.java
index 481ea03..c72e8ca 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/TaskDispatchService.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/TaskDispatchService.java
@@ -3,10 +3,8 @@
 
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
-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.commons.service.ParamService;
 import org.springblade.mdm.flow.entity.TaskDispatch;
 import org.springblade.mdm.flow.mapper.TaskDispatchMapper;
@@ -20,6 +18,7 @@
 
 import java.time.LocalDateTime;
 import java.util.List;
+import java.util.Optional;
 
 /**
  * 浠诲姟娲惧伐鏁版嵁 澶勭悊鏈嶅姟
@@ -28,12 +27,13 @@
  */
 @Slf4j
 @Service
-@AllArgsConstructor
 public class TaskDispatchService  extends BizServiceImpl<TaskDispatchMapper, TaskDispatch> {
 	@Autowired
 	private ParamService paramService;
 	@Autowired
 	private DrawingNosMapper drawingNosMapper;
+
+
 	@Transactional(rollbackFor = Exception.class)
 	public TaskDispatch saveTask(TaskAssignVO startVO,boolean isDup) {
 		TaskDispatch taskDispatch = new TaskDispatch();
@@ -51,7 +51,7 @@
 	 * 鍔爑浜轰笅鎷夋暟鎹�
 	 * @param drawingNo
 	 */
-	void addDrawingNos(String drawingNo){
+	public void addDrawingNos(String drawingNo){
 		DrawingNos data = drawingNosMapper.selectById(drawingNo);
 		if(data == null){
 			data = new DrawingNos();
@@ -85,7 +85,7 @@
 			return false;
 		}
 
-		int taskDupDays = Func.toInt(paramService.taskDuplicateCheckDays());
+		int taskDupDays = paramService.taskDuplicateCheckDays();
 		LocalDateTime checkStartDate = LocalDateTime.now().minusDays(taskDupDays);
 		LambdaQueryChainWrapper<TaskDispatch> q = lambdaQuery().eq(TaskDispatch::getDrawingNo,startVO.getDrawingNo())
 			.eq(TaskDispatch::getProcessNo,startVO.getProcessNo())
@@ -113,4 +113,24 @@
 		}
 
 	}
+
+	/**
+	 * 娓呯悊杩囨湡鐨勫紓甯镐换鍔¤鍒�
+	 */
+	@Transactional
+    public void cleanExpiredExceptionTask() {
+		int expireDays = paramService.getTaskExpireDays();
+		LocalDateTime expiredTime = LocalDateTime.now().minusDays(expireDays);
+		baseMapper.deleteExpiredExceptionTasks(expiredTime);
+    }
+
+	/**
+	 * 鏍规嵁mes鍞竴鏍囪瘑鑾峰彇娲惧伐鏁版嵁
+	 * @param mesTaskId
+	 * @return
+	 */
+	public TaskDispatch getByMesTaskId(String mesTaskId) {
+		Optional<TaskDispatch> opt = lambdaQuery().eq(TaskDispatch::getMesTaskId, mesTaskId).oneOpt();
+		return opt.orElse(null);
+	}
 }
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/execute/TryFlowCompleteService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/execute/TryFlowCompleteService.java
index c134be6..79478a4 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/execute/TryFlowCompleteService.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/execute/TryFlowCompleteService.java
@@ -68,9 +68,9 @@
 				runtimeService.setVariable(task.getExecutionId(),FlowContants.PROGRAMMER_NAME,userCommonService.getUserNameById(Func.toLong(variables.get("assignee"))));
 			}
 		}else if(task.getTaskDefinitionKey().equals("check")){
-			runtimeService.setVariable(task.getExecutionId(),FlowVariableContants.ACT_CHECKER,Func.toLong(variables.get("assignee")));
+			variables.put(FlowVariableContants.ACT_CHECKER,Func.toStr(AuthUtil.getUserId()));
 		}else if(task.getTaskDefinitionKey().equals("approveTask")){
-			runtimeService.setVariable(task.getExecutionId(),FlowVariableContants.ACT_SENIOR,Func.toLong(variables.get("assignee")));
+			variables.put(FlowVariableContants.ACT_SENIOR,Func.toStr(AuthUtil.getUserId()));
 		}
 		variables.remove("programOnMachine");//鍏朵粬鑺傜偣锛屽拷鐣ョ幇鍦虹紪绋嬫爣璁�
 		if (StringUtil.isNoneBlank(processInstanceId, comment)) {
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/vo/TaskAssignVO.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/vo/TaskAssignVO.java
index 34459f2..eb7932d 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/vo/TaskAssignVO.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/vo/TaskAssignVO.java
@@ -51,6 +51,8 @@
 
 	@Schema(description = "浜哄憳鑱岃矗琛╥d锛岀晫闈笂闆朵欢鍙峰尮閰嶄笉涓婄敤鎴锋寚瀹氱殑")
 	private Long producePlanId;
+	@Schema(description = "MES浠诲姟鍞竴鏍囪瘑")
+	private String mesTaskId;
 	/**
 	 * 鏄惁 鏈� 绋嬪簭琛ュ厖娴佺▼锛堜复鏃舵祦绋嬶級
 	 * @return 鏄惁
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/gkw/programnode/service/ProgramNodeService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/gkw/programnode/service/ProgramNodeService.java
index c592587..db03bef 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/gkw/programnode/service/ProgramNodeService.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/gkw/programnode/service/ProgramNodeService.java
@@ -54,7 +54,7 @@
 	public List<ProgramNodeVO> loadTree(String includeSend) {
 
 		Integer workshopDictVal = Func.toInt(paramService.getParamValue(ParamConstants.WORKSHOP_DICT_KEY,DEFAULT_WORKSHOP_VALUE));
-		Long rootDeptId = Func.toLong(paramService.rootDetpId());
+		Long rootDeptId = Func.toLong(paramService.rootDeptId());
 		TreeDept root =  treeDeptService.getById(rootDeptId);
 		List<ProgramNodeVO> roots = new ArrayList<>();
 		ProgramNodeVO rootVO = new ProgramNodeVO();
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/statreport/service/NewProgrammingStatService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/statreport/service/NewProgrammingStatService.java
index 3b8f0b7..e79bedc 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/statreport/service/NewProgrammingStatService.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/statreport/service/NewProgrammingStatService.java
@@ -129,7 +129,7 @@
 			}else{
 				vo.setActCheckerName(this.userCommonService.getUserNameById(props.getActCheckerId()) );
 			}
-			if(props.getActCheckerId() == 0) {
+			if(props.getActSeniorId() == 0) {
 				vo.setActSeniorName(this.userCommonService.getUserNameById(props.getSeniorId()));
 			}else{
 				vo.setActSeniorName(this.userCommonService.getUserNameById(props.getActSeniorId()));
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/task/ExceptionDispathCleanTask.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/task/ExceptionDispathCleanTask.java
new file mode 100644
index 0000000..391fb6a
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/task/ExceptionDispathCleanTask.java
@@ -0,0 +1,43 @@
+package org.springblade.mdm.task;
+
+import lombok.extern.slf4j.Slf4j;
+import org.springblade.mdm.basesetting.machine.service.MachineService;
+import org.springblade.mdm.commons.service.ParamService;
+import org.springblade.mdm.flow.service.TaskDispatchService;
+import org.springblade.mdm.machinefile.service.MachineFileScanService;
+import org.springblade.mdm.machinefile.service.MachineFileService;
+import org.springblade.mdm.program.service.ProgramAnnotationService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+/**
+ * 寮傚父浠诲姟璁″垝娓呴櫎瀹氭椂浠诲姟
+ */
+@Slf4j
+@Component
+@EnableScheduling
+public class ExceptionDispathCleanTask {
+	@Autowired
+	private TaskDispatchService taskDispatchService;
+	@Autowired
+	private ParamService paramService;
+	// 姣�5绉掓墽琛屼竴娆�
+	//@Scheduled(fixedRate = 1000000)
+	//@Scheduled(cron = "0 1 0 * * ?") // 姣忓ぉ涓婂崍0鐐�1鍒嗘墽琛�
+	//@Scheduled(cron = "0 */5 * * * ?")
+	//@Scheduled(cron = "0 15 19 * * ?") //test
+	@Scheduled(cron = "${task.cron.exception_dispatch_clean:0 1 * * * ?}")
+	public void execute() {
+		String networkType = paramService.getParamValue(ParamService.NETWORK_TYPE,ParamService.NETWORK_TYPE_SHEMI);
+
+
+		if(ParamService.NETWORK_TYPE_SHEMI.equals(networkType)){
+			//娑夊瘑缃戯紝鎵ц寮傚父浠诲姟娓呯悊
+			taskDispatchService.cleanExpiredExceptionTask();
+		}
+
+	}
+
+}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/thirdpart/controller/MesController.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/thirdpart/controller/MesController.java
new file mode 100644
index 0000000..77b6682
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/thirdpart/controller/MesController.java
@@ -0,0 +1,169 @@
+package org.springblade.mdm.thirdpart.controller;
+
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springblade.core.tool.api.R;
+import org.springblade.mdm.flow.constants.FlowContants;
+import org.springblade.mdm.flow.entity.TaskDispatch;
+import org.springblade.mdm.flow.excution.StartDispatcher;
+import org.springblade.mdm.flow.service.TaskDispatchService;
+import org.springblade.mdm.flow.vo.FlowStartResult;
+import org.springblade.mdm.flow.vo.TaskAssignVO;
+import org.springblade.mdm.thirdpart.service.MesTaskService;
+import org.springblade.mdm.thirdpart.vo.MesTaskFinishVO;
+import org.springblade.mdm.thirdpart.vo.MesTaskVO;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Slf4j
+@RestController
+@RequestMapping("/thirdparty/")
+@Tag(name = "MES鎺ュ彛", description = "MES鎺ュ彛")
+public class MesController {
+
+	@Autowired
+	private MesTaskService mesTaskService;
+	@Autowired
+	private StartDispatcher dispatcher;
+	@Autowired
+	private TaskDispatchService taskDispatchService;
+	/**
+	 * 鏂板
+	 */
+	@PostMapping("/new-mes-task")
+	@Operation(summary = "鎺ユ敹MES浠诲姟", description = "鎺ユ敹MES浠诲姟")
+	public R<Void> newTask(@RequestBody MesTaskVO mesTaskVO) {
+		try {
+			TaskAssignVO startVO = this.toTaskAssignVO(mesTaskVO);
+
+			List<String> errors = checkTaskData(startVO);
+			if (!errors.isEmpty()) {
+				String msg = formatError(errors);
+				log.error("鎺ユ敹MES浠诲姟{}锛岄獙璇佸け璐ワ細{}",mesTaskVO,msg);
+				return R.fail(msg);
+			}
+
+			TaskDispatch dispatch = mesTaskService.saveTask(startVO);
+
+			log.error("MES浠诲姟淇濆瓨鎴愬姛");
+			if(!dispatch.isDuplicateTask()){
+				try {
+					FlowStartResult result = dispatcher.start(startVO);
+
+					dispatch.setStatus(TaskDispatch.STATUS_STARTED);
+					dispatch.setProcessInstanceId(result.getProcessInstanceId());
+					dispatch.setProgramNo(result.getProgramNo());
+					taskDispatchService.updateById(dispatch);
+				}catch (Exception e){
+					dispatch.setStatus(TaskDispatch.STATUS_EXCEPTION);
+					dispatch.setErrMsg(e.getMessage());
+					taskDispatchService.updateById(dispatch);
+
+					log.error("MES浠诲姟鍚姩澶辫触", e);
+				}
+			}
+			return R.success();
+		}catch (Exception e) {
+			log.error("鎺ユ敹mes浠诲姟澶辫触", e);;
+			return R.fail(e.getMessage());
+		}
+
+	}
+
+	//private IResultCode formatError(List<String> errors) {
+	private String formatError(List<String> errors) {
+		return StringUtils.join(errors,",");
+	}
+
+	/**
+	 * 楠岃瘉鏁版嵁
+	 * @param startVO
+	 * @return
+	 */
+	private List<String> checkTaskData(TaskAssignVO startVO) {
+		List<String> errorList = new ArrayList<>();
+		if(StringUtils.isBlank(startVO.getDrawingNo())){
+			errorList.add("鍥惧彿涓嶈兘涓虹┖");
+		}
+
+		if(StringUtils.isBlank(startVO.getProcessNo())){
+			errorList.add("宸ュ簭鍙蜂笉鑳戒负绌�");
+		}
+
+		if(StringUtils.isBlank(startVO.getProcessEdition())){
+			errorList.add("宸ュ簭鐗堟涓嶈兘涓虹┖");
+		}
+		if(StringUtils.isBlank(startVO.getMachineCode())){
+			errorList.add("璁惧缂栫爜涓嶈兘涓虹┖");
+		}
+		//TODO 宸ュ簭鍚嶇О 鎴戜滑鏄繀濉紝
+		return errorList;
+	}
+
+	/**
+	 * 浠巑esvo杞崲涓哄唴閮ㄤ换鍔″垎娲緑o
+	 * @param mesTaskVO
+	 * @return
+	 */
+	TaskAssignVO toTaskAssignVO(MesTaskVO mesTaskVO) {
+		TaskAssignVO taskAssignVO = new TaskAssignVO();
+		BeanUtils.copyProperties(mesTaskVO, taskAssignVO);
+
+		taskAssignVO.setTitle(taskAssignVO.getDrawingNo()+"-"+taskAssignVO.getProcessNo()+"-"+taskAssignVO.getProcessEdition()+"璁″垝浠诲姟");
+		taskAssignVO.setIsTempFlow(FlowContants.N);
+		return taskAssignVO;
+	}
+
+	@PostMapping("/finish-task")
+	@Operation(summary = "MES浠诲姟瀹屾垚鎺ㄩ��", description = "MES浠诲姟瀹屾垚鎺ㄩ��")
+	public R<Void> finishTask(@RequestBody MesTaskFinishVO finishTaskVO) {
+		log.info("鏀跺埌mes浠诲姟瀹屾垚鎺ㄩ��:{}",finishTaskVO);
+		List<String> errors = checkFinishTaskData(finishTaskVO);
+		if (!errors.isEmpty()) {
+			String msg = formatError(errors);
+			log.error("鎺ユ敹MES瀹屾垚鎺ㄩ�亄}锛岄獙璇佸け璐ワ細{}",finishTaskVO,msg);
+			return R.fail(msg);
+		}
+		try {
+			mesTaskService.finishTask(finishTaskVO);
+			return R.success();
+		}catch(Exception e){
+			log.error("鎺ユ敹MES宸ュ簭瀹屾垚淇℃伅澶辫触", e);;
+			return R.fail("鍐呴儴閿欒");
+		}
+
+	}
+
+	private List<String> checkFinishTaskData(MesTaskFinishVO finishTaskVO) {
+		List<String> errorList = new ArrayList<>();
+		if(StringUtils.isBlank(finishTaskVO.getMesTaskId())){
+			errorList.add("鍞竴鏍囪瘑涓嶈兘涓虹┖");
+		}
+		if(StringUtils.isBlank(finishTaskVO.getInspector())){
+			errorList.add("妫�楠屽憳涓嶈兘涓虹┖");
+		}
+		if(finishTaskVO.getCheckTime() == null){
+			errorList.add("妫�楠屽弽棣堟椂闂翠笉鑳戒负绌�");
+		}
+		return errorList;
+
+	}
+	@GetMapping("/ping")
+	@Operation(summary = "MES ping", description = "娴嬭瘯鎺ュ彛閫氱晠")
+	public R<String> ping() {
+		try {
+
+			return R.data("pong");
+		}catch (Exception e) {
+			return R.fail(e.getMessage());
+		}
+
+	}
+
+}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/thirdpart/service/MesTaskService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/thirdpart/service/MesTaskService.java
new file mode 100644
index 0000000..d94029d
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/thirdpart/service/MesTaskService.java
@@ -0,0 +1,63 @@
+
+package org.springblade.mdm.thirdpart.service;
+
+import lombok.extern.slf4j.Slf4j;
+import org.flowable.engine.RuntimeService;
+import org.springblade.mdm.flow.constants.FlowVariableContants;
+import org.springblade.mdm.flow.entity.TaskDispatch;
+import org.springblade.mdm.flow.service.TaskDispatchService;
+import org.springblade.mdm.flow.vo.TaskAssignVO;
+import org.springblade.mdm.thirdpart.vo.MesTaskFinishVO;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * 浠诲姟娲惧伐鏁版嵁 澶勭悊鏈嶅姟
+ *
+ * @author yangys
+ */
+@Slf4j
+@Service
+public class MesTaskService {
+	@Autowired
+	private TaskDispatchService taskDispatchService;
+	@Autowired
+	private RuntimeService runtimeService;
+	/**
+	 * 淇濆瓨mes浠诲姟
+	 * @param startVO
+	 * @return
+	 */
+	@Transactional(rollbackFor = Exception.class)
+	public TaskDispatch saveTask(TaskAssignVO startVO) {
+		TaskDispatch taskDispatch = new TaskDispatch();
+		BeanUtils.copyProperties(startVO, taskDispatch);
+
+		boolean isDuplicate = taskDispatchService.checkIsDuplicate(startVO);
+		if(isDuplicate){
+			taskDispatch.setStatus(TaskDispatch.STATUS_DUP);
+		}
+		taskDispatchService.save(taskDispatch);
+
+		taskDispatchService.addDrawingNos(taskDispatch.getDrawingNo());
+		return taskDispatch;
+	}
+
+	/**
+	 * mes 瀹屾垚鎺ㄩ��
+	 * @param finishTaskVO
+	 */
+	public void finishTask(MesTaskFinishVO finishTaskVO) {
+		TaskDispatch taskDispatch = taskDispatchService.getByMesTaskId(finishTaskVO.getMesTaskId());
+		if(taskDispatch != null && taskDispatch.getProcessInstanceId() != null){
+			taskDispatch.setProcessCard(finishTaskVO.getProcessCard());
+			taskDispatch.setInspector(finishTaskVO.getInspector());
+			taskDispatch.setCheckTime(finishTaskVO.getCheckTime());
+			taskDispatchService.updateById(taskDispatch);
+
+			runtimeService.setVariable(taskDispatch.getProcessInstanceId(), FlowVariableContants.PROCESS_CARD,finishTaskVO.getProcessCard());
+		}
+	}
+}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/thirdpart/vo/MesTaskFinishVO.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/thirdpart/vo/MesTaskFinishVO.java
new file mode 100644
index 0000000..2f5b425
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/thirdpart/vo/MesTaskFinishVO.java
@@ -0,0 +1,23 @@
+package org.springblade.mdm.thirdpart.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import java.time.LocalDate;
+import java.util.Date;
+
+@Data
+@Schema(description = "MES浠诲姟瀹屾垚鏁版嵁")
+public class MesTaskFinishVO {
+	@Schema(description = "妫�楠屽弽棣堟椂闂�")
+	private Date checkTime;
+	@Schema(description = "杩囩▼鍗″彿")
+	private String processCard;
+
+	@Schema(description = "鎵规鍙�")
+	private Long batchId;
+	@Schema(description = "妫�楠屽憳")
+	private String inspector;
+	@Schema(description = "MES浠诲姟鍞竴鏍囪瘑")
+	private String mesTaskId;
+
+}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/thirdpart/vo/MesTaskVO.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/thirdpart/vo/MesTaskVO.java
new file mode 100644
index 0000000..6a380a3
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/thirdpart/vo/MesTaskVO.java
@@ -0,0 +1,71 @@
+package org.springblade.mdm.thirdpart.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import org.apache.commons.lang3.StringUtils;
+import org.springblade.mdm.flow.constants.FlowContants;
+
+import java.time.LocalDate;
+
+@Data
+@Schema(description = "MES浠诲姟璁″垝")
+public class MesTaskVO {
+	@Schema(description = "娴佺▼鏍囬")
+	private String title;
+	@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;
+
+	@Schema(description = "鍋忕鍗曞彿")
+	private String deviation;
+	@Schema(description = "鏄惁涓存椂娴佺▼锛屽��:Y/N")
+	private String isTempFlow;
+
+	@Schema(description = "浠诲姟娲惧伐璁板綍琛╥d")
+	private Long taskDispatchId;
+
+	@Schema(description = "浜哄憳鑱岃矗琛╥d锛岀晫闈笂闆朵欢鍙峰尮閰嶄笉涓婄敤鎴锋寚瀹氱殑")
+	private Long producePlanId;
+
+	@Schema(description = "MES浠诲姟鍞竴鏍囪瘑")
+	private String mesTaskId;
+	/**
+	 * 鏄惁 鏈� 绋嬪簭琛ュ厖娴佺▼锛堜复鏃舵祦绋嬶級
+	 * @return 鏄惁
+	 */
+	public boolean isTemporaryFlow(){
+		return FlowContants.Y.equals(isTempFlow);
+	}
+
+	/**
+	 * 鏄惁鍋忕鍗�
+	 * @return 鏄惁
+	 */
+	public boolean isDeviationFlow(){
+		return StringUtils.isNotBlank(deviation);
+	}
+}

--
Gitblit v1.9.3