From 40b5d967cc57a640ff1402c04bb7753462a03a0b Mon Sep 17 00:00:00 2001
From: tangzhaoqian <tangzhaoqian@youlingrc.com>
Date: Thu, 16 Apr 2020 08:39:09 +0800
Subject: [PATCH] 审批管理-流程节点解析

---
 src/main/java/cn/timer/api/config/swagger/Swagger2Config.java   |   9 +++++++--
 src/main/java/cn/timer/api/controller/spmk/SpmkServiceImpl.java | 108 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----
 src/main/java/cn/timer/api/dto/spmk/Condition.java              |  22 ++++++++++++++++++++++
 src/main/java/cn/timer/api/dto/spmk/Relation.java               |  33 +++++++++++++++++++++++++++++++++
 src/main/java/cn/timer/api/dto/spmk/Router.java                 |  51 +++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/cn/timer/api/dto/spmk/Spmk.java                   |  19 +++++++++++++++++++
 src/main/java/cn/timer/api/dto/spmk/User.java                   |  20 ++++++++++++++++++++
 src/main/java/cn/timer/api/utils/RouterUtils.java               | 404 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 8 files changed, 660 insertions(+), 6 deletions(-)
 create mode 100644 src/main/java/cn/timer/api/dto/spmk/Condition.java
 create mode 100644 src/main/java/cn/timer/api/dto/spmk/Relation.java
 create mode 100644 src/main/java/cn/timer/api/dto/spmk/Router.java
 create mode 100644 src/main/java/cn/timer/api/dto/spmk/Spmk.java
 create mode 100644 src/main/java/cn/timer/api/dto/spmk/User.java
 create mode 100644 src/main/java/cn/timer/api/utils/RouterUtils.java

diff --git a/src/main/java/cn/timer/api/config/swagger/Swagger2Config.java b/src/main/java/cn/timer/api/config/swagger/Swagger2Config.java
index 342156d..28e6b33 100644
--- a/src/main/java/cn/timer/api/config/swagger/Swagger2Config.java
+++ b/src/main/java/cn/timer/api/config/swagger/Swagger2Config.java
@@ -32,8 +32,13 @@ public class Swagger2Config {
 	@SuppressWarnings("deprecation")
 	@Bean
 	public ApiInfo apiInfo() {
-		return new ApiInfoBuilder().title("8小时-Api接口文档").description("快速进行Api接口调试").termsOfServiceUrl("127.0.0.1:8080")
-				.contact("TangZhaoQian").version("1.0").build();
+		return new ApiInfoBuilder()
+				.title("8小时-Api接口文档")
+				.description("快速进行Api接口调试")
+				.termsOfServiceUrl("127.0.0.1:8080")
+				.contact("TangZhaoQian")
+				.version("1.0")
+				.build();
 	}
 
 	/**
diff --git a/src/main/java/cn/timer/api/controller/spmk/SpmkServiceImpl.java b/src/main/java/cn/timer/api/controller/spmk/SpmkServiceImpl.java
index c6c2eac..693def0 100644
--- a/src/main/java/cn/timer/api/controller/spmk/SpmkServiceImpl.java
+++ b/src/main/java/cn/timer/api/controller/spmk/SpmkServiceImpl.java
@@ -1,5 +1,6 @@
 package cn.timer.api.controller.spmk;
 
+import java.util.ArrayList;
 import java.util.List;
 
 import org.springframework.beans.factory.annotation.Autowired;
@@ -21,9 +22,12 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.lang.Console;
 import cn.hutool.core.util.ArrayUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
+import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
 import cn.timer.api.bean.spmk.SpmkIcon;
 import cn.timer.api.bean.spmk.SpmkJqgz;
 import cn.timer.api.bean.spmk.SpmkLcjd;
@@ -33,12 +37,15 @@ import cn.timer.api.bean.spmk.SpmkSpcz;
 import cn.timer.api.bean.spmk.SpmkSpgl;
 import cn.timer.api.bean.spmk.SpmkSpz;
 import cn.timer.api.bean.spmk.SpmkSxpz;
+import cn.timer.api.bean.yggl.YgglMainEmp;
 import cn.timer.api.config.annotation.CurrentUser;
 import cn.timer.api.config.annotation.UserBean;
 import cn.timer.api.config.enums.CommonEnum;
 import cn.timer.api.dao.spmk.SpmkSpglMapper;
 import cn.timer.api.dao.spmk.SpmkSpzMapper;
 import cn.timer.api.dto.spmk.SpmkMbKjDto;
+import cn.timer.api.dto.spmk.Router;
+import cn.timer.api.dto.spmk.Spmk;
 import cn.timer.api.dto.spmk.SpmkSpglDto;
 import cn.timer.api.dto.spmk.SpmkSpglMoveDto;
 import cn.timer.api.dto.spmk.SpmkSpglSortDto;
@@ -47,6 +54,7 @@ import cn.timer.api.dto.spmk.SpmkSpzSortDto;
 import cn.timer.api.dto.spmk.SpmkSpzSpglDto;
 import cn.timer.api.utils.Result;
 import cn.timer.api.utils.ResultUtil;
+import cn.timer.api.utils.RouterUtils;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 
@@ -392,12 +400,104 @@ public class SpmkServiceImpl {
 		Integer orgCode = userBean.getOrgCode();
 		IPage<SpmkJqgz> sPage = SpmkJqgz.builder().build().selectPage(p, new QueryWrapper<SpmkJqgz>().eq("org_code",orgCode));
 		List<SpmkJqgz> spmkJqgzs = sPage.getRecords();
-		sPage.getCurrent();
-		sPage.getPages();
-		sPage.getTotal();
-		sPage.getSize();
 		return ResultUtil.data(sPage, spmkJqgzs, "获取假期规则列表成功");
 	}
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	/**
+	 * 流程节点解析
+	 */
+	@PostMapping(value = "/jsonparse")
+	@ApiOperation(value = "流程节点解析", httpMethod = "POST", notes = "流程节点解析")
+	@ApiOperationSupport(order = 1)
+	public Result<Object> jsonToObj(@RequestBody Object jsonObj){
+
+		JSONObject obj = JSONUtil.parseObj(jsonObj, false, true);
+		
+		Router Router = obj.get("router", Router.class);
+
+		Console.log("obj:" + obj.toStringPretty());
+		Console.log("Router:" + Router.toPrettyString());
+		Console.log("Router:" + Router.toJSONString());
+		
+		return ResultUtil.success("解析成功!");
+	}
+	
+	/**
+	 * 流程节点解析
+	 */
+	@PostMapping(value = "/jsonparse_plus")
+	@ApiOperation(value = "流程节点解析_plus", httpMethod = "POST", notes = "流程节点解析_plus")
+	@ApiOperationSupport(order = 1)
+	public Result<Object> jsonToObj2(@RequestBody Router jsonObj){
+		
+		Console.log("jsonObj:" + jsonObj);
+		Console.log("jsonObj:" + jsonObj.getChildren());
+		
+		return ResultUtil.data(jsonObj, "解析成功!");
+	}
+	
+	/**
+	 * 流程节点解析
+	 */
+	@PostMapping(value = "/jsonparse_plusx")
+	@ApiOperation(value = "流程节点解析_plus", httpMethod = "POST", notes = "流程节点解析_plus")
+	@ApiOperationSupport(order = 1)
+	public Result<Object> jsonToObj3(@RequestBody Object jsonObj){
+		
+		JSONObject obj = JSONUtil.parseObj(jsonObj, false, true);
+		obj.put("orgCode", 4);
+		Console.log("jsonObj:" + obj.get("name"));
+		Console.log("jsonObj:" + obj.get("id"));
+		Console.log("jsonObj:" + obj.get("aaa"));
+		
+		return ResultUtil.data(jsonObj, "解析成功!");
+	}
+	
+	/**
+	 * 部门id 查询 员工
+	 */
+	@PostMapping(value = "/deptSelectEmp")
+	@ApiOperation(value = "部门id 查询 员工", httpMethod = "POST", notes = "流程节点解析_plus")
+	@ApiOperationSupport(order = 1)
+	public Result<Object> selectEmpBydept(@RequestParam Integer id){
+		List<YgglMainEmp> ygglMainEmp = RouterUtils.selectOtherlistent(4,id);
+		return ResultUtil.data(ygglMainEmp, "解析成功!");
+	}
+	
+	
+	
+	
+	
+	/**
+	 * 流程节点解析123
+	 */
+	@PostMapping(value = "/jsonparse_plus_plus")
+	@ApiOperation(value = "流程节点解析_plus", httpMethod = "POST", notes = "流程节点解析_plus")
+	@ApiOperationSupport(order = 1)
+	public Result<Object> jsonToObj123(@RequestBody Spmk spmk){
+		
+		List<Router> listRouter = new ArrayList<Router>();
+		listRouter.add(spmk.getRouter());
+		
+		return ResultUtil.data(RouterUtils.NextNode(listRouter, spmk.getData()), "解析成功!");
+	}
+	
+	
+	
+	
+	
+	
+	
+	
 
 
 }
diff --git a/src/main/java/cn/timer/api/dto/spmk/Condition.java b/src/main/java/cn/timer/api/dto/spmk/Condition.java
new file mode 100644
index 0000000..1b94d46
--- /dev/null
+++ b/src/main/java/cn/timer/api/dto/spmk/Condition.java
@@ -0,0 +1,22 @@
+package cn.timer.api.dto.spmk;
+
+import java.util.List;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class Condition {
+
+	private String key;
+	
+	private String format;
+	
+	private String value;
+
+}
diff --git a/src/main/java/cn/timer/api/dto/spmk/Relation.java b/src/main/java/cn/timer/api/dto/spmk/Relation.java
new file mode 100644
index 0000000..093d591
--- /dev/null
+++ b/src/main/java/cn/timer/api/dto/spmk/Relation.java
@@ -0,0 +1,33 @@
+package cn.timer.api.dto.spmk;
+
+import java.util.List;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class Relation {
+
+	/**
+	 * 类型
+	 */
+	private String type;
+	/**
+	 * 名称
+	 */
+	private String name;
+	/**
+	 * 部门ID
+	 */
+	private String departmentId;
+	/**
+	 * 用户
+	 */
+	private List<User> users;
+	
+}
diff --git a/src/main/java/cn/timer/api/dto/spmk/Router.java b/src/main/java/cn/timer/api/dto/spmk/Router.java
new file mode 100644
index 0000000..152acf2
--- /dev/null
+++ b/src/main/java/cn/timer/api/dto/spmk/Router.java
@@ -0,0 +1,51 @@
+package cn.timer.api.dto.spmk;
+
+import java.util.List;
+
+import cn.hutool.json.JSONSupport;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class Router extends JSONSupport {
+
+	/**
+	 * 节点类型
+	 * 1.creator-发起 
+	 * 2.audit-审批  
+	 * 3.copy-抄送
+	 * 4.rules-规则
+	 */
+	private String className;
+	
+	/**
+	 * 执行
+	 */
+	private String execute;
+
+	/**
+	 * 通过
+	 */
+	private Boolean flow;
+	
+	/**
+	 * 关系
+	 */
+	private List<Relation> relation;
+	
+	/**
+	 * 条件
+	 */
+	private List<Condition> condition;
+	
+	/**
+	 * 下一级
+	 */
+	private List<Router> children;
+	
+}
diff --git a/src/main/java/cn/timer/api/dto/spmk/Spmk.java b/src/main/java/cn/timer/api/dto/spmk/Spmk.java
new file mode 100644
index 0000000..d6e1760
--- /dev/null
+++ b/src/main/java/cn/timer/api/dto/spmk/Spmk.java
@@ -0,0 +1,19 @@
+package cn.timer.api.dto.spmk;
+
+import cn.hutool.json.JSONObject;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class Spmk {
+
+	private Router router;
+	
+	private JSONObject data;
+	
+}
diff --git a/src/main/java/cn/timer/api/dto/spmk/User.java b/src/main/java/cn/timer/api/dto/spmk/User.java
new file mode 100644
index 0000000..b5217e6
--- /dev/null
+++ b/src/main/java/cn/timer/api/dto/spmk/User.java
@@ -0,0 +1,20 @@
+package cn.timer.api.dto.spmk;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class User{
+
+	private String name;
+
+	private String id;
+
+	private String execute;
+
+}
diff --git a/src/main/java/cn/timer/api/utils/RouterUtils.java b/src/main/java/cn/timer/api/utils/RouterUtils.java
new file mode 100644
index 0000000..8c268c2
--- /dev/null
+++ b/src/main/java/cn/timer/api/utils/RouterUtils.java
@@ -0,0 +1,404 @@
+package cn.timer.api.utils;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpSession;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PathVariable;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.additional.query.impl.LambdaQueryChainWrapper;
+
+import cn.hutool.core.lang.Console;
+import cn.hutool.core.util.NumberUtil;
+import cn.hutool.json.JSONObject;
+import cn.timer.api.bean.qyzx.QyzxEmpLogin;
+import cn.timer.api.bean.yggl.YgglMainEmp;
+import cn.timer.api.bean.zcgl.ZcglAssoZcgx;
+import cn.timer.api.bean.zzgl.ZzglBmgwM;
+import cn.timer.api.config.annotation.CurrentUser;
+import cn.timer.api.config.annotation.UserBean;
+import cn.timer.api.dao.zzgl.ZzglBmgwMMapper;
+import cn.timer.api.dto.spmk.Condition;
+import cn.timer.api.dto.spmk.Relation;
+import cn.timer.api.dto.spmk.Router;
+import cn.timer.api.dto.spmk.User;
+
+/**
+ * 流程节点工具类
+ * 
+ * @author Administrator
+ *
+ */
+public class RouterUtils {
+	
+	private final static String UNEXECUTED = "0";
+	private final static String EXECUTING = "1";
+	private final static String EXECUTED = "2";
+	private final static String CREATOR = "creator";
+	private final static String RULES = "rules";
+	private final static String AUDIT = "audit";
+	private final static String COPY = "copy";
+	private final static String RELATION_TYPE_DEPARTMENT = "department";
+	private final static String RELATION_TYPE_USERS = "users";
+
+
+	// 执行下一个节点
+	public static List<Router> NextNode(List<Router> listRouter,JSONObject obj) {
+		
+		Router router;
+		if (listRouter != null && listRouter.size() != 0) {
+			// 非条件节点
+			if (listRouter.size() == 1) {
+				router = listRouter.get(0);
+				// 0未执行 1执行中 2已执行
+				switch (router.getExecute()) {
+				case UNEXECUTED:
+					switch (router.getClassName()) {
+					case CREATOR:
+						Console.log("发起人逻辑");
+						router.setExecute(EXECUTED);
+						router.setFlow(true);
+						router.getRelation().get(0).setName(obj.get("name",String.class));
+						NextNode(router.getChildren(),obj);
+						break;
+					case AUDIT:
+						Console.log("审批人逻辑");
+						router.setExecute(EXECUTING);
+						router.setFlow(true);
+						
+						List<User> listUser = router.getRelation().get(0).getUsers();
+						user:
+							for (int i = 0; i < listUser.size(); i++) {
+								String execute = listUser.get(i).getExecute();
+								switch (execute) {
+								case UNEXECUTED:
+									listUser.get(i).setExecute(EXECUTING);
+									break user;
+								case EXECUTING:
+									listUser.get(i).setExecute(EXECUTED);
+									break;
+								}
+							}
+						
+						
+						
+						break;
+					case COPY:
+						Console.log("抄送人逻辑");
+						router.setExecute(EXECUTED);
+						router.setFlow(true);
+						List<Relation> listRelations = router.getRelation();
+						for (int i = 0; i < listRelations.size(); i++) {
+							// 装配 部门人员
+							if (RELATION_TYPE_DEPARTMENT.equals(listRelations.get(i).getType())) {
+								List<YgglMainEmp> listYgglMainEmp = selectOtherlistent(obj.get("orgCode",Integer.class), Integer.valueOf(listRelations.get(i).getDepartmentId()));
+								
+								List<User> listUsers = new ArrayList<User>();
+								for (YgglMainEmp emp : listYgglMainEmp) {
+									User user = new User();
+									user.setName(emp.getName());
+									user.setId(String.valueOf(emp.getEmpNum()));
+									listUsers.add(user);
+								}
+								
+							}else if (RELATION_TYPE_USERS.equals(listRelations.get(i).getType())) {
+								
+							}
+						}
+						NextNode(router.getChildren(),obj);
+						break;
+					default:
+						break;
+					}
+					break;
+				case EXECUTING:
+					switch (router.getClassName()) {
+					case AUDIT:
+						Console.log("下一个审批人逻辑");
+						
+						router.setFlow(true);
+						boolean executeFlog = true;
+						List<User> listUser = router.getRelation().get(0).getUsers();
+						user:
+							for (int i = 0; i < listUser.size(); i++) {
+								String execute = listUser.get(i).getExecute();
+								switch (execute) {
+								case UNEXECUTED:
+									listUser.get(i).setExecute(EXECUTING);
+									if (!EXECUTED.equals(listUser.get(i).getExecute())) {
+										executeFlog = false;
+									}
+									break user;
+								case EXECUTING:
+									listUser.get(i).setExecute(EXECUTED);
+									break;
+								}
+							}
+						if (executeFlog) {
+							router.setExecute(EXECUTED);
+						}
+						
+						NextNode(router.getChildren(),obj);
+						break;
+					default:
+						break;
+					}
+					break;
+				case EXECUTED:
+					Console.log("下一个节点");
+					NextNode(router.getChildren(),obj);
+					break;
+				}
+				
+			} else {
+				// 条件节点
+				rulefor:
+				for (Router routerRule : listRouter) {
+					switch (routerRule.getExecute()) {
+					case UNEXECUTED:
+						boolean condition_b = true;
+						List<Condition> listCondition = routerRule.getCondition();
+						if (listCondition == null || listCondition.size() == 0) {
+							routerRule.setFlow(true);
+						}else {
+							for (Condition condition : listCondition) {
+								// 判断条件
+								if (!stringCompare(obj.get(condition.getKey(),String.class), condition.getValue(), condition.getFormat())) {
+									condition_b = false;
+								}
+							}
+						}
+						
+						routerRule.setFlow(condition_b);
+						routerRule.setExecute(EXECUTED);
+						if (routerRule.getFlow() == true) {
+							Console.log("条件逻辑");
+							NextNode(routerRule.getChildren(),obj);
+						}
+						break;
+					case EXECUTED:
+						NextNode(routerRule.getChildren(),obj);
+						break rulefor;
+					}
+					
+				}
+				Console.log("特殊情况!");
+			}
+		}
+		
+		return listRouter;
+
+	};
+	
+	// 执行下一个节点
+	public static List<Router> NextNodeing(List<Router> listRouter,JSONObject obj) {
+		
+		Router router;
+		if (listRouter != null && listRouter.size() != 0) {
+			// 非条件节点
+			if (listRouter.size() == 1) {
+				router = listRouter.get(0);
+				// 0未执行 1执行中 2已执行
+				switch (router.getExecute()) {
+				case UNEXECUTED:
+					switch (router.getClassName()) {
+					case CREATOR:
+						Console.log("发起人逻辑");
+						router.setExecute(EXECUTED);
+						router.setFlow(true);
+						router.getRelation().get(0).setName(obj.get("name",String.class));
+						NextNode(router.getChildren(),obj);
+						break;
+					case AUDIT:
+						Console.log("审批人逻辑");
+						router.setExecute(EXECUTING);
+						router.setFlow(true);
+						
+						List<User> listUser = router.getRelation().get(0).getUsers();
+						user:
+							for (int i = 0; i < listUser.size(); i++) {
+								String execute = listUser.get(i).getExecute();
+								switch (execute) {
+								case UNEXECUTED:
+									listUser.get(i).setExecute(EXECUTING);
+									break user;
+								case EXECUTING:
+									listUser.get(i).setExecute(EXECUTED);
+									break;
+								}
+							}
+						
+						
+						
+						break;
+					case COPY:
+						Console.log("抄送人逻辑");
+						router.setExecute(EXECUTED);
+						router.setFlow(true);
+						List<Relation> listRelations = router.getRelation();
+						for (int i = 0; i < listRelations.size(); i++) {
+							// 装配 部门人员
+							if (RELATION_TYPE_DEPARTMENT.equals(listRelations.get(i).getType())) {
+								List<YgglMainEmp> listYgglMainEmp = selectOtherlistent(obj.get("orgCode",Integer.class), Integer.valueOf(listRelations.get(i).getDepartmentId()));
+								
+								List<User> listUsers = new ArrayList<User>();
+								for (YgglMainEmp emp : listYgglMainEmp) {
+									User user = new User();
+									user.setName(emp.getName());
+									user.setId(String.valueOf(emp.getEmpNum()));
+									listUsers.add(user);
+								}
+								
+							}else if (RELATION_TYPE_USERS.equals(listRelations.get(i).getType())) {
+								
+							}
+						}
+						NextNode(router.getChildren(),obj);
+						break;
+					default:
+						break;
+					}
+					break;
+				case EXECUTING:
+					switch (router.getClassName()) {
+					case AUDIT:
+						Console.log("下一个审批人逻辑");
+						
+						router.setFlow(true);
+						boolean executeFlog = true;
+						List<User> listUser = router.getRelation().get(0).getUsers();
+						user:
+							for (int i = 0; i < listUser.size(); i++) {
+								String execute = listUser.get(i).getExecute();
+								switch (execute) {
+								case UNEXECUTED:
+									listUser.get(i).setExecute(EXECUTING);
+									break user;
+								case EXECUTING:
+									listUser.get(i).setExecute(EXECUTED);
+									break;
+								}
+								if (!EXECUTED.equals(listUser.get(i).getExecute())) {
+									executeFlog = false;
+								}
+								
+							}
+						if (executeFlog) {
+							router.setExecute(EXECUTED);
+						}
+						
+						NextNode(router.getChildren(),obj);
+						break;
+					default:
+						break;
+					}
+					break;
+				case EXECUTED:
+					Console.log("下一个节点");
+					NextNode(router.getChildren(),obj);
+					break;
+				}
+				
+			} else {
+				// 条件节点
+				rulefor:
+				for (Router routerRule : listRouter) {
+					switch (routerRule.getExecute()) {
+					case UNEXECUTED:
+						boolean condition_b = true;
+						List<Condition> listCondition = routerRule.getCondition();
+						if (listCondition == null || listCondition.size() == 0) {
+							routerRule.setFlow(true);
+						}else {
+							for (Condition condition : listCondition) {
+								// 判断条件
+								if (!stringCompare(obj.get(condition.getKey(),String.class), condition.getValue(), condition.getFormat())) {
+									condition_b = false;
+								}
+							}
+						}
+						
+						routerRule.setFlow(condition_b);
+						routerRule.setExecute(EXECUTED);
+						if (routerRule.getFlow() == true) {
+							Console.log("条件逻辑");
+							NextNode(routerRule.getChildren(),obj);
+						}
+						break;
+					case EXECUTED:
+						NextNode(routerRule.getChildren(),obj);
+						break rulefor;
+					}
+					
+				}
+				Console.log("特殊情况!");
+			}
+		}
+		
+		return listRouter;
+		
+	};
+	
+	public static List<YgglMainEmp> selectOtherlistent(Integer orgCode, Integer id){
+		ArrayList<Integer> list = new ArrayList<Integer>();
+		QueryWrapper<ZzglBmgwM> queryWrapper = new QueryWrapper<ZzglBmgwM>();
+		queryWrapper.eq("org_code", orgCode);
+		List<ZzglBmgwM> zzglBmgwMs = ZzglBmgwM.builder().build().selectList(queryWrapper);
+		list.add(id);
+		ZzglBmgwM.getDepts(list, id, zzglBmgwMs);
+
+		if (list == null || list.size() == 0) {
+			return null;
+		} else {
+			LambdaQueryWrapper<YgglMainEmp> ygglMainEmpsLambdaQueryWrapper = new LambdaQueryWrapper<>();
+			ygglMainEmpsLambdaQueryWrapper
+					.select(YgglMainEmp::getId, YgglMainEmp::getEmpNum, YgglMainEmp::getName, YgglMainEmp::getPhone,
+							YgglMainEmp::getBmgwId)
+					.eq(YgglMainEmp::getOrgCode, orgCode).and(i -> i.in(YgglMainEmp::getBmgwId, list.toArray()));
+			List<YgglMainEmp> ygglMainEmps = YgglMainEmp.builder().build().selectList(ygglMainEmpsLambdaQueryWrapper);
+			return ygglMainEmps;
+		}
+
+	}
+	
+	private static boolean stringCompare(String s1,String s2,String symbol) {
+		double d1;
+		double d2;
+		switch (symbol) {
+		case "<":
+			d1 = Double.parseDouble(s1);
+			d2 = Double.parseDouble(s2);
+			if (NumberUtil.compare(d1,d2) == -1) return true;
+			break;
+		case "<=":
+			d1 = Double.parseDouble(s1);
+			d2 = Double.parseDouble(s2);
+			if (NumberUtil.compare(d1,d2) == -1 || NumberUtil.compare(d1,d2) == 0) return true;
+			break;
+		case "=":
+			if (s2.equals(s1)) return true;
+			break;
+		case ">":
+			d1 = Double.parseDouble(s1);
+			d2 = Double.parseDouble(s2);
+			if (NumberUtil.compare(d1,d2) == 1) return true;
+			break;
+		case ">=":
+			d1 = Double.parseDouble(s1);
+			d2 = Double.parseDouble(s2);
+			if (NumberUtil.compare(d1,d2) == 0 || NumberUtil.compare(d1,d2) == 1) return true;
+			break;
+		}
+		return false;
+
+	};
+	
+
+}
--
libgit2 0.26.0