RouterUtils.java 21.7 KB
Newer Older
1
package cn.timer.api.utils.router;
2 3

import java.util.ArrayList;
tangzhaoqian committed
4
import java.util.Date;
5
import java.util.List;
tangzhaoqian committed
6
import java.util.stream.Collectors;
7

8 9
import org.apache.commons.collections4.ListUtils;

10 11
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
tangzhaoqian committed
12
import com.mysql.cj.x.protobuf.MysqlxPrepare.Execute;
13

14
import cn.hutool.core.bean.BeanUtil;
tangzhaoqian committed
15
import cn.hutool.core.collection.CollUtil;
16
import cn.hutool.core.collection.CollectionUtil;
tangzhaoqian committed
17 18
import cn.hutool.core.collection.ListUtil;
import cn.hutool.core.convert.Convert;
19
import cn.hutool.core.convert.ConvertException;
20 21
import cn.hutool.core.lang.Console;
import cn.hutool.json.JSONObject;
22
import cn.timer.api.bean.spmk.SpmkApproveExecuteRecord;
23
import cn.timer.api.bean.spmk.SpmkApproveSummary;
24
import cn.timer.api.bean.spmk.SpmkExecutor;
25 26
import cn.timer.api.bean.yggl.YgglMainEmp;
import cn.timer.api.bean.zzgl.ZzglBmgwM;
27
import cn.timer.api.config.enuminterface.SpmkEnumInterface.ExecuteRecordSts;
tangzhaoqian committed
28
import cn.timer.api.config.enuminterface.SpmkEnumInterface.ExecutorSts;
29
import cn.timer.api.config.enuminterface.SpmkEnumInterface.ParticipatorType;
30
import cn.timer.api.config.enums.CommonEnum;
31
import cn.timer.api.dto.spmk.Condition;
32 33
import cn.timer.api.dto.spmk.FlowChildren;
import cn.timer.api.dto.spmk.FromData;
34 35 36 37 38 39 40 41 42 43 44
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 {
45 46 47
	/**
	 * 0 未执行
	 */
48
	private final static String UNEXECUTED = "0";
49 50 51
	/**
	 * 1 执行中
	 */
52
	private final static String EXECUTING = "1";
53 54 55
	/**
	 * 2 已执行
	 */
56
	private final static String EXECUTED = "2";
57 58 59
	/**
	 * creator 抄送人
	 */
60
	private final static String CREATOR = "creator";
61 62 63
	/**
	 * audit 审批人
	 */
64
	private final static String AUDIT = "audit";
65 66 67
	/**
	 * copy 抄送人
	 */
68
	private final static String COPY = "copy";
69 70 71
	/**
	 * department 部门类型
	 */
72
	private final static String RELATION_TYPE_DEPARTMENT = "department";
73
	/**
tangzhaoqian committed
74 75 76 77
	 * department 部门类型
	 */
	private final static String RELATION_TYPE_EXECUTIVE = "executive";
	/**
78 79
	 * users 用户类型
	 */
80 81
	private final static String RELATION_TYPE_USERS = "users";

82
	public static List<Router> NextNode(List<Router> listRouter,JSONObject obj, boolean isFirse) throws NumberFormatException, ConvertException, Exception {
83 84
		return NextNode(listRouter, obj, isFirse, false);
	}
85 86

	// 执行下一个节点
87
	public static List<Router> NextNode(List<Router> listRouter,JSONObject obj, boolean isFirse, boolean isAuditNext) throws NumberFormatException, ConvertException, Exception {
88 89
		
		Router router;
90
		if (CollectionUtil.isNotEmpty(listRouter)) {
91 92 93
			// 非条件节点
			if (listRouter.size() == 1) {
				router = listRouter.get(0);
94 95 96 97
				if (router.getExecute() == null) {
					System.out.println("默认UNEXECUTED");
					router.setExecute(UNEXECUTED);
				}
98 99 100 101 102 103 104 105
				// 0未执行 1执行中 2已执行
				switch (router.getExecute()) {
				case UNEXECUTED:
					switch (router.getClassName()) {
					case CREATOR:
						Console.log("发起人逻辑");
						router.setExecute(EXECUTED);
						router.setFlow(true);
tangzhaoqian committed
106 107 108
						
						List<User> users = new ArrayList<User>();
						User userFirst =  User.builder()
tangzhaoqian committed
109 110 111
								.name(obj.getStr("initiator"))
								.id(obj.getStr("id"))
								.headUrl(obj.getStr("headUrl"))
112
								.execute(UNEXECUTED)
tangzhaoqian committed
113 114 115 116 117 118 119
								.build();
						users.add(userFirst);
						List<Relation> relations = new ArrayList<Relation>();
						Relation relation = Relation.builder().type("user").users(users).build();
						relations.add(relation);
						
						router.setRelation(relations);
tangzhaoqian committed
120
//						router.getRelation().get(0).setName(obj.getStr("initiator"));
121 122
						
						NextNode(router.getChildren(),obj, isFirse, isAuditNext);
123 124 125 126 127
						break;
					case AUDIT:
						Console.log("审批人逻辑");
						router.setExecute(EXECUTING);
						router.setFlow(true);
tangzhaoqian committed
128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155
						Relation r = CollectionUtil.isNotEmpty(router.getRelation()) ? router.getRelation().get(0) : null;
//						if (r != null && RELATION_TYPE_EXECUTIVE.equals(r.getType())) {
//							Integer leaderId = selectLeaderEmpNumById(
//										obj.getInt("orgCode"), 
//										obj.getInt("id"), 
//										r.getUpward());
//							
//							if (leaderId != null) {
//								YgglMainEmp emp = YgglMainEmp.builder().build();
//								emp = emp.selectOne(new QueryWrapper<YgglMainEmp>().lambda()
//										.select(YgglMainEmp::getName, YgglMainEmp::getEmpNum, YgglMainEmp::getHeadUrl)
//										.eq(YgglMainEmp::getEmpNum, leaderId)
//										.eq(YgglMainEmp::getOrgCode, obj.getInt("orgCode")));
//								
//								if (emp != null) {
//									User user = User.builder()
//											.name(emp.getName())
//											.id(Convert.toStr(emp.getEmpNum()))
//											.headUrl(emp.getHeadUrl())
//											.execute(EXECUTING)
//											.build();
//									
//									router.getRelation().get(0).setUsers(ListUtil.toList(user));
//								}
//							}
//						}
						if (r != null && RELATION_TYPE_USERS.equals(r.getType())) {
							List<User> listUser = router.getRelation().get(0).getUsers();
tangzhaoqian committed
156
							user:
157 158 159 160 161
							for (int i = 0; i < listUser.size(); i++) {
								String execute = listUser.get(i).getExecute();
								switch (execute) {
								case UNEXECUTED:
									listUser.get(i).setExecute(EXECUTING);
162
									// 首次发起申请时,写入 审批人名称 至 obj 中
163
									if (isFirse && obj.getStr("current_approver") == null ) {
164
										obj.set("current_approver", listUser.get(i).getName());
165
									}
166
									
167 168 169
									break user;
								}
							}
tangzhaoqian committed
170 171
						}
						
172
						isAuditNext = true;
tangzhaoqian committed
173
						
174
						NextNode(router.getChildren(), obj , isFirse, isAuditNext);
175 176
						break;
					case COPY:
177 178 179
						if (!isAuditNext) {
							router.setExecute(EXECUTED);
						}
180 181 182 183 184
						Console.log("抄送人逻辑");
						router.setFlow(true);
						List<Relation> listRelations = router.getRelation();
						for (int i = 0; i < listRelations.size(); i++) {
							// 装配 部门人员
185 186 187
							if (RELATION_TYPE_DEPARTMENT.equals(listRelations.get(i).getType()) && listRelations.get(i).getDepartmentId() != null) {
								
								List<YgglMainEmp> listYgglMainEmp = selectOtherlistent(Integer.parseInt(obj.get("orgCode",FromData.class).getValue().trim()), Integer.valueOf(listRelations.get(i).getDepartmentId().trim()));
tangzhaoqian committed
188 189 190 191 192 193 194 195 196 197 198 199
								
								if (listYgglMainEmp != null && listYgglMainEmp.size() > 0) {
									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);
									}
									listRelations.get(i).setUsers(listUsers);
								}else {
									listRelations.get(i).setUsers(null);
200
								}
tangzhaoqian committed
201
								
202
								
203
							}else if (RELATION_TYPE_USERS.equals(listRelations.get(i).getType())) {
204

205 206
							}
						}
207
						NextNode(router.getChildren(), obj , isFirse, isAuditNext);
208 209 210 211 212 213 214
						break;
					}
					break;
				case EXECUTING:
					switch (router.getClassName()) {
					case AUDIT:
						router.setFlow(true);
215 216 217 218 219 220 221 222 223 224
						if (!isFirse) {
							Console.log("下一个审批人逻辑");
							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);
225
										executeFlog = false;
226 227 228 229
										break user;
									case EXECUTING:
										listUser.get(i).setExecute(EXECUTED);
										break;
230 231
									}
								}
232 233 234
							
							if (executeFlog) {
								router.setExecute(EXECUTED);
235
							}
236
							
237
						}
238
						NextNode(router.getChildren(),obj , isFirse, isAuditNext);
239 240 241 242 243
						break;
					}
					break;
				case EXECUTED:
					Console.log("下一个节点");
244
					NextNode(router.getChildren(),obj , isFirse, isAuditNext);
245 246 247 248 249 250 251 252 253 254 255 256 257 258
					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 {
259
							Compare compare;
260
							for (Condition condition : listCondition) {
261
									for (String string : condition.getValues()) {
262 263 264 265
										
										// 简单工厂模式 - 判断条件
										compare = CompareFactory.createCompare(obj.get(condition.getKey(),FromData.class).getValue(), string, condition.getFormat());
										if (!compare.GetResutl()) {
266 267
											condition_b = false;
										}
268
										
269
									}
270 271 272 273 274
							}
						}
						
						routerRule.setFlow(condition_b);
						routerRule.setExecute(EXECUTED);
275
						if (routerRule.getFlow()) {
276
							Console.log("条件逻辑");
277
							NextNode(routerRule.getChildren(), obj , isFirse, isAuditNext);
278 279 280
						}
						break;
					case EXECUTED:
281
						if (routerRule.getFlow()) {
282
							NextNode(routerRule.getChildren(), obj , isFirse, isAuditNext);
283
						}
284 285 286 287
						break rulefor;
					}
					
				}
288 289
			
				Console.log("最后节点");
290 291
			}
		}
292

293 294 295 296
		return listRouter;

	};
	
tangzhaoqian committed
297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326
	public static Integer selectLeaderEmpNumById(Integer orgCode, Integer id, Integer leave) {
		YgglMainEmp mainEmp = YgglMainEmp.builder().build().selectOne(new QueryWrapper<YgglMainEmp>().lambda()
				.select(YgglMainEmp::getBmgwId)
				.eq(YgglMainEmp::getEmpNum, id)
				.eq(YgglMainEmp::getOrgCode, orgCode));
		Integer gWId = mainEmp != null ? mainEmp.getBmgwId() : null;
		
		// 企业所有部门岗位
		List<ZzglBmgwM> listBM = ZzglBmgwM.builder().build()
				.selectList(new QueryWrapper<ZzglBmgwM>().lambda().eq(ZzglBmgwM::getOrgCode, orgCode));
		
		// 岗位
		ZzglBmgwM gW = CollUtil.getFirst(listBM.stream().filter(bM -> bM.getId().equals(gWId)).collect(Collectors.toList()));
		
		// 岗位id
		Integer baseBmgwId = gW != null ? gW.getUpId() : null;
		
		// 指定 主管id
		Integer leaderId = null;
		Integer bmgwLeaderId;
		for (int i = 0,n = leave + 1; i < n; i++) {
			ZzglBmgwM bmgwM = getLeaderEmp(listBM, baseBmgwId);
			bmgwLeaderId = bmgwM != null ? bmgwM.getLeader() : null;
			if (i == n-1) {
				leaderId = bmgwLeaderId;
			}
		}
		
		return leaderId;
	}
327
	
tangzhaoqian committed
328 329 330 331 332
	public static ZzglBmgwM getLeaderEmp(List<ZzglBmgwM> listBM, Integer baseBmgwId) {
		ZzglBmgwM zzglBmgwM =  baseBmgwId != null ? 
				CollUtil.getFirst(listBM.stream().filter(bM -> bM.getId().equals(baseBmgwId)).collect(Collectors.toList())) : null;
		return zzglBmgwM;
	}
333 334 335
	
	public static List<YgglMainEmp> selectOtherlistent(Integer orgCode, Integer id){
		ArrayList<Integer> list = new ArrayList<Integer>();
336 337
		List<ZzglBmgwM> zzglBmgwMs = ZzglBmgwM.builder().build().selectList(new QueryWrapper<ZzglBmgwM>().lambda()
				.eq(ZzglBmgwM::getOrgCode, orgCode));
338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354
		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;
		}

	}
	
355 356 357 358 359 360 361 362 363 364 365 366
	public static void getIsFlowChildren(List<Router> listRouter, List<FlowChildren> listFlowChildren) {
		// TODO Auto-generated method stub
		Router router;
		if (listRouter != null && listRouter.size() == 1) {
			router = listRouter.get(0);
			if (router.getFlow()) {
				FlowChildren fc = FlowChildren.builder().build();
				BeanUtil.copyProperties(router, fc, "condition","children");
				listFlowChildren.add(fc);
				getIsFlowChildren(router.getChildren(), listFlowChildren);
			}
			
367
		}else if (listRouter != null && listRouter.size() > 1) {
368 369 370 371 372 373
			for (Router router2 : listRouter) {
				if (router2.getFlow()) {
					getIsFlowChildren(router2.getChildren(), listFlowChildren);
				}
			}
		}
374 375 376 377 378 379 380

	};
	
	
	
	
	// 审批执行记录 持久化
381
	public static void insertogExecuteRecord(List<FlowChildren> listFlowChildren,Integer asId) throws Exception{
382

383
		for_insert:
384
		for (int i = 0,m = listFlowChildren.size() ; i < m; i++) {
tangzhaoqian committed
385 386
			if (UNEXECUTED.equals(listFlowChildren.get(i).getExecute())) {
				i++;
387
				continue;
tangzhaoqian committed
388 389
			}
				
390 391
			// ClassName 区分参与审批流程人的角色 CREATOR(发起人)、AUDIT(审核人)、COPY(抄送人)
			// 各个角色的逻辑不同
392 393 394 395 396
			switch (listFlowChildren.get(i).getClassName()) {
			case CREATOR:
				SpmkApproveExecuteRecord aer = SpmkApproveExecuteRecord
						.builder()
						.approveSummaryId(asId)
397
						.name(ParticipatorType.INITIATOR.getName())
398 399
						.type(ParticipatorType.INITIATOR.ordinal())
						.sts(ExecuteRecordSts.AGREE.ordinal())
400 401 402 403 404 405 406 407 408
						.build();
				// 新增 审批执行记录
				aer.insert();
				
				// 新增 执行人
				User user = listFlowChildren.get(i).getRelation().get(0).getUsers().get(0);
				SpmkExecutor.builder()
				.approveExecuteRecordId(aer.getId())
				.empNum(Integer.parseInt(user.getId()))
409
				.operatorHeaderUrl(user.getHeadUrl())
410
				.executorName(user.getName())
tangzhaoqian committed
411
				.sts(ExecutorSts.AGREE.ordinal())
412 413 414 415 416 417 418
				.build()
				.insert();
				break;
			case AUDIT:
				SpmkApproveExecuteRecord aer2 = SpmkApproveExecuteRecord
				.builder()
				.approveSummaryId(asId)
419
				.name(ParticipatorType.APPROVER.getName())
420 421
				.type(ParticipatorType.APPROVER.ordinal())
				.sts(ExecuteRecordSts.IN_EXECUTION.ordinal())
422 423 424 425 426 427 428 429 430 431 432
				.build();
				// 新增 审批执行记录
				aer2.insert();

				// 新增 执行人
				List<User> listUser = listFlowChildren.get(i).getRelation().get(0).getUsers();
				
				for (User user2 : listUser) {
					SpmkExecutor executor = SpmkExecutor.builder()
					.approveExecuteRecordId(aer2.getId())
					.empNum(Integer.parseInt(user2.getId()))
433
					.operatorHeaderUrl(user2.getHeadUrl())
434 435 436 437
					.executorName(user2.getName())
					.build();
					switch (user2.getExecute()) {
					case EXECUTING:
tangzhaoqian committed
438
						executor.setSts(ExecutorSts.IN_EXECUTION.ordinal());
439
						executor.insert();
440
						break for_insert;
441
					case EXECUTED:
tangzhaoqian committed
442
						executor.setSts(ExecutorSts.AGREE.ordinal());
443 444 445 446 447 448 449 450 451
						executor.insert();
						break;
					}
				}
				break;
			case COPY:
				SpmkApproveExecuteRecord aer3 = SpmkApproveExecuteRecord
				.builder()
				.approveSummaryId(asId)
452
				.name(ParticipatorType.COPY.getName())
453 454
				.type(ParticipatorType.COPY.ordinal())
				.sts(ExecuteRecordSts.AGREE.ordinal())
455 456 457 458 459 460 461 462 463 464 465 466 467 468 469
				.build();
				// 新增 审批执行记录
				aer3.insert();

				List<Relation> listRelation = listFlowChildren.get(i).getRelation();
				
				for (Relation relation : listRelation) {
					List<User> listUser2 = relation.getUsers();
					
					// 新增 执行人
					for (User user2 : listUser2) {
						SpmkExecutor executor = SpmkExecutor.builder()
						.approveExecuteRecordId(aer3.getId())
						.empNum(Integer.parseInt(user2.getId()))
						.executorName(user2.getName())
470
						.operatorHeaderUrl(user2.getHeadUrl())
tangzhaoqian committed
471
						.sts(ExecutorSts.AGREE.ordinal())
472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488
						.build();
						executor.insert();
					}
				}
				break;
			}
		}
	}
	
	/**
	 * 审批持久化
	 * @param listFlowChildren	节点
	 * @param asId				审批汇总Id
	 * @param executorId		执行人记录Id
	 * @param opinion			意见
	 * @param sts				状态 1执行中 2通过 3拒绝
	 */
489
	public static void approving(List<FlowChildren> listFlowChildren,Integer asId,Integer executeRecordId, Integer executorId, String opinion,Integer sts,User redeployUser ) throws Exception {
490
		
491
		boolean hasNextApprover = false;
492
		
493 494 495
		for (int i = 0,n = listFlowChildren.size(); i < n; i++) {

			// 新增 执行人
tangzhaoqian committed
496 497 498 499 500 501 502 503
			List<User> listUser = CollUtil.toList();
			
			List<Relation> listR = listFlowChildren.get(i).getRelation();
			if (CollectionUtil.isNotEmpty(listR)) {
				listUser = listR.get(0).getUsers();
			}
			
			if (EXECUTING.equals(listFlowChildren.get(i).getExecute())) {
504 505 506
				
				for (int i_user = 0, n_user = listUser.size(); i_user < n_user; i_user++) {
					if (EXECUTED.equals(listUser.get(i_user).getExecute())) {
tangzhaoqian committed
507
						
508 509 510 511 512 513
					}else if (EXECUTING.equals(listUser.get(i_user).getExecute())) {
						SpmkExecutor.builder()
							.id(executorId)
							.opinion(opinion)
							.empNum(Integer.parseInt(listUser.get(i_user).getId()))
							.executorName(listUser.get(i_user).getName())
514
							.operatorHeaderUrl(listUser.get(i_user).getHeadUrl())
515 516 517 518
							.sts(sts)
							.build()
						.updateById();
						listUser.get(i_user).setExecute(EXECUTED);
tangzhaoqian committed
519 520 521
						
						// 历史审批人
						SpmkApproveSummary.builder().id(asId).historyApprover(listUser.get(i_user).getName()).build().updateById();
522
						// 0未执行 1执行中 2同意 3拒绝 4 转派
523
						if (sts == ExecutorSts.REFUSE.ordinal()) {
524
							// 更新 审批汇总 状态
525
							SpmkApproveSummary.builder().id(asId).currentApprover(CommonEnum.NULL_STR.getDesc()).endTime(new Date()).sts(sts).build().updateById();
526 527 528 529 530 531 532 533
							SpmkApproveExecuteRecord
									.builder()
									.id(executeRecordId)
									.sts(sts)
									.build()
									// 更新 审批执行记录
									.updateById();
							listFlowChildren.get(i_user).setExecute(EXECUTED);
534
							return;
535
						//转派 处理
536
						//在 原审批人 列表中 插入 一个被转派人(审批人)
537
						}else if (sts == ExecutorSts.REDEPLOY.ordinal()) {
538 539 540 541 542
							List<User> users1 = CollectionUtil.sub(listUser, 0, i_user+1);
							users1.add(redeployUser);
							List<User> users2 = CollectionUtil.sub(listUser, i_user+1, listUser.size());
							listUser = ListUtils.union(users1, users2);
							n_user = listUser.size();
543 544 545 546 547 548
						}
					}else if (UNEXECUTED.equals(listUser.get(i_user).getExecute())) {
						SpmkExecutor.builder()
							.approveExecuteRecordId(executeRecordId)
							.empNum(Integer.parseInt(listUser.get(i_user).getId()))
							.executorName(listUser.get(i_user).getName())
549
							.operatorHeaderUrl(listUser.get(i_user).getHeadUrl())
tangzhaoqian committed
550
							.sts(ExecutorSts.IN_EXECUTION.ordinal())
551 552 553 554
							.build()
							.insert();
						hasNextApprover = true;
						listUser.get(i_user).setExecute(EXECUTING);
tangzhaoqian committed
555 556 557
						
						// 当前审批人
						SpmkApproveSummary.builder().id(asId).currentApprover(listUser.get(i_user).getName()).build().updateById();
558 559 560
						
						// 处理了 下一个审批人 则跳出循环
						break;
561 562 563
					}
				}
				
564
				// 无下一个审批人 则更新 节点状态 为 EXECUTED(已执行)
565 566 567 568
				if (!hasNextApprover) {
					SpmkApproveExecuteRecord aer = SpmkApproveExecuteRecord
							.builder()
							.id(executeRecordId)
569
							.sts(ExecutorSts.AGREE.ordinal())
570 571 572 573 574 575 576 577 578 579 580 581 582
							.build();
							// 更新 审批执行记录
							aer.updateById();
					listFlowChildren.get(i).setExecute(EXECUTED);
				}
				
			}else if (UNEXECUTED.equals(listFlowChildren.get(i).getExecute())) {
				if (!hasNextApprover) {
					switch (listFlowChildren.get(i).getClassName()) {
					case CREATOR:
						SpmkApproveExecuteRecord aer = SpmkApproveExecuteRecord
								.builder()
								.approveSummaryId(asId)
583 584
								.name(ParticipatorType.INITIATOR.getName())
								.type(ParticipatorType.INITIATOR.ordinal())
585
								.sts(ExecuteRecordSts.AGREE.ordinal())
586 587 588 589 590 591 592 593 594 595
								.build();
						// 新增 审批执行记录
						aer.insert();
						
						// 新增 执行人
						User user = listFlowChildren.get(i).getRelation().get(0).getUsers().get(0);
						SpmkExecutor.builder()
						.approveExecuteRecordId(aer.getId())
						.empNum(Integer.parseInt(user.getId()))
						.executorName(user.getName())
596
						.operatorHeaderUrl(user.getHeadUrl())
tangzhaoqian committed
597
						.sts(ExecutorSts.AGREE.ordinal())
598 599 600 601 602 603 604 605 606
						.build()
						.insert();
						
						listFlowChildren.get(i).setExecute(EXECUTED);
						break;
					case AUDIT:
						SpmkApproveExecuteRecord aer2 = SpmkApproveExecuteRecord
						.builder()
						.approveSummaryId(asId)
607
						.name(ParticipatorType.APPROVER.getName())
608 609
						.type(ParticipatorType.APPROVER.ordinal())
						.sts(ExecuteRecordSts.IN_EXECUTION.ordinal())
610 611 612 613 614 615 616 617 618
						.build();
						// 新增 审批执行记录
						aer2.insert();

						for (int i_user2 = 0,n_user2 = listUser.size(); i_user2 < n_user2; i_user2++) {
							SpmkExecutor executor = SpmkExecutor.builder()
									.approveExecuteRecordId(aer2.getId())
									.empNum(Integer.parseInt(listUser.get(i_user2).getId()))
									.executorName(listUser.get(i_user2).getName())
619
									.operatorHeaderUrl(listUser.get(i_user2).getHeadUrl())
tangzhaoqian committed
620
									.sts(ExecutorSts.IN_EXECUTION.ordinal())
621 622 623 624 625 626 627 628 629 630 631 632
									.build();
									executor.insert();
									
									listUser.get(i_user2).setExecute(EXECUTING);
						}
						
						listFlowChildren.get(i).setExecute(EXECUTING);
						break;
					case COPY:
						SpmkApproveExecuteRecord aer3 = SpmkApproveExecuteRecord
						.builder()
						.approveSummaryId(asId)
633
						.name(ParticipatorType.COPY.getName())
634 635
						.type(ParticipatorType.COPY.ordinal())
						.sts(ExecuteRecordSts.AGREE.ordinal())
636 637 638 639 640 641 642 643
						.build();
						// 新增 审批执行记录
						aer3.insert();

						List<Relation> listRelation = listFlowChildren.get(i).getRelation();
						
						for (Relation relation : listRelation) {
							List<User> listUser2 = relation.getUsers();
644 645 646 647 648 649 650 651 652 653 654 655
							if (listUser2 != null) {
								// 新增 执行人
								for (User user2 : listUser2) {
									SpmkExecutor executor = SpmkExecutor.builder()
									.approveExecuteRecordId(aer3.getId())
									.empNum(Integer.parseInt(user2.getId()))
									.executorName(user2.getName())
									.operatorHeaderUrl(user2.getHeadUrl())
									.sts(ExecutorSts.AGREE.ordinal())
									.build();
									executor.insert();
								}
656 657 658 659 660 661 662 663 664
							}
						}
						
						listFlowChildren.get(i).setExecute(EXECUTED);
						break;
					}
				}
			}
		}
665
		
666
	}
667 668

}