From b0128045f5d954756660c03275506af975afb846 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=A0=8B?= Date: Thu, 30 Mar 2023 15:21:06 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BA=BA=E5=91=98=E9=83=A8=E9=97=A8=E5=8F=98?= =?UTF-8?q?=E5=8A=A8=E5=90=8E=E6=B5=81=E7=A8=8B=E5=8F=AF=E8=A7=81=E6=80=A7?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=A2=9E=E5=8A=A0=E5=AE=9A=E6=97=B6=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dito/job/WorkflowCreatorsCornJob.java | 102 ++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 src/weaver/interfaces/dito/job/WorkflowCreatorsCornJob.java diff --git a/src/weaver/interfaces/dito/job/WorkflowCreatorsCornJob.java b/src/weaver/interfaces/dito/job/WorkflowCreatorsCornJob.java new file mode 100644 index 00000000..8419b11e --- /dev/null +++ b/src/weaver/interfaces/dito/job/WorkflowCreatorsCornJob.java @@ -0,0 +1,102 @@ +package weaver.interfaces.dito.job; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import weaver.conn.RecordSet; +import weaver.general.TimeUtil; +import weaver.interfaces.dito.comInfo.PropBean; +import weaver.interfaces.schedule.BaseCronJob; +import weaver.workflow.request.RequestCheckUser; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; + +/** + * @version 1.0 + * @Title ecology-9 + * @Company 泛微软件 + * @CreateDate 2023/3/30 + * @Description 人员变动后流程创建权限重新刷新 + * @Author Lee + */ +public class WorkflowCreatorsCornJob extends BaseCronJob { + private static final Log log = LogFactory.getLog(WorkflowCreatorsCornJob.class); + + @Override + public void execute() { + //查询出中间表所有流程,重新校验人员权限 + RecordSet rs = new RecordSet(); + rs.execute("SELECT DISTINCT workflowselect as workflowId FROM uf_workflow_auth"); + HashSet workflowIds = new HashSet<>(); + while (rs.next()) { + workflowIds.add(rs.getInt("workflowId")); + } + //查询所有人员,用于比对每条流程有创建权限的人员 + String userStatus = PropBean.getUfPropValue("userStatus"); + String userSql = "SELECT id FROM HrmResource WHERE status IN (" + userStatus + ")"; + HashSet userIdSet = new HashSet<>(); + rs.execute(userSql); + while (rs.next()) { + userIdSet.add(rs.getInt("id")); + } + + + String tableName = PropBean.getUfPropValue("workflowCreatorTableName"); + //插入中间表sql + String insertSql = "INSERT INTO " + tableName + " (workflowid,userid)VALUES(?,?)"; + + //每条流程重新比对人员权限 + for (int workflowId : workflowIds) { + log.info(workflowId + "-WorkflowCreatorsCornJob-start-" + TimeUtil.getCurrentTimeString()); + //先查出该流程已经插入的人员 + String createrSql = "SELECT userid FROM " + tableName + " where workflowid=" + workflowId; + HashSet existUserSet = new HashSet<>(); + rs.execute(createrSql); + while (rs.next()) { + existUserSet.add(rs.getInt("userid")); + } + + //有权限创建该流程的人员集合 + HashSet rightUserSet = new HashSet<>(); + RequestCheckUser rcu = new RequestCheckUser(); + userIdSet.forEach(userId -> { + rcu.resetParameter(); + rcu.setUserid(userId); + rcu.setWorkflowid(workflowId); + rcu.setLogintype("1"); + try { + rcu.checkUser(); + } catch (Exception e) { + e.printStackTrace(); + } + int hasRight = rcu.getHasright(); + if (1 == hasRight) { + rightUserSet.add(userId); + } + }); + //本次需要删除的中间表人员 + HashSet set = new HashSet<>(existUserSet); + HashSet set2 = new HashSet<>(existUserSet); + set.retainAll(rightUserSet); + set2.removeAll(set); + String deleteSql = "delete from " + tableName + " where workflowid=? and userid=?"; + for (Integer creator : set2) { + rs.executeUpdate(deleteSql, workflowId, creator); + } + + //集合移除已经插入的人员,避免重复插入 + rightUserSet.removeAll(existUserSet); + List batchList = new ArrayList<>(); + for (Integer creator : rightUserSet) { + List list = new ArrayList<>(); + list.add(workflowId); + list.add(creator); + batchList.add(list); + } + rs.executeBatchSql(insertSql, batchList); + log.info(workflowId + "-WorkflowCreatorsCornJob-end-" + TimeUtil.getCurrentTimeString()); + } + } + +}