fourcal/src/main/java/cn/palmte/work/service/ProjectInstanceService.java

229 lines
9.0 KiB
Java
Raw Normal View History

2021-11-12 04:11:28 +00:00
package cn.palmte.work.service;
import cn.palmte.work.bean.ApproveStatusEnum;
2021-11-12 04:11:28 +00:00
import cn.palmte.work.config.activiti.ActConstant;
import cn.palmte.work.model.*;
2022-04-19 09:34:25 +00:00
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
2021-11-12 04:11:28 +00:00
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.HashMap;
2022-12-21 03:13:42 +00:00
import java.util.Map;
2021-11-12 04:11:28 +00:00
/**
* @author xiongshiyan at 2021/10/29 , contact me with email yanshixiong@126.com or phone 15208384257
*/
@Service
public class ProjectInstanceService {
2022-04-19 09:34:25 +00:00
private static final Logger logger = LoggerFactory.getLogger(ActProcInsService.class);
@Autowired
private ProjectRepository projectRepository;
@Autowired
private AdminService adminService;
2021-11-12 04:11:28 +00:00
@Autowired
private ActProcInsService actProcInsService;
@Autowired
private ProjectInstanceRelationRepository projectInstanceRelationRepository;
2022-12-21 03:13:42 +00:00
@Autowired
private ActTaskDefService actTaskDefService;
2021-11-12 04:11:28 +00:00
/**
*
*/
public void startEstimateProcessInstance(Project project, Admin admin) throws Exception {
startProcess(project, admin, ActConstant.PROCESS_DEFKEY_ESTIMATE);
2021-11-12 04:11:28 +00:00
}
2021-11-12 04:11:28 +00:00
/**
*
*/
public void startBudgetProcessInstance(Project project, Admin admin) throws Exception {
startProcess(project, admin, ActConstant.PROCESS_DEFKEY_BUDGET);
}
2021-11-12 04:11:28 +00:00
/**
*
*/
public void startSettleProcessInstance(Project project, Admin admin) throws Exception {
startProcess(project, admin, ActConstant.PROCESS_DEFKEY_SETTLE);
}
2021-11-12 04:11:28 +00:00
/**
*
*/
2021-11-17 06:49:11 +00:00
public void startFinalProcessInstance(int projectId, Admin admin) throws Exception {
Project project = projectRepository.findOne(projectId);
startProcess(project, admin, ActConstant.PROCESS_DEFKEY_FINAL);
}
2022-12-21 03:13:42 +00:00
/**
2022-12-21 03:13:42 +00:00
*
*
* @param projectId id
* @param map
* @throws Exception
*/
2022-12-21 03:13:42 +00:00
public void startSaleContractProcess(int projectId, Map<String, Object> map) throws Exception {
String processDefkey = ActConstant.PROCESS_DEFKEY_SALE_CONTRACT;
String businessKey = String.valueOf(projectId);
logger.info("startSaleContractProcess processDefkey:{}, businessKey{}", processDefkey, businessKey);
String processInstanceId = actProcInsService.startProcessInstance(processDefkey, businessKey, map);
saveRelation(projectId, processDefkey, processInstanceId);
}
2022-12-21 03:13:42 +00:00
/**
*
*
* @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 message
* @return
*/
public boolean completeSaleContractTask(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;
}
/**
*
*
* @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;
}
2022-12-21 03:13:42 +00:00
actTaskDefService.completeTaskByProcInsId(projectInstance.getProcessInsId(), approveType, message);
return true;
}
private void saveRelation(int projectId, String processDefkey, String processInstanceId) {
//保存流程实例id与项目的关联关系
ProjectInstanceRelation relation = new ProjectInstanceRelation();
relation.setProjectId(projectId);
relation.setProjectType(ActConstant.PROJECT_TYPE_SALE_CONTRACT);
relation.setProcessType(processDefkey);
relation.setProcessInsId(processInstanceId);
relation.setCreateTime(new Date());
projectInstanceRelationRepository.saveAndFlush(relation);
2021-11-12 04:11:28 +00:00
}
private void startProcess(Project project, Admin admin, String processDefkey) throws Exception {
2021-11-12 04:11:28 +00:00
HashMap<String, Object> variables = new HashMap<>();
variables.put(ActConstant.KEY_PROJECT_TYPE, project.getType());
2021-11-15 03:12:34 +00:00
String businessKey = String.valueOf(project.getId());
2022-04-19 09:34:25 +00:00
logger.info("startProcess processDefkey:{}, businessKey{}", processDefkey, businessKey);
2021-11-15 03:12:34 +00:00
String processInstanceId = actProcInsService.startProcessInstance(processDefkey, businessKey, variables);
2021-11-12 04:11:28 +00:00
2022-08-31 03:45:24 +00:00
saveProjectInstance(project, processDefkey, processInstanceId);
}
public String startProcessBySystem(Project project, String processDefkey, 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);
String processInstanceId = actProcInsService.startProcessInstanceBySystem(
processDefkey, businessKey, variables, taskRecord);
saveProjectInstance(project, processDefkey, processInstanceId);
return processInstanceId;
}
private void saveProjectInstance(Project project, String processDefkey, String processInstanceId) {
2021-11-12 04:11:28 +00:00
//保存流程实例id与项目的关联关系
ProjectInstanceRelation relation = new ProjectInstanceRelation();
relation.setProjectId(project.getId());
2021-11-12 04:11:28 +00:00
relation.setProcessType(processDefkey);
relation.setProcessInsId(processInstanceId);
relation.setCreateTime(new Date());
projectInstanceRelationRepository.saveAndFlush(relation);
}
/**
*
* @param projectId id
* @param adminId id
*/
public void updateApprover(int projectId, int adminId){
Project project = projectRepository.findOne(projectId);
2021-11-22 02:21:37 +00:00
if (project == null) {
return;
}
2021-11-17 03:14:52 +00:00
if (adminId == 0) {
project.setApproveName("");
}else {
Admin admin = adminService.getAdminById(adminId);
project.setApproveName(admin.getRealName());
}
project.setApproveId(adminId);
project.setLastUpdateTime(new Date());
projectRepository.saveAndFlush(project);
}
/**
2021-11-17 02:14:01 +00:00
*
* @param processKey
* @see ActConstant#PROCESS_DEFKEY_ESTIMATE
* @see ActConstant#PROCESS_DEFKEY_BUDGET
* @see ActConstant#PROCESS_DEFKEY_SETTLE
* @see ActConstant#PROCESS_DEFKEY_FINAL
*/
2021-11-17 02:14:01 +00:00
public void updateApproveStatus(int projectId, String processKey, ApproveStatusEnum approveStatusEnum){
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());
}
2021-11-17 03:14:52 +00:00
if (approveStatusEnum.getApproveStatus() == ApproveStatusEnum.APPROVAL_PASSED.getApproveStatus()) {
//审批通过设置审批人为空
project.setApproveId(0);
project.setApproveName("");
}
project.setLastUpdateTime(new Date());
projectRepository.saveAndFlush(project);
}
2021-11-16 09:39:06 +00:00
2021-11-12 04:11:28 +00:00
}