只能往当前任务之前退回
parent
c961e32e2d
commit
e874348e25
|
@ -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";
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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 {
|
|||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 跳转到指定任务节点
|
||||
*
|
||||
|
|
|
@ -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}】 ${node.roleName}-${node.assigneeName}:
|
||||
<#if node.taskIndex!=2 && node.taskStatus==2>审核通过</#if>
|
||||
<#if node.taskIndex!=2 && node.taskStatus==3>审核不通过</#if>
|
||||
|
||||
|
|
|
@ -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}】 ${node.roleName}-${node.assigneeName}:
|
||||
<#if node.taskIndex!=2 && node.taskStatus==2>审核通过</#if>
|
||||
<#if node.taskIndex!=2 && node.taskStatus==3>审核不通过</#if>
|
||||
|
||||
|
|
Loading…
Reference in New Issue