// 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 variables) throws VCIError { BOFactoryServicePrx bofService = ServerServiceProvider.getBOFService(); List cloList = new ArrayList(); List cboList = new ArrayList(); //����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 toBos = new ArrayList(); 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 cboList, List 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 list = new ArrayList(); list.add("*"); qt.setBtmType(WI_NAME); qt.setClauseList(list); qt.setId("p"); qt.setType("btm"); qt.setRightFlag(false); Map map = new HashMap(); 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 oldBoUpdatelist = new ArrayList(); 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 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 needUpdateWorkItemOidList = new HashSet(); Set needDeleteWorkItemOidList = new HashSet(); 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 queryList = new ArrayList(); queryList.add("*"); qtl.setBtmType(WI_NAME); qtl.setClauseList(queryList); qtl.setId("p"); qtl.setType("btm"); qtl.setRightFlag(false); Map map = new HashMap(); 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 cloList = new ArrayList(); List cboList = new ArrayList(); 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 cloList = new ArrayList(); List cboList = new ArrayList(); 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 selecedOidSet) throws VCIError { // TODO Auto-generated method stub List cloList = new ArrayList(); List cboList = new ArrayList(); 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 queryList = new ArrayList(); queryList.add("*"); qtl.setBtmType(WI_NAME); qtl.setClauseList(queryList); qtl.setId("p"); qtl.setType("btm"); qtl.setRightFlag(false); Map map = new HashMap(); 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 queryList = new ArrayList(); queryList.add("*"); qtl.setBtmType(WFI_NAME); qtl.setClauseList(queryList); qtl.setId("workflowinstanceQuery"); qtl.setType("btm"); qtl.setRightFlag(false); Map map = new HashMap(); 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 list = new ArrayList(); list.add("*"); qtl.setBtmType(WI_NAME); qtl.setClauseList(list); qtl.setId("p"); qtl.setType("btm"); qtl.setRightFlag(false); Map map = new HashMap(); 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 cloList = new ArrayList(); List cboList = new ArrayList(); //List boList = new ArrayList(); 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 cloList = new ArrayList(); List cboList = new ArrayList(); 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 variables, String objectProperty[], String objectPropertyValues[][]) throws VCIError { BOFactoryServicePrx bofService = ServerServiceProvider.getBOFService(); List cloList = new ArrayList(); List cboList = new ArrayList(); 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 list = new ArrayList(); list.add("*"); qt.setBtmType(WI_NAME); qt.setClauseList(list); qt.setId("p"); qt.setType("btm"); qt.setRightFlag(false); Map map = new HashMap(); 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 oldBoUpdatelist = new ArrayList(); 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 ""; } }