重写类:ProcessClientBO,另外两个类为线程池新增类
ProcessClientBO重写部分代码块
package org.jxstar.wf.client;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ThreadPoolExecutor;
import org.jxstar.control.action.RequestContext;
import org.jxstar.dao.DaoParam;
import org.jxstar.service.BusinessObject;
import org.jxstar.service.util.TaskUtil;
import org.jxstar.util.DateUtil;
import org.jxstar.util.MapUtil;
import org.jxstar.util.config.SystemVar;
import org.jxstar.util.factory.FactoryUtil;
import org.jxstar.util.log.Log;
import org.jxstar.util.resource.JsMessage;
import org.jxstar.wf.WfException;
import org.jxstar.wf.define.WfDefineDao;
import org.jxstar.wf.engine.ProcessContext;
import org.jxstar.wf.engine.ProcessInstance;
import org.jxstar.wf.engine.ProcessInstanceManager;
import org.jxstar.wf.engine.TaskInstance;
import org.jxstar.wf.engine.TaskInstanceDao;
import org.jxstar.wf.engine.Token;
import org.jxstar.wf.engine.TokenDao;
import org.jxstar.wf.util.ProcessUtil;
import com.eam.sp.SpOutBO;
import com.eam.utils.WfClientUtil;
@SuppressWarnings("all")
public class ProcessClientBO extends BusinessObject {
private static final long serialVersionUID = -6406373057929422076L;
public String createProcess(RequestContext paramRequestContext) {
String str = paramRequestContext.getFunID();
if (!(ProcessUtil.isNeedWf(str))) {
this._log.showDebug("【{0}】功能定义中的“有效记录值”不是“审批通过”,不会执行流程启动检查!", new Object[]{str});
return _returnSuccess;
}
String[] arrayOfString = paramRequestContext.getRequestValues("keyid");
if ((arrayOfString == null) || (arrayOfString.length == 0)) {
setMessage(JsMessage.getValue("processclientbo.noid"));
return _returnFaild;
}
Map localMap = paramRequestContext.getUserInfo();
if ((localMap == null) || (localMap.isEmpty())) {
setMessage(JsMessage.getValue("processclientbo.nouser"));
return _returnFaild;
}
return _$1(str, arrayOfString, localMap);
}
private String _$1(String paramString, String[] paramArrayOfString, Map<String, String> paramMap) {
String str1 = MapUtil.getValue(paramMap, "tenant_id");
Map localMap1 = _$1(paramString, str1);
if (localMap1.isEmpty()) {
this._log.showDebug(JsMessage.getValue("processclientbo.noprocess"), new Object[]{paramString});
return _returnSuccess;
}
String str2 = MapUtil.getValue(localMap1, "exe_delay", "0");
String str3 = SystemVar.getValue("wf.instance.delay");
String str4 = (String) localMap1.get("process_title");
String str5 = "";
int i = 0;
int j = paramArrayOfString.length;
while (i < j) {
String str6 = paramArrayOfString[i];
/**
* 判断是否走审批流程
*/
if (WfClientUtil.isApproval(paramString, str6)) {
this._log.showDebug("【{0}】功能已跳过审批流程", new Object[]{paramString});
++i;
continue;
}
Map localMap2 = ProcessUtil.queryFunData(paramString, str6);
if (localMap2.isEmpty()) {
setMessage(JsMessage.getValue("processclientbo.nodata"));
return _returnFaild;
}
if (str4.length() > 0) {
str5 = TaskUtil.parseAppField(str4, localMap2, false);
if (str5.length() > 100)
str5 = str5.substring(0, 100) + "...";
localMap1.put("process_title", str5);
}
ProcessInstanceManager localProcessInstanceManager = ProcessInstanceManager.getInstance();
ProcessInstance localProcessInstance = localProcessInstanceManager.createProcess(str6, paramMap, localMap2, localMap1);
try {
localProcessInstance.create();
if ((str3.equals("0")) || (str2.equals("0"))) {
ProcessContext localProcessContext = localProcessInstanceManager.createInitContext(localProcessInstance);
localProcessContext.setUserInfo(paramMap);
localProcessInstance.startup(localProcessContext);
}
} catch (WfException localWfException) {
this._log.showError(localWfException);
setMessage(localWfException.getMessage());
return _returnFaild;
}
++i;
}
return _returnSuccess;
}
public String executeProcess(RequestContext paramRequestContext) {
try {
ProcessContext[] arrayOfProcessContext = _$2(paramRequestContext);
String str1 = paramRequestContext.getRequestValue("check_funid");
String str2 = MapUtil.getValue(paramRequestContext.getUserInfo(), "tenant_id");
String str3 = MapUtil.getValue(_$1(str1, str2), "exe_delay", "0");
String str4 = SystemVar.getValue("wf.instance.delay");
this._log.showDebug("..........exe_delay=" + str3 + ";wf.instance.delay=" + str4);
int i = 0;
int j = arrayOfProcessContext.length;
/**-----后台线程池审批,减少前端等待 start-----**/
final ThreadPoolServerImpl impl = new ThreadPoolServerImpl(arrayOfProcessContext, str3);
Runnable runnable = new Runnable() {
public void run() {
impl.performLockProcess();
}
};
new Thread(runnable).start();
/**-----后台线程池审批,减少前端等待 end-----**/
/**while (i < j)
{
ProcessInstance localProcessInstance = arrayOfProcessContext[i].getProcessInstance();
localProcessInstance.execute(arrayOfProcessContext[i]);
if ((str4.equals("0")) || (str3.equals("0")))
{
TaskInstance localTaskInstance = arrayOfProcessContext[i].getTaskInstance();
localTaskInstance.complete(arrayOfProcessContext[i]);
}
++i;
}**/
} catch (WfException localWfException) {
this._log.showError(localWfException);
setMessage(localWfException.getMessage());
return _returnFaild;
}
return _returnSuccess;
}
public String returnProcess(RequestContext paramRequestContext) {
String[] arrayOfString = paramRequestContext.getRequestValues("taskid");
if ((arrayOfString == null) || (arrayOfString.length == 0)) {
String str1 = paramRequestContext.getRequestValue("check_funid");
String str2 = paramRequestContext.getRequestValue("keyid");
arrayOfString = TaskInstanceDao.getInstance().queryTaskId(str1, str2);
if ((arrayOfString == null) || (arrayOfString.length == 0)) {
setMessage(JsMessage.getValue("wfdefine.text7"));
return _returnFaild;
}
paramRequestContext.setRequestValue("taskid", arrayOfString);
}
String str1 = ProcessUtil.getInstanceId(arrayOfString[0]);
String str2 = MapUtil.getValue(paramRequestContext.getUserInfo(), "user_id");
try {
if (!(ProcessUtil.isStarted(str1))) {
if (!(ProcessUtil.equalStartUser(str1, str2))) {
setMessage(JsMessage.getValue("wfdefine.text8"));
return _returnFaild;
}
if (!(ProcessUtil.updateAudit(str1))) {
setMessage(JsMessage.getValue("wfdefine.text9"));
return _returnFaild;
}
if (!(ProcessUtil.deleteInstance(str1))) {
setMessage(JsMessage.getValue("wfdefine.text10"));
return _returnFaild;
}
return _returnSuccess;
}
String str3 = _$3(paramRequestContext);
if ((str3 == null) || (str3.length() == 0)) {
setMessage(JsMessage.getValue("wfdefine.text11"));
return _returnFaild;
}
paramRequestContext.setRequestValue("next_nodeid", str3);
ProcessContext[] arrayOfProcessContext = _$2(paramRequestContext);
int i = 0;
int j = arrayOfProcessContext.length;
while (i < j) {
ProcessInstance localProcessInstance = arrayOfProcessContext[i].getProcessInstance();
localProcessInstance.execute(arrayOfProcessContext[i]);
TaskInstance localTaskInstance = arrayOfProcessContext[i].getTaskInstance();
localTaskInstance.complete(arrayOfProcessContext[i]);
++i;
}
} catch (WfException localWfException) {
this._log.showError(localWfException);
setMessage(localWfException.getMessage());
return _returnFaild;
}
return _returnSuccess;
}
private String _$3(RequestContext paramRequestContext)
throws WfException {
String str1 = "";
String str2 = (String) paramRequestContext.getUserInfo().get("user_id");
String str3 = paramRequestContext.getRequestValue("check_funid");
String[] arrayOfString = paramRequestContext.getRequestValues("keyid");
if ((arrayOfString == null) || (arrayOfString.length == 0))
throw new WfException(JsMessage.getValue("processclientbo.noid"));
TaskInstanceDao localTaskInstanceDao = TaskInstanceDao.getInstance();
int i = 0;
int j = arrayOfString.length;
while (i < j) {
Map localMap = localTaskInstanceDao.queryHisTask(str3, arrayOfString[i]);
if (localMap.isEmpty())
throw new WfException(JsMessage.getValue("processclientbo.nohistask"));
String str4 = (String) localMap.get("check_userid");
if (!(str2.equals(str4))) {
String str5 = (String) localMap.get("check_user");
throw new WfException(JsMessage.getValue("processclientbo.notcuruser"), new Object[]{arrayOfString[i], str5});
}
str1 = (String) localMap.get("node_id");
++i;
}
return str1;
}
private ProcessContext[] _$2(RequestContext paramRequestContext)
throws WfException {
TaskInstance[] arrayOfTaskInstance = _$1(paramRequestContext);
TokenDao localTokenDao = TokenDao.getInstance();
TaskInstanceDao localTaskInstanceDao = TaskInstanceDao.getInstance();
ProcessInstanceManager localProcessInstanceManager = ProcessInstanceManager.getInstance();
String str1 = (String) paramRequestContext.getUserInfo().get("user_id");
ProcessContext[] arrayOfProcessContext = new ProcessContext[arrayOfTaskInstance.length];
int i = 0;
int j = arrayOfTaskInstance.length;
while (i < j) {
String str2 = arrayOfTaskInstance[i].getRunState();
String str3 = arrayOfTaskInstance[i].getTaskId();
String str4 = localTaskInstanceDao.queryAssignState(str3, str1);
if ((!(str4.equals("0"))) && (!(str2.equals("0"))))
throw new WfException(JsMessage.getValue("processclientbo.donot"), new Object[]{arrayOfTaskInstance[i].getTaskId()});
String str5 = arrayOfTaskInstance[i].getInstanceId();
ProcessInstance localProcessInstance = localProcessInstanceManager.restoreInstance(str5);
String str6 = arrayOfTaskInstance[i].getNodeId();
Token localToken = localTokenDao.restoreToken(str5, str6);
ProcessContext localProcessContext = new ProcessContext();
localProcessContext.setToken(localToken);
localProcessContext.setTaskInstance(arrayOfTaskInstance[i]);
localProcessContext.setProcessInstance(localProcessInstance);
localProcessContext.setUserInfo(paramRequestContext.getUserInfo());
arrayOfProcessContext[i] = localProcessContext;
++i;
}
return arrayOfProcessContext;
}
private TaskInstance[] _$1(RequestContext paramRequestContext)
throws WfException {
Map localMap1 = paramRequestContext.getUserInfo();
if ((localMap1 == null) || (localMap1.isEmpty()))
throw new WfException(JsMessage.getValue("processclientbo.nouser"));
String str1 = (String) localMap1.get("user_id");
Map localMap2 = paramRequestContext.getUserInfo();
localMap2.put("check_type", paramRequestContext.getRequestValue("check_type"));
localMap2.put("check_desc", paramRequestContext.getRequestValue("check_desc"));
localMap2.put("next_nodeid", paramRequestContext.getRequestValue("next_nodeid"));
localMap2.put("next_userid", paramRequestContext.getRequestValue("next_userid"));
localMap2.put("next_user", paramRequestContext.getRequestValue("next_user"));
localMap2.put("deal_desc", paramRequestContext.getRequestValue("deal_desc"));
localMap2.put("noti_user", paramRequestContext.getRequestValue("noti_user"));
localMap2.put("noti_userid", paramRequestContext.getRequestValue("noti_userid"));
TaskInstanceDao localTaskInstanceDao = TaskInstanceDao.getInstance();
String[] arrayOfString1 = paramRequestContext.getRequestValues("taskid");
if ((arrayOfString1 != null) && (arrayOfString1.length > 0)) {
TaskInstance[] localObject1 = new TaskInstance[arrayOfString1.length];
int i = 0;
int j = localObject1.length;
while (i < j) {
Map localObject2 = localTaskInstanceDao.queryTask(arrayOfString1[i]);
if (((Map) localObject2).isEmpty())
throw new WfException(JsMessage.getValue("processclientbo.notask"), new Object[]{arrayOfString1[i]});
localObject1[i] = _$1((Map) localObject2, localMap2, localMap1);
++i;
}
return localObject1;
}
Object localObject1 = paramRequestContext.getRequestValue("check_funid");
String[] arrayOfString2 = paramRequestContext.getRequestValues("keyid");
if ((arrayOfString2 == null) || (arrayOfString2.length == 0))
throw new WfException(JsMessage.getValue("processclientbo.noid"));
String str2 = paramRequestContext.getRequestValue("isforce");
TaskInstance[] localObject2 = new TaskInstance[arrayOfString2.length];
int k = 0;
int l = arrayOfString2.length;
while (k < l) {
Map localMap3 = FactoryUtil.newMap();
if (str2.equals("1")) {
List localList = localTaskInstanceDao.queryTaskByDataId((String) localObject1, arrayOfString2[k]);
if (!(localList.isEmpty()))
localMap3 = (Map) localList.get(0);
} else {
localMap3 = localTaskInstanceDao.queryTaskByAssign((String) localObject1, arrayOfString2[k], str1);
}
if (localMap3.isEmpty())
throw new WfException(JsMessage.getValue("processclientbo.taskend"));
localObject2[k] = _$1(localMap3, localMap2, localMap1);
if (str2.equals("1"))
localObject2[k].setIsForce("1");
++k;
}
return localObject2;
}
private TaskInstance _$1(Map<String, String> paramMap1, Map<String, String> paramMap2, Map<String, String> paramMap3)
throws WfException {
TaskInstance localTaskInstance = new TaskInstance();
localTaskInstance.setProcessId(MapUtil.getValue(paramMap1, "process_id"));
localTaskInstance.setNodeId(MapUtil.getValue(paramMap1, "node_id"));
localTaskInstance.setNodeTitle(MapUtil.getValue(paramMap1, "node_title"));
localTaskInstance.setFunId(MapUtil.getValue(paramMap1, "fun_id"));
localTaskInstance.setDataId(MapUtil.getValue(paramMap1, "data_id"));
localTaskInstance.setInstanceId(MapUtil.getValue(paramMap1, "instance_id"));
localTaskInstance.setTaskId(MapUtil.getValue(paramMap1, "task_id"));
localTaskInstance.setRunState(MapUtil.getValue(paramMap1, "run_state"));
localTaskInstance.setStartDate(MapUtil.getValue(paramMap1, "start_date"));
localTaskInstance.setLimitDate(MapUtil.getValue(paramMap1, "limit_date"));
localTaskInstance.setEndDate(MapUtil.getValue(paramMap1, "end_date"));
localTaskInstance.setTaskDesc(MapUtil.getValue(paramMap1, "task_desc"));
localTaskInstance.setAgreeNum(MapUtil.getValue(paramMap1, "agree_num"));
localTaskInstance.setHasEmail(MapUtil.getValue(paramMap1, "has_email"));
localTaskInstance.setNoteType(MapUtil.getValue(paramMap1, "note_type"));
localTaskInstance.setIsTimeout(MapUtil.getValue(paramMap1, "is_timeout"));
localTaskInstance.setCheckUserId(MapUtil.getValue(paramMap3, "user_id"));
localTaskInstance.setCheckUserName(MapUtil.getValue(paramMap3, "user_name"));
localTaskInstance.setCheckDate(DateUtil.getTodaySec());
localTaskInstance.setCheckType(MapUtil.getValue(paramMap2, "check_type"));
localTaskInstance.setCheckDesc(MapUtil.getValue(paramMap2, "check_desc"));
localTaskInstance.setNextNodeId(MapUtil.getValue(paramMap2, "next_nodeid"));
localTaskInstance.setNextUserId(MapUtil.getValue(paramMap2, "next_userid"));
localTaskInstance.setNextUser(MapUtil.getValue(paramMap2, "next_user"));
localTaskInstance.setDealDesc(MapUtil.getValue(paramMap2, "deal_desc"));
localTaskInstance.setNotiUser(MapUtil.getValue(paramMap2, "noti_user"));
localTaskInstance.setNotiUserId(MapUtil.getValue(paramMap2, "noti_userid"));
return localTaskInstance;
}
private Map<String, String> _$1(String paramString1, String paramString2) {
WfDefineDao localWfDefineDao = WfDefineDao.getInstance();
return localWfDefineDao.queryProcessByTenant(paramString1, paramString2);
}
}
package org.jxstar.wf.client;
import org.jxstar.service.BusinessObject;
import org.jxstar.util.config.SystemVar;
import org.jxstar.wf.engine.ProcessContext;
import org.jxstar.wf.engine.ProcessInstance;
import java.util.*;
import java.util.concurrent.*;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class ThreadPoolServerImpl extends BusinessObject {
private Lock lock = new ReentrantLock(); //锁
ProcessContext[] processContext;
String str3;
public ThreadPoolServerImpl(ProcessContext[] processContext,String str3){
this.processContext=processContext;
this.str3=str3;
}
/**
* 执行锁处理
* @CSDN作者 Nuuuuud
*/
public boolean performLockProcess() {
boolean returnBool = true;
try {
lock.lock();
returnBool = new ThreadPoolServerImpl(processContext,str3).allocatingThreadPool();
} catch (Exception e1) {
returnBool = false;
e1.printStackTrace();
} finally {
lock.unlock();
}
_log.showInfo("执行:" + (returnBool ? "成功" : "失败"));
return returnBool;
}
/**
* 线程任务分配
* @CSDN作者 Nuuuuud
*/
public boolean allocatingThreadPool() throws Exception {
// 需要的线程池数量
int threadNum = 17;
//CountDownLatch latch = new CountDownLatch(threadNum);//线程计数器
//创建线程池
ExecutorService executorService = Executors.newFixedThreadPool(threadNum);
//Future存储执行的线程,便于控制线程状态获取
List<FutureTask<String>> futures = new ArrayList<FutureTask<String>>(threadNum);
int excCount = 0;
for (ProcessContext processContext : processContext) {
ProcessInstance processInstance = processContext.getProcessInstance();
//线程需要执行的任务
ProcessServerImpl iotServerRunnable = new ProcessServerImpl(processInstance,processContext,str3);
//添加到future控制
FutureTask<String> future = new FutureTask<String>(iotServerRunnable);
//线程池执行
try {
executorService.submit(future);
} catch (Exception e) {
e.printStackTrace();
return false;
}
//添加到List中,后续进行线程状态判断。
futures.add(future);
excCount++;
}
for (Future<String> future : futures) {
future.get();
}
_log.showDebug("运行次数:" + excCount);
//关闭线程池
executorService.shutdown();
return true;
}
}
package org.jxstar.wf.client;
import org.jxstar.dao.DaoParam;
import org.jxstar.service.BusinessObject;
import org.jxstar.util.config.SystemVar;
import org.jxstar.wf.engine.ProcessContext;
import org.jxstar.wf.engine.ProcessInstance;
import org.jxstar.wf.engine.TaskInstance;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.concurrent.*;
public class ProcessServerImpl extends BusinessObject implements Callable<String> {
ProcessInstance localProcessInstance;
ProcessContext processContext;
String str3;
//无参构造
public ProcessServerImpl() {
}
//有参构造
public ProcessServerImpl(ProcessInstance localProcessInstance, ProcessContext processContext, String str3) {
this.localProcessInstance = localProcessInstance;
this.processContext = processContext;
this.str3 = str3;
}
/**
* 此方法执行实际业务
*
* @CSDN作者 Nuuuuud
*/
public String call() throws Exception {
long startTime = new Date().getTime();
String str4 = SystemVar.getValue("wf.instance.delay");
localProcessInstance.execute(processContext);
if ((str4.equals("0")) || (str3.equals("0"))) {
TaskInstance localTaskInstance = processContext.getTaskInstance();
localTaskInstance.complete(processContext);
}
long endTime = new Date().getTime();
_log.showDebug("线程【" + Thread.currentThread().getName() + "】执行时间:" + (endTime - startTime) + "毫秒;");
return null;
}
}