master
parent
c7fa633753
commit
748b26144c
|
@ -1,5 +1,7 @@
|
|||
package cn.palmte.work.bean;
|
||||
|
||||
import cn.palmte.work.config.activiti.ActProcessKeyEnum;
|
||||
|
||||
/**
|
||||
* @author xiongshiyan at 2021/11/1 , contact me with email yanshixiong@126.com or phone 15208384257
|
||||
*/
|
||||
|
@ -48,4 +50,21 @@ public enum StatusEnum {
|
|||
}
|
||||
throw new IllegalArgumentException("Unkown status:"+status);
|
||||
}
|
||||
|
||||
|
||||
public static StatusEnum parseByProcDefId(String proDefId){
|
||||
if(proDefId.startsWith(ActProcessKeyEnum.ESTIMATE.getKey())){
|
||||
return ESTIMATE_ACCOUNTS;
|
||||
}
|
||||
if(proDefId.startsWith(ActProcessKeyEnum.BUDGET.getKey())){
|
||||
return BUDGET_ACCOUNTS;
|
||||
}
|
||||
if(proDefId.startsWith(ActProcessKeyEnum.SETTLE.getKey())){
|
||||
return SETTLE_ACCOUNTS;
|
||||
}
|
||||
if(proDefId.startsWith(ActProcessKeyEnum.FINAL.getKey())){
|
||||
return FINAL_ACCOUNTS;
|
||||
}
|
||||
throw new IllegalArgumentException("Unkown proDefId:"+ proDefId);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,33 @@
|
|||
package cn.palmte.work.config.activiti;
|
||||
|
||||
|
||||
import cn.palmte.work.exception.ResponseException;
|
||||
import lombok.Getter;
|
||||
|
||||
/**
|
||||
* 流程审批类型枚举
|
||||
*/
|
||||
@Getter
|
||||
public enum ActApproveTypeEnum {
|
||||
APPROVAL_PASSED(2, "审核通过"),
|
||||
APPROVAL_UN_PASS(3, "审核不通过");
|
||||
|
||||
|
||||
private int type;
|
||||
private String name;
|
||||
|
||||
ActApproveTypeEnum(int type, String name) {
|
||||
this.type = type;
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public static ActApproveTypeEnum ofType(int type) {
|
||||
if (type == APPROVAL_PASSED.getType()) {
|
||||
return APPROVAL_PASSED;
|
||||
} else if (type == APPROVAL_UN_PASS.getType()) {
|
||||
return APPROVAL_UN_PASS;
|
||||
} else {
|
||||
throw new ResponseException("不支持的审批类型【" + type + "】");
|
||||
}
|
||||
}
|
||||
}
|
|
@ -7,33 +7,6 @@ public class ActConstant {
|
|||
*/
|
||||
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 int TASK_INDEX_END = -1;
|
||||
|
||||
|
||||
/**
|
||||
* 0-未知或者其他节点
|
||||
*/
|
||||
public static final int TASK_INDEX_OTHER = 0;
|
||||
|
||||
/**
|
||||
* 开始节点
|
||||
*/
|
||||
public static final int TASK_INDEX_START = 1;
|
||||
|
||||
/**
|
||||
* 发起审批节点
|
||||
*/
|
||||
public static final int TASK_INDEX_FIRST_USER_TASK = 2;
|
||||
|
||||
|
||||
/**
|
||||
* 单实例 或签
|
||||
*/
|
||||
|
@ -44,60 +17,12 @@ public class ActConstant {
|
|||
public static final int TASK_TYPE_MULTI = 1;
|
||||
|
||||
|
||||
/**
|
||||
* 会签任务总数
|
||||
*/
|
||||
public static final String NUMBER_OF_INSTANCES = "nrOfInstances";
|
||||
|
||||
/**
|
||||
* 活动的会签任务数
|
||||
*/
|
||||
public static final String NUMBER_OF_ACTIVE_INSTANCES = "nrOfActiveInstances";
|
||||
|
||||
/**
|
||||
* 完成会签任务数
|
||||
*/
|
||||
public static final String NUMBER_OF_COMPLETED_INSTANCES = "nrOfCompletedInstances";
|
||||
|
||||
|
||||
/**
|
||||
* 概算
|
||||
*/
|
||||
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_SETTLE = "settle";
|
||||
/**
|
||||
* 决算
|
||||
*/
|
||||
public static final String PROCESS_DEFKEY_FINAL = "final";
|
||||
|
||||
public static final String KEY_PROJECT_ID = "projectId";
|
||||
public static final String KEY_PROJECT_TYPE = "projectType";
|
||||
|
||||
public static final String PROCESS_DEFKEY_SALE_CONTRACT = "saleContract";
|
||||
public static final String PROCESS_DEFKEY_BUSINESS_PURCHASE = "businessPurchase";
|
||||
|
||||
|
||||
//发起人部门主管
|
||||
public static final int CANDIDATE_TYPE_START_USER_LEADER = 1;
|
||||
|
||||
|
||||
//四算项目
|
||||
public static final int PROJECT_TYPE_FOURCAL = 0;
|
||||
//销售合同
|
||||
public static final int PROJECT_TYPE_SALE_CONTRACT = 1;
|
||||
//业务采购
|
||||
public static final int PROJECT_TYPE_BUSINESS_PURCHASE = 2;
|
||||
}
|
||||
|
|
|
@ -0,0 +1,63 @@
|
|||
package cn.palmte.work.config.activiti;
|
||||
|
||||
|
||||
import cn.palmte.work.exception.ResponseException;
|
||||
import lombok.Getter;
|
||||
|
||||
/**
|
||||
* 流程定义key枚举
|
||||
*/
|
||||
@Getter
|
||||
public enum ActProcessKeyEnum {
|
||||
ESTIMATE("estimate", "概算审批流程"),
|
||||
BUDGET("budget", "预算审批流程"),
|
||||
SETTLE("settle", "结算审批流程"),
|
||||
FINAL("final", "决算审批流程"),
|
||||
SALE_CONTRACT("saleContract", "销售合同审批流程"),
|
||||
BUSINESS_PURCHASE("businessPurchase", "业务采购审批流程");
|
||||
|
||||
|
||||
private String key;
|
||||
private String name;
|
||||
|
||||
ActProcessKeyEnum(String key, String name) {
|
||||
this.key = key;
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public static ActProcessKeyEnum ofKey(String key) {
|
||||
if (ESTIMATE.getKey().equals(key)) {
|
||||
return ESTIMATE;
|
||||
} else if (BUDGET.getKey().equals(key)) {
|
||||
return BUDGET;
|
||||
} else if (SETTLE.getKey().equals(key)) {
|
||||
return SETTLE;
|
||||
} else if (FINAL.getKey().equals(key)) {
|
||||
return FINAL;
|
||||
} else if (SALE_CONTRACT.getKey().equals(key)) {
|
||||
return SALE_CONTRACT;
|
||||
} else if (BUSINESS_PURCHASE.getKey().equals(key)) {
|
||||
return BUSINESS_PURCHASE;
|
||||
} else {
|
||||
throw new ResponseException("不支持的流程key【" + key + "】");
|
||||
}
|
||||
}
|
||||
|
||||
public static ActProcessKeyEnum ofProcDefId(String proDefId) {
|
||||
if (proDefId.startsWith(ESTIMATE.getKey())) {
|
||||
return ESTIMATE;
|
||||
} else if (proDefId.startsWith(BUDGET.getKey())) {
|
||||
return BUDGET;
|
||||
} else if (proDefId.startsWith(SETTLE.getKey())) {
|
||||
return SETTLE;
|
||||
} else if (proDefId.startsWith(FINAL.getKey())) {
|
||||
return FINAL;
|
||||
} else if (proDefId.startsWith(SALE_CONTRACT.getKey())) {
|
||||
return SALE_CONTRACT;
|
||||
} else if (proDefId.startsWith(BUSINESS_PURCHASE.getKey())) {
|
||||
return BUSINESS_PURCHASE;
|
||||
} else {
|
||||
throw new ResponseException("不支持的流程key【" + proDefId + "】");
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,36 @@
|
|||
package cn.palmte.work.config.activiti;
|
||||
|
||||
|
||||
import cn.palmte.work.exception.ResponseException;
|
||||
import lombok.Getter;
|
||||
|
||||
/**
|
||||
* 流程里的项目类型枚举
|
||||
*/
|
||||
@Getter
|
||||
public enum ActProjectTypeEnum {
|
||||
FOURCAL(0, "四算项目"),
|
||||
SALE_CONTRACT(1, "销售合同项目"),
|
||||
BUSINESS_PURCHASE(2, "业务采购项目");
|
||||
|
||||
|
||||
private int type;
|
||||
private String name;
|
||||
|
||||
ActProjectTypeEnum(int type, String name) {
|
||||
this.type = type;
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public static ActProjectTypeEnum ofType(int type) {
|
||||
if (type == FOURCAL.getType()) {
|
||||
return FOURCAL;
|
||||
} else if (type == SALE_CONTRACT.getType()) {
|
||||
return SALE_CONTRACT;
|
||||
} else if (type == BUSINESS_PURCHASE.getType()) {
|
||||
return BUSINESS_PURCHASE;
|
||||
} else {
|
||||
throw new ResponseException("不支持的项目类型【" + type + "】");
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,39 @@
|
|||
package cn.palmte.work.config.activiti;
|
||||
|
||||
|
||||
import cn.palmte.work.exception.ResponseException;
|
||||
import lombok.Getter;
|
||||
|
||||
/**
|
||||
* 流程里的节点类型枚举
|
||||
*/
|
||||
@Getter
|
||||
public enum ActTaskIndexEnum {
|
||||
END(-1, "结束节点"),
|
||||
COMMON(0, "除发起审批外的用户节点"),
|
||||
START(1, "开始节点"),
|
||||
FIRST_USER_TASK(2, "发起审批节点");
|
||||
|
||||
|
||||
private int index;
|
||||
private String name;
|
||||
|
||||
ActTaskIndexEnum(int index, String name) {
|
||||
this.index = index;
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public static ActTaskIndexEnum ofIndex(int index) {
|
||||
if (index == END.getIndex()) {
|
||||
return END;
|
||||
} else if (index == COMMON.getIndex()) {
|
||||
return COMMON;
|
||||
} else if (index == START.getIndex()) {
|
||||
return START;
|
||||
} else if (index == FIRST_USER_TASK.getIndex()) {
|
||||
return FIRST_USER_TASK;
|
||||
} else {
|
||||
throw new ResponseException("不支持的节点类型【" + index + "】");
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,36 @@
|
|||
package cn.palmte.work.config.activiti;
|
||||
|
||||
|
||||
import cn.palmte.work.exception.ResponseException;
|
||||
import lombok.Getter;
|
||||
|
||||
/**
|
||||
* 审批人设置枚举
|
||||
*/
|
||||
@Getter
|
||||
public enum CandidateTypeEnum {
|
||||
USER(0, "按用户设置审批人"),
|
||||
ROLE(1, "按角色设置审批人"),
|
||||
STARTER_LEADER(2, "按发起人部门领导设置审批人");
|
||||
|
||||
|
||||
private int type;
|
||||
private String name;
|
||||
|
||||
CandidateTypeEnum(int type, String name) {
|
||||
this.type = type;
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public static CandidateTypeEnum ofType(int type) {
|
||||
if (type == USER.getType()) {
|
||||
return USER;
|
||||
} else if (type == ROLE.getType()) {
|
||||
return ROLE;
|
||||
} else if (type == STARTER_LEADER.getType()) {
|
||||
return STARTER_LEADER;
|
||||
} else {
|
||||
throw new ResponseException("不支持的类型【" + type + "】");
|
||||
}
|
||||
}
|
||||
}
|
|
@ -76,7 +76,7 @@ public class ActTaskDefController extends BaseController {
|
|||
|
||||
|
||||
/**
|
||||
* 完成某个任务
|
||||
* 管理员完成某个任务
|
||||
* 审批通过或者驳回
|
||||
*
|
||||
* @return
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
package cn.palmte.work.controller.backend;
|
||||
|
||||
import cn.palmte.work.config.activiti.ActApproveTypeEnum;
|
||||
import cn.palmte.work.config.activiti.ActProjectTypeEnum;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
|
||||
|
@ -446,15 +448,14 @@ public class ProcessController {
|
|||
@PostMapping("/audit")
|
||||
public void audit(@RequestBody @Valid AuditForm form) {
|
||||
ProjectProcess process = repository.findOne(form.processId);
|
||||
// 2-通过 3-不通过
|
||||
int approveType = form.processStatus == ProcessStatus.audit_passed ? 2 :
|
||||
form.processStatus == ProcessStatus.audit_not_passed ? 3 : -1;
|
||||
ActApproveTypeEnum approveType = form.processStatus == ProcessStatus.audit_passed ? ActApproveTypeEnum.APPROVAL_PASSED :
|
||||
ActApproveTypeEnum.APPROVAL_UN_PASS;
|
||||
switch (process.getProcessType()) {
|
||||
case business_procurement:
|
||||
projectInstanceService.completeBusinessPurchaseTask(process.getId(), approveType, form.auditOpinion);
|
||||
projectInstanceService.completeTaskByProjectId(process.getId(), ActProjectTypeEnum.BUSINESS_PURCHASE, approveType, form.auditOpinion);
|
||||
break;
|
||||
case sale_contract:
|
||||
projectInstanceService.completeSaleContractTask(process.getId(), approveType, form.auditOpinion);
|
||||
projectInstanceService.completeTaskByProjectId(process.getId(), ActProjectTypeEnum.SALE_CONTRACT, approveType, form.auditOpinion);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
package cn.palmte.work.model;
|
||||
|
||||
import cn.palmte.work.bean.StatusEnum;
|
||||
import cn.palmte.work.config.activiti.ActConstant;
|
||||
import cn.palmte.work.config.activiti.ActProcessKeyEnum;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.persistence.*;
|
||||
|
@ -15,6 +14,7 @@ import java.util.Date;
|
|||
@Table(name = "project_task_record")
|
||||
public class ProjectTaskRecord {
|
||||
|
||||
//状态 1-提交审批 2-审批通过 3-审批不通过 4-管理员退回 5-指定承接人
|
||||
public static final int STATUS_ROLLBACK = 4;//管理员退回
|
||||
public static final int STATUS_RE_ASSIGNEE = 5; //指定承接人
|
||||
|
||||
|
@ -113,28 +113,10 @@ public class ProjectTaskRecord {
|
|||
@Transient
|
||||
private String procDefKey= "";
|
||||
|
||||
public StatusEnum getStatusByProDefId() {
|
||||
if (procDefId.startsWith(ActConstant.PROCESS_DEFKEY_BUDGET)) {
|
||||
return StatusEnum.BUDGET_ACCOUNTS;
|
||||
}else if (procDefId.startsWith(ActConstant.PROCESS_DEFKEY_SETTLE)) {
|
||||
return StatusEnum.SETTLE_ACCOUNTS;
|
||||
}else if (procDefId.startsWith(ActConstant.PROCESS_DEFKEY_FINAL)) {
|
||||
return StatusEnum.FINAL_ACCOUNTS;
|
||||
}else{
|
||||
return StatusEnum.ESTIMATE_ACCOUNTS;
|
||||
}
|
||||
}
|
||||
|
||||
public String getProcDefName() {
|
||||
if (procDefId.startsWith(ActConstant.PROCESS_DEFKEY_BUDGET)) {
|
||||
return "预算审批流程";
|
||||
}else if (procDefId.startsWith(ActConstant.PROCESS_DEFKEY_SETTLE)) {
|
||||
return "结算审批流程";
|
||||
}else if (procDefId.startsWith(ActConstant.PROCESS_DEFKEY_FINAL)) {
|
||||
return "决算审批流程";
|
||||
}else{
|
||||
return "概算审批流程";
|
||||
}
|
||||
ActProcessKeyEnum keyEnum = ActProcessKeyEnum.ofProcDefId(procDefId);
|
||||
return keyEnum.getName();
|
||||
}
|
||||
|
||||
public void setProcDefName(String procDefName) {
|
||||
|
@ -142,15 +124,8 @@ public class ProjectTaskRecord {
|
|||
}
|
||||
|
||||
public String getProcDefKey() {
|
||||
if (procDefId.startsWith(ActConstant.PROCESS_DEFKEY_BUDGET)) {
|
||||
return ActConstant.PROCESS_DEFKEY_BUDGET;
|
||||
}else if (procDefId.startsWith(ActConstant.PROCESS_DEFKEY_SETTLE)) {
|
||||
return ActConstant.PROCESS_DEFKEY_SETTLE;
|
||||
}else if (procDefId.startsWith(ActConstant.PROCESS_DEFKEY_FINAL)) {
|
||||
return ActConstant.PROCESS_DEFKEY_FINAL;
|
||||
}else{
|
||||
return ActConstant.PROCESS_DEFKEY_ESTIMATE;
|
||||
}
|
||||
ActProcessKeyEnum keyEnum = ActProcessKeyEnum.ofProcDefId(procDefId);
|
||||
return keyEnum.getKey();
|
||||
}
|
||||
|
||||
public void setProcDefKey(String procDefKey) {
|
||||
|
|
|
@ -2,6 +2,7 @@ package cn.palmte.work.service;
|
|||
|
||||
|
||||
import cn.palmte.work.config.activiti.ActConstant;
|
||||
import cn.palmte.work.config.activiti.ActTaskIndexEnum;
|
||||
import cn.palmte.work.model.ActTaskDef;
|
||||
import cn.palmte.work.model.Admin;
|
||||
import cn.palmte.work.model.AdminRepository;
|
||||
|
@ -101,7 +102,7 @@ public class ActListenerService {
|
|||
ActTaskDef actTaskDef = actTaskDefService.findFirstByProcDefIdAndTaskKey(procDefId, taskDefKey);
|
||||
//找到当前有效的用户
|
||||
List<Integer> enableUsers = currentEnableUsers(candidateUsers);
|
||||
boolean isFirstUserTask = actTaskDef != null && actTaskDef.getTaskIndex() != ActConstant.TASK_INDEX_FIRST_USER_TASK;
|
||||
boolean isFirstUserTask = actTaskDef != null && actTaskDef.getTaskIndex() != ActTaskIndexEnum.FIRST_USER_TASK.getIndex();
|
||||
|
||||
if (actUtil.isFourcalProcess(procDefId)) {
|
||||
int adminId = 0;//默认审批人设置为空
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package cn.palmte.work.service;
|
||||
|
||||
import cn.palmte.work.config.activiti.ActConstant;
|
||||
import cn.palmte.work.config.activiti.ActTaskIndexEnum;
|
||||
import cn.palmte.work.model.ActTaskDef;
|
||||
import cn.palmte.work.model.ActTaskDefRepository;
|
||||
import cn.palmte.work.pojo.ActModel;
|
||||
|
@ -147,7 +148,7 @@ public class ActModelService {
|
|||
setTaskListener(userTaskElement);
|
||||
|
||||
if (i == 1) {//画流程图时,要保证第一个用户任务一定要先画
|
||||
taskDef.setTaskIndex(ActConstant.TASK_INDEX_FIRST_USER_TASK);
|
||||
taskDef.setTaskIndex(ActTaskIndexEnum.FIRST_USER_TASK.getIndex());
|
||||
first = taskDef;
|
||||
}
|
||||
|
||||
|
|
|
@ -3,6 +3,7 @@ package cn.palmte.work.service;
|
|||
|
||||
import cn.palmte.work.bean.ApproveStatusEnum;
|
||||
import cn.palmte.work.config.activiti.ActConstant;
|
||||
import cn.palmte.work.config.activiti.ActTaskIndexEnum;
|
||||
import cn.palmte.work.model.ActTaskDefRepository;
|
||||
import cn.palmte.work.model.ProjectTaskRecord;
|
||||
import cn.palmte.work.pojo.ActProcIns;
|
||||
|
@ -105,7 +106,7 @@ public class ActProcInsService {
|
|||
taskService.complete(taskId);
|
||||
|
||||
projectTaskRecordService.saveTaskRecord(Integer.parseInt(instance.getBusinessKey()),
|
||||
task, ApproveStatusEnum.APPROVAL_PENDING.getApproveStatus(), ActConstant.TASK_INDEX_FIRST_USER_TASK, comment);
|
||||
task, ApproveStatusEnum.APPROVAL_PENDING.getApproveStatus(), ActTaskIndexEnum.FIRST_USER_TASK.getIndex(), comment);
|
||||
|
||||
return instance.getId();
|
||||
}
|
||||
|
|
|
@ -1,8 +1,7 @@
|
|||
package cn.palmte.work.service;
|
||||
|
||||
import cn.palmte.work.bean.ApproveStatusEnum;
|
||||
import cn.palmte.work.bean.ResponseMsg;
|
||||
import cn.palmte.work.config.activiti.ActConstant;
|
||||
import cn.palmte.work.config.activiti.*;
|
||||
|
||||
import cn.palmte.work.model.*;
|
||||
import cn.palmte.work.pojo.ActHisTask;
|
||||
|
@ -48,7 +47,7 @@ public class ActTaskDefService {
|
|||
|
||||
|
||||
/**
|
||||
* 审批任务
|
||||
* 管理员完成某个任务
|
||||
*
|
||||
* @param json
|
||||
*/
|
||||
|
@ -58,10 +57,10 @@ public class ActTaskDefService {
|
|||
String message = json.getString("message");
|
||||
int type = json.getInteger("type");
|
||||
|
||||
completeTask(taskId, procInsId, message, type, "");
|
||||
completeTask(taskId, procInsId, message, ActApproveTypeEnum.ofType(type), "");
|
||||
}
|
||||
|
||||
private void completeTask(String taskId, String procInsId, String message, int type, String fileUrl) {
|
||||
private void completeTask(String taskId, String procInsId, String message, ActApproveTypeEnum approveEnum, String fileUrl) {
|
||||
String userId = InterfaceUtil.getAdminId() + "";
|
||||
Authentication.setAuthenticatedUserId(userId);
|
||||
taskService.addComment(taskId, procInsId, message);
|
||||
|
@ -72,13 +71,13 @@ public class ActTaskDefService {
|
|||
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(procInsId).singleResult();
|
||||
taskService.setAssignee(taskId, userId);
|
||||
if (ActConstant.TASK_TYPE_SINGE == actTaskDef.getTaskType()) {
|
||||
handleSinge(processInstance, taskId, type, actTaskDef);
|
||||
handleSinge(processInstance, taskId, approveEnum, actTaskDef);
|
||||
}
|
||||
|
||||
|
||||
//保存审批记录
|
||||
projectTaskRecordService.saveTaskRecordWithFileUrl(Integer.parseInt(processInstance.getBusinessKey()),
|
||||
currentTask, type, actTaskDef.getTaskIndex(), message, fileUrl);
|
||||
currentTask, approveEnum.getType(), actTaskDef.getTaskIndex(), message, fileUrl);
|
||||
}
|
||||
|
||||
|
||||
|
@ -86,13 +85,13 @@ public class ActTaskDefService {
|
|||
* 通过流程实列id完成任务
|
||||
*
|
||||
* @param procInsId
|
||||
* @param type
|
||||
* @param approveEnum
|
||||
* @param comment
|
||||
*/
|
||||
public void completeTaskByProcInsId(String procInsId, int type, String comment) {
|
||||
public void completeTaskByProcInsId(String procInsId, ActApproveTypeEnum approveEnum, String comment) {
|
||||
List<Task> taskList = taskService.createTaskQuery().processInstanceId(procInsId).list();
|
||||
for (Task task : taskList) {
|
||||
completeTask(task.getId(), procInsId, comment, type, "");
|
||||
completeTask(task.getId(), procInsId, comment, approveEnum, "");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -103,7 +102,7 @@ public class ActTaskDefService {
|
|||
*/
|
||||
public ResponseMsg skipTaskByProcInsId(String procInsId, String fileUrl, String comment) {
|
||||
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(procInsId).singleResult();
|
||||
if (!ActConstant.PROCESS_DEFKEY_BUDGET.equals(processInstance.getProcessDefinitionKey())) {
|
||||
if (!ActProcessKeyEnum.BUDGET.getKey().equals(processInstance.getProcessDefinitionKey())) {
|
||||
return ResponseMsg.buildFailedMsg("只有预算审批流程才能执行会签");
|
||||
}
|
||||
|
||||
|
@ -112,12 +111,12 @@ public class ActTaskDefService {
|
|||
if ("执行董事".equals(task.getName())) {
|
||||
return ResponseMsg.buildFailedMsg("当前状态不能用会签功能,请使用审批功能。");
|
||||
}
|
||||
completeTask(task.getId(), procInsId, comment, ApproveStatusEnum.APPROVAL_PASSED.getApproveStatus(), fileUrl);
|
||||
completeTask(task.getId(), procInsId, comment, ActApproveTypeEnum.APPROVAL_PASSED, fileUrl);
|
||||
|
||||
//非执行董事节点自动跳过
|
||||
task = taskService.createTaskQuery().processInstanceId(procInsId).singleResult();
|
||||
while (!"执行董事".equals(task.getName())) {
|
||||
completeSkipTask(task, processInstance, "会签,任务自动审批通过", ApproveStatusEnum.APPROVAL_PASSED.getApproveStatus());
|
||||
completeSkipTask(task, processInstance, "会签,任务自动审批通过");
|
||||
task = taskService.createTaskQuery().processInstanceId(procInsId).singleResult();
|
||||
}
|
||||
|
||||
|
@ -135,8 +134,7 @@ public class ActTaskDefService {
|
|||
while (!skipToTaskName.equals(task.getName())) {
|
||||
logger.info("skipTaskByProcInsIdAndTaskName completeSkipTask:{}", task.getName());
|
||||
|
||||
completeSkipTask(task, processInstance, "任务由系统自动审批通过",
|
||||
ApproveStatusEnum.APPROVAL_PASSED.getApproveStatus());
|
||||
completeSkipTask(task, processInstance, "任务由系统自动审批通过");
|
||||
|
||||
task = taskService.createTaskQuery().processInstanceId(procInsId).singleResult();
|
||||
logger.info("skipTaskByProcInsIdAndTaskName currentTaskName:{}, skipToTaskName:{}", task.getName(), skipToTaskName);
|
||||
|
@ -145,11 +143,11 @@ public class ActTaskDefService {
|
|||
}
|
||||
|
||||
|
||||
private void completeSkipTask(Task task, ProcessInstance processInstance, String message, int type) {
|
||||
private void completeSkipTask(Task task, ProcessInstance processInstance, String message) {
|
||||
String taskId = task.getId();
|
||||
ActTaskDef actTaskDef = findFirstByProcDefIdAndTaskKey(task.getProcessDefinitionId(), task.getTaskDefinitionKey());
|
||||
|
||||
if (actTaskDef.getTaskIndex() != ActConstant.TASK_INDEX_FIRST_USER_TASK) {
|
||||
if (actTaskDef.getTaskIndex() != ActTaskIndexEnum.FIRST_USER_TASK.getIndex()) {
|
||||
//不是发起节点 增加comment
|
||||
Authentication.setAuthenticatedUserId("-1");
|
||||
taskService.addComment(taskId, processInstance.getProcessInstanceId(), message);
|
||||
|
@ -158,7 +156,7 @@ public class ActTaskDefService {
|
|||
taskService.setAssignee(taskId, "-1");
|
||||
|
||||
if (ActConstant.TASK_TYPE_SINGE == actTaskDef.getTaskType()) {
|
||||
handleSinge(processInstance, taskId, type, actTaskDef);
|
||||
handleSinge(processInstance, taskId, ActApproveTypeEnum.APPROVAL_PASSED, actTaskDef);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -167,12 +165,12 @@ public class ActTaskDefService {
|
|||
*
|
||||
* @param taskId
|
||||
* @param processInstance
|
||||
* @param type
|
||||
* @param approveEnum
|
||||
* @param actTaskDef
|
||||
*/
|
||||
private void handleSinge(ProcessInstance processInstance, String taskId, int type, ActTaskDef actTaskDef) {
|
||||
private void handleSinge(ProcessInstance processInstance, String taskId, ActApproveTypeEnum approveEnum, ActTaskDef actTaskDef) {
|
||||
String procDefKey = actTaskDef.getProcDefKey();
|
||||
if (ApproveStatusEnum.APPROVAL_PASSED.getApproveStatus() == type) {
|
||||
if (ActApproveTypeEnum.APPROVAL_PASSED == approveEnum) {
|
||||
//审批通过
|
||||
taskService.complete(taskId);
|
||||
|
||||
|
@ -180,7 +178,7 @@ public class ActTaskDefService {
|
|||
//四算项目 最后一个任务完成后 更新项目状态为审批通过 其他项目通过监听器更新
|
||||
updateProjectPassed(processInstance, actTaskDef, procDefKey);
|
||||
}
|
||||
} else if (ApproveStatusEnum.APPROVAL_UNPASS.getApproveStatus() == type) {
|
||||
} else if (ActApproveTypeEnum.APPROVAL_UN_PASS == approveEnum) {
|
||||
//驳回
|
||||
String rollbackTaskKey = actTaskDef.getRollbackTaskKey();
|
||||
actUtil.jumpToTargetTask(taskId, rollbackTaskKey);
|
||||
|
@ -188,7 +186,7 @@ public class ActTaskDefService {
|
|||
//驳回后 更新项目状态为审批不通过
|
||||
int projectId = Integer.parseInt(processInstance.getBusinessKey());
|
||||
if (actUtil.isFourcalProcess(processInstance.getProcessDefinitionId())) {
|
||||
projectInstanceService.updateApproveStatus(projectId, procDefKey, ApproveStatusEnum.APPROVAL_UNPASS);
|
||||
projectInstanceService.updateApproveStatus(projectId, procDefKey, ActApproveTypeEnum.APPROVAL_UN_PASS);
|
||||
} else if (actUtil.isNewProcess(processInstance.getProcessDefinitionId())) {
|
||||
//todo updateNewProcess 更新流程状态为不通过
|
||||
}
|
||||
|
@ -206,17 +204,17 @@ public class ActTaskDefService {
|
|||
*/
|
||||
private void updateProjectPassed(ProcessInstance processInstance, ActTaskDef actTaskDef, String procDefKey) {
|
||||
int projectId = Integer.parseInt(processInstance.getBusinessKey());
|
||||
if (ActConstant.PROCESS_DEFKEY_SETTLE.equals(procDefKey)) {
|
||||
if (ActProcessKeyEnum.SETTLE.getKey().equals(procDefKey)) {
|
||||
//结算流程 财务总监审批完流程结束
|
||||
if ("财务总监".equals(actTaskDef.getTaskName())) {
|
||||
logger.info("updateProjectPassed1 projectId:{}, proDefKey:{}", projectId, procDefKey);
|
||||
projectInstanceService.updateApproveStatus(projectId, procDefKey, ApproveStatusEnum.APPROVAL_PASSED);
|
||||
projectInstanceService.updateApproveStatus(projectId, procDefKey, ActApproveTypeEnum.APPROVAL_PASSED);
|
||||
}
|
||||
} else {
|
||||
//其余流程 执行董事审批完流程结束
|
||||
if ("执行董事".equals(actTaskDef.getTaskName())) {
|
||||
logger.info("updateProjectPassed2 projectId:{}, proDefKey:{}", projectId, procDefKey);
|
||||
projectInstanceService.updateApproveStatus(projectId, procDefKey, ApproveStatusEnum.APPROVAL_PASSED);
|
||||
projectInstanceService.updateApproveStatus(projectId, procDefKey, ActApproveTypeEnum.APPROVAL_PASSED);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -320,7 +318,7 @@ public class ActTaskDefService {
|
|||
*/
|
||||
public List<String> findCandidateUsers(String procDefId, String procInsId, String taskDefKey) {
|
||||
ActTaskDef taskDef = findFirstByProcDefIdAndTaskKey(procDefId, taskDefKey);
|
||||
if (taskDef.getTaskIndex() == ActConstant.TASK_INDEX_FIRST_USER_TASK) {
|
||||
if (taskDef.getTaskIndex() == ActTaskIndexEnum.FIRST_USER_TASK.getIndex()) {
|
||||
//任务驳回到发起节点 审批人设置为发起人
|
||||
String startUserId = actUtil.getStartUserId(procInsId);
|
||||
List<String> res = new ArrayList<>(1);
|
||||
|
@ -369,7 +367,7 @@ public class ActTaskDefService {
|
|||
|
||||
List<String> userIdList = new ArrayList<>();
|
||||
for (String typeStr : types) {
|
||||
if (ActConstant.CANDIDATE_TYPE_START_USER_LEADER == Integer.parseInt(typeStr)) {
|
||||
if (CandidateTypeEnum.STARTER_LEADER.getType() == Integer.parseInt(typeStr)) {
|
||||
//查找发起人部门主管
|
||||
String startUserId = actUtil.getStartUserId(procInsId);
|
||||
int leaderId = accountService.getOneLevelDeptManagerId(Integer.parseInt(startUserId));
|
||||
|
@ -450,7 +448,8 @@ public class ActTaskDefService {
|
|||
taskService.setAssignee(currentTask.getId(), targetAdmin.getId() + "");
|
||||
|
||||
//保存一条指定承接人记录
|
||||
projectTaskRecordService.saveTaskRecord(projectId, currentTask, ProjectTaskRecord.STATUS_RE_ASSIGNEE, ActConstant.TASK_INDEX_OTHER,
|
||||
projectTaskRecordService.saveTaskRecord(projectId, currentTask,
|
||||
ProjectTaskRecord.STATUS_RE_ASSIGNEE, ActTaskIndexEnum.COMMON.getIndex(),
|
||||
"指定承接人【" + targetAdmin.getRealName() + "]");
|
||||
} else {
|
||||
logger.error("setTaskAssignAndSaveRecordError task is null, projectId:{}", projectId);
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
package cn.palmte.work.service;
|
||||
|
||||
import cn.palmte.work.bean.*;
|
||||
import cn.palmte.work.config.activiti.ActProcessKeyEnum;
|
||||
import cn.palmte.work.model.*;
|
||||
import cn.palmte.work.utils.DateKit;
|
||||
import cn.palmte.work.utils.StrKit;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
|
@ -876,7 +876,7 @@ public class ProjectBudgetService {
|
|||
}
|
||||
|
||||
public void budgetApprove(Integer approveStatusBudget, Project projectInDb, Admin admin) throws Exception {
|
||||
projectInstanceService.startBudgetProcessInstance(projectInDb, admin);
|
||||
projectInstanceService.startFourcalProcess(projectInDb, ActProcessKeyEnum.BUDGET);
|
||||
// int type = projectInDb.getType();
|
||||
// List<SysUserRole> userIds = new ArrayList<>();
|
||||
// if (type == 1) {
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package cn.palmte.work.service;
|
||||
|
||||
import cn.palmte.work.bean.*;
|
||||
import cn.palmte.work.config.activiti.ActProcessKeyEnum;
|
||||
import cn.palmte.work.model.*;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
@ -355,7 +356,7 @@ public class ProjectEstimateService {
|
|||
}
|
||||
|
||||
public void estimateApprove(Integer approveStatusEstimate, Project projectInDb, Admin admin) throws Exception {
|
||||
projectInstanceService.startEstimateProcessInstance(projectInDb, admin);
|
||||
projectInstanceService.startFourcalProcess(projectInDb, ActProcessKeyEnum.ESTIMATE);
|
||||
int type = projectInDb.getType();
|
||||
List<SysUserRole> userIds = new ArrayList<>();
|
||||
if (type == 1) {
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
package cn.palmte.work.service;
|
||||
|
||||
import cn.palmte.work.bean.*;
|
||||
import cn.palmte.work.config.activiti.ActProcessKeyEnum;
|
||||
import cn.palmte.work.model.*;
|
||||
import cn.palmte.work.utils.InterfaceUtil;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
@ -69,7 +69,7 @@ public class ProjectFinalSevice {
|
|||
//更新项目和审批状态
|
||||
projectService.updateStatusAndApproveStatus(project.getId(), StatusEnum.FINAL_ACCOUNTS, ApproveStatusEnum.APPROVAL_PENDING, project.getOtherName());
|
||||
//发起流程
|
||||
projectInstanceService.startFinalProcessInstance(project.getId(), InterfaceUtil.getAdmin());
|
||||
projectInstanceService.startFourcalProcess(project, ActProcessKeyEnum.FINAL);
|
||||
}
|
||||
|
||||
public void clearAndSave(Project project, FinalBean finalBean) {
|
||||
|
|
|
@ -1,7 +1,11 @@
|
|||
package cn.palmte.work.service;
|
||||
|
||||
import cn.palmte.work.bean.ApproveStatusEnum;
|
||||
|
||||
import cn.palmte.work.config.activiti.ActApproveTypeEnum;
|
||||
import cn.palmte.work.config.activiti.ActConstant;
|
||||
import cn.palmte.work.config.activiti.ActProcessKeyEnum;
|
||||
import cn.palmte.work.config.activiti.ActProjectTypeEnum;
|
||||
import cn.palmte.work.exception.ResponseException;
|
||||
import cn.palmte.work.model.*;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
@ -30,151 +34,98 @@ public class ProjectInstanceService {
|
|||
|
||||
|
||||
/**
|
||||
* 开启一个概算流程实例
|
||||
*/
|
||||
public void startEstimateProcessInstance(Project project, Admin admin) throws Exception {
|
||||
startProcess(project, admin, ActConstant.PROCESS_DEFKEY_ESTIMATE);
|
||||
}
|
||||
|
||||
/**
|
||||
* 开启一个预算流程实例
|
||||
*/
|
||||
public void startBudgetProcessInstance(Project project, Admin admin) throws Exception {
|
||||
startProcess(project, admin, ActConstant.PROCESS_DEFKEY_BUDGET);
|
||||
}
|
||||
|
||||
/**
|
||||
* 开启一个结算流程实例
|
||||
*/
|
||||
public void startSettleProcessInstance(Project project, Admin admin) throws Exception {
|
||||
startProcess(project, admin, ActConstant.PROCESS_DEFKEY_SETTLE);
|
||||
}
|
||||
/**
|
||||
* 开启一个决算流程实例
|
||||
*/
|
||||
public void startFinalProcessInstance(int projectId, Admin admin) throws Exception {
|
||||
Project project = projectRepository.findOne(projectId);
|
||||
startProcess(project, admin, ActConstant.PROCESS_DEFKEY_FINAL);
|
||||
}
|
||||
|
||||
/**
|
||||
* 发起销售合同流程实例
|
||||
* 通过项目id发起流程实例
|
||||
*
|
||||
* @param projectId 项目唯一id
|
||||
* @param map 流程变量
|
||||
* @param projectId
|
||||
* @param projectEnum
|
||||
* @param map
|
||||
* @throws Exception
|
||||
*/
|
||||
public void startSaleContractProcess(int projectId, Map<String, Object> map) throws Exception {
|
||||
String processDefkey = ActConstant.PROCESS_DEFKEY_SALE_CONTRACT;
|
||||
public void startProcessByProjectId(int projectId, ActProjectTypeEnum projectEnum, Map<String, Object> map) throws Exception {
|
||||
ActProcessKeyEnum keyEnum;
|
||||
if (projectEnum == ActProjectTypeEnum.SALE_CONTRACT) {
|
||||
keyEnum = ActProcessKeyEnum.SALE_CONTRACT;
|
||||
} else if (projectEnum == ActProjectTypeEnum.BUSINESS_PURCHASE) {
|
||||
keyEnum = ActProcessKeyEnum.BUSINESS_PURCHASE;
|
||||
}else{
|
||||
throw new ResponseException("不支持的项目类型");
|
||||
}
|
||||
String processDefkey = keyEnum.getKey();
|
||||
String businessKey = String.valueOf(projectId);
|
||||
logger.info("startSaleContractProcess processDefkey:{}, businessKey:{}", processDefkey, businessKey);
|
||||
String processInstanceId = actProcInsService.startProcessInstance(processDefkey, businessKey, map);
|
||||
saveRelation(projectId, processDefkey, processInstanceId);
|
||||
|
||||
saveProjectInstance(projectId, processInstanceId, keyEnum, projectEnum);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 发起业务采购流程实例
|
||||
* 通过项目id和项目类型完成审批任务
|
||||
*
|
||||
* @param projectId 项目唯一id
|
||||
* @param map 流程变量
|
||||
* @throws Exception
|
||||
*/
|
||||
public void startBusinessPurchaseProcess(int projectId, Map<String, Object> map) throws Exception {
|
||||
String processDefkey = ActConstant.PROCESS_DEFKEY_BUSINESS_PURCHASE;
|
||||
String businessKey = String.valueOf(projectId);
|
||||
logger.info("startBusinessPurchaseProcess processDefkey:{}, businessKey:{}", processDefkey, businessKey);
|
||||
String processInstanceId = actProcInsService.startProcessInstance(processDefkey, businessKey, map);
|
||||
|
||||
//保存流程实例id与项目的关联关系
|
||||
saveRelation(projectId, processDefkey, processInstanceId);
|
||||
}
|
||||
|
||||
/**
|
||||
* 销售合同流程 审批(通过或者不通过)
|
||||
*
|
||||
* @param projectId 项目唯一id
|
||||
* @param approveType 2-通过 3-不通过
|
||||
* @param projectEnum 项目类型
|
||||
* @param approveEnum 审批状态
|
||||
* @param message 审批意见
|
||||
* @return
|
||||
*/
|
||||
public boolean completeSaleContractTask(int projectId, int approveType, String message) {
|
||||
ProjectInstanceRelation projectInstance = projectInstanceRelationRepository.findByProjectIdAndProjectType(projectId, ActConstant.PROJECT_TYPE_SALE_CONTRACT);
|
||||
public boolean completeTaskByProjectId(int projectId, ActProjectTypeEnum projectEnum,
|
||||
ActApproveTypeEnum approveEnum, String message) {
|
||||
ProjectInstanceRelation projectInstance = projectInstanceRelationRepository.findByProjectIdAndProjectType(
|
||||
projectId, projectEnum.getType());
|
||||
if (projectInstance == null) {
|
||||
return false;
|
||||
}
|
||||
actTaskDefService.completeTaskByProcInsId(projectInstance.getProcessInsId(), approveType, message);
|
||||
|
||||
actTaskDefService.completeTaskByProcInsId(projectInstance.getProcessInsId(), approveEnum, message);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 业务采购流程 审批(通过或者不通过)
|
||||
*
|
||||
* @param projectId 项目唯一id
|
||||
* @param approveType 2-通过 3-不通过
|
||||
* @param message 审批意见
|
||||
* @return
|
||||
*/
|
||||
public boolean completeBusinessPurchaseTask(int projectId, int approveType, String message) {
|
||||
ProjectInstanceRelation projectInstance = projectInstanceRelationRepository.findByProjectIdAndProjectType(projectId, ActConstant.PROJECT_TYPE_SALE_CONTRACT);
|
||||
if (projectInstance == null) {
|
||||
return false;
|
||||
}
|
||||
actTaskDefService.completeTaskByProcInsId(projectInstance.getProcessInsId(), approveType, message);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
private void saveRelation(int projectId, String processDefkey, String processInstanceId) {
|
||||
private void saveProjectInstance(int projectId, String processInstanceId,
|
||||
ActProcessKeyEnum keyEnum, ActProjectTypeEnum projectTypeEnum) {
|
||||
//保存流程实例id与项目的关联关系
|
||||
ProjectInstanceRelation relation = new ProjectInstanceRelation();
|
||||
relation.setProjectId(projectId);
|
||||
relation.setProjectType(ActConstant.PROJECT_TYPE_SALE_CONTRACT);
|
||||
relation.setProcessType(processDefkey);
|
||||
relation.setProjectType(projectTypeEnum.getType());
|
||||
relation.setProcessType(keyEnum.getKey());
|
||||
relation.setProcessInsId(processInstanceId);
|
||||
relation.setCreateTime(new Date());
|
||||
projectInstanceRelationRepository.saveAndFlush(relation);
|
||||
}
|
||||
|
||||
private void startProcess(Project project, Admin admin, String processDefkey) throws Exception {
|
||||
/**
|
||||
* 发起四算项目流程
|
||||
*
|
||||
* @param project
|
||||
* @param keyEnum
|
||||
* @throws Exception
|
||||
*/
|
||||
public void startFourcalProcess(Project project, ActProcessKeyEnum keyEnum) throws Exception {
|
||||
HashMap<String, Object> variables = new HashMap<>();
|
||||
variables.put(ActConstant.KEY_PROJECT_TYPE, project.getType());
|
||||
String businessKey = String.valueOf(project.getId());
|
||||
logger.info("startProcess processDefkey:{}, businessKey:{}", processDefkey, businessKey);
|
||||
String processInstanceId = actProcInsService.startProcessInstance(processDefkey, businessKey, variables);
|
||||
logger.info("startProcess processDefkey:{}, businessKey:{}", keyEnum.getKey(), businessKey);
|
||||
String processInstanceId = actProcInsService.startProcessInstance(keyEnum.getKey(), businessKey, variables);
|
||||
|
||||
saveProjectInstance(project, processDefkey, processInstanceId);
|
||||
saveProjectInstance(project.getId(), processInstanceId, keyEnum, ActProjectTypeEnum.FOURCAL);
|
||||
}
|
||||
|
||||
|
||||
public String startProcessBySystem(Project project, String processDefkey, ProjectTaskRecord taskRecord) throws Exception {
|
||||
public String startProcessBySystem(Project project, ActProcessKeyEnum keyEnum, ProjectTaskRecord taskRecord) throws Exception {
|
||||
HashMap<String, Object> variables = new HashMap<>();
|
||||
variables.put(ActConstant.KEY_PROJECT_TYPE, project.getType());
|
||||
String businessKey = String.valueOf(project.getId());
|
||||
logger.info("startProcessBySystem processDefkey:{}, businessKey:{}", processDefkey, businessKey);
|
||||
logger.info("startProcessBySystem processDefkey:{}, businessKey:{}", keyEnum.getKey(), businessKey);
|
||||
|
||||
String processInstanceId = actProcInsService.startProcessInstanceBySystem(
|
||||
processDefkey, businessKey, variables, taskRecord);
|
||||
keyEnum.getKey(), businessKey, variables, taskRecord);
|
||||
|
||||
saveProjectInstance(project, processDefkey, processInstanceId);
|
||||
saveProjectInstance(project.getId(), processInstanceId, keyEnum, ActProjectTypeEnum.FOURCAL);
|
||||
return processInstanceId;
|
||||
}
|
||||
|
||||
private void saveProjectInstance(Project project, String processDefkey, String processInstanceId) {
|
||||
//保存流程实例id与项目的关联关系
|
||||
ProjectInstanceRelation relation = new ProjectInstanceRelation();
|
||||
relation.setProjectId(project.getId());
|
||||
relation.setProcessType(processDefkey);
|
||||
relation.setProcessInsId(processInstanceId);
|
||||
relation.setCreateTime(new Date());
|
||||
projectInstanceRelationRepository.saveAndFlush(relation);
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新审批人,用于在任务监听器中更新下个审批人
|
||||
*
|
||||
* @param projectId 项目id
|
||||
* @param adminId 审批人id
|
||||
*/
|
||||
|
@ -197,24 +148,21 @@ public class ProjectInstanceService {
|
|||
/**
|
||||
* 更新审批状态
|
||||
* @param processKey 审批类型
|
||||
* @see ActConstant#PROCESS_DEFKEY_ESTIMATE
|
||||
* @see ActConstant#PROCESS_DEFKEY_BUDGET
|
||||
* @see ActConstant#PROCESS_DEFKEY_SETTLE
|
||||
* @see ActConstant#PROCESS_DEFKEY_FINAL
|
||||
* @see ActProcessKeyEnum
|
||||
*/
|
||||
public void updateApproveStatus(int projectId, String processKey, ApproveStatusEnum approveStatusEnum){
|
||||
public void updateApproveStatus(int projectId, String processKey, ActApproveTypeEnum approveTypeEnum){
|
||||
Project project = projectRepository.findOne(projectId);
|
||||
if(ActConstant.PROCESS_DEFKEY_ESTIMATE.equals(processKey)){
|
||||
project.setApproveStatusEstimate(approveStatusEnum.getApproveStatus());
|
||||
}else if(ActConstant.PROCESS_DEFKEY_BUDGET.equals(processKey)){
|
||||
project.setApproveStatusBudget(approveStatusEnum.getApproveStatus());
|
||||
}else if(ActConstant.PROCESS_DEFKEY_SETTLE.equals(processKey)){
|
||||
project.setApproveStatusSettle(approveStatusEnum.getApproveStatus());
|
||||
}else if(ActConstant.PROCESS_DEFKEY_FINAL.equals(processKey)){
|
||||
project.setApproveStatusFinal(approveStatusEnum.getApproveStatus());
|
||||
if(ActProcessKeyEnum.ESTIMATE.getKey().equals(processKey)){
|
||||
project.setApproveStatusEstimate(approveTypeEnum.getType());
|
||||
}else if(ActProcessKeyEnum.BUDGET.getKey().equals(processKey)){
|
||||
project.setApproveStatusBudget(approveTypeEnum.getType());
|
||||
}else if(ActProcessKeyEnum.SETTLE.getKey().equals(processKey)){
|
||||
project.setApproveStatusSettle(approveTypeEnum.getType());
|
||||
}else if(ActProcessKeyEnum.FINAL.getKey().equals(processKey)){
|
||||
project.setApproveStatusFinal(approveTypeEnum.getType());
|
||||
}
|
||||
|
||||
if (approveStatusEnum.getApproveStatus() == ApproveStatusEnum.APPROVAL_PASSED.getApproveStatus()) {
|
||||
if (approveTypeEnum == ActApproveTypeEnum.APPROVAL_PASSED) {
|
||||
//审批通过设置审批人为空
|
||||
project.setApproveId(0);
|
||||
project.setApproveName("");
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package cn.palmte.work.service;
|
||||
|
||||
import cn.palmte.work.config.activiti.ActProjectTypeEnum;
|
||||
import org.springframework.jdbc.core.BatchPreparedStatementSetter;
|
||||
import org.springframework.jdbc.core.JdbcTemplate;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
@ -142,10 +143,10 @@ public class ProjectProcessService {
|
|||
variables.put("process", entity);
|
||||
switch (entity.getProcessType()) {
|
||||
case sale_contract:
|
||||
projectInstanceService.startSaleContractProcess(entity.getId(), variables);
|
||||
projectInstanceService.startProcessByProjectId(entity.getId(), ActProjectTypeEnum.SALE_CONTRACT, variables);
|
||||
break;
|
||||
case business_procurement:
|
||||
projectInstanceService.startBusinessPurchaseProcess(entity.getId(), variables);
|
||||
projectInstanceService.startProcessByProjectId(entity.getId(), ActProjectTypeEnum.BUSINESS_PURCHASE, variables);
|
||||
break;
|
||||
default:
|
||||
throw new UnsupportedOperationException("还不支持");
|
||||
|
|
|
@ -1,11 +1,12 @@
|
|||
package cn.palmte.work.service;
|
||||
|
||||
import cn.palmte.work.bean.*;
|
||||
import cn.palmte.work.config.activiti.ActApproveTypeEnum;
|
||||
import cn.palmte.work.config.activiti.ActProcessKeyEnum;
|
||||
import cn.palmte.work.model.*;
|
||||
import cn.palmte.work.utils.InterfaceUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import org.activiti.engine.task.Task;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
|
@ -536,8 +537,9 @@ public class ProjectService {
|
|||
}
|
||||
ProjectInstanceRelation projectInstanceRelation = relationList.get(0);
|
||||
JSONObject obj = JSON.parseObject(json);
|
||||
ActApproveTypeEnum approveTypeEnum = ActApproveTypeEnum.ofType(obj.getIntValue("type"));
|
||||
actTaskDefService.completeTaskByProcInsId(projectInstanceRelation.getProcessInsId(),
|
||||
obj.getIntValue("type"), obj.getString("message"));
|
||||
approveTypeEnum, obj.getString("message"));
|
||||
|
||||
return ResponseMsg.buildSuccessMsg("审核成功",approvetype);
|
||||
}
|
||||
|
@ -764,10 +766,10 @@ public class ProjectService {
|
|||
projectBudgetService.budgetApprove(approveStatusBudget, project, admin);
|
||||
project.setApproveStatusBudget(ApproveStatusEnum.APPROVAL_PENDING.getApproveStatus());
|
||||
} else if (project.getApproveStatusSettle() == ApproveStatusEnum.APPROVAL_UNCOMMIT.getApproveStatus()) {
|
||||
projectInstanceService.startSettleProcessInstance(project, InterfaceUtil.getAdmin());
|
||||
projectInstanceService.startFourcalProcess(project, ActProcessKeyEnum.SETTLE);
|
||||
project.setApproveStatusSettle(ApproveStatusEnum.APPROVAL_PENDING.getApproveStatus());
|
||||
} else if (project.getApproveStatusFinal() == ApproveStatusEnum.APPROVAL_UNCOMMIT.getApproveStatus()) {
|
||||
projectInstanceService.startFinalProcessInstance(project.getId(), InterfaceUtil.getAdmin());
|
||||
projectInstanceService.startFourcalProcess(project, ActProcessKeyEnum.FINAL);
|
||||
project.setApproveStatusFinal(ApproveStatusEnum.APPROVAL_PENDING.getApproveStatus());
|
||||
} else {
|
||||
return ;
|
||||
|
@ -860,7 +862,7 @@ public class ProjectService {
|
|||
|
||||
int projectId = one.getProjectId();
|
||||
int taskStatus = one.getTaskStatus();
|
||||
StatusEnum statusEnum = one.getStatusByProDefId();
|
||||
StatusEnum statusEnum = StatusEnum.parseByProcDefId(one.getProcDefId());
|
||||
String proDefKey = one.getProcDefKey();
|
||||
|
||||
//是否回退到发起节点
|
||||
|
@ -893,7 +895,8 @@ public class ProjectService {
|
|||
projectTaskRecordService.saveTaskRecordWithRollback(projectId, one, message, rollbackDesc);
|
||||
|
||||
//启动流程
|
||||
String processInstanceId = projectInstanceService.startProcessBySystem(project, proDefKey, one);
|
||||
ActProcessKeyEnum keyEnum = ActProcessKeyEnum.ofKey(proDefKey);
|
||||
String processInstanceId = projectInstanceService.startProcessBySystem(project, keyEnum, one);
|
||||
logger.info("rollbackTask startProcessBySystem : {}", processInstanceId);
|
||||
|
||||
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
package cn.palmte.work.service;
|
||||
|
||||
import cn.palmte.work.bean.*;
|
||||
import cn.palmte.work.config.activiti.ActProcessKeyEnum;
|
||||
import cn.palmte.work.model.*;
|
||||
import cn.palmte.work.utils.InterfaceUtil;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
|
@ -54,7 +54,7 @@ public class ProjectSettleService {
|
|||
projectService.updateStatusAndApproveStatus(project.getId(), StatusEnum.SETTLE_ACCOUNTS, ApproveStatusEnum.APPROVAL_PENDING, project.getOtherName());
|
||||
|
||||
//发起结算流程
|
||||
projectInstanceService.startSettleProcessInstance(project, InterfaceUtil.getAdmin());
|
||||
projectInstanceService.startFourcalProcess(project, ActProcessKeyEnum.SETTLE);
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
package cn.palmte.work.service;
|
||||
|
||||
import cn.palmte.work.bean.StatusEnum;
|
||||
import cn.palmte.work.config.activiti.ActConstant;
|
||||
import cn.palmte.work.config.activiti.ActProcessKeyEnum;
|
||||
import cn.palmte.work.config.activiti.ActProjectTypeEnum;
|
||||
import cn.palmte.work.config.activiti.ActTaskIndexEnum;
|
||||
import cn.palmte.work.model.Project;
|
||||
import cn.palmte.work.model.ProjectTaskRecord;
|
||||
import cn.palmte.work.model.ProjectTaskRecordRepository;
|
||||
|
@ -61,7 +63,7 @@ public class ProjectTaskRecordService {
|
|||
record.setTaskStatus(ProjectTaskRecord.STATUS_ROLLBACK);
|
||||
record.setAssigneeId(InterfaceUtil.getAdminId() + "");
|
||||
record.setAssigneeName(InterfaceUtil.getAdmin().getRealName());
|
||||
record.setTaskIndex(ActConstant.TASK_INDEX_OTHER);
|
||||
record.setTaskIndex(ActTaskIndexEnum.COMMON.getIndex());
|
||||
record.setCreateTime(new Date());
|
||||
record.setRollbackRecordId(oldRecord.getId());
|
||||
record.setRollbackDesc(rollbackDesc);
|
||||
|
@ -84,13 +86,13 @@ public class ProjectTaskRecordService {
|
|||
record.setProcDefId(procDefId);
|
||||
record.setProcInsId(task.getProcessInstanceId());
|
||||
|
||||
int projectType = ActConstant.PROJECT_TYPE_FOURCAL;
|
||||
if (procDefId.startsWith(ActConstant.PROCESS_DEFKEY_SALE_CONTRACT)) {
|
||||
projectType = ActConstant.PROJECT_TYPE_SALE_CONTRACT;
|
||||
} else if (procDefId.startsWith(ActConstant.PROCESS_DEFKEY_BUSINESS_PURCHASE)) {
|
||||
projectType = ActConstant.PROJECT_TYPE_BUSINESS_PURCHASE;
|
||||
ActProjectTypeEnum projectTypeEnum = ActProjectTypeEnum.FOURCAL;
|
||||
if (procDefId.startsWith(ActProcessKeyEnum.SALE_CONTRACT.getKey())) {
|
||||
projectTypeEnum = ActProjectTypeEnum.SALE_CONTRACT;
|
||||
} else if (procDefId.startsWith(ActProcessKeyEnum.BUSINESS_PURCHASE.getKey())) {
|
||||
projectTypeEnum = ActProjectTypeEnum.BUSINESS_PURCHASE;
|
||||
}
|
||||
record.setProjectType(projectType);
|
||||
record.setProjectType(projectTypeEnum.getType());
|
||||
record.setTaskDefKey(task.getTaskDefinitionKey());
|
||||
record.setTaskName(task.getName());
|
||||
record.setTaskComment(comment);
|
||||
|
@ -102,10 +104,26 @@ public class ProjectTaskRecordService {
|
|||
return record;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 根据项目id查询审批任务记录
|
||||
*
|
||||
* @param projectId
|
||||
* @param typeEnum
|
||||
* @return
|
||||
*/
|
||||
public List<ProjectTaskRecord> listV2(int projectId, ActProjectTypeEnum typeEnum) {
|
||||
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_type=?", typeEnum.getType());
|
||||
queryHelper.addOrderProperty("tr.create_time", true);
|
||||
return pagination.find(queryHelper.getSql(), ProjectTaskRecord.class);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 根据项目id查询审批任务记录 四算项目使用
|
||||
*
|
||||
* @param project
|
||||
* @return
|
||||
*/
|
||||
|
@ -113,6 +131,7 @@ public class ProjectTaskRecordService {
|
|||
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=?", project.getId());
|
||||
queryHelper.addCondition("tr.project_type=?", ActProjectTypeEnum.FOURCAL.getType());
|
||||
queryHelper.addOrderProperty("tr.create_time", true);
|
||||
List<ProjectTaskRecord> projectTaskRecords = pagination.find(queryHelper.getSql(), ProjectTaskRecord.class);
|
||||
|
||||
|
@ -121,7 +140,7 @@ public class ProjectTaskRecordService {
|
|||
//预算流程可能有多个 找到最新的一个预算流程 最新的预算流程才能退回
|
||||
String lastProcInsId = "";
|
||||
Optional<String> lastProcInsIdOp = projectTaskRecords.stream()
|
||||
.filter(r -> r.getProcDefId().startsWith(ActConstant.PROCESS_DEFKEY_BUDGET))
|
||||
.filter(r -> r.getProcDefId().startsWith(ActProcessKeyEnum.BUDGET.getKey()))
|
||||
.map(ProjectTaskRecord::getProcInsId).max(Comparator.naturalOrder());
|
||||
if (lastProcInsIdOp.isPresent()) {
|
||||
lastProcInsId = lastProcInsIdOp.get();
|
||||
|
@ -138,7 +157,7 @@ public class ProjectTaskRecordService {
|
|||
|
||||
|
||||
//只能往当前任务之前退回
|
||||
StatusEnum statusEnum = record.getStatusByProDefId();
|
||||
StatusEnum statusEnum = StatusEnum.parseByProcDefId(record.getProcDefId());
|
||||
if (statusEnum.getStatus() > projectStatus) {
|
||||
//大于当前状态 不能退回
|
||||
continue;
|
||||
|
@ -151,7 +170,7 @@ public class ProjectTaskRecordService {
|
|||
}
|
||||
}
|
||||
|
||||
if (!record.getProcDefId().startsWith(ActConstant.PROCESS_DEFKEY_BUDGET)) {
|
||||
if (!record.getProcDefId().startsWith(ActProcessKeyEnum.BUDGET.getKey())) {
|
||||
//非预算流程全部支持退回
|
||||
record.setCanRollback(true);
|
||||
} else {
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package cn.palmte.work.utils;
|
||||
|
||||
import cn.palmte.work.config.activiti.ActConstant;
|
||||
import cn.palmte.work.config.activiti.ActProcessKeyEnum;
|
||||
import cn.palmte.work.config.activiti.DeleteTaskCommand;
|
||||
import cn.palmte.work.config.activiti.JumpCommand;
|
||||
import cn.palmte.work.model.ProjectInstanceRelation;
|
||||
|
@ -54,15 +55,15 @@ public class ActUtil {
|
|||
|
||||
|
||||
public boolean isFourcalProcess(String procDefId) {
|
||||
return procDefId.startsWith(ActConstant.PROCESS_DEFKEY_ESTIMATE)
|
||||
|| procDefId.startsWith(ActConstant.PROCESS_DEFKEY_BUDGET)
|
||||
|| procDefId.startsWith(ActConstant.PROCESS_DEFKEY_SETTLE)
|
||||
|| procDefId.startsWith(ActConstant.PROCESS_DEFKEY_FINAL);
|
||||
return procDefId.startsWith(ActProcessKeyEnum.ESTIMATE.getKey())
|
||||
|| procDefId.startsWith(ActProcessKeyEnum.BUDGET.getKey())
|
||||
|| procDefId.startsWith(ActProcessKeyEnum.SETTLE.getKey())
|
||||
|| procDefId.startsWith(ActProcessKeyEnum.FINAL.getKey());
|
||||
}
|
||||
|
||||
public boolean isNewProcess(String procDefId) {
|
||||
return procDefId.startsWith(ActConstant.PROCESS_DEFKEY_SALE_CONTRACT)
|
||||
|| procDefId.startsWith(ActConstant.PROCESS_DEFKEY_BUSINESS_PURCHASE);
|
||||
return procDefId.startsWith(ActProcessKeyEnum.SALE_CONTRACT.getKey())
|
||||
|| procDefId.startsWith(ActProcessKeyEnum.BUSINESS_PURCHASE.getKey());
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -75,13 +76,13 @@ public class ActUtil {
|
|||
*/
|
||||
public boolean targetBigThanCurrent(String procDefId, String targetTaskName, String currentTaskName) {
|
||||
String taskNames = ActConstant.PROCESS_TASKS_ESTIMATE;
|
||||
if (procDefId.startsWith(ActConstant.PROCESS_DEFKEY_BUDGET)) {
|
||||
if (procDefId.startsWith(ActProcessKeyEnum.BUDGET.getKey())) {
|
||||
taskNames = ActConstant.PROCESS_TASKS_BUDGET;
|
||||
}
|
||||
if (procDefId.startsWith(ActConstant.PROCESS_DEFKEY_SETTLE)) {
|
||||
if (procDefId.startsWith(ActProcessKeyEnum.SETTLE.getKey())) {
|
||||
taskNames = ActConstant.PROCESS_TASKS_SETTLE;
|
||||
}
|
||||
if (procDefId.startsWith(ActConstant.PROCESS_DEFKEY_FINAL)) {
|
||||
if (procDefId.startsWith(ActProcessKeyEnum.FINAL.getKey())) {
|
||||
taskNames = ActConstant.PROCESS_TASKS_FINAL;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue