只能往当前任务之前退回
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_INS_ID = "procInsId";
|
||||||
public static final String PROC_DEF_KEY="procDefKey";
|
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,6 +64,12 @@ public class ActConstant {
|
||||||
* 概算
|
* 概算
|
||||||
*/
|
*/
|
||||||
public static final String PROCESS_DEFKEY_ESTIMATE = "estimate";
|
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 = "填报决算#工程管理部#产品系统集成部#财务人员#财务总监#总经理#执行董事";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 预算
|
* 预算
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -727,7 +727,7 @@ public class ProjectController extends BaseController {
|
||||||
model.put("Utils", FreeMarkerUtil.fromStaticPackage("cn.palmte.work.utils.Utils"));
|
model.put("Utils", FreeMarkerUtil.fromStaticPackage("cn.palmte.work.utils.Utils"));
|
||||||
|
|
||||||
//审核记录
|
//审核记录
|
||||||
List<ProjectTaskRecord> list = projectTaskRecordService.list(id);
|
List<ProjectTaskRecord> list = projectTaskRecordService.list(project);
|
||||||
String huiQianFile = "";
|
String huiQianFile = "";
|
||||||
if (!list.isEmpty()) {
|
if (!list.isEmpty()) {
|
||||||
Optional<ProjectTaskRecord> first = list.stream().filter(r -> StrKit.notBlank(r.getFileUrl())).max(Comparator.comparingInt(ProjectTaskRecord::getId));
|
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}")
|
@RequestMapping("/taskRecords/{projectId}")
|
||||||
public String taskRecords(@PathVariable int projectId, Map<String, Object> model) {
|
public String taskRecords(@PathVariable int projectId, Map<String, Object> model) {
|
||||||
model.put(PROJECT_ID, projectId);
|
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()) {
|
if (list != null && !list.isEmpty()) {
|
||||||
model.put("list", list);
|
model.put("list", list);
|
||||||
}
|
}
|
||||||
|
|
|
@ -110,9 +110,9 @@ public class ProjectTaskRecord {
|
||||||
public StatusEnum getStatusByProDefId() {
|
public StatusEnum getStatusByProDefId() {
|
||||||
if (procDefId.startsWith(ActConstant.PROCESS_DEFKEY_BUDGET)) {
|
if (procDefId.startsWith(ActConstant.PROCESS_DEFKEY_BUDGET)) {
|
||||||
return StatusEnum.BUDGET_ACCOUNTS;
|
return StatusEnum.BUDGET_ACCOUNTS;
|
||||||
}if (procDefId.startsWith(ActConstant.PROCESS_DEFKEY_SETTLE)) {
|
}else if (procDefId.startsWith(ActConstant.PROCESS_DEFKEY_SETTLE)) {
|
||||||
return StatusEnum.SETTLE_ACCOUNTS;
|
return StatusEnum.SETTLE_ACCOUNTS;
|
||||||
}if (procDefId.startsWith(ActConstant.PROCESS_DEFKEY_FINAL)) {
|
}else if (procDefId.startsWith(ActConstant.PROCESS_DEFKEY_FINAL)) {
|
||||||
return StatusEnum.FINAL_ACCOUNTS;
|
return StatusEnum.FINAL_ACCOUNTS;
|
||||||
}else{
|
}else{
|
||||||
return StatusEnum.ESTIMATE_ACCOUNTS;
|
return StatusEnum.ESTIMATE_ACCOUNTS;
|
||||||
|
@ -122,9 +122,9 @@ public class ProjectTaskRecord {
|
||||||
public String getProcDefName() {
|
public String getProcDefName() {
|
||||||
if (procDefId.startsWith(ActConstant.PROCESS_DEFKEY_BUDGET)) {
|
if (procDefId.startsWith(ActConstant.PROCESS_DEFKEY_BUDGET)) {
|
||||||
return "预算审批流程";
|
return "预算审批流程";
|
||||||
}if (procDefId.startsWith(ActConstant.PROCESS_DEFKEY_SETTLE)) {
|
}else if (procDefId.startsWith(ActConstant.PROCESS_DEFKEY_SETTLE)) {
|
||||||
return "结算审批流程";
|
return "结算审批流程";
|
||||||
}if (procDefId.startsWith(ActConstant.PROCESS_DEFKEY_FINAL)) {
|
}else if (procDefId.startsWith(ActConstant.PROCESS_DEFKEY_FINAL)) {
|
||||||
return "决算审批流程";
|
return "决算审批流程";
|
||||||
}else{
|
}else{
|
||||||
return "概算审批流程";
|
return "概算审批流程";
|
||||||
|
@ -138,9 +138,9 @@ public class ProjectTaskRecord {
|
||||||
public String getProcDefKey() {
|
public String getProcDefKey() {
|
||||||
if (procDefId.startsWith(ActConstant.PROCESS_DEFKEY_BUDGET)) {
|
if (procDefId.startsWith(ActConstant.PROCESS_DEFKEY_BUDGET)) {
|
||||||
return 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;
|
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;
|
return ActConstant.PROCESS_DEFKEY_FINAL;
|
||||||
}else{
|
}else{
|
||||||
return ActConstant.PROCESS_DEFKEY_ESTIMATE;
|
return ActConstant.PROCESS_DEFKEY_ESTIMATE;
|
||||||
|
|
|
@ -1,8 +1,11 @@
|
||||||
package cn.palmte.work.service;
|
package cn.palmte.work.service;
|
||||||
|
|
||||||
|
import cn.palmte.work.bean.StatusEnum;
|
||||||
import cn.palmte.work.config.activiti.ActConstant;
|
import cn.palmte.work.config.activiti.ActConstant;
|
||||||
|
import cn.palmte.work.model.Project;
|
||||||
import cn.palmte.work.model.ProjectTaskRecord;
|
import cn.palmte.work.model.ProjectTaskRecord;
|
||||||
import cn.palmte.work.model.ProjectTaskRecordRepository;
|
import cn.palmte.work.model.ProjectTaskRecordRepository;
|
||||||
|
import cn.palmte.work.utils.ActUtil;
|
||||||
import cn.palmte.work.utils.InterfaceUtil;
|
import cn.palmte.work.utils.InterfaceUtil;
|
||||||
import org.activiti.engine.task.Task;
|
import org.activiti.engine.task.Task;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
|
@ -24,6 +27,9 @@ public class ProjectTaskRecordService {
|
||||||
@Autowired
|
@Autowired
|
||||||
Pagination pagination;
|
Pagination pagination;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ActUtil actUtil;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 保存审批任务记录
|
* 保存审批任务记录
|
||||||
|
@ -91,13 +97,13 @@ public class ProjectTaskRecordService {
|
||||||
/**
|
/**
|
||||||
* 根据项目id查询审批任务记录
|
* 根据项目id查询审批任务记录
|
||||||
*
|
*
|
||||||
* @param projectId
|
* @param project
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public List<ProjectTaskRecord> list(int projectId) {
|
public List<ProjectTaskRecord> list(Project project) {
|
||||||
String select = "tr.*, su.role_name";
|
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 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);
|
queryHelper.addOrderProperty("tr.create_time", true);
|
||||||
List<ProjectTaskRecord> projectTaskRecords = pagination.find(queryHelper.getSql(), ProjectTaskRecord.class);
|
List<ProjectTaskRecord> projectTaskRecords = pagination.find(queryHelper.getSql(), ProjectTaskRecord.class);
|
||||||
|
|
||||||
|
@ -112,12 +118,30 @@ public class ProjectTaskRecordService {
|
||||||
lastProcInsId = lastProcInsIdOp.get();
|
lastProcInsId = lastProcInsIdOp.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int projectStatus = project.getStatus();
|
||||||
|
Task currentTask = actUtil.getCurrentTask(project.getId());
|
||||||
|
|
||||||
for (ProjectTaskRecord record : projectTaskRecords) {
|
for (ProjectTaskRecord record : projectTaskRecords) {
|
||||||
if (record.getTaskStatus() == ProjectTaskRecord.STATUS_ROLLBACK) {
|
if (record.getTaskStatus() == ProjectTaskRecord.STATUS_ROLLBACK) {
|
||||||
//已退回记录 不能再退回
|
//已退回记录 不能再退回
|
||||||
continue;
|
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)) {
|
if (!record.getProcDefId().startsWith(ActConstant.PROCESS_DEFKEY_BUDGET)) {
|
||||||
//非预算流程全部支持退回
|
//非预算流程全部支持退回
|
||||||
record.setCanRollback(true);
|
record.setCanRollback(true);
|
||||||
|
|
|
@ -52,6 +52,32 @@ public class ActUtil {
|
||||||
@Autowired
|
@Autowired
|
||||||
private ProjectInstanceRelationRepository projectInstanceRelationRepository;
|
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) {
|
public Task getCurrentTask(int projectId) {
|
||||||
try {
|
try {
|
||||||
|
@ -103,7 +129,6 @@ public class ActUtil {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 跳转到指定任务节点
|
* 跳转到指定任务节点
|
||||||
*
|
*
|
||||||
|
|
|
@ -2228,7 +2228,7 @@
|
||||||
<div class="time-axis-date" style="margin-left: -96px"> ${node.createTime}
|
<div class="time-axis-date" style="margin-left: -96px"> ${node.createTime}
|
||||||
<span></span>
|
<span></span>
|
||||||
</div>
|
</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==2>审核通过</#if>
|
||||||
<#if node.taskIndex!=2 && node.taskStatus==3>审核不通过</#if>
|
<#if node.taskIndex!=2 && node.taskStatus==3>审核不通过</#if>
|
||||||
|
|
||||||
|
|
|
@ -27,7 +27,7 @@
|
||||||
<div class="time-axis-date" style="margin-left: -96px"> ${node.createTime}
|
<div class="time-axis-date" style="margin-left: -96px"> ${node.createTime}
|
||||||
<span></span>
|
<span></span>
|
||||||
</div>
|
</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==2>审核通过</#if>
|
||||||
<#if node.taskIndex!=2 && node.taskStatus==3>审核不通过</#if>
|
<#if node.taskIndex!=2 && node.taskStatus==3>审核不通过</#if>
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue