郑根木 2 лет назад
Родитель
Сommit
a60b9e204f
1 измененных файлов: 16 добавлений и 98 удалений
  1. +16
    -98
      smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/FlowInstance.java

+ 16
- 98
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<Task> listInsertTask, List<TaskRel> listTaskRel, List<Comment> listTaskComment, List<Candidate> listInsertCand) {

}

public void rejectEx(String comment) {
long user_id = us.getUserId();
//校验权限,当前人员有权限干不,没权限直接抛异常
checkPermission();
if (actInst.getStatu() == FlowConst.ActivityStatu.SUBMIT.value) {
throw new BizException("当前任务已提交,不能驳回!");
}

//获取前置任务,前置任务需要置为被驳回的办理状态,为保证流程信息,复制一份,作为新建任务处理
List<Task> 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<Task> del_acts = provider.findAfterTasks(sqlIn.substring(1));
EntityDao<Task> 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<Task> 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<Task> make_acts = new ArrayList<>();
make_acts.add(make_act);

buildBillLog(FlowConst.Button.REJECT.value, "TODO", actInst, make_acts);
listener.afterReject(actInst, make_acts);
}

/**
* 状态变更,构建日志
*/


Загрузка…
Отмена
Сохранить