diff --git a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/FlowInstance.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/FlowInstance.java index cf6b17d..59c2094 100644 --- a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/FlowInstance.java +++ b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/FlowInstance.java @@ -416,7 +416,7 @@ public class FlowInstance { boolean canDel = !isFinish && actInst.isMake() && !isNew; buttons.add(createButton(FlowConst.Button.DEL, canDel)); - buttons.add(createButton(FlowConst.Button.DISUSE, !isNew && !actInst.isMake())); + buttons.add(createButton(FlowConst.Button.DISUSE, !isNew && !isFinish && !actInst.isMake())); buttons.add(createButton(FlowConst.Button.LOG, !isNew)); buttons.add(createButton(FlowConst.Button.WORD, !isNew)); buttons.add(createButton(FlowConst.Button.EXCEL, !isNew)); @@ -462,7 +462,7 @@ public class FlowInstance { long user_id = us.getUserId(); //校验权限,当前人员有权限干不,没权限直接抛异常 checkPermission(); - if (actInst.getStatu() == FlowConst.ActivityStatu.SUBMIT.value) { + if (actInst.getStatu() >= FlowConst.ActivityStatu.SUBMIT.value) { throw new BizException("当前任务已经提交,不能重复提交"); } @@ -528,8 +528,8 @@ public class FlowInstance { long user_id = us.getUserId(); //校验权限,当前人员有权限干不,没权限直接抛异常 checkPermission(); - if (actInst.getStatu() == FlowConst.ActivityStatu.SUBMIT.value) { - throw new BizException("当前任务已经提交,不能重复提交"); + if (actInst.getStatu() >= FlowConst.ActivityStatu.SUBMIT.value) { + throw new BizException("当前任务已经完成,不能重复提交"); } if (actInst.getStatu() == FlowConst.ActivityStatu.WAIT.value && !FlowHelper.isMyWaitedTask(actInst.getEntityId(), user_id)) { @@ -600,6 +600,10 @@ public class FlowInstance { throw new BizException("当前单据已审批完成,不能作废单据"); } + if (actInst.getStatu() >= FlowConst.ActivityStatu.SUBMIT.value) { + throw new BizException("当前任务已经完成,不能作废单据"); + } + if (actInst.getStatu() == FlowConst.ActivityStatu.WAIT.value && !FlowHelper.isMyWaitedTask(actInst.getEntityId(), user_id)) { throw new BizException("您不是当前任务的办理人,不允许作废"); } @@ -774,7 +778,7 @@ public class FlowInstance { long user_id = us.getUserId(); //校验权限,当前人员有权限干不,没权限直接抛异常 checkPermission(); - if (actInst.getStatu() == FlowConst.ActivityStatu.SUBMIT.value) { + if (actInst.getStatu() >= FlowConst.ActivityStatu.SUBMIT.value) { throw new BizException("当前任务已经提交,不能驳回!"); } @@ -800,6 +804,13 @@ public class FlowInstance { buildRejectTask(toTask, listInsertTask, listInsertCand, listTaskRel, listTaskComment); } actInst.setStatu(FlowConst.ActivityStatu.REJECT.value); + if (listInsertTask.size() > 0) { + procInst.setTaskId(listInsertTask.get(0).getEntityId()); + procInst.setActName(listInsertTask.get(0).getActName()); + } else { + procInst.setTaskId(actInst.getEntityId()); + procInst.setActName(actInst.getActName()); + } //先停止其他待办或办理中的任务 FlowHelper.stopTask(procInst.getId(), actInst.getId()); //保存入库 @@ -849,99 +860,6 @@ public class FlowInstance { listTaskComment.add(createComment(task)); } - private void rejectTo(String comment, long toTaskId, List listInsertTask, List listTaskRel, List listTaskComment, List listInsertCand) { - - } - - public void rejectEx(String comment) { - long user_id = us.getUserId(); - //校验权限,当前人员有权限干不,没权限直接抛异常 - checkPermission(); - if (actInst.getStatu() == FlowConst.ActivityStatu.SUBMIT.value) { - throw new BizException("当前任务已提交,不能驳回!"); - } - - //获取前置任务,前置任务需要置为被驳回的办理状态,为保证流程信息,复制一份,作为新建任务处理 - List new_acts = provider.findBeforeTasks(actInst.getEntityId()); - if (CommUtil.isEmpty(new_acts)) { - throw new BizException("没有找到前续任务,驳回失败!"); - } - //记录需要被删除后续任务的任务id - StringBuilder sqlIn = new StringBuilder(128); - //设为被驳回状态 - for (Task act : new_acts) { - act.setStatu(FlowConst.ActivityStatu.HANDLE.value); - act.setReject(true); - - sqlIn.append(",").append(act.getEntityId()); - } - - actInst.setStatu(FlowConst.ActivityStatu.REJECT.value); - - procInst.setTaskId(new_acts.get(0).getEntityId()); - procInst.setActName(new_acts.get(0).getActName()); - if (new_acts.size() == 1 && new_acts.get(0).isMake()) { - procInst.setStatu(FlowConst.InstanceStatu.BEGIN.value); - } else { - procInst.setStatu(FlowConst.InstanceStatu.RUNING.value); - } - //删除这些任务的后续任务 - List del_acts = provider.findAfterTasks(sqlIn.substring(1)); - EntityDao taskDao = getTaskDao(); - taskDao.batchDelete(del_acts); - taskDao.batchUpdateEntity(new_acts); - getTaskRelDao().deleteEntity("where trl_src_task_id in (" + sqlIn.substring(1) + ")"); - getProcInstDao().updateEntity(procInst); - - buildBillLog(FlowConst.Button.REJECT.value, comment, actInst, new_acts); - listener.afterReject(actInst, new_acts); -// comp.transCallback(FlowConst.FlowOptType.REJECT.value, actInst, new_acts); - } - - /** - * 驳回到制单 - * - * @throws Exception - */ - public void rejectToMake() { - //校验权限,当前人员有权限干不,没权限直接抛异常 - checkPermission(); - if (actInst.getStatu() == FlowConst.ActivityStatu.SUBMIT.value) { - throw new BizException("当前任务已提交,不能驳回!"); - } - - //获取前置任务,前置任务需要置为被驳回的办理状态,同时,前置任务的其他后置任务需要删除 - Task make_act = provider.findMakeTask(actInst.getPriId()); - if (EntityHelper.isEmpty(make_act)) { - throw new BizException("没有找到制单任务,驳回到制单失败!"); - } - - //设为被驳回状态 - make_act.setStatu(FlowConst.ActivityStatu.HANDLE.value); - make_act.setReject(true); - - actInst.setStatu(FlowConst.ActivityStatu.REJECT.value); - - procInst.setTaskId(make_act.getEntityId()); - procInst.setActName(make_act.getActName()); - procInst.setStatu(FlowConst.InstanceStatu.BEGIN.value); - - EntityDao taskDao = getTaskDao(); - taskDao.updateEntity(make_act); - //删除非制单步骤 - taskDao.deleteEntity("where tsk_pri_id = ? and tsk_id <> ? ", make_act.getPriId(), make_act.getId()); - getTaskRelDao().deleteEntity("where trl_pri_id = ? and trl_tsk_id <> ?", make_act.getPriId(), make_act.getId()); - getProcInstDao().updateEntity(procInst); - //删除候选人 - getCandidateDao().deleteEntity(" where cnd_pri_id = ? and cnd_tsk_id <> ?", make_act.getPriId(), make_act.getId()); - - List make_acts = new ArrayList<>(); - make_acts.add(make_act); - - buildBillLog(FlowConst.Button.REJECT.value, "TODO", actInst, make_acts); - listener.afterReject(actInst, make_acts); - } - /** * 状态变更,构建日志 */