只能往当前任务之前退回

master
pengqiang 2022-09-09 14:39:56 +08:00
parent c961e32e2d
commit e874348e25
7 changed files with 83 additions and 27 deletions

View File

@ -5,43 +5,43 @@ public class ActConstant {
/**
*
*/
public static final String START_PROCESS_USERID="startUserId";
public static final String START_PROCESS_USERID = "startUserId";
public static final String PROC_INS_ID="procInsId";
public static final String PROC_DEF_KEY="procDefKey";
public static final String PROC_INS_ID = "procInsId";
public static final String PROC_DEF_KEY = "procDefKey";
/**
*
*/
public static final int TASK_INDEX_END= -1;
public static final int TASK_INDEX_END = -1;
/**
* 0-
* 0-
*/
public static final int TASK_INDEX_OTHER= 0;
public static final int TASK_INDEX_OTHER = 0;
/**
*
*/
public static final int TASK_INDEX_START= 1;
public static final int TASK_INDEX_START = 1;
/**
*
*/
public static final int TASK_INDEX_FIRST_USER_TASK= 2;
public static final int TASK_INDEX_FIRST_USER_TASK = 2;
/**
*
*/
public static final int TASK_TYPE_SINGE= 0;
public static final int TASK_TYPE_SINGE = 0;
/**
*
*/
public static final int TASK_TYPE_MULTI= 1;
public static final int TASK_TYPE_MULTI = 1;
/**
@ -64,18 +64,24 @@ public class ActConstant {
*
*/
public static final String PROCESS_DEFKEY_ESTIMATE = "estimate";
public static final String PROCESS_TASKS_ESTIMATE = "填报概算#工程管理部#产品系统集成部#财务人员#财务总监#总经理#执行董事";
public static final String PROCESS_TASKS_BUDGET = "填报预算#工程管理部#产品系统集成部#财务人员#财务总监#总经理#执行董事";
public static final String PROCESS_TASKS_SETTLE = "填报结算#财务总监";
public static final String PROCESS_TASKS_FINAL = "填报决算#工程管理部#产品系统集成部#财务人员#财务总监#总经理#执行董事";
/**
*
*/
public static final String PROCESS_DEFKEY_BUDGET = "budget";
public static final String PROCESS_DEFKEY_BUDGET = "budget";
/**
*
*/
public static final String PROCESS_DEFKEY_SETTLE = "settle";
public static final String PROCESS_DEFKEY_SETTLE = "settle";
/**
*
*/
public static final String PROCESS_DEFKEY_FINAL = "final";
public static final String PROCESS_DEFKEY_FINAL = "final";
public static final String KEY_PROJECT_ID = "projectId";
public static final String KEY_PROJECT_TYPE = "projectType";

View File

@ -727,7 +727,7 @@ public class ProjectController extends BaseController {
model.put("Utils", FreeMarkerUtil.fromStaticPackage("cn.palmte.work.utils.Utils"));
//审核记录
List<ProjectTaskRecord> list = projectTaskRecordService.list(id);
List<ProjectTaskRecord> list = projectTaskRecordService.list(project);
String huiQianFile = "";
if (!list.isEmpty()) {
Optional<ProjectTaskRecord> first = list.stream().filter(r -> StrKit.notBlank(r.getFileUrl())).max(Comparator.comparingInt(ProjectTaskRecord::getId));
@ -794,7 +794,8 @@ public class ProjectController extends BaseController {
@RequestMapping("/taskRecords/{projectId}")
public String taskRecords(@PathVariable int projectId, Map<String, Object> model) {
model.put(PROJECT_ID, projectId);
List<ProjectTaskRecord> list = projectTaskRecordService.list(projectId);
Project project = projectService.getProject(projectId);
List<ProjectTaskRecord> list = projectTaskRecordService.list(project);
if (list != null && !list.isEmpty()) {
model.put("list", list);
}

View File

@ -110,9 +110,9 @@ public class ProjectTaskRecord {
public StatusEnum getStatusByProDefId() {
if (procDefId.startsWith(ActConstant.PROCESS_DEFKEY_BUDGET)) {
return StatusEnum.BUDGET_ACCOUNTS;
}if (procDefId.startsWith(ActConstant.PROCESS_DEFKEY_SETTLE)) {
}else if (procDefId.startsWith(ActConstant.PROCESS_DEFKEY_SETTLE)) {
return StatusEnum.SETTLE_ACCOUNTS;
}if (procDefId.startsWith(ActConstant.PROCESS_DEFKEY_FINAL)) {
}else if (procDefId.startsWith(ActConstant.PROCESS_DEFKEY_FINAL)) {
return StatusEnum.FINAL_ACCOUNTS;
}else{
return StatusEnum.ESTIMATE_ACCOUNTS;
@ -122,9 +122,9 @@ public class ProjectTaskRecord {
public String getProcDefName() {
if (procDefId.startsWith(ActConstant.PROCESS_DEFKEY_BUDGET)) {
return "预算审批流程";
}if (procDefId.startsWith(ActConstant.PROCESS_DEFKEY_SETTLE)) {
}else if (procDefId.startsWith(ActConstant.PROCESS_DEFKEY_SETTLE)) {
return "结算审批流程";
}if (procDefId.startsWith(ActConstant.PROCESS_DEFKEY_FINAL)) {
}else if (procDefId.startsWith(ActConstant.PROCESS_DEFKEY_FINAL)) {
return "决算审批流程";
}else{
return "概算审批流程";
@ -138,9 +138,9 @@ public class ProjectTaskRecord {
public String getProcDefKey() {
if (procDefId.startsWith(ActConstant.PROCESS_DEFKEY_BUDGET)) {
return ActConstant.PROCESS_DEFKEY_BUDGET;
}if (procDefId.startsWith(ActConstant.PROCESS_DEFKEY_SETTLE)) {
}else if (procDefId.startsWith(ActConstant.PROCESS_DEFKEY_SETTLE)) {
return ActConstant.PROCESS_DEFKEY_SETTLE;
}if (procDefId.startsWith(ActConstant.PROCESS_DEFKEY_FINAL)) {
}else if (procDefId.startsWith(ActConstant.PROCESS_DEFKEY_FINAL)) {
return ActConstant.PROCESS_DEFKEY_FINAL;
}else{
return ActConstant.PROCESS_DEFKEY_ESTIMATE;

View File

@ -1,8 +1,11 @@
package cn.palmte.work.service;
import cn.palmte.work.bean.StatusEnum;
import cn.palmte.work.config.activiti.ActConstant;
import cn.palmte.work.model.Project;
import cn.palmte.work.model.ProjectTaskRecord;
import cn.palmte.work.model.ProjectTaskRecordRepository;
import cn.palmte.work.utils.ActUtil;
import cn.palmte.work.utils.InterfaceUtil;
import org.activiti.engine.task.Task;
import org.slf4j.Logger;
@ -24,6 +27,9 @@ public class ProjectTaskRecordService {
@Autowired
Pagination pagination;
@Autowired
private ActUtil actUtil;
/**
*
@ -91,13 +97,13 @@ public class ProjectTaskRecordService {
/**
* id
*
* @param projectId
* @param project
* @return
*/
public List<ProjectTaskRecord> list(int projectId) {
public List<ProjectTaskRecord> list(Project project) {
String select = "tr.*, su.role_name";
QueryHelper queryHelper = new QueryHelper(select, " project_task_record tr LEFT JOIN sys_user su on su.id=tr.assignee_id ");
queryHelper.addCondition("tr.project_id=?", projectId);
queryHelper.addCondition("tr.project_id=?", project.getId());
queryHelper.addOrderProperty("tr.create_time", true);
List<ProjectTaskRecord> projectTaskRecords = pagination.find(queryHelper.getSql(), ProjectTaskRecord.class);
@ -112,12 +118,30 @@ public class ProjectTaskRecordService {
lastProcInsId = lastProcInsIdOp.get();
}
int projectStatus = project.getStatus();
Task currentTask = actUtil.getCurrentTask(project.getId());
for (ProjectTaskRecord record : projectTaskRecords) {
if (record.getTaskStatus() == ProjectTaskRecord.STATUS_ROLLBACK) {
//已退回记录 不能再退回
continue;
}
//只能往当前任务之前退回
StatusEnum statusEnum = record.getStatusByProDefId();
if (statusEnum.getStatus() > projectStatus) {
//大于当前状态 不能退回
continue;
} else if (statusEnum.getStatus() == projectStatus) {
//都在同一个审批里 判断任务节点顺序
if (currentTask != null && actUtil.targetBigThanCurrent(record.getProcDefId(),
record.getTaskName(), currentTask.getName())) {
//如果大于当前节点 不能退回
continue;
}
}
if (!record.getProcDefId().startsWith(ActConstant.PROCESS_DEFKEY_BUDGET)) {
//非预算流程全部支持退回
record.setCanRollback(true);

View File

@ -52,6 +52,32 @@ public class ActUtil {
@Autowired
private ProjectInstanceRelationRepository projectInstanceRelationRepository;
/**
*
*
* @param procDefId
* @param targetTaskName
* @param currentTaskName
* @return
*/
public boolean targetBigThanCurrent(String procDefId, String targetTaskName, String currentTaskName) {
String taskNames = ActConstant.PROCESS_TASKS_ESTIMATE;
if (procDefId.startsWith(ActConstant.PROCESS_DEFKEY_BUDGET)) {
taskNames = ActConstant.PROCESS_TASKS_BUDGET;
}
if (procDefId.startsWith(ActConstant.PROCESS_DEFKEY_SETTLE)) {
taskNames = ActConstant.PROCESS_TASKS_SETTLE;
}
if (procDefId.startsWith(ActConstant.PROCESS_DEFKEY_FINAL)) {
taskNames = ActConstant.PROCESS_TASKS_FINAL;
}
int currentTaskIndex = taskNames.indexOf(currentTaskName);
int targetTaskIndex = taskNames.indexOf(targetTaskName);
return targetTaskIndex >= currentTaskIndex;
}
public Task getCurrentTask(int projectId) {
try {
@ -103,7 +129,6 @@ public class ActUtil {
}
/**
*
*

View File

@ -2228,7 +2228,7 @@
<div class="time-axis-date" style="margin-left: -96px"> ${node.createTime}
<span></span>
</div>
<div class="time-axis-title"> ${node.roleName}-${node.assigneeName}:
<div class="time-axis-title"> 【${node.procDefName}】&nbsp; ${node.roleName}-${node.assigneeName}:
<#if node.taskIndex!=2 && node.taskStatus==2>审核通过</#if>
<#if node.taskIndex!=2 && node.taskStatus==3>审核不通过</#if>

View File

@ -27,7 +27,7 @@
<div class="time-axis-date" style="margin-left: -96px"> ${node.createTime}
<span></span>
</div>
<div class="time-axis-title"> ${node.roleName}-${node.assigneeName}:
<div class="time-axis-title"> 【${node.procDefName}】&nbsp; ${node.roleName}-${node.assigneeName}:
<#if node.taskIndex!=2 && node.taskStatus==2>审核通过</#if>
<#if node.taskIndex!=2 && node.taskStatus==3>审核不通过</#if>