新增表保存一个项目的所有审批记录
parent
4ed32b4e2c
commit
9c11f95987
|
@ -9,21 +9,13 @@ public class ActConstant {
|
|||
|
||||
|
||||
public static final String PROC_INS_ID="procInsId";
|
||||
public static final String PROC_DEF_KEY="procDefKey";
|
||||
|
||||
/**
|
||||
* 第一个用户任务 即:发起申请任务
|
||||
*/
|
||||
public static final int TASK_INDEX_FIRST_USER_TASK= 1;
|
||||
|
||||
/**
|
||||
* 审批通过
|
||||
*/
|
||||
public static final int TYPE_APPROVE= 1;
|
||||
/**
|
||||
* 审批驳回
|
||||
*/
|
||||
public static final int TYPE_ROLLBACK= 2;
|
||||
|
||||
|
||||
/**
|
||||
* 单实例 或签
|
||||
|
|
|
@ -0,0 +1,52 @@
|
|||
package cn.palmte.work.model;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import javax.persistence.*;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 项目审批任务记录
|
||||
*/
|
||||
@Data
|
||||
@Entity
|
||||
@Table(name = "project_task_record")
|
||||
public class ProjectTaskRecord {
|
||||
|
||||
@Id
|
||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||
private int id;
|
||||
|
||||
@Column(name = "project_id")
|
||||
private int projectId;
|
||||
|
||||
@Column(name = "proc_def_id")
|
||||
private String procDefId;
|
||||
|
||||
@Column(name = "proc_ins_id")
|
||||
private String procInsId;
|
||||
|
||||
@Column(name = "task_def_key")
|
||||
private String taskDefKey;
|
||||
|
||||
@Column(name = "task_name")
|
||||
private String taskName;
|
||||
|
||||
@Column(name = "task_status")
|
||||
private int taskStatus;
|
||||
|
||||
@Column(name = "task_assignee_id")
|
||||
private String taskAssigneeId;
|
||||
|
||||
@Column(name = "task_assignee_name")
|
||||
private String taskAssigneeName;
|
||||
|
||||
@Column(name = "task_comment")
|
||||
private String taskComment;
|
||||
|
||||
@Column(name = "create_time")
|
||||
private Date createTime;
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
package cn.palmte.work.model;
|
||||
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
|
||||
|
||||
public interface ProjectTaskRecordRepository extends JpaRepository<ProjectTaskRecord, Integer> {
|
||||
|
||||
}
|
|
@ -1,9 +1,13 @@
|
|||
package cn.palmte.work.service;
|
||||
|
||||
|
||||
import cn.palmte.work.bean.ApproveStatusEnum;
|
||||
import cn.palmte.work.config.activiti.ActConstant;
|
||||
import cn.palmte.work.utils.ActUtil;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.*;
|
||||
|
@ -15,21 +19,29 @@ import java.util.*;
|
|||
@Service
|
||||
public class ActCallbackScript {
|
||||
private static final Logger logger = LoggerFactory.getLogger(ActCallbackScript.class);
|
||||
@Autowired
|
||||
private ActUtil actUtil;
|
||||
@Autowired
|
||||
private ProjectInstanceService projectInstanceService;
|
||||
|
||||
/**
|
||||
* 更新流程审批通过
|
||||
*
|
||||
* @param map
|
||||
*/
|
||||
public void updateApproveStatus(Map map) {
|
||||
logger.info("--- updateApproveStatus--- : {} ", map);
|
||||
//String startUserId = (String) map.get(ActConstant.START_PROCESS_USERID);
|
||||
String procInsId = (String) map.get(ActConstant.PROC_INS_ID);
|
||||
String procDefKey = (String) map.get(ActConstant.PROC_DEF_KEY);
|
||||
logger.info(" updateApproveStatus procInsId:{}, procDefKey:{}", procInsId, procDefKey);
|
||||
|
||||
public void endScriptDemo(Map map) {
|
||||
logger.info("--- endScriptDemo--- : {} ", map);
|
||||
String startUserId = (String)map.get(ActConstant.START_PROCESS_USERID);
|
||||
String procInsId = (String)map.get(ActConstant.START_PROCESS_USERID);
|
||||
logger.info(" startUserId:{}, procInsId:{}", startUserId, procInsId);
|
||||
}
|
||||
|
||||
|
||||
public void rollbackScriptDemo(Map map) {
|
||||
logger.info("--- rollbackScriptDemo--- : {} ", map);
|
||||
String startUserId = (String)map.get(ActConstant.START_PROCESS_USERID);
|
||||
String procInsId = (String)map.get(ActConstant.START_PROCESS_USERID);
|
||||
logger.info(" startUserId:{}, procInsId:{}", startUserId, procInsId);
|
||||
int projectId = actUtil.getProjectId(procInsId);
|
||||
if (projectId > 0) {
|
||||
projectInstanceService.updateApproveStatus(projectId, ApproveStatusEnum.APPROVAL_PASSED, procDefKey);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package cn.palmte.work.service;
|
||||
|
||||
|
||||
import cn.palmte.work.config.activiti.ActConstant;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import org.activiti.engine.delegate.DelegateExecution;
|
||||
import org.activiti.engine.delegate.DelegateTask;
|
||||
|
@ -10,6 +11,7 @@ import org.springframework.beans.factory.annotation.Autowired;
|
|||
import org.springframework.stereotype.Service;
|
||||
|
||||
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
|
@ -25,6 +27,9 @@ public class ActListenerService {
|
|||
@Autowired
|
||||
private ActTaskDefService actTaskDefService;
|
||||
|
||||
@Autowired
|
||||
private ProjectInstanceService projectInstanceService;
|
||||
|
||||
/**
|
||||
* 节点创建监听 动态设置审批人
|
||||
*
|
||||
|
@ -37,8 +42,22 @@ public class ActListenerService {
|
|||
String procDefId = delegateTask.getProcessDefinitionId();
|
||||
String procInsId = delegateTask.getProcessInstanceId();
|
||||
String taskDefKey = delegateTask.getTaskDefinitionKey();
|
||||
Set<String> candidateUsers = actTaskDefService.findCandidateUsers(procDefId, procInsId, taskDefKey);
|
||||
List<String> candidateUsers = actTaskDefService.findCandidateUsers(procDefId, procInsId, taskDefKey);
|
||||
logger.info("addCandidateUsers : {}", candidateUsers);
|
||||
|
||||
|
||||
Object projectIdObj = delegateTask.getVariable(ActConstant.KEY_PROJECT_ID);
|
||||
logger.info("projectIdObj : {}", projectIdObj);
|
||||
|
||||
if (candidateUsers != null && !candidateUsers.isEmpty() && projectIdObj != null) {
|
||||
try {
|
||||
int adminId = Integer.parseInt(candidateUsers.get(0));
|
||||
projectInstanceService.updateApprover((Integer) projectIdObj, adminId);
|
||||
} catch (Exception e) {
|
||||
logger.error("", e);
|
||||
}
|
||||
}
|
||||
|
||||
delegateTask.addCandidateUsers(candidateUsers);
|
||||
}
|
||||
|
||||
|
@ -55,7 +74,7 @@ public class ActListenerService {
|
|||
}*/
|
||||
|
||||
|
||||
public Set<String> multipleInstanceTask(DelegateExecution delegateExecution) throws Exception {
|
||||
public List<String> multipleInstanceTask(DelegateExecution delegateExecution) throws Exception {
|
||||
String procInsId = delegateExecution.getProcessInstanceId();
|
||||
String procDefId = delegateExecution.getProcessDefinitionId();
|
||||
String taskDefKey = delegateExecution.getCurrentActivityId();
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package cn.palmte.work.service;
|
||||
|
||||
|
||||
import cn.palmte.work.bean.ApproveStatusEnum;
|
||||
import cn.palmte.work.model.ActTaskDefRepository;
|
||||
import cn.palmte.work.pojo.ActProcIns;
|
||||
import cn.palmte.work.utils.ActUtil;
|
||||
|
@ -50,7 +51,7 @@ public class ActProcInsService {
|
|||
Pagination pagination;
|
||||
|
||||
@Autowired
|
||||
private ActTaskDefService actTaskDefService;
|
||||
private ProjectTaskRecordService projectTaskRecordService;
|
||||
|
||||
@Autowired
|
||||
private HistoryService historyService; //历史管理(执行完的数据的管理)
|
||||
|
@ -91,16 +92,18 @@ public class ActProcInsService {
|
|||
String assignee = InterfaceUtil.getAdminId() + "";
|
||||
task.setAssignee(assignee);
|
||||
String taskId = task.getId();
|
||||
taskService.addComment(taskId, procInsId, "提交审批");
|
||||
String comment = "提交" + processDefinition.getName();
|
||||
taskService.addComment(taskId, procInsId, comment);
|
||||
taskService.complete(taskId);
|
||||
|
||||
actTaskDefRepository.updateHiTaskAssign(assignee, procInsId, taskId);
|
||||
actTaskDefRepository.updateHiActAssign(assignee, procInsId, taskId);
|
||||
|
||||
projectTaskRecordService.saveTaskRecord(task, ApproveStatusEnum.APPROVAL_PENDING.getApproveStatus(), comment);
|
||||
|
||||
return processInstance.getId();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 流程实列列表
|
||||
*
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package cn.palmte.work.service;
|
||||
|
||||
import cn.palmte.work.bean.ApproveStatusEnum;
|
||||
import cn.palmte.work.config.activiti.ActConstant;
|
||||
|
||||
import cn.palmte.work.model.*;
|
||||
|
@ -25,9 +26,9 @@ import java.util.*;
|
|||
public class ActTaskDefService {
|
||||
private static final Logger logger = LoggerFactory.getLogger(ActTaskDefService.class);
|
||||
@Autowired
|
||||
private RepositoryService repositoryService; //管理流程定义 与流程定义和部署对象相关的Service
|
||||
private ProjectTaskRecordService projectTaskRecordService;
|
||||
@Autowired
|
||||
private ProcessEngine processEngine; //流程引擎对象
|
||||
private RepositoryService repositoryService;
|
||||
@Autowired
|
||||
private TaskService taskService; //任务管理 与正在执行的任务管理相关的Service
|
||||
@Autowired
|
||||
|
@ -38,6 +39,8 @@ public class ActTaskDefService {
|
|||
Pagination pagination;
|
||||
@Autowired
|
||||
private ActUtil actUtil;
|
||||
@Autowired
|
||||
private ProjectInstanceService projectInstanceService;
|
||||
|
||||
|
||||
/**
|
||||
|
@ -71,6 +74,9 @@ public class ActTaskDefService {
|
|||
//会签处理
|
||||
handleMulti(taskId, procInsId, type, userId, actTaskDef);
|
||||
}
|
||||
|
||||
//保存审批记录
|
||||
projectTaskRecordService.saveTaskRecord(currentTask, type, message);
|
||||
}
|
||||
|
||||
|
||||
|
@ -107,7 +113,7 @@ public class ActTaskDefService {
|
|||
Double instanceActiveCount = Double.parseDouble(ActUtil.filterNullToZero(taskService.getVariable(taskId, ActConstant.NUMBER_OF_ACTIVE_INSTANCES))); //活动的会签任务数
|
||||
Double instanceCompleteCount = Double.parseDouble(ActUtil.filterNullToZero(taskService.getVariable(taskId, ActConstant.NUMBER_OF_COMPLETED_INSTANCES))); //完成会签任务数*/
|
||||
|
||||
if (ActConstant.TYPE_ROLLBACK == type) {
|
||||
if (ApproveStatusEnum.APPROVAL_UNPASS.getApproveStatus() == type) {
|
||||
//一个人驳回 整个任务节点驳回
|
||||
List<Task> taskList = taskService.createTaskQuery().processInstanceId(procInsId).list();
|
||||
for (int i = 0; i < taskList.size(); i++) {
|
||||
|
@ -139,7 +145,7 @@ public class ActTaskDefService {
|
|||
* @param actTaskDef
|
||||
*/
|
||||
private void handleSinge(String taskId, String procInsId, int type, String userId, ActTaskDef actTaskDef) {
|
||||
if (ActConstant.TYPE_APPROVE == type) {
|
||||
if (ApproveStatusEnum.APPROVAL_PASSED.getApproveStatus() == type) {
|
||||
//审批通过
|
||||
taskService.setAssignee(taskId, userId);
|
||||
taskService.complete(taskId);
|
||||
|
@ -147,12 +153,12 @@ public class ActTaskDefService {
|
|||
//执行配置的审批通过脚本
|
||||
int endScript = actTaskDef.getEndScript();
|
||||
if (endScript != 0) {
|
||||
actUtil.invokeEventScript(endScript, procInsId);
|
||||
actUtil.invokeEventScript(endScript, procInsId, actTaskDef);
|
||||
} else {
|
||||
logger.info("未配置审批通过脚本 task:{}", actTaskDef.getTaskName());
|
||||
}
|
||||
|
||||
} else if (ActConstant.TYPE_ROLLBACK == type) {
|
||||
} else if (ApproveStatusEnum.APPROVAL_UNPASS.getApproveStatus() == type) {
|
||||
//驳回
|
||||
String rollbackTaskKey = actTaskDef.getRollbackTaskKey();
|
||||
actUtil.jumpToTargetTask(taskId, rollbackTaskKey);
|
||||
|
@ -160,10 +166,16 @@ public class ActTaskDefService {
|
|||
//执行配置的驳回脚本
|
||||
int rollbackScript = actTaskDef.getRollbackScript();
|
||||
if (rollbackScript != 0) {
|
||||
actUtil.invokeEventScript(rollbackScript, procInsId);
|
||||
actUtil.invokeEventScript(rollbackScript, procInsId, actTaskDef);
|
||||
} else {
|
||||
logger.info("未配置驳回脚本 task:{}", actTaskDef.getTaskName());
|
||||
}
|
||||
|
||||
|
||||
int projectId = actUtil.getProjectId(procInsId);
|
||||
if (projectId > 0) {
|
||||
projectInstanceService.updateApproveStatus(projectId, ApproveStatusEnum.APPROVAL_UNPASS, actTaskDef.getProcDefKey());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -264,24 +276,25 @@ public class ActTaskDefService {
|
|||
* @param taskDefKey
|
||||
* @return
|
||||
*/
|
||||
public Set<String> findCandidateUsers(String procDefId, String procInsId, String taskDefKey) {
|
||||
public List<String> findCandidateUsers(String procDefId, String procInsId, String taskDefKey) {
|
||||
ActTaskDef taskDef = findFirstByProcDefIdAndTaskKey(procDefId, taskDefKey);
|
||||
if (taskDef.getTaskIndex() == ActConstant.TASK_INDEX_FIRST_USER_TASK) {
|
||||
//任务驳回到发起节点 审批人设置为发起人
|
||||
String startUserId = actUtil.getStartUserId(procInsId);
|
||||
Set<String> res = new HashSet<>(1);
|
||||
List<String> res = new ArrayList<>(1);
|
||||
logger.info("findCandidateUsers-0-task:{}, startUserId:{}", taskDef.getTaskName(), startUserId);
|
||||
res.add(startUserId);
|
||||
return res;
|
||||
}
|
||||
|
||||
List<String> resList = new ArrayList<>();
|
||||
//去重
|
||||
Set<String> res = new HashSet<>();
|
||||
|
||||
//通过人员id查询
|
||||
List<String> candidateUserList = taskDef.getCandidateUserList();
|
||||
logger.info("findCandidateUsers-1-task:{}, userList:{}", taskDef.getTaskName(), candidateUserList);
|
||||
if (!candidateUserList.isEmpty()) {
|
||||
resList.addAll(candidateUserList);
|
||||
res.addAll(candidateUserList);
|
||||
}
|
||||
|
||||
//通过角色id查询
|
||||
|
@ -290,13 +303,12 @@ public class ActTaskDefService {
|
|||
List<String> list = accountService.getUserIsByRole(candidateRoleList);
|
||||
logger.info("findCandidateUsers-3-task:{}, userIdListByRole:{}", taskDef.getTaskName(), list);
|
||||
if (!list.isEmpty()) {
|
||||
resList.addAll(list);
|
||||
res.addAll(list);
|
||||
}
|
||||
|
||||
//去重
|
||||
Set<String> res = new HashSet<>(resList);
|
||||
logger.info("findCandidateUsers-4-task:{}, resIds:{}", taskDef.getTaskName(), res);
|
||||
return res;
|
||||
List<String> resList = new ArrayList<>(res);
|
||||
logger.info("findCandidateUsers-4-task:{}, resIds:{}", taskDef.getTaskName(), resList);
|
||||
return resList;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -0,0 +1,56 @@
|
|||
package cn.palmte.work.service;
|
||||
|
||||
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.TaskService;
|
||||
import org.activiti.engine.task.Task;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import top.jfunc.common.db.utils.Pagination;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
|
||||
@Service
|
||||
public class ProjectTaskRecordService {
|
||||
private static final Logger logger = LoggerFactory.getLogger(ProjectTaskRecordService.class);
|
||||
@Autowired
|
||||
private ProjectTaskRecordRepository projectTaskRecordRepository;
|
||||
|
||||
@Autowired
|
||||
Pagination pagination;
|
||||
|
||||
@Autowired
|
||||
private ActUtil actUtil;
|
||||
|
||||
|
||||
public void saveTaskRecord(Task task, int status, String comment) {
|
||||
int projectId = actUtil.getProjectId(task.getProcessInstanceId());
|
||||
if (projectId == 0) {
|
||||
return;
|
||||
}
|
||||
task.getProcessDefinitionId();
|
||||
ProjectTaskRecord record = new ProjectTaskRecord();
|
||||
record.setProjectId(projectId);
|
||||
record.setProcDefId(task.getProcessDefinitionId());
|
||||
record.setProcInsId(task.getProcessInstanceId());
|
||||
record.setTaskDefKey(task.getTaskDefinitionKey());
|
||||
record.setTaskName(task.getName());
|
||||
record.setTaskComment(comment);
|
||||
record.setTaskStatus(status);
|
||||
record.setTaskAssigneeId(InterfaceUtil.getAdminId() + "");
|
||||
record.setTaskAssigneeName(InterfaceUtil.getAdmin().getRealName());
|
||||
record.setCreateTime(new Date());
|
||||
try {
|
||||
projectTaskRecordRepository.save(record);
|
||||
} catch (Exception e) {
|
||||
logger.error("", e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -5,6 +5,7 @@ import cn.palmte.work.config.activiti.DeleteTaskCommand;
|
|||
import cn.palmte.work.config.activiti.JumpCommand;
|
||||
import cn.palmte.work.model.ActScript;
|
||||
import cn.palmte.work.model.ActScriptRepository;
|
||||
import cn.palmte.work.model.ActTaskDef;
|
||||
import cn.palmte.work.service.AccountService;
|
||||
import org.activiti.bpmn.model.BpmnModel;
|
||||
import org.activiti.bpmn.model.FlowNode;
|
||||
|
@ -74,6 +75,14 @@ public class ActUtil {
|
|||
return "0";
|
||||
}
|
||||
|
||||
public int getProjectId(String procInsId) {
|
||||
Record record = getVariable(ActConstant.KEY_PROJECT_ID, procInsId);
|
||||
if (record != null) {
|
||||
return Integer.valueOf(record.get("text"));
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取流程实列里的所有变量
|
||||
|
@ -93,7 +102,7 @@ public class ActUtil {
|
|||
* @param scriptId
|
||||
* @param procInsId
|
||||
*/
|
||||
public void invokeEventScript(int scriptId, String procInsId) {
|
||||
public void invokeEventScript(int scriptId, String procInsId, ActTaskDef actTaskDef) {
|
||||
ActScript actScript = actScriptRepository.findOne(scriptId);
|
||||
if (actScript == null) {
|
||||
logger.info("脚本配置错误");
|
||||
|
@ -102,6 +111,7 @@ public class ActUtil {
|
|||
|
||||
Map<String, Object> map = new HashMap<>();
|
||||
map.put(ActConstant.PROC_INS_ID, procInsId);
|
||||
map.put(ActConstant.PROC_DEF_KEY, actTaskDef.getProcDefKey());
|
||||
List<Record> variables = getVariables(procInsId);
|
||||
for (Record variable : variables) {
|
||||
map.put(variable.getStr("name"), variable.get("text"));
|
||||
|
|
|
@ -46,14 +46,14 @@
|
|||
<#if !list.endTime??>
|
||||
<button type="button"
|
||||
class="am-btn am-btn-default am-btn-xs am-text-secondary"
|
||||
onclick="completeTask('${list.procInsId}', '${list.taskId}', 1)">
|
||||
onclick="completeTask('${list.procInsId}', '${list.taskId}', 2)">
|
||||
<span class="am-icon-pencil-square-o"></span>
|
||||
审批通过
|
||||
</button>
|
||||
|
||||
<button type="button"
|
||||
class="am-btn am-btn-default am-btn-xs am-text-secondary"
|
||||
onclick="completeTask('${list.procInsId}', '${list.taskId}', 2)">
|
||||
onclick="completeTask('${list.procInsId}', '${list.taskId}', 3)">
|
||||
<span class="am-icon-pencil-square-o"></span>
|
||||
驳回
|
||||
</button>
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
<tr class="am-text-nowrap">
|
||||
<th class="table-title">序号</th>
|
||||
<th class="table-title">任务名称</th>
|
||||
<th class="table-title">任务类型</th>
|
||||
<#--<th class="table-title">任务类型</th>-->
|
||||
<th class="table-date">回退任务</th>
|
||||
<th class="table-set am-text-center">审批人</th>
|
||||
<th class="table-set am-text-center">审批角色</th>
|
||||
|
@ -33,7 +33,7 @@
|
|||
<tr>
|
||||
<td>${list_index+1}</td>
|
||||
<td>${list.taskName!}</td>
|
||||
<td>
|
||||
<#--<td>
|
||||
<#if list.taskIndex != 1>
|
||||
<#if list.taskType == 0>
|
||||
或签
|
||||
|
@ -41,7 +41,7 @@
|
|||
会签
|
||||
</#if>
|
||||
</#if>
|
||||
</td>
|
||||
</td>-->
|
||||
|
||||
<td>
|
||||
<#if list.taskIndex != 1>
|
||||
|
|
Loading…
Reference in New Issue