Przeglądaj źródła

人员档案卡流程审核人剔除非当前组织架构下的审核人

WuYi 6 dni temu
rodzic
commit
d262fd3f9a

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

@@ -13,9 +13,11 @@ import java.util.concurrent.Callable;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 import java.util.concurrent.Future;
+import java.util.stream.Collectors;
 
 import javax.annotation.Resource;
 
+import com.lc.ibps.base.db.mybatis.CommonDao;
 import com.lc.ibps.bpmn.api.cmd.ProcInstCmd;
 import com.lc.ibps.bpmn.api.constant.NodeStatus;
 import com.lc.ibps.bpmn.cmd.IbpsProcInstCmd;
@@ -126,6 +128,8 @@ public class BpmTaskActionServiceImpl implements BpmTaskActionService{
 	private BpmBoService bpmBoService;
 	@Resource
 	private BpmFormService bpmFormService;
+	@Resource
+	private CommonDao commonDao;
 
 	@Override
 	public boolean finishTask(TaskFinishCmd taskCmd) {
@@ -224,6 +228,43 @@ public class BpmTaskActionServiceImpl implements BpmTaskActionService{
 					StopWatchUtil.stopAndStartNewLocal(localId, step, "multipleInstancesRejectAdjust");
 					BpmExecUtil.multipleInstancesRejectAdjust(rejectAfterExecutionId.toString());
 				}
+				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_, '%') " +
+							"        ) " +
+							"  )";
+					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>> delList = list.stream() //需要删除多余的处理人
+							.filter(map -> rsList.stream().noneMatch(bMap -> bMap.get("employee_id").equals(map.get("EXECUTOR_"))))
+							.collect(Collectors.toList());
+					String idStr = delList.stream()
+							.map(map -> String.valueOf(map.get("ID_"))) // 提取值并转为字符串
+							.filter(s -> s != null && !s.equals("null")) // 过滤空值
+							.collect(Collectors.joining(","));
+
+					String delSql = "delete from IBPS_BPM_TASK_ASSIGN where FIND_IN_SET(id_,'"+idStr+"')";
+					commonDao.execute(delSql);
+				}
 				return true;
 			}
 			throw new BaseException("任务办理失败");

+ 44 - 5
ibps-provider-root/modules/provider-bpmn/src/main/java/com/lc/ibps/bpmn/provider/BpmInstProvider.java

@@ -1,17 +1,16 @@
 package com.lc.ibps.bpmn.provider;
 
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
+import java.util.stream.Collectors;
 
 import javax.annotation.Resource;
 
 import com.lc.ibps.api.base.model.DefaultNoneUser;
+import com.lc.ibps.base.db.mybatis.CommonDao;
 import com.lc.ibps.form.data.exception.DataException;
 import com.lc.ibps.office.provider.BpmInitiatedProvider;
 import org.activiti.engine.ActivitiException;
+import org.apache.commons.collections.ListUtils;
 import org.codehaus.jackson.map.ObjectMapper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -175,6 +174,8 @@ public class BpmInstProvider extends GenericProvider implements IBpmInstService,
 	private BpmDefineXmlRepository bpmDefineXmlRepository;
 	@Resource
 	private BpmProcStatusService flowStatusService;
+	@Resource
+	private CommonDao commonDao;
 
 	/**
 	 * 【流程实例】列表(分页条件查询)数据
@@ -594,6 +595,44 @@ public class BpmInstProvider extends GenericProvider implements IBpmInstService,
 			IbpsProcInstCmd cmd = this.getStartCmd(request);
 			IBpmProcInst inst = bpmProcInstService.startProcInst(cmd);
 			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_, '%') " +
+						 "        ) " +
+						 "  )";
+				 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>> delList = list.stream() //需要删除多余的处理人
+						 .filter(map -> rsList.stream().noneMatch(bMap -> bMap.get("employee_id").equals(map.get("EXECUTOR_"))))
+						 .collect(Collectors.toList());
+				 String idStr = delList.stream()
+						 .map(map -> String.valueOf(map.get("ID_"))) // 提取值并转为字符串
+						 .filter(s -> s != null && !s.equals("null")) // 过滤空值
+						 .collect(Collectors.joining(","));
+
+				 String delSql = "delete from IBPS_BPM_TASK_ASSIGN where FIND_IN_SET(id_,'"+idStr+"')";
+				 commonDao.execute(delSql);
+			 }
+
 			result.addVariable("proInstId", inst.getId());
 			result.addVariable("bpmInstId", inst.getBpmnInstId());
 			result.addVariable("bizKey", inst.getBizKey());