From 741b33442af1b7c727fe305a641acaedf7b83d63 Mon Sep 17 00:00:00 2001
From: yangys <y_ys79@sina.com>
Date: 星期二, 10 六月 2025 20:35:41 +0800
Subject: [PATCH] 计划表account改为id

---
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/produceplan/service/ProducePlanService.java       |   58 ++++++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/AutoAssignUsersService.java                     |   22 ++
 doc/sql/flowable/flowable.mysql.all.upper.create.sql                                                                    |    6 
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/machine/vo/MachineSaveVO.java                     |    5 
 blade-service/blade-mdm/pom.xml                                                                                         |   10 +
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/produceplan/vo/ProducePlanViewVO.java             |   36 ++++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/produceplan/mapper/ProducePlanMapper.java         |   16 +
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/controller/DispatchController.java                       |   56 ++++++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/vo/TaskAssignVO.java                                     |   32 +++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/produceplan/controller/ProducePlanController.java |   75 ++++++++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/produceplan/vo/ProducePlanVO.java                 |   31 +++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/produceplan/entity/ProducePlan.java               |   32 +++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/StartDispatcher.java                            |   46 +++++
 blade-service/blade-mdm/src/main/resources/processesbpmn/dispatch.bpmn20.xml                                            |   58 ++++++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/produceplan/mapper/ProducePlanMapper.xml          |   35 +++
 15 files changed, 514 insertions(+), 4 deletions(-)

diff --git a/blade-service/blade-mdm/pom.xml b/blade-service/blade-mdm/pom.xml
index 4e3b6ed..01a05a1 100644
--- a/blade-service/blade-mdm/pom.xml
+++ b/blade-service/blade-mdm/pom.xml
@@ -42,6 +42,11 @@
             <groupId>org.springblade</groupId>
             <artifactId>blade-flow-api</artifactId>
         </dependency>
+        <!-- 宸ヤ綔娴� -->
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-starter-flowable</artifactId>
+        </dependency>
         <!--Oss-->
         <dependency>
             <groupId>org.springblade</groupId>
@@ -57,6 +62,11 @@
             <groupId>com.qiniu</groupId>
             <artifactId>qiniu-java-sdk</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-flow-api</artifactId>
+        </dependency>
+
         <!--<dependency>
             <groupId>org.springblade</groupId>
             <artifactId>blade-starter-transaction</artifactId>
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/machine/vo/MachineSaveVO.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/machine/vo/MachineSaveVO.java
index 2bd6cc0..647cf0d 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/machine/vo/MachineSaveVO.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/machine/vo/MachineSaveVO.java
@@ -1,5 +1,6 @@
 package org.springblade.mdm.basesetting.machine.vo;
 
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Getter;
 import lombok.Setter;
 import org.springblade.mdm.commons.vo.BaseVO;
@@ -43,8 +44,10 @@
 	 */
 	private String progSendDir;
 	/**
-	 * 绋嬪簭鍥炰紶鐩綍',
+	 * ',
 	 */
+	@Schema(description = "绋嬪簭鍥炰紶鐩綍")
 	private String progReceiveDir;
+	@Schema(description = "澶囨敞")
 	private String remark;
 }
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/produceplan/controller/ProducePlanController.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/produceplan/controller/ProducePlanController.java
new file mode 100644
index 0000000..8dd488d
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/produceplan/controller/ProducePlanController.java
@@ -0,0 +1,75 @@
+package org.springblade.mdm.basesetting.produceplan.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.extern.slf4j.Slf4j;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.mdm.basesetting.machine.MachineService;
+import org.springblade.mdm.basesetting.machine.vo.MachineQueryVO;
+import org.springblade.mdm.basesetting.machine.vo.MachineSaveVO;
+import org.springblade.mdm.basesetting.machine.vo.MachineVO;
+import org.springblade.mdm.basesetting.produceplan.service.ProducePlanService;
+import org.springblade.mdm.basesetting.produceplan.vo.ProducePlanVO;
+import org.springblade.mdm.basesetting.produceplan.vo.ProducePlanViewVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+@Slf4j
+@RestController
+@RequestMapping("/produceplan")
+@Tag(name = "涓诲埗璁″垝琛�", description = "涓诲埗璁″垝琛�")
+public class ProducePlanController {
+
+	@Autowired
+	private ProducePlanService service;
+
+	/**
+	 * 鏂板
+	 */
+	@PostMapping("/save")
+	@Operation(summary = "鏂板", description = "涓诲埗璁″垝琛�")
+	public R<Boolean> save(@RequestBody ProducePlanVO vo) {
+
+		service.savePlan(vo);
+		return R.<Boolean>status(true);
+	}
+
+	/**
+	 * 淇敼
+	 */
+	@Operation(summary = "淇敼", description = "涓诲埗璁″垝琛�")
+	@PostMapping("/update")
+	public R<Boolean> update(@RequestBody ProducePlanVO vo) {
+
+		return R.<Boolean>status(service.updatePlan(vo));
+	}
+
+	/**
+	 * 鍒犻櫎
+	 */
+	@Operation(summary = "鍒犻櫎", description = "鍒犻櫎")
+	@PostMapping("/remove")
+	public R<Void> remove(@RequestParam String ids) {
+		try {
+			return R.status(service.removeBatchByIds(Func.toLongList(ids)));
+		} catch (Exception e) {
+			log.error("鍒犻櫎寮傚父",e);
+			return R.fail(e.getMessage());
+		}
+	}
+
+	/**
+	 * 鍒嗛〉
+	 */
+	@Operation(summary = "鍒嗛〉鏌ヨ", description = "濮撳悕")
+	@GetMapping("/page")
+	public R<IPage<ProducePlanViewVO>> page(String name, Query query) {
+
+
+		IPage<ProducePlanViewVO> pages = service.pageQuery(name,query);
+		return R.data(pages);
+	}
+}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/produceplan/entity/ProducePlan.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/produceplan/entity/ProducePlan.java
new file mode 100644
index 0000000..93f5ba1
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/produceplan/entity/ProducePlan.java
@@ -0,0 +1,32 @@
+package org.springblade.mdm.basesetting.produceplan.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Getter;
+import lombok.Setter;
+import org.springblade.core.mp.base.BizEntity;
+
+/**
+ * 涓诲埗璁″垝琛�
+ */
+@Setter
+@Getter
+@TableName("mdm_produce_plan")
+public class ProducePlan extends BizEntity {
+	/**
+	 * 涓撲笟缁勯暱id
+	 */
+	private Long teamLeaderId;
+	/**
+	 * 缂栧埗宸ヨ壓鍛榠d
+	 */
+	private Long programmerId;
+	/**
+	 * 鏍″宸ヨ壓鍛榠d
+	 */
+	private Long checkerId;
+
+	/**
+	 * 楂樺笀id
+	 */
+	private Long seniorId;
+}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/produceplan/mapper/ProducePlanMapper.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/produceplan/mapper/ProducePlanMapper.java
new file mode 100644
index 0000000..df73c08
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/produceplan/mapper/ProducePlanMapper.java
@@ -0,0 +1,16 @@
+package org.springblade.mdm.basesetting.produceplan.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.produceplan.entity.ProducePlan;
+import org.springblade.mdm.basesetting.produceplan.vo.ProducePlanVO;
+import org.springblade.mdm.basesetting.produceplan.vo.ProducePlanViewVO;
+
+public interface ProducePlanMapper extends BladeMapper<ProducePlan> {
+
+	IPage<ProducePlanViewVO> pageQuery(@Param("page")IPage<ProducePlan> page,@Param("name")String name);
+	//pageMachine
+}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/produceplan/mapper/ProducePlanMapper.xml b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/produceplan/mapper/ProducePlanMapper.xml
new file mode 100644
index 0000000..47a7af4
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/produceplan/mapper/ProducePlanMapper.xml
@@ -0,0 +1,35 @@
+<?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.basesetting.produceplan.mapper.ProducePlanMapper">
+<!--
+    &lt;!&ndash; 閫氱敤鏌ヨ鏄犲皠缁撴灉 &ndash;&gt;
+    <resultMap id="BaseResultMap" type="org.springblade.mdm.basesetting.machine.entity.Machine">
+        <id column="id" property="id"/>
+        <result column="code" property="code"/>
+        <result column="name" property="name"/>
+
+        <result column="status" property="status"/>
+        <result column="createTime" property="create_time"/>
+        <result column="updateTime" property="update_time"/>
+        <result column="is_deleted" property="isDeleted"/>
+    </resultMap>-->
+    <select id="pageQuery" resultType="org.springblade.mdm.basesetting.produceplan.vo.ProducePlanViewVO">
+        select p.id,p.team_leader_id,p.programmer_id,p.checker_id,p.senior_id,l.name team_leader_name,pro.name  programmer_name,c.name checker_name,s.name seniorName
+        from mdm_produce_plan p join blade_user l on p.team_leader_id=l.id and l.is_deleted=0
+                                join blade_user pro on p.programmer_id=pro.id and pro.is_deleted=0
+                                join blade_user c on p.checker_id=c.id and c.is_deleted=0
+                                join blade_user s on p.senior_id=s.id and c.is_deleted=0
+        <if test="name != null and name != ''">
+            AND (l.account like concat('%',#{name,jdbcType=VARCHAR},'%') or l.name like
+            concat('%',#{name,jdbcType=VARCHAR},'%')
+            or pro.account like concat('%',#{name,jdbcType=VARCHAR},'%') or pro.name like
+            concat('%',#{name,jdbcType=VARCHAR},'%')
+            or c.account like concat('%',#{name,jdbcType=VARCHAR},'%') or c.name like
+            concat('%',#{name,jdbcType=VARCHAR},'%')
+            or s.account like concat('%',#{name,jdbcType=VARCHAR},'%') or s.name like
+            concat('%',#{name,jdbcType=VARCHAR},'%')
+            )
+        </if>
+    </select>
+
+</mapper>
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/produceplan/service/ProducePlanService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/produceplan/service/ProducePlanService.java
new file mode 100644
index 0000000..abf5fe7
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/produceplan/service/ProducePlanService.java
@@ -0,0 +1,58 @@
+package org.springblade.mdm.basesetting.produceplan.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.apache.commons.lang3.StringUtils;
+import org.springblade.core.mp.base.BizServiceImpl;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tool.utils.BeanUtil;
+import org.springblade.mdm.basesetting.machine.entity.Machine;
+import org.springblade.mdm.basesetting.machine.entity.MachineSpec;
+import org.springblade.mdm.basesetting.machine.mapper.MachineMapper;
+import org.springblade.mdm.basesetting.machine.vo.MachineQueryVO;
+import org.springblade.mdm.basesetting.machine.vo.MachineSaveVO;
+import org.springblade.mdm.basesetting.machine.vo.MachineVO;
+import org.springblade.mdm.basesetting.produceplan.entity.ProducePlan;
+import org.springblade.mdm.basesetting.produceplan.mapper.ProducePlanMapper;
+import org.springblade.mdm.basesetting.produceplan.vo.ProducePlanVO;
+import org.springblade.mdm.basesetting.produceplan.vo.ProducePlanViewVO;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+@Service
+public class ProducePlanService extends BizServiceImpl<ProducePlanMapper, ProducePlan> {
+
+	@Transactional
+	public void savePlan(ProducePlanVO vo){
+		//TODO
+		ProducePlan plan = new ProducePlan();
+		BeanUtil.copyProperties(vo, plan);
+		this.save(plan);
+	}
+
+	public boolean updatePlan(ProducePlanVO vo) {
+		ProducePlan plan = this.getById(vo.getId());
+
+		plan.setTeamLeaderId(vo.getTeamLeaderId());
+		plan.setProgrammerId(vo.getProgrammerId());
+		plan.setCheckerId(vo.getCheckerId());
+		plan.setSeniorId(vo.getSeniorId());
+		return this.updateById(plan);
+	}
+	/**
+     * 鏌ヨ鍒嗛〉
+	 * @param query 鏌ヨ鍙傛暟
+	 * @return 鍒嗛〉鏁版嵁
+	 */
+	public IPage<ProducePlanViewVO> pageQuery(String name, Query query) {
+
+		LambdaQueryWrapper<ProducePlan> queryWrapper = new LambdaQueryWrapper<>();
+
+	/*	queryWrapper.or(StringUtils.isNotEmpty(name),qw ->{
+			qw.like(ProducePlan::getTeamLeaderId,name).or().like(ProducePlan::getProgrammer,name).or().like(ProducePlan::getChecker,name);
+		});*/
+		//queryWrapper.eq(StringUtils.isNotEmpty(name), ProducePlan::getTeamLeader, query.getMachineGroupId());
+		return this.getBaseMapper().pageQuery(Condition.getPage(query),name);
+	}
+}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/produceplan/vo/ProducePlanVO.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/produceplan/vo/ProducePlanVO.java
new file mode 100644
index 0000000..28a6a53
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/produceplan/vo/ProducePlanVO.java
@@ -0,0 +1,31 @@
+package org.springblade.mdm.basesetting.produceplan.vo;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Getter;
+import lombok.Setter;
+import org.springblade.core.mp.base.BizEntity;
+import org.springblade.mdm.commons.vo.BaseVO;
+
+/**
+ * 涓诲埗璁″垝琛�
+ */
+@Setter
+@Getter
+public class ProducePlanVO extends BaseVO {
+	/**
+     * 涓撲笟缁勯暱id
+	 */
+	private Long teamLeaderId;
+	/**
+     * 缂栧埗宸ヨ壓鍛榠d
+	 */
+	private Long programmerId;
+	/**
+     * 鏍″宸ヨ壓鍛榠d
+	 */
+	private Long checkerId;
+	/**
+	 * 楂樺笀id
+	 */
+	private Long seniorId;
+}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/produceplan/vo/ProducePlanViewVO.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/produceplan/vo/ProducePlanViewVO.java
new file mode 100644
index 0000000..c61f6c1
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/produceplan/vo/ProducePlanViewVO.java
@@ -0,0 +1,36 @@
+package org.springblade.mdm.basesetting.produceplan.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+import org.springblade.mdm.commons.vo.BaseVO;
+
+/**
+ * 涓诲埗璁″垝琛�
+ */
+@Setter
+@Getter
+public class ProducePlanViewVO extends BaseVO {
+
+	@Schema(description = "涓撲笟缁勯暱id")
+	private Long teamLeaderId;
+	private String teamLeaderName;
+
+	@Schema(description = "缂栧埗宸ヨ壓鍛榠d")
+	private Long programmerId;
+
+	/**
+     * 鏍″宸ヨ壓鍛樿处鍙�
+	 */
+	@Schema(description = "鏍″宸ヨ壓鍛榠d")
+	private Long checkerId;
+	@Schema(description = "鏍″宸ヨ壓鍛樺鍚�")
+	private String checkerName;
+
+	/**
+	 * 楂樺笀id
+	 */
+	private String seniorId;
+	@Schema(description = "楂樺笀濮撳悕")
+	private String seniorName;
+}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/controller/DispatchController.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/controller/DispatchController.java
new file mode 100644
index 0000000..400cf3a
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/controller/DispatchController.java
@@ -0,0 +1,56 @@
+package org.springblade.mdm.flow.controller;
+
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.extern.slf4j.Slf4j;
+import org.flowable.engine.TaskService;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.support.Kv;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.core.tool.utils.StringUtil;
+import org.springblade.mdm.basesetting.machine.vo.MachineSaveVO;
+import org.springblade.mdm.flow.excution.StartDispatcher;
+import org.springblade.mdm.flow.vo.TaskAssignVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Map;
+
+@Slf4j
+@RestController
+@RequestMapping("/flow/dispatch")
+@Tag(name = "娲惧伐娴佺▼", description = "娲惧伐娴佺▼")
+public class DispatchController {
+
+	@Autowired
+	private StartDispatcher dispatcher;
+	@Autowired
+	private TaskService taskService;
+	/**
+	 * 鏂板
+	 */
+	@PostMapping("/start")
+	@Operation(summary = "鍚姩娲惧伐娴佺▼", description = "鍚姩娲惧伐娴佺▼")
+	public R<Boolean> save(@RequestBody TaskAssignVO startVO) {
+		dispatcher.start(startVO);
+		return R.<Boolean>status(true);
+	}
+
+	@PostMapping("completeTask")
+	public R<Void> completeTask(String taskId, String processInstanceId, String comment, @RequestBody Map<String, Object> variables) {
+		// 澧炲姞璇勮
+		if (StringUtil.isNoneBlank(processInstanceId, comment)) {
+			taskService.addComment(taskId, processInstanceId, comment);
+		}
+		// 闈炵┖鍒ゆ柇
+		if (Func.isEmpty(variables)) {
+			variables = Kv.create();
+		}
+		// 瀹屾垚浠诲姟
+		taskService.complete(taskId, variables);
+		return R.success("娴佺▼鎻愪氦鎴愬姛");
+	}
+}
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
new file mode 100644
index 0000000..281053d
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/AutoAssignUsersService.java
@@ -0,0 +1,22 @@
+package org.springblade.mdm.flow.excution;
+
+import org.springframework.stereotype.Service;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 鑾峰彇鑷姩鍖归厤鐨勪笓涓氱粍闀匡紝缂栧埗浜哄憳锛屾暀鐮斿憳锛屽拰楂樺笀
+ */
+@Service
+public class AutoAssignUsersService {
+
+	public Map<String,Object> autoAssignUsers(long productPlanId){
+		Map<String,Object> result = new HashMap<String,Object>();
+		result.put("teamLeader","zuzhang1");
+		result.put("programmer","gongyiyuan1");
+		result.put("checker","gongyiyuan2");
+		result.put("senior","gaoshi1");
+		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
new file mode 100644
index 0000000..8a7313a
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/StartDispatcher.java
@@ -0,0 +1,46 @@
+package org.springblade.mdm.flow.excution;
+
+import org.flowable.common.engine.impl.identity.Authentication;
+import org.flowable.engine.IdentityService;
+import org.flowable.engine.runtime.ProcessInstance;
+import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tool.api.R;
+import org.springblade.flow.core.feign.IFlowClient;
+import org.springblade.flow.core.pojo.entity.BladeFlow;
+import org.springblade.flow.core.utils.TaskUtil;
+import org.springblade.mdm.flow.vo.TaskAssignVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.flowable.engine.RuntimeService;
+import java.util.HashMap;
+import java.util.Map;
+
+@Service("startDispatcher")
+public class StartDispatcher  {
+	@Autowired
+	private IFlowClient flowClient;
+	@Autowired
+	private RuntimeService runtimeService;
+	@Autowired
+	private AutoAssignUsersService autoAssignUsersService;
+	@Autowired
+	private IdentityService identityService;
+	private static final String PROCESS_KEY = "dispatch";
+
+	public void start(TaskAssignVO startVO){
+
+		Map<String,Object> preAssignee = autoAssignUsersService.autoAssignUsers(startVO.getProducePlanId());
+		Map<String, Object> vars = new HashMap<>(preAssignee);
+
+		String businessKey = "0";//涓氬姟琛╧ey
+
+		identityService.setAuthenticatedUserId(String.valueOf(AuthUtil.getUserId()));//璁剧疆娴佺▼鍙戣捣浜�
+		ProcessInstance pinst = runtimeService.startProcessInstanceByKey(PROCESS_KEY,businessKey,vars);
+		//R<BladeFlow> flowR = flowClient.startProcessInstanceByKey(PROCESS_KEY,businessKey,vars);
+		//R<BladeFlow> flowR = flowClient.startProcessInstanceById(PROCESS_KEY,businessKey,vars);
+
+		int a=1;
+		a =2;
+		//log.info()
+	}
+}
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
new file mode 100644
index 0000000..2a7c0c1
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/vo/TaskAssignVO.java
@@ -0,0 +1,32 @@
+package org.springblade.mdm.flow.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+@Schema(description = "浠诲姟娲惧伐")
+public class TaskAssignVO {
+	@Schema(description = "宸ュ簭鍙�")
+	private String processNo;
+	@Schema(description = "宸ュ簭鍚嶇О")
+	private String processName;
+
+	@Schema(description = "宸ュ簭鐗堟")
+	private String processEdition;
+
+	@Schema(description = "宸ヨ壓鐗堟")
+	private String craftEdition;
+
+	@Schema(description = "璁惧缂栧彿")
+	private String machineCode;
+
+	@Schema(description = "璁惧鍨嬪彿")
+	private String machineMode;
+
+	@Schema(description = "璁″垝寮�宸ユ椂闂�")
+	private LocalDateTime planStartTime;
+	@Schema(description = "涓诲埗璁″垝琛↖D")
+	private long producePlanId;
+}
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
new file mode 100644
index 0000000..109f35d
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/resources/processesbpmn/dispatch.bpmn20.xml
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:flowable="http://flowable.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.flowable.org/processdef">
+  <process id="dispatch" name="浠诲姟娲惧伐" isExecutable="true">
+    <startEvent id="start" name="寮�濮�"/>
+    <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="check"/>
+    <userTask id="approveTask" name="楂樺笀瀹℃壒"/>
+    <sequenceFlow id="sid-2e73fc3f-6802-4a94-984c-e1b9a50f8489" sourceRef="check" targetRef="approveTask"/>
+    <endEvent id="approveEnd" name="瀹℃壒瀹屾垚"/>
+    <sequenceFlow id="sid-1a414739-a80f-4436-8d7a-e7b65fae8233" sourceRef="approveTask" targetRef="approveEnd"/>
+  </process>
+  <bpmndi:BPMNDiagram id="BPMNDiagram_dispatch">
+    <bpmndi:BPMNPlane bpmnElement="dispatch" id="BPMNPlane_dispatch">
+      <bpmndi:BPMNShape id="shape-bb4d1b10-12af-4d57-851f-308a54aca93c" bpmnElement="start">
+        <omgdc:Bounds x="-320.0" y="-100.0" width="30.0" height="30.0"/>
+      </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="-185.0" y="-75.0"/>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNShape id="shape-720b1ec1-043e-4a8a-bc4d-c50cf01678d7" bpmnElement="teamLeaderTask">
+        <omgdc:Bounds x="-185.0" y="-115.0" width="100.0" height="80.0"/>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="shape-b1baea86-1882-4c5c-886f-44e3d9be3746" bpmnElement="programmingTask">
+        <omgdc:Bounds x="-20.0" y="-115.0" width="100.0" height="80.0"/>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="edge-0079d499-1c0d-4745-9886-40df39794833" bpmnElement="sid-ac678e85-9f7b-4e8d-903f-2591ea7721ab">
+        <omgdi:waypoint x="-85.0" y="-75.0"/>
+        <omgdi:waypoint x="-20.0" y="-75.0"/>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNShape id="shape-9237838e-5de2-4db7-8d46-3f4a69de7e6e" bpmnElement="check">
+        <omgdc:Bounds x="105.0" y="-115.0" width="100.0" height="80.0"/>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="edge-72007fd8-6ed8-402f-8bbc-81bd6c856fa7" bpmnElement="sid-6c33a84d-d03e-47f6-87c1-8e676b25e572">
+        <omgdi:waypoint x="80.0" y="-55.0"/>
+        <omgdi:waypoint x="105.0" y="-95.0"/>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNShape id="shape-a42e90ff-9c82-4d5b-8f5b-0804754e89a6" bpmnElement="approveTask">
+        <omgdc:Bounds x="15.0" y="16.0" width="100.0" height="80.0"/>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="edge-7fe1281a-3bbf-4308-90a5-cbf70aa019dd" bpmnElement="sid-2e73fc3f-6802-4a94-984c-e1b9a50f8489">
+        <omgdi:waypoint x="130.0" y="-35.0"/>
+        <omgdi:waypoint x="90.0" y="16.0"/>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNShape id="shape-f14acaf6-9747-4d52-87a1-d4c5b8f3d166" bpmnElement="approveEnd">
+        <omgdc:Bounds x="205.0" y="41.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="115.0" y="56.0"/>
+        <omgdi:waypoint x="205.0" y="56.0"/>
+      </bpmndi:BPMNEdge>
+    </bpmndi:BPMNPlane>
+  </bpmndi:BPMNDiagram>
+</definitions>
diff --git a/doc/sql/flowable/flowable.mysql.all.upper.create.sql b/doc/sql/flowable/flowable.mysql.all.upper.create.sql
index 957beb0..8b8cb05 100644
--- a/doc/sql/flowable/flowable.mysql.all.upper.create.sql
+++ b/doc/sql/flowable/flowable.mysql.all.upper.create.sql
@@ -1613,10 +1613,10 @@
 COMMIT;
 
 -- ----------------------------
--- Table structure for act_re_model
+-- Table structure for ACT_RE_MODEL
 -- ----------------------------
 DROP TABLE IF EXISTS `ACT_RE_MODEL`;
-CREATE TABLE `act_re_model`  (
+CREATE TABLE `ACT_RE_MODEL`  (
   `ID_` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL,
   `REV_` int NULL DEFAULT NULL,
   `NAME_` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL,
@@ -1640,7 +1640,7 @@
 ) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_bin;
 
 -- ----------------------------
--- Records of act_re_model
+-- Records of ACT_RE_MODEL
 -- ----------------------------
 BEGIN;
 COMMIT;

--
Gitblit v1.9.3