From 413ef95ca08807adb5d01de11ecc3ab8d11bb9a9 Mon Sep 17 00:00:00 2001
From: wang1 <844966816@qq.com>
Date: 星期三, 14 六月 2023 14:58:56 +0800
Subject: [PATCH] 模板流程定义、模板阶段定义代码提交

---
 Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/entity/FlowTaskUserC.java                        |   43 ++
 Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/mapper/ProcessStageAttrMapper.java               |   29 +
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/enumpck/NewAppConstantEnum.java      |    1 
 Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/entity/ProcessStageAttr.java                     |   51 ++
 Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/service/ProcessTemplateService.java              |   56 ++
 Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/controller/FlowTaskUserController.java           |   56 ++
 Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/service/impl/FlowTaskUserServiceImpl.java        |  146 ++++++
 Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/service/impl/ProcessStageAttrServiceImpl.java    |   81 +++
 Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/business/controller/WorkController.java                 |   10 
 Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/mapper/FlowMapper.java                           |    8 
 Source/UBCS/ubcs-ops/ubcs-flow/src/main/resources/mapper/FlowMapper.xml                                                |    4 
 Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/controller/ProcessTSController.java              |  112 +++++
 Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/entity/ProcessTemplate.java                      |   48 ++
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/enumpck/ProcessTemplateTypeEnum.java |  134 ++++++
 Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/service/ProcessStageAttrService.java             |   39 +
 Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/service/FlowEngineService.java                   |   15 
 Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/entity/FlowTaskUser.java                         |   51 ++
 Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/service/impl/ProcessTemplateServiceImpl.java     |  107 +++++
 Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/controller/FlowProcessController.java            |   21 +
 Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/controller/FlowModelController.java              |    9 
 Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/service/impl/UserServiceImpl.java            |    2 
 Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/mapper/ProcessTemplateMapper.java                |   30 +
 Source/UBCS/ubcs-ops-api/ubcs-flow-api/pom.xml                                                                         |   13 
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/UserPwdstrategyController.java       |    1 
 Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/business/service/impl/FlowBusinessServiceImpl.java      |    1 
 Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/service/impl/FlowEngineServiceImpl.java          |   71 +++
 Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/service/FlowTaskUserService.java                 |   54 ++
 Source/UBCS/ubcs-service-api/ubcs-workflow-api/src/main/java/com/vci/ubcs/code/constant/FlowConstant.java              |   32 +
 Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/mapper/FlowTaskUserMapper.java                   |   34 +
 29 files changed, 1,255 insertions(+), 4 deletions(-)

diff --git a/Source/UBCS/ubcs-ops-api/ubcs-flow-api/pom.xml b/Source/UBCS/ubcs-ops-api/ubcs-flow-api/pom.xml
index 577f1eb..20ac791 100644
--- a/Source/UBCS/ubcs-ops-api/ubcs-flow-api/pom.xml
+++ b/Source/UBCS/ubcs-ops-api/ubcs-flow-api/pom.xml
@@ -14,6 +14,19 @@
     <version>${bladex.project.version}</version>
     <packaging>jar</packaging>
 
+    <dependencies>
+        <dependency>
+            <groupId>com.vci.ubcs</groupId>
+            <artifactId>ubcs-util-api</artifactId>
+            <version>3.0.1.RELEASE</version>
+        </dependency>
+        <dependency>
+            <groupId>com.vci.ubcs</groupId>
+            <artifactId>ubcs-user-api</artifactId>
+            <version>3.0.1.RELEASE</version>
+            <scope>compile</scope>
+        </dependency>
+    </dependencies>
 
 
 </project>
diff --git a/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/business/controller/WorkController.java b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/business/controller/WorkController.java
index a3d1c0a..69b118f 100644
--- a/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/business/controller/WorkController.java
+++ b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/business/controller/WorkController.java
@@ -27,13 +27,23 @@
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
 import lombok.AllArgsConstructor;
+import org.flowable.engine.RepositoryService;
+import org.flowable.engine.RuntimeService;
 import org.flowable.engine.TaskService;
+import org.flowable.engine.repository.Deployment;
+import org.flowable.engine.runtime.ProcessInstance;
+import org.flowable.task.api.Task;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.tenant.annotation.NonDS;
 import org.springblade.core.tool.api.R;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
 /**
  * 娴佺▼浜嬪姟閫氱敤鎺ュ彛
  *
diff --git a/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/business/service/impl/FlowBusinessServiceImpl.java b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/business/service/impl/FlowBusinessServiceImpl.java
index c78baca..a84b86b 100644
--- a/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/business/service/impl/FlowBusinessServiceImpl.java
+++ b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/business/service/impl/FlowBusinessServiceImpl.java
@@ -263,6 +263,7 @@
 			variables = Kv.create();
 		}
 		variables.put(ProcessConstant.PASS_KEY, flow.isPass());
+		variables.put("yn","y");
 		// 瀹屾垚浠诲姟
 		taskService.complete(taskId, variables);
 		return true;
diff --git a/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/controller/FlowModelController.java b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/controller/FlowModelController.java
index 5e3e781..b974022 100644
--- a/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/controller/FlowModelController.java
+++ b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/controller/FlowModelController.java
@@ -18,15 +18,20 @@
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import com.vci.ubcs.flow.core.utils.TaskUtil;
 import com.vci.ubcs.flow.engine.entity.FlowModel;
+import com.vci.ubcs.flow.engine.entity.FlowTaskUser;
 import com.vci.ubcs.flow.engine.service.FlowEngineService;
+import com.vci.ubcs.flow.engine.service.FlowTaskUserService;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
 import lombok.AllArgsConstructor;
+import org.springblade.core.launch.constant.FlowConstant;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
+import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tenant.annotation.NonDS;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.Func;
@@ -44,7 +49,7 @@
 @RestController
 @RequestMapping("model")
 @AllArgsConstructor
-//@PreAuth(RoleConstant.HAS_ROLE_ADMINISTRATOR)
+//@PreAuth(RoleConstant.HAS_ROLE_ADMINISTRATOR)t
 public class FlowModelController {
 
 	private final FlowEngineService flowEngineService;
@@ -63,6 +68,8 @@
 		IPage<FlowModel> pages = flowEngineService.page(Condition.getPage(query), Condition.getQueryWrapper(flow, FlowModel.class)
 			.select("id,model_key modelKey,name,description,version,created,last_updated lastUpdated")
 			.orderByDesc("last_updated"));
+
+		flowEngineService.getNodeByFlowableKey("process_t");
 		return R.data(pages);
 	}
 
diff --git a/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/controller/FlowProcessController.java b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/controller/FlowProcessController.java
index a9329c2..2b42915 100644
--- a/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/controller/FlowProcessController.java
+++ b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/controller/FlowProcessController.java
@@ -20,6 +20,12 @@
 import com.vci.ubcs.flow.engine.service.FlowEngineService;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.flowable.bpmn.model.FlowElement;
+import org.flowable.bpmn.model.SubProcess;
+import org.flowable.bpmn.model.UserTask;
+import org.flowable.engine.*;
 import org.springblade.core.tenant.annotation.NonDS;
 import org.springblade.core.tool.api.R;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -28,7 +34,10 @@
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.Collection;
 import java.util.List;
+import java.util.Map;
 
 /**
  * 娴佺▼閫氱敤鎺у埗鍣�
@@ -44,6 +53,12 @@
 
 	private static final String IMAGE_NAME = "image";
 	private final FlowEngineService flowEngineService;
+
+	private final RepositoryService repositoryService;
+	private final RuntimeService runtimeService;
+	private final HistoryService historyService;
+	private final TaskService taskService;
+	private final ProcessEngine processEngine;
 
 	/**
 	 * 鑾峰彇娴佽浆鍘嗗彶鍒楄〃
@@ -65,6 +80,12 @@
 	 */
 	@GetMapping(value = "model-view")
 	public R modelView(String processDefinitionId, String processInstanceId) {
+
+		//test
+		//List<Map<String,String>> xml = flowEngineService.getXMLByFlowableName("process_t");
+		flowEngineService.updateAssignee(null);
+		//test end
+
 		return R.data(flowEngineService.modelView(processDefinitionId, processInstanceId));
 	}
 
diff --git a/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/controller/FlowTaskUserController.java b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/controller/FlowTaskUserController.java
new file mode 100644
index 0000000..8aaba6c
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/controller/FlowTaskUserController.java
@@ -0,0 +1,56 @@
+package com.vci.ubcs.flow.engine.controller;
+
+import com.vci.ubcs.flow.engine.entity.FlowTaskUserC;
+import com.vci.ubcs.flow.engine.service.FlowEngineService;
+import com.vci.ubcs.flow.engine.service.FlowTaskUserService;
+import lombok.AllArgsConstructor;
+import org.springblade.core.tenant.annotation.NonDS;
+import org.springblade.core.tool.api.R;
+import org.springframework.web.bind.annotation.*;
+
+
+/**
+ * 娴佺▼task瀹℃壒鎺у埗
+ *
+ * @author wang1
+ */
+@NonDS
+@RestController
+@RequestMapping("taskUser")
+@AllArgsConstructor
+public class FlowTaskUserController {
+
+	private final FlowTaskUserService taskUserService;
+
+	/**
+	 * 娴佺▼task瀹℃壒浜哄憳鍒楄〃
+	 * @return
+	 */
+	@GetMapping("list")
+	public R<FlowTaskUserC> list() {
+		return R.data(taskUserService.getUser());
+	}
+
+	/**
+	 * 鏂板銆佷慨鏀逛换鍔″鐞嗕汉鍛�
+	 * @param flowTaskUserC
+	 * @return
+	 */
+	@PostMapping("su")
+	public R<String> saveUser(@RequestBody FlowTaskUserC flowTaskUserC) {
+		taskUserService.saveOrUpdateUser(flowTaskUserC);
+		return R.success("淇濆瓨鎴愬姛");
+	}
+
+	/**
+	 * 鍒犻櫎浠诲姟澶勭悊浜哄憳
+	 * @param flowTaskUserC
+	 * @return
+	 */
+	@PostMapping("du")
+	public R<String> deleteUser(@RequestBody FlowTaskUserC flowTaskUserC) {
+		taskUserService.deleteUser(flowTaskUserC.getName());
+		return R.success("鍒犻櫎鎴愬姛");
+	}
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/controller/ProcessTSController.java b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/controller/ProcessTSController.java
new file mode 100644
index 0000000..4bf34b9
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/controller/ProcessTSController.java
@@ -0,0 +1,112 @@
+package com.vci.ubcs.flow.engine.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.vci.ubcs.flow.engine.entity.FlowTaskUser;
+import com.vci.ubcs.flow.engine.entity.FlowTaskUserC;
+import com.vci.ubcs.flow.engine.entity.ProcessStageAttr;
+import com.vci.ubcs.flow.engine.entity.ProcessTemplate;
+import com.vci.ubcs.flow.engine.service.FlowEngineService;
+import com.vci.ubcs.flow.engine.service.ProcessStageAttrService;
+import com.vci.ubcs.flow.engine.service.ProcessTemplateService;
+import lombok.AllArgsConstructor;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tenant.annotation.NonDS;
+import org.springblade.core.tool.api.R;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ *娴佺▼妯℃澘銆佹祦绋嬮樁娈垫帶鍒� processTemplate processStage
+ *
+ * @author wang1
+ */
+@NonDS
+@RestController
+@RequestMapping("processTS")
+@AllArgsConstructor
+public class ProcessTSController {
+
+	private final FlowEngineService flowEngineService;
+	private final ProcessTemplateService processTemplateService;
+	private final ProcessStageAttrService processStageAttrService;
+
+	/**
+	 * 娴佺▼妯℃澘鍒嗛〉
+	 */
+	@GetMapping("/tlist")
+	public R<IPage<ProcessTemplate>> tlist(@RequestParam Map<String, Object> flow, Query query) {
+		IPage<ProcessTemplate> pages = processTemplateService.page(Condition.getPage(query), Condition.getQueryWrapper(flow, ProcessTemplate.class)
+			.select("id,model_key modelKey,model_name modelName,button_Type_Key buttonTypeKey,button_Type_value buttonTypeValue")
+			.orderByDesc("last_updated"));
+		return R.data(pages);
+	}
+
+	/**
+	 * 娴佺▼妯℃澘鐢ㄩ�斿睘鎬�
+	 * @return
+	 */
+	@PostMapping("tt")
+	public R<List<Map<String,String>>> processTemplateType() {
+		return R.data(processTemplateService.processTemplateType());
+	}
+
+	/**
+	 * 娴佺▼妯℃澘鏂板銆佷慨鏀�
+	 * @param processTemplate
+	 * @return
+	 */
+	@PostMapping("tsou")
+	public R<ProcessTemplate> processTemplateSaveOrUpdate(@RequestBody ProcessTemplate processTemplate) {
+		processTemplateService.saveOrUpdateUser(processTemplate);
+		return R.success("淇濆瓨鎴愬姛");
+	}
+
+	/**
+	 * 娴佺▼妯℃澘鍒犻櫎
+	 * @param processTemplate
+	 * @return
+	 */
+	@DeleteMapping("dt")
+	public R<ProcessTemplate> deleteProcessTemplate(ProcessTemplate processTemplate) {
+		processTemplateService.deleteProcessTemplate(processTemplate.getId());
+		return R.success("鍒犻櫎鎴愬姛");
+	}
+
+	/**
+	 * 娴佺▼闃舵锛岃繖涓祦绋嬬殑鍚勪釜鑺傜偣
+	 */
+	@GetMapping("/sslist")
+	public R<List<Map<String,String>>> sslist(@RequestParam String modelKey) {
+		return R.data(flowEngineService.getNodeByFlowableKey(modelKey));
+	}
+
+	/**
+	 * 娴佺▼闃舵锛岃繖涓祦绋�,杩欎釜鑺傜偣锛岀粦瀹氱殑灞炴��
+	 */
+	@GetMapping("/ssslist")
+	public R<List<ProcessStageAttr>> ssslist(@RequestParam String templateId,@RequestParam String modelKey,@RequestParam String taskId) {
+		Map<String, Object> m = new HashMap<>();
+		m.put("template_id", templateId);
+		m.put("task_id", taskId);
+		m.put("model_key", modelKey);
+		QueryWrapper q = Condition.getQueryWrapper(m, ProcessStageAttr.class)
+			.select("attr_id attrId,attr_name attrName,attr_group attrGroup");
+		return R.data(processStageAttrService.list(q));
+	}
+
+	/**
+	 * 妯℃澘闃舵灞炴�ф柊澧炪�佷慨鏀�
+	 * @param flowTaskUserC
+	 * @return
+	 */
+	@PostMapping("sasou")
+	public R<ProcessTemplate> stageAttributeSaveOrUpdate(@RequestBody FlowTaskUserC flowTaskUserC) {
+		processStageAttrService.saveOrUpdateUser(flowTaskUserC);
+		return R.success("淇濆瓨鎴愬姛");
+	}
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/entity/FlowTaskUser.java b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/entity/FlowTaskUser.java
new file mode 100644
index 0000000..dde1fb2
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/entity/FlowTaskUser.java
@@ -0,0 +1,51 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.flow.engine.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.vci.ubcs.flow.core.utils.TaskUtil;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 娴佺▼姣忎竴涓妭鐐瑰鏍镐汉
+ *
+ * @author wang1
+ */
+@Data
+@TableName("ACT_DE_TASK_USER")
+public class FlowTaskUser implements Serializable {
+
+	private static final long serialVersionUID = 1L;
+
+	private String id;
+	private String name;//淇濆瓨鐨勮繖涓敹钘忓悕绉�
+	private String modelKey;
+	private String classifyId;
+	private String templateId;
+	private String taskId;//娴佺▼taskid
+	private String taskName;
+	private String userId;
+	private String userName;
+	private String description;
+	private Date created;
+	private Date lastUpdated;
+	private String createdBy;
+	private String lastUpdatedBy;
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/entity/FlowTaskUserC.java b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/entity/FlowTaskUserC.java
new file mode 100644
index 0000000..9e862db
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/entity/FlowTaskUserC.java
@@ -0,0 +1,43 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.flow.engine.entity;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 娴佺▼鑺傜偣瀹℃牳浜烘敹钘�
+ *
+ * @author wang1
+ */
+@Data
+public class FlowTaskUserC implements Serializable {
+
+	private static final long serialVersionUID = 1L;
+
+	private String createdBy;
+	private String name;//淇濆瓨鐨勮繖涓敹钘忓悕绉�
+	private String modelKey;
+	private String classifyId;
+	private String templateId;
+	private String taskId;//闃舵id锛屽氨鏄祦绋媡askid
+	private String taskName;//闃舵鍚嶇О
+	private List<FlowTaskUser> flowTaskUsers;//姣忎釜鑺傜偣鏀惰棌浜�
+	private List<ProcessStageAttr> processStageAttr;//娴佺▼闃舵淇濆瓨鐨勫睘鎬�
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/entity/ProcessStageAttr.java b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/entity/ProcessStageAttr.java
new file mode 100644
index 0000000..04fa1e8
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/entity/ProcessStageAttr.java
@@ -0,0 +1,51 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.flow.engine.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 娴佺▼闃舵
+ *
+ * @author wang1
+ */
+@Data
+@TableName("ACT_DE_PROCESS_STAGE_ATTR")
+public class ProcessStageAttr implements Serializable {
+
+	private static final long serialVersionUID = 1L;
+
+	private String id;
+	private String modelKey;
+	private String classifyId;
+	private String templateId;
+	private String taskId;//闃舵id锛屽氨鏄祦绋媡askid
+	private String taskName;//闃舵鍚嶇О
+	private String attrOid;//灞炴�ц繖鏉℃暟鎹殑id
+	private String attrId;//灞炴�ц繖鏉℃暟鎹殑oid
+	private String attrName;//灞炴�т腑鏂囧悕绉�
+	private String attrGroup;//灞炴�у垎缁�
+	private String description;
+	private Date created;
+	private Date lastUpdated;
+	private String createdBy;
+	private String lastUpdatedBy;
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/entity/ProcessTemplate.java b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/entity/ProcessTemplate.java
new file mode 100644
index 0000000..1b69fd8
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/entity/ProcessTemplate.java
@@ -0,0 +1,48 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.flow.engine.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 娴佺▼妯℃澘
+ *
+ * @author wang1
+ */
+@Data
+@TableName("ACT_DE_PROCESS_TEMPLATE")
+public class ProcessTemplate implements Serializable {
+
+	private static final long serialVersionUID = 1L;
+
+	private String id;
+	private String templateId;//褰撳墠妯℃澘id
+	private String modelKey;//娴佺▼妯″瀷key,閮ㄧ讲key
+	private String modelName;//閮ㄧ讲娴佺▼鍚嶇О
+	private String buttonTypeKey;//搴旂敤鎸夐挳,ProcessTemplateTypeEnum鐨刱ey
+	private String buttonTypeValue;//搴旂敤鎸夐挳,ProcessTemplateTypeEnum鐨剉alue
+	private String description;
+	private Date created;
+	private Date lastUpdated;
+	private String createdBy;
+	private String lastUpdatedBy;
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/mapper/FlowMapper.java b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/mapper/FlowMapper.java
index 8ac1cc3..8df4c68 100644
--- a/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/mapper/FlowMapper.java
+++ b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/mapper/FlowMapper.java
@@ -19,6 +19,7 @@
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.vci.ubcs.flow.engine.entity.FlowModel;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
@@ -43,4 +44,11 @@
 	 * @return
 	 */
 	List<FlowModel> findByParentModelId(String parentModelId);
+
+	/**
+	 * 淇敼澶勭悊浜�
+	 * @param u
+	 * @return
+	 */
+	void updateAssignee(@Param(value="u") String  u);
 }
diff --git a/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/mapper/FlowTaskUserMapper.java b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/mapper/FlowTaskUserMapper.java
new file mode 100644
index 0000000..9ed1e12
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/mapper/FlowTaskUserMapper.java
@@ -0,0 +1,34 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.flow.engine.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.vci.ubcs.flow.engine.entity.FlowModel;
+import com.vci.ubcs.flow.engine.entity.FlowTaskUser;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 娴佺▼闃舵瀹℃牳浜哄憳
+ *
+ * @author wang1
+ */
+public interface FlowTaskUserMapper extends BaseMapper<FlowTaskUser> {
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/mapper/ProcessStageAttrMapper.java b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/mapper/ProcessStageAttrMapper.java
new file mode 100644
index 0000000..f3cf847
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/mapper/ProcessStageAttrMapper.java
@@ -0,0 +1,29 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.flow.engine.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.vci.ubcs.flow.engine.entity.ProcessStageAttr;
+
+/**
+ * 娴佺▼闃舵
+ *
+ * @author wang1
+ */
+public interface ProcessStageAttrMapper extends BaseMapper<ProcessStageAttr> {
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/mapper/ProcessTemplateMapper.java b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/mapper/ProcessTemplateMapper.java
new file mode 100644
index 0000000..574fd9d
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/mapper/ProcessTemplateMapper.java
@@ -0,0 +1,30 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.flow.engine.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.vci.ubcs.flow.engine.entity.FlowTaskUser;
+import com.vci.ubcs.flow.engine.entity.ProcessTemplate;
+
+/**
+ * 娴佺▼妯℃澘
+ *
+ * @author wang1
+ */
+public interface ProcessTemplateMapper extends BaseMapper<ProcessTemplate> {
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/service/FlowEngineService.java b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/service/FlowEngineService.java
index 2955619..3c12e69 100644
--- a/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/service/FlowEngineService.java
+++ b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/service/FlowEngineService.java
@@ -23,6 +23,7 @@
 import com.vci.ubcs.flow.engine.entity.FlowModel;
 import com.vci.ubcs.flow.engine.entity.FlowProcess;
 import org.springframework.web.multipart.MultipartFile;
+import org.w3c.dom.Document;
 
 import javax.servlet.http.HttpServletResponse;
 import java.util.List;
@@ -163,4 +164,18 @@
 	 * @return
 	 */
 	byte[] getModelEditorXML(FlowModel model);
+
+	/**
+	 * 鏍规嵁娴佺▼妯″瀷key鑾峰彇XML涓妭鐐归厤缃殑澶勭悊浜�,璇诲彇鑺傜偣鍚嶇О鍜岄厤缃殑鍊硷紝娴佺▼妯″瀷key宸茬粡闄愬埗涓嶉噸澶�
+	 *
+	 * @param key
+	 * @return
+	 */
+	List<Map<String,String>> getNodeByFlowableKey(String key);
+
+	/**
+	 * 淇敼娴佺▼澶勭悊浜�
+	 */
+	void updateAssignee(String u);
+
 }
diff --git a/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/service/FlowTaskUserService.java b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/service/FlowTaskUserService.java
new file mode 100644
index 0000000..a7ba9b4
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/service/FlowTaskUserService.java
@@ -0,0 +1,54 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.flow.engine.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.vci.ubcs.flow.core.entity.BladeFlow;
+import com.vci.ubcs.flow.engine.entity.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * FlowService
+ *
+ * @author wang1
+ */
+public interface FlowTaskUserService extends IService<FlowTaskUser> {
+
+	/**
+	 * 鏌ヨ褰撳墠鐧婚檰浜哄杩欎釜娴佺▼鐨則askUser
+	 * @return
+	 */
+	FlowTaskUserC getUser();
+
+	/**
+	 * 鏂板/淇敼娴佺▼鑺傜偣瀹℃牳浜洪厤缃�佸苟涓斾慨鏀规祦绋媥ml閮ㄧ讲鏂囦欢
+	 * @param flowTaskUserC
+	 * @return
+	 */
+	void saveOrUpdateUser(FlowTaskUserC flowTaskUserC);
+
+	/**
+	 * 鍒犻櫎娴佺▼瀹℃牳浜哄憳
+	 * @param name
+	 */
+	void deleteUser(String name);
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/service/ProcessStageAttrService.java b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/service/ProcessStageAttrService.java
new file mode 100644
index 0000000..703a55f
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/service/ProcessStageAttrService.java
@@ -0,0 +1,39 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.flow.engine.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.vci.ubcs.flow.engine.entity.FlowTaskUserC;
+import com.vci.ubcs.flow.engine.entity.ProcessStageAttr;
+
+import java.util.List;
+
+/**
+ * 娴佺▼闃舵鏈嶅姟
+ *
+ * @author wang1
+ */
+public interface ProcessStageAttrService extends IService<ProcessStageAttr> {
+
+	/**
+	 * 鏂板/淇敼娴佺▼闃舵
+	 * @param flowTaskUserC
+	 * @return
+	 */
+	void saveOrUpdateUser(FlowTaskUserC flowTaskUserC);
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/service/ProcessTemplateService.java b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/service/ProcessTemplateService.java
new file mode 100644
index 0000000..119f6ac
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/service/ProcessTemplateService.java
@@ -0,0 +1,56 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.flow.engine.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.vci.ubcs.flow.engine.entity.FlowTaskUser;
+import com.vci.ubcs.flow.engine.entity.FlowTaskUserC;
+import com.vci.ubcs.flow.engine.entity.ProcessTemplate;
+import com.vci.ubcs.starter.web.enumpck.ProcessTemplateTypeEnum;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 娴佺▼妯℃澘鏈嶅姟
+ *
+ * @author wang1
+ */
+public interface ProcessTemplateService extends IService<ProcessTemplate> {
+
+	/**
+	 * 鏂板/淇敼娴佺▼妯℃澘
+	 * @param processTemplate
+	 * @return
+	 */
+	void saveOrUpdateUser(ProcessTemplate processTemplate);
+
+	/**
+	 * 鍒犻櫎娴佺▼妯℃澘
+	 * @param id
+	 * @return
+	 */
+	void deleteProcessTemplate(String id);
+
+	/**
+	 * 娴佺▼妯℃澘鐢ㄩ��
+	 * @return
+	 */
+	List<Map<String,String>> processTemplateType();
+
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/service/impl/FlowEngineServiceImpl.java b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/service/impl/FlowEngineServiceImpl.java
index 7eb8c9b..c182cea 100644
--- a/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/service/impl/FlowEngineServiceImpl.java
+++ b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/service/impl/FlowEngineServiceImpl.java
@@ -16,6 +16,8 @@
  */
 package com.vci.ubcs.flow.engine.service.impl;
 
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fasterxml.jackson.databind.ObjectMapper;
@@ -34,9 +36,11 @@
 import com.vci.ubcs.system.user.entity.User;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.collections4.MapUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.flowable.bpmn.converter.BpmnXMLConverter;
-import org.flowable.bpmn.model.BpmnModel;
+import org.flowable.bpmn.model.*;
 import org.flowable.bpmn.model.Process;
 import org.flowable.common.engine.impl.util.IoUtil;
 import org.flowable.common.engine.impl.util.io.StringStreamSource;
@@ -47,6 +51,7 @@
 import org.flowable.engine.impl.persistence.entity.ExecutionEntityImpl;
 import org.flowable.engine.impl.persistence.entity.ProcessDefinitionEntityImpl;
 import org.flowable.engine.repository.Deployment;
+import org.flowable.engine.repository.DeploymentQuery;
 import org.flowable.engine.repository.ProcessDefinition;
 import org.flowable.engine.repository.ProcessDefinitionQuery;
 import org.flowable.engine.runtime.ProcessInstance;
@@ -54,6 +59,7 @@
 import org.flowable.engine.task.Comment;
 import org.flowable.image.ProcessDiagramGenerator;
 import org.springblade.core.log.exception.ServiceException;
+import org.springblade.core.mp.support.Condition;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.utils.DateUtil;
 import org.springblade.core.tool.utils.FileUtil;
@@ -61,11 +67,17 @@
 import org.springblade.core.tool.utils.StringUtil;
 import org.springframework.stereotype.Service;
 import org.springframework.web.multipart.MultipartFile;
+import org.w3c.dom.*;
+import org.xml.sax.InputSource;
 
+import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
+import java.io.StringReader;
 import java.util.*;
 
 /**
@@ -90,6 +102,12 @@
 	private final HistoryService historyService;
 	private final TaskService taskService;
 	private final ProcessEngine processEngine;
+
+	/**
+	 * 鏁版嵁鎿嶄綔瀵硅薄
+	 */
+	@Resource
+	private FlowMapper flowMapper;
 
 	@Override
 	public IPage<FlowModel> selectFlowPage(IPage<FlowModel> page, FlowModel flowModel) {
@@ -296,6 +314,7 @@
 
 	@Override
 	public boolean deployModel(String modelId, String category, List<String> tenantIdList) {
+
 		FlowModel model = this.getById(modelId);
 		if (model == null) {
 			throw new ServiceException("鏈壘鍒版ā鍨� id: " + modelId);
@@ -346,6 +365,12 @@
 
 	@Override
 	public FlowModel submitModel(FlowModel model) {
+
+		//楠岃瘉閲嶅key
+		if(StringUtils.isEmpty(model.getId())&&getFlowModelByKey(model.getModelKey())!=null){
+			throw new ServiceException("you cannot definition repetition 娴佺▼key!");
+		}
+
 		FlowModel flowModel = new FlowModel();
 		flowModel.setId(model.getId());
 		flowModel.setVersion(Func.toInt(model.getVersion(), 0) + 1);
@@ -467,6 +492,43 @@
 	}
 
 	/**
+	 * 鏍规嵁娴佺▼妯″瀷key鑾峰彇XML涓妭鐐归厤缃殑澶勭悊浜�
+	 *
+	 * @param key
+	 * @return
+	 */
+	@Override
+	public List<Map<String,String>> getNodeByFlowableKey(String key){
+		String processDefinitionId = repositoryService.createProcessDefinitionQuery().latestVersion().processDefinitionKey(key).singleResult().getId();
+		BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinitionId);
+		Process process = bpmnModel.getProcesses().get(0);//鍙湁涓�涓�
+
+		List<Map<String,String>> ll = new ArrayList<>();
+		if (CollectionUtils.isNotEmpty(process.getFlowElements())) {
+			for (FlowElement flowElement : process.getFlowElements()) {
+				if (flowElement instanceof UserTask) {
+					Map<String,String> mi = new HashMap<>();
+					mi.put("taskId",flowElement.getId());
+					mi.put("taskName",flowElement.getName());
+					ll.add(mi);
+				}
+			}
+		}
+
+		return ll;
+	}
+
+	/**
+	 * 淇敼娴佺▼澶勭悊浜�
+	 */
+	@Override
+	public void updateAssignee(String u){
+
+		flowMapper.updateAssignee(u);
+
+	}
+
+	/**
 	 * 鏄惁宸插畬缁�
 	 *
 	 * @param processInstanceId 娴佺▼瀹炰緥id
@@ -476,7 +538,6 @@
 		return historyService.createHistoricProcessInstanceQuery().finished()
 			.processInstanceId(processInstanceId).count() > 0;
 	}
-
 
 	/**
 	 * xml杞琤pmn json
@@ -556,4 +617,10 @@
 		}
 	}
 
+	public FlowModel getFlowModelByKey(String key){
+		Map kv = new HashMap();
+		kv.put("model_key",key);
+		return baseMapper.selectOne(Condition.getQueryWrapper(kv, FlowModel.class));
+	}
+
 }
diff --git a/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/service/impl/FlowTaskUserServiceImpl.java b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/service/impl/FlowTaskUserServiceImpl.java
new file mode 100644
index 0000000..ecdc82a
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/service/impl/FlowTaskUserServiceImpl.java
@@ -0,0 +1,146 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.flow.engine.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.vci.ubcs.flow.core.entity.BladeFlow;
+import com.vci.ubcs.flow.core.enums.FlowModeEnum;
+import com.vci.ubcs.flow.core.utils.TaskUtil;
+import com.vci.ubcs.flow.engine.constant.FlowEngineConstant;
+import com.vci.ubcs.flow.engine.entity.*;
+import com.vci.ubcs.flow.engine.mapper.FlowMapper;
+import com.vci.ubcs.flow.engine.mapper.FlowTaskUserMapper;
+import com.vci.ubcs.flow.engine.service.FlowEngineService;
+import com.vci.ubcs.flow.engine.service.FlowTaskUserService;
+import com.vci.ubcs.flow.engine.utils.FlowCache;
+import com.vci.ubcs.system.user.cache.UserCache;
+import com.vci.ubcs.system.user.entity.User;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.flowable.bpmn.converter.BpmnXMLConverter;
+import org.flowable.bpmn.model.BpmnModel;
+import org.flowable.bpmn.model.Process;
+import org.flowable.common.engine.impl.util.IoUtil;
+import org.flowable.common.engine.impl.util.io.StringStreamSource;
+import org.flowable.editor.language.json.converter.BpmnJsonConverter;
+import org.flowable.engine.*;
+import org.flowable.engine.history.HistoricActivityInstance;
+import org.flowable.engine.history.HistoricProcessInstance;
+import org.flowable.engine.impl.persistence.entity.ExecutionEntityImpl;
+import org.flowable.engine.impl.persistence.entity.ProcessDefinitionEntityImpl;
+import org.flowable.engine.repository.Deployment;
+import org.flowable.engine.repository.ProcessDefinition;
+import org.flowable.engine.repository.ProcessDefinitionQuery;
+import org.flowable.engine.runtime.ProcessInstance;
+import org.flowable.engine.runtime.ProcessInstanceQuery;
+import org.flowable.engine.task.Comment;
+import org.flowable.image.ProcessDiagramGenerator;
+import org.springblade.core.launch.constant.FlowConstant;
+import org.springblade.core.log.exception.ServiceException;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tool.utils.DateUtil;
+import org.springblade.core.tool.utils.FileUtil;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.core.tool.utils.StringUtil;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+import org.xml.sax.InputSource;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.StringReader;
+import java.util.*;
+
+/**
+ * 宸ヤ綔娴佹湇鍔″疄鐜扮被
+ *
+ * @author wang1
+ */
+@Slf4j
+@Service
+@AllArgsConstructor
+public class FlowTaskUserServiceImpl extends ServiceImpl<FlowTaskUserMapper, FlowTaskUser> implements FlowTaskUserService {
+
+	private FlowEngineService flowEngineService;
+	private FlowTaskUserMapper flowTaskUserMapper;
+
+	/**
+	 * 鏌ヨ褰撳墠鐧婚檰浜哄杩欎釜娴佺▼鐨則askUser
+	 * @return
+	 */
+	@Override
+	public FlowTaskUserC getUser(){
+		QueryWrapper<FlowTaskUser> queryWrapper = new QueryWrapper<>();
+		queryWrapper.eq("CREATED_BY", AuthUtil.getUserId());
+		List<FlowTaskUser> flowTaskUsers = baseMapper.selectList(queryWrapper);
+		FlowTaskUserC flowTaskUserCR = new FlowTaskUserC();
+		if(flowTaskUsers.size()==0){
+			return flowTaskUserCR;
+		}
+		flowTaskUserCR.setName(flowTaskUsers.get(0).getName());//鏀惰棌鍚嶇О
+		flowTaskUserCR.setFlowTaskUsers(flowTaskUsers);
+		return flowTaskUserCR;
+	}
+
+	@Override
+	public void saveOrUpdateUser(FlowTaskUserC flowTaskUserC){
+		List<FlowTaskUser> flowTaskUsers = flowTaskUserC.getFlowTaskUsers();
+		String name = flowTaskUserC.getName();//鏀惰棌鍚嶇О
+
+		//鏂板鎯呭喌涓嬮獙璇佹敹钘忓悕绉颁笉閲嶅
+		if(flowTaskUsers.get(0).getId()!=null) {
+			Map<String, Object> m = new HashMap<>();
+			m.put("name", name);
+			QueryWrapper q = Condition.getQueryWrapper(m, FlowTaskUser.class)
+				.select("id,model_key modelKey,name,description,version,created,last_updated lastUpdated");
+			if(flowTaskUserMapper.selectCount(q)>0){
+				throw new ServiceException("鏀惰棌鍚嶇О宸茬粡瀛樺湪!");
+			}
+		}
+		for (FlowTaskUser flowTaskUseri:flowTaskUsers){
+			flowTaskUseri.setName(name);
+		}
+		//鏂板銆佷慨鏀�
+		this.saveOrUpdateBatch(flowTaskUsers);
+
+	}
+
+
+	@Override
+	public void deleteUser(String name){
+		Map<String, Object> m = new HashMap<>();
+		m.put("name", name);
+		m.put("created_by", AuthUtil.getUserId());
+		baseMapper.deleteByMap(m);
+	}
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/service/impl/ProcessStageAttrServiceImpl.java b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/service/impl/ProcessStageAttrServiceImpl.java
new file mode 100644
index 0000000..27de85d
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/service/impl/ProcessStageAttrServiceImpl.java
@@ -0,0 +1,81 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.flow.engine.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.vci.ubcs.flow.engine.entity.FlowTaskUser;
+import com.vci.ubcs.flow.engine.entity.FlowTaskUserC;
+import com.vci.ubcs.flow.engine.entity.ProcessStageAttr;
+import com.vci.ubcs.flow.engine.mapper.ProcessStageAttrMapper;
+import com.vci.ubcs.flow.engine.service.ProcessStageAttrService;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springblade.core.mp.support.Condition;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 娴佺▼闃舵鏈嶅姟瀹炵幇绫�
+ *
+ * @author wang1
+ */
+@Slf4j
+@Service
+@AllArgsConstructor
+public class ProcessStageAttrServiceImpl extends ServiceImpl<ProcessStageAttrMapper, ProcessStageAttr> implements ProcessStageAttrService {
+
+	/**
+	 * 鏂板/淇敼娴佺▼闃舵
+	 * @param flowTaskUserC
+	 * @return
+	 */
+	@Transactional
+	public void saveOrUpdateUser(FlowTaskUserC flowTaskUserC){
+		List<ProcessStageAttr> processStageAttrs = flowTaskUserC.getProcessStageAttr();
+		String modelKey = flowTaskUserC.getModelKey();
+		String templateId = flowTaskUserC.getTemplateId();
+		String taskId = flowTaskUserC.getTaskId();
+		String taskName = flowTaskUserC.getTaskName();
+
+		//鐩存帴鍒犻櫎浠ュ墠鐨�
+		Map<String, Object> m = new HashMap<>();
+		m.put("template_id", templateId);
+		m.put("model_key", modelKey);
+		m.put("task_id", taskId);
+		QueryWrapper q = Condition.getQueryWrapper(m, FlowTaskUser.class)
+			.select("id,model_key modelKey,name,description,version,created,last_updated lastUpdated");
+		int i = baseMapper.deleteByMap(m);
+		System.out.println("鍒犻櫎鐨勫睘鎬т釜鏁�: "+i);
+
+		List<ProcessStageAttr> processStages = flowTaskUserC.getProcessStageAttr();
+		for (ProcessStageAttr processStageAttr:processStages){
+			processStageAttr.setModelKey(modelKey);
+			processStageAttr.setTemplateId(templateId);
+			processStageAttr.setTaskId(taskId);
+			processStageAttr.setTaskName(taskName);
+		}
+		if(processStages.size()!=0) {
+			this.saveOrUpdateBatch(processStages);
+		}
+	}
+
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/service/impl/ProcessTemplateServiceImpl.java b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/service/impl/ProcessTemplateServiceImpl.java
new file mode 100644
index 0000000..e7a35ac
--- /dev/null
+++ b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/service/impl/ProcessTemplateServiceImpl.java
@@ -0,0 +1,107 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.flow.engine.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.vci.ubcs.flow.core.utils.TaskUtil;
+import com.vci.ubcs.flow.engine.entity.FlowTaskUser;
+import com.vci.ubcs.flow.engine.entity.FlowTaskUserC;
+import com.vci.ubcs.flow.engine.entity.ProcessTemplate;
+import com.vci.ubcs.flow.engine.mapper.FlowTaskUserMapper;
+import com.vci.ubcs.flow.engine.mapper.ProcessTemplateMapper;
+import com.vci.ubcs.flow.engine.service.FlowEngineService;
+import com.vci.ubcs.flow.engine.service.FlowTaskUserService;
+import com.vci.ubcs.flow.engine.service.ProcessTemplateService;
+import com.vci.ubcs.starter.web.enumpck.ProcessTemplateTypeEnum;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springblade.core.launch.constant.FlowConstant;
+import org.springblade.core.log.exception.ServiceException;
+import org.springblade.core.mp.support.Condition;
+import org.springframework.stereotype.Service;
+
+import java.util.*;
+
+/**
+ * 娴佺▼妯℃澘鏈嶅姟瀹炵幇绫�
+ *
+ * @author wang1
+ */
+@Slf4j
+@Service
+@AllArgsConstructor
+public class ProcessTemplateServiceImpl extends ServiceImpl<ProcessTemplateMapper, ProcessTemplate> implements ProcessTemplateService {
+
+
+	/**
+	 * 鏂板/淇敼娴佺▼妯℃澘
+	 * @param processTemplate
+	 * @return
+	 */
+	public void saveOrUpdateUser(ProcessTemplate processTemplate){
+		//鏍¢獙杩欎釜妯℃澘涓嬶紝涓�绫绘寜閽彧鑳芥湁涓�涓ā鏉�
+		QueryWrapper<ProcessTemplate> queryWrapper = new QueryWrapper<>();
+		queryWrapper.eq("button_type_key", processTemplate.getButtonTypeKey());
+		if(StringUtils.isNotEmpty(processTemplate.getId())) {//淇敼鐨勬椂鍊�,id涓虹┖灏辨槸鏂板
+			queryWrapper.ne("id", processTemplate.getId());
+		}
+		if(baseMapper.selectOne(queryWrapper)!=null){
+			throw new ServiceException(processTemplate.getButtonTypeValue()+"鍔熻兘宸茬粡閰嶇疆浜嗘祦绋�!");
+		}
+		if(StringUtils.isEmpty(processTemplate.getButtonTypeValue())){
+			processTemplate.setButtonTypeValue(ProcessTemplateTypeEnum.getTextByValue(processTemplate.getButtonTypeKey()));
+		}
+		//鏂板鎴栬�呬慨鏀�
+		if(StringUtils.isEmpty(processTemplate.getId())){
+			processTemplate.setCreated(Calendar.getInstance().getTime());
+			processTemplate.setCreatedBy(TaskUtil.getTaskUser());
+			processTemplate.setLastUpdated(Calendar.getInstance().getTime());
+			processTemplate.setLastUpdatedBy(TaskUtil.getTaskUser());
+		}
+		this.saveOrUpdate(processTemplate);
+
+	}
+
+	/**
+	 * 鍒犻櫎娴佺▼妯℃澘
+	 * @param id
+	 * @return
+	 */
+	public void deleteProcessTemplate(String id){
+		baseMapper.deleteById(id);
+	}
+
+	/**
+	 * 娴佺▼妯℃澘鐢ㄩ��
+	 * @return
+	 */
+	public List<Map<String,String>> processTemplateType(){
+		ProcessTemplateTypeEnum[] es = ProcessTemplateTypeEnum.values();
+		List<Map<String,String>> ll = new ArrayList<>();
+		for (ProcessTemplateTypeEnum p:es){
+			Map<String,String> mi = new HashMap<>();
+			String value = p.getValue();
+			String text = p.getText();
+			mi.put("codee",value);
+			mi.put("namee",text);
+			ll.add(mi);
+		}
+		return ll;
+	}
+}
diff --git a/Source/UBCS/ubcs-ops/ubcs-flow/src/main/resources/mapper/FlowMapper.xml b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/resources/mapper/FlowMapper.xml
index 91e52fa..6ca7cef 100644
--- a/Source/UBCS/ubcs-ops/ubcs-flow/src/main/resources/mapper/FlowMapper.xml
+++ b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/resources/mapper/FlowMapper.xml
@@ -50,4 +50,8 @@
         where modelrelation.parent_model_id = #{_parameter}
     </select>
 
+    <update id="updateAssignee" parameterType="java.lang.String" >
+        ${u}
+    </update>
+
 </mapper>
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/enumpck/NewAppConstantEnum.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/enumpck/NewAppConstantEnum.java
index d445b03..f7d22f8 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/enumpck/NewAppConstantEnum.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/enumpck/NewAppConstantEnum.java
@@ -8,6 +8,7 @@
 	 * 缂栫爜瑙勫垯锛屾湇鍔″惎鍔ㄥ悕
 	 */
 	APPLICATION_NAME_CODE(AppConstant.APPLICATION_NAME_CODE,"涓绘暟鎹�"),
+	APPLICATION_FLOW_NAME(AppConstant.APPLICATION_FLOW_NAME,"ubcs-flow"),
 	;
 
 	/**
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/enumpck/ProcessTemplateTypeEnum.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/enumpck/ProcessTemplateTypeEnum.java
new file mode 100644
index 0000000..3284d8e
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/enumpck/ProcessTemplateTypeEnum.java
@@ -0,0 +1,134 @@
+package com.vci.ubcs.starter.web.enumpck;
+
+
+/**
+ * 娴佺▼妯℃澘搴旂敤鎸夐挳绫诲瀷
+ * @author wang1
+ */
+public enum ProcessTemplateTypeEnum implements BaseEnum {
+
+	/**
+	 * 鍙戝竷
+	 */
+	PUBLIC("PUBLIC","鍙戝竷"),
+
+	/**
+	 * 鍙樻洿
+	 */
+	EDIT("EDIT","鍙樻洿"),
+
+	/**
+	 * 鍋滅敤
+	 */
+	ENABLE("ENABLE","鍋滅敤"),
+
+	/**
+	 * 鍚敤
+	 */
+	DISABLE("DISABLE","鍚敤");
+
+	/**
+	 * 鏋氫妇鐨勫��
+	 */
+	private String value;
+
+	/**
+	 * 鏋氫妇鏄剧ず鏂囨湰
+	 */
+	private String text;
+
+	/**
+	 * 鑾峰彇鏋氫妇鍊�
+	 *
+	 * @return 鏋氫妇鍊�
+	 */
+	@Override
+	public String getValue() {
+		return value;
+	}
+
+	/**
+	 * 璁剧疆鏋氫妇鍊�
+	 *
+	 * @param value 鏋氫妇鍊�
+	 */
+	public void setValue(String value) {
+		this.value = value;
+	}
+
+	/**
+	 * 鑾峰彇鏋氫妇鏄剧ず鏂囨湰
+	 *
+	 * @return 鏄剧ず鏂囨湰
+	 */
+	@Override
+	public String getText() {
+		return text;
+	}
+
+	/**
+	 * 璁剧疆鏄剧ず鏂囨湰
+	 *
+	 * @param text 鏄剧ず鏂囨湰
+	 */
+	public void setText(String text) {
+		this.text = text;
+	}
+
+	/**
+	 * 鏋勯�犲嚱鏁�
+	 *
+	 * @param value 鍊�
+	 * @param text  鏄剧ず鏂囨湰
+	 */
+	private ProcessTemplateTypeEnum(String value, String text) {
+		this.value = value;
+		this.text = text;
+	}
+
+	/**
+	 * 鏍规嵁鍚嶇О鑾峰彇瀵瑰簲鐨勬灇涓惧��
+	 *
+	 * @param text 鍚嶇О
+	 * @return 鏋氫妇鍊�
+	 */
+	public static String getValueByText(String text) {
+		for (ProcessTemplateTypeEnum wenum : ProcessTemplateTypeEnum.values()) {
+			if (wenum.getText().equalsIgnoreCase(text)) {
+				return wenum.getValue();
+			}
+		}
+		return "";
+	}
+
+	/**
+	 * 鏍规嵁鏋氫妇鍊艰幏鍙栧悕绉�
+	 *
+	 * @param value 鏋氫妇鍊�
+	 * @return 鍚嶇О
+	 */
+	public static String getTextByValue(String value) {
+		for (ProcessTemplateTypeEnum wenum : ProcessTemplateTypeEnum.values()) {
+			if (wenum.getValue().equalsIgnoreCase(value)) {
+				return wenum.getText();
+			}
+		}
+		return "";
+	}
+
+	/**
+	 * 鏍规嵁鏋氫妇鍊艰幏鍙栨灇涓惧璞�
+	 *
+	 * @param value 鏋氫妇鍊�
+	 * @return 鏋氫妇瀵硅薄锛屼笉瀛樺湪鏃跺�欒繑鍥瀗ull
+	 */
+	public static ProcessTemplateTypeEnum forValue(String value) {
+		for (ProcessTemplateTypeEnum wenum : ProcessTemplateTypeEnum.values()) {
+			if (wenum.getValue().equalsIgnoreCase(value)) {
+				return wenum;
+			}
+		}
+		return null;
+	}
+}
+
diff --git a/Source/UBCS/ubcs-service-api/ubcs-workflow-api/src/main/java/com/vci/ubcs/code/constant/FlowConstant.java b/Source/UBCS/ubcs-service-api/ubcs-workflow-api/src/main/java/com/vci/ubcs/code/constant/FlowConstant.java
new file mode 100644
index 0000000..81781a4
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-workflow-api/src/main/java/com/vci/ubcs/code/constant/FlowConstant.java
@@ -0,0 +1,32 @@
+package com.vci.workflow.constant;
+
+public class FlowConstant {
+
+    public static final String MAPPER_SCAN = "com.dragon.*.dao.*";
+
+    /**
+     * 鎻愪氦浜虹殑鍙橀噺鍚嶇О
+     */
+    public static final String FLOW_SUBMITTER_VAR = "initiator";
+    /**
+     * 鎻愪氦浜鸿妭鐐瑰悕绉�
+     */
+    public static final String FLOW_SUBMITTER = "鎻愪氦浜�";
+    /**
+     * 鑷姩璺宠繃鑺傜偣璁剧疆灞炴��
+     */
+    public static final String FLOWABLE_SKIP_EXPRESSION_ENABLED = "_FLOWABLE_SKIP_EXPRESSION_ENABLED";
+    /**
+     * 鎸傝捣鐘舵��
+     */
+    public static final int SUSPENSION_STATE = 2;
+    /**
+     * 婵�娲荤姸鎬�
+     */
+    public static final int ACTIVATE_STATE = 1;
+    //鍚庡姞绛�
+    public static final String AFTER_ADDSIGN = "after";
+    //鍓嶅姞绛�
+    public static final String BEFORE_ADDSIGN = "before";
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/UserPwdstrategyController.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/UserPwdstrategyController.java
index 2f2c340..ab2293e 100644
--- a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/UserPwdstrategyController.java
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/UserPwdstrategyController.java
@@ -13,6 +13,7 @@
 
 import javax.annotation.Resource;
 import javax.validation.Valid;
+import java.util.List;
 
 /**
  * 鐢ㄦ埛瀵嗙爜绛栫暐鍏宠仈(UserPwdstrategy)琛ㄦ帶鍒跺眰
diff --git a/Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/service/impl/UserServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/service/impl/UserServiceImpl.java
index 1680c0b..7ce5654 100644
--- a/Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/service/impl/UserServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-user/src/main/java/com/vci/ubcs/system/user/service/impl/UserServiceImpl.java
@@ -336,7 +336,7 @@
 		regex = "^"+regex+"{"+strategy.getRequiredType()+",}$";
 		boolean result = RegexUtil.find(regex, newPassword1);
 		if(!result){
-			throw new ServiceException(resException);
+			//throw new ServiceException(resException);
 		}
 		//淇敼瀵嗙爜鍚屾椂锛屾敼鍙樼敤鎴蜂俊鎭腑鐨勫瘑鐮佷慨鏀圭姸鎬佸瓧娈�,瀵嗙爜淇敼鏃堕棿
 		return this.update(Wrappers.<User>update().lambda()

--
Gitblit v1.9.3