// Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov.
|
// Jad home page: http://www.kpdus.com/jad.html
|
// Decompiler options: packimports(3) radix(10) lradix(10)
|
// Source File Name: PLMWorkItem.java
|
|
package com.vci.server.workflow.plugins;
|
|
import com.vci.common.qt.object.*;
|
import com.vci.common.util.CollectionUtils;
|
import com.vci.common.utility.ObjectUtility;
|
import com.vci.corba.bofactory.BOFactoryServicePrx;
|
import com.vci.corba.common.VCIError;
|
import com.vci.corba.omd.data.*;
|
import com.vci.corba.query.ObjectQueryServicePrx;
|
import com.vci.corba.workflow.data.FlowInstanceInfo;
|
import com.vci.omd.constants.BusinessConstants;
|
import com.vci.omd.utils.ObjectTool;
|
import com.vci.server.base.persistence.dao.HibernateSessionFactory;
|
import com.vci.server.base.utility.OQueryHelper;
|
import com.vci.server.base.utility.ServerServiceProvider;
|
import com.vci.server.workflow.common.resouce.WorkflowProperties;
|
import com.vci.server.workflow.server.interfaces.PLMWorkItemInterface;
|
import com.vci.server.workflow.server.template.ProcessTemplateService;
|
import java.util.*;
|
|
import org.apache.commons.lang3.StringUtils;
|
import org.hibernate.SQLQuery;
|
import org.jbpm.api.task.Task;
|
|
|
public class PLMWorkItem implements PLMWorkItemInterface {
|
|
|
public PLMWorkItem() {
|
|
}
|
|
public void saveForStart(FlowInstanceInfo var, Task task, String userName, String taskId, String executionid, String objIds[], Map<String, Object> variables)
|
throws VCIError
|
{
|
BOFactoryServicePrx bofService = ServerServiceProvider.getBOFService();
|
|
List<LinkObject> cloList = new ArrayList<LinkObject>();
|
List<BusinessObject> cboList = new ArrayList<BusinessObject>();
|
|
//����workitem����
|
BusinessObject fromBo = bofService.initBusinessObject(WI_NAME);
|
fromBo.id = ObjectUtility.getNewObjectID36();
|
fromBo.name = (new StringBuilder(String.valueOf(var.processName))).append("-").append(task.getName()).toString();
|
fromBo.description = var.desc;
|
fromBo.lcStatus = "Executing";
|
// fromBo.creator = "WorkFlowAdmin";
|
// fromBo.owner = userName;
|
ObjectTool.setBOAttributeValue(fromBo, "code", task.getName());
|
ObjectTool.setBOAttributeValue(fromBo, "assigner", var.creator);
|
ObjectTool.setBOAttributeValue(fromBo, "principal", userName);
|
ObjectTool.setBOAttributeValue(fromBo, "worktype", "2");
|
ObjectTool.setBOAttributeValue(fromBo, "businesstype", "5");
|
ObjectTool.setBOAttributeValue(fromBo, "taskoid", taskId);
|
ObjectTool.setBOAttributeValue(fromBo, "executionid", executionid);
|
cboList.add(fromBo);
|
|
//List<BusinessObject> toBos = new ArrayList<BusinessObject>();
|
BusinessObject[] toBOs = bofService.getBatchBusinessObject(objIds, var.tableName);
|
for(int j = 0; j < toBOs.length; j++)
|
{
|
BusinessObject toBO = toBOs[j];
|
|
//����workitem����˶���֮��Ĺ�ϵ
|
LinkObject clo = bofService.initLinkObject("input");
|
//BusinessObject toBO = boDelegate.getInfoBusinessObject(objId[j], var.tableName);
|
//toBos.add(toBO);
|
ObjectTool.setLOAttributeValue(clo, "linkdescription", var.desc);
|
ObjectTool.setLOFromBO(clo, fromBo);
|
ObjectTool.setLOToBO(clo, toBO);
|
cloList.add(clo);
|
}
|
//�����Ƿ����workflowinstance�洢�ж�
|
// if (isWorkFlowInstanceExist()) {
|
// this.cunstructWorkFlowInstanceObj(bofBoDelegate, loDelegate, cboList, cloList, var, executionid, toBOs);
|
// }
|
|
BusinessObject[] bos = cboList.toArray(new BusinessObject[0]);
|
// BusinessObjectListHolder bosh = new BusinessObjectListHolder();
|
// bosh.value = cboList.toArray(new BusinessObject[0]);
|
|
LinkObject[] los = cloList.toArray(new LinkObject[0]);
|
// LinkObjectListHolder losh = new LinkObjectListHolder();
|
// losh.value = cloList.toArray(new LinkObject[0]);
|
bofService.batchCreateBusinessObjectWithLink(bos, los);
|
//_bofService.batchCreateBusinessObjectWithLink((BusinessObject[])cboList.toArray(new BusinessObject[0]), (LinkObject[])cloList.toArray(new LinkObject[0]));
|
}
|
|
/**
|
* 判断流程实例是否存在
|
* @return
|
*/
|
private boolean isWorkFlowInstanceExist() {
|
String isWFInstanceExist = WorkflowProperties.getStringProperty("workflow.plmworkflowInstance.isExist");
|
if (isWFInstanceExist.equalsIgnoreCase("y")) {
|
return true;
|
} else {
|
return false;
|
}
|
}
|
|
/**
|
*
|
* @param bofBoDelegate
|
* @param loDelegate
|
* @param cboList
|
* @param cloList
|
* @param var
|
* @param executionid
|
* @param toBos
|
* @throws VCIError
|
*/
|
private void cunstructWorkFlowInstanceObj(List<BusinessObject> cboList, List<LinkObject> cloList, FlowInstanceInfo var, String executionid,
|
BusinessObject[] toBos) throws VCIError {
|
|
System.out.println("=======================PLMWorkItem:创建流程实例对象=========================");
|
BOFactoryServicePrx bofService = ServerServiceProvider.getBOFService();
|
|
//����workflowinstance����
|
BusinessObject wfInstanceBo = bofService.initBusinessObject(WFI_NAME);
|
wfInstanceBo.id = ObjectUtility.getNewObjectID36();
|
wfInstanceBo.name = var.processName;
|
wfInstanceBo.description = var.desc;
|
wfInstanceBo.lcStatus = "Executing";
|
ObjectTool.setBOAttributeValue(wfInstanceBo, "executionid", executionid);
|
cboList.add(wfInstanceBo);
|
|
for(int j = 0; j < toBos.length; j++)
|
{
|
//����workflowinstance����˶���֮��Ĺ�ϵ
|
LinkObject clo = bofService.initLinkObject("input");
|
ObjectTool.setLOAttributeValue(clo, "linkdescription", var.desc);
|
ObjectTool.setLOFromBO(clo, wfInstanceBo);
|
ObjectTool.setLOToBO(clo, toBos[j]);
|
cloList.add(clo);
|
}
|
}
|
|
|
/**
|
* /修改流程处理人
|
*/
|
public void updateWorkItemPrincipal(String taskId, String curUserName) throws VCIError {
|
BOFactoryServicePrx bofService = ServerServiceProvider.getBOFService();
|
ObjectQueryServicePrx oqService = ServerServiceProvider.getOQService();
|
|
QueryTemplate qt = new QueryTemplate();
|
List<String> list = new ArrayList<String>();
|
list.add("*");
|
qt.setBtmType(WI_NAME);
|
qt.setClauseList(list);
|
qt.setId("p");
|
qt.setType("btm");
|
qt.setRightFlag(false);
|
Map<String, String> map = new HashMap<String, String>();
|
map.put("businesstype", "5");
|
map.put("taskoid", taskId);
|
map.put("lcstatus", "Executing");
|
Condition condition = OQueryHelper.getCondition(map);
|
qt.setCondition(condition);
|
BusinessObject findBTMObjects[] = oqService.findBTMObjects(qt.getId(), OQueryHelper.getQTTextByQT(qt));
|
|
List<BusinessObject> oldBoUpdatelist = new ArrayList<BusinessObject>();
|
for (BusinessObject businessObject : findBTMObjects) {
|
//BusinessObject oldBO = boDelegate.getInfoBusinessObject(businessObject.oid, "WorkItem".toLowerCase());
|
ObjectTool.setBOAttributeValue(businessObject, "principal", curUserName);
|
oldBoUpdatelist.add(businessObject);
|
}
|
if(oldBoUpdatelist.size() > 0) {
|
// BusinessObjectListHolder bosh = new BusinessObjectListHolder();
|
// bosh.value = oldBoUpdatelist.toArray(new BusinessObject[0]);
|
bofService.batchUpdateBusinessObject(oldBoUpdatelist.toArray(new BusinessObject[0]));
|
}
|
}
|
|
/**
|
* 任务表的名称
|
*/
|
private static final String WI_TABLE_NAME = "PLATFORMBTM_WORKITEM";
|
private static final String WFI_TABLE_NAME = "PLATFORMBTM_WORKFLOWINSTANCE";
|
|
private static final String WFI_NAME = "workflowinstance";
|
private static final String WI_NAME = "workitem";
|
|
|
/**
|
* �Լ�ִ�е��������Ϊ���״̬�����˵�ֱ��ɾ��
|
*/
|
public String[] updataWorkItem(String taskId, String executId, String curUserName, String owner, Map<String, String> linkDataMap)
|
throws VCIError
|
{
|
ObjectQueryServicePrx oqService = ServerServiceProvider.getOQService();
|
|
//weidy@2020-7-19优化
|
//这个方法每次执行平均在200多ms以上,占流程任务执行时间的4分之一
|
|
//以前的逻辑
|
//1. 使用用户查询该用户的流程任务,并且是当前流程中的任务。获取其中的oid(而且如果有重复的时候,是最后一条的oid)
|
//2. 查询当前任务中对应的任务(??是一个jbpm任务,在workitem里有多条吗?)。其中如果是当前用户处理的那条任务就修改;不是当前用户那一条就删除
|
//3. 使用input查询t_oid
|
|
//之前的代码存在的问题是,调用平台的接口会查询缓存,并且会查询很多无关的属性,耗时较慢
|
|
//使用当前用户查询
|
String queryWorkItemByUserSql = "select creator,oid from " + WI_TABLE_NAME + " where Principal = '"
|
+ curUserName.trim() + "' and BusinessType= '5' and executionid ='" + executId.trim() + "'";
|
String[][] workItemResult = oqService.queryBySqlWithoutKey(queryWorkItemByUserSql);
|
if(workItemResult == null || workItemResult.length == 0) {
|
throw new VCIError("查询任务对象出现了错误",new String[] {});
|
}
|
String workItemOid = "";
|
if(workItemResult[0] != null && workItemResult[0].length > 1) {
|
owner = workItemResult[0][0];
|
workItemOid = workItemResult[0][1];
|
}
|
|
//使用任务主键查询,看看除了当前用户,还有没有其他的用户处理的任务
|
|
String queryWorkItemByTaskSql = "select principal,oid from " + WI_TABLE_NAME + " where BusinessType= '5' and TaskOID = '" + taskId.trim() + "'";
|
String[][] allUserTaskResult = oqService.queryBySqlWithoutKey(queryWorkItemByTaskSql);
|
if(allUserTaskResult == null || allUserTaskResult.length == 0) {
|
throw new VCIError("查询任务对象出现了错误,taskId",new String[] {});
|
}
|
Set<String> needUpdateWorkItemOidList = new HashSet<String>();
|
Set<String> needDeleteWorkItemOidList = new HashSet<String>();
|
for(int i = 0 ; i < allUserTaskResult.length ; i ++) {
|
String[] record = allUserTaskResult[i];
|
if(record != null && record.length > 1) {
|
String principal = record[0];
|
String oid = record[1];
|
if(curUserName.equalsIgnoreCase(principal)) {
|
//说明是当前用户的那条任务
|
needUpdateWorkItemOidList.add(oid);
|
}else {
|
needDeleteWorkItemOidList.add(oid);
|
}
|
}
|
}
|
|
//执行修改和删除
|
if(!CollectionUtils.isEmpty(needUpdateWorkItemOidList)) {
|
String updateSql = "update " + WI_TABLE_NAME + " set " + BusinessConstants.SELECT_LCSTATUS.toLowerCase() + " = 'Completed' where oid ='";
|
for(String oid : needUpdateWorkItemOidList) {
|
String sql = updateSql + oid + "'";
|
HibernateSessionFactory.getSession().createSQLQuery(sql).executeUpdate();
|
}
|
}
|
if(!CollectionUtils.isEmpty(needDeleteWorkItemOidList)) {
|
String deleteSql = "delete from " + WI_TABLE_NAME + " where oid ='" ;
|
//因为oid本身就是查询出来的,所以不需要再去获取BO对象了
|
for(String oid : needDeleteWorkItemOidList) {
|
String sql = deleteSql + oid + "'";
|
HibernateSessionFactory.getSession().createSQLQuery(sql).executeUpdate();
|
}
|
}
|
|
//查询input中的t_oid
|
//平台中因为凡是使用流程的都会使用input这个链接类型,平台会自动为这个Input添加视图,查询的时候会查询这个视图,比较耗时
|
String queryInputToOidSql = "select t_oid from platformlt_input where f_oid = '" + workItemOid + "'";
|
String[][] inputResult = oqService.queryBySqlWithoutKey(queryInputToOidSql);
|
if(inputResult == null || inputResult.length == 0) {
|
return new String[0];
|
}
|
String ObjectOids[] = new String[inputResult.length];
|
for(int i = 0 ; i < inputResult.length ; i ++) {
|
if(inputResult[i] !=null && inputResult[i].length>0) {
|
ObjectOids[i] = inputResult[i][0];
|
}else {
|
ObjectOids[i] = "";
|
}
|
}
|
return ObjectOids;
|
|
}
|
|
public String getUser(String curUserName, String executId)
|
throws VCIError
|
{
|
ObjectQueryServicePrx oqService = ServerServiceProvider.getOQService();
|
|
//weidy@2020-7-19
|
//只是查询creator,以前这种方式需要查询相关的缓存等内容,所以调整一下
|
String queryWorkItemByUserSql = "select creator from " + WI_TABLE_NAME + " where Principal = '"
|
+ curUserName.trim() + "' and BusinessType= '5' and executionid ='" + executId.trim() + "'";
|
String[][] workItemResult = oqService.queryBySqlWithoutKey(queryWorkItemByUserSql);
|
if(workItemResult == null || workItemResult.length == 0) {
|
throw new VCIError("查询任务对象出现了错误",new String[] {});
|
}
|
String owner = "";
|
if(workItemResult[0] != null && workItemResult[0].length > 0) {
|
return workItemResult[0][0];
|
}
|
return owner ;
|
}
|
|
/**
|
* 删除分支任务
|
*/
|
public void deleteForkTask(String excutionid)
|
throws VCIError
|
{
|
BOFactoryServicePrx bofService = ServerServiceProvider.getBOFService();
|
ObjectQueryServicePrx oqService = ServerServiceProvider.getOQService();
|
|
QueryTemplate qtl = new QueryTemplate();
|
List<String> queryList = new ArrayList<String>();
|
queryList.add("*");
|
qtl.setBtmType(WI_NAME);
|
qtl.setClauseList(queryList);
|
qtl.setId("p");
|
qtl.setType("btm");
|
qtl.setRightFlag(false);
|
Map<String, String> map = new HashMap<String, String>();
|
map.put("executionid", (new StringBuilder(String.valueOf(excutionid))).append("*").toString());
|
Condition condition = OQueryHelper.getCondition(map);
|
qtl.setCondition(condition);
|
BusinessObject findBTMObjects[] = oqService.findBTMObjects(qtl.getId(), OQueryHelper.getQTTextByQT(qtl));
|
bofService.batchDeleteBusinessObject(findBTMObjects, 1);
|
}
|
|
/**
|
* 完成任务
|
*/
|
public void saveForComplete(String userName, String ObjectOids[], Task task, String btmType,
|
String btmDesc, String processName, String nextTaskId, String owner)
|
throws VCIError
|
{
|
List<LinkObject> cloList = new ArrayList<LinkObject>();
|
List<BusinessObject> cboList = new ArrayList<BusinessObject>();
|
|
BOFactoryServicePrx bofService = ServerServiceProvider.getBOFService();
|
|
// 查询任务所在流程实例的创建人
|
String idExec = task.getExecutionId();
|
|
String ownerWFI = getFlowInstanceOwner(idExec);
|
if (StringUtils.isEmpty(ownerWFI))
|
ownerWFI = owner;
|
|
BusinessObject fromBo = bofService.initBusinessObject(WI_NAME);
|
fromBo.id = ObjectUtility.getNewObjectID36();
|
fromBo.name = (new StringBuilder(String.valueOf(processName))).append("-").append(task.getName()).toString();
|
fromBo.description = btmDesc;
|
fromBo.lcStatus = "Executing";
|
// fromBo.owner = userName;
|
// fromBo.creator = "WorkFlowAdmin";
|
ObjectTool.setBOAttributeValue(fromBo, "code", task.getName());
|
ObjectTool.setBOAttributeValue(fromBo, "assigner", ownerWFI);
|
ObjectTool.setBOAttributeValue(fromBo, "principal", userName);
|
ObjectTool.setBOAttributeValue(fromBo, "workType", "2");
|
ObjectTool.setBOAttributeValue(fromBo, "businesstype", "5");
|
ObjectTool.setBOAttributeValue(fromBo, "taskoid", nextTaskId);
|
ObjectTool.setBOAttributeValue(fromBo, "executionid", idExec);
|
cboList.add(fromBo);
|
|
for(int k = 0; k < ObjectOids.length; k++)
|
{
|
String flowinstancesql = (new StringBuilder("select t.PLPROCESSTYPE from plflowobject t where t.plobjectid ='")).append(ObjectOids[k]).append("' and t.plexecutionid = '"+task.getExecutionId()+"'").toString();
|
SQLQuery flowinstancecreateSQLQuery = HibernateSessionFactory.getSession().createSQLQuery(flowinstancesql);
|
flowinstancecreateSQLQuery.executeUpdate();
|
List<?> flowinstancelist = flowinstancecreateSQLQuery.list();
|
for(int j = 0; j < flowinstancelist.size(); j++)
|
{
|
Object object = (Object)flowinstancelist.get(j);
|
btmType = String.valueOf(object);
|
}
|
LinkObject clo = bofService.initLinkObject("input");
|
BusinessObject toBO = bofService.readBusinessObject(ObjectOids[k], btmType);
|
ObjectTool.setLOAttributeValue(clo, "linkdescription", btmDesc);
|
ObjectTool.setLOFromBO(clo, fromBo);
|
ObjectTool.setLOToBO(clo, toBO);
|
cloList.add(clo);
|
}
|
|
// BusinessObjectListHolder bosh = new BusinessObjectListHolder();
|
// bosh.value = cboList.toArray(new BusinessObject[0]);
|
//
|
// LinkObjectListHolder losh = new LinkObjectListHolder();
|
// losh.value = cloList.toArray(new LinkObject[0]);
|
bofService.batchCreateBusinessObjectWithLink(cboList.toArray(new BusinessObject[0]), cloList.toArray(new LinkObject[0]));
|
// bofService.batchCreateBusinessObjectWithLink((BusinessObject[])cboList.toArray(new BusinessObject[0]), (LinkObject[])cloList.toArray(new LinkObject[0]));
|
}
|
|
/**
|
* 完成任务
|
*/
|
public void saveForComplete_v1(String userName, String ObjectOids[], Task task, String btmType,
|
String btmDesc, String processName, String nextTaskId, String owner,
|
String objectProperty[], String objectPropertyValues[][])
|
throws VCIError
|
{
|
BOFactoryServicePrx bofService = ServerServiceProvider.getBOFService();
|
//ObjectQueryServicePrx oqService = ServerServiceProvider.getOQService();
|
|
List<LinkObject> cloList = new ArrayList<LinkObject>();
|
List<BusinessObject> cboList = new ArrayList<BusinessObject>();
|
|
String idExec = task.getExecutionId();
|
|
String ownerWFI = getFlowInstanceOwner(idExec);
|
if (StringUtils.isEmpty(ownerWFI))
|
ownerWFI = owner;
|
|
BusinessObject fromBo = bofService.initBusinessObject(WI_NAME);
|
fromBo.id = ObjectUtility.getNewObjectID36();
|
fromBo.name = (new StringBuilder(String.valueOf(processName))).append("-").append(task.getName()).toString();
|
fromBo.description = btmDesc;
|
fromBo.lcStatus = "Executing";
|
// fromBo.owner = userName;
|
// fromBo.creator = "WorkFlowAdmin";
|
ObjectTool.setBOAttributeValue(fromBo, "code", task.getName());
|
ObjectTool.setBOAttributeValue(fromBo, "assigner", ownerWFI);
|
ObjectTool.setBOAttributeValue(fromBo, "principal", userName);
|
ObjectTool.setBOAttributeValue(fromBo, "workType", "2");
|
ObjectTool.setBOAttributeValue(fromBo, "businesstype", "5");
|
ObjectTool.setBOAttributeValue(fromBo, "taskoid", nextTaskId);
|
ObjectTool.setBOAttributeValue(fromBo, "executionid", task.getExecutionId());
|
cboList.add(fromBo);
|
for(int j = 0; j < objectPropertyValues.length; j++)
|
{
|
LinkObject clo = bofService.initLinkObject("input");
|
for(int j1 = 0; j1 < objectPropertyValues[j].length; j1++)
|
{
|
String value = objectPropertyValues[j][j1];
|
String filed = objectProperty[j1].toLowerCase();
|
if("oid".equals(filed))
|
clo.toOid = value;
|
else
|
if("revisionoid".equals(filed))
|
clo.toRevOid = value;
|
else
|
if("nameoid".equals(filed))
|
clo.toNameOid = value;
|
else
|
if("btmname".equals(filed))
|
clo.toBTName = value;
|
}
|
|
ObjectTool.setLOFromBO(clo, fromBo);
|
cloList.add(clo);
|
}
|
|
// BusinessObjectListHolder bosh = new BusinessObjectListHolder();
|
// bosh.value = cboList.toArray(new BusinessObject[0]);
|
//
|
// LinkObjectListHolder losh = new LinkObjectListHolder();
|
// losh.value = cloList.toArray(new LinkObject[0]);
|
bofService.batchCreateBusinessObjectWithLink(cboList.toArray(new BusinessObject[0]), cloList.toArray(new LinkObject[0]));
|
// bofService.batchCreateBusinessObjectWithLink((BusinessObject[])cboList.toArray(new BusinessObject[0]), (LinkObject[])cloList.toArray(new LinkObject[0]));
|
}
|
|
/**
|
*保存workitem并在链接类型对象保存审批意见
|
*@author changmk
|
*/
|
public void saveForCompleteAndSaveOpinion_v1(String userName,
|
String[] objectOids, Task task, String btmType, String btmDesc,
|
String processName, String nextTaskId, String owner,
|
String[] objectProperty, String[][] allObjectPropertyValues,
|
String outcome, String approvalNote, Set<String> selecedOidSet)
|
throws VCIError {
|
// TODO Auto-generated method stub
|
List<LinkObject> cloList = new ArrayList<LinkObject>();
|
List<BusinessObject> cboList = new ArrayList<BusinessObject>();
|
|
BOFactoryServicePrx bofService = ServerServiceProvider.getBOFService();
|
|
String idExec = task.getExecutionId();
|
|
String ownerWFI = getFlowInstanceOwner(idExec);
|
if (StringUtils.isEmpty(ownerWFI))
|
ownerWFI = owner;
|
|
BusinessObject fromBo = bofService.initBusinessObject(WI_NAME);
|
fromBo.id = ObjectUtility.getNewObjectID36();
|
fromBo.name = (new StringBuilder(String.valueOf(processName))).append("-").append(task.getName()).toString();
|
fromBo.description = btmDesc;
|
fromBo.lcStatus = "Executing";
|
// fromBo.owner = userName;
|
// fromBo.creator = "WorkFlowAdmin";
|
ObjectTool.setBOAttributeValue(fromBo, "code", task.getName());
|
ObjectTool.setBOAttributeValue(fromBo, "assigner", ownerWFI);
|
ObjectTool.setBOAttributeValue(fromBo, "principal", userName);
|
ObjectTool.setBOAttributeValue(fromBo, "worktype", "2");
|
ObjectTool.setBOAttributeValue(fromBo, "businesstype", "5");
|
ObjectTool.setBOAttributeValue(fromBo, "taskoid", nextTaskId);
|
ObjectTool.setBOAttributeValue(fromBo, "executionid", task.getExecutionId());
|
cboList.add(fromBo);
|
for(int j = 0; j < allObjectPropertyValues.length; j++)
|
{
|
LinkObject clo = bofService.initLinkObject("input");
|
for(int j1 = 0; j1 < allObjectPropertyValues[j].length; j1++)
|
{
|
String value = allObjectPropertyValues[j][j1];
|
String filed = objectProperty[j1].toLowerCase();
|
if("oid".equals(filed))
|
clo.toOid = value;
|
else
|
if("revisionoid".equals(filed))
|
clo.toRevOid = value;
|
else
|
if("nameoid".equals(filed))
|
clo.toNameOid = value;
|
else
|
if("btmname".equals(filed))
|
clo.toBTName = value;
|
}
|
String option = "";
|
if (selecedOidSet.contains(allObjectPropertyValues[j][0])) {
|
option += outcome;
|
if (!"".equals(approvalNote)) {
|
option += ":" + approvalNote;
|
}
|
}
|
ObjectTool.setLOAttributeValue(clo, "linkdescription", option);
|
ObjectTool.setLOFromBO(clo, fromBo);
|
cloList.add(clo);
|
}
|
|
// BusinessObjectListHolder bosh = new BusinessObjectListHolder();
|
// bosh.value = cboList.toArray(new BusinessObject[0]);
|
//
|
// LinkObjectListHolder losh = new LinkObjectListHolder();
|
// losh.value = cloList.toArray(new LinkObject[0]);
|
bofService.batchCreateBusinessObjectWithLink(cboList.toArray(new BusinessObject[0]), cloList.toArray(new LinkObject[0]));
|
|
}
|
|
/**
|
* 结束流程
|
*/
|
public void endProcess(String processInstanceId)
|
throws VCIError
|
{
|
BOFactoryServicePrx bofService = ServerServiceProvider.getBOFService();
|
ObjectQueryServicePrx oqService = ServerServiceProvider.getOQService();
|
|
QueryTemplate qtl = new QueryTemplate();
|
List<String> queryList = new ArrayList<String>();
|
queryList.add("*");
|
qtl.setBtmType(WI_NAME);
|
qtl.setClauseList(queryList);
|
qtl.setId("p");
|
qtl.setType("btm");
|
qtl.setRightFlag(false);
|
Map<String, String> map = new HashMap<String, String>();
|
map.put("executionid", (new StringBuilder(String.valueOf(processInstanceId))).append("*").toString());
|
Condition condition = OQueryHelper.getCondition(map);
|
qtl.setCondition(condition);
|
BusinessObject findBTMObjects[] = oqService.findBTMObjects(qtl.getId(), OQueryHelper.getQTTextByQT(qtl));
|
bofService.batchDeleteBusinessObject(findBTMObjects, 1);
|
|
//��ֹ����ʱ��ͬʱ����workflowinstance״̬����Ҫ������ǰû�д˶���ļ������
|
if (isWorkFlowInstanceExist()) {
|
ObsoleteWorkflowInstance(processInstanceId);
|
}
|
}
|
|
/**
|
* 作废流程实例
|
* 设置流程实例状态为:Obsoleted
|
* @param processInstanceId
|
* @throws VCIError
|
*/
|
private void ObsoleteWorkflowInstance(String processInstanceId) throws VCIError {
|
BOFactoryServicePrx bofService = ServerServiceProvider.getBOFService();
|
ObjectQueryServicePrx oqService = ServerServiceProvider.getOQService();
|
|
QueryTemplate qtl = new QueryTemplate();
|
List<String> queryList = new ArrayList<String>();
|
queryList.add("*");
|
qtl.setBtmType(WFI_NAME);
|
qtl.setClauseList(queryList);
|
qtl.setId("workflowinstanceQuery");
|
qtl.setType("btm");
|
qtl.setRightFlag(false);
|
Map<String, String> map = new HashMap<String, String>();
|
map.put("executionid", (new StringBuilder(String.valueOf(processInstanceId))).append("*").toString());
|
Condition condition = OQueryHelper.getCondition(map);
|
qtl.setCondition(condition);
|
BusinessObject bos[] = oqService.findBTMObjects(qtl.getId(),
|
OQueryHelper.getQTTextByQT(qtl));
|
for (BusinessObject bo : bos) {
|
ObjectTool.setBOAttributeValue(bo, BusinessConstants.SELECT_LCSTATUS.toLowerCase(), "Obsoleted");
|
}
|
|
// BusinessObjectListHolder bosh = new BusinessObjectListHolder();
|
// bosh.value = bos;
|
bofService.batchUpdateBusinessObject(bos);
|
}
|
|
/**
|
* 更新任务的责任人
|
*/
|
public void updataForAssign(String fromUser, String userName[], String taskId, int j)
|
throws VCIError
|
{
|
BOFactoryServicePrx bofService = ServerServiceProvider.getBOFService();
|
|
BusinessObject bos[] = getTaskBusinessObject(fromUser, taskId);
|
ObjectTool.setBOAttributeValue(bos[0], "principal", userName[j]);
|
|
// BusinessObjectHolder boh = new BusinessObjectHolder();
|
// boh.value = bos[0];
|
bofService.updateBusinessObject(bos[0]);
|
}
|
|
/**
|
* 获取任务对象
|
* @param fromUser
|
* @param taskId
|
* @return
|
* @throws VCIError
|
*/
|
private BusinessObject[] getTaskBusinessObject(String fromUser, String taskId)
|
throws VCIError
|
{
|
QueryTemplate qtl = new QueryTemplate();
|
List<String> list = new ArrayList<String>();
|
list.add("*");
|
qtl.setBtmType(WI_NAME);
|
qtl.setClauseList(list);
|
qtl.setId("p");
|
qtl.setType("btm");
|
qtl.setRightFlag(false);
|
Map<String, String> map = new HashMap<String, String>();
|
map.put("principal", fromUser);
|
map.put("businesstype", "5");
|
map.put("taskoid", taskId);
|
Condition condition = OQueryHelper.getCondition(map);
|
qtl.setCondition(condition);
|
|
ObjectQueryServicePrx oqService = ServerServiceProvider.getOQService();
|
|
BusinessObject findBTMObjects[] = oqService.findBTMObjects(qtl.getId(), OQueryHelper.getQTTextByQT(qtl));
|
return findBTMObjects;
|
}
|
|
/**
|
* 更新任务完成状态
|
*/
|
public void updataWorkitemForComplete(String fromUser, String taskId)
|
throws VCIError
|
{
|
BOFactoryServicePrx bofService = ServerServiceProvider.getBOFService();
|
|
List<LinkObject> cloList = new ArrayList<LinkObject>();
|
List<BusinessObject> cboList = new ArrayList<BusinessObject>();
|
//List<BusinessObject> boList = new ArrayList<BusinessObject>();
|
|
BusinessObject tasks[] = getTaskBusinessObject(fromUser, taskId);
|
if (tasks == null || tasks.length == 0)
|
throw new VCIError("查询任务对象出现了错误", new String[] {});
|
|
BusinessObject task = tasks[0];
|
String idExec = ObjectTool.getBOAttributeValue(task, "executionid");
|
|
String ownerWFI = getFlowInstanceOwner(idExec);
|
if (StringUtils.isEmpty(ownerWFI))
|
ownerWFI = task.owner;
|
|
BusinessObject fromBo = bofService.initBusinessObject(WI_NAME);
|
fromBo.id = ObjectUtility.getNewObjectID36();
|
fromBo.name = task.name;
|
fromBo.description = task.description;
|
fromBo.lcStatus = "Completed";
|
// fromBo.owner = fromUser;
|
// fromBo.creator = "WorkFlowAdmin";
|
|
ObjectTool.setBOAttributeValue(fromBo, "code", ObjectTool.getBOAttributeValue(task, "code"));
|
ObjectTool.setBOAttributeValue(fromBo, "assigner", ownerWFI);
|
ObjectTool.setBOAttributeValue(fromBo, "principal", fromUser);
|
ObjectTool.setBOAttributeValue(fromBo, "worktype", "2");
|
ObjectTool.setBOAttributeValue(fromBo, "businesstype", "5");
|
ObjectTool.setBOAttributeValue(fromBo, "taskoid", taskId);
|
ObjectTool.setBOAttributeValue(fromBo, "executionid", ObjectTool.getBOAttributeValue(task, "executionid"));
|
cboList.add(fromBo);
|
String ObjectOids[] = (new ProcessTemplateService()).getDataId(ObjectTool.getBOAttributeValue(task, "executionid"));
|
// String flowinstancesql = (new StringBuilder("select t.PLPROCESSTYPE from plflowobject t where t.plexecutionid ='")).append(ObjectTool.getBOAttributeValue(task, "executionid")).append("'").toString();
|
String flowinstancesql = "select t.pltablename,t.pldesc,t.processname from PLFLOWINSTANCE t where t.plexecutionid ='"
|
+ ObjectTool.getBOAttributeValue(task, "executionid") + "'";
|
|
SQLQuery flowinstancecreateSQLQuery = HibernateSessionFactory.getSession().createSQLQuery(flowinstancesql);
|
// flowinstancecreateSQLQuery.executeUpdate();
|
List<?> flowinstancelist = flowinstancecreateSQLQuery.list();
|
String btmType = "";
|
String btmDesc = "";
|
//String processName = "";
|
for(int j = 0; j < flowinstancelist.size(); j++)
|
{
|
Object object[] = (Object[])flowinstancelist.get(j);
|
btmType = String.valueOf(object[0]);
|
btmDesc = (String) object[1];
|
//processName = (String) object[2];
|
}
|
|
for(int k = 0; k < ObjectOids.length; k++)
|
{
|
String flowobjectsql = (new StringBuilder("select t.PLPROCESSTYPE from plflowobject t where t.plobjectid ='")).append(ObjectOids[k]).append("' and t.plexecutionid = '"+ObjectTool.getBOAttributeValue(task, "executionid")+"'").toString();
|
SQLQuery flowobjectSQLQuery = HibernateSessionFactory.getSession().createSQLQuery(flowobjectsql);
|
// flowobjectSQLQuery.executeUpdate();
|
List<?> flowobjectlist = flowobjectSQLQuery.list();
|
for(int j = 0; j < flowobjectlist.size(); j++)
|
{
|
Object object = (Object)flowobjectlist.get(j);
|
btmType = String.valueOf(object);
|
}
|
LinkObject clo = bofService.initLinkObject("input");
|
BusinessObject toBO = bofService.readBusinessObject(ObjectOids[k], btmType);
|
ObjectTool.setLOAttributeValue(clo, "linkdescription", btmDesc);
|
ObjectTool.setLOFromBO(clo, fromBo);
|
ObjectTool.setLOToBO(clo, toBO);
|
cloList.add(clo);
|
}
|
|
// BusinessObjectListHolder bosh = new BusinessObjectListHolder();
|
// bosh.value = cboList.toArray(new BusinessObject[0]);
|
//
|
// LinkObjectListHolder losh = new LinkObjectListHolder();
|
// losh.value = cloList.toArray(new LinkObject[0]);
|
bofService.batchCreateBusinessObjectWithLink(cboList.toArray(new BusinessObject[0]), cloList.toArray(new LinkObject[0]));
|
// bofService.batchCreateBusinessObjectWithLink((BusinessObject[])cboList.toArray(new BusinessObject[0]), (LinkObject[])cloList.toArray(new LinkObject[0]));
|
}
|
|
/**
|
* 任务传递
|
*/
|
public void transmitTaskByPlm(String taskid, String fromUser, String userName[])
|
throws VCIError
|
{
|
BOFactoryServicePrx bofService = ServerServiceProvider.getBOFService();
|
|
List<LinkObject> cloList = new ArrayList<LinkObject>();
|
List<BusinessObject> cboList = new ArrayList<BusinessObject>();
|
|
BusinessObject tasks[] = getTaskBusinessObject(fromUser, taskid);
|
if (tasks == null || tasks.length == 0)
|
throw new VCIError("查询任务信息失败!", null);
|
|
BusinessObject task = tasks[0];
|
|
for(int j = 0; j < userName.length; j++)
|
{
|
ObjectTool.setBOAttributeValue(task, "principal", userName[j]);
|
if(j == 0) {
|
// BusinessObjectHolder boh = new BusinessObjectHolder();
|
// boh.value = task;
|
bofService.updateBusinessObject(task);
|
}
|
else {
|
// BusinessObjectListHolder bosh = new BusinessObjectListHolder();
|
// bosh.value = tasks;
|
bofService.batchCreateBusinessObject(tasks, false, false);
|
}
|
}
|
|
String idExec = ObjectTool.getBOAttributeValue(task, "executionid");
|
|
String ownerWFI = getFlowInstanceOwner(idExec);
|
if (StringUtils.isEmpty(ownerWFI))
|
ownerWFI = task.owner;
|
|
BusinessObject fromBo = bofService.initBusinessObject(WI_NAME);
|
fromBo.id = ObjectUtility.getNewObjectID36();
|
fromBo.name = task.name;
|
fromBo.description = task.description;
|
fromBo.lcStatus = "Completed";
|
// fromBo.owner = fromUser;
|
// fromBo.creator = "WorkFlowAdmin";
|
ObjectTool.setBOAttributeValue(fromBo, "assigner", ownerWFI);
|
ObjectTool.setBOAttributeValue(fromBo, "principal", fromUser);
|
ObjectTool.setBOAttributeValue(fromBo, "worktype", "2");
|
ObjectTool.setBOAttributeValue(fromBo, "businesstype", "5");
|
ObjectTool.setBOAttributeValue(fromBo, "taskoid", taskid);
|
ObjectTool.setBOAttributeValue(fromBo, "executionid", idExec);
|
cboList.add(fromBo);
|
String ObjectOids[] = (new ProcessTemplateService()).getDataId(ObjectTool.getBOAttributeValue(task, "executionid"));
|
|
String sqlFI = String.format("select t.pltablename,t.pldesc,t.processname from PLFLOWINSTANCE t where t.plexecutionid ='%s'", idExec);
|
SQLQuery flowinstancecreateSQLQuery = HibernateSessionFactory.getSession().createSQLQuery(sqlFI);
|
// flowinstancecreateSQLQuery.executeUpdate();
|
List<?> flowinstancelist = flowinstancecreateSQLQuery.list();
|
String btmType = "";
|
String btmDesc = "";
|
//String processName = "";
|
if (flowinstancelist.size() > 0)
|
{
|
Object object[] = (Object[])flowinstancelist.get(0);
|
btmType = String.valueOf(object[0]);
|
btmDesc = (String)object[1];
|
//processName = (String)object[2];
|
}
|
|
for(int k = 0; k < ObjectOids.length; k++)
|
{
|
LinkObject clo = bofService.initLinkObject("input");
|
BusinessObject toBO = bofService.readBusinessObject(ObjectOids[k], btmType);
|
ObjectTool.setLOAttributeValue(clo, "linkdescription", btmDesc);
|
ObjectTool.setLOFromBO(clo, fromBo);
|
ObjectTool.setLOToBO(clo, toBO);
|
cloList.add(clo);
|
}
|
|
// BusinessObjectListHolder bosh = new BusinessObjectListHolder();
|
// bosh.value = cboList.toArray(new BusinessObject[0]);
|
//
|
// LinkObjectListHolder losh = new LinkObjectListHolder();
|
// losh.value = cloList.toArray(new LinkObject[0]);
|
bofService.batchCreateBusinessObjectWithLink(cboList.toArray(new BusinessObject[0]), cloList.toArray(new LinkObject[0]));
|
//bofService.batchCreateBusinessObjectWithLink((BusinessObject[])cboList.toArray(new BusinessObject[0]), (LinkObject[])cloList.toArray(new LinkObject[0]));
|
}
|
|
/**
|
* 保存并开始
|
*/
|
public void saveForStart_v1(FlowInstanceInfo var, Task task, String userName, String taskId, String executionid,
|
String objId[], Map<String, Object> variables, String objectProperty[], String objectPropertyValues[][])
|
throws VCIError
|
{
|
BOFactoryServicePrx bofService = ServerServiceProvider.getBOFService();
|
|
List<LinkObject> cloList = new ArrayList<LinkObject>();
|
List<BusinessObject> cboList = new ArrayList<BusinessObject>();
|
|
BusinessObject fromBo = bofService.initBusinessObject(WI_NAME);
|
fromBo.id = ObjectUtility.getNewObjectID36();
|
fromBo.name = (new StringBuilder(String.valueOf(var.processName))).append("-").append(task.getName()).toString();
|
fromBo.description = var.desc;
|
fromBo.lcStatus = "Executing";
|
// fromBo.creator = "WorkFlowAdmin";
|
// fromBo.owner = userName;
|
|
ObjectTool.setBOAttributeValue(fromBo, "code", task.getName());
|
ObjectTool.setBOAttributeValue(fromBo, "assigner", var.creator);
|
ObjectTool.setBOAttributeValue(fromBo, "principal", userName);
|
ObjectTool.setBOAttributeValue(fromBo, "worktype", "2");
|
ObjectTool.setBOAttributeValue(fromBo, "businesstype", "5");
|
ObjectTool.setBOAttributeValue(fromBo, "taskoid", taskId);
|
ObjectTool.setBOAttributeValue(fromBo, "executionid", executionid);
|
cboList.add(fromBo);
|
// added by cmk start
|
BusinessObject[] toBos = bofService.getBatchBusinessObject(objId, var.tableName);
|
// for(int i = 0; i < objId.length; i++)
|
// {
|
// //LinkObject clo = loDelegate.initLinkObject("input");
|
// BusinessObject toBO = boDelegate.getInfoBusinessObject(objId[i], var.tableName);
|
// toBos.add(toBO);
|
// }
|
// added by cmk end
|
for(int j = 0; j < objectPropertyValues.length; j++)
|
{
|
LinkObject clo = bofService.initLinkObject("input");
|
for(int j1 = 0; j1 < objectPropertyValues[j].length; j1++)
|
{
|
String value = objectPropertyValues[j][j1];
|
String filed = objectProperty[j1].toLowerCase();
|
if("oid".equals(filed))
|
clo.toOid = value;
|
else
|
if("revisionoid".equals(filed))
|
clo.toRevOid = value;
|
else
|
if("nameoid".equals(filed))
|
clo.toNameOid = value;
|
else
|
if("btmname".equals(filed))
|
clo.toBTName = value;
|
}
|
|
ObjectTool.setLOFromBO(clo, fromBo);
|
cloList.add(clo);
|
}
|
// added by cmk start
|
//�����Ƿ����workflowinstance�洢�ж�
|
// if (isWorkFlowInstanceExist()) {
|
// this.cunstructWorkFlowInstanceObj(bofBoDelegate, loDelegate, cboList, cloList, var, executionid, toBos);
|
// }
|
// added by cmk end
|
|
// BusinessObjectListHolder bosh = new BusinessObjectListHolder();
|
// bosh.value = cboList.toArray(new BusinessObject[0]);
|
|
// LinkObjectListHolder losh = new LinkObjectListHolder();
|
// losh.value = cloList.toArray(new LinkObject[0]);
|
bofService.batchCreateBusinessObjectWithLink(cboList.toArray(new BusinessObject[0]), cloList.toArray(new LinkObject[0]));
|
}
|
|
|
/**
|
* 更改执行中的工作流任务的负责人
|
* @param taskId 执行中的工作流任务ID
|
* @param fromUserName 原负责人
|
* @param newUserName 新负责人
|
* @author xchao
|
* @since 2018.01.18
|
* @throws VCIError
|
*/
|
public void updateExecutingWorkItemPrincipalToNewUserName(String taskId, String fromUserName, String newUserName) throws VCIError{
|
QueryTemplate qt = new QueryTemplate();
|
List<String> list = new ArrayList<String>();
|
list.add("*");
|
qt.setBtmType(WI_NAME);
|
qt.setClauseList(list);
|
qt.setId("p");
|
qt.setType("btm");
|
qt.setRightFlag(false);
|
Map<String, String> map = new HashMap<String, String>();
|
map.put("businesstype", "5");
|
map.put("taskoid", taskId);
|
map.put("lcstatus", "Executing");
|
map.put("principal", fromUserName);
|
Condition condition = OQueryHelper.getCondition(map);
|
qt.setCondition(condition);
|
|
BOFactoryServicePrx bofService = ServerServiceProvider.getBOFService();
|
ObjectQueryServicePrx oqService = ServerServiceProvider.getOQService();
|
|
|
BusinessObject findBTMObjects[] = oqService.findBTMObjects(qt.getId(), OQueryHelper.getQTTextByQT(qt));
|
|
List<BusinessObject> oldBoUpdatelist = new ArrayList<BusinessObject>();
|
for (BusinessObject businessObject : findBTMObjects) {
|
//BusinessObject oldBO = boDelegate.getInfoBusinessObject(businessObject.oid, "WorkItem".toLowerCase());
|
ObjectTool.setBOAttributeValue(businessObject, "principal", newUserName);
|
oldBoUpdatelist.add(businessObject);
|
}
|
if(oldBoUpdatelist != null && oldBoUpdatelist.size() > 0) {
|
// BusinessObjectListHolder bosh = new BusinessObjectListHolder();
|
// bosh.value = oldBoUpdatelist.toArray(new BusinessObject[0]);
|
bofService.batchUpdateBusinessObject(oldBoUpdatelist.toArray(new BusinessObject[0]));
|
}
|
}
|
|
private String getFlowInstanceOwner(String idExec) throws VCIError {
|
ObjectQueryServicePrx oqService = ServerServiceProvider.getOQService();
|
|
String sql = "select owner from " + WFI_TABLE_NAME + " where executionid ='" + idExec.trim() + "'";
|
String[][] result = oqService.queryBySqlWithoutKey(sql);
|
if(result == null || result.length == 0) {
|
return "";
|
}
|
|
if(result[0] != null && result[0].length > 0) {
|
return result[0][0];
|
}
|
|
return "";
|
}
|
}
|