Эх сурвалжийг харах

人员档案卡判断非当前组织机构下的处理剔除逻辑调整

WuYi 12 цаг өмнө
parent
commit
9e2d0b95cd

+ 37 - 24
ibps-bpmn-root/modules/bpmn-biz/src/main/java/com/lc/ibps/bpmn/service/impl/BpmTaskActionServiceImpl.java

@@ -230,32 +230,45 @@ public class BpmTaskActionServiceImpl implements BpmTaskActionService{
 				}
 				if(("Process_0v35zf8".equals(bpmTask.getProcDefKey()) || "Process_08xwabfNEW".equals(bpmTask.getProcDefKey())) && ("Activity_15dfo83".equals(bpmTask.getNodeId()) || "Activity_1iu1clq".equals(bpmTask.getNodeId())) ){ //人员档案流程的处理单独处理
 					String createBy = cmd.getCurUser();
-					String sql = "SELECT ID_,TASK_ID_,PROC_INST_ID_,EXECUTOR_ FROM IBPS_BPM_TASK_ASSIGN WHERE PROC_INST_ID_ IN('" + taskCmd.getInstId() + "')";
-					String rsms = "SELECT DISTINCT e.id_ AS employee_id,e.name_ " +
-							"FROM ibps_party_employee e " +
-							"INNER JOIN ibps_party_user_role ur ON ur.user_id_ = e.id_ " +
-							"INNER JOIN ibps_party_role r ON ur.role_id_ = r.id_ " +
-							"WHERE r.ROLE_ALIAS_ = 'rsms' " +
-							"  AND EXISTS ( " +
-							"      SELECT 1 " +
-							"      FROM ibps_party_employee e_a " +
-							"      INNER JOIN ibps_party_entity ee_a_pos " +
-							"          ON ee_a_pos.party_type_ = 'position' " +
-							"          AND FIND_IN_SET(ee_a_pos.id_, e_a.positions_) > 0 " +
-							"      CROSS JOIN ibps_party_entity ee_pos " +
-							"      WHERE e_a.id_ = '"+ createBy + "' " +
-							"        AND ee_pos.party_type_ = 'position' " +
-							"        AND FIND_IN_SET(ee_pos.id_, e.positions_) > 0 " +
-							"        AND ( " +
-							"            ee_pos.path_ LIKE CONCAT(ee_a_pos.path_, '%') " +
-							"            OR  " +
-							"            ee_a_pos.path_ LIKE CONCAT(ee_pos.path_, '%') " +
-							"        ) " +
-							"  )";
+					//String sql = "SELECT ID_,TASK_ID_,PROC_INST_ID_,EXECUTOR_ FROM IBPS_BPM_TASK_ASSIGN WHERE PROC_INST_ID_ IN('" + taskCmd.getInstId() + "')";
+					//获取所有候选人的主部门
+					String sql = " SELECT r.MAIN_PID_, t.* " +
+								 " FROM ibps_party_rel r " +
+								 " INNER JOIN IBPS_BPM_TASK_ASSIGN t ON r.sub_pid_ = t.EXECUTOR_ " +
+								 " WHERE r.biz_ = 'mainPost' " +
+								 "  AND t.PROC_INST_ID_ = '" + taskCmd.getInstId() + "'";
+					//获取发起人的组织机构
+					String position = "SELECT e.ID_ " +
+				    " FROM ibps_party_entity e " +
+					" INNER JOIN ibps_party_employee emp ON emp.id_ = '" + createBy + "' " +
+					" INNER JOIN ibps_party_entity dept ON dept.ID_ = SUBSTRING_INDEX(emp.POSITIONS_, ',', 1) " +
+					" WHERE e.PATH_ LIKE CONCAT(SUBSTRING_INDEX(dept.PATH_, '.', 1), '.%')";
+
+//					String rsms = "SELECT DISTINCT e.id_ AS employee_id,e.name_ " +
+//							"FROM ibps_party_employee e " +
+//							"INNER JOIN ibps_party_user_role ur ON ur.user_id_ = e.id_ " +
+//							"INNER JOIN ibps_party_role r ON ur.role_id_ = r.id_ " +
+//							"WHERE r.ROLE_ALIAS_ = 'rsms' " +
+//							"  AND EXISTS ( " +
+//							"      SELECT 1 " +
+//							"      FROM ibps_party_employee e_a " +
+//							"      INNER JOIN ibps_party_entity ee_a_pos " +
+//							"          ON ee_a_pos.party_type_ = 'position' " +
+//							"          AND FIND_IN_SET(ee_a_pos.id_, e_a.positions_) > 0 " +
+//							"      CROSS JOIN ibps_party_entity ee_pos " +
+//							"      WHERE e_a.id_ = '"+ createBy + "' " +
+//							"        AND ee_pos.party_type_ = 'position' " +
+//							"        AND FIND_IN_SET(ee_pos.id_, e.positions_) > 0 " +
+//							"        AND ( " +
+//							"            ee_pos.path_ LIKE CONCAT(ee_a_pos.path_, '%') " +
+//							"            OR  " +
+//							"            ee_a_pos.path_ LIKE CONCAT(ee_pos.path_, '%') " +
+//							"        ) " +
+//							"  )";
 					List<Map<String, Object>> list = (List<Map<String, Object>>) commonDao.query(sql); //原来的处理人
-					List<Map<String, Object>> rsList = (List<Map<String, Object>>) commonDao.query(rsms); //正确的处理人
+					List<Map<String, Object>> rsList = (List<Map<String, Object>>) commonDao.query(position); //正确的处理人
 					List<Map<String, Object>> delList = list.stream() //需要删除多余的处理人
-							.filter(map -> rsList.stream().noneMatch(bMap -> bMap.get("employee_id").equals(map.get("EXECUTOR_"))))
+							.filter(map -> rsList.stream().noneMatch(bMap -> bMap.get("ID_").equals(map.get("MAIN_PID_"))))
 							.collect(Collectors.toList());
 					String idStr = delList.stream()
 							.map(map -> String.valueOf(map.get("ID_"))) // 提取值并转为字符串

+ 37 - 24
ibps-provider-root/modules/provider-bpmn/src/main/java/com/lc/ibps/bpmn/provider/BpmInstProvider.java

@@ -597,32 +597,45 @@ public class BpmInstProvider extends GenericProvider implements IBpmInstService,
 			result.setMessage(I18nUtil.getMessage("com.lc.ibps.bpmn.provider.BpmInstProvider.start"));
              if("Process_0v35zf8".equals(cmd.getFlowKey()) || "Process_08xwabfNEW".equals(cmd.getFlowKey()) ){ //人员档案流程的处理单独处理
 				  String createBy = inst.getCreateBy();
-                  String sql = "SELECT ID_,TASK_ID_,PROC_INST_ID_,EXECUTOR_ FROM IBPS_BPM_TASK_ASSIGN WHERE PROC_INST_ID_ IN('" + inst.getId() + "')";
-				  String rsms = "SELECT DISTINCT e.id_ AS employee_id,e.name_ " +
-						 "FROM ibps_party_employee e " +
-						 "INNER JOIN ibps_party_user_role ur ON ur.user_id_ = e.id_ " +
-						 "INNER JOIN ibps_party_role r ON ur.role_id_ = r.id_ " +
-						 "WHERE r.ROLE_ALIAS_ = 'rsms' " +
-						 "  AND EXISTS ( " +
-						 "      SELECT 1 " +
-						 "      FROM ibps_party_employee e_a " +
-						 "      INNER JOIN ibps_party_entity ee_a_pos " +
-						 "          ON ee_a_pos.party_type_ = 'position' " +
-						 "          AND FIND_IN_SET(ee_a_pos.id_, e_a.positions_) > 0 " +
-						 "      CROSS JOIN ibps_party_entity ee_pos " +
-						 "      WHERE e_a.id_ = '"+ createBy + "' " +
-						 "        AND ee_pos.party_type_ = 'position' " +
-						 "        AND FIND_IN_SET(ee_pos.id_, e.positions_) > 0 " +
-						 "        AND ( " +
-						 "            ee_pos.path_ LIKE CONCAT(ee_a_pos.path_, '%') " +
-						 "            OR  " +
-						 "            ee_a_pos.path_ LIKE CONCAT(ee_pos.path_, '%') " +
-						 "        ) " +
-						 "  )";
+                  //String sql = "SELECT ID_,TASK_ID_,PROC_INST_ID_,EXECUTOR_ FROM IBPS_BPM_TASK_ASSIGN WHERE PROC_INST_ID_ IN('" + inst.getId() + "')";
+				 //String sql = "SELECT ID_,TASK_ID_,PROC_INST_ID_,EXECUTOR_ FROM IBPS_BPM_TASK_ASSIGN WHERE PROC_INST_ID_ IN('" + taskCmd.getInstId() + "')";
+				 //获取所有候选人的主部门
+				 String sql = " SELECT r.MAIN_PID_, t.* " +
+						 " FROM ibps_party_rel r " +
+						 " INNER JOIN IBPS_BPM_TASK_ASSIGN t ON r.sub_pid_ = t.EXECUTOR_ " +
+						 " WHERE r.biz_ = 'mainPost' " +
+						 "  AND t.PROC_INST_ID_ = '" + inst.getId() + "'";
+				 //获取发起人的组织机构
+				 String position = "SELECT e.ID_ " +
+						 " FROM ibps_party_entity e " +
+						 " INNER JOIN ibps_party_employee emp ON emp.id_ = '" + createBy + "' " +
+						 " INNER JOIN ibps_party_entity dept ON dept.ID_ = SUBSTRING_INDEX(emp.POSITIONS_, ',', 1) " +
+						 " WHERE e.PATH_ LIKE CONCAT(SUBSTRING_INDEX(dept.PATH_, '.', 1), '.%')";
+//				  String rsms = "SELECT DISTINCT e.id_ AS employee_id,e.name_ " +
+//						 "FROM ibps_party_employee e " +
+//						 "INNER JOIN ibps_party_user_role ur ON ur.user_id_ = e.id_ " +
+//						 "INNER JOIN ibps_party_role r ON ur.role_id_ = r.id_ " +
+//						 "WHERE r.ROLE_ALIAS_ = 'rsms' " +
+//						 "  AND EXISTS ( " +
+//						 "      SELECT 1 " +
+//						 "      FROM ibps_party_employee e_a " +
+//						 "      INNER JOIN ibps_party_entity ee_a_pos " +
+//						 "          ON ee_a_pos.party_type_ = 'position' " +
+//						 "          AND FIND_IN_SET(ee_a_pos.id_, e_a.positions_) > 0 " +
+//						 "      CROSS JOIN ibps_party_entity ee_pos " +
+//						 "      WHERE e_a.id_ = '"+ createBy + "' " +
+//						 "        AND ee_pos.party_type_ = 'position' " +
+//						 "        AND FIND_IN_SET(ee_pos.id_, e.positions_) > 0 " +
+//						 "        AND ( " +
+//						 "            ee_pos.path_ LIKE CONCAT(ee_a_pos.path_, '%') " +
+//						 "            OR  " +
+//						 "            ee_a_pos.path_ LIKE CONCAT(ee_pos.path_, '%') " +
+//						 "        ) " +
+//						 "  )";
 				 List<Map<String, Object>> list = (List<Map<String, Object>>) commonDao.query(sql); //原来的处理人
-				 List<Map<String, Object>> rsList = (List<Map<String, Object>>) commonDao.query(rsms); //正确的处理人
+				 List<Map<String, Object>> rsList = (List<Map<String, Object>>) commonDao.query(position); //正确的处理人
 				 List<Map<String, Object>> delList = list.stream() //需要删除多余的处理人
-						 .filter(map -> rsList.stream().noneMatch(bMap -> bMap.get("employee_id").equals(map.get("EXECUTOR_"))))
+						 .filter(map -> rsList.stream().noneMatch(bMap -> bMap.get("ID_").equals(map.get("MAIN_PID_"))))
 						 .collect(Collectors.toList());
 				 String idStr = delList.stream()
 						 .map(map -> String.valueOf(map.get("ID_"))) // 提取值并转为字符串