From a13255b4129ee8a7a7b7e1ecd8e02dd2c78f7c17 Mon Sep 17 00:00:00 2001
From: 田源 <tianyuan@vci-tech.com>
Date: 星期四, 16 一月 2025 16:19:20 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 Source/plt-web/plt-web-parent/plt-web-permission/src/main/java/com/vci/web/service/impl/SmUserQueryServiceImpl.java       |    3 
 Source/plt-web/plt-web-parent/plt-web-permission/src/main/java/com/vci/web/dao/WebProcessDaoI.java                        |    8 
 Source/plt-web/plt-web-parent/plt-web-permission/src/main/java/com/vci/web/dao/impl/WebProcessDaoImpl.java                |   94 ++++----
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/OsLoginController.java                         |   13 +
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/UIManagerServiceI.java                            |    2 
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/WebFlowController.java                         |  128 ++++++++++++
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/UIEngineServiceI.java                             |    4 
 Source/plt-web/plt-web-parent/plt-web-permission/src/main/java/com/vci/web/util/PlatformClientUtil.java                   |   15 +
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsLoginServiceImpl.java                      |   17 -
 Source/plt-web/plt-web-parent/plt-web-permission/src/main/java/com/vci/web/service/WebProcessCommandServiceI.java         |    2 
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/OsLoginServiceI.java                              |    3 
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/UIEngineServiceImpl.java                     |   34 ++-
 Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/interceptor/VciSessionForLoginI.java         |    4 
 Source/plt-web/plt-web-parent/plt-web-permission/src/main/java/com/vci/web/controller/WebProcessCommandController.java    |    2 
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/WebFlowServiceI.java                              |   53 +++++
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/WebFlowServiceImpl.java                      |  142 ++++++++++++++
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/SmFunctionQueryServicePlatformImpl.java      |    5 
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/SmSessionForLoginImpl.java                   |    7 
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/UIManagerServiceImpl.java                    |   12 
 Source/plt-web/plt-web-parent/plt-web-permission/src/main/java/com/vci/web/service/impl/WebProcessCommandServiceImpl.java |   16 
 20 files changed, 459 insertions(+), 105 deletions(-)

diff --git a/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/interceptor/VciSessionForLoginI.java b/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/interceptor/VciSessionForLoginI.java
index 8e42f23..50a9d85 100644
--- a/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/interceptor/VciSessionForLoginI.java
+++ b/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/interceptor/VciSessionForLoginI.java
@@ -1,5 +1,6 @@
 package com.vci.starter.web.interceptor;
 
+import com.vci.corba.common.PLException;
 import com.vci.starter.web.exception.VciBaseException;
 import com.vci.starter.web.pagemodel.SessionInfo;
 import com.vci.starter.web.pagemodel.TokenVO;
@@ -60,8 +61,9 @@
     /**
      * 閫�鍑虹櫥褰�
      * @param userToken 鐢ㄦ埛鐨勪細璇濊鍙�
+     * @param userId 鐢ㄦ埛id
      */
-    void logout(String userToken);
+    void logout(String userToken,String userId) throws PLException;
 
     /**
      * 鏍规嵁token鑾峰彇鐢ㄦ埛鍦ㄧ郴缁熶腑杩樺彲浠ュ瓨鍦ㄧ殑鏃堕棿
diff --git a/Source/plt-web/plt-web-parent/plt-web-permission/src/main/java/com/vci/web/controller/WebProcessCommandController.java b/Source/plt-web/plt-web-parent/plt-web-permission/src/main/java/com/vci/web/controller/WebProcessCommandController.java
index cec29d1..e0a6a56 100644
--- a/Source/plt-web/plt-web-parent/plt-web-permission/src/main/java/com/vci/web/controller/WebProcessCommandController.java
+++ b/Source/plt-web/plt-web-parent/plt-web-permission/src/main/java/com/vci/web/controller/WebProcessCommandController.java
@@ -1,6 +1,6 @@
 package com.vci.web.controller;
 
-import com.vci.corba.workflow.data.TasksAssignedInfo;
+import com.vci.corba.wf.data.TasksAssignedInfo;
 import com.vci.pagemodel.ProcessUserVO;
 import com.vci.starter.web.annotation.log.VciBusinessLog;
 import com.vci.starter.web.pagemodel.BaseResult;
diff --git a/Source/plt-web/plt-web-parent/plt-web-permission/src/main/java/com/vci/web/dao/WebProcessDaoI.java b/Source/plt-web/plt-web-parent/plt-web-permission/src/main/java/com/vci/web/dao/WebProcessDaoI.java
index dc9353f..8e5f12d 100644
--- a/Source/plt-web/plt-web-parent/plt-web-permission/src/main/java/com/vci/web/dao/WebProcessDaoI.java
+++ b/Source/plt-web/plt-web-parent/plt-web-permission/src/main/java/com/vci/web/dao/WebProcessDaoI.java
@@ -1,8 +1,8 @@
 package com.vci.web.dao;
 
 import com.vci.corba.omd.data.LinkObject;
-import com.vci.corba.workflow.WorkflowServicePrx;
-import com.vci.corba.workflow.data.TasksAssignedInfo;
+import com.vci.corba.wf.WFServicePrx;
+import com.vci.corba.wf.data.TasksAssignedInfo;
 import com.vci.dto.ProcessTemplateVO;
 import com.vci.model.WFProcessClassifyDO;
 import com.vci.model.WFProcessTemplateDO;
@@ -294,11 +294,11 @@
 	 */
 	 String getNextTaskName(String executionid, String taskName, String outCome) throws VciBaseException;
 
-	/**
+/**
 	 * 鑾峰彇骞冲彴鐨勬祦绋嬫湇鍔�
 	 * @return
 	 */
-	WorkflowServicePrx getWorkService() throws VciBaseException;
+	WFServicePrx getWFService() throws VciBaseException;
 
 	/**
 	 * 浠诲姟涓庢暟鎹叧鑱旂殑閾炬帴绫诲瀷
diff --git a/Source/plt-web/plt-web-parent/plt-web-permission/src/main/java/com/vci/web/dao/impl/WebProcessDaoImpl.java b/Source/plt-web/plt-web-parent/plt-web-permission/src/main/java/com/vci/web/dao/impl/WebProcessDaoImpl.java
index 92cdb96..afa9c1c 100644
--- a/Source/plt-web/plt-web-parent/plt-web-permission/src/main/java/com/vci/web/dao/impl/WebProcessDaoImpl.java
+++ b/Source/plt-web/plt-web-parent/plt-web-permission/src/main/java/com/vci/web/dao/impl/WebProcessDaoImpl.java
@@ -6,8 +6,9 @@
 import com.vci.corba.common.data.UserEntityInfo;
 import com.vci.corba.omd.data.BusinessObject;
 import com.vci.corba.omd.data.LinkObject;
-import com.vci.corba.workflow.WorkflowServicePrx;
-import com.vci.corba.workflow.data.*;
+import com.vci.corba.wf.WFServicePrx;
+import com.vci.corba.wf.data.*;
+import com.vci.corba.workflow.data.FlowApproveHistoryInfo;
 import com.vci.dto.ProcessTemplateVO;
 import com.vci.model.ProcessInstance;
 import com.vci.model.ProcessTask;
@@ -19,7 +20,6 @@
 import com.vci.starter.web.exception.VciBaseException;
 import com.vci.starter.web.pagemodel.DataGrid;
 import com.vci.starter.web.pagemodel.PageHelper;
-import com.vci.starter.web.pagemodel.SessionInfo;
 import com.vci.starter.web.util.BeanUtilForVCI;
 import com.vci.starter.web.util.VciBaseUtil;
 import com.vci.starter.web.util.VciDateUtil;
@@ -80,7 +80,7 @@
 	/**
 	 * 骞冲彴鐨勬祦绋嬫湇鍔�
 	 */
-	private WorkflowServicePrx workService = null;
+	private WFServicePrx wfService = null;
 
 	/**
 	 * 骞冲彴璋冪敤瀹㈡埛绔�
@@ -107,7 +107,7 @@
 	 */
 	private void getCategory() throws VciBaseException {
 		try {
-			ProcessCategoryInfo[] pcia = getWorkService().getProcessCategories("root");
+			ProcessCategoryInfo[] pcia = getWFService().getProcessCategories("root");
 			if(pcia!=null&&pcia.length>0){
 				for(ProcessCategoryInfo pci : pcia){
 					categoryMap.put(pci.name.toLowerCase(), pci.id);
@@ -144,7 +144,7 @@
 				throw new VciBaseException(msgCodePrefix + "typeNotExist", new String[]{type});
 			}
 			try {
-				allFlowInType = getWorkService().getProcessDefinitions(typeOid);
+				allFlowInType = getWFService().getProcessDefinitions(typeOid);
 			} catch (PLException e) {
 				throw WebUtil.getVciBaseException(e);
 			}
@@ -153,14 +153,14 @@
 			List<String> templateList = VciBaseUtil.str2List(filterTemplate);
 			if(!CollectionUtils.isEmpty(templateList)){
 				templateList.forEach(name->{
-					try {
+					/*try {*/
 						String nameUnRev = name;
 						String revision = "";
 						if(name.contains("-")){
 							nameUnRev = name.substring(0,name.lastIndexOf("-"));
 							revision = name.substring(name.lastIndexOf("-")+1);
 						}
-						ProcessDefinitionInfo[] definition = getWorkService().getProcessDefinitionByProcessDefinitionName(nameUnRev, "");
+						ProcessDefinitionInfo[] definition = null;//getWFService()().getProcessDefinitionByProcessDefinitionName(nameUnRev, "");
 						if(definition!=null){
 							if(StringUtils.isBlank(revision)) {
 								Collections.addAll(infoList, definition);
@@ -170,9 +170,9 @@
 								infoList.addAll(Arrays.stream(definition).filter(s -> finalRevision.equalsIgnoreCase(String.valueOf(s.version))).collect(Collectors.toList()));
 							}
 						}
-					} catch (PLException e) {
+					/*} catch (PLException e) {
 						throw WebUtil.getVciBaseException(e);
-					}
+					}*/
 				});
 			}
 			allFlowInType = infoList.toArray(new ProcessDefinitionInfo[0]);
@@ -191,7 +191,7 @@
 		WebUtil.alertNotNull(deployId,"娴佺▼閮ㄧ讲涓婚敭");
 		ProcessDefinitionInfo pdi = null;
 		try {
-			pdi = getWorkService().getProcessDefinitionByDeployId(deployId.trim());
+			pdi = getWFService().getProcessDefinitionByDeployId(deployId.trim());
 		} catch (PLException e) {
 			throw new VciBaseException(msgCodePrefix + "deployIdNotExist", new String[]{deployId});
 		}
@@ -255,7 +255,7 @@
 	public String getFirstNodeName(String deployId) throws VciBaseException {
     	WebUtil.alertNotNull(deployId,"閮ㄧ讲涓婚敭");
     	try {
-			ProcessTaskInfo firstProcessTask = getWorkService().getFirstProcessTask(deployId);
+			ProcessTaskInfo firstProcessTask = getWFService().getFirstProcessTask(deployId);
 			if(firstProcessTask!=null){
 				return firstProcessTask.taskName;
 			}
@@ -291,7 +291,7 @@
 	public String[] getAllProcessNodeNameByDeploy(String deploymentId) throws VciBaseException{
 		String[] allTaskNames = null;
 	    try {
-			allTaskNames = getWorkService().getAllTaskNames(deploymentId);
+			allTaskNames = getWFService().getAllTaskNames(deploymentId);
 		} catch (PLException e) {
 			throw WebUtil.getVciBaseException(e);
 		}
@@ -305,7 +305,7 @@
 	@Override
 	public String getJbpmDeploymentId(String processOid) throws VciBaseException{
 		WebUtil.alertNotNull(processOid,"娴佺▼妯℃澘涓婚敭");
-		return getWorkService().getDeploymentID(processOid);
+		return null;//getWFService()().getDeploymentID(processOid);
 	}
 
 	/**
@@ -318,7 +318,7 @@
 	public String getJbpmDeploymentIdByExecutionId(String executionId) throws VciBaseException{
 		WebUtil.alertNotNull(executionId,"娴佺▼鎵ц涓婚敭");
 		try {
-			return getWorkService().getDeploymentIdByExecutionId(executionId);
+			return getWFService().getDeploymentIdByExecutionId(executionId);
 		} catch (PLException e) {
 			throw WebUtil.getVciBaseException(e);
 		}
@@ -337,7 +337,7 @@
 		ProcessNodeVO pn = new ProcessNodeVO();
 		pn.setName(taskName);
 		try {
-			String[] nodePresideUsers = getWorkService().getCurCandidates(deploymentId, taskName, "", "");
+			String[] nodePresideUsers = getWFService().getCurCandidates(deploymentId, taskName, "", "");
 			if(nodePresideUsers!=null&& nodePresideUsers.length>0){
 				for(String preUsers : nodePresideUsers){
 					//骞冲彴瀛樺偍鐨勬柟寮忔槸鐢ㄦ埛;瑙掕壊;閮ㄩ棬;鑷畾涔�....
@@ -399,7 +399,7 @@
 			return null;
 		}
 		//涓嶈兘浣跨敤workitem鍘绘煡璇紝鍥犱负鍙兘浠诲姟杩樻病鍒�
-		String users = getWorkService().getNextTaskAssigner(executionid, taskName);
+		String users = getWFService().getNextTaskAssigner(executionid, taskName);
 		List<ProcessUserVO> allProUser = new ArrayList<ProcessUserVO>();
 		if(StringUtils.isNotEmpty(users)){
 			String userIds = users.replace("user:", "");//鐜板湪鍙敮鎸佽缃敤鎴�
@@ -602,16 +602,16 @@
 	@Override
 	public String getVariablesInProcess(String executionId,String key) throws VciBaseException{
 		WebUtil.alertNotNull(executionId,"娴佺▼鎵ц涓婚敭",key,"鍙傛暟Key");
-		UserEntityInfo ueo = new UserEntityInfo();
-		SessionInfo si = WebUtil.getCurrentUserSessionInfo();
-		ueo.modules = "娴佺▼";
-		ueo.userName = si.getUserId();
+//		UserEntityInfo ueo = new UserEntityInfo();
+//		SessionInfo si = WebUtil.getCurrentUserSessionInfo();
+//		ueo.modules = "娴佺▼";
+//		ueo.userName = si.getUserId();
 		while(StringUtils.countMatches(executionId,".")>1){
 			//璇存槑鏄瓙浠诲姟锛岀敤鐖朵换鍔¤幏鍙栦竴涓嬪彉閲�
 			executionId = executionId.substring(0,executionId.lastIndexOf("."));
 		}
 		try {
-			return getWorkService().getProcessVariable(executionId, key, ueo);
+			return getWFService().getProcessVariable(executionId, key);
 		} catch (PLException e) {
 			throw WebUtil.getVciBaseException(e);
 		}
@@ -718,11 +718,7 @@
 		WebUtil.alertNotNull(executionId,"娴佺▼鎵ц涓婚敭");
 		List<ProcessHistoryVO> hisList = new ArrayList<ProcessHistoryVO>();
 		FlowApproveHistoryInfo[] historyActivitys = null;
-		try {
-			historyActivitys = getWorkService().getHistoryActivityByProInsIdbyPLM(executionId);
-		} catch (PLException e) {
-			throw WebUtil.getVciBaseException(e);
-		}
+
 		//闇�瑕佸幓闄ゆ湭澶勭悊鐨勯噸澶嶉」
 		for (int i = 0; i < historyActivitys.length; i++) {
 			FlowApproveHistoryInfo historyActivity = historyActivitys[i];
@@ -752,7 +748,11 @@
 			//濡傛灉endTime涓虹┖琛ㄧず鏄緟鍔炵殑锛屼絾鏄湇鍔$鐨勬帴鍙d腑鏈変釜闂鏄紝浼氭妸浼氱鎴栬�呭瓙娴佺▼涓凡缁忓鐞嗙殑鍜屾湭澶勭悊鐨勬贩鍚堝湪涓�璧�
 			//鐩存帴浠庡緟鍔炰换鍔¢噷鍘绘煡璇�
 		}
-
+		/*try {
+			historyActivitys = getWFService()().getHistoryActivityByProInsIdbyPLM(executionId);
+		} catch (PLException e) {
+			throw WebUtil.getVciBaseException(e);
+		}*/
 		Map<String,String> conditionMap = new HashMap<String, String>();
 		conditionMap.put("businesstype", "5");//鏈」鐩病鏈夊疄闄呯殑鎰忎箟
 		conditionMap.put("lcstatus", "Executing");
@@ -806,7 +806,7 @@
 			throws VciBaseException{
 		WebUtil.alertNotNull(executionId,"娴佺▼鎵ц涓婚敭",taskName,"娴佺▼浠诲姟鍚嶇О");
 		try {
-			byte[] processChart =  getWorkService().getExecutionImageByExecutionId(executionId, taskName);
+			byte[] processChart = null;//getWFService()().getExecutionImageByExecutionId(executionId, taskName);
 			return processChart;
 		} catch (Throwable e) {
 			String msg = "鏈夊彲鑳借繖涓换鍔″叧鑱旂殑娴佺▼宸茬粡缁撴潫鎴栬�呰缁堟锛屼笉鑳藉啀鏌ョ湅鍏舵祦绋嬪浘浜�";
@@ -820,7 +820,7 @@
 			throws VciBaseException{
 		WebUtil.alertNotNull(executionId,"娴佺▼瀹炰緥涓婚敭");
 		try {
-			byte[] processChart =  getWorkService().getFlowImageByDeployID(executionId);
+			byte[] processChart =  getWFService().getFlowImageByDeployID(executionId);
 			return processChart;
 		} catch (PLException e) {
 			throw WebUtil.getVciBaseException(e);
@@ -836,7 +836,7 @@
 	@Override
 	public String[] getAllOutComes(String taskOid) throws VciBaseException{
 		try {
-			return getWorkService().getAllOutComes(taskOid);
+			return getWFService().getAllOutComes(taskOid);
 		} catch (PLException e) {
 			throw WebUtil.getVciBaseException(e);
 		}
@@ -854,7 +854,7 @@
 		WebUtil.alertNotNull(executionid,"娴佺▼鎵ц涓婚敭",taskName,"浠诲姟鍚嶇О");
 		String deployId = getJbpmDeploymentIdByExecutionId(executionid);
 		try {
-			return getWorkService().getNextTaskNameByJbpmId(deployId, taskName, outCome);
+			return getWFService().getNextTaskNameByJbpmId(deployId, taskName, outCome);
 		} catch (PLException e) {
 			throw WebUtil.getVciBaseException(e);
 		}
@@ -865,11 +865,11 @@
 	 * @return
 	 */
 	@Override
-	public WorkflowServicePrx getWorkService() throws VciBaseException{
-		if(workService == null){
-			this.workService = platformClientUtil.getWorkflowService();
+	public WFServicePrx getWFService() throws VciBaseException{
+		if(wfService == null){
+			this.wfService = platformClientUtil.getWFService();
 		}
-		return workService;
+		return wfService;
 	}
 
 	@Override
@@ -910,11 +910,11 @@
 		taskAss.endTime = VciDateUtil.getTime(endDate);
 		taskAss.isTrue = isNowEnable?true:false;
 		taskAss.fromUser =WebUtil.getCurrentUserSessionInfo().getUserId();
-		try {
-			getWorkService().saveOrUpdateTasksAssigned(taskAss, WebUtil.getUserEntityInfo("娴佺▼"));
+		/*try {
+			getWFService().saveOrUpdateTasksAssigned(taskAss, WebUtil.getUserEntityInfo("娴佺▼"));
 		} catch (PLException e) {
 			throw WebUtil.getVciBaseException(e);
-		}
+		}*/
 	}
 	
 	
@@ -925,7 +925,7 @@
 		//骞冲彴涓嶆敮鎸佸仠鐢ㄥ惎鐢ㄤ唬鐞嗕俊鎭�..鍙互鏌ヨ鍑烘潵鍐嶉噸鏂版坊鍔犮��
 		try {
 			UserEntityInfo  uei = WebUtil.getUserEntityInfo( "娴佺▼");
-			getWorkService().deleteTasksAssignedByUserName(new String[]{uei.userName}, uei);
+			getWFService().deleteTasksAssignedByUserName(new String[]{uei.userName});
 		} catch (PLException e) {
 			throw WebUtil.getVciBaseException(e);
 		}
@@ -935,7 +935,7 @@
 	public TasksAssignedInfo getProxy() throws VciBaseException{
 		TasksAssignedInfo assign = null;
 		try {
-			assign = getWorkService().getTasksAssignedByUserName("", WebUtil.getUserEntityInfo( "娴佺▼"));
+			assign = getWFService().getTasksAssignedByUserName("");
 		} catch (PLException e) {
 			throw WebUtil.getVciBaseException(e);
 		}
@@ -956,11 +956,11 @@
 			UserEntityInfo userEntityInfo = WebUtil.getUserEntityInfo("娴佺▼");
 			String resetStatus = null;
 			try{
-				resetStatus = getWorkService().getProcessVariable(executionId, WFVariablesKeyConstant.RESET_STATUS, userEntityInfo);
+				resetStatus = getWFService().getProcessVariable(executionId, WFVariablesKeyConstant.RESET_STATUS);
 			}catch (Throwable e){
 				logger.error("鑾峰彇娴佺▼鐨勫彉閲忓嚭閿�",e);
 			}
-			getWorkService().endProcessInstanceByplatform(executionId,userEntityInfo);
+			//getWFService().endProcessInstanceByplatform(executionId,userEntityInfo);
 			//骞冲彴娌℃湁鑷姩灏嗕笟鍔℃暟鎹仮澶嶅埌涔嬪墠鐨勭姸鎬�
 			if(StringUtils.isNotBlank(resetStatus)){
 				resetLcStatusForBusinessData(dataGrid.getData(),resetStatus);
@@ -1053,11 +1053,11 @@
 	@Override
 	public byte[] getProcessXmlContent(String jbpmDeploymentId) throws VciBaseException {
 		WebUtil.alertNotNull("娴佺▼鎵ц涓婚敭淇℃伅",jbpmDeploymentId);
-		try {
-			return getWorkService().getProcessResource(jbpmDeploymentId,".xml");
-		} catch (PLException e) {
+		/*try {*/
+			return null;//getWFService().getProcessResource(jbpmDeploymentId,".xml");
+		/*} catch (PLException e) {
 			throw WebUtil.getVciBaseException(e);
-		}
+		}*/
 	}
 
 	/**
diff --git a/Source/plt-web/plt-web-parent/plt-web-permission/src/main/java/com/vci/web/service/WebProcessCommandServiceI.java b/Source/plt-web/plt-web-parent/plt-web-permission/src/main/java/com/vci/web/service/WebProcessCommandServiceI.java
index 731f509..9b6d69b 100644
--- a/Source/plt-web/plt-web-parent/plt-web-permission/src/main/java/com/vci/web/service/WebProcessCommandServiceI.java
+++ b/Source/plt-web/plt-web-parent/plt-web-permission/src/main/java/com/vci/web/service/WebProcessCommandServiceI.java
@@ -1,6 +1,6 @@
 package com.vci.web.service;
 
-import com.vci.corba.workflow.data.TasksAssignedInfo;
+import com.vci.corba.wf.data.TasksAssignedInfo;
 import com.vci.starter.web.exception.VciBaseException;
 import com.vci.dto.ProcessStartConfigDTO;
 import com.vci.pagemodel.ProcessUserVO;
diff --git a/Source/plt-web/plt-web-parent/plt-web-permission/src/main/java/com/vci/web/service/impl/SmUserQueryServiceImpl.java b/Source/plt-web/plt-web-parent/plt-web-permission/src/main/java/com/vci/web/service/impl/SmUserQueryServiceImpl.java
index 7b8ea7e..1b5d344 100644
--- a/Source/plt-web/plt-web-parent/plt-web-permission/src/main/java/com/vci/web/service/impl/SmUserQueryServiceImpl.java
+++ b/Source/plt-web/plt-web-parent/plt-web-permission/src/main/java/com/vci/web/service/impl/SmUserQueryServiceImpl.java
@@ -1533,7 +1533,8 @@
 	@Transactional(rollbackFor = Exception.class)
 	public boolean stopUsers(String[] ids, boolean flag) throws PLException {
 		VciBaseUtil.alertNotNull(ids,"鍋滅敤/鍚敤鐨勭敤鎴穒d鍒楄〃");
-		return platformClientUtil.getFrameworkService().stopUsers(ids, flag,null);
+
+		return platformClientUtil.getFrameworkService().stopUsers(ids, flag,new UserEntityInfo(WebUtil.getCurrentUserId(),"鐢ㄦ埛绠$悊"));
 	}
 
 	/**
diff --git a/Source/plt-web/plt-web-parent/plt-web-permission/src/main/java/com/vci/web/service/impl/WebProcessCommandServiceImpl.java b/Source/plt-web/plt-web-parent/plt-web-permission/src/main/java/com/vci/web/service/impl/WebProcessCommandServiceImpl.java
index c1b9f54..8483407 100644
--- a/Source/plt-web/plt-web-parent/plt-web-permission/src/main/java/com/vci/web/service/impl/WebProcessCommandServiceImpl.java
+++ b/Source/plt-web/plt-web-parent/plt-web-permission/src/main/java/com/vci/web/service/impl/WebProcessCommandServiceImpl.java
@@ -8,7 +8,7 @@
 import com.vci.corba.omd.data.LinkObject;
 import com.vci.corba.workflow.data.FlowInstanceInfo;
 import com.vci.corba.workflow.data.MapTransfersInfo;
-import com.vci.corba.workflow.data.TasksAssignedInfo;
+import com.vci.corba.wf.data.TasksAssignedInfo;
 import com.vci.dto.ProcessStartConfigDTO;
 import com.vci.dto.ProcessTemplateVO;
 import com.vci.dto.VciFileObjectDTO;
@@ -211,7 +211,7 @@
         noticeInfo.setProcessTemplateVO(template);
         BusAnnotationUtil.callForAnnotation(FlowNotifyWeb.class, FlowNotifyBefore.class,noticeInfo);
         String processInstanceId = "";
-        try {
+        /*try {
             if (config.isAutoSubmitFirst()) {
                 processInstanceId =  processDao.getWorkService().startProcessAndExecuteFirstNode(template.getOid(),
                         flowInstanceInfo,
@@ -226,7 +226,7 @@
                         objectPropertyValues);
             }else{
                 processInstanceId = processDao.getWorkService().startPocessByPLMv1(
-                        /**
+                        *//**
                          * String processDefinitionKey, 娴佺▼妯℃澘涓婚敭
                          * FlowInstanceInfo flowInstanceInfo, 娴佺▼瀹炰緥
                          * String[] objId, 鏁版嵁瀵硅薄id
@@ -238,7 +238,7 @@
                          * MapTransfersInfo[] mapTransfersInfos,  绉讳氦Info
                          * String[] objectProperty, 涓氬姟灞炴��
                          * String[][] objectPropertyValues 涓氬姟灞炴�у��
-                         */
+                         *//*
                         template.getOid(),
                         flowInstanceInfo,
                         objIds,
@@ -254,7 +254,7 @@
             }
         } catch (PLException e) {
             throw WebUtil.getVciBaseException(e);
-        }
+        }*/
         if (StringUtils.isNotBlank(config.getStartStatus())) {
             try {
                 lifeCycleService.transCboStatus(allCbo, config.getStartStatus());
@@ -505,7 +505,7 @@
             throw new VciBaseException(LangBaseUtil.getErrorMsg(e), new String[0], e);
         }
         callBefore(workitemList,outCome,note,currentTime);
-        try {
+        /*try {
             if (jbpmTaskIds.length == 1) {
                 processDao.getWorkService().completeTaskByPlatformv1(jbpmTaskIds[0], outCome, nextTaskName, note, getUserEntityInfo(), nextTaskUsers, objectPropertyKeys, objectPropertyValues);
             } else {
@@ -513,7 +513,7 @@
             }
         } catch (PLException e) {
             throw WebUtil.getVciBaseException(e);
-        }
+        }*/
         callAfter((String)workitemList.get(0).get("executionid"),null,workitemList,currentTime);
     }
 
@@ -541,7 +541,7 @@
         for (String taskOid : taskOidArray) {
             if (StringUtils.isNotBlank(taskOid)) {
                 try {
-                    processDao.getWorkService().transmitTask(taskOid, "user:" + userIds, getUserEntityInfo());
+                    processDao.getWFService().transmitTask(taskOid, "user:" + userIds);
                 } catch (PLException vciError) {
                     throw WebUtil.getVciBaseException(vciError);
                 }
diff --git a/Source/plt-web/plt-web-parent/plt-web-permission/src/main/java/com/vci/web/util/PlatformClientUtil.java b/Source/plt-web/plt-web-parent/plt-web-permission/src/main/java/com/vci/web/util/PlatformClientUtil.java
index a699cb6..849d7ed 100644
--- a/Source/plt-web/plt-web-parent/plt-web-permission/src/main/java/com/vci/web/util/PlatformClientUtil.java
+++ b/Source/plt-web/plt-web-parent/plt-web-permission/src/main/java/com/vci/web/util/PlatformClientUtil.java
@@ -1,6 +1,7 @@
 package com.vci.web.util;
 
 import com.vci.client.common.providers.WebServiceProvider;
+import com.vci.corba.aof.AOFServicePrx;
 import com.vci.corba.bofactory.BOFactoryServicePrx;
 import com.vci.corba.common.PLException;
 import com.vci.corba.framework.FrameworkServicePrx;
@@ -18,7 +19,7 @@
 import com.vci.corba.portal.PortalServicePrx;
 import com.vci.corba.query.ObjectQueryServicePrx;
 import com.vci.corba.volume.VolumeServicePrx;
-import com.vci.corba.workflow.WorkflowServicePrx;
+import com.vci.corba.wf.WFServicePrx;
 import org.springframework.stereotype.Component;
 
 /**
@@ -95,8 +96,8 @@
      * 鑾峰彇娴佺▼鏈嶅姟
      * @return 鏈嶅姟鐨勫璞�
      */
-    public WorkflowServicePrx getWorkflowService(){
-        return WebServiceProvider.getWFService();
+    public WFServicePrx getWFService(){
+        return WebServiceProvider.getFlowService();
     }
 
     /**
@@ -237,4 +238,12 @@
     public BOFactoryServicePrx getBOFService() {
         return WebServiceProvider.getBOFService();
     }
+
+    /**
+     * 鑾峰彇杈呭姪瀵硅薄宸ュ巶鏈嶅姟
+     * @return
+     */
+    public AOFServicePrx getAOFService(){
+        return WebServiceProvider.getAOFService();
+    }
 }
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/OsLoginController.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/OsLoginController.java
index 097a66e..112c102 100644
--- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/OsLoginController.java
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/OsLoginController.java
@@ -1,6 +1,7 @@
 package com.vci.web.controller;
 
 import com.vci.bo.LoginResultBO;
+import com.vci.corba.common.PLException;
 import com.vci.dto.LoginUserDTO;
 import com.vci.starter.web.annotation.controller.VciUnCheckRight;
 import com.vci.starter.web.annotation.log.VciBusinessLog;
@@ -12,6 +13,7 @@
 import com.vci.starter.web.util.VciBaseUtil;
 import com.vci.starter.web.util.WebThreadLocalUtil;
 import com.vci.web.service.OsLoginServiceI;
+import com.zeroc.IceInternal.Ex;
 import eu.bitwalker.useragentutils.*;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
@@ -179,8 +181,15 @@
 	@ResponseBody
 	public BaseResult logout(HttpServletRequest request){
 		String userToken = request.getHeader(TokenKeyConstant.USER_TOKEN_KEY);
-		loginService.logout(userToken);
-		return BaseResult.success();
+		try {
+			loginService.logout(userToken);
+			return BaseResult.success("閫�鍑烘垚鍔�");
+		} catch (Exception e) {
+			e.printStackTrace();
+			String errorLog = "鐧诲嚭鏃跺嚭鐜板紓甯革紝鍘熷洜锛�"+ VciBaseUtil.getExceptionMessage(e);
+			logger.error(errorLog);
+			return BaseResult.fail(errorLog);
+		}
 	}
 
 }
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/WebFlowController.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/WebFlowController.java
new file mode 100644
index 0000000..86ad5e6
--- /dev/null
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/WebFlowController.java
@@ -0,0 +1,128 @@
+package com.vci.web.controller;
+
+import com.vci.corba.wf.data.ProcessCategoryInfo;
+import com.vci.starter.web.annotation.log.VciBusinessLog;
+import com.vci.starter.web.pagemodel.BaseQueryObject;
+import com.vci.starter.web.pagemodel.BaseResult;
+import com.vci.starter.web.pagemodel.DataGrid;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.web.service.WebFlowServiceI;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 娴佺▼鏈嶅姟鎺у埗鍣�
+ * @author ludc
+ * @date 2025/1/14 21:37
+ */
+@VciBusinessLog(modelName="娴佺▼鏈嶅姟")
+@RestController
+@RequestMapping("/WebFlowController")
+public class WebFlowController {
+
+    /**
+     * 娉ㄥ叆娴佺▼鏈嶅姟
+     */
+    @Autowired
+    private WebFlowServiceI webFlowServiceI;
+
+    /**
+     * 鏃ュ織
+     */
+    private Logger logger = LoggerFactory.getLogger(getClass());
+
+    /**
+     * 娴佺▼鍒嗙被鍏ㄦ煡璇�
+     * @param parentId 鐖秈d
+     * @return 鍒楄〃鐨勫唴瀹�
+     */
+    @GetMapping( "/getProcessCategories")
+    @VciBusinessLog(operateName = "娴佺▼鍒嗙被鍏ㄦ煡璇�")
+    public BaseResult<List<ProcessCategoryInfo>> getProcessCategories(String parentId){
+        try {
+            return BaseResult.dataList(webFlowServiceI.getProcessCategories(parentId));
+        } catch (Exception e) {
+            e.printStackTrace();
+            String exceptionMessage = "娴佺▼鍒嗙被鏌ヨ鏃跺嚭鐜伴敊璇紝鍘熷洜锛�" + VciBaseUtil.getExceptionMessage(e);
+            logger.error(exceptionMessage);
+            return BaseResult.fail(exceptionMessage);
+        }
+    }
+
+    /**
+     * 娴佺▼鍒嗙被鍒嗛〉鏌ヨ
+     * @param baseQueryObject
+     * @return 鍒楄〃鐨勫唴瀹�
+     */
+    @GetMapping( "/getProcessCategoriesByPage")
+    @VciBusinessLog(operateName = "娴佺▼鍒嗙被鍒嗛〉鏌ヨ")
+    public BaseResult getProcessCategoriesByPage(BaseQueryObject baseQueryObject){
+        try {
+            return BaseResult.dataGrid(webFlowServiceI.getProcessCategoriesByPage(baseQueryObject));
+        } catch (Exception e) {
+            e.printStackTrace();
+            String exceptionMessage = "娴佺▼鍒嗙被鍒嗛〉鏌ヨ鏃跺嚭鐜伴敊璇紝鍘熷洜锛�" + VciBaseUtil.getExceptionMessage(e);
+            logger.error(exceptionMessage);
+            return BaseResult.fail(exceptionMessage);
+        }
+    }
+
+    /**
+     * 娣诲姞娴佺▼鍒嗙被
+     * @param processCategoryInfo
+     * @return
+     */
+    @PostMapping( "/saveProcessCategory")
+    @VciBusinessLog(operateName = "娣诲姞娴佺▼鍒嗙被")
+    public BaseResult saveProcessCategory(@RequestBody ProcessCategoryInfo processCategoryInfo) {
+        try {
+            return BaseResult.success(webFlowServiceI.saveProcessCategory(processCategoryInfo));
+        }catch (Exception e) {
+            e.printStackTrace();
+            String exceptionMessage = "娣诲姞娴佺▼鍒嗙被鏃跺嚭鐜伴敊璇紝鍘熷洜锛�" + VciBaseUtil.getExceptionMessage(e);
+            logger.error(exceptionMessage);
+            return BaseResult.fail(exceptionMessage);
+        }
+    }
+
+    /**
+     * 淇敼娴佺▼鍒嗙被
+     * @param processCategoryInfo
+     * @return
+     */
+    @PutMapping( "/updateProcessCategory")
+    @VciBusinessLog(operateName = "淇敼娴佺▼鍒嗙被")
+    public BaseResult updateProcessCategory(@RequestBody ProcessCategoryInfo processCategoryInfo) {
+        try {
+            return webFlowServiceI.updateProcessCategory(processCategoryInfo) ? BaseResult.success("娴佺▼鍒嗙被淇敼鎴愬姛锛�"):BaseResult.fail("娴佺▼鍒嗙被淇敼澶辫触锛�");
+        }catch (Exception e) {
+            e.printStackTrace();
+            String exceptionMessage = "淇敼娴佺▼鍒嗙被鏃跺嚭鐜伴敊璇紝鍘熷洜锛�" + VciBaseUtil.getExceptionMessage(e);
+            logger.error(exceptionMessage);
+            return BaseResult.fail(exceptionMessage);
+        }
+    }
+
+    /**
+     * 鍒犻櫎娴佺▼鍒嗙被
+     * @param id
+     * @return
+     */
+    @DeleteMapping( "/deleteProcessCategory")
+    @VciBusinessLog(operateName = "鍒犻櫎娴佺▼鍒嗙被")
+    public BaseResult deleteProcessCategory(String id) {
+        try {
+            return webFlowServiceI.deleteProcessCategory(id) ? BaseResult.success("娴佺▼鍒嗙被鍒犻櫎鎴愬姛锛�"):BaseResult.fail("娴佺▼鍒嗙被鍒犻櫎澶辫触锛�");
+        }catch (Exception e) {
+            e.printStackTrace();
+            String exceptionMessage = "鍒犻櫎娴佺▼鍒嗙被鏃跺嚭鐜伴敊璇紝鍘熷洜锛�" + VciBaseUtil.getExceptionMessage(e);
+            logger.error(exceptionMessage);
+            return BaseResult.fail(exceptionMessage);
+        }
+    }
+
+}
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/OsLoginServiceI.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/OsLoginServiceI.java
index 182ca2d..50fb3b4 100644
--- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/OsLoginServiceI.java
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/OsLoginServiceI.java
@@ -1,6 +1,7 @@
 package com.vci.web.service;
 
 import com.vci.bo.LoginResultBO;
+import com.vci.corba.common.PLException;
 import com.vci.dto.LoginUserDTO;
 import com.vci.starter.web.exception.VciBaseException;
 import com.vci.starter.web.pagemodel.RequestClientInfo;
@@ -26,5 +27,5 @@
      * @param userToken 鐢ㄦ埛鐨勮鍙爜
      * @throws VciBaseException 鍒犻櫎浼氳瘽淇℃伅鍑洪敊鐨勬椂鍊欎細鎶涘嚭寮傚父
      */
-    void logout(String userToken) throws VciBaseException;
+    void logout(String userToken) throws Exception;
 }
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/UIEngineServiceI.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/UIEngineServiceI.java
index bb5853d..f56b887 100644
--- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/UIEngineServiceI.java
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/UIEngineServiceI.java
@@ -177,7 +177,7 @@
 	 * @param pkComponent 缁勪欢鐨勪富閿�
 	 * @return 鎸夐挳鐨勪俊鎭�
 	 */
-	List<UIButtonDefineVO> listButtonByComponent(String pkComponent, Map<String, RoleRightVO> roleRightMap);
+	List<UIButtonDefineVO> listButtonByComponent(String pkComponent, Map<String, List<RoleRightVO>> roleRightMap);
 
 	/**
 	 * 鎸夐挳鐨勬暟鎹璞¤浆鎹负鏄剧ず瀵硅薄
@@ -209,6 +209,6 @@
 
 	//	UIContentVO UIContentDO2VO(PLPageLayoutDefination pageLayoutDefination, boolean queryDetail);
 
-	UIContentVO UIContentDO2VO(PLUILayout pageLayoutDefination, boolean queryDetail,Map<String, RoleRightVO> roleRightMap);
+	UIContentVO UIContentDO2VO(PLUILayout pageLayoutDefination, boolean queryDetail,Map<String, List<RoleRightVO>> roleRightMap);
 
 }
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/UIManagerServiceI.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/UIManagerServiceI.java
index 8911e1a..460cfed 100644
--- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/UIManagerServiceI.java
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/UIManagerServiceI.java
@@ -213,7 +213,7 @@
      * @return
      * @throws PLException
      */
-    Map<String,RoleRightVO> getRoleRightMap(String roleId) throws PLException;
+    Map<String, List<RoleRightVO>> getRoleRightMap(String roleId) throws PLException;
 
     /**
      * UI鎺堟潈
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/WebFlowServiceI.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/WebFlowServiceI.java
new file mode 100644
index 0000000..e607896
--- /dev/null
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/WebFlowServiceI.java
@@ -0,0 +1,53 @@
+package com.vci.web.service;
+
+import com.vci.corba.wf.data.ProcessCategoryInfo;
+import com.vci.starter.web.pagemodel.BaseQueryObject;
+import com.vci.starter.web.pagemodel.DataGrid;
+
+import java.util.List;
+
+/**
+ * 娴佺▼鏈嶅姟
+ * @author ludc
+ * @date 2025/1/14 17:28
+ */
+public interface WebFlowServiceI {
+
+    /**
+     * 娴佺▼鍒嗙被鍏ㄦ煡璇�
+     * @param parentId
+     * @return
+     * @throws Exception
+     */
+    List<ProcessCategoryInfo> getProcessCategories(String parentId) throws Exception;
+
+    /**
+     * 娴佺▼鍒嗙被鍒嗛〉鏌ヨ
+     * @param baseQueryObject
+     * @return
+     */
+    DataGrid<ProcessCategoryInfo> getProcessCategoriesByPage(BaseQueryObject baseQueryObject) throws Exception;
+
+    /**
+     * 淇濆瓨娴佺▼鍒嗙被
+     * @param category
+     * @return
+     */
+    String saveProcessCategory(ProcessCategoryInfo category) throws Exception;
+
+    /**
+     * 淇敼娴佺▼鍒嗙被
+     * @param category
+     * @return
+     */
+    boolean updateProcessCategory(ProcessCategoryInfo category) throws Exception;
+
+    /**
+     * 鍒犻櫎娴佺▼鍒嗙被
+     * @param id
+     * @return
+     * @throws Exception
+     */
+    boolean deleteProcessCategory(String id) throws Exception;
+
+}
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsLoginServiceImpl.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsLoginServiceImpl.java
index 9e88c5c..4b0f835 100644
--- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsLoginServiceImpl.java
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsLoginServiceImpl.java
@@ -181,16 +181,6 @@
             return loginResult;
         }
 
-        //4銆佸垽鏂瘑鐮佹槸鍚︽纭紙骞冲彴鐨刢heckLogin鏂规硶濂藉儚鏈夊瀵嗙爜杩涜姣斿鐨勬柟娉曪級
-        /*if (checkPassword) {
-            boolean passwordIsEqual = userQueryService.checkPasswordEqual(userDTO.getPassword(), user.getOid());
-            if (!passwordIsEqual) {
-                if (logger.isDebugEnabled()) {
-                    logger.debug("{}瀵嗙爜涓嶆纭�", user.getId());
-                }
-            }
-        }*/
-
         //5銆佽皟鐢ㄥ钩鍙扮櫥褰曟帴鍙o紝杩涜鐧诲綍
         MachineInfo machine = getMachieInfo(clientInfo);
         machine.country = clientInfo.getCountry();
@@ -313,7 +303,7 @@
      * @throws VciBaseException 鍒犻櫎浼氳瘽淇℃伅鍑洪敊鐨勬椂鍊欎細鎶涘嚭寮傚父
      */
     @Override
-    public void logout(String userToken) throws VciBaseException {
+    public void logout(String userToken) throws Exception {
         VciBaseUtil.alertNotNull(userToken,"鐢ㄦ埛鐨勪細璇濊鍙�");
         Map<String, Object> logoutpluginBeanMap =ApplicationContextProvider.getApplicationContext().getBeansWithAnnotation(VciLogoutPlugin.class);
         if(!CollectionUtils.isEmpty(logoutpluginBeanMap)){
@@ -337,7 +327,10 @@
         }
         //娓呴櫎瀛樺綋鍓嶇櫥褰曠殑鐢ㄦ埛锛堟�绘暟-1锛�
         redisService.decreOnlineUser(VConstant.CURRENT_LOGGED_USERS_KEY);
-        sessionForLogin.logout(userToken);
+        sessionForLogin.logout(
+                WebThreadLocalUtil.getCurrentUserSessionInfoInThread().getToken()
+                ,WebThreadLocalUtil.getCurrentUserSessionInfoInThread().getUserId()
+        );
         if(!CollectionUtils.isEmpty(logoutpluginBeanMap)){
             logoutpluginBeanMap.forEach((k,v) -> {
                 Method[] methods = v.getClass().getDeclaredMethods();
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/SmFunctionQueryServicePlatformImpl.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/SmFunctionQueryServicePlatformImpl.java
index 42cf760..87d55b9 100644
--- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/SmFunctionQueryServicePlatformImpl.java
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/SmFunctionQueryServicePlatformImpl.java
@@ -609,6 +609,7 @@
         menuVO.setName(funcInfo.name);
         menuVO.getMeta().put("keepAlive",true);
         menuVO.setSort((int) funcInfo.seq);
+        menuVO.setRemark(funcInfo.desc);
         if(this.checkChildObject(menuVO.getId()) == 0){
             menuVO.setHasChildren(false);
         }else{
@@ -657,6 +658,7 @@
             functionVO.setName(menu.name);
             functionVO.getMeta().put("keepAlive",true);
             functionVO.setSort((int) menu.seq);
+            functionVO.setRemark(menu.desc);
             functionVO.setChildren(findChildFunctionVO(menu.id,map));
             if(functionVO.getChildren().size() > 0){
                 functionVO.setHasChildren(true);
@@ -685,6 +687,7 @@
                 menuVO.setName(funcObj.name);
                 menuVO.getMeta().put("keepAlive",true);
                 menuVO.setSort((int) funcObj.seq);
+                menuVO.setRemark(funcObj.desc);
                 findChildAuthFunctionVO(menuVO, isAll);
                 functionVO.getChildren().add(menuVO);
                 functionVO.setHasChildren(true);
@@ -719,7 +722,7 @@
         /* if(resourceControlTypeEnum == null){
             resourceControlTypeEnum = ResourceControlTypeEnum.BS;
         }*/
-        Map<String, RoleRightVO> roleRightMap = uiManagerServiceI.getRoleRightMap(null);
+        Map<String, List<RoleRightVO>> roleRightMap = uiManagerServiceI.getRoleRightMap(null);
         for (PLUILayout allPLUILayout : platformClientUtil.getUIService().getAllPLUILayouts()) {
             if(treeQueryObject.getConditionMap().getOrDefault("type","").equals(allPLUILayout.plRelatedType)
                     && treeQueryObject.getConditionMap().getOrDefault("context","").equals(allPLUILayout.plCode)){
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/SmSessionForLoginImpl.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/SmSessionForLoginImpl.java
index 072665b..de7c6ef 100644
--- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/SmSessionForLoginImpl.java
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/SmSessionForLoginImpl.java
@@ -195,12 +195,15 @@
 
     /**
      * 閫�鍑虹櫥褰�
-     *
+     * 娓呴櫎鐢ㄦ埛session
      * @param userToken 鐢ㄦ埛鐨勪細璇濊鍙�
      */
     @Override
-    public void logout(String userToken) {
+    public void logout(String userToken,String userId) throws PLException {
         //TODO 鏍规嵁鎯呭喌锛屽崟鐙鐞�
+        redisService.deleteObject(CacheNameConstant.USERID_TOKEN_KEY + userId);
+        redisService.deleteObject(TokenKeyConstant.TOKEN_KEY_PREFIX_IN_REDIS + userToken);
+        platformClientUtil.getFrameworkService().logoff(userToken);
     }
 
     /**
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/UIEngineServiceImpl.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/UIEngineServiceImpl.java
index 36e4986..e989fdf 100644
--- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/UIEngineServiceImpl.java
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/UIEngineServiceImpl.java
@@ -894,7 +894,7 @@
 	 */
 	@VciUnLog
 	@Override
-	public UIContentVO UIContentDO2VO(PLUILayout pageLayoutDefination, boolean queryDetail,Map<String, RoleRightVO> roleRightMap){
+	public UIContentVO UIContentDO2VO(PLUILayout pageLayoutDefination, boolean queryDetail,Map<String, List<RoleRightVO>> roleRightMap){
 		UIContentVO contentVO = new UIContentVO();
 		if(pageLayoutDefination !=null){
 			contentVO.setOid(pageLayoutDefination.plOId);
@@ -1014,7 +1014,7 @@
 	 * @param pkContent UI涓婁笅鏂囩殑涓婚敭
 	 * @return 涓婁笅鏂�
 	 */
-	private List<UILayoutVO> listLayoutByContent(String pkContent,Map<String, RoleRightVO> roleRightMap){
+	private List<UILayoutVO> listLayoutByContent(String pkContent,Map<String, List<RoleRightVO>> roleRightMap){
 		try {
 			List<PLTabPage> tabPageList = Arrays.stream(platformClientUtil.getUIService().getPLTabPagesByPageDefinationOId(pkContent)).collect(Collectors.toList());
 			//杩囨护鎺夋病鏈夎闂潈闄愮殑UI
@@ -1030,7 +1030,7 @@
 	 * @param tabPageList
 	 * @param roleRightMap
 	 */
-	private List<PLTabPage> filterTabPageByRoleRight(List<PLTabPage> tabPageList, Map<String, RoleRightVO> roleRightMap){
+	private List<PLTabPage> filterTabPageByRoleRight(List<PLTabPage> tabPageList, Map<String, List<RoleRightVO>> roleRightMap){
 		if(Func.isEmpty(roleRightMap) || Func.isEmpty(tabPageList)){
 			return tabPageList;
 		}
@@ -1060,7 +1060,7 @@
 	 * @param plPageDefinationList
 	 * @param roleRightMap
 	 */
-	private List<PLPageDefination> filterPageDefByRoleRight(List<PLPageDefination> plPageDefinationList, Map<String, RoleRightVO> roleRightMap){
+	private List<PLPageDefination> filterPageDefByRoleRight(List<PLPageDefination> plPageDefinationList, Map<String, List<RoleRightVO>> roleRightMap){
 		if(Func.isEmpty(roleRightMap) || Func.isEmpty(plPageDefinationList)){
 			return plPageDefinationList;
 		}
@@ -1136,7 +1136,7 @@
 	 * @param pages 鍖哄煙鐨勬暟鎹璞�
 	 * @return 鏄剧ず瀵硅薄
 	 */
-	private List<UILayoutVO> UILayoutDO2VOs(Collection<PLTabPage> pages, boolean queryDetail, Map<String, RoleRightVO> roleRightMap){
+	private List<UILayoutVO> UILayoutDO2VOs(Collection<PLTabPage> pages, boolean queryDetail, Map<String, List<RoleRightVO>> roleRightMap){
 		List<UILayoutVO> contentVOS = new ArrayList<>();
 		Map<String, OsAttributeVO> attributeVOMap;
 		if(pages != null && pages.size() > 0){
@@ -1174,7 +1174,7 @@
 	 * @return 鍖哄煙鐨勬樉绀哄璞�
 	 */
 	@VciUnLog
-	private UILayoutVO UILayoutDO2VO(PLTabPage page, boolean queryDetail,Map<String, OsAttributeVO> attributeVOMap, Map<String, RoleRightVO> roleRightMap){
+	private UILayoutVO UILayoutDO2VO(PLTabPage page, boolean queryDetail,Map<String, OsAttributeVO> attributeVOMap, Map<String, List<RoleRightVO>> roleRightMap){
 		UILayoutVO layoutVO = new UILayoutVO();
 		if(page !=null ){
 			layoutVO.setOid(page.plOId);
@@ -1274,7 +1274,7 @@
 	 * @param pages 鏁版嵁瀵硅薄
 	 * @return 鏄剧ず瀵硅薄
 	 */
-	private List<UIComponentVO> uiComponentDO2VOs(Collection<PLPageDefination> pages, boolean queryDetail,Map<String, OsAttributeVO> attributeVOMap, Map<String, RoleRightVO> roleRightMap){
+	private List<UIComponentVO> uiComponentDO2VOs(Collection<PLPageDefination> pages, boolean queryDetail,Map<String, OsAttributeVO> attributeVOMap, Map<String, List<RoleRightVO>> roleRightMap){
 		List<UIComponentVO> componentVOS = new ArrayList<>();
 		pages.stream().forEach(page->{
 			componentVOS.add(uiComponentDO2VO(page,queryDetail,attributeVOMap,roleRightMap));
@@ -1288,7 +1288,7 @@
 	 * @return 鏄剧ず瀵硅薄
 	 */
 	@VciUnLog
-	private UIComponentVO uiComponentDO2VO(PLPageDefination page, boolean queryDetail, Map<String, OsAttributeVO> attributeVOMap, Map<String, RoleRightVO> roleRightMap){
+	private UIComponentVO uiComponentDO2VO(PLPageDefination page, boolean queryDetail, Map<String, OsAttributeVO> attributeVOMap, Map<String, List<RoleRightVO>> roleRightMap){
 		UIComponentVO componentVO = new UIComponentVO();
 		if(page !=null){
 			componentVO.setOid(page.plOId);
@@ -1466,7 +1466,7 @@
 	 * @return 鎸夐挳鐨勪俊鎭�
 	 */
 	@Override
-	public List<UIButtonDefineVO> listButtonByComponent(String pkComponent, Map<String, RoleRightVO> roleRightMap){
+	public List<UIButtonDefineVO> listButtonByComponent(String pkComponent, Map<String, List<RoleRightVO>> roleRightMap){
 		try {
 			List<UIButtonDefineVO> buttonDefineVOS = buttonDO2VOs(Arrays.stream(platformClientUtil.getUIService().getPLTabButtonsByTableOId(pkComponent)).collect(Collectors.toSet())).stream().sorted(((o1, o2) -> o1.getOrderNum().compareTo(o2.getOrderNum()))).collect(Collectors.toList());
 			if(Func.isEmpty(roleRightMap)){
@@ -1478,12 +1478,20 @@
 			while (buttonDefineVO.hasNext()){
 				UIButtonDefineVO buttonDefine = buttonDefineVO.next();
 				if(roleRightMap.containsKey(buttonDefine.getPkComponent())) {
-					Long rightValue = roleRightMap.get(buttonDefine.getPkComponent()).getRightValue();
+					List<Long> rightValues = roleRightMap.get(buttonDefine.getPkComponent()).stream()
+							.map(e -> e.getRightValue()).collect(Collectors.toList());
 					int nodeValue = buttonDefine.getOrderNum();
 					if (nodeValue >= 0 && nodeValue <= 63) {
+						boolean authFlag = false;
 						//杩涜浣嶄笌鎿嶄綔锛屽鏋滅浉绛夊垯琛ㄧず鍏锋湁褰撳墠鎿嶄綔鐨勬潈闄�
-						long preValue = (rightValue >> nodeValue) & 1;
-						if (preValue != 1) {
+						for (Long rightValue : rightValues) {
+							long preValue = (rightValue >> nodeValue) & 1;
+							if (preValue == 1) {
+								authFlag = true;
+								break;
+							}
+						}
+						if(!authFlag){
 							buttonDefineVO.remove();
 						}
 					}
@@ -1642,7 +1650,7 @@
 			throw WebUtil.getVciBaseException(vciError);
 		}
 		// 1銆佹牴鎹綋鍓嶈鑹插垽鏂槸绠$悊浜哄憳杩樻槸鏅�氱敤鎴凤紙姝e父鏉ヨ鍙湁鏅�氱敤鎴锋墠浼氱敤鍒拌鏌ヨ鎺ュ彛锛�
-		Map<String, RoleRightVO> roleRightMap = uiManagerServiceI.getRoleRightMap(null);
+		Map<String, List<RoleRightVO>> roleRightMap = uiManagerServiceI.getRoleRightMap(null);
 		// 2銆佹寜鐓у綋鍓嶇櫥褰曠敤鎴锋煡璇㈡潈闄愶紙鍔熻兘鏉冮檺鍜孶I鎺堟潈鐨勬巿鏉冧俊鎭兘鏄斁鍦ㄥ悓涓�寮犺〃閲岀殑锛�
 		// 3銆佹壘鍑哄綋鍓嶈鏌ヨ鐨刄I涓婁笅鏂�
 		PLUILayout context = null;
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/UIManagerServiceImpl.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/UIManagerServiceImpl.java
index 572c517..e6b6c33 100644
--- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/UIManagerServiceImpl.java
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/UIManagerServiceImpl.java
@@ -1696,7 +1696,7 @@
         String type = StringUtils.isBlank(conditionMap.get("type")) ? "" : conditionMap.get("type");
         String context = StringUtils.isBlank(conditionMap.get("context")) ? "" : conditionMap.get("context");
         boolean showCheckBox = Boolean.parseBoolean(conditionMap.get("showCheckBox"));
-        Map<String,RoleRightVO> roleRightVOMap = new HashMap<>();
+        Map<String, List<RoleRightVO>> roleRightVOMap = new HashMap<>();
         if(StringUtils.isNotBlank(roleId)){
             roleRightVOMap = this.getRoleRightMap(roleId);
         }
@@ -1734,7 +1734,7 @@
      * @throws PLException
      */
     @Override
-    public Map<String,RoleRightVO> getRoleRightMap(String roleId) throws PLException {
+    public Map<String, List<RoleRightVO>> getRoleRightMap(String roleId) throws PLException {
         RoleRightInfo[] rightInfos = null;
         String userName = WebThreadLocalUtil.getCurrentUserSessionInfoInThread().getUserId();
         if(Func.isBlank(roleId)){
@@ -1743,7 +1743,9 @@
             rightInfos = platformClientUtil.getFrameworkService().getRoleRightList(roleId,userName);
         }
         List<RoleRightVO> roleRightVOList = roleRightDOO2VOS(Arrays.asList(rightInfos));
-        Map<String,RoleRightVO> roleRightVOMap = roleRightVOList.stream().collect(Collectors.toMap(RoleRightVO::getFuncId,roleRightVO ->roleRightVO,(oldValue,newOldValue)->oldValue));
+        //鍒嗙粍鎿嶄綔
+        Map<String, List<RoleRightVO>> roleRightVOMap = roleRightVOList.stream().collect(Collectors.groupingBy(RoleRightVO::getFuncId,
+                Collectors.mapping(e ->e, Collectors.toList())));
         return roleRightVOMap;
     }
 
@@ -2145,7 +2147,7 @@
      * @param contextList
      * @param isShowCheckBox
      */
-    private void setChildNode(List<Tree> parentTree, List<PLUILayout>contextList,Map<String,RoleRightVO> roleRightVOMap, boolean isShowCheckBox){
+    private void setChildNode(List<Tree> parentTree, List<PLUILayout>contextList,Map<String, List<RoleRightVO>> roleRightVOMap, boolean isShowCheckBox){
         Optional.ofNullable(parentTree).orElseGet(()->new ArrayList<>()).stream().forEach(pTree -> {
             Object funcObj = pTree.getData();
             List<Tree> chiledTreeList = new ArrayList<>();
@@ -2224,7 +2226,7 @@
                 PLTabButton plTabButton = (PLTabButton) funcObj;
                 String id = plTabButton.plTableOId;
                 if(roleRightVOMap.containsKey(id)){
-                    RoleRightVO roleRightVO = roleRightVOMap.get(id);
+                    RoleRightVO roleRightVO = roleRightVOMap.get(id).get(0);
                     Long rightValue = roleRightVO.getRightValue();
                     int nodeValue = plTabButton.plSeq;
                     if (nodeValue >= 0 && nodeValue <= 63) {
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/WebFlowServiceImpl.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/WebFlowServiceImpl.java
new file mode 100644
index 0000000..6ca01fb
--- /dev/null
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/WebFlowServiceImpl.java
@@ -0,0 +1,142 @@
+package com.vci.web.service.impl;
+
+import com.vci.corba.common.PLException;
+import com.vci.corba.wf.data.ProcessCategoryInfo;
+import com.vci.corba.wf.data.ProcessDefinitionInfo;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.BaseQueryObject;
+import com.vci.starter.web.pagemodel.DataGrid;
+import com.vci.starter.web.util.Lcm.Func;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.web.dao.WebProcessDaoI;
+import com.vci.web.service.WebFlowServiceI;
+import com.vci.web.util.PlatformClientUtil;
+import com.vci.web.util.WebUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Arrays;
+import java.util.Comparator;
+import java.util.Date;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 娴佺▼鏈嶅姟
+ * @author ludc
+ * @date 2025/1/14 17:28
+ */
+@Service
+public class WebFlowServiceImpl implements WebFlowServiceI {
+
+    /**
+     * 骞冲彴璋冪敤瀹㈡埛绔�
+     */
+    @Autowired
+    private PlatformClientUtil platformClientUtil;
+
+    @Autowired
+    private WebProcessDaoI webProcessDaoI;
+
+    /**
+     * 娴佺▼鍒嗙被鍏ㄦ煡璇�
+     * @param parentId
+     * @return
+     * @throws PLException
+     */
+    @Override
+    public List<ProcessCategoryInfo> getProcessCategories(String parentId) throws PLException {
+        VciBaseUtil.alertNotNull(parentId,"娴佺▼鍒嗙被鐖朵富閿�");
+        ProcessCategoryInfo[] processCategories = platformClientUtil.getWFService().getProcessCategories(parentId);
+        List<ProcessCategoryInfo> processCategoryInfoList = Arrays.asList(processCategories).stream().sorted((Comparator.comparing(o -> o.id))).collect(Collectors.toList());
+        return processCategoryInfoList;
+    }
+
+    /**
+     * 娴佺▼鍒嗙被鍒嗛〉鏌ヨ
+     * @param baseQueryObject
+     * @return
+     */
+    @Override
+    public DataGrid<ProcessCategoryInfo> getProcessCategoriesByPage(BaseQueryObject baseQueryObject) throws PLException {
+        String parentId = baseQueryObject.getConditionMap().get("parentId");
+        VciBaseUtil.alertNotNull(parentId,"娴佺▼鍒嗙被鐖朵富閿�");
+        int page = baseQueryObject.getPage();
+        int limit = baseQueryObject.getLimit();
+        ProcessCategoryInfo[] processCategories = platformClientUtil.getWFService().getProcessCategoriesByPage(parentId,limit,page);
+        List<ProcessCategoryInfo> processCategoryInfoList = Arrays.asList(processCategories).stream().sorted((Comparator.comparing(o -> o.id))).collect(Collectors.toList());
+        DataGrid<ProcessCategoryInfo> dataGrid = new DataGrid<>();
+        dataGrid.setData(processCategoryInfoList);
+        dataGrid.setPage(page);
+        dataGrid.setLimit(limit);
+        //dataGrid.setTotal();
+        return dataGrid;
+    }
+
+    /**
+     * 淇濆瓨娴佺▼鍒嗙被
+     * @param category
+     * @return 杩斿洖涓婚敭
+     */
+    @Override
+    public String saveProcessCategory(ProcessCategoryInfo category) throws PLException {
+        VciBaseUtil.alertNotNull(category,"娴佺▼鍒嗙被瀵硅薄",category.name,"娴佺▼鍒嗙被鍚嶇О");
+        this.checkNameExisted(category);
+        if(Func.isBlank(category.parentId)){
+            category.parentId = "root";
+        }
+        long time = new Date().getTime();
+        String userId = WebUtil.getCurrentUserId();
+        category.createTime = time;
+        category.modifyTime = time;
+        category.creator = userId;
+        category.modifer = userId;
+        return platformClientUtil.getWFService().saveProcessCategory(category);
+    }
+
+    /**
+     * 淇敼娴佺▼鍒嗙被
+     * @param category
+     * @return
+     */
+    @Override
+    public boolean updateProcessCategory(ProcessCategoryInfo category) throws PLException {
+        VciBaseUtil.alertNotNull(category,"娴佺▼鍒嗙被瀵硅薄",category.name,"娴佺▼鍒嗙被鍚嶇О");
+        if(Func.isBlank(category.parentId)){
+            category.parentId = "root";
+        }
+        this.checkNameExisted(category);
+        category.modifyTime = new Date().getTime();
+        category.modifer = WebUtil.getCurrentUserId();
+        return platformClientUtil.getWFService().updateProcessCategory(category);
+    }
+
+    /**
+     * 鍒犻櫎娴佺▼鍒嗙被
+     * @param id
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public boolean deleteProcessCategory(String id) throws Exception {
+        VciBaseUtil.alertNotNull(id,"寰呭垹闄ゆ祦绋嬪垎绫荤殑涓婚敭");
+        ProcessDefinitionInfo[] processDefinitions = platformClientUtil.getWFService().getProcessDefinitions(id);
+        if(processDefinitions.length>0){
+            new VciBaseException( "鍒嗙被涓嬫湁妯℃澘锛岃鍏堝垹闄ゆā鐗堬紒");
+        }
+        return platformClientUtil.getWFService().deleteProcessCategory(id);
+    }
+
+    /**
+     * 鏍规嵁涓婚敭鍜屽悕绉版煡璇㈡祦绋嬪垎绫绘槸鍚﹀瓨鍦�
+     * @param category
+     * @return
+     */
+    private void checkNameExisted(ProcessCategoryInfo category) throws PLException{
+        //鍒ゆ柇鏄惁瀛樺湪鐩稿悓鍚嶇О鐨勬ā鏉垮垎绫�
+        if(platformClientUtil.getWFService().existProcessCategory(category.id, category.name)){
+            throw new VciBaseException("妯℃澘鍒嗙被鐨勫悕绉颁笉鑳介噸澶嶏紒");
+        }
+    }
+
+}

--
Gitblit v1.9.3