diff --git a/src/weaver/interfaces/job/WorkflowSyncCronJob.java b/src/weaver/interfaces/job/WorkflowSyncCronJob.java index fd72a9d4..24104e74 100644 --- a/src/weaver/interfaces/job/WorkflowSyncCronJob.java +++ b/src/weaver/interfaces/job/WorkflowSyncCronJob.java @@ -1,7 +1,10 @@ package weaver.interfaces.job; +import com.cloudstore.dev.api.service.ServiceEC; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import weaver.conn.RecordSet; import weaver.conn.util.IdGenerator; import weaver.general.BaseBean; @@ -27,6 +30,7 @@ public class WorkflowSyncCronJob extends BaseCronJob { * 推送类型(0全量、1增量) */ private String syncType; + private static final Log logger = LogFactory.getLog(WorkflowSyncCronJob.class); @Override public void execute() { @@ -38,7 +42,7 @@ public class WorkflowSyncCronJob extends BaseCronJob { //同步人员权限url String synchronizeUserUrl = bb.getPropValue("PORTAL_INFO", "synchronizeUserUrl"); //新建流程推送到目录code - String center = bb.getPropValue("PORTAL_INFO", "center"); + String center = bb.getPropValue("PORTAL_INFO", "newWorkflowCenter"); String workflowAuthTable = bb.getPropValue("PORTAL_INFO", "workflowAuthTable"); String timeNodeTable = bb.getPropValue("PORTAL_INFO", "timeNodeTable"); String accountName = bb.getPropValue("PORTAL_INFO", "username"); @@ -91,8 +95,8 @@ public class WorkflowSyncCronJob extends BaseCronJob { RecordSet recordSet3 = new RecordSet(); ArrayList> addWorkflowList = new ArrayList<>(); ArrayList> delWorkflowList = new ArrayList<>(); - ArrayList> addUserList = new ArrayList<>(); - ArrayList> delUserList = new ArrayList<>(); + List>> addUserList = new LinkedList<>(); + List>> delUserList = new LinkedList<>(); //查询建模所有流程 String workflowSql = "SELECT DISTINCT workflowselect as flowCode,workflowname as flowName,effective FROM " + workflowAuthTable + " WHERE effective IN (SELECT DISTINCT effective FROM " + workflowAuthTable + ")"; @@ -120,14 +124,14 @@ public class WorkflowSyncCronJob extends BaseCronJob { //拼接有效流程请求参数 concatWorkflowCondition(center, cataCode, flowCode, flowName, ACTION_TYPE_ADD, addWorkflowList); //有效流程关联的人员参数拼接 - getUserConditionByWorkflow(workflowAuthTable, center, cataCode, flowCode, flowName, ACTION_TYPE_ADD_USER, addUserList, timeCondition); + getUserConditionByWorkflow(workflowAuthTable, center, cataCode, flowCode, flowName, ACTION_TYPE_ADD_USER, addUserList, timeCondition, effective); } else if (EFFECTIVE_NO.equals(effective)) { //拼接无效流程请求参数,如果有流程还有效则不删除 if (!workflowHasEffective(workflowAuthTable, recordSet2, flowCode)) { concatWorkflowCondition(center, cataCode, flowCode, flowName, ACTION_TYPE_DELETE, delWorkflowList); } //无效流程关联的人员参数拼接 - getUserConditionByWorkflow(workflowAuthTable, center, cataCode, flowCode, flowName, ACTION_TYPE_DELETE_USER, delUserList, timeCondition); + getUserConditionByWorkflow(workflowAuthTable, center, cataCode, flowCode, flowName, ACTION_TYPE_DELETE_USER, delUserList, timeCondition, effective); } } HashMap headers = new HashMap<>(); @@ -136,31 +140,54 @@ public class WorkflowSyncCronJob extends BaseCronJob { if (CollectionUtils.isNotEmpty(addWorkflowList)) { for (Map workflowMap : addWorkflowList) { String data = HttpUtils.doPost(synchronizeFlowUrl, workflowMap, headers); - bb.writeLog("增加流程" + workflowMap.get("flowCode"), data); + bb.writeLog("addworkflow" + workflowMap.get("flowCode"), data); //无法判断流程的更改类型,所以在流程变动同时修改 workflowMap.put("actionType", ACTION_TYPE_UPDATE); data = HttpUtils.doPost(synchronizeFlowUrl, workflowMap, headers); - bb.writeLog("修改流程" + workflowMap.get("flowCode"), data); + bb.writeLog("updateworkflow" + workflowMap.get("flowCode"), data); } } //删除人员要在删除流程之前执行 if (CollectionUtils.isNotEmpty(delUserList)) { - for (Map workflowMap : delUserList) { - String data = HttpUtils.doPost(synchronizeUserUrl, workflowMap, headers); - bb.writeLog("删除人员" + workflowMap.get("staffCode"), data); - } + addOrDeleteUser(synchronizeUserUrl, delUserList, headers); } if (CollectionUtils.isNotEmpty(delWorkflowList)) { for (Map workflowMap : delWorkflowList) { String data = HttpUtils.doPost(synchronizeFlowUrl, workflowMap, headers); - bb.writeLog("删除流程" + workflowMap.get("staffCode"), data); + bb.writeLog("deleteworkflow" + workflowMap.get("staffCode"), data); } } - //调用人员同步方法 if (CollectionUtils.isNotEmpty(addUserList)) { - for (Map workflowMap : addUserList) { - String data = HttpUtils.doPost(synchronizeUserUrl, workflowMap, headers); - bb.writeLog("增加人员" + workflowMap.get("staffCode"), data); + addOrDeleteUser(synchronizeUserUrl, addUserList, headers); + } + } + + /** + * 同步删除或者新增人员 + * + * @param synchronizeUserUrl + * @param headers + */ + private void addOrDeleteUser(String synchronizeUserUrl, List>> userLists, HashMap headers) { + for (List> userList : userLists) { + Map staffCodeMap = userList.get(0); + Map userConditionMap = userList.get(1); + Map userCondition = (Map) userConditionMap.get("userCondition"); + HashSet staffCodeSet = (HashSet) staffCodeMap.get("staffCodeSet"); + StringBuilder stringBuilder = new StringBuilder(); + for (String staffCode : staffCodeSet) { + //超出字段长度限制请求接口后清空一次 + if (stringBuilder.length() > 10000) { + userCondition.put("staffCode", stringBuilder.toString()); + String data = HttpUtils.doPost(synchronizeUserUrl, userCondition, headers); + stringBuilder.delete(0, stringBuilder.length()); + } + stringBuilder.append(staffCode).append("|"); + } + //最后字段可能没有超限,再同步最后的人员 + if (stringBuilder.length() < 10000) { + userCondition.put("staffCode", stringBuilder.toString()); + String data = HttpUtils.doPost(synchronizeUserUrl, userCondition, headers); } } } @@ -208,26 +235,36 @@ public class WorkflowSyncCronJob extends BaseCronJob { * @param flowCode * @param flowName * @param actionType - * @param userList * @param timeCondition */ - private void getUserConditionByWorkflow(String workflowAuthTable, String center, String cataCode, String flowCode, String flowName, String actionType, ArrayList> userList, String timeCondition) { - Map usermap = new HashMap<>(); - StringBuilder staffCodeBuilder = new StringBuilder(); - String userSql = "SELECT workcode as staffCode FROM " + workflowAuthTable + " WHERE workflowselect=?"; + private void getUserConditionByWorkflow(String workflowAuthTable, String center, String cataCode, String flowCode, String flowName, String actionType, List>> userLists, String timeCondition, String effective) { + List> userList = new LinkedList<>(); + Map userCondition = new HashMap<>(); + Map staffCodeMap = new HashMap<>(); +// StringBuilder staffCodeBuilder = new StringBuilder(); + HashSet staffCodeSet = new HashSet<>(); + String userSql = "SELECT workcode as staffCode FROM " + workflowAuthTable + " WHERE workflowselect=? AND effective=?"; RecordSet rs = new RecordSet(); - rs.executeQuery(userSql, flowCode); + rs.executeQuery(userSql, flowCode, effective); while (rs.next()) { - staffCodeBuilder.append(rs.getString("staffCode")).append("|"); + //staffCode参数有长度限制 +// staffCodeBuilder.append(rs.getString("staffCode")).append("|"); + staffCodeSet.add(rs.getString("staffCode")); } - usermap.put("flowCode", flowCode); - usermap.put("flowName", flowName); +// logger.info("getUserConditionByWorkflow:" + flowCode + ":" + staffCodeBuilder.length() + ":effective" + effective); + staffCodeMap.put("staffCodeSet", staffCodeSet); + userList.add(staffCodeMap); + //组建人员同步map + userCondition.put("flowCode", flowCode); + userCondition.put("flowName", flowName); //同步所需参数一并拼接 - usermap.put("actionType", actionType); - usermap.put("center", center); - usermap.put("cataCode", cataCode); - usermap.put("staffCode", staffCodeBuilder.toString()); - userList.add(usermap); + userCondition.put("actionType", actionType); + userCondition.put("center", center); + userCondition.put("cataCode", cataCode); + Map userMap = new HashMap<>(); + userMap.put("userCondition", userCondition); + userList.add(userMap); + userLists.add(userList); } /** diff --git a/src/weaver/interfaces/util/HttpUtils.java b/src/weaver/interfaces/util/HttpUtils.java index 43847635..fc1bda6d 100644 --- a/src/weaver/interfaces/util/HttpUtils.java +++ b/src/weaver/interfaces/util/HttpUtils.java @@ -39,7 +39,6 @@ public class HttpUtils { * * @param url * @param paramMap - * @param headers * @return */ public static String ssoLoginDoPost(String url, Map paramMap) {