From eba5c793d9852007c75a5aea7067772efac94f45 Mon Sep 17 00:00:00 2001 From: xxssyyyyssxx Date: Fri, 12 Nov 2021 12:11:28 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A6=82=E7=AE=97=E5=92=8C=E9=A2=84=E7=AE=97?= =?UTF-8?q?=E5=8F=91=E8=B5=B7=E5=AE=A1=E6=A0=B8=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../work/config/activiti/ActConstant.java | 19 +++++ .../controller/backend/ProjectController.java | 14 ++-- .../work/model/ProjectInstanceRelation.java | 80 +++++++++++++++++++ .../ProjectInstanceRelationRepository.java | 6 ++ .../work/service/ProjectInstanceService.java | 67 ++++++++++++++++ .../palmte/work/service/ProjectService.java | 54 ++++++++++++- 6 files changed, 228 insertions(+), 12 deletions(-) create mode 100644 src/main/java/cn/palmte/work/model/ProjectInstanceRelation.java create mode 100644 src/main/java/cn/palmte/work/model/ProjectInstanceRelationRepository.java create mode 100644 src/main/java/cn/palmte/work/service/ProjectInstanceService.java diff --git a/src/main/java/cn/palmte/work/config/activiti/ActConstant.java b/src/main/java/cn/palmte/work/config/activiti/ActConstant.java index f2e1dc7..c51e9b8 100644 --- a/src/main/java/cn/palmte/work/config/activiti/ActConstant.java +++ b/src/main/java/cn/palmte/work/config/activiti/ActConstant.java @@ -51,4 +51,23 @@ public class ActConstant { public static final String NUMBER_OF_COMPLETED_INSTANCES = "nrOfCompletedInstances"; + /** + * 概算 + */ + public static final String PROCESS_DEFKEY_ESTIMATE = "estimate"; + /** + * 预算 + */ + 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"; } diff --git a/src/main/java/cn/palmte/work/controller/backend/ProjectController.java b/src/main/java/cn/palmte/work/controller/backend/ProjectController.java index 897ebc8..3280232 100644 --- a/src/main/java/cn/palmte/work/controller/backend/ProjectController.java +++ b/src/main/java/cn/palmte/work/controller/backend/ProjectController.java @@ -109,9 +109,8 @@ public class ProjectController extends BaseController{ * 预算保存并提交审核 */ @RequestMapping("/estimateAddSaveAndApprove") - public String estimateAddSaveAndApprove(Project project, EstimateBean estimateBean, Map model) { - projectService.estimateAddSave(project, estimateBean, InterfaceUtil.getAdmin(), ApproveStatusEnum.APPROVAL_PENDING); - //TODO 发起审核 + public String estimateAddSaveAndApprove(Project project, EstimateBean estimateBean, Map model) throws Exception { + projectService.estimateAddSaveAndApprove(project, estimateBean, InterfaceUtil.getAdmin()); return "redirect:/project/list"; } @@ -133,9 +132,8 @@ public class ProjectController extends BaseController{ } @RequestMapping("/estimateEditSaveAndApprove") - public String estimateEditSaveAndApprove(Project project, EstimateBean estimateBean, Map model) { - projectService.estimateEditSave(project, estimateBean, InterfaceUtil.getAdmin(), ApproveStatusEnum.APPROVAL_PENDING); - //TODO 发起审核 + public String estimateEditSaveAndApprove(Project project, EstimateBean estimateBean, Map model) throws Exception { + projectService.estimateEditSaveAndApprove(project, estimateBean, InterfaceUtil.getAdmin()); return "redirect:/project/list"; } @@ -181,8 +179,8 @@ public class ProjectController extends BaseController{ * 进行项目预算保存并提交审核 */ @RequestMapping("/budgetEditSaveAndApprove") - public String budgetEditSaveAndApprove(Project project, BudgetBean budgetBean, Map model) { - projectService.budgetEditSave(project, budgetBean, InterfaceUtil.getAdmin(), ApproveStatusEnum.APPROVAL_PENDING); + public String budgetEditSaveAndApprove(Project project, BudgetBean budgetBean, Map model) throws Exception { + projectService.budgetEditSaveAndApprove(project, budgetBean, InterfaceUtil.getAdmin()); return "redirect:/project/list"; } diff --git a/src/main/java/cn/palmte/work/model/ProjectInstanceRelation.java b/src/main/java/cn/palmte/work/model/ProjectInstanceRelation.java new file mode 100644 index 0000000..710bbfe --- /dev/null +++ b/src/main/java/cn/palmte/work/model/ProjectInstanceRelation.java @@ -0,0 +1,80 @@ +package cn.palmte.work.model; + +import org.hibernate.annotations.GenericGenerator; + +import javax.persistence.*; +import java.util.Date; + +/** + * 项目与流程实例的关系 + */ +@Entity +@Table(name = "project_instance_relation") +public class ProjectInstanceRelation { + /** + * id + */ + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @GenericGenerator(name = "persistenceGenerator", strategy = "increment") + private Integer id; + + @Column(name = "project_id") + private int projectId; + + /** + * 流程类型:estimate、budget、settle、final + */ + @Column(name = "process_type") + private String processType; + + /** + * 流程实例id + */ + @Column(name = "process_ins_id") + private String processInsId; + + @Column(name = "create_time") + @Temporal(TemporalType.TIMESTAMP) + private Date createTime; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public int getProjectId() { + return projectId; + } + + public void setProjectId(int projectId) { + this.projectId = projectId; + } + + public String getProcessType() { + return processType; + } + + public void setProcessType(String processType) { + this.processType = processType; + } + + public String getProcessInsId() { + return processInsId; + } + + public void setProcessInsId(String processInsId) { + this.processInsId = processInsId; + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } +} \ No newline at end of file diff --git a/src/main/java/cn/palmte/work/model/ProjectInstanceRelationRepository.java b/src/main/java/cn/palmte/work/model/ProjectInstanceRelationRepository.java new file mode 100644 index 0000000..875236d --- /dev/null +++ b/src/main/java/cn/palmte/work/model/ProjectInstanceRelationRepository.java @@ -0,0 +1,6 @@ +package cn.palmte.work.model; + +import org.springframework.data.jpa.repository.JpaRepository; + +public interface ProjectInstanceRelationRepository extends JpaRepository { +} diff --git a/src/main/java/cn/palmte/work/service/ProjectInstanceService.java b/src/main/java/cn/palmte/work/service/ProjectInstanceService.java new file mode 100644 index 0000000..2b73f39 --- /dev/null +++ b/src/main/java/cn/palmte/work/service/ProjectInstanceService.java @@ -0,0 +1,67 @@ +package cn.palmte.work.service; + +import cn.palmte.work.config.activiti.ActConstant; +import cn.palmte.work.model.Admin; +import cn.palmte.work.model.Project; +import cn.palmte.work.model.ProjectInstanceRelation; +import cn.palmte.work.model.ProjectInstanceRelationRepository; +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 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); + } + +} diff --git a/src/main/java/cn/palmte/work/service/ProjectService.java b/src/main/java/cn/palmte/work/service/ProjectService.java index 97ac1b5..d9b9427 100644 --- a/src/main/java/cn/palmte/work/service/ProjectService.java +++ b/src/main/java/cn/palmte/work/service/ProjectService.java @@ -1,9 +1,8 @@ package cn.palmte.work.service; import cn.palmte.work.bean.*; -import cn.palmte.work.model.Admin; -import cn.palmte.work.model.Project; -import cn.palmte.work.model.ProjectRepository; +import cn.palmte.work.config.activiti.ActConstant; +import cn.palmte.work.model.*; import cn.palmte.work.utils.InterfaceUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -14,6 +13,7 @@ import top.jfunc.common.db.utils.Pagination; import top.jfunc.common.utils.StrUtil; import java.util.Date; +import java.util.HashMap; import java.util.List; import java.util.Map; @@ -30,6 +30,8 @@ public class ProjectService { private ProjectEstimateService projectEstimateService; @Autowired private ProjectBudgetService projectBudgetService; + @Autowired + private ProjectInstanceService projectInstanceService; private QueryHelper getQueryHelper(Map searchInfo, int pageNumber, int pageSize) { @@ -115,17 +117,48 @@ public class ProjectService { return projectRepository.findOne(id); } + /** + * 新增概算保存项目并发起审核 + */ + @Transactional(rollbackFor = RuntimeException.class) + public Project estimateAddSaveAndApprove(Project project, + EstimateBean estimateBean, + Admin admin) throws Exception { + Project p = estimateAddSave(project, estimateBean, admin, ApproveStatusEnum.APPROVAL_PENDING); + + projectInstanceService.startEstimateProcessInstance(p, admin); + + return project; + } + /** * 新增概算保存项目 */ @Transactional(rollbackFor = RuntimeException.class) - public Project estimateAddSave(Project project, EstimateBean estimateBean, Admin admin, ApproveStatusEnum approveStatusEnum) { + public Project estimateAddSave(Project project, + EstimateBean estimateBean, + Admin admin, + ApproveStatusEnum approveStatusEnum) { Project p = addProject(project, admin, approveStatusEnum); projectEstimateService.saveEstimate(p, estimateBean); return project; } + /** + * 编辑概算保存项目并发起审核 + */ + @Transactional(rollbackFor = RuntimeException.class) + public Project estimateEditSaveAndApprove(Project project, + EstimateBean estimateBean, + Admin admin) throws Exception { + Project p = estimateEditSave(project, estimateBean, admin, ApproveStatusEnum.APPROVAL_PENDING); + + //TODO 此处找到以前的概算审批实例,然后完成任务 + //projectInstanceService.startEstimateProcessInstance(p, admin); + + return p; + } /** * 编辑概算保存项目 */ @@ -146,6 +179,10 @@ public class ProjectService { projectEstimateService.saveEstimate(p, estimateBean); return p; } + + + + private Project addProject(Project project, Admin admin, ApproveStatusEnum approveStatusEnum) { project.setTypeDesc(TypeEnum.parseType(project.getType()).getTypeDesc()); project.setStatus(StatusEnum.CREATED.getStatus()); @@ -193,6 +230,15 @@ public class ProjectService { return p; } + /** + * 编辑预算保存项目并审核 + */ + @Transactional(rollbackFor = RuntimeException.class) + public Project budgetEditSaveAndApprove(Project project, BudgetBean budgetBean, Admin admin) throws Exception { + Project p = budgetEditSave(project, budgetBean, admin, ApproveStatusEnum.APPROVAL_PENDING); + projectInstanceService.startBudgetProcessInstance(p, admin); + return p; + } /** * 编辑预算保存项目 */