package cn.palmte.work.service; import cn.palmte.work.bean.ApproveStatusEnum; import cn.palmte.work.config.activiti.ActConstant; import cn.palmte.work.model.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.Date; import java.util.HashMap; /** * @author xiongshiyan at 2021/10/29 , contact me with email yanshixiong@126.com or phone 15208384257 */ @Service public class ProjectInstanceService { @Autowired private ProjectRepository projectRepository; @Autowired private AdminService adminService; @Autowired private ActProcInsService actProcInsService; @Autowired private ProjectInstanceRelationRepository projectInstanceRelationRepository; /** * 开启一个概算流程实例 */ public void startEstimateProcessInstance(Project p, Admin admin) throws Exception { startProcess(p, admin, ActConstant.PROCESS_DEFKEY_ESTIMATE); } /** * 开启一个预算流程实例 */ public void startBudgetProcessInstance(Project p, Admin admin) throws Exception { startProcess(p, admin, ActConstant.PROCESS_DEFKEY_BUDGET); } /** * 开启一个结算流程实例 */ public void startSettleProcessInstance(Project p, Admin admin) throws Exception { startProcess(p, admin, ActConstant.PROCESS_DEFKEY_SETTLE); } /** * 开启一个决算流程实例 */ public void startFinalProcessInstance(Project p, Admin admin) throws Exception { startProcess(p, admin, ActConstant.PROCESS_DEFKEY_FINAL); } private void startProcess(Project p, Admin admin, String processDefkey) throws Exception { HashMap variables = new HashMap<>(); variables.put(ActConstant.START_PROCESS_USERID, admin.getId()); variables.put(ActConstant.KEY_PROJECT_ID, p.getId()); variables.put(ActConstant.KEY_PROJECT_TYPE, p.getType()); String processInstanceId = actProcInsService.startProcessInstance(processDefkey, variables); //保存流程实例id与项目的关联关系 ProjectInstanceRelation relation = new ProjectInstanceRelation(); relation.setProjectId(p.getId()); 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); Admin admin = adminService.getAdminById(adminId); project.setApproveId(adminId); project.setApproveName(admin.getUserName()); project.setLastUpdateTime(new Date()); projectRepository.saveAndFlush(project); } /** * 更新对应审批状态 * @param projectId 项目id * @param approveStatusEnum 审批状态 1待审核,2审核通过,3审核不通过 * @see ApproveStatusEnum * @param processKey 审批类型 * @see ActConstant#PROCESS_DEFKEY_ESTIMATE * @see ActConstant#PROCESS_DEFKEY_BUDGET * @see ActConstant#PROCESS_DEFKEY_SETTLE * @see ActConstant#PROCESS_DEFKEY_FINAL */ public void updateApproveStatus(int projectId, ApproveStatusEnum approveStatusEnum, String processKey){ 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()); } project.setLastUpdateTime(new Date()); projectRepository.saveAndFlush(project); } }