From bba9d9bd7bbebbdfda231c2edb1d339cec54cd03 Mon Sep 17 00:00:00 2001
From: yangys <y_ys79@sina.com>
Date: 星期一, 16 六月 2025 10:42:46 +0800
Subject: [PATCH] 补充机床接口2

---
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/NcProgramMapper.xml                           |   46 +++++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/AutoAssignUsersService.java                    |    5 
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/entity/NcProgram.java                                |   68 +++++++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramService.java                        |   72 ++++++++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/task/dispatch/CureProgramCheckTask.java                 |   19 ++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/commons/vo/BaseVO.java                                       |    3 
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/NcProgramMapper.java                          |   21 ++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/machine/controller/MachineController.java        |    2 
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/task/dispatch/ProgramEmptyUpgradeProcessEdtionTask.java |   32 +++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/machine/MachineService.java                      |   10 +
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/StartDispatcher.java                           |   15 +
 blade-service/blade-mdm/src/main/resources/processesbpmn/dispatch.bpmn20.xml                                           |  150 ++++++++++------
 doc/sql/mdm/mdm.all.create.sql                                                                                         |   35 ++-
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/machine/mapper/MachineMapper.xml                 |    4 
 14 files changed, 401 insertions(+), 81 deletions(-)

diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/machine/MachineService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/machine/MachineService.java
index 8f0a1f4..99537db 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/machine/MachineService.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/machine/MachineService.java
@@ -132,4 +132,14 @@
 		return true;
 
 	}
+
+	/**
+	 * 鏍规嵁鏈哄簥缂栫爜鑾峰彇鏈哄簥
+	 * @param machineCode 鏈哄簥缂栫爜
+	 * @return
+	 */
+	public Machine getByCode(String machineCode) {
+
+		return this.getOne(this.lambdaQuery().eq(Machine::getCode, machineCode));
+	}
 }
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/machine/controller/MachineController.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/machine/controller/MachineController.java
index a1bdd72..98d4446 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/machine/controller/MachineController.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/machine/controller/MachineController.java
@@ -97,7 +97,7 @@
 	@GetMapping("export")
 	@ApiOperationSupport(order = 13)
 	@Operation(summary = "瀵煎嚭鏈哄簥", description = "鍚嶇О鎴栫紪鐮�")
-	public void exportUser(MachineQueryVO query, HttpServletResponse response) {
+	public void export(MachineQueryVO query, HttpServletResponse response) {
 		query.setCurrent(1);
 		query.setSize(Integer.MAX_VALUE);
 		IPage<MachineVO> pages = service.pageQuery(query);
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/machine/mapper/MachineMapper.xml b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/machine/mapper/MachineMapper.xml
index f79a3a9..e5da9df 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/machine/mapper/MachineMapper.xml
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/machine/mapper/MachineMapper.xml
@@ -9,8 +9,8 @@
         <result column="name" property="name"/>
 
         <result column="status" property="status"/>
-        <result column="createTime" property="create_time"/>
-        <result column="updateTime" property="update_time"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_time" property="updateTime"/>
         <result column="is_deleted" property="isDeleted"/>
     </resultMap>
     <select id="pageQuery" resultType="org.springblade.mdm.basesetting.machine.vo.MachineVO">
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/commons/vo/BaseVO.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/commons/vo/BaseVO.java
index 4c456e8..61d00bb 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/commons/vo/BaseVO.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/commons/vo/BaseVO.java
@@ -1,5 +1,6 @@
 package org.springblade.mdm.commons.vo;
 
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Getter;
 import lombok.Setter;
 
@@ -9,7 +10,7 @@
 @Getter
 public class BaseVO {
 	private Long id;
-
+	@Schema(description = "鐘舵��")
 	private Integer status;
 	private Long createUser;
 	private Date createTime;
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/AutoAssignUsersService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/AutoAssignUsersService.java
index ee9d6bf..65264c3 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/AutoAssignUsersService.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/AutoAssignUsersService.java
@@ -14,15 +14,16 @@
 @Service
 public class AutoAssignUsersService {
 	@Autowired
-	private ProduceDivisionMapper planMapper;
+	private ProduceDivisionMapper divMapper;
 
 	public Map<String,Object> autoAssignUsers(long producePlanId){
-		ProduceDivision pplan = planMapper.selectById(producePlanId);
+		ProduceDivision pplan = divMapper.selectById(producePlanId);
 		Map<String,Object> result = new HashMap<String,Object>();
 		result.put("teamLeader",pplan.getTeamLeaderId());
 		result.put("programmer",pplan.getProgrammerId());
 		result.put("checker",pplan.getCheckerId());
 		result.put("senior",pplan.getSeniorId());
+
 		return result;
 	}
 }
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 20600ed..ebeb67a 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
@@ -10,6 +10,8 @@
 import org.springblade.flow.core.pojo.entity.BladeFlow;
 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.service.NcProgramService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.flowable.engine.RuntimeService;
@@ -25,6 +27,9 @@
 	private AutoAssignUsersService autoAssignUsersService;
 	@Autowired
 	private IdentityService identityService;
+
+	@Autowired
+	private NcProgramService ncProgramService;
 	private static final String PROCESS_KEY = "dispatch";
 
 	public void start(TaskAssignVO startVO){
@@ -45,9 +50,16 @@
 		vars.put("drawingNoEdition",startVO.getDrawingNoEdition());
 		vars.put("planLockDays",startVO.getPlanLockDays());
 
-		//vars.put("producePlanId",startVO.getCraftEdition());
+		//闆剁粍浠朵唬鐮�
+		String partNo = generatePartNo(startVO);
+		vars.put("partNo",partNo);
 
+		NcProgram curedNcProgram = ncProgramService.getCuredNcProgram(partNo,startVO.getMachineMode());
+		vars.put("curedNcProgram",curedNcProgram);
 
+		//璁剧疆鏄惁鏈夊浐鍖栫▼搴忔爣璁�
+		vars.put("hasCuredProgram",curedNcProgram != null ? "Y":"N");
+		
 		String businessKey = "0";//涓氬姟琛╧ey
 
 		identityService.setAuthenticatedUserId(String.valueOf(AuthUtil.getUserId()));//璁剧疆娴佺▼鍙戣捣浜�
@@ -72,6 +84,5 @@
 			startVO.getProcessName(),
 			startVO.getCraftEdition(),
 			startVO.getProcessEdition());
-
 	}
 }
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/task/dispatch/CureProgramCheckTask.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/task/dispatch/CureProgramCheckTask.java
new file mode 100644
index 0000000..0e1b8a6
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/task/dispatch/CureProgramCheckTask.java
@@ -0,0 +1,19 @@
+package org.springblade.mdm.flow.task.dispatch;
+
+import lombok.extern.slf4j.Slf4j;
+import org.flowable.engine.delegate.DelegateExecution;
+import org.springblade.mdm.program.entity.NcProgram;
+import org.springframework.stereotype.Component;
+
+@Slf4j
+@Component("cureProgramCheckTask")
+public class CureProgramCheckTask {
+
+	public void execute(DelegateExecution execution) {
+		//鍥哄寲绋嬪簭妫�鏌ユ湁鏁堟湡锛�
+		String hasCuredProgram =  (String)execution.getVariable("hasCuredProgram");
+		NcProgram ncProgram =  (NcProgram)execution.getVariable("curedNcProgram");
+
+		System.out.println("鎵ц鏈嶅姟浠诲姟");
+	}
+}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/task/dispatch/ProgramEmptyUpgradeProcessEdtionTask.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/task/dispatch/ProgramEmptyUpgradeProcessEdtionTask.java
new file mode 100644
index 0000000..cf6ab9e
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/task/dispatch/ProgramEmptyUpgradeProcessEdtionTask.java
@@ -0,0 +1,32 @@
+package org.springblade.mdm.flow.task.dispatch;
+
+import lombok.extern.slf4j.Slf4j;
+import org.flowable.engine.delegate.DelegateExecution;
+import org.springblade.core.tool.utils.BeanUtil;
+import org.springblade.mdm.program.entity.NcProgram;
+import org.springblade.mdm.program.service.NcProgramService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+@Slf4j
+@Component("programEmptyUpgradeProcessEdtionTask")
+public class ProgramEmptyUpgradeProcessEdtionTask {
+	@Autowired
+	private NcProgramService ncProgramService;
+	public void execute(DelegateExecution execution) {
+		//绌哄崌鐗堬紝鏂板姞鍏ヤ竴鏉$▼搴忔暟鎹紝骞朵笖灏嗗伐搴忕増娆rocessEdition璁剧疆涓虹敤鎴疯緭鍏ョ殑鏂扮増鏈�
+
+		NcProgram ncProgram =  (NcProgram)execution.getVariable("curedNcProgram");
+		//灏嗙幇鏈夌▼搴忚缃负闈炴渶鏂扮殑
+		ncProgram.setIsLastEdition(0);
+		ncProgramService.updateById(ncProgram);
+
+		NcProgram newNcProgram = new NcProgram();
+		BeanUtil.copyProperties(ncProgram, newNcProgram);
+		newNcProgram.setIsLastEdition(1);
+		newNcProgram.setId(null);
+		ncProgramService.save(newNcProgram);
+
+		log.info("绌哄崌鐗堝畬鎴愶紝鏂扮殑绋嬪簭id涓簕}",newNcProgram.getId());
+	}
+}
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
new file mode 100644
index 0000000..1587ad0
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/entity/NcProgram.java
@@ -0,0 +1,68 @@
+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.time.LocalDate;
+import java.time.LocalDateTime;
+
+@Setter
+@Getter
+@TableName("mdm_nc_program")
+public class NcProgram extends BizEntity {
+	private String name;
+	private String code;
+	/**
+	 * 绋嬪簭鍖呭悕
+ 	 */
+	private String packageName;
+	/**
+	 * 璁惧锛堟満搴婏級缂栫爜
+	 */
+	private String machineCode;
+	/**
+	 * 闆剁粍浠跺彿
+	 */
+	private String partNo;
+
+	/**
+	 * 鏄惁鍥哄寲
+	 */
+	private Integer isCured;
+	/**
+	 * 杩囨湡鏃ユ湡
+	 */
+	private LocalDate expireDate;
+	/**
+	 * 宸ュ簭鐗堟
+	 */
+	private String processEdition;
+	/**
+	 * 鏄惁鏈�鏂扮増娆★紝1锛氭渶鏂扮増娆★紱0:鍘嗗彶鐗堟
+	 */
+	private Integer isLastEdition;
+	/**
+	 * 鏄惁閿佸畾
+	 */
+	private Integer isLocked;
+	/**
+	 * 浠诲姟鍒嗘淳鏃堕棿
+	 */
+	private LocalDateTime taskAssignTime;
+
+	/**
+	 * 鏄惁鍦ㄦ湁鏁堟湡鍐�
+	 * @param effectiveMonths 鏈夋晥鏃堕暱锛堟湀鏁帮級锛屽湪绯荤粺鍙傛暟涓厤缃�
+	 * @return
+	 */
+	public boolean withinValidity(int effectiveMonths){
+		//鏈夋晥鏈熸寜鐓т粈涔堟椂闂磋绠楁帹绠楋紵鏆傛椂鎸夌収浠诲姟鍒嗛厤鏃堕棿锛� 浠诲姟鍒嗛厤鏃堕棿 + 鏈夋晥鏈堜唤 < 褰撳墠鏃堕棿涓烘湁鏁�
+		if(taskAssignTime == null ){
+			return false;
+		}
+		//
+		return taskAssignTime.plusMonths(effectiveMonths).isBefore(LocalDateTime.now());
+	}
+}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/NcProgramMapper.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/NcProgramMapper.java
new file mode 100644
index 0000000..4690f0a
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/NcProgramMapper.java
@@ -0,0 +1,21 @@
+package org.springblade.mdm.program.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Constants;
+import org.apache.ibatis.annotations.Param;
+import org.springblade.core.mp.mapper.BladeMapper;
+import org.springblade.mdm.basesetting.machine.entity.Machine;
+import org.springblade.mdm.basesetting.machine.vo.MachineVO;
+import org.springblade.mdm.program.entity.NcProgram;
+
+public interface NcProgramMapper extends BladeMapper<NcProgram> {
+
+	/**
+	 * 鑾峰彇鏈�鏂板浐鍖栫▼搴�
+	 * @param partNo 闆剁粍浠跺彿
+	 * @param machineGroupCode 鏈哄簥缁勪唬鐮�
+	 * @return
+	 */
+	NcProgram getCuredNcProgram(@Param("")String partNo,@Param("machineGroupCode")String machineGroupCode);
+}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/NcProgramMapper.xml b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/NcProgramMapper.xml
new file mode 100644
index 0000000..27e2f8b
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/NcProgramMapper.xml
@@ -0,0 +1,46 @@
+<?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.NcProgramMapper">
+    <resultMap id="BaseResultMap" type="org.springblade.mdm.program.entity.NcProgram">
+        <id column="id" property="id"/>
+        <result column="code" property="code"/>
+        <result column="name" property="name"/>
+        <result column="package_name" property="packageName"/>
+        <result column="machine_code" property="machineCode"/>
+
+        <result column="part_no" property="partNo"/>
+        <result column="is_cured" property="isCured"/>
+        <result column="expire_date" property="expireDate"/>
+        <result column="process_edition" property="processEdition"/>
+        <result column="is_last_edition" property="isLastEdition"/>
+        <result column="is_locked" property="isLocked"/>
+        <result column="task_assign_time" property="taskAssignTime"/>
+
+        <result column="status" property="status"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_time" property="updateTime"/>
+        <result column="is_deleted" property="isDeleted"/>
+    </resultMap>
+<!--
+
+    <select id="pageQuery" resultType="org.springblade.mdm.basesetting.machine.vo.MachineVO">
+        select m.id,m.name,m.code,g.dict_key machine_group_code,g.dict_value machine_group_name,m.machine_spec,m.manufacturer,m.operator
+        from mdm_machine m join blade_dict_biz g on m.machine_group_code=g.dict_key and g.code='machine_group' and g.is_deleted=0
+            ${ew.customSqlSegment}
+    </select>
+-->
+
+
+    <!--    <select id="parentTree" resultMap="treeNodeResultMap">-->
+<!--        select id, parent_id, dict_value as title, id as "value", id as "key" from blade_dict where is_deleted = 0 and parent_id = 0-->
+<!--    </select>-->
+    <sql id="all_columns">id,tenant_id,nc_node_id,code,name,package_name,machine_code,part_no,is_cured,
+  expire_date,process_edition,is_last_edition,is_locked,task_assign_time,status,create_dept,is_deleted,create_time,create_user,update_time,update_user</sql>
+    <select id="getCuredNcProgram" resultMap="BaseResultMap">
+        select <include refid="all_columns"/> from mdm_nc_program
+        where is_deleted=0 and is_cured=1 and part_no=#{partNo} and is_last_edition=1
+        and machine_code in (select code from mdm_machine where machine_group_code=#{machineGroupCode})
+        order by create_time desc
+        limit 1
+    </select>
+</mapper>
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
new file mode 100644
index 0000000..b0bffe1
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramService.java
@@ -0,0 +1,72 @@
+/**
+ * BladeX Commercial License Agreement
+ * Copyright (c) 2018-2099, https://bladex.cn. All rights reserved.
+ * <p>
+ * Use of this software is governed by the Commercial License Agreement
+ * obtained after purchasing a license from BladeX.
+ * <p>
+ * 1. This software is for development use only under a valid license
+ * from BladeX.
+ * <p>
+ * 2. Redistribution of this software's source code to any third party
+ * without a commercial license is strictly prohibited.
+ * <p>
+ * 3. Licensees may copyright their own code but cannot use segments
+ * from this software for such purposes. Copyright of this software
+ * remains with BladeX.
+ * <p>
+ * Using this software signifies agreement to this License, and the software
+ * must not be used for illegal purposes.
+ * <p>
+ * THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY. The author is
+ * not liable for any claims arising from secondary or illegal development.
+ * <p>
+ * Author: Chill Zhuang (bladejava@qq.com)
+ */
+package org.springblade.mdm.program.service;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.flowable.engine.*;
+import org.springblade.core.mp.base.BizServiceImpl;
+import org.springblade.mdm.basesetting.machine.MachineService;
+import org.springblade.mdm.basesetting.machine.entity.Machine;
+import org.springblade.mdm.program.mapper.NcProgramMapper;
+import org.springblade.mdm.program.entity.NcProgram;
+import org.springblade.mdm.program.vo.DncSendBackData;
+import org.springframework.stereotype.Service;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 宸ヤ綔娴佹湇鍔″疄鐜扮被
+ *
+ * @author Chill
+ */
+@Slf4j
+@Service
+@AllArgsConstructor
+public class NcProgramService  extends BizServiceImpl<NcProgramMapper, NcProgram> {
+
+	private final ObjectMapper objectMapper;
+	private final RepositoryService repositoryService;
+	private final RuntimeService runtimeService;
+	private final HistoryService historyService;
+	private final TaskService taskService;
+	private final ProcessEngine processEngine;
+	private final MachineService machineService;
+	/**
+	 * 鏌ヨ鐜版湁鍥哄寲鐨勭▼搴忥紝鏆傚畾鏉′欢锛氶浂缁勪欢鍙风浉鍚岋紝涓旀槸鍚屼竴鏈哄簥缁�
+	 * @param partNo
+	 * @param machineCode
+	 * @return
+	 */
+	public NcProgram getCuredNcProgram(String partNo,String machineCode) {
+		Machine machine = machineService.getByCode(machineCode);
+		return this.getBaseMapper().getCuredNcProgram(partNo,machine.getMachineGroupCode());
+	}
+
+}
diff --git a/blade-service/blade-mdm/src/main/resources/processesbpmn/dispatch.bpmn20.xml b/blade-service/blade-mdm/src/main/resources/processesbpmn/dispatch.bpmn20.xml
index 549a53d..69752fa 100644
--- a/blade-service/blade-mdm/src/main/resources/processesbpmn/dispatch.bpmn20.xml
+++ b/blade-service/blade-mdm/src/main/resources/processesbpmn/dispatch.bpmn20.xml
@@ -5,34 +5,51 @@
     <sequenceFlow id="sid-c1619263-d1ff-4106-9315-f9ab9a3bee71" sourceRef="start" targetRef="teamLeaderTask"/>
     <userTask id="teamLeaderTask" name="涓撲笟缁勯暱" flowable:assignee="${teamLeader}"/>
     <userTask id="programmingTask" name="缂栧埗" flowable:assignee="${programmer}"/>
-    <sequenceFlow id="sid-ac678e85-9f7b-4e8d-903f-2591ea7721ab" sourceRef="teamLeaderTask" targetRef="programmingTask"/>
     <userTask id="check" name="鏍″" flowable:assignee="${checker}"/>
-    <sequenceFlow id="sid-6c33a84d-d03e-47f6-87c1-8e676b25e572" sourceRef="programmingTask" targetRef="programGateway"/>
     <userTask id="approveTask" name="楂樺笀瀹℃壒" flowable:assignee="${senior}"/>
-    <sequenceFlow id="toCheckApproveGateway" sourceRef="check" targetRef="checkApproveGateway" name="鏍″瀹℃壒鍒ゆ柇缃戝叧"/>
     <endEvent id="approveEnd" name="瀹℃壒瀹屾垚"/>
-    <sequenceFlow id="sid-1a414739-a80f-4436-8d7a-e7b65fae8233" sourceRef="approveTask" targetRef="seriorApproveGateway"/>
-    <exclusiveGateway id="programGateway" name="缂栧埗瀹屾垚鍒ゆ柇缃戝叧"/>
-    <sequenceFlow id="programingToCheck" sourceRef="programGateway" targetRef="check" name="缂栧埗瀹屾垚缁欐牎瀵�">
+    <sequenceFlow id="programingToCheck" sourceRef="programmingTask" targetRef="check" name="缂栧埗瀹屾垚缁欐牎瀵�">
       <conditionExpression xsi:type="tFormalExpression">${approve=='Y'}</conditionExpression>
     </sequenceFlow>
-    <sequenceFlow id="programingBackToLeader" sourceRef="programGateway" targetRef="teamLeaderTask" name="缂栧埗椹冲洖">
+    <sequenceFlow id="programingBackToLeader" sourceRef="programmingTask" targetRef="teamLeaderTask" name="缂栧埗椹冲洖">
       <conditionExpression xsi:type="tFormalExpression">${approve=='N'}</conditionExpression>
     </sequenceFlow>
-    <exclusiveGateway id="checkApproveGateway" name="鏍″瀹℃壒鍒ゆ柇缃戝叧"/>
-    <sequenceFlow id="flowCheckToPrograming" sourceRef="checkApproveGateway" targetRef="programmingTask" name="flow鏍″椹冲洖鍒扮紪鍒�">
+    <sequenceFlow id="flowCheckToPrograming" sourceRef="check" targetRef="programmingTask" name="flow鏍″椹冲洖鍒扮紪鍒�">
       <conditionExpression xsi:type="tFormalExpression">${approve=='N'}</conditionExpression>
     </sequenceFlow>
-    <sequenceFlow id="flowToSeriorTask" sourceRef="checkApproveGateway" targetRef="approveTask" name="鍒伴珮甯堝鎵�">
+    <sequenceFlow id="flowToSeriorTask" sourceRef="check" targetRef="approveTask" name="鍒伴珮甯堝鎵�">
       <conditionExpression xsi:type="tFormalExpression">${approve=='Y'}</conditionExpression>
     </sequenceFlow>
-    <exclusiveGateway id="seriorApproveGateway" name="楂樺笀鍒ゆ柇缃戝叧"/>
-    <sequenceFlow id="sid-c0b195e7-17e5-44bf-8115-8b7126cb3ab3" sourceRef="seriorApproveGateway" targetRef="approveEnd">
+    <sequenceFlow id="sid-c0b195e7-17e5-44bf-8115-8b7126cb3ab3" sourceRef="approveTask" targetRef="approveEnd">
       <conditionExpression xsi:type="tFormalExpression">${approve=='Y'}</conditionExpression>
     </sequenceFlow>
-    <sequenceFlow id="sid-03430665-d042-46b3-ab65-5ecde104ce8e" sourceRef="seriorApproveGateway" targetRef="check">
-      <conditionExpression xsi:type="tFormalExpression"/>
+    <serviceTask id="cureCheckServiceTask" flowable:exclusive="true" name="鍥哄寲绋嬪簭妫�鏌ユ湇鍔′换鍔�" flowable:expression="cureProgramCheckTask.execute(execution)"/>
+    <userTask id="sid-015ac835-1083-489a-9496-97dbb9432d09" name="妫�鏌ョ▼搴忔槸鍚﹀彲鐢�"/>
+    <sequenceFlow id="sid-46ccac64-2d48-4933-88a6-f2941ae131dd" sourceRef="teamLeaderTask" targetRef="programmingTask">
+      <conditionExpression xsi:type="tFormalExpression">hasCuredProgram==鈥楴'</conditionExpression>
     </sequenceFlow>
+    <sequenceFlow id="sid-af92e6ab-bc80-43ed-8b09-1d3ec54cc9e7" sourceRef="teamLeaderTask" targetRef="cureCheckServiceTask">
+      <conditionExpression xsi:type="tFormalExpression">hasCuredProgram==鈥榊'</conditionExpression>
+    </sequenceFlow>
+    <sequenceFlow id="sid-353381d5-35c7-47b0-bf5b-2bafe865ab5e" sourceRef="cureCheckServiceTask" targetRef="sid-015ac835-1083-489a-9496-97dbb9432d09"/>
+    <sequenceFlow id="sid-d144dad0-dc94-4a2b-96d6-9d8451b05ec1" sourceRef="sid-015ac835-1083-489a-9496-97dbb9432d09" targetRef="sid-82237034-5cb2-45c7-9a74-e2d5abb3b398" name="鍥哄寲绋嬪簭鍙敤">
+      <conditionExpression>approve=='Y'</conditionExpression>
+    </sequenceFlow>
+    <sequenceFlow id="sid-d4133565-1a45-4bb6-b603-9b9e4db1cdbb" sourceRef="approveTask" targetRef="check">
+      <conditionExpression>{approve=='N'}</conditionExpression>
+    </sequenceFlow>
+    <exclusiveGateway id="sid-82237034-5cb2-45c7-9a74-e2d5abb3b398" name="鍙敤绋嬪簭娴佽浆缃戝叧"/>
+    <sequenceFlow id="sid-b15dcf6a-a48c-4e01-b6bc-5c2a74ca817e" sourceRef="sid-82237034-5cb2-45c7-9a74-e2d5abb3b398" targetRef="check" name="宸ュ簭鐗堟涓�鑷村苟涓斿彲鐢�">
+      <conditionExpression xsi:type="tFormalExpression">processEditionEqual=='Y'</conditionExpression>
+    </sequenceFlow>
+    <sequenceFlow id="sid-6249886b-7c4a-4904-9b0b-cf743932be9f" sourceRef="sid-82237034-5cb2-45c7-9a74-e2d5abb3b398" targetRef="emptyUpgradeProcessEdtionServiceTask">
+      <conditionExpression xsi:type="tFormalExpression">processEditionEqual=='N'</conditionExpression>
+    </sequenceFlow>
+    <sequenceFlow id="sid-598e1dbe-85b3-40d0-89c8-bd2580ecbfc5" sourceRef="emptyUpgradeProcessEdtionServiceTask" targetRef="check"/>
+    <sequenceFlow id="sid-80b50f96-7601-4ba2-8c32-968923170d25" sourceRef="sid-015ac835-1083-489a-9496-97dbb9432d09" targetRef="programmingTask">
+      <conditionExpression>approve=='N'</conditionExpression>
+    </sequenceFlow>
+    <serviceTask id="emptyUpgradeProcessEdtionServiceTask" flowable:exclusive="true" name="绌哄崌鐗�" flowable:expression="programEmptyUpgradeProcessEdtionTask.execute(execution)"/>
   </process>
   <bpmndi:BPMNDiagram id="BPMNDiagram_dispatch">
     <bpmndi:BPMNPlane bpmnElement="dispatch" id="BPMNPlane_dispatch">
@@ -41,72 +58,91 @@
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="edge-5783eb04-78a8-4bde-b8bb-c12d28f07609" bpmnElement="sid-c1619263-d1ff-4106-9315-f9ab9a3bee71">
         <omgdi:waypoint x="-290.0" y="-92.5"/>
-        <omgdi:waypoint x="-240.0" y="-92.5"/>
+        <omgdi:waypoint x="-262.5" y="-92.50001"/>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="shape-720b1ec1-043e-4a8a-bc4d-c50cf01678d7" bpmnElement="teamLeaderTask">
-        <omgdc:Bounds x="-240.0" y="-125.0" width="70.0" height="65.0"/>
+        <omgdc:Bounds x="-262.5" y="-125.00001" width="70.0" height="65.0"/>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="shape-b1baea86-1882-4c5c-886f-44e3d9be3746" bpmnElement="programmingTask">
-        <omgdc:Bounds x="-115.0" y="-122.5" width="85.0" height="60.0"/>
+        <omgdc:Bounds x="-72.5" y="-137.5" width="85.0" height="60.0"/>
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="edge-0079d499-1c0d-4745-9886-40df39794833" bpmnElement="sid-ac678e85-9f7b-4e8d-903f-2591ea7721ab">
-        <omgdi:waypoint x="-170.0" y="-92.5"/>
-        <omgdi:waypoint x="-115.0" y="-92.5"/>
-      </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="shape-9237838e-5de2-4db7-8d46-3f4a69de7e6e" bpmnElement="check">
-        <omgdc:Bounds x="85.0" y="-120.0" width="60.0" height="55.0"/>
+        <omgdc:Bounds x="130.0" y="-135.0" width="60.0" height="55.0"/>
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="edge-72007fd8-6ed8-402f-8bbc-81bd6c856fa7" bpmnElement="sid-6c33a84d-d03e-47f6-87c1-8e676b25e572">
-        <omgdi:waypoint x="-30.0" y="-77.5"/>
-        <omgdi:waypoint x="-30.0" y="-15.0"/>
-      </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="shape-a42e90ff-9c82-4d5b-8f5b-0804754e89a6" bpmnElement="approveTask">
-        <omgdc:Bounds x="130.0" y="1.0" width="50.0" height="45.0"/>
+        <omgdc:Bounds x="220.0" y="-14.0" width="50.0" height="45.0"/>
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="edge-7fe1281a-3bbf-4308-90a5-cbf70aa019dd" bpmnElement="toCheckApproveGateway">
-        <omgdi:waypoint x="145.0" y="-92.5"/>
-        <omgdi:waypoint x="240.0" y="-30.0"/>
-      </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="shape-f14acaf6-9747-4d52-87a1-d4c5b8f3d166" bpmnElement="approveEnd">
         <omgdc:Bounds x="245.0" y="51.0" width="30.0" height="30.0"/>
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="edge-9cb8c108-2b94-4e39-b7ed-93ff0d86fe73" bpmnElement="sid-1a414739-a80f-4436-8d7a-e7b65fae8233">
-        <omgdi:waypoint x="130.0" y="34.75"/>
-        <omgdi:waypoint x="55.0" y="70.0"/>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="shape-b505d942-4475-416a-aec6-c02164e6ee05" bpmnElement="programGateway">
-        <omgdc:Bounds x="-50.0" y="-15.0" width="40.0" height="40.0"/>
-      </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="edge-6f05f47f-7804-4dd0-b6d2-e435b9efaa3c" bpmnElement="programingToCheck">
-        <omgdi:waypoint x="-10.0" y="5.0"/>
-        <omgdi:waypoint x="85.0" y="-78.75"/>
+        <omgdi:waypoint x="12.5" y="-92.5"/>
+        <omgdi:waypoint x="130.00002" y="-107.49999"/>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="edge-b38a8021-a54d-4671-aaf2-408bdbbbd374" bpmnElement="programingBackToLeader">
-        <omgdi:waypoint x="-50.0" y="5.0"/>
-        <omgdi:waypoint x="-170.0" y="-76.25"/>
+        <omgdi:waypoint x="-72.5" y="-92.5"/>
+        <omgdi:waypoint x="-192.5" y="-76.25001"/>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="shape-b113f604-a178-455b-9518-9f4953322948" bpmnElement="checkApproveGateway">
-        <omgdc:Bounds x="220.0" y="-30.0" width="40.0" height="40.0"/>
-      </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="edge-c2232174-4a73-4c39-ac85-fc3854f0f18c" bpmnElement="flowCheckToPrograming">
-        <omgdi:waypoint x="220.0" y="-10.0"/>
-        <omgdi:waypoint x="-30.0" y="-92.5"/>
+        <omgdi:waypoint x="130.0" y="-121.25"/>
+        <omgdi:waypoint x="12.5" y="-107.5"/>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="edge-d05b5f9f-9108-4a41-9e48-4db1e1b1e325" bpmnElement="flowToSeriorTask">
-        <omgdi:waypoint x="240.0" y="10.0"/>
-        <omgdi:waypoint x="180.0" y="12.25"/>
+        <omgdi:waypoint x="190.0" y="-93.75"/>
+        <omgdi:waypoint x="270.0" y="-2.75"/>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="shape-6be62567-0538-4a4f-b3ce-e819d7182666" bpmnElement="seriorApproveGateway">
-        <omgdc:Bounds x="35.0" y="70.0" width="40.0" height="40.0"/>
-      </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="edge-715efa53-6c03-407b-87ec-640f99c481a0" bpmnElement="sid-c0b195e7-17e5-44bf-8115-8b7126cb3ab3">
-        <omgdi:waypoint x="75.0" y="90.0"/>
-        <omgdi:waypoint x="245.0" y="73.5"/>
+        <omgdi:waypoint x="270.0" y="19.749996"/>
+        <omgdi:waypoint x="245.0" y="58.5"/>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="edge-782277fd-866f-44d5-9046-af7c34c4b85c" bpmnElement="sid-03430665-d042-46b3-ab65-5ecde104ce8e">
-        <omgdi:waypoint x="35.0" y="90.0"/>
-        <omgdi:waypoint x="100.0" y="-65.0"/>
+      <bpmndi:BPMNShape id="shape-8455618d-c1b9-4e6a-bca4-de965cc81633" bpmnElement="cureCheckServiceTask">
+        <omgdc:Bounds x="-275.0" y="37.500004" width="65.0" height="39.999996"/>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="shape-8f7064fc-4838-44cc-bf6d-ca15932a1e2e" bpmnElement="sid-015ac835-1083-489a-9496-97dbb9432d09">
+        <omgdc:Bounds x="-165.0" y="37.5" width="55.0" height="40.0"/>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="edge-0408fc3c-c133-40e3-9006-c315b12e9790" bpmnElement="sid-46ccac64-2d48-4933-88a6-f2941ae131dd">
+        <omgdi:waypoint x="-192.5" y="-92.500015"/>
+        <omgdi:waypoint x="-72.49999" y="-107.50001"/>
       </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="edge-d8883eca-269a-42cd-b2d4-134da6596afb" bpmnElement="sid-af92e6ab-bc80-43ed-8b09-1d3ec54cc9e7">
+        <omgdi:waypoint x="-227.5" y="-60.000008"/>
+        <omgdi:waypoint x="-242.5" y="37.500008"/>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="edge-44016aa6-bf48-4c73-8aaa-4cedf795d68b" bpmnElement="sid-353381d5-35c7-47b0-bf5b-2bafe865ab5e">
+        <omgdi:waypoint x="-210.0" y="57.5"/>
+        <omgdi:waypoint x="-165.0" y="57.5"/>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="edge-64e64024-1ffd-4cdf-be8f-4c5e4911a5bb" bpmnElement="sid-d144dad0-dc94-4a2b-96d6-9d8451b05ec1">
+        <omgdi:waypoint x="-110.0" y="47.5"/>
+        <omgdi:waypoint x="-60.0" y="0.0"/>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="edge-7a5135fe-5eb1-425c-b920-3e2b5bf18454" bpmnElement="sid-d4133565-1a45-4bb6-b603-9b9e4db1cdbb">
+        <omgdi:waypoint x="257.5" y="-14.0"/>
+        <omgdi:waypoint x="175.0" y="-80.0"/>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNShape id="shape-50f64465-52e3-4ba9-b36d-ebac41ab8b22" bpmnElement="sid-82237034-5cb2-45c7-9a74-e2d5abb3b398">
+        <omgdc:Bounds x="-60.0" y="-20.0" width="40.0" height="40.0"/>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="edge-4b95c6df-601d-48e8-a9a4-98499ae5ddf3" bpmnElement="sid-b15dcf6a-a48c-4e01-b6bc-5c2a74ca817e">
+        <omgdi:waypoint x="-20.0" y="0.0"/>
+        <omgdi:waypoint x="130.0" y="-93.75"/>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="edge-dbb7a807-e493-42fe-b229-b9f2ec25b5ee" bpmnElement="sid-6249886b-7c4a-4904-9b0b-cf743932be9f">
+        <omgdi:waypoint x="-40.0" y="20.0"/>
+        <omgdi:waypoint x="30.0" y="57.5"/>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="edge-092f7d8d-2467-4794-af93-fdc9ad503923" bpmnElement="sid-598e1dbe-85b3-40d0-89c8-bd2580ecbfc5">
+        <omgdi:waypoint x="86.25" y="30.0"/>
+        <omgdi:waypoint x="145.0" y="-79.99999"/>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="edge-223da197-47f2-44ef-847e-40d1fae1009b" bpmnElement="sid-80b50f96-7601-4ba2-8c32-968923170d25">
+        <omgdi:waypoint x="-123.75" y="37.5"/>
+        <omgdi:waypoint x="-51.25" y="-77.5"/>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNShape id="shape-0fe942f6-dea9-427c-aef6-0db9c3e3707b" bpmnElement="emptyUpgradeProcessEdtionServiceTask">
+        <omgdc:Bounds x="30.0" y="30.0" width="75.0" height="55.0"/>
+      </bpmndi:BPMNShape>
     </bpmndi:BPMNPlane>
   </bpmndi:BPMNDiagram>
 </definitions>
diff --git a/doc/sql/mdm/mdm.all.create.sql b/doc/sql/mdm/mdm.all.create.sql
index 47e0a57..ecc0c28 100644
--- a/doc/sql/mdm/mdm.all.create.sql
+++ b/doc/sql/mdm/mdm.all.create.sql
@@ -78,6 +78,7 @@
                                   UNIQUE KEY `uniqueCodeIndex` (`code`,`is_deleted`) USING BTREE,
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='绋嬪簭鑺傜偣鐩綍';
 
+DROP TABLE IF EXISTS `mdm_nc_program`;
 CREATE TABLE `mdm_nc_program` (
   `id` bigint NOT NULL,
   `tenant_id` varchar(6) DEFAULT NULL COMMENT '鎵�灞炵鎴�',
@@ -86,11 +87,13 @@
   `name` varchar(100) NOT NULL COMMENT '绋嬪簭鍚嶇О',
   `package_name` varchar(100) NOT NULL COMMENT '绋嬪簭鍖呭悕',
   `machine_code` bigint DEFAULT NULL COMMENT '璁惧缂栧彿/鏈哄簥缂栧彿',
+  `part_no` varchar(100) NOT NULL COMMENT '闆剁粍浠剁紪鍙�',
   `is_cured` int DEFAULT NULL COMMENT '鏄惁鍥哄寲,1鏄�;0鍚�',
   `expire_date` date DEFAULT NULL COMMENT '鍒版湡鏃堕棿,鏍规嵁鏈夋晥鏈熸椂闀胯绠楄�屾潵',
   `process_edition` varchar(40) DEFAULT NULL COMMENT '宸ュ簭鐗堟锛屽崌鐗堝氨鏄彉鏇存敼璇ュ瓧娈碉紝闇�瑕佷繚鐣欏巻鍙茶褰�',
   `is_last_edition` int NOT NULL COMMENT '鏄惁鏈�鏂扮増娆★紝1锛氭渶鏂扮増娆★紱0:鍘嗗彶鐗堟锛屼富瑕佸彇璇ュ瓧娈�=1鐨勬暟鎹紝0鏄巻鍙茬増娆�',
   `is_locked` int DEFAULT NULL COMMENT '閿佸畾鐘舵�侊紝1锛氶攣瀹氾紱0:姝e父',
+  `task_assign_time` datetime DEFAULT NULL COMMENT '绋嬪簭鐨勪换鍔′笅鍙戠殑鏃堕棿锛堢敤浜庢鏌ユ槸鍚︿负閲嶅鐨勪换鍔★級',
   `status` int DEFAULT NULL COMMENT '涓氬姟鐘舵��',
   `create_dept` bigint DEFAULT NULL COMMENT '鍒涘缓鍗曚綅',
   `is_deleted` int DEFAULT NULL,
@@ -101,6 +104,7 @@
   PRIMARY KEY (`id`) USING BTREE
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='鏁版帶绋嬪簭';
 
+DROP TABLE IF EXISTS `mdm_nc_program_file`;
 CREATE TABLE `mdm_nc_program_file` (
   `id` bigint NOT NULL,
   `tenant_id` varchar(6) DEFAULT NULL COMMENT '鎵�灞炵鎴�',
@@ -117,20 +121,19 @@
   PRIMARY KEY (`id`) USING BTREE
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='鏁版帶绋嬪簭鏂囦欢';
 
+DROP TABLE IF EXISTS `mdm_machine_back_file`;
+CREATE TABLE `mdm_machine_back_file` (
+    `id` bigint NOT NULL,
+    `filename` varchar(255) NOT NULL COMMENT '鏂囦欢鍚嶇О',
+    `machine_code` bigint DEFAULT NULL COMMENT '鎵�灞炴満搴婁唬鐮�',
+    `status` int DEFAULT NULL COMMENT '涓氬姟鐘舵��',
+    `create_dept` bigint DEFAULT NULL COMMENT '鍒涘缓鍗曚綅',
+    `is_deleted` int DEFAULT NULL,
+    `create_time` datetime DEFAULT NULL COMMENT '鍒涘缓鏃堕棿',
+    `create_user` bigint DEFAULT NULL COMMENT '鍒涘缓浜�',
+    `update_time` datetime DEFAULT NULL COMMENT '鏇存柊鏃堕棿',
+    `update_user` bigint DEFAULT NULL COMMENT '鏇存柊浜�',
+  PRIMARY KEY (`id`) USING BTREE
 
-CREATE TABLE `mdm_task_receive` (
-  `id` bigint NOT NULL,
-  `name` varchar(100) NOT NULL COMMENT '绋嬪簭鍚嶇О',
-  `machine_group_id` bigint DEFAULT NULL COMMENT '鎵�灞炴満搴婄粍ID',
-  `flow_task_id` bigint DEFAULT NULL COMMENT '浠诲姟ID锛屾帴鏀朵笅鍙戜换鍔℃椂纭畾鐨勪换鍔d锛岄潪娴佺▼绀轰緥id',
-  `is_cured` int DEFAULT NULL COMMENT '鏄惁鍥哄寲,1鏄�;0鍚�',
-  `status` int DEFAULT NULL COMMENT '涓氬姟鐘舵��',
-  `create_dept` bigint DEFAULT NULL COMMENT '鍒涘缓鍗曚綅',
-  `is_deleted` int DEFAULT NULL,
-  `create_time` datetime DEFAULT NULL COMMENT '鍒涘缓鏃堕棿',
-  `create_user` bigint DEFAULT NULL COMMENT '鍒涘缓浜�',
-  `update_time` datetime DEFAULT NULL COMMENT '鏇存柊鏃堕棿',
-  `update_user` bigint DEFAULT NULL COMMENT '鏇存柊浜�'
-  PRIMARY KEY (`id`) USING BTREE,
-  UNIQUE KEY `uniqueCodeIndex` (`name`,`is_deleted`) USING BTREE,
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='浠诲姟鎺ユ敹琛�';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='鏈哄簥鍥炰紶鏂囦欢';
+

--
Gitblit v1.9.3