diff --git a/src/main/java/com/sipai/controller/activiti/ActivitiController.java b/src/main/java/com/sipai/controller/activiti/ActivitiController.java index eb23444f..ea82d57b 100644 --- a/src/main/java/com/sipai/controller/activiti/ActivitiController.java +++ b/src/main/java/com/sipai/controller/activiti/ActivitiController.java @@ -483,6 +483,7 @@ public class ActivitiController { String passFlag = request.getParameter("passFlag"); if (passFlag != null && !passFlag.isEmpty()) { boolean pFlag = Boolean.parseBoolean(passFlag); + int totalCount = list.size(); Iterator iterator = list.iterator(); while (iterator.hasNext()) { WorkTask workTask = (WorkTask) iterator.next(); @@ -491,6 +492,10 @@ public class ActivitiController { } } + // 当 passFlag=false 过滤后返回空列表(即未识别到退回路径),则作为备用方案返回全部路径 + if (list.isEmpty() && !pFlag && totalCount > 0) { + list = workflowProcessDefinitionService.getNextWorkTasks(task.getProcessDefinitionId(), task.getTaskDefinitionKey()); + } JSONArray jsonArray = new JSONArray(); if (list != null && list.size() > 0) { for (WorkTask workTask : list) { diff --git a/src/main/java/com/sipai/controller/equipment/MaintenancePlanController.java b/src/main/java/com/sipai/controller/equipment/MaintenancePlanController.java index eef91244..d4e87b2d 100644 --- a/src/main/java/com/sipai/controller/equipment/MaintenancePlanController.java +++ b/src/main/java/com/sipai/controller/equipment/MaintenancePlanController.java @@ -37,6 +37,7 @@ import org.activiti.engine.history.HistoricTaskInstance; import org.activiti.engine.impl.pvm.process.ActivityImpl; import org.activiti.engine.runtime.ProcessInstance; import org.activiti.engine.task.Task; +import org.apache.commons.collections.CollectionUtils; import org.springframework.stereotype.Controller; import org.springframework.transaction.annotation.Transactional; import org.springframework.ui.Model; @@ -356,7 +357,9 @@ public class MaintenancePlanController { model.addAttribute("nowDate", CommUtil.nowDate()); String maintenancePlanId = pInstance.getBusinessKey(); List list = this.businessUnitAuditService.selectListByWhere("where businessId = '" + maintenancePlanId + "' order by insdt desc "); - model.addAttribute("businessUnitAudit", list.get(0)); + if (CollectionUtils.isNotEmpty(list)){ + model.addAttribute("businessUnitAudit", list.get(0)); + } MaintenancePlan maintenancePlan = this.maintenancePlanService.selectById(maintenancePlanId); model.addAttribute("maintenancePlan", maintenancePlan); EquipmentPlan equipmentPlan = this.equipmentPlanService.selectById(maintenancePlanId); diff --git a/src/main/java/com/sipai/controller/safety/SafetyCheckComprehensiveController.java b/src/main/java/com/sipai/controller/safety/SafetyCheckComprehensiveController.java index 249b14b3..f277c57f 100644 --- a/src/main/java/com/sipai/controller/safety/SafetyCheckComprehensiveController.java +++ b/src/main/java/com/sipai/controller/safety/SafetyCheckComprehensiveController.java @@ -181,8 +181,8 @@ public class SafetyCheckComprehensiveController { SafetyCheckStatusEnum.RESPONSE.getTaskTitle(), bean.getDutyUserId(), // 当前节点审批人 bean.getDutyUserName(), // 当前节点审批人 - null, // 抄送人 - null,// 抄送人 + bean.getCopyUserId(), // 抄送人 + bean.getCopyUserName(),// 抄送人 null); } return Result.success(); diff --git a/src/main/java/com/sipai/controller/safety/SafetyCheckDaylyController.java b/src/main/java/com/sipai/controller/safety/SafetyCheckDaylyController.java index 37e6df03..c4e6cb04 100644 --- a/src/main/java/com/sipai/controller/safety/SafetyCheckDaylyController.java +++ b/src/main/java/com/sipai/controller/safety/SafetyCheckDaylyController.java @@ -236,8 +236,8 @@ public class SafetyCheckDaylyController { SafetyCheckStatusEnum.RESPONSE.getTaskTitle(), bean.getDutyUserId(), // 当前节点审批人 bean.getDutyUserName(), // 当前节点审批人 - null, // 抄送人 - null,// 抄送人 + bean.getCopyUserId(), // 抄送人 + bean.getCopyUserName(),// 抄送人 null); } diff --git a/src/main/java/com/sipai/controller/safety/SafetyCheckSpecialController.java b/src/main/java/com/sipai/controller/safety/SafetyCheckSpecialController.java index 5694c0a2..e2499302 100644 --- a/src/main/java/com/sipai/controller/safety/SafetyCheckSpecialController.java +++ b/src/main/java/com/sipai/controller/safety/SafetyCheckSpecialController.java @@ -197,8 +197,8 @@ public class SafetyCheckSpecialController { SafetyCheckStatusEnum.RESPONSE.getTaskTitle(), bean.getDutyUserId(), // 当前节点审批人 bean.getDutyUserName(), // 当前节点审批人 - null, // 抄送人 - null,// 抄送人 + bean.getCopyUserId(), // 抄送人 + bean.getCopyUserName(),// 抄送人 null); } return Result.success(); diff --git a/src/main/java/com/sipai/service/activiti/WorkflowProcessDefinitionService.java b/src/main/java/com/sipai/service/activiti/WorkflowProcessDefinitionService.java index e85f5651..7898e0e6 100644 --- a/src/main/java/com/sipai/service/activiti/WorkflowProcessDefinitionService.java +++ b/src/main/java/com/sipai/service/activiti/WorkflowProcessDefinitionService.java @@ -362,9 +362,22 @@ public class WorkflowProcessDefinitionService { String pvmTransitionId = ""; for (WorkTask workTask : list) { PvmTransition item=this.getTransition(processDefId, taskDefId,workTask.getId(),pvmTransitionId); + if (item == null) { + // 未找到对应路径时默认标记为通过路径,继续处理其他任务 + workTask.setPassFlag(true); + continue; + } pvmTransitionId = item.getId(); String conditionText=String.valueOf(item.getProperty("conditionText")); - if (conditionText!=null && conditionText.contains("!"+CommString.ACTI_KEK_Condition)) { + // 检测退回路径:支持多种条件表达式格式 + // ${!pass} / ${pass == false} / ${pass==false} / ${pass != true} / ${pass!=true} + boolean isRejectPath = conditionText != null && ( + conditionText.contains("!"+CommString.ACTI_KEK_Condition) || + conditionText.contains(CommString.ACTI_KEK_Condition+" == false") || + conditionText.contains(CommString.ACTI_KEK_Condition+"==false") || + conditionText.contains(CommString.ACTI_KEK_Condition+" != true") || + conditionText.contains(CommString.ACTI_KEK_Condition+"!=true")); + if (isRejectPath) { workTask.setPassFlag(false); }else{ workTask.setPassFlag(true); diff --git a/src/main/java/com/sipai/service/activiti/WorkflowService.java b/src/main/java/com/sipai/service/activiti/WorkflowService.java index ce23d7c2..ba9297a4 100644 --- a/src/main/java/com/sipai/service/activiti/WorkflowService.java +++ b/src/main/java/com/sipai/service/activiti/WorkflowService.java @@ -62,15 +62,14 @@ import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; + @Service @Component public class WorkflowService { - private static Logger logger = LoggerFactory.getLogger(WorkflowService.class); + private static Logger logger = LoggerFactory.getLogger(WorkflowService.class); private RuntimeService runtimeService; @@ -156,46 +155,53 @@ public class WorkflowService { private OverhaulService overhaulService; //启动流程 - public ProcessInstance startWorkflow(String businessKey,String userId,String processDefKey, Map variables){ - ProcessInstance processInstance = null; - try{ - ProcessDefinitionQuery processDefinitionQuery = repositoryService.createProcessDefinitionQuery() + public ProcessInstance startWorkflow(String businessKey, String userId, String processDefKey, Map variables) { + ProcessInstance processInstance = null; + try { + ProcessDefinitionQuery processDefinitionQuery = repositoryService.createProcessDefinitionQuery() .processDefinitionKey(processDefKey).orderByProcessDefinitionVersion().desc(); // ProcessDefinitionQuery processDefinitionQuery = repositoryService.createProcessDefinitionQuery().processDefinitionId(processDefID); - List processDefinitionList = processDefinitionQuery.list(); - if(processDefinitionList!=null && processDefinitionList.size()>0){ - // 用来设置启动流程的人员ID,引擎会自动把用户ID保存到activiti:initiator中 - identityService.setAuthenticatedUserId(userId); - processInstance = runtimeService.startProcessInstanceById(processDefinitionList.get(0).getId(), businessKey, variables); - } + List processDefinitionList = processDefinitionQuery.list(); + if (processDefinitionList != null && processDefinitionList.size() > 0) { + // 用来设置启动流程的人员ID,引擎会自动把用户ID保存到activiti:initiator中 + identityService.setAuthenticatedUserId(userId); + processInstance = runtimeService.startProcessInstanceById(processDefinitionList.get(0).getId(), businessKey, variables); + } - }finally { + } finally { identityService.setAuthenticatedUserId(null); } - return processInstance; + return processInstance; } - /**删除运行中流程*/ - public void delProcessInstance(String processInstanceId){ - runtimeService.deleteProcessInstance(processInstanceId,""); + + /** + * 删除运行中流程 + */ + public void delProcessInstance(String processInstanceId) { + runtimeService.deleteProcessInstance(processInstanceId, ""); } - /**删除历史流程*/ - public void delHistoryInstance(String processInstanceId){ + + /** + * 删除历史流程 + */ + public void delHistoryInstance(String processInstanceId) { historyService.deleteHistoricProcessInstance(processInstanceId); } + /** * 读取运行中的流程 * * @return */ @Transactional(readOnly = true) - public List findRunningProcessInstaces(Page page,int[] pageParams,String processDefinitionKey) { + public List findRunningProcessInstaces(Page page, int[] pageParams, String processDefinitionKey) { List results = new ArrayList(); ProcessInstanceQuery query = null; - if (processDefinitionKey!=null && !processDefinitionKey.isEmpty()) { - query=runtimeService.createProcessInstanceQuery().processDefinitionKey(processDefinitionKey).orderByProcessInstanceId().desc(); - }else{ - query=runtimeService.createProcessInstanceQuery().orderByProcessInstanceId().desc(); + if (processDefinitionKey != null && !processDefinitionKey.isEmpty()) { + query = runtimeService.createProcessInstanceQuery().processDefinitionKey(processDefinitionKey).orderByProcessInstanceId().desc(); + } else { + query = runtimeService.createProcessInstanceQuery().orderByProcessInstanceId().desc(); } //listPage(arg0,arg1)从arg0开始arg1个 List list = query.listPage(pageParams[0], pageParams[1]); @@ -208,26 +214,27 @@ public class WorkflowService { } TodoTask todoTask = new TodoTask(); todoTask.setProcessInstance(processInstance); - ProcessDefinition processDefinition=getProcessDefinition(processInstance.getProcessDefinitionId()); + ProcessDefinition processDefinition = getProcessDefinition(processInstance.getProcessDefinitionId()); todoTask.setProcessDefinition(processDefinition); - ProcessType[] types=ProcessType.values(); + ProcessType[] types = ProcessType.values(); for (ProcessType item : types) { - if(processDefinition.getKey()!=null && processDefinition.getKey().contains(item.getId())){ - todoTask.setName(item.getName()); - break; - } - } + if (processDefinition.getKey() != null && processDefinition.getKey().contains(item.getId())) { + todoTask.setName(item.getName()); + break; + } + } // 设置当前任务信息 List tasks = taskService.createTaskQuery().processInstanceId(processInstance.getId()).active().orderByTaskCreateTime().desc().list(); //流程实例被挂起时,查询不到任务 - if(tasks!=null && tasks.size()>0){ - todoTask.setTask(tasks.get(0)); + if (tasks != null && tasks.size() > 0) { + todoTask.setTask(tasks.get(0)); } results.add(todoTask); } - page.setTotalCount(query.count());; + page.setTotalCount(query.count()); + ; page.setResult(results); return results; } @@ -278,19 +285,20 @@ public class WorkflowService { return taskInstance; } + /** * 查询待办任务 * * @param userId 用户ID - * @param type 并发时element + * @param type 并发时element * @return */ @Transactional(readOnly = true) - public JSONObject findTodoTasks(String userId,int[] pageParams,Map type,int pageNo,int pageSize,String modelKey) { + public JSONObject findTodoTasks(String userId, int[] pageParams, Map type, int pageNo, int pageSize, String modelKey) { - SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); JSONObject results = new JSONObject(); - JSONArray json= new JSONArray(); + JSONArray json = new JSONArray(); // 开始时间 long stime = System.currentTimeMillis(); // 根据当前人的ID查询 @@ -302,63 +310,63 @@ public class WorkflowService { // 结束时间 long etime = System.currentTimeMillis(); // 计算执行时间 - System.out.println("执行时长:"+(etime - stime)/1000); + System.out.println("执行时长:" + (etime - stime) / 1000); int total = list.size(); - results.put("total",total ); + results.put("total", total); //按照时间排序 list = list.stream().sorted((s1, s2) -> s2.getCreateTime().compareTo(s1.getCreateTime())).collect(Collectors.toList()); //分页 - List tasks = list.stream().skip((pageNo-1)*pageSize).limit(pageSize). + List tasks = list.stream().skip((pageNo - 1) * pageSize).limit(pageSize). collect(Collectors.toList()); // 开始时间 stime = System.currentTimeMillis(); // 根据流程的业务ID查询实体并关联 - for (int i=0;i variables = taskService.getVariables(task.getId()); - if(type!=null && type.get("key")!=null ){ - String key =type.get("key").toString(); - String value =type.get("value").toString(); - if(variables.containsKey(key) && !variables.get(key).toString().equals(value)){ + if (type != null && type.get("key") != null) { + String key = type.get("key").toString(); + String value = type.get("value").toString(); + if (variables.containsKey(key) && !variables.get(key).toString().equals(value)) { continue; } } String processInstanceId = task.getProcessInstanceId(); - if(type!=null && type.get("processInstanceId")!=null && !processInstanceId.equals(type.get("processInstanceId").toString())){ + if (type != null && type.get("processInstanceId") != null && !processInstanceId.equals(type.get("processInstanceId").toString())) { continue; } ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult(); // ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).active().singleResult(); //流程实例挂起时,上获取的active processInstance为null - if(processInstance==null){ + if (processInstance == null) { continue; } String businessKey = processInstance.getBusinessKey(); if (businessKey == null) { //callactivity调用的流程启动时无businesskey,通过variable中businessKey查找 - if(variables.get("businessKey")!=null){ - businessKey =variables.get("businessKey").toString(); - }else{ + if (variables.get("businessKey") != null) { + businessKey = variables.get("businessKey").toString(); + } else { continue; } - }else{ + } else { variables.put("businessKey", businessKey); } TodoTask todoTask = new TodoTask(); todoTask.setTask(task); todoTask.setProcessInstance(processInstance); - ProcessDefinition processDefinition=getProcessDefinition(processInstance.getProcessDefinitionId()); + ProcessDefinition processDefinition = getProcessDefinition(processInstance.getProcessDefinitionId()); todoTask.setProcessDefinition(processDefinition); todoTask.setVariables(variables); todoTask.setType(processDefinition.getKey()); try { - ProcessType[] types=ProcessType.values(); + ProcessType[] types = ProcessType.values(); for (ProcessType item : types) { - if(processDefinition.getKey()!=null && processDefinition.getKey().contains(item.getId())){ + if (processDefinition.getKey() != null && processDefinition.getKey().contains(item.getId())) { todoTask.setName(item.getName()); break; } @@ -368,91 +376,91 @@ public class WorkflowService { e.printStackTrace(); } - if(todoTask.getName()==null|| todoTask.getName().isEmpty()){ + if (todoTask.getName() == null || todoTask.getName().isEmpty()) { todoTask.setName(processDefinition.getKey()); } try { businessKey = todoTask.getVariables().get("businessKey").toString(); - Maintenance maintenance=null; - if(todoTask.getType().contains(ProcessType.S_Maintenance.getId())){ + Maintenance maintenance = null; + if (todoTask.getType().contains(ProcessType.S_Maintenance.getId())) { //系统默认主流程 - maintenance= this.maintenanceService.selectById(businessKey); + maintenance = this.maintenanceService.selectById(businessKey); todoTask.setBusiness(maintenance); - }else if (todoTask.getType().contains(ProcessType.Administration_IndexWork.getId())) { + } else if (todoTask.getType().contains(ProcessType.Administration_IndexWork.getId())) { IndexWork indexWork = this.indexWorkService.selectById(businessKey); - if(indexWork!=null){ - maintenance=new Maintenance(); + if (indexWork != null) { + maintenance = new Maintenance(); Company company = unitService.getCompById(indexWork.getUnitId()); maintenance.setCompany(company); maintenance.setProblem("指标控制工作"); maintenance.setStatus(todoTask.getTask().getDescription()); todoTask.setBusiness(maintenance); } - }else if (todoTask.getType().contains(ProcessType.Administration_Organization.getId())) { + } else if (todoTask.getType().contains(ProcessType.Administration_Organization.getId())) { Organization organization = this.organizationService.selectById(businessKey); - if(organization!=null){ - maintenance=new Maintenance(); + if (organization != null) { + maintenance = new Maintenance(); Company company = unitService.getCompById(organization.getUnitId()); maintenance.setCompany(company); maintenance.setProblem("组织工作"); maintenance.setStatus(todoTask.getTask().getDescription()); todoTask.setBusiness(maintenance); } - }else if (todoTask.getType().contains(ProcessType.Administration_Reserve.getId())) { + } else if (todoTask.getType().contains(ProcessType.Administration_Reserve.getId())) { Organization organization = this.organizationService.selectById(businessKey); - if(organization!=null){ - maintenance=new Maintenance(); + if (organization != null) { + maintenance = new Maintenance(); Company company = unitService.getCompById(organization.getUnitId()); maintenance.setCompany(company); maintenance.setProblem("预案工作"); maintenance.setStatus(todoTask.getTask().getDescription()); todoTask.setBusiness(maintenance); } - }else if (todoTask.getType().contains(ProcessType.Administration_Temporary.getId())) { + } else if (todoTask.getType().contains(ProcessType.Administration_Temporary.getId())) { Temporary temporary = this.temporaryService.selectById(businessKey); - if(temporary!=null){ - maintenance=new Maintenance(); + if (temporary != null) { + maintenance = new Maintenance(); Company company = unitService.getCompById(temporary.getUnitId()); maintenance.setCompany(company); maintenance.setProblem("行政综合临时任务"); maintenance.setStatus(todoTask.getTask().getDescription()); todoTask.setBusiness(maintenance); } - }else if (todoTask.getType().contains(ProcessType.B_Purchase.getId())) { + } else if (todoTask.getType().contains(ProcessType.B_Purchase.getId())) { Subscribe subscribe = this.subscribeService.selectById(businessKey); - if(subscribe!=null){ - maintenance=new Maintenance(); + if (subscribe != null) { + maintenance = new Maintenance(); Company company = unitService.getCompById(subscribe.getBizId()); maintenance.setCompany(company); maintenance.setProblem("物资申购审核"); maintenance.setStatus(todoTask.getTask().getDescription()); todoTask.setBusiness(maintenance); } - }else if (todoTask.getType().contains(ProcessType.B_Contract.getId())) { + } else if (todoTask.getType().contains(ProcessType.B_Contract.getId())) { Contract contract = this.contractService.selectById(businessKey); - if(contract!=null){ - maintenance=new Maintenance(); + if (contract != null) { + maintenance = new Maintenance(); Company company = unitService.getCompById(contract.getBizId()); maintenance.setCompany(company); maintenance.setProblem("采购合同审核"); maintenance.setStatus(todoTask.getTask().getDescription()); todoTask.setBusiness(maintenance); } - }else if(todoTask.getType().contains(ProcessType.Process_Adjustment.getId())){ + } else if (todoTask.getType().contains(ProcessType.Process_Adjustment.getId())) { ProcessAdjustment processAdjustment = this.processAdjustmentService.selectById(businessKey); - maintenance=new Maintenance(); + maintenance = new Maintenance(); Company company = unitService.getCompById(processAdjustment.getUnitId()); maintenance.setCompany(company); //将问题详情内容复制到中间变量 maintenance.setProblem(processAdjustment.getContents()); maintenance.setStatus(todoTask.getTask().getDescription()); todoTask.setBusiness(maintenance); - }else if(todoTask.getType().contains(ProcessType.B_Maintenance.getId())){ + } else if (todoTask.getType().contains(ProcessType.B_Maintenance.getId())) { MaintenanceDetail maintenanceDetail = this.maintenanceDetailService.selectById(businessKey); - if (null!=maintenanceDetail.getMaintenanceid() && !maintenanceDetail.getMaintenanceid().isEmpty()) { - maintenance= this.maintenanceService.selectById(maintenanceDetail.getMaintenanceid()); - }else{ - maintenance=new Maintenance(); + if (null != maintenanceDetail.getMaintenanceid() && !maintenanceDetail.getMaintenanceid().isEmpty()) { + maintenance = this.maintenanceService.selectById(maintenanceDetail.getMaintenanceid()); + } else { + maintenance = new Maintenance(); Company company = unitService.getCompById(maintenanceDetail.getCompanyid()); maintenance.setCompany(company); } @@ -460,92 +468,92 @@ public class WorkflowService { maintenance.setProblem(maintenanceDetail.getProblemcontent()); maintenance.setStatus(todoTask.getTask().getDescription()); todoTask.setBusiness(maintenance); - }else if(todoTask.getType().contains(ProcessType.I_Stock.getId())){ + } else if (todoTask.getType().contains(ProcessType.I_Stock.getId())) { InStockRecord inStockRecord = this.inStockRecordService.selectById(businessKey); if (inStockRecord == null) { continue; } - maintenance=new Maintenance(); + maintenance = new Maintenance(); Company company = unitService.getCompById(inStockRecord.getBizId()); maintenance.setCompany(company); maintenance.setProblem("物资入库审核"); maintenance.setStatus(todoTask.getTask().getDescription()); todoTask.setBusiness(maintenance); - }else if(todoTask.getType().contains(ProcessType.Raw_Material.getId())){ + } else if (todoTask.getType().contains(ProcessType.Raw_Material.getId())) { RawMaterial rawMaterial = this.rawMaterialService.selectById(businessKey); - maintenance=new Maintenance(); + maintenance = new Maintenance(); Company company = unitService.getCompById(rawMaterial.getBizId()); maintenance.setCompany(company); maintenance.setProblem("药剂检验"); maintenance.setStatus(todoTask.getTask().getDescription()); todoTask.setBusiness(maintenance); - }else if(todoTask.getType().contains(ProcessType.Reasonable_Advice.getId())){ + } else if (todoTask.getType().contains(ProcessType.Reasonable_Advice.getId())) { ReasonableAdvice reasonableAdvice = this.reasonableAdviceService.selectById(businessKey); - maintenance=new Maintenance(); + maintenance = new Maintenance(); Company company = unitService.getCompById(reasonableAdvice.getUnitId()); maintenance.setCompany(company); maintenance.setProblem("合理化建议审核"); maintenance.setStatus(todoTask.getTask().getDescription()); todoTask.setBusiness(maintenance); - }else if(todoTask.getType().contains(ProcessType.Roast.getId())){ + } else if (todoTask.getType().contains(ProcessType.Roast.getId())) { Roast entity = this.roastService.selectById(businessKey); - maintenance=new Maintenance(); + maintenance = new Maintenance(); Company company = unitService.getCompById(entity.getUnitId()); maintenance.setCompany(company); maintenance.setProblem("吐槽内容审核"); maintenance.setStatus(todoTask.getTask().getDescription()); todoTask.setBusiness(maintenance); - }else if(todoTask.getType().contains(ProcessType.Maintain_Car.getId())){ + } else if (todoTask.getType().contains(ProcessType.Maintain_Car.getId())) { MaintainCar maintainCar = this.maintainCarService.selectById(businessKey); - maintenance=new Maintenance(); - if(maintainCar!=null){ + maintenance = new Maintenance(); + if (maintainCar != null) { Company company = unitService.getCompById(maintainCar.getUnitId()); maintenance.setCompany(company); } maintenance.setProblem("车辆维保审核"); maintenance.setStatus(todoTask.getTask().getDescription()); todoTask.setBusiness(maintenance); - }else if(todoTask.getType().contains(ProcessType.Repair_Car.getId())){ + } else if (todoTask.getType().contains(ProcessType.Repair_Car.getId())) { RepairCar repairCar = this.repairCarService.selectById(businessKey); - maintenance=new Maintenance(); - if(repairCar!=null){ + maintenance = new Maintenance(); + if (repairCar != null) { Company company = unitService.getCompById(repairCar.getUnitId()); maintenance.setCompany(company); } maintenance.setProblem("车辆维修审核"); maintenance.setStatus(todoTask.getTask().getDescription()); todoTask.setBusiness(maintenance); - }else if(todoTask.getType().contains(ProcessType.O_Stock.getId())){ + } else if (todoTask.getType().contains(ProcessType.O_Stock.getId())) { OutStockRecord outStockRecord = this.outStockRecordService.selectById(businessKey); if (outStockRecord == null) { continue; } - maintenance=new Maintenance(); + maintenance = new Maintenance(); Company company = unitService.getCompById(outStockRecord.getBizId()); maintenance.setCompany(company); maintenance.setProblem("物资领用审核"); maintenance.setStatus(todoTask.getTask().getDescription()); todoTask.setBusiness(maintenance); - }else if(todoTask.getType().contains(ProcessType.Scetion_Stock.getId())){ + } else if (todoTask.getType().contains(ProcessType.Scetion_Stock.getId())) { OutStockRecord outStockRecord = this.outStockRecordService.selectById(businessKey); - maintenance=new Maintenance(); + maintenance = new Maintenance(); Company company = unitService.getCompById(outStockRecord.getBizId()); maintenance.setCompany(company); maintenance.setProblem("处级物资领用审核"); maintenance.setStatus(todoTask.getTask().getDescription()); todoTask.setBusiness(maintenance); - }else if(todoTask.getType().contains(ProcessType.Stock_Check.getId())){ + } else if (todoTask.getType().contains(ProcessType.Stock_Check.getId())) { StockCheck stockCheck = this.stockCheckService.selectById(businessKey); if (stockCheck == null) { continue; } - maintenance=new Maintenance(); + maintenance = new Maintenance(); Company company = unitService.getCompById(stockCheck.getBizId()); maintenance.setCompany(company); maintenance.setProblem("库存盘点审核"); maintenance.setStatus(todoTask.getTask().getDescription()); todoTask.setBusiness(maintenance); - }else if(todoTask.getType().contains(ProcessType.Maintain_Plan.getId())){ + } else if (todoTask.getType().contains(ProcessType.Maintain_Plan.getId())) { //之前老的单条计划 /*MaintenancePlan maintenancePlan = this.maintenancePlanService.selectById(businessKey); maintenance=new Maintenance(); @@ -557,21 +565,20 @@ public class WorkflowService { //主附表计划 EquipmentPlan equipmentPlan = this.equipmentPlanService.selectById(businessKey); - maintenance=new Maintenance(); - if(equipmentPlan!=null){ - if(equipmentPlan.getUnitId()!=null){ + maintenance = new Maintenance(); + if (equipmentPlan != null) { + if (equipmentPlan.getUnitId() != null) { Company company = unitService.getCompById(equipmentPlan.getUnitId()); maintenance.setCompany(company); } - if(equipmentPlan.getPlanContents()!=null){ + if (equipmentPlan.getPlanContents() != null) { // equipmentPlan.get maintenance.setProblem(equipmentPlan.getPlanContents()); } } maintenance.setStatus(todoTask.getTask().getDescription()); todoTask.setBusiness(maintenance); - } - else if(todoTask.getType().contains(ProcessType.Repair_Plan.getId())){ + } else if (todoTask.getType().contains(ProcessType.Repair_Plan.getId())) { //之前老的单条计划 /*EquipmentRepairPlan maintenancePlan = this.equipmentRepairPlanService.selectById(businessKey); maintenance=new Maintenance(); @@ -584,94 +591,93 @@ public class WorkflowService { //主附表计划 System.out.println(businessKey); EquipmentPlan equipmentPlan = this.equipmentPlanService.selectById(businessKey); - maintenance=new Maintenance(); - if(equipmentPlan!=null){ - if(equipmentPlan.getUnitId()!=null){ + maintenance = new Maintenance(); + if (equipmentPlan != null) { + if (equipmentPlan.getUnitId() != null) { Company company = unitService.getCompById(equipmentPlan.getUnitId()); maintenance.setCompany(company); } - if(equipmentPlan.getPlanContents()!=null){ + if (equipmentPlan.getPlanContents() != null) { maintenance.setProblem(equipmentPlan.getPlanContents()); } } maintenance.setStatus(todoTask.getTask().getDescription()); todoTask.setBusiness(maintenance); - } - else if(todoTask.getType().contains(ProcessType.Lose_Apply.getId())){ + } else if (todoTask.getType().contains(ProcessType.Lose_Apply.getId())) { EquipmentLoseApply loseApply = this.equipmentLoseApplyService.selectById(businessKey); - maintenance=new Maintenance(); + maintenance = new Maintenance(); Company company = unitService.getCompById(loseApply.getBizId()); maintenance.setCompany(company); maintenance.setProblem("设备丢失申请"); maintenance.setStatus(todoTask.getTask().getDescription()); todoTask.setBusiness(maintenance); - }else if(todoTask.getType().contains(ProcessType.Sale_Apply.getId())){ + } else if (todoTask.getType().contains(ProcessType.Sale_Apply.getId())) { EquipmentSaleApply saleApply = this.equipmentSaleApplyService.selectById(businessKey); - maintenance=new Maintenance(); + maintenance = new Maintenance(); Company company = unitService.getCompById(saleApply.getBizId()); maintenance.setCompany(company); maintenance.setProblem("设备出售申请"); maintenance.setStatus(todoTask.getTask().getDescription()); todoTask.setBusiness(maintenance); - }else if(todoTask.getType().contains(ProcessType.Scrap_Apply.getId())){ + } else if (todoTask.getType().contains(ProcessType.Scrap_Apply.getId())) { EquipmentScrapApply scrapApply = this.equipmentScrapApplyService.selectById(businessKey); - maintenance=new Maintenance(); + maintenance = new Maintenance(); Company company = unitService.getCompById(scrapApply.getBizId()); maintenance.setCompany(company); maintenance.setProblem("设备报废申请"); maintenance.setStatus(todoTask.getTask().getDescription()); todoTask.setBusiness(maintenance); - }else if(todoTask.getType().contains(ProcessType.Transfers_Apply.getId())){ + } else if (todoTask.getType().contains(ProcessType.Transfers_Apply.getId())) { EquipmentTransfersApply transfersApply = this.equipmentTransfersApplyService.selectById(businessKey); - maintenance=new Maintenance(); + maintenance = new Maintenance(); Company company = unitService.getCompById(transfersApply.getBizId()); maintenance.setCompany(company); maintenance.setProblem("设备调拨申请"); maintenance.setStatus(todoTask.getTask().getDescription()); todoTask.setBusiness(maintenance); - }else if(todoTask.getType().contains(ProcessType.Acceptance_Apply.getId())){ + } else if (todoTask.getType().contains(ProcessType.Acceptance_Apply.getId())) { EquipmentAcceptanceApply eaa = equipmentAcceptanceApplyService.selectById(businessKey); - maintenance=new Maintenance(); + maintenance = new Maintenance(); Company company = unitService.getCompById(eaa.getBizId()); maintenance.setCompany(company); maintenance.setProblem("设备验收申请"); maintenance.setStatus(todoTask.getTask().getDescription()); todoTask.setBusiness(maintenance); - }else if(todoTask.getType().contains(ProcessType.EquipmentStop_Apply.getId())){ + } else if (todoTask.getType().contains(ProcessType.EquipmentStop_Apply.getId())) { EquipmentStopRecord esr = equipmentStopRecordService.selectById(businessKey); - maintenance=new Maintenance(); + maintenance = new Maintenance(); Company company = unitService.getCompById(esr.getBizId()); maintenance.setCompany(company); maintenance.setProblem("设备启用/停用申请"); maintenance.setStatus(todoTask.getTask().getDescription()); todoTask.setBusiness(maintenance); - }else if(todoTask.getType().contains(ProcessType.Maintenance_Repair.getId())){ + } else if (todoTask.getType().contains(ProcessType.Maintenance_Repair.getId())) { Repair esr = repairService.selectById(businessKey); - maintenance=new Maintenance(); + maintenance = new Maintenance(); Company company = unitService.getCompById(esr.getUnitId()); maintenance.setCompany(company); maintenance.setProblem("维修流程"); maintenance.setStatus(todoTask.getTask().getDescription()); todoTask.setBusiness(maintenance); - }else if(todoTask.getType().contains(ProcessType.Programme_Write.getId())){ + } else if (todoTask.getType().contains(ProcessType.Programme_Write.getId())) { OverhaulItemProject esr = overhaulItemProjectService.selectById(businessKey); - maintenance=new Maintenance(); + maintenance = new Maintenance(); Company company = unitService.getCompById(esr.getUnitId()); maintenance.setCompany(company); maintenance.setProblem("方案编制"); maintenance.setStatus(todoTask.getTask().getDescription()); todoTask.setBusiness(maintenance); - }else if(todoTask.getType().contains(ProcessType.Bidding_Price.getId())){ + } else if (todoTask.getType().contains(ProcessType.Bidding_Price.getId())) { OverhaulItemProject esr = overhaulItemProjectService.selectById(businessKey); - maintenance=new Maintenance(); + maintenance = new Maintenance(); Company company = unitService.getCompById(esr.getUnitId()); maintenance.setCompany(company); maintenance.setProblem("招标比价"); maintenance.setStatus(todoTask.getTask().getDescription()); todoTask.setBusiness(maintenance); - }else if(todoTask.getType().contains(ProcessType.Install_Debug.getId())){ + } else if (todoTask.getType().contains(ProcessType.Install_Debug.getId())) { OverhaulItemProject esr = overhaulItemProjectService.selectById(businessKey); - maintenance=new Maintenance(); + maintenance = new Maintenance(); if (esr != null) { Company company = unitService.getCompById(esr.getUnitId()); maintenance.setCompany(company); @@ -679,9 +685,9 @@ public class WorkflowService { maintenance.setProblem("安装调试"); maintenance.setStatus(todoTask.getTask().getDescription()); todoTask.setBusiness(maintenance); - }else if(todoTask.getType().contains(ProcessType.Project_Check.getId())){ + } else if (todoTask.getType().contains(ProcessType.Project_Check.getId())) { OverhaulItemProject esr = overhaulItemProjectService.selectById(businessKey); - maintenance=new Maintenance(); + maintenance = new Maintenance(); if (esr != null) { Company company = unitService.getCompById(esr.getUnitId()); maintenance.setCompany(company); @@ -689,9 +695,9 @@ public class WorkflowService { maintenance.setProblem("项目验收"); maintenance.setStatus(todoTask.getTask().getDescription()); todoTask.setBusiness(maintenance); - }else if(todoTask.getType().contains(ProcessType.Routine_Work.getId())){ + } else if (todoTask.getType().contains(ProcessType.Routine_Work.getId())) { RoutineWork routineWork = routineWorkService.selectById(businessKey); - maintenance=new Maintenance(); + maintenance = new Maintenance(); if (routineWork != null) { Company company = unitService.getCompById(routineWork.getUnitId()); maintenance.setCompany(company); @@ -699,9 +705,9 @@ public class WorkflowService { maintenance.setProblem("周期常规工单"); maintenance.setStatus(todoTask.getTask().getDescription()); todoTask.setBusiness(maintenance); - }else if(todoTask.getType().contains(ProcessType.Water_Test.getId())){ + } else if (todoTask.getType().contains(ProcessType.Water_Test.getId())) { WaterTest waterTest = waterTestService.selectById(businessKey); - maintenance=new Maintenance(); + maintenance = new Maintenance(); if (waterTest != null) { Company company = unitService.getCompById(waterTest.getUnitId()); maintenance.setCompany(company); @@ -709,9 +715,9 @@ public class WorkflowService { maintenance.setProblem("水质化验工单"); maintenance.setStatus(todoTask.getTask().getDescription()); todoTask.setBusiness(maintenance); - }else if (todoTask.getType().contains(ProcessType.Overhaul.getId())){ + } else if (todoTask.getType().contains(ProcessType.Overhaul.getId())) { Overhaul overhaul = this.overhaulService.selectById(businessKey); - maintenance=new Maintenance(); + maintenance = new Maintenance(); if (overhaul != null) { Company company = unitService.getCompById(overhaul.getUnitId()); maintenance.setCompany(company); @@ -719,10 +725,9 @@ public class WorkflowService { maintenance.setProblem(overhaul.getProjectDescribe()); maintenance.setStatus(todoTask.getTask().getDescription()); todoTask.setBusiness(maintenance); - } - else if(todoTask.getType().contains(ProcessType.Report_Check.getId())){ + } else if (todoTask.getType().contains(ProcessType.Report_Check.getId())) { RptCreate rptCreate = rptCreateService.selectById(businessKey); - maintenance=new Maintenance(); + maintenance = new Maintenance(); if (rptCreate != null) { Company company = unitService.getCompById(rptCreate.getUnitId()); maintenance.setCompany(company); @@ -730,17 +735,17 @@ public class WorkflowService { maintenance.setProblem("报表审核"); maintenance.setStatus(todoTask.getTask().getDescription()); todoTask.setBusiness(maintenance); - }else if(todoTask.getType().contains(ProcessType.Workorder_Repair.getId())){ + } else if (todoTask.getType().contains(ProcessType.Workorder_Repair.getId())) { WorkorderDetail entity = this.workorderDetailService.selectById(businessKey); - maintenance=new Maintenance(); - if(entity!=null){ - if(entity.getUnitId()!=null){ + maintenance = new Maintenance(); + if (entity != null) { + if (entity.getUnitId() != null) { Company company = unitService.getCompById(entity.getUnitId()); maintenance.setCompany(company); } - if(entity.getFaultDescription()!=null){ + if (entity.getFaultDescription() != null) { EquipmentCard equipmentCard = equipmentCardService.selectById(entity.getEquipmentId()); - if(equipmentCard!=null){ + if (equipmentCard != null) { String name = "(" + equipmentCard.getEquipmentname() + ") "; maintenance.setProblem(name + entity.getFaultDescription()); } @@ -748,66 +753,66 @@ public class WorkflowService { } maintenance.setStatus(todoTask.getTask().getDescription()); todoTask.setBusiness(maintenance); - }else if(todoTask.getType().contains(ProcessType.Workorder_Abnormity_Run.getId())){ + } else if (todoTask.getType().contains(ProcessType.Workorder_Abnormity_Run.getId())) { //异常上报(运行) Abnormity entity = this.abnormityService.selectById(businessKey); - maintenance=new Maintenance(); - if(entity!=null){ - if(entity.getBizId()!=null){ + maintenance = new Maintenance(); + if (entity != null) { + if (entity.getBizId() != null) { Company company = unitService.getCompById(entity.getBizId()); maintenance.setCompany(company); } - if(entity.getAbnormityDescription()!=null){ + if (entity.getAbnormityDescription() != null) { maintenance.setProblem(entity.getAbnormityDescription()); } } maintenance.setStatus(todoTask.getTask().getDescription()); todoTask.setBusiness(maintenance); - }else if(todoTask.getType().contains(ProcessType.Workorder_Abnormity_Equipment.getId())){ + } else if (todoTask.getType().contains(ProcessType.Workorder_Abnormity_Equipment.getId())) { //异常上报(设备) Abnormity entity = this.abnormityService.selectById(businessKey); - maintenance=new Maintenance(); - if(entity!=null){ - if(entity.getBizId()!=null){ + maintenance = new Maintenance(); + if (entity != null) { + if (entity.getBizId() != null) { Company company = unitService.getCompById(entity.getBizId()); maintenance.setCompany(company); } - if(entity.getAbnormityDescription()!=null){ + if (entity.getAbnormityDescription() != null) { maintenance.setProblem(entity.getAbnormityDescription()); } } maintenance.setStatus(todoTask.getTask().getDescription()); todoTask.setBusiness(maintenance); - }else if(todoTask.getType().contains(ProcessType.Workorder_Abnormity_Facilities.getId())){ + } else if (todoTask.getType().contains(ProcessType.Workorder_Abnormity_Facilities.getId())) { //异常上报(设施) Abnormity entity = this.abnormityService.selectById(businessKey); - maintenance=new Maintenance(); - if(entity!=null){ - if(entity.getBizId()!=null){ + maintenance = new Maintenance(); + if (entity != null) { + if (entity.getBizId() != null) { Company company = unitService.getCompById(entity.getBizId()); maintenance.setCompany(company); } - if(entity.getAbnormityDescription()!=null){ + if (entity.getAbnormityDescription() != null) { maintenance.setProblem(entity.getAbnormityDescription()); } } maintenance.setStatus(todoTask.getTask().getDescription()); todoTask.setBusiness(maintenance); - }else if(todoTask.getType().contains(ProcessType.Workorder_Maintain.getId())){ + } else if (todoTask.getType().contains(ProcessType.Workorder_Maintain.getId())) { //主附表计划 WorkorderDetail entity = this.workorderDetailService.selectById(businessKey); - maintenance=new Maintenance(); - if(entity!=null){ - if(entity.getUnitId()!=null){ + maintenance = new Maintenance(); + if (entity != null) { + if (entity.getUnitId() != null) { Company company = unitService.getCompById(entity.getUnitId()); maintenance.setCompany(company); } - if(entity.getSchemeResume()!=null){ + if (entity.getSchemeResume() != null) { EquipmentCard equipmentCard = equipmentCardService.selectById(entity.getEquipmentId()); - if(equipmentCard!=null){ + if (equipmentCard != null) { String name = "(" + equipmentCard.getEquipmentname() + ") "; maintenance.setProblem(name + entity.getSchemeResume()); - }else{ + } else { maintenance.setProblem(entity.getSchemeResume()); } @@ -815,13 +820,13 @@ public class WorkflowService { } maintenance.setStatus(todoTask.getTask().getDescription()); todoTask.setBusiness(maintenance); - }else { + } else { //通用 String str = todoTask.getType(); //截取-之后字符串 String str1 = str.substring(0, str.indexOf("-")); - String unitId = str.substring(str1.length()+1, str.length()); - JSONObject obj =new JSONObject(); + String unitId = str.substring(str1.length() + 1, str.length()); + JSONObject obj = new JSONObject(); Company company = unitService.getCompById(unitId); obj.put("company", company); //问题描述,默认为节点名称 @@ -835,23 +840,23 @@ public class WorkflowService { // TODO: handle exception e.printStackTrace(); } - JSONObject item= new JSONObject(); - TodoTask object= todoTask ; + JSONObject item = new JSONObject(); + TodoTask object = todoTask; //leave根属性 item.put("id", object.getId()); item.put("name", object.getName()); item.put("type", object.getType()); variables = object.getVariables(); - if (variables!=null ) { - item.put("userIds",variables.get("userIds")); + if (variables != null) { + item.put("userIds", variables.get("userIds")); } //activiti属性 - ExecutionEntity pInstance=(ExecutionEntity)object.getProcessInstance(); - if(pInstance!=null){ + ExecutionEntity pInstance = (ExecutionEntity) object.getProcessInstance(); + if (pInstance != null) { // System.out.println(pInstance.getProcessVariables().toString()); // JSONObject jb=JSONObject.fromObject(pInstance.getProcessVariables()); - JSONObject jbpInstance= new JSONObject(); + JSONObject jbpInstance = new JSONObject(); jbpInstance.put("activityId", pInstance.getActivityId()); jbpInstance.put("businessKey", pInstance.getBusinessKey()); jbpInstance.put("id", pInstance.getId()); @@ -860,9 +865,9 @@ public class WorkflowService { item.put("processInstance", jbpInstance); } - ProcessDefinition pd=object.getProcessDefinition(); - if(pd!=null){ - JSONObject jbpDefinition= new JSONObject(); + ProcessDefinition pd = object.getProcessDefinition(); + if (pd != null) { + JSONObject jbpDefinition = new JSONObject(); jbpDefinition.put("deploymentId", pd.getDeploymentId()); jbpDefinition.put("description", pd.getDescription()); jbpDefinition.put("id", pd.getId()); @@ -872,8 +877,8 @@ public class WorkflowService { jbpDefinition.put("revision", pd.getVersion()); item.put("processDefinition", jbpDefinition); } - if(task!=null){ - JSONObject jbpTask= new JSONObject(); + if (task != null) { + JSONObject jbpTask = new JSONObject(); jbpTask.put("createTime", sdf.format(task.getCreateTime())); jbpTask.put("executionId", task.getExecutionId()); jbpTask.put("name", task.getName()); @@ -881,25 +886,25 @@ public class WorkflowService { jbpTask.put("processDefinitionId", task.getProcessDefinitionId()); jbpTask.put("processInstanceId", task.getProcessInstanceId()); jbpTask.put("assignee", task.getAssignee()); - jbpTask.put("taskDefinitionKey",task.getTaskDefinitionKey()); - jbpTask.put("status",task.getDescription()); + jbpTask.put("taskDefinitionKey", task.getTaskDefinitionKey()); + jbpTask.put("status", task.getDescription()); //上一个节点执行人 HistoricTaskInstance historicTaskInstance = queryUpOneNode(task.getId()); User user = null; - if(historicTaskInstance!=null){ + if (historicTaskInstance != null) { user = userService.getUserById(historicTaskInstance.getAssignee()); - }else{ + } else { String startUserId = historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstanceId).singleResult().getStartUserId();//获取发起人 - if(startUserId!=null && !startUserId.isEmpty()){ + if (startUserId != null && !startUserId.isEmpty()) { user = userService.getUserById(startUserId); } } - jbpTask.put("prevAssignee",user); + jbpTask.put("prevAssignee", user); item.put("task", jbpTask); } //Maintenance maintenance= (Maintenance)object.getBusiness(); item.put("business", JSONObject.fromObject(object.getBusiness())); - User user= (User)object.getAssigneeUser(); + User user = (User) object.getAssigneeUser(); item.put("assigneeUser", JSONObject.fromObject(user)); json.add(item); //默认浅复制,因为在子流程中查询到的leave会发生重复,要改为深复制 @@ -909,88 +914,89 @@ public class WorkflowService { // 结束时间 etime = System.currentTimeMillis(); // 计算执行时间 - System.out.println("执行时长:"+(etime - stime)/1000); + System.out.println("执行时长:" + (etime - stime) / 1000); // page.setTotalCount(taskQuery.count()); // page.setResult(results); results.put("rows", json); return results; } + /** * 查询待办任务 * * @param userId 用户ID - * @param type 并发时element + * @param type 并发时element * @return */ @Transactional(readOnly = true) - public List findTodoTasks(String userId,int[] pageParams,Map type) { - List results = new ArrayList(); + public List findTodoTasks(String userId, int[] pageParams, Map type) { + List results = new ArrayList(); // 根据当前人的ID查询 TaskQuery taskQuery = taskService.createTaskQuery().taskCandidateOrAssigned(userId); List tasks = taskQuery.list(); // 根据流程的业务ID查询实体并关联 - for (int i=0;i variables = taskService.getVariables(task.getId()); - if(type!=null && type.get("key")!=null ){ - String key =type.get("key").toString(); - String value =type.get("value").toString(); - if(variables.containsKey(key) && !variables.get(key).toString().equals(value)){ - continue; - } + for (int i = 0; i < tasks.size(); i++) { + Task task = tasks.get(i); + Map variables = taskService.getVariables(task.getId()); + if (type != null && type.get("key") != null) { + String key = type.get("key").toString(); + String value = type.get("value").toString(); + if (variables.containsKey(key) && !variables.get(key).toString().equals(value)) { + continue; + } - } + } String processInstanceId = task.getProcessInstanceId(); - if(type!=null && type.get("processInstanceId")!=null && !processInstanceId.equals(type.get("processInstanceId").toString())){ - continue; + if (type != null && type.get("processInstanceId") != null && !processInstanceId.equals(type.get("processInstanceId").toString())) { + continue; } ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult(); // ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).active().singleResult(); //流程实例挂起时,上获取的active processInstance为null - if(processInstance==null){ - continue; + if (processInstance == null) { + continue; } String businessKey = processInstance.getBusinessKey(); if (businessKey == null) { - //callactivity调用的流程启动时无businesskey,通过variable中businessKey查找 - if(variables.get("businessKey")!=null){ - businessKey =variables.get("businessKey").toString(); - }else{ - continue; - } - }else{ - variables.put("businessKey", businessKey); + //callactivity调用的流程启动时无businesskey,通过variable中businessKey查找 + if (variables.get("businessKey") != null) { + businessKey = variables.get("businessKey").toString(); + } else { + continue; + } + } else { + variables.put("businessKey", businessKey); } TodoTask todoTask = new TodoTask(); todoTask.setTask(task); todoTask.setProcessInstance(processInstance); - ProcessDefinition processDefinition=getProcessDefinition(processInstance.getProcessDefinitionId()); + ProcessDefinition processDefinition = getProcessDefinition(processInstance.getProcessDefinitionId()); todoTask.setProcessDefinition(processDefinition); todoTask.setVariables(variables); todoTask.setType(processDefinition.getKey()); try { - ProcessType[] types=ProcessType.values(); + ProcessType[] types = ProcessType.values(); for (ProcessType item : types) { - if(processDefinition.getKey()!=null && processDefinition.getKey().contains(item.getId())){ - todoTask.setName(item.getName()); - break; - } - } - } catch (Exception e) { - // TODO: handle exception - e.printStackTrace(); - } + if (processDefinition.getKey() != null && processDefinition.getKey().contains(item.getId())) { + todoTask.setName(item.getName()); + break; + } + } + } catch (Exception e) { + // TODO: handle exception + e.printStackTrace(); + } - if(todoTask.getName()==null|| todoTask.getName().isEmpty()){ - todoTask.setName(processDefinition.getKey()); - } + if (todoTask.getName() == null || todoTask.getName().isEmpty()) { + todoTask.setName(processDefinition.getKey()); + } //默认浅复制,因为在子流程中查询到的leave会发生重复,要改为深复制 - results.add((TodoTask)todoTask.clone()); + results.add((TodoTask) todoTask.clone()); } // page.setTotalCount(taskQuery.count()); @@ -1006,41 +1012,41 @@ public class WorkflowService { * @return */ @Transactional(readOnly = true) - public TodoTask findTodoTask(String taskId,String processInstanceId) { + public TodoTask findTodoTask(String taskId, String processInstanceId) { Map variables = taskService.getVariables(taskId); //使用当前任务ID,获取当前任务对象 Task task = taskService.createTaskQuery()// - .taskId(taskId)//使用任务ID查询 - .singleResult(); + .taskId(taskId)//使用任务ID查询 + .singleResult(); ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult(); //流程实例挂起时,上获取的active processInstance为null - if(processInstance==null){ + if (processInstance == null) { return null; } String businessKey = processInstance.getBusinessKey(); if (businessKey == null) { //callactivity调用的流程启动时无businesskey,通过variable中businessKey查找 - if(variables.get("businessKey")!=null){ - businessKey =variables.get("businessKey").toString(); - }else{ + if (variables.get("businessKey") != null) { + businessKey = variables.get("businessKey").toString(); + } else { return null; } - }else{ + } else { variables.put("businessKey", businessKey); } TodoTask todoTask = new TodoTask(); todoTask.setTask(task); todoTask.setProcessInstance(processInstance); - ProcessDefinition processDefinition=getProcessDefinition(processInstance.getProcessDefinitionId()); + ProcessDefinition processDefinition = getProcessDefinition(processInstance.getProcessDefinitionId()); todoTask.setProcessDefinition(processDefinition); todoTask.setVariables(variables); todoTask.setType(processDefinition.getKey()); try { - ProcessType[] types=ProcessType.values(); + ProcessType[] types = ProcessType.values(); for (ProcessType item : types) { - if(processDefinition.getKey()!=null && processDefinition.getKey().contains(item.getId())){ + if (processDefinition.getKey() != null && processDefinition.getKey().contains(item.getId())) { todoTask.setName(item.getName()); break; } @@ -1050,14 +1056,15 @@ public class WorkflowService { e.printStackTrace(); } - if(todoTask.getName()==null|| todoTask.getName().isEmpty()){ + if (todoTask.getName() == null || todoTask.getName().isEmpty()) { todoTask.setName(processDefinition.getKey()); } - return (TodoTask)todoTask.clone(); + return (TodoTask) todoTask.clone(); } + /** + * 根据运维单获取流程任务 * - *根据运维单获取流程任务 * @param * @param * @return @@ -1066,54 +1073,55 @@ public class WorkflowService { public TodoTask getTodoTask(Maintenance maintenance) { // 根据当前人的ID查询 - String processInstanceId= maintenance.getProcessid(); + String processInstanceId = maintenance.getProcessid(); ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult(); // ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).active().singleResult(); - Task task =taskService.createTaskQuery().processInstanceId(processInstanceId).active().singleResult(); + Task task = taskService.createTaskQuery().processInstanceId(processInstanceId).active().singleResult(); Map variables = taskService.getVariables(task.getId()); //流程实例挂起时,上获取的active processInstance为null - if(processInstance==null|| task==null){ - return null; + if (processInstance == null || task == null) { + return null; } - variables.put("businessKey", maintenance.getId()); + variables.put("businessKey", maintenance.getId()); TodoTask todoTask = new TodoTask(); todoTask.setTask(task); todoTask.setProcessInstance(processInstance); - ProcessDefinition processDefinition=getProcessDefinition(processInstance.getProcessDefinitionId()); + ProcessDefinition processDefinition = getProcessDefinition(processInstance.getProcessDefinitionId()); todoTask.setProcessDefinition(processDefinition); todoTask.setVariables(variables); todoTask.setType(processDefinition.getKey()); todoTask.setBusiness(maintenance); - if (task.getAssignee()!=null && !task.getAssignee().isEmpty()) { - User user=userService.getUserById(task.getAssignee()); - todoTask.setAssigneeUser(user); + if (task.getAssignee() != null && !task.getAssignee().isEmpty()) { + User user = userService.getUserById(task.getAssignee()); + todoTask.setAssigneeUser(user); } try { - ProcessType[] types=ProcessType.values(); + ProcessType[] types = ProcessType.values(); for (ProcessType item : types) { - if(processDefinition.getKey()!=null && processDefinition.getKey().contains(item.getId())){ - todoTask.setName(item.getName()); - break; - } - } - } catch (Exception e) { - // TODO: handle exception - e.printStackTrace(); - } + if (processDefinition.getKey() != null && processDefinition.getKey().contains(item.getId())) { + todoTask.setName(item.getName()); + break; + } + } + } catch (Exception e) { + // TODO: handle exception + e.printStackTrace(); + } - if(todoTask.getName()==null|| todoTask.getName().isEmpty()){ - todoTask.setName(processDefinition.getKey()); - } + if (todoTask.getName() == null || todoTask.getName().isEmpty()) { + todoTask.setName(processDefinition.getKey()); + } return todoTask; } + /** + * 根据运维详情获取流程任务 * - *根据运维详情获取流程任务 * @param * @param * @return @@ -1122,108 +1130,109 @@ public class WorkflowService { public TodoTask getTodoTask(MaintenanceDetail maintenanceDetail) { // 根据当前人的ID查询 - String processInstanceId= maintenanceDetail.getProcessid(); + String processInstanceId = maintenanceDetail.getProcessid(); ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult(); // ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).active().singleResult(); - Task task =taskService.createTaskQuery().processInstanceId(processInstanceId).active().singleResult(); - if(task==null){ - return null; + Task task = taskService.createTaskQuery().processInstanceId(processInstanceId).active().singleResult(); + if (task == null) { + return null; } Map variables = taskService.getVariables(task.getId()); //流程实例挂起时,上获取的active processInstance为null - if(processInstance==null || task==null){ - return null; + if (processInstance == null || task == null) { + return null; } - variables.put("businessKey", maintenanceDetail.getId()); + variables.put("businessKey", maintenanceDetail.getId()); TodoTask todoTask = new TodoTask(); todoTask.setTask(task); todoTask.setProcessInstance(processInstance); - ProcessDefinition processDefinition=getProcessDefinition(processInstance.getProcessDefinitionId()); + ProcessDefinition processDefinition = getProcessDefinition(processInstance.getProcessDefinitionId()); todoTask.setProcessDefinition(processDefinition); todoTask.setVariables(variables); todoTask.setType(processDefinition.getKey()); //统一TODOtask的business类型 - Maintenance maintenance =new Maintenance(); - Company company = unitService.getCompById(maintenanceDetail.getCompanyid()); - maintenance.setCompany(company); - //将问题详情内容复制到中间变量 - maintenance.setProblem(maintenanceDetail.getProblemcontent()); - maintenance.setStatus(todoTask.getTask().getDescription()); + Maintenance maintenance = new Maintenance(); + Company company = unitService.getCompById(maintenanceDetail.getCompanyid()); + maintenance.setCompany(company); + //将问题详情内容复制到中间变量 + maintenance.setProblem(maintenanceDetail.getProblemcontent()); + maintenance.setStatus(todoTask.getTask().getDescription()); todoTask.setBusiness(maintenance); - if (task.getAssignee()!=null && !task.getAssignee().isEmpty()) { - User user=userService.getUserById(task.getAssignee()); - todoTask.setAssigneeUser(user); + if (task.getAssignee() != null && !task.getAssignee().isEmpty()) { + User user = userService.getUserById(task.getAssignee()); + todoTask.setAssigneeUser(user); } try { - ProcessType[] types=ProcessType.values(); + ProcessType[] types = ProcessType.values(); for (ProcessType item : types) { - if(processDefinition.getKey()!=null && processDefinition.getKey().contains(item.getId())){ - todoTask.setName(item.getName()); - break; - } - } - } catch (Exception e) { - // TODO: handle exception - e.printStackTrace(); - } + if (processDefinition.getKey() != null && processDefinition.getKey().contains(item.getId())) { + todoTask.setName(item.getName()); + break; + } + } + } catch (Exception e) { + // TODO: handle exception + e.printStackTrace(); + } - if(todoTask.getName()==null|| todoTask.getName().isEmpty()){ - todoTask.setName(processDefinition.getKey()); - } + if (todoTask.getName() == null || todoTask.getName().isEmpty()) { + todoTask.setName(processDefinition.getKey()); + } return todoTask; } @Transactional(readOnly = true) - public TodoTask getTodoTask(String processInstanceId,String businessKey,Object business) { + public TodoTask getTodoTask(String processInstanceId, String businessKey, Object business) { // 根据当前人的ID查询 ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult(); // ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).active().singleResult(); - Task task =taskService.createTaskQuery().processInstanceId(processInstanceId).active().singleResult(); + Task task = taskService.createTaskQuery().processInstanceId(processInstanceId).active().singleResult(); Map variables = taskService.getVariables(task.getId()); //流程实例挂起时,上获取的active processInstance为null - if(processInstance==null || task==null){ - return null; + if (processInstance == null || task == null) { + return null; } - variables.put("businessKey", businessKey); + variables.put("businessKey", businessKey); TodoTask todoTask = new TodoTask(); todoTask.setTask(task); todoTask.setProcessInstance(processInstance); - ProcessDefinition processDefinition=getProcessDefinition(processInstance.getProcessDefinitionId()); + ProcessDefinition processDefinition = getProcessDefinition(processInstance.getProcessDefinitionId()); todoTask.setProcessDefinition(processDefinition); todoTask.setVariables(variables); todoTask.setType(processDefinition.getKey()); //统一TODOtask的business类型 todoTask.setBusiness(business); - if (task.getAssignee()!=null && !task.getAssignee().isEmpty()) { - User user=userService.getUserById(task.getAssignee()); - todoTask.setAssigneeUser(user); + if (task.getAssignee() != null && !task.getAssignee().isEmpty()) { + User user = userService.getUserById(task.getAssignee()); + todoTask.setAssigneeUser(user); } try { - ProcessType[] types=ProcessType.values(); + ProcessType[] types = ProcessType.values(); for (ProcessType item : types) { - if(processDefinition.getKey()!=null && processDefinition.getKey().contains(item.getId())){ - todoTask.setName(item.getName()); - break; - } - } - } catch (Exception e) { - // TODO: handle exception - e.printStackTrace(); - } + if (processDefinition.getKey() != null && processDefinition.getKey().contains(item.getId())) { + todoTask.setName(item.getName()); + break; + } + } + } catch (Exception e) { + // TODO: handle exception + e.printStackTrace(); + } - if(todoTask.getName()==null|| todoTask.getName().isEmpty()){ - todoTask.setName(processDefinition.getKey()); - } + if (todoTask.getName() == null || todoTask.getName().isEmpty()) { + todoTask.setName(processDefinition.getKey()); + } return todoTask; } + /** * 查询任务comment * @@ -1232,43 +1241,44 @@ public class WorkflowService { * @return */ @Transactional(readOnly = true) - public List findTaskComments(String taskId,String taskDefKey) { - List list = new ArrayList(); - //使用当前的任务ID,查询当前流程对应的历史任务ID + public List findTaskComments(String taskId, String taskDefKey) { + List list = new ArrayList(); + //使用当前的任务ID,查询当前流程对应的历史任务ID - //使用当前任务ID,获取当前任务对象 - Task task = taskService.createTaskQuery()// - .taskId(taskId)//使用任务ID查询 - .singleResult(); - //获取流程实例ID - String processInstanceId = task.getProcessInstanceId(); - //使用流程实例ID,查询历史任务,获取历史任务对应的每个任务ID - List htiList = historyService.createHistoricTaskInstanceQuery()//历史任务表查询 - .processInstanceId(processInstanceId)//使用流程实例ID查询 - .list(); - //遍历集合,获取每个任务ID - if(htiList!=null && htiList.size()>0){ - for(HistoricTaskInstance hti:htiList){ - //任务ID - String htaskId = hti.getId(); - //获取批注信息 - if(taskDefKey!=null && hti.getTaskDefinitionKey().equals(taskDefKey)){ - list = taskService.getTaskComments(htaskId);//对用历史完成后的任务ID - } - } - } - return list; + //使用当前任务ID,获取当前任务对象 + Task task = taskService.createTaskQuery()// + .taskId(taskId)//使用任务ID查询 + .singleResult(); + //获取流程实例ID + String processInstanceId = task.getProcessInstanceId(); + //使用流程实例ID,查询历史任务,获取历史任务对应的每个任务ID + List htiList = historyService.createHistoricTaskInstanceQuery()//历史任务表查询 + .processInstanceId(processInstanceId)//使用流程实例ID查询 + .list(); + //遍历集合,获取每个任务ID + if (htiList != null && htiList.size() > 0) { + for (HistoricTaskInstance hti : htiList) { + //任务ID + String htaskId = hti.getId(); + //获取批注信息 + if (taskDefKey != null && hti.getTaskDefinitionKey().equals(taskDefKey)) { + list = taskService.getTaskComments(htaskId);//对用历史完成后的任务ID + } + } + } + return list; } + /** * 查询已处理任务列表。 * * @param assignee 用户 * @return 已处理任务列表 */ - public List queryDoneTasks(String assignee,String modelKey) { - SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - List taskList = historyService.createHistoricTaskInstanceQuery() + public List queryDoneTasks(String assignee, String modelKey) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + List taskList = historyService.createHistoricTaskInstanceQuery() .taskAssignee(assignee) .finished().processDefinitionKey(modelKey) .list(); @@ -1278,24 +1288,24 @@ public class WorkflowService { String processInstanceId = task.getProcessInstanceId(); //根据历史流程实例,获得业务key - HistoricProcessInstance hisProcess= historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstanceId).singleResult(); + HistoricProcessInstance hisProcess = historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstanceId).singleResult(); leaveTask.setHistoricProcessInstance(hisProcess); - ProcessDefinition processDefinition=getProcessDefinition(task.getProcessDefinitionId()); - if(processDefinition!=null){ + ProcessDefinition processDefinition = getProcessDefinition(task.getProcessDefinitionId()); + if (processDefinition != null) { leaveTask.setProcessDefinition(processDefinition); leaveTask.setType(processDefinition.getKey()); leaveTask.setTaskId(task.getId());//流程实例id leaveTask.setTaskHis(task);//流程实例id try { - ProcessType[] types=ProcessType.values(); - Maintenance maintenance=null; + ProcessType[] types = ProcessType.values(); + Maintenance maintenance = null; for (ProcessType item : types) { - if(processDefinition.getKey()!=null && processDefinition.getKey().contains(item.getId())){ + if (processDefinition.getKey() != null && processDefinition.getKey().contains(item.getId())) { leaveTask.setName(item.getName()); - if(leaveTask.getType().contains(item.getId())){ + if (leaveTask.getType().contains(item.getId())) { //系统默认主流程 - maintenance=new Maintenance(); + maintenance = new Maintenance(); maintenance.setProblem(item.getName()); maintenance.setStatus(task.getDescription()); leaveTask.setBusiness(maintenance); @@ -1308,7 +1318,7 @@ public class WorkflowService { e.printStackTrace(); } } - if(leaveTask.getName()==null){ + if (leaveTask.getName() == null) { leaveTask.setName(task.getName()); } leaveTask.setProcessDefinitionId(task.getProcessDefinitionId());//流程实例所属流程定义id @@ -1320,96 +1330,29 @@ public class WorkflowService { } return leaveTasks; } - public JSONArray todoTasklistToJsonArray(List list){ - SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - JSONArray json= new JSONArray(); - if (list!=null) { - for(int i=0;i variables = object.getVariables(); - if (variables!=null ) { - item.put("userIds",variables.get("userIds")); - } - //activiti属性 - ExecutionEntity pInstance=(ExecutionEntity)object.getProcessInstance(); - if(pInstance!=null){ -// System.out.println(pInstance.getProcessVariables().toString()); -// JSONObject jb=JSONObject.fromObject(pInstance.getProcessVariables()); - JSONObject jbpInstance= new JSONObject(); - jbpInstance.put("activityId", pInstance.getActivityId()); - jbpInstance.put("businessKey", pInstance.getBusinessKey()); - jbpInstance.put("id", pInstance.getId()); - //pInstance判断当前任务是否是激活或挂起,1是激活,2是挂起 - jbpInstance.put("suspended", pInstance.getSuspensionState()); - item.put("processInstance", jbpInstance); - } - - ProcessDefinition pd=object.getProcessDefinition(); - if(pd!=null){ - JSONObject jbpDefinition= new JSONObject(); - jbpDefinition.put("deploymentId", pd.getDeploymentId()); - jbpDefinition.put("description", pd.getDescription()); - jbpDefinition.put("id", pd.getId()); - jbpDefinition.put("Key", pd.getKey()); - jbpDefinition.put("name", pd.getName()); - jbpDefinition.put("resourceName", pd.getResourceName()); - jbpDefinition.put("revision", pd.getVersion()); - item.put("processDefinition", jbpDefinition); - } - - - Task task=object.getTask(); - if(task!=null){ - JSONObject jbpTask= new JSONObject(); - jbpTask.put("createTime", sdf.format(task.getCreateTime())); - jbpTask.put("executionId", task.getExecutionId()); - jbpTask.put("name", task.getName()); - jbpTask.put("id", task.getId()); - jbpTask.put("processDefinitionId", task.getProcessDefinitionId()); - jbpTask.put("processInstanceId", task.getProcessInstanceId()); - jbpTask.put("assignee", task.getAssignee()); - jbpTask.put("taskDefinitionKey",task.getTaskDefinitionKey()); - jbpTask.put("status",task.getDescription()); - item.put("task", jbpTask); - } - //Maintenance maintenance= (Maintenance)object.getBusiness(); - item.put("business", JSONObject.fromObject(object.getBusiness())); - User user= (User)object.getAssigneeUser(); - item.put("assigneeUser", JSONObject.fromObject(user)); - json.add(item); - } - } - sdf=null; - return json; - } - public JSONArray doneTasklistToJsonArray(List list){ - SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - JSONArray json= new JSONArray(); - if (list!=null) { - for(int i=0;i variables = object.getVariables(); - if (variables!=null ) { - item.put("userIds",variables.get("userIds")); + if (variables != null) { + item.put("userIds", variables.get("userIds")); } //activiti属性 - ExecutionEntity pInstance=(ExecutionEntity)object.getProcessInstance(); - if(pInstance!=null){ - JSONObject jbpInstance= new JSONObject(); + ExecutionEntity pInstance = (ExecutionEntity) object.getProcessInstance(); + if (pInstance != null) { +// System.out.println(pInstance.getProcessVariables().toString()); +// JSONObject jb=JSONObject.fromObject(pInstance.getProcessVariables()); + JSONObject jbpInstance = new JSONObject(); jbpInstance.put("activityId", pInstance.getActivityId()); jbpInstance.put("businessKey", pInstance.getBusinessKey()); jbpInstance.put("id", pInstance.getId()); @@ -1417,18 +1360,10 @@ public class WorkflowService { jbpInstance.put("suspended", pInstance.getSuspensionState()); item.put("processInstance", jbpInstance); } - HistoricProcessInstance historicProcessInstance=(HistoricProcessInstance)object.getHistoricProcessInstance(); - if(historicProcessInstance!=null){ - JSONObject jbhistoricProcessInstance= new JSONObject(); - jbhistoricProcessInstance.put("activityId", historicProcessInstance.getStartActivityId()); - jbhistoricProcessInstance.put("businessKey", historicProcessInstance.getBusinessKey()); - jbhistoricProcessInstance.put("id", historicProcessInstance.getId()); - item.put("historicProcessInstance", jbhistoricProcessInstance); - } - ProcessDefinition pd=object.getProcessDefinition(); - if(pd!=null){ - JSONObject jbpDefinition= new JSONObject(); + ProcessDefinition pd = object.getProcessDefinition(); + if (pd != null) { + JSONObject jbpDefinition = new JSONObject(); jbpDefinition.put("deploymentId", pd.getDeploymentId()); jbpDefinition.put("description", pd.getDescription()); jbpDefinition.put("id", pd.getId()); @@ -1440,9 +1375,86 @@ public class WorkflowService { } - HistoricTaskInstance task=object.getTaskHis(); - if(task!=null){ - JSONObject jbpTask= new JSONObject(); + Task task = object.getTask(); + if (task != null) { + JSONObject jbpTask = new JSONObject(); + jbpTask.put("createTime", sdf.format(task.getCreateTime())); + jbpTask.put("executionId", task.getExecutionId()); + jbpTask.put("name", task.getName()); + jbpTask.put("id", task.getId()); + jbpTask.put("processDefinitionId", task.getProcessDefinitionId()); + jbpTask.put("processInstanceId", task.getProcessInstanceId()); + jbpTask.put("assignee", task.getAssignee()); + jbpTask.put("taskDefinitionKey", task.getTaskDefinitionKey()); + jbpTask.put("status", task.getDescription()); + item.put("task", jbpTask); + } + //Maintenance maintenance= (Maintenance)object.getBusiness(); + item.put("business", JSONObject.fromObject(object.getBusiness())); + User user = (User) object.getAssigneeUser(); + item.put("assigneeUser", JSONObject.fromObject(user)); + json.add(item); + } + } + sdf = null; + return json; + } + + public JSONArray doneTasklistToJsonArray(List list) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + JSONArray json = new JSONArray(); + if (list != null) { + for (int i = 0; i < list.size(); i++) { + JSONObject item = new JSONObject(); + Leave object = (Leave) list.get(i); + //leave根属性 + item.put("id", object.getId()); + item.put("name", object.getName()); + item.put("type", object.getType()); + item.put("startTime", object.getStartTime()); + item.put("endTime", object.getEndTime()); + Map variables = object.getVariables(); + if (variables != null) { + item.put("userIds", variables.get("userIds")); + } + + //activiti属性 + ExecutionEntity pInstance = (ExecutionEntity) object.getProcessInstance(); + if (pInstance != null) { + JSONObject jbpInstance = new JSONObject(); + jbpInstance.put("activityId", pInstance.getActivityId()); + jbpInstance.put("businessKey", pInstance.getBusinessKey()); + jbpInstance.put("id", pInstance.getId()); + //pInstance判断当前任务是否是激活或挂起,1是激活,2是挂起 + jbpInstance.put("suspended", pInstance.getSuspensionState()); + item.put("processInstance", jbpInstance); + } + HistoricProcessInstance historicProcessInstance = (HistoricProcessInstance) object.getHistoricProcessInstance(); + if (historicProcessInstance != null) { + JSONObject jbhistoricProcessInstance = new JSONObject(); + jbhistoricProcessInstance.put("activityId", historicProcessInstance.getStartActivityId()); + jbhistoricProcessInstance.put("businessKey", historicProcessInstance.getBusinessKey()); + jbhistoricProcessInstance.put("id", historicProcessInstance.getId()); + item.put("historicProcessInstance", jbhistoricProcessInstance); + } + + ProcessDefinition pd = object.getProcessDefinition(); + if (pd != null) { + JSONObject jbpDefinition = new JSONObject(); + jbpDefinition.put("deploymentId", pd.getDeploymentId()); + jbpDefinition.put("description", pd.getDescription()); + jbpDefinition.put("id", pd.getId()); + jbpDefinition.put("Key", pd.getKey()); + jbpDefinition.put("name", pd.getName()); + jbpDefinition.put("resourceName", pd.getResourceName()); + jbpDefinition.put("revision", pd.getVersion()); + item.put("processDefinition", jbpDefinition); + } + + + HistoricTaskInstance task = object.getTaskHis(); + if (task != null) { + JSONObject jbpTask = new JSONObject(); jbpTask.put("startTime", sdf.format(task.getStartTime())); jbpTask.put("endTime", sdf.format(task.getEndTime())); jbpTask.put("executionId", task.getExecutionId()); @@ -1451,20 +1463,21 @@ public class WorkflowService { jbpTask.put("processDefinitionId", task.getProcessDefinitionId()); jbpTask.put("processInstanceId", task.getProcessInstanceId()); jbpTask.put("assignee", task.getAssignee()); - jbpTask.put("taskDefinitionKey",task.getTaskDefinitionKey()); - jbpTask.put("status",task.getDescription()); + jbpTask.put("taskDefinitionKey", task.getTaskDefinitionKey()); + jbpTask.put("status", task.getDescription()); item.put("task", jbpTask); } //Maintenance maintenance= (Maintenance)object.getBusiness(); item.put("business", JSONObject.fromObject(object.getBusiness())); - User user= (User)object.getAssigneeUser(); + User user = (User) object.getAssigneeUser(); item.put("assigneeUser", JSONObject.fromObject(user)); json.add(item); } } - sdf=null; + sdf = null; return json; } + /** * 查询已完成流程。 * @@ -1481,25 +1494,26 @@ public class WorkflowService { //设置查询条件 //指定流程定义key,只查询某个业务流程的实例 - ProcessType[] types=ProcessType.values(); - com.alibaba.fastjson.JSONArray result= new com.alibaba.fastjson.JSONArray(); + ProcessType[] types = ProcessType.values(); + com.alibaba.fastjson.JSONArray result = new com.alibaba.fastjson.JSONArray(); for (ProcessType item : types) { String processDefinitionKey = item.getId(); //System.out.println("processDefinitionKey:"+processDefinitionKey); historicProcessInstanceQuery.processDefinitionKey(processDefinitionKey). - //设置只查询已完成的 - finished().orderByProcessInstanceStartTime().desc(); + //设置只查询已完成的 + finished().orderByProcessInstanceStartTime().desc(); //数据列表 List list = historicProcessInstanceQuery.list(); - com.alibaba.fastjson.JSONArray json= new com.alibaba.fastjson.JSONArray(); + com.alibaba.fastjson.JSONArray json = new com.alibaba.fastjson.JSONArray(); //System.out.println("size:"+list.size()); - if(list!=null && list.size()>0){ + if (list != null && list.size() > 0) { json = com.alibaba.fastjson.JSONArray.parseArray(JSON.toJSONString(list)); result.addAll(json); } } return result; } + /** * 查询流程定义对象 * @@ -1531,24 +1545,30 @@ public class WorkflowService { public void setRepositoryService(RepositoryService repositoryService) { this.repositoryService = repositoryService; } - public IdentityService getIdentityService() { - return identityService; - } - public void setIdentityService(IdentityService identityService) { - this.identityService = identityService; - } - public RuntimeService getRuntimeService() { - return runtimeService; - } - public TaskService getTaskService() { - return taskService; - } - public HistoryService getHistoryService() { - return historyService; - } - public RepositoryService getRepositoryService() { - return repositoryService; - } + + public IdentityService getIdentityService() { + return identityService; + } + + public void setIdentityService(IdentityService identityService) { + this.identityService = identityService; + } + + public RuntimeService getRuntimeService() { + return runtimeService; + } + + public TaskService getTaskService() { + return taskService; + } + + public HistoryService getHistoryService() { + return historyService; + } + + public RepositoryService getRepositoryService() { + return repositoryService; + } } diff --git a/src/main/java/com/sipai/service/business/BusinessUnitAuditService.java b/src/main/java/com/sipai/service/business/BusinessUnitAuditService.java index 9b0a4733..7e0ae58c 100644 --- a/src/main/java/com/sipai/service/business/BusinessUnitAuditService.java +++ b/src/main/java/com/sipai/service/business/BusinessUnitAuditService.java @@ -112,17 +112,24 @@ public class BusinessUnitAuditService implements CommService{ } List list=historyService.createHistoricActivityInstanceQuery().processInstanceId(entity.getProcessid()).activityId(wortTaskId) .orderByHistoricActivityInstanceStartTime().desc().list(); - if (list != null && list.size()>0) { - variables.put(CommString.ACTI_KEK_Assignee, list.get(0).getAssignee()); - if(entity.getAuditopinion()!=null && !entity.getAuditopinion().isEmpty()){ - taskService.addComment(entity.getTaskid(), entity.getProcessid(), entity.getAuditopinion()); - } - }else { - variables.put(CommString.ACTI_KEK_Assignee, businessUnitAdapter.getInsuser()); - if(entity.getAuditopinion()!=null && !entity.getAuditopinion().isEmpty()){ - taskService.addComment(entity.getTaskid(), entity.getProcessid(), entity.getAuditopinion()); - } + // 优先取历史记录中的 assignee;若 assignee 为空(候选人任务未签收),则查 BusinessUnitAudit 记录获取实际提交人 + String targetAssignee = null; + if (list != null && list.size() > 0) { + targetAssignee = list.get(0).getAssignee(); } + if (targetAssignee == null && !wortTaskId.isEmpty()) { + // 历史 assignee 为空时,从 BusinessUnitAudit 记录中查找该步骤的实际提交人 + List previousAuditList = this.selectListByWhere( + "where businessid='" + entity.getBusinessid() + "' and taskdefinitionkey='" + wortTaskId + "' order by insdt desc"); + if (previousAuditList != null && previousAuditList.size() > 0) { + targetAssignee = previousAuditList.get(0).getInsuser(); + } + } + // 设置退回目标处理人(若仍为空则由流程变量 userIds 确定候选人,不再回退到工单创建人) + variables.put(CommString.ACTI_KEK_Assignee, targetAssignee); + if(entity.getAuditopinion()!=null && !entity.getAuditopinion().isEmpty()){ + taskService.addComment(entity.getTaskid(), entity.getProcessid(), entity.getAuditopinion()); + } } //int res=0; taskService.complete(entity.getTaskid(), variables); @@ -141,17 +148,24 @@ public class BusinessUnitAuditService implements CommService{ BusinessUnitRecord businessUnitRecord = new BusinessUnitRecord(entity); if(entity.getPassstatus()){ //通过 - if(variables.get(CommString.ACTI_KEK_Candidate_Users)!=null){ - businessUnitRecord.sendMessage(variables.get(CommString.ACTI_KEK_Candidate_Users).toString(),""); + String candidateUsers = variables.get(CommString.ACTI_KEK_Candidate_Users) != null + ? variables.get(CommString.ACTI_KEK_Candidate_Users).toString() : null; + if(candidateUsers != null && !candidateUsers.isEmpty()){ + // 有下一步接收人,通知下一步处理人 + businessUnitRecord.sendMessage(candidateUsers, ""); + }else if(variables.get(CommString.ACTI_KEK_AssigneeList) != null){ + // 会签 + businessUnitRecord.sendMessage(entity.getTargetusers(), ""); }else{ - //会签 - if(variables.get(CommString.ACTI_KEK_AssigneeList)!=null){ - businessUnitRecord.sendMessage(entity.getTargetusers(),""); - } + // 最后一步,无下一步处理人,通知当前提交人(完成确认) + if(entity.getInsuser() != null && !entity.getInsuser().isEmpty()){ + businessUnitRecord.sendMessage(entity.getInsuser(), ""); + } } }else{ - if(variables.get(CommString.ACTI_KEK_Assignee)!=null){ - businessUnitRecord.sendMessage(variables.get(CommString.ACTI_KEK_Assignee).toString(),""); + // 退回:通知目标处理人(排除空值,避免错误发送) + if(variables.get(CommString.ACTI_KEK_Assignee) != null){ + businessUnitRecord.sendMessage(variables.get(CommString.ACTI_KEK_Assignee).toString(), ""); } } diff --git a/src/main/java/com/sipai/service/safety/SafetyCheckActivityService.java b/src/main/java/com/sipai/service/safety/SafetyCheckActivityService.java index 994e7596..8106c88b 100644 --- a/src/main/java/com/sipai/service/safety/SafetyCheckActivityService.java +++ b/src/main/java/com/sipai/service/safety/SafetyCheckActivityService.java @@ -47,11 +47,22 @@ public class SafetyCheckActivityService { if (processDefinitions == null || processDefinitions.size() == 0) { return Result.failed(company.getName() + "缺少该流程定义。"); } + // 防止重复发起:若该业务已有运行中的流程实例,则跳过,避免创建双倍待办任务 + List existingInstances = workflowService.getRuntimeService() + .createProcessInstanceQuery() + .processDefinitionKey(processKey) + .processInstanceBusinessKey(bizId) + .active() + .list(); + if (existingInstances != null && !existingInstances.isEmpty()) { + return Result.success(); + } // 启动流程实例 // 设置网关条件 Map map = new HashMap<>(); map.put(CommString.ACTI_KEK_Condition, 1); map.put(CommString.ACTI_KEK_Assignee, applyUserId); + map.put(CommString.ACTI_KEK_Candidate_Users, ""); // 启动流程 ProcessInstance processInstance = workflowService.startWorkflow( @@ -70,6 +81,7 @@ public class SafetyCheckActivityService { Map map2 = new HashMap<>(); map2.put(CommString.ACTI_KEK_Condition, 1); map2.put(CommString.ACTI_KEK_Assignee, nextUserId); + map2.put(CommString.ACTI_KEK_Candidate_Users, ""); workflowService.getTaskService().complete(task.getId(), map2); return Result.success(); @@ -89,9 +101,9 @@ public class SafetyCheckActivityService { Map map = new HashMap<>(); map.put(CommString.ACTI_KEK_Condition, pass); map.put(CommString.ACTI_KEK_Assignee, nextUserId); - for (Task task : tasks) { - workflowService.getTaskService().complete(task.getId(), map); - } + map.put(CommString.ACTI_KEK_Candidate_Users, ""); + // 只完成第一个任务,防止多任务场景下指数级创建待办(如因重复发起导致有多个并发任务时) + workflowService.getTaskService().complete(tasks.get(0).getId(), map); return Result.success(); } diff --git a/src/main/java/com/sipai/service/safety/SafetyFilesService.java b/src/main/java/com/sipai/service/safety/SafetyFilesService.java index 73267c5d..3d1575f3 100644 --- a/src/main/java/com/sipai/service/safety/SafetyFilesService.java +++ b/src/main/java/com/sipai/service/safety/SafetyFilesService.java @@ -101,6 +101,9 @@ public class SafetyFilesService implements CommService { MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; List files = multipartRequest.getFiles("file"); for (MultipartFile mfile : files) { + if (mfile == null || mfile.getSize() == 0) { + continue; + } String suffix = mfile.getOriginalFilename().substring(mfile.getOriginalFilename().lastIndexOf(".")); //判断保存文件的路径是否存在 diff --git a/src/main/webapp/JS/activiti/workflow.js b/src/main/webapp/JS/activiti/workflow.js index d671b01e..94bf40c7 100644 --- a/src/main/webapp/JS/activiti/workflow.js +++ b/src/main/webapp/JS/activiti/workflow.js @@ -346,6 +346,10 @@ var processSelectNodeForHandle = function(taskId){ //选择下一节点,先选择审核结果,再选择节点 $.post(ext.contextPath + "/activiti/workflow/getRoutesForSelect2.do", {taskId:taskId,passFlag:passFlag}, function(data) { $("#routeNum").empty(); + if (!data || data.length === 0) { + console.warn('getRoutesForSelect2: no routes found for passFlag=' + passFlag); + return; + } var selelct = $("#routeNum").select2({ data: data, placeholder:'请先选择审核结果',//默认文字提示 @@ -374,6 +378,10 @@ var processSelectNodeForHandle = function(taskId){ }) selectResult.val('').trigger("change"); $.post(ext.contextPath + "/activiti/workflow/getRoutesForSelect2.do", {taskId:taskId,passFlag:true}, function(data) { + if (!data || data.length === 0) { + console.warn('getRoutesForSelect2: no routes found for passFlag=true'); + return; + } var selelct = $("#routeNum").select2({ data: data, placeholder:'请先选择审核结果',//默认文字提示