From bc4a9c379301b5c4a601fb4264af7ac740641f83 Mon Sep 17 00:00:00 2001 From: WendyYang Date: Sun, 14 Apr 2024 15:08:00 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E7=94=B3=E6=8A=A5=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hz/pm/api/common/enumeration/CommonEnum.java | 40 +-- .../enumeration/ProjectProcessStageEnum.java | 3 +- .../action/ProjectDeclareActionChoice.java | 97 ------ .../action/ProjectStateChangeAction.java | 64 +--- .../builder/impl/AdaptStateMachineBuilderImpl.java | 2 +- .../impl/ProjectStateMachineBuilderImpl.java | 93 +----- .../impl/SelfTestStateMachineBuilderImpl.java | 2 +- .../impl/TenderStateMachineBuilderImpl.java | 2 +- .../impl/TestValidStateMachineBuilderImpl.java | 3 +- .../builder/impl/XcfhxStateMachineBuilderImpl.java | 2 +- .../event/ProjectStateChangeEvent.java | 54 +--- .../api/filemanage/manage/ProjectFileManage.java | 10 +- .../com/hz/pm/api/irs/manage/IrsProjectManage.java | 1 - .../hz/pm/api/meeting/manage/MeetingManage.java | 2 +- .../PrequalificationDeclaredController.java | 56 ---- .../projectdeclared/manage/ConstructionManage.java | 15 +- .../manage/DeclaredProjectHelper.java | 357 ++++++++++++++++++++ .../manage/DeclaredProjectManage.java | 107 +++--- .../manage/DefaultDeclaredProjectManage.java | 360 --------------------- .../projectdeclared/manage/DelayedApplyManage.java | 8 +- .../manage/FinalAcceptanceManage.java | 2 +- .../PrequalificationDeclaredProjectManage.java | 337 ------------------- .../manage/ProjectAdjustmentManage.java | 13 +- .../api/projectdeclared/manage/PurchaseManage.java | 2 +- .../manage/ReviewByDeptJointManage.java | 8 +- .../utils/RestartProcessMapUtil.java | 7 +- .../api/projectlib/manage/AnnualPlanLibManage.java | 2 +- .../projectlib/manage/DeclaredRecordManage.java | 48 +-- .../pm/api/projectlib/manage/ProjectLibManage.java | 39 ++- .../manage/ProjectRenewalFundManage.java | 6 +- .../projectlib/model/enumeration/InstTypeEnum.java | 3 +- .../model/enumeration/WarningFlowTypeEnum.java | 4 +- .../enumeration/WarningOperationTypeEnum.java | 2 +- .../model/enumeration/status/ProjectStatus.java | 23 +- .../api/scheduler/listener/ProcessEndListener.java | 7 - .../task/EarlyWarningInstanceNotStartTask.java | 32 +- .../hz/pm/api/todocenter/manage/HandlerManage.java | 10 - .../pm/api/todocenter/manage/TodoCenterManage.java | 8 +- 38 files changed, 555 insertions(+), 1276 deletions(-) delete mode 100644 hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/action/ProjectDeclareActionChoice.java delete mode 100644 hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/controller/PrequalificationDeclaredController.java create mode 100644 hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/manage/DeclaredProjectHelper.java delete mode 100644 hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/manage/DefaultDeclaredProjectManage.java delete mode 100644 hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/manage/PrequalificationDeclaredProjectManage.java diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/common/enumeration/CommonEnum.java b/hz-pm-api/src/main/java/com/hz/pm/api/common/enumeration/CommonEnum.java index da577aa..b481d01 100644 --- a/hz-pm-api/src/main/java/com/hz/pm/api/common/enumeration/CommonEnum.java +++ b/hz-pm-api/src/main/java/com/hz/pm/api/common/enumeration/CommonEnum.java @@ -13,27 +13,29 @@ public enum CommonEnum { /** * 公共的一些枚举 */ - YES(1,"是",1), - NO(0,"否",1), + YES(1, "是", 1), + NO(0, "否", 1), - LS_SBJ(331100,"市本级",2), - LS_LD(331102,"莲都区",2), - LS_QT(331121,"青田县",2), - LS_JY(331122,"缙云县",2), - LS_SC(331123,"遂昌县",2), - LS_SY(331124,"松阳县",2), - LS_YH(331125,"云和县",2), - LS_QY(331126,"庆元县",2), - LS_JN(331127,"景宁畲族自治县",2), - LS_LQ(331181,"龙泉市",2), - LS_KFQ(331199,"开发区",2), - ZWDD(0,"浙政钉",3), - MOBILE(1,"短信",3); - - private Integer code; - private String desc; - private Integer groupId; + LS_SBJ(331100, "市本级", 2), + LS_LD(331102, "莲都区", 2), + LS_QT(331121, "青田县", 2), + LS_JY(331122, "缙云县", 2), + LS_SC(331123, "遂昌县", 2), + LS_SY(331124, "松阳县", 2), + LS_YH(331125, "云和县", 2), + LS_QY(331126, "庆元县", 2), + LS_JN(331127, "景宁畲族自治县", 2), + LS_LQ(331181, "龙泉市", 2), + LS_KFQ(331199, "开发区", 2), + ZWDD(0, "浙政钉", 3), + MOBILE(1, "短信", 3); + private final Integer code; + private final String desc; + private final Integer groupId; + public boolean eq(Integer code) { + return this.getCode().equals(code); + } } diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/common/enumeration/ProjectProcessStageEnum.java b/hz-pm-api/src/main/java/com/hz/pm/api/common/enumeration/ProjectProcessStageEnum.java index 7a05966..03af379 100644 --- a/hz-pm-api/src/main/java/com/hz/pm/api/common/enumeration/ProjectProcessStageEnum.java +++ b/hz-pm-api/src/main/java/com/hz/pm/api/common/enumeration/ProjectProcessStageEnum.java @@ -34,7 +34,8 @@ public enum ProjectProcessStageEnum { XC_APPROVAL_PROCESS(9, "信创审批流程"), SELF_TEST(10, "系统自测审批流程"), ADAPTION(11, "适配改造审批流程"), - TEST_VALID(12, "测试验证审批流程"); + TEST_VALID(12, "测试验证审批流程"), + COMPLIANCE_REVIEW(13, "合规性审查"); private final Integer code; private final String desc; diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/action/ProjectDeclareActionChoice.java b/hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/action/ProjectDeclareActionChoice.java deleted file mode 100644 index 9501e78..0000000 --- a/hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/action/ProjectDeclareActionChoice.java +++ /dev/null @@ -1,97 +0,0 @@ -package com.hz.pm.api.common.statemachine.action; - -import cn.hutool.core.collection.CollUtil; -import cn.hutool.json.JSONUtil; -import com.baomidou.mybatisplus.core.toolkit.Assert; -import com.hz.pm.api.common.enumeration.CommonEnum; -import com.hz.pm.api.common.model.constant.StateMachineConst; -import com.hz.pm.api.common.statemachine.event.ProjectStateChangeEvent; -import com.hz.pm.api.projectlib.model.entity.Project; -import com.hz.pm.api.projectlib.model.entity.ProjectApplication; -import com.hz.pm.api.projectlib.model.enumeration.status.ProjectStatus; -import lombok.extern.slf4j.Slf4j; -import org.springframework.statemachine.StateContext; -import org.springframework.statemachine.action.Action; - -import java.util.List; - -import static com.hz.pm.api.common.model.constant.StateMachineConst.APPLICATION_DECLARE; - -/** - * 项目申报状态机选择分支action类 - * - * @author CMM - * @since 2023/02/07 22:31 - */ -@Slf4j -public class ProjectDeclareActionChoice implements Action { - - private static final String PROJECT_DECLARE = StateMachineConst.PROJECT_DECLARE; - - @Override - public void execute(StateContext stateContext) { - log.info(String.valueOf(stateContext.getTarget().getId())); - ProjectStatus projectStatusEnum = stateContext.getTarget().getId(); - switch (projectStatusEnum) { - case PENDING_PREQUALIFICATION_CHOICE: - preDeclareChoice(stateContext); - break; - case PREQUALIFICATION_WITHDRAW_CHOICE: - preWithDrawChoice(stateContext); - break; - case APPROVED_AFTER_CHOICE: - approvedAfterChoice(stateContext); - break; - default: - throw new IllegalStateException("不支持的项目状态:" + projectStatusEnum); - } - } - - private void approvedAfterChoice(StateContext stateContext) { - Project project = getProject(stateContext); - List projectApplications = getProjectApplication(stateContext); - log.info("立项批复之后,项目的状态为:{}", project.getStatus()); - // 判断 是否有初次创建的应用 - if (CollUtil.isEmpty(projectApplications)) { - project.setStage(ProjectStatus.PROJECT_APPROVED.getCode()); - project.setStatus(ProjectStatus.TO_BE_PURCHASED.getCode()); - } - final boolean[] isFirstApp = {Boolean.FALSE}; - projectApplications.forEach(app -> { - Integer isFirst = app.getIsFirst(); - if (isFirst.equals(CommonEnum.YES.getCode())) { - isFirstApp[0] = Boolean.TRUE; - } - }); - if (isFirstApp[0]) { - project.setStage(ProjectStatus.NOT_APPROVED.getCode()); - } else { - project.setStage(ProjectStatus.PROJECT_APPROVED.getCode()); - project.setStatus(ProjectStatus.TO_BE_PURCHASED.getCode()); - } - } - - private void preDeclareChoice(StateContext stateContext) { - Project project = getProject(stateContext); - log.info("预审申报事件之前,项目的状态为:{}", project.getStatus()); - project.setStatus(ProjectStatus.PRE_APPLYING.getCode()); - } - - private void preWithDrawChoice(StateContext stateContext) { - Project project = getProject(stateContext); - log.info("预审中撤回事件之前,项目的状态为:{}", project.getStatus()); - project.setStatus(ProjectStatus.PENDING_PREQUALIFICATION.getCode()); - } - - private Project getProject(StateContext stateContext) { - Project project = stateContext.getMessage().getHeaders().get(PROJECT_DECLARE, Project.class); - Assert.notNull(project, "项目信息获取失败%s", JSONUtil.toJsonStr(stateContext.getMessage())); - return project; - } - - @SuppressWarnings("unchecked") - private List getProjectApplication(StateContext stateContext) { - return stateContext.getMessage().getHeaders().get(APPLICATION_DECLARE, List.class); - } - -} diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/action/ProjectStateChangeAction.java b/hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/action/ProjectStateChangeAction.java index fb49d61..4f97125 100644 --- a/hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/action/ProjectStateChangeAction.java +++ b/hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/action/ProjectStateChangeAction.java @@ -29,22 +29,24 @@ public class ProjectStateChangeAction { return project; } - @OnTransition(source = "UNDER_INTERNAL_AUDIT", target = "PENDING_PREQUALIFICATION") - public void UNDER_INTERNAL_PASS(Message message) { + + @OnTransition(source = "TO_BE_DECLARED", target = "ON_COMPLIANCE_REVIEW") + public void PROJECT_APPLICATION_SUBMIT(Message message) { Project project = getProject(message); - project.setStatus(ProjectStatus.PENDING_PREQUALIFICATION.getCode()); + project.setStage(ProjectStatus.NOT_APPROVED.getCode()); + project.setStatus(ProjectStatus.ON_COMPLIANCE_REVIEW.getCode()); } - @OnTransition(source = "UNDER_INTERNAL_AUDIT", target = "UNDER_INTERNAL_AUDIT_NOT_PASS") - public void UNDER_INTERNAL_REJECT(Message message) { + @OnTransition(source = "ON_COMPLIANCE_REVIEW", target = "COMPLIANCE_REVIEW_FAILED") + public void UNDER_INTERNAL_WITHDRAW(Message message) { Project project = getProject(message); - project.setStatus(ProjectStatus.UNDER_INTERNAL_AUDIT_NOT_PASS.getCode()); + project.setStatus(ProjectStatus.COMPLIANCE_REVIEW_FAILED.getCode()); } - @OnTransition(source = "UNDER_INTERNAL_AUDIT", target = "TO_BE_DECLARED") - public void UNDER_INTERNAL_WITHDRAW(Message message) { + @OnTransition(source = "COMPLIANCE_REVIEW_FAILED", target = "ON_COMPLIANCE_REVIEW") + public void COMPLIANCE_REVIEW_RESUBMIT(Message message) { Project project = getProject(message); - project.setStatus(ProjectStatus.TO_BE_DECLARED.getCode()); + project.setStatus(ProjectStatus.ON_COMPLIANCE_REVIEW.getCode()); } @OnTransition(source = "UNDER_INTERNAL_AUDIT_NOT_PASS", target = "UNDER_INTERNAL_AUDIT") @@ -66,43 +68,12 @@ public class ProjectStateChangeAction { project.setStatus(ProjectStatus.UNDER_INTERNAL_AUDIT.getCode()); } - - @OnTransition(source = "JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS", target = "JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_SUCCESS") - public void PROVINCIAL_DEPARTMENT_REVIEW_PASS(Message message) { - Project project = getProject(message); - project.setStatus(ProjectStatus.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_SUCCESS.getCode()); - } - - @OnTransition(source = "JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_SUCCESS", target = "PRE_APPLYING") - public void PROVINCIAL_PASS_TO_PRELIMINARY_REVIEW(Message message) { - Project project = getProject(message); - project.setStatus(ProjectStatus.PRE_APPLYING.getCode()); - } - - @OnTransition(source = "JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS", target = "THE_JOINT_REVIEW_OF_PROVINCIAL_DEPARTMENTS_FAILED") - public void PROVINCIAL_DEPARTMENT_REVIEW_REJECT(Message message) { - Project project = getProject(message); - project.setStatus(ProjectStatus.THE_JOINT_REVIEW_OF_PROVINCIAL_DEPARTMENTS_FAILED.getCode()); - } - - @OnTransition(source = "JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS", target = "PENDING_PREQUALIFICATION") - public void JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_WITHDRAW(Message message) { - Project project = getProject(message); - project.setStatus(ProjectStatus.PENDING_PREQUALIFICATION.getCode()); - } - @OnTransition(source = "PRE_APPLYING", target = "DEPARTMENT_JOINT_REVIEW") public void PRELIMINARY_REVIEW_PASS(Message message) { Project project = getProject(message); project.setStatus(ProjectStatus.DEPARTMENT_JOINT_REVIEW.getCode()); } - @OnTransition(source = "PRE_APPLYING", target = "PREQUALIFICATION_FAILED") - public void PRELIMINARY_REVIEW_REJECT(Message message) { - Project project = getProject(message); - project.setStatus(ProjectStatus.PREQUALIFICATION_FAILED.getCode()); - } - @OnTransition(source = "PREQUALIFICATION_FAILED", target = "PENDING_PREQUALIFICATION_CHOICE") public void PRELIMINARY_REVIEW_REJECT_RESUBMIT(Message message) { Project project = getProject(message); @@ -128,13 +99,6 @@ public class ProjectStateChangeAction { project.setStatus(ProjectStatus.DEPARTMENT_JOINT_REVIEW_FAILED.getCode()); } - @OnTransition(source = "DEPARTMENT_JOINT_REVIEW", target = "PRE_APPLYING") - public void DEPARTMENT_JOINT_REVIEW_WITHDRAW(Message message) { - Project project = getProject(message); - project.setStatus(ProjectStatus.PRE_APPLYING.getCode()); - } - - @OnTransition(source = "IN_THE_ANNUAL_PLAN", target = "PLAN_TO_BE_DECLARED") public void ANNUAL_PLAN_PROJECT_OPEN_PLAN_DECLARE(Message message) { Project project = getProject(message); @@ -210,12 +174,6 @@ public class ProjectStateChangeAction { project.setStatus(ProjectStatus.TO_BE_PURCHASED.getCode()); } - @OnTransition(source = "OPERATION", target = "UNDER_CONSTRUCTION") - public void START_TO_WORK(Message message) { - Project project = getProject(message); - project.setStatus(ProjectStatus.UNDER_CONSTRUCTION.getCode()); - } - @OnTransition(source = "TO_BE_PURCHASED", target = "TO_BE_APPROVED") public void TO_BE_PURCHASED_WITHDRAW(Message message) { Project project = getProject(message); diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/builder/impl/AdaptStateMachineBuilderImpl.java b/hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/builder/impl/AdaptStateMachineBuilderImpl.java index 61bdc1d..bd54065 100644 --- a/hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/builder/impl/AdaptStateMachineBuilderImpl.java +++ b/hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/builder/impl/AdaptStateMachineBuilderImpl.java @@ -99,7 +99,7 @@ public class AdaptStateMachineBuilderImpl implements BaseStateMachineBuilder(new StateMachinePersist() { @Override public void write(StateMachineContext context, Purchase contextObj) { - log.info("当前项目为:{}", contextObj); + log.info("当前项目为:{} ==> {}", contextObj.getProjectId(), contextObj.getId()); } @Override diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/builder/impl/ProjectStateMachineBuilderImpl.java b/hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/builder/impl/ProjectStateMachineBuilderImpl.java index bc506d6..d166618 100644 --- a/hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/builder/impl/ProjectStateMachineBuilderImpl.java +++ b/hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/builder/impl/ProjectStateMachineBuilderImpl.java @@ -1,9 +1,7 @@ package com.hz.pm.api.common.statemachine.builder.impl; -import com.hz.pm.api.common.statemachine.action.ProjectDeclareActionChoice; import com.hz.pm.api.common.statemachine.builder.BaseStateMachineBuilder; import com.hz.pm.api.common.statemachine.event.ProjectStateChangeEvent; -import com.hz.pm.api.common.statemachine.factory.ProjectDeclareGuardFactory.PendingPreQualificationChoiceGuard; import com.hz.pm.api.projectlib.model.entity.Project; import com.hz.pm.api.projectlib.model.enumeration.status.ProjectStatus; import lombok.RequiredArgsConstructor; @@ -43,7 +41,7 @@ public class ProjectStateMachineBuilderImpl implements BaseStateMachineBuilder

build() throws StateMachineException { StateMachine stateMachine = build(beanFactory); - log.info("状态机ID:" + stateMachine.getId()); + log.info("状态机ID:{}", stateMachine.getId()); stateMachine.start(); return stateMachine; } @@ -71,22 +69,24 @@ public class ProjectStateMachineBuilderImpl implements BaseStateMachineBuilder

省级部门联审中,预审中,完成其中一种状态 - .withChoice() - .source(ProjectStatus.PENDING_PREQUALIFICATION_CHOICE) - .first(ProjectStatus.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS, new PendingPreQualificationChoiceGuard(), new ProjectDeclareActionChoice()) - .last(ProjectStatus.PRE_APPLYING, new ProjectDeclareActionChoice()).and() - - // 省级部门联审通过,从省级部门联审中到省级部门联审成功 - .withExternal() - .source(ProjectStatus.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS) - .target(ProjectStatus.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_SUCCESS) - .event(ProjectStateChangeEvent.PROVINCIAL_DEPARTMENT_REVIEW_PASS).and() - // 省级部门联审通过,从省级部门联审成功到预审中 - .withExternal() - .source(ProjectStatus.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_SUCCESS) - .target(ProjectStatus.PRE_APPLYING) - .event(ProjectStateChangeEvent.PROVINCIAL_PASS_TO_PRELIMINARY_REVIEW).and() - // 省级部门联审不通过,从省级部门联审中到省级部门联审不通过 - .withExternal() - .source(ProjectStatus.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS) - .target(ProjectStatus.THE_JOINT_REVIEW_OF_PROVINCIAL_DEPARTMENTS_FAILED) - .event(ProjectStateChangeEvent.PROVINCIAL_DEPARTMENT_REVIEW_REJECT).and() - // 省级部门联审中撤回,从省级部门联审中到待预审 - .withExternal() - .source(ProjectStatus.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS) - .target(ProjectStatus.PENDING_PREQUALIFICATION) - .event(ProjectStateChangeEvent.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_WITHDRAW).and() - // 预审通过,从预审中到部门联审中 - .withExternal() - .source(ProjectStatus.PRE_APPLYING) - .target(ProjectStatus.DEPARTMENT_JOINT_REVIEW) - .event(ProjectStateChangeEvent.PRELIMINARY_REVIEW_PASS).and() - // 预审驳回,从预审中到预审不通过 - .withExternal() - .source(ProjectStatus.PRE_APPLYING) - .target(ProjectStatus.PREQUALIFICATION_FAILED) - .event(ProjectStateChangeEvent.PRELIMINARY_REVIEW_REJECT).and() - // 预审中撤回,从预审中到预审中撤回选择态 - .withExternal() - .source(ProjectStatus.PRE_APPLYING) - .target(ProjectStatus.PREQUALIFICATION_WITHDRAW_CHOICE) - .event(ProjectStateChangeEvent.PRE_APPLYING_WITHDRAW).and() - // 预审中撤回,从预审中撤回选择态->省级部门联审成功,待预审,完成其中一种状态 - .withChoice() - .source(ProjectStatus.PREQUALIFICATION_WITHDRAW_CHOICE) - .first(ProjectStatus.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_SUCCESS, new PendingPreQualificationChoiceGuard() - , new ProjectDeclareActionChoice()) - .last(ProjectStatus.PENDING_PREQUALIFICATION, new ProjectDeclareActionChoice()).and() - // 预审不通过重新提交,从预审不通过到待预审选择 - .withExternal() - .source(ProjectStatus.PREQUALIFICATION_FAILED) - .target(ProjectStatus.PENDING_PREQUALIFICATION_CHOICE) - .event(ProjectStateChangeEvent.PRELIMINARY_REVIEW_REJECT_RESUBMIT).and() - // 预审不通过重新提交,从待预审选择->省级部门联审中,预审中,完成其中一种状态 - .withChoice() - .source(ProjectStatus.PENDING_PREQUALIFICATION_CHOICE) - .first(ProjectStatus.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS, new PendingPreQualificationChoiceGuard(), new ProjectDeclareActionChoice()) - .last(ProjectStatus.PRE_APPLYING, new ProjectDeclareActionChoice()).and() - // 部门联审通过,从部门联审中到年度计划中 - .withExternal() .source(ProjectStatus.DEPARTMENT_JOINT_REVIEW) .target(ProjectStatus.IN_THE_ANNUAL_PLAN) .event(ProjectStateChangeEvent.DEPARTMENT_UNITED_REVIEW_PASS).and() @@ -169,11 +107,6 @@ public class ProjectStateMachineBuilderImpl implements BaseStateMachineBuilder

(new StateMachinePersist() { @Override public void write(StateMachineContext context, Project contextObj) { - log.info("当前项目为:{}", contextObj); + log.info("当前项目为:{}", contextObj.getProjectCode()); } @Override diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/builder/impl/SelfTestStateMachineBuilderImpl.java b/hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/builder/impl/SelfTestStateMachineBuilderImpl.java index f5025e1..caaa2b8 100644 --- a/hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/builder/impl/SelfTestStateMachineBuilderImpl.java +++ b/hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/builder/impl/SelfTestStateMachineBuilderImpl.java @@ -99,7 +99,7 @@ public class SelfTestStateMachineBuilderImpl implements BaseStateMachineBuilder< return new DefaultStateMachinePersister<>(new StateMachinePersist() { @Override public void write(StateMachineContext context, Purchase contextObj) { - log.info("当前项目为:{}", contextObj); + log.info("当前项目为:{} ==> {}", contextObj.getProjectId(), contextObj.getId()); } @Override diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/builder/impl/TenderStateMachineBuilderImpl.java b/hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/builder/impl/TenderStateMachineBuilderImpl.java index 93b9df0..4082168 100644 --- a/hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/builder/impl/TenderStateMachineBuilderImpl.java +++ b/hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/builder/impl/TenderStateMachineBuilderImpl.java @@ -126,7 +126,7 @@ public class TenderStateMachineBuilderImpl implements BaseStateMachineBuilder(new StateMachinePersist() { @Override public void write(StateMachineContext context, Purchase contextObj) { - log.info("当前项目为:{}", contextObj); + log.info("当前项目为:{} ==> {}", contextObj.getProjectId(), contextObj.getId()); } @Override diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/builder/impl/TestValidStateMachineBuilderImpl.java b/hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/builder/impl/TestValidStateMachineBuilderImpl.java index d43d7c1..db655da 100644 --- a/hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/builder/impl/TestValidStateMachineBuilderImpl.java +++ b/hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/builder/impl/TestValidStateMachineBuilderImpl.java @@ -4,7 +4,6 @@ import com.hz.pm.api.common.statemachine.builder.BaseStateMachineBuilder; import com.hz.pm.api.common.statemachine.event.TestValidStateChangeEvent; import com.hz.pm.api.projectdeclared.model.entity.Purchase; import com.hz.pm.api.projectlib.model.enumeration.status.TenderTestValidStatus; -import com.ningdatech.basic.exception.BizException; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.BeanFactory; @@ -99,7 +98,7 @@ public class TestValidStateMachineBuilderImpl implements BaseStateMachineBuilder return new DefaultStateMachinePersister<>(new StateMachinePersist() { @Override public void write(StateMachineContext context, Purchase contextObj) { - log.info("当前项目为:{}", contextObj); + log.info("当前项目为:{} ==> {}", contextObj.getProjectId(), contextObj.getId()); } @Override diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/builder/impl/XcfhxStateMachineBuilderImpl.java b/hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/builder/impl/XcfhxStateMachineBuilderImpl.java index 5cbf8cc..6bd5823 100644 --- a/hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/builder/impl/XcfhxStateMachineBuilderImpl.java +++ b/hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/builder/impl/XcfhxStateMachineBuilderImpl.java @@ -102,7 +102,7 @@ public class XcfhxStateMachineBuilderImpl implements BaseStateMachineBuilder(new StateMachinePersist() { @Override public void write(StateMachineContext context, Purchase contextObj) { - log.info("当前项目为:{}", contextObj); + log.info("当前项目为:{} ==> {}", contextObj.getProjectId(), contextObj.getId()); } @Override diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/event/ProjectStateChangeEvent.java b/hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/event/ProjectStateChangeEvent.java index d4ce4af..50569e6 100644 --- a/hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/event/ProjectStateChangeEvent.java +++ b/hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/event/ProjectStateChangeEvent.java @@ -6,7 +6,7 @@ import lombok.Getter; /** *

- * ProjectStatusChangeEvent + * 项目状态变更事件 *

* * @author WendyYang @@ -17,13 +17,13 @@ import lombok.Getter; public enum ProjectStateChangeEvent implements AbstractStateChangeEvent { /** - * 项目申报暂存(项目状态进入:待申报) - */ - PROJECT_APPLICATION_HOLD(null, null, null), - /** * 项目申报提交(项目状态进入:单位内部审核中) */ PROJECT_APPLICATION_SUBMIT(ProjectStatus.TO_BE_DECLARED.getCode(), null, null), + + COMPLIANCE_REVIEW_FAILED(null, ProjectStatus.ON_COMPLIANCE_REVIEW.getCode(), null), + + COMPLIANCE_REVIEW_RESUBMIT(ProjectStatus.COMPLIANCE_REVIEW_FAILED.getCode(), null, null), /** * 单位内部审核驳回(项目状态进入:单位内部审核不通过) */ @@ -38,35 +38,6 @@ public enum ProjectStateChangeEvent implements AbstractStateChangeEvent { UNDER_INTERNAL_REJECT_RESUBMIT(ProjectStatus.UNDER_INTERNAL_AUDIT_NOT_PASS.getCode(), null, null), /** - * 预审申报(项目状态进入:待预审选择,有判断条件:市级项目且申报金额大于1000万项目状态变为:省级部门联审中;否则项目状态变为:预审中) - */ - PRELIMINARY_REVIEW_DECLARE(ProjectStatus.PENDING_PREQUALIFICATION.getCode(), null, null), - /** - * 省级部门联审不通过(项目状态变为:省级部门联审不通过) - */ - PROVINCIAL_DEPARTMENT_REVIEW_REJECT(null, ProjectStatus.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS.getCode(), null), - /** - * 省级部门联审通过(项目状态变为:省级联审成功) - */ - PROVINCIAL_DEPARTMENT_REVIEW_PASS(ProjectStatus.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS.getCode(), null, null), - - /** - * 去到预审(项目状态变为:预审中) - */ - PROVINCIAL_PASS_TO_PRELIMINARY_REVIEW(ProjectStatus.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_SUCCESS.getCode(), null, null), - /** - * 预审驳回(项目状态变为:预审不通过) - */ - PRELIMINARY_REVIEW_REJECT(null, ProjectStatus.PRE_APPLYING.getCode(), null), - /** - * 预审不通过重新提交(项目状态变为:待预审选择) - */ - PRELIMINARY_REVIEW_REJECT_RESUBMIT(ProjectStatus.PREQUALIFICATION_FAILED.getCode(), null, null), - /** - * 预审通过(项目状态变为:部门联审中) - */ - PRELIMINARY_REVIEW_PASS(ProjectStatus.PRE_APPLYING.getCode(), null, null), - /** * 部门联审驳回(项目状态变为:部门联审不通过) */ DEPARTMENT_UNITED_REVIEW_REJECT(null, ProjectStatus.DEPARTMENT_JOINT_REVIEW.getCode(), null), @@ -128,10 +99,6 @@ public enum ProjectStateChangeEvent implements AbstractStateChangeEvent { */ SUBMIT_FIRST_INSPECTED_FILES(ProjectStatus.TO_BE_FIRST_INSPECTED.getCode(), null, null), /** - * 初验备案(项目状态变为:待终验) - */ - PRELIMINARY_ACCEPTANCE_PUT_ON_RECORD(ProjectStatus.UNDER_CONSTRUCTION.getCode(), null, null), - /** * 终验申请(项目状态变为:终验审核中) */ FINAL_ACCEPTANCE_APPLICATION(ProjectStatus.ON_PILOT_RUNNING.getCode(), null, null), @@ -144,20 +111,11 @@ public enum ProjectStateChangeEvent implements AbstractStateChangeEvent { */ FINAL_ACCEPTANCE_PASS(ProjectStatus.ON_FINALLY_INSPECTED.getCode(), null, null), - // 下个节点还未提交审核意见时,流程发起人和前一个审核人可以点击撤回 - /** * 单位内部审核中时被撤回(项目状态进入:待申报) */ UNDER_INTERNAL_WITHDRAW(null, null, ProjectStatus.UNDER_INTERNAL_AUDIT.getCode()), - /** - * 省级部门联审中时被撤回(项目状态进入:待预审) - */ - JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_WITHDRAW(null, null, ProjectStatus.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS.getCode()), - /** - * 预审中时被撤回(项目状态进入:待预审选择,,有判断条件:市级项目且申报金额大于1000万项目状态变为:省级部门联审通过;否则项目状态变为:待预审) - */ - PRE_APPLYING_WITHDRAW(null, null, ProjectStatus.PRE_APPLYING.getCode()), + /** * 部门联审中时被撤回(项目状态进入:预审中) */ diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/filemanage/manage/ProjectFileManage.java b/hz-pm-api/src/main/java/com/hz/pm/api/filemanage/manage/ProjectFileManage.java index c306a1e..e7c47b2 100644 --- a/hz-pm-api/src/main/java/com/hz/pm/api/filemanage/manage/ProjectFileManage.java +++ b/hz-pm-api/src/main/java/com/hz/pm/api/filemanage/manage/ProjectFileManage.java @@ -28,7 +28,7 @@ import com.hz.pm.api.filemanage.model.vo.ProjectFileListVO; import com.hz.pm.api.filemanage.model.vo.ProjectFileVO; import com.hz.pm.api.filemanage.service.INdProjectApplyBorrowService; import com.hz.pm.api.projectdeclared.manage.ConstructionManage; -import com.hz.pm.api.projectdeclared.manage.DefaultDeclaredProjectManage; +import com.hz.pm.api.projectdeclared.manage.DeclaredProjectHelper; import com.hz.pm.api.projectdeclared.manage.FinalAcceptanceManage; import com.hz.pm.api.projectdeclared.manage.PurchaseManage; import com.hz.pm.api.projectdeclared.model.entity.Contract; @@ -106,7 +106,7 @@ public class ProjectFileManage { private final ProjectLibManage projectLibManage; private final UserInfoHelper userInfoHelper; private final ProcessModelManage processModelManage; - private final DefaultDeclaredProjectManage defaultDeclaredProjectManage; + private final DeclaredProjectHelper declaredProjectHelper; private final ProcessInstanceService processInstanceService; private final NoticeManage noticeManage; private final IProjectInstService projectInstService; @@ -262,13 +262,13 @@ public class ProjectFileManage { } ProcessStartParamsVo params = new ProcessStartParamsVo(); - params.setUser(defaultDeclaredProjectManage.buildUser(user)); + params.setUser(declaredProjectHelper.buildUser(user)); params.setProcessUsers(Collections.emptyMap()); // 放入条件判断的项目字段 // 把条件值给放入工作流 - defaultDeclaredProjectManage.buildCondition(params, project); + declaredProjectHelper.buildCondition(params, project); // 获取发起单位、发起单位主管单位、发起单位上级条线主管单位信息 - Map orgModelMap = defaultDeclaredProjectManage.buildOrgModelMapUserOrgCode(project); + Map orgModelMap = declaredProjectHelper.buildOrgModelMapUserOrgCode(project); String instanceId = processInstanceService.newStartProcess(model.getProcessDefId(), model.getFormId(), params, orgModelMap); log.info("申请借阅申报成功 【{}】", instanceId); diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/irs/manage/IrsProjectManage.java b/hz-pm-api/src/main/java/com/hz/pm/api/irs/manage/IrsProjectManage.java index f8cda26..77e3cf2 100644 --- a/hz-pm-api/src/main/java/com/hz/pm/api/irs/manage/IrsProjectManage.java +++ b/hz-pm-api/src/main/java/com/hz/pm/api/irs/manage/IrsProjectManage.java @@ -56,7 +56,6 @@ public class IrsProjectManage { .le(Objects.nonNull(req.getCreateOnMax()), Project::getCreateOn, req.getCreateOnMax()) .like(StringUtils.isNotBlank(req.getProjectName()), Project::getProjectName, req.getProjectName()) .like(StringUtils.isNotBlank(req.getBuildOrgName()), Project::getBuildOrgName, req.getBuildOrgName()) - .gt(Project::getStatus, ProjectStatus.UNDER_CONSTRUCTION.getCode()) .eq(Project::getNewest, Boolean.TRUE) .eq(Project::getIncludeApplication, CommonEnum.YES.getCode()) .orderByDesc(Project::getUpdateOn); diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/meeting/manage/MeetingManage.java b/hz-pm-api/src/main/java/com/hz/pm/api/meeting/manage/MeetingManage.java index c55fd29..ee4ba24 100644 --- a/hz-pm-api/src/main/java/com/hz/pm/api/meeting/manage/MeetingManage.java +++ b/hz-pm-api/src/main/java/com/hz/pm/api/meeting/manage/MeetingManage.java @@ -862,7 +862,7 @@ public class MeetingManage { .eq(Project::getNewest, Boolean.TRUE); switch (MeetingReviewTypeEnum.getByCode(meetingType)) { case PRELIMINARY_SCHEME_REVIEW: - buildOptionProjectQuery(query, meetingType, ProjectStatus.PRE_APPLYING); + buildOptionProjectQuery(query, meetingType, null); break; case CONSTRUCTION_SCHEME_REVIEW: buildOptionProjectQuery(query, meetingType, null); diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/controller/PrequalificationDeclaredController.java b/hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/controller/PrequalificationDeclaredController.java deleted file mode 100644 index 5974fb6..0000000 --- a/hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/controller/PrequalificationDeclaredController.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.hz.pm.api.projectdeclared.controller; - -import javax.servlet.http.HttpServletResponse; - -import com.ningdatech.log.annotation.WebLog; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - -import com.ningdatech.basic.model.PageVo; -import com.hz.pm.api.common.util.ExcelDownUtil; -import com.hz.pm.api.projectdeclared.manage.PrequalificationDeclaredProjectManage; -import com.hz.pm.api.projectdeclared.model.dto.DefaultDeclaredDTO; -import com.hz.pm.api.projectdeclared.model.req.PrequalificationDeclaredListReq; -import com.hz.pm.api.projectlib.model.vo.ProjectLibListItemVO; - -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; - -/** - * @Classname PrequalificationDeclaredController - * @Description 预审申报 - * @Date 2023/2/12 9:03 - * @Author PoffyZhang - */ -@Slf4j -@Validated -@RestController -@RequestMapping("/api/v1/prequalification") -@Api(value = "Prequalification", tags = "申报管理-预审申报") -@RequiredArgsConstructor -public class PrequalificationDeclaredController { - - private final PrequalificationDeclaredProjectManage prequalificationDeclaredProjectManage; - - @ApiOperation(value = "可预审申报项目列表", notes = "可预审申报项目列表") - @GetMapping("/list") - public PageVo list(@Validated @ModelAttribute PrequalificationDeclaredListReq preReq) { - return prequalificationDeclaredProjectManage.pageInfo(preReq); - } - - @ApiOperation(value = "申报预审", notes = "申报预审") - @WebLog("申报预审") - @PostMapping("/start") - public String startTheProcess(@Validated @RequestBody DefaultDeclaredDTO dto) { - return prequalificationDeclaredProjectManage.startTheProcess(dto); - } - - @GetMapping("/export") - @ApiOperation("可预审申报项目列表导出") - @WebLog("可预审申报项目列表导出") - public void exportList(PrequalificationDeclaredListReq preReq, HttpServletResponse response){ - ExcelDownUtil.downXls(response,preReq,prequalificationDeclaredProjectManage::exportList); - } -} diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/manage/ConstructionManage.java b/hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/manage/ConstructionManage.java index d10965a..2417b8c 100644 --- a/hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/manage/ConstructionManage.java +++ b/hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/manage/ConstructionManage.java @@ -32,8 +32,8 @@ import com.hz.pm.api.projectlib.helper.ProjectHelper; import com.hz.pm.api.projectlib.model.entity.Project; import com.hz.pm.api.projectlib.model.entity.ProjectAnnualPaymentPlan; import com.hz.pm.api.projectlib.model.entity.ProjectInst; -import com.hz.pm.api.projectlib.model.enumeration.status.ProjectStatus; import com.hz.pm.api.projectlib.model.enumeration.ProjectTypeNewEnum; +import com.hz.pm.api.projectlib.model.enumeration.status.ProjectStatus; import com.hz.pm.api.projectlib.model.enumeration.status.TenderStatus; import com.hz.pm.api.projectlib.model.enumeration.status.TenderXcfhxApplyStatus; import com.hz.pm.api.projectlib.model.req.ProjectListReq; @@ -88,7 +88,7 @@ public class ConstructionManage { private final ProcessModelManage processModelManage; private final IProjectInstService projectInstService; private final IPaymentPlanService paymentPlanService; - private final DefaultDeclaredProjectManage defaultDeclaredProjectManage; + private final DeclaredProjectHelper declaredProjectHelper; private final IPreInsAcceptancePersonService acceptancePersonService; private final ProcessInstanceService processInstanceService; private final ProjectStateMachineUtil projectStateMachineUtil; @@ -106,7 +106,6 @@ public class ConstructionManage { UserInfoDetails user = LoginUserUtil.loginUserDetail(); LambdaQueryWrapper query = ProjectHelper.projectQuery(req); //建设中状态 - query.eq(Project::getStatus, ProjectStatus.UNDER_CONSTRUCTION.getCode()); query.isNull(Project::getContractAmount); query.eq(Project::getStage, ProjectStatus.PROJECT_APPROVED.getCode()); query.eq(Project::getNewest, Boolean.TRUE); @@ -151,10 +150,6 @@ public class ConstructionManage { public PageVo projectListPerfect(ProjectListReq req) { UserFullInfoDTO user = userInfoHelper.getUserFullInfo(LoginUserUtil.getUserId()); LambdaQueryWrapper query = ProjectHelper.projectQuery(req); - //建设中状态以后的 都是 - query.and(q1 -> q1.gt(Project::getStatus, ProjectStatus.UNDER_CONSTRUCTION.getCode()) - .or(q2 -> q2.eq(Project::getStatus, ProjectStatus.UNDER_CONSTRUCTION.getCode()) - .isNotNull(Project::getContractAmount))); query.eq(Project::getNewest, Boolean.TRUE); //只能看自己单位的 query.eq(Project::getBuildOrgCode, user.getMhUnitIdStr()); @@ -208,7 +203,6 @@ public class ConstructionManage { public void exportList(HttpServletResponse response, ProjectListReq param) { LambdaQueryWrapper query = ProjectHelper.projectQuery(param); //待采购状态 - query.eq(Project::getStatus, ProjectStatus.UNDER_CONSTRUCTION.getCode()); query.isNull(Project::getContractAmount); query.eq(Project::getStage, ProjectStatus.PROJECT_APPROVED.getCode()); query.eq(Project::getNewest, Boolean.TRUE); @@ -422,7 +416,6 @@ public class ConstructionManage { //待采购状态 //只能看自己单位的 query.eq(Project::getBuildOrgCode, user.getMhUnitId()); - query.eq(Project::getStatus, ProjectStatus.UNDER_CONSTRUCTION.getCode()); query.eq(Project::getStage, ProjectStatus.PROJECT_APPROVED.getCode()); query.eq(Project::getNewest, Boolean.TRUE); //交货时间 排序 @@ -576,12 +569,12 @@ public class ConstructionManage { throw BizException.wrap("找不到信创审批流程配置"); } ProcessStartParamsVo processParam = new ProcessStartParamsVo(); - processParam.setUser(defaultDeclaredProjectManage.buildUser(user)); + processParam.setUser(declaredProjectHelper.buildUser(user)); processParam.setProcessUsers(Collections.emptyMap()); processParam.setFormData(Collections.emptyMap()); // 获取发起单位、发起单位主管单位、发起单位上级主管条线单位信息 Project project = projectService.getById(req.getProjectId()); - Map orgMap = defaultDeclaredProjectManage.buildOrgModelMap(user.getUserId(), project); + Map orgMap = declaredProjectHelper.buildOrgModelMap(user.getUserId(), project); String instanceId = processInstanceService.startProcessLs(model, processParam, orgMap); ProjectInst projectInst = new ProjectInst(); diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/manage/DeclaredProjectHelper.java b/hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/manage/DeclaredProjectHelper.java new file mode 100644 index 0000000..6233de3 --- /dev/null +++ b/hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/manage/DeclaredProjectHelper.java @@ -0,0 +1,357 @@ +package com.hz.pm.api.projectdeclared.manage; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.lang.Assert; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.TypeReference; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.google.common.collect.Maps; +import com.hz.pm.api.common.enumeration.CommonEnum; +import com.hz.pm.api.common.helper.UserInfoHelper; +import com.hz.pm.api.common.model.constant.BizConst; +import com.hz.pm.api.common.model.constant.RegionConst; +import com.hz.pm.api.common.model.constant.TypeReferenceConst; +import com.hz.pm.api.projectdeclared.model.dto.DefaultDeclaredDTO; +import com.hz.pm.api.projectdeclared.model.dto.ProjectConditionDTO; +import com.hz.pm.api.projectdeclared.model.po.DeclaredProjectStatisticsPO; +import com.hz.pm.api.projectdeclared.service.IDeclaredStatisticsService; +import com.hz.pm.api.projectlib.model.dto.ProjectDTO; +import com.hz.pm.api.projectlib.model.dto.ProjectPaymentPlanDTO; +import com.hz.pm.api.projectlib.model.entity.Project; +import com.hz.pm.api.projectlib.service.IProjectService; +import com.hz.pm.api.user.security.model.UserFullInfoDTO; +import com.hz.pm.api.user.security.model.UserInfoDetails; +import com.ningdatech.basic.function.VUtils; +import com.wflow.bean.entity.WflowModels; +import com.wflow.bean.entity.WflowOrgModels; +import com.wflow.enums.OrgTypeEnum; +import com.wflow.enums.ProcessDefTypeEnum; +import com.wflow.exception.BusinessException; +import com.wflow.service.OrgProcdefService; +import com.wflow.workflow.bean.dto.OrgInfoDTO; +import com.wflow.workflow.bean.dto.ProcessInstanceUserDto; +import com.wflow.workflow.bean.vo.ProcessStartParamsVo; +import com.wflow.workflow.service.ProcessModelService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Component; + +import java.math.BigDecimal; +import java.util.*; +import java.util.stream.Collectors; + +/** + * @Classname DefaultDeclaredProjectManage + * @Description + * @Date 2023/2/14 17:12 + * @Author PoffyZhang + */ +@Component +@Slf4j +@RequiredArgsConstructor +public class DeclaredProjectHelper { + + private final IProjectService projectService; + private final UserInfoHelper userInfoHelper; + private final ProcessModelService processModelService; + private final OrgProcdefService orgProcdefService; + private final IDeclaredStatisticsService statisticsService; + + /** + * 公共的发起流程方法 + */ + public void startProcess(ProjectDTO projectDTO, UserFullInfoDTO user, Integer processType) { + WflowModels model = processModelService.getOne(Wrappers.lambdaQuery(WflowModels.class) + .eq(WflowModels::getProcessType, processType) + .last(BizConst.LIMIT_1)); + + if (Objects.isNull(model)) { + throw new BusinessException("找不到对应流程配置"); + } + + ProcessStartParamsVo params = new ProcessStartParamsVo(); + params.setUser(buildUser(user)); + params.setProcessUsers(Collections.emptyMap()); + //放入条件判断的项目字段 + ProjectConditionDTO conditionDto = new ProjectConditionDTO(); + BeanUtils.copyProperties(projectDTO, conditionDto); + Map formData = Maps.newHashMap(); + formData.putAll(JSON.parseObject(JSON.toJSONString(conditionDto), TypeReferenceConst.STR_OBJ_MAP)); + params.setFormData(formData); + + } + + //项目名称去重 + public void checkDuplication(ProjectDTO project) { + VUtils.isTrue(projectService.count(Wrappers.lambdaQuery(Project.class) + .eq(Project::getProjectName, project.getProjectName()) + .eq(Project::getNewest, Boolean.TRUE) + .ne(Objects.nonNull(project.getProjectCode()), Project::getProjectCode, project.getProjectCode())) > 0) + .throwMessage(String.format("修改失败 此项目名 【%s】 已存在!", project.getProjectName())); + } + + public void checkAmount(ProjectDTO projectInfo) { + if (Objects.nonNull(projectInfo.getDeclareAmount())) { + BigDecimal declareAmount = projectInfo.getDeclareAmount(); + BigDecimal govSuperFinanceAmount = projectInfo.getDeclareGovSuperiorFinanceAmount(); + BigDecimal govOwnFinanceAmount = projectInfo.getDeclareGovOwnFinanceAmount(); + BigDecimal bankLendingAmount = projectInfo.getDeclareBankLendingAmount(); + BigDecimal haveAmount = projectInfo.getDeclareHaveAmount(); + BigDecimal otherAmount = projectInfo.getDeclareOtherAmount(); + BigDecimal totalAmount = govSuperFinanceAmount + .add(govOwnFinanceAmount).add(bankLendingAmount).add(haveAmount).add(otherAmount); + VUtils.isTrue(declareAmount.compareTo(totalAmount) != 0) + .throwMessage(String.format("申报失败! 申报总金额【%s】 不等于其它申报金额 【%s】", declareAmount, totalAmount)); + + //判断 年度计划金额 如果开着的话 + if (CollUtil.isNotEmpty(projectInfo.getPaymentPlanList())) { + for (ProjectPaymentPlanDTO paymentPlan : projectInfo.getPaymentPlanList()) { + BigDecimal annualPlanAmount = paymentPlan.getAnnualPlanAmount(); + + VUtils.isTrue(annualPlanAmount.compareTo(BigDecimal.ZERO) <= 0) + .throwMessage(String.format("申报失败! 年度支付总金额【%s】 不能小于等于0", annualPlanAmount)); + VUtils.isTrue(annualPlanAmount.compareTo(declareAmount) > 0) + .throwMessage(String.format("申报失败! 年度支付总金额【%s】 不能大于申报金额 【%s】", annualPlanAmount, declareAmount)); + + BigDecimal annualGovSuperAmount = paymentPlan.getAnnualPlanGovSuperiorFinanceAmount(); + BigDecimal annualOwnSuperAmount = paymentPlan.getAnnualPlanGovOwnFinanceAmount(); + BigDecimal annualHaveAmount = paymentPlan.getAnnualPlanHaveAmount(); + BigDecimal totalAnnual = annualGovSuperAmount.add(annualOwnSuperAmount).add(annualHaveAmount); + VUtils.isTrue(annualPlanAmount.compareTo(totalAnnual) != 0) + .throwMessage(String.format("申报失败! 年度支付总金额【%s】 不等于其它年度支付金额 【%s】", annualPlanAmount, totalAnnual)); + + } + } + } + } + + public ProcessInstanceUserDto buildUser(UserFullInfoDTO user) { + return ProcessInstanceUserDto.builder() + .userId(user.getUserIdStr()) + .userName(user.getRealName()) + .orgCode(user.getMhUnitIdStr()) + .orgName(user.getMhUnitName()) + .build(); + } + + public ProcessInstanceUserDto buildUser(Long userId) { + UserFullInfoDTO user = userInfoHelper.getUserFullInfo(userId); + Assert.notNull(user, "【%s】获取不到用户!", userId); + return buildUser(user); + } + + public ProcessInstanceUserDto buildUser(UserInfoDetails user) { + return ProcessInstanceUserDto.builder() + .userId(user.getUserIdStr()) + .userName(user.getRealName()) + .orgCode(user.getMhUnitIdStr()) + .orgName(user.getMhUnitName()) + .build(); + } + + public Map buildOrgModelMap(Long userId, Project project) { + Map orgMap = new HashMap<>(); + + // 查出所有的单位流程配置 + List orgModelsList = orgProcdefService.list(); + + UserFullInfoDTO userFullInfo = userInfoHelper.getUserFullInfo(userId); + if (Objects.isNull(userFullInfo)) { + log.warn("取不到员工 返回空map"); + return Collections.emptyMap(); + } + + String startOrgCode = userFullInfo.getMhUnitIdStr(); + String startOrgName = userFullInfo.getMhUnitName(); + String startOrgParentCode; + String startOrgParentName; + // 如果申报时 上级主管单位,由该单位自己审核 + if (CommonEnum.NO.getCode().equals(project.getIsSuperOrg())) { + startOrgParentCode = startOrgCode; + startOrgParentName = startOrgName; + } else { + startOrgParentCode = project.getSuperOrgCode(); + startOrgParentName = project.getSuperOrg(); + } + //查询 当前发起人及主管单位所在区域的 单位流程配置 + OrgInfoDTO startOrgInfoDto = new OrgInfoDTO(); + startOrgInfoDto.setOrganizationCode(startOrgCode); + startOrgInfoDto.setOrganizationName(startOrgName); + + startOrgInfoDto.setOrgModelMap(orgModelsList.stream() + .filter(v -> v.getOrgCode().equals(startOrgCode) + && Boolean.FALSE.equals(v.getIsDelete()) + && (ProcessDefTypeEnum.SEAL.name().equals(v.getType()) || + ProcessDefTypeEnum.JOINT_REVIEW.name().equals(v.getType()) || + ProcessDefTypeEnum.DEFAULT.name().equals(v.getType()))) + .collect(Collectors.toMap(WflowOrgModels::getType, v -> v))); + + OrgInfoDTO parentOrgInfoDto = new OrgInfoDTO(); + parentOrgInfoDto.setOrganizationCode(startOrgParentCode); + parentOrgInfoDto.setOrganizationName(startOrgParentName); + parentOrgInfoDto.setOrgModelMap(orgModelsList.stream() + .filter(v -> v.getOrgCode().equals(startOrgParentCode) + && Boolean.FALSE.equals(v.getIsDelete()) + && (ProcessDefTypeEnum.SEAL.name().equals(v.getType()) || + ProcessDefTypeEnum.JOINT_REVIEW.name().equals(v.getType()) || + ProcessDefTypeEnum.DEFAULT.name().equals(v.getType()))) + .collect(Collectors.toMap(WflowOrgModels::getType, v -> v))); + + orgMap.put(OrgTypeEnum.TARGET_OWNER.name(), startOrgInfoDto); + orgMap.put(OrgTypeEnum.TARGET_MANAGEMENT.name(), parentOrgInfoDto); + + // 如果是指定单位,直接根据流程定义ID放入map + OrgInfoDTO orgInfoDTO = new OrgInfoDTO(); + orgInfoDTO.setOrgModelMap(orgModelsList.stream() + .collect(Collectors.toMap(WflowOrgModels::getProcessDefId, v -> v))); + orgMap.put(OrgTypeEnum.TARGET_LABEL.name(), orgInfoDTO); + + //如果有上级条线主管单位 并且 不是市本级 + if (!RegionConst.RC_HZ.equals(project.getAreaCode()) && + CommonEnum.YES.getCode().equals(project.getIsHigherSuperOrg())) { + OrgInfoDTO parentLineOrgInfoDto = new OrgInfoDTO(); + parentLineOrgInfoDto.setOrganizationCode(project.getHigherSuperOrgCode()); + parentLineOrgInfoDto.setOrganizationName(project.getHigherSuperOrg()); + parentLineOrgInfoDto.setOrgModelMap(orgModelsList.stream() + .filter(v -> v.getOrgCode().equals(project.getHigherSuperOrgCode()) + && Boolean.FALSE.equals(v.getIsDelete()) + && (ProcessDefTypeEnum.SEAL.name().equals(v.getType()) || + ProcessDefTypeEnum.JOINT_REVIEW.name().equals(v.getType()) || + ProcessDefTypeEnum.DEFAULT.name().equals(v.getType()))) + .collect(Collectors.toMap(WflowOrgModels::getType, v -> v))); + + orgMap.put(OrgTypeEnum.TARGET_LINE_MANAGEMENT.name(), parentLineOrgInfoDto); + } + return orgMap; + } + + public Map buildOrgModelMapUserOrgCode(Project project) { + Map orgMap = new HashMap<>(); + + // 查出所有的单位流程配置 + List orgModelsList = orgProcdefService.list(); + + String startOrgCode = project.getBuildOrgCode(); + String startOrgName = project.getBuildOrgName(); + String startOrgParentCode; + String startOrgParentName; + // 如果申报时 上级主管单位,由该单位自己审核 + if (CommonEnum.NO.getCode().equals(project.getIsSuperOrg())) { + startOrgParentCode = startOrgCode; + startOrgParentName = startOrgName; + } else { + startOrgParentCode = project.getSuperOrgCode(); + startOrgParentName = project.getSuperOrg(); + } + //查询 当前发起人及主管单位所在区域的 单位流程配置 + OrgInfoDTO startOrgInfoDto = new OrgInfoDTO(); + startOrgInfoDto.setOrganizationCode(startOrgCode); + startOrgInfoDto.setOrganizationName(startOrgName); + + startOrgInfoDto.setOrgModelMap(orgModelsList.stream() + .filter(v -> v.getOrgCode().equals(startOrgCode) + && Boolean.FALSE.equals(v.getIsDelete()) + && (ProcessDefTypeEnum.SEAL.name().equals(v.getType()) || + ProcessDefTypeEnum.JOINT_REVIEW.name().equals(v.getType()) || + ProcessDefTypeEnum.DEFAULT.name().equals(v.getType()))) + .collect(Collectors.toMap(WflowOrgModels::getType, v -> v))); + + OrgInfoDTO parentOrgInfoDto = new OrgInfoDTO(); + parentOrgInfoDto.setOrganizationCode(startOrgParentCode); + parentOrgInfoDto.setOrganizationName(startOrgParentName); + parentOrgInfoDto.setOrgModelMap(orgModelsList.stream() + .filter(v -> v.getOrgCode().equals(startOrgParentCode) + && Boolean.FALSE.equals(v.getIsDelete()) + && (ProcessDefTypeEnum.SEAL.name().equals(v.getType()) || + ProcessDefTypeEnum.JOINT_REVIEW.name().equals(v.getType()) || + ProcessDefTypeEnum.DEFAULT.name().equals(v.getType()))) + .collect(Collectors.toMap(WflowOrgModels::getType, v -> v))); + + orgMap.put(OrgTypeEnum.TARGET_OWNER.name(), startOrgInfoDto); + orgMap.put(OrgTypeEnum.TARGET_MANAGEMENT.name(), parentOrgInfoDto); + + // 如果是指定单位,直接根据流程定义ID放入map + OrgInfoDTO orgInfoDTO = new OrgInfoDTO(); + orgInfoDTO.setOrgModelMap(orgModelsList.stream() + .collect(Collectors.toMap(WflowOrgModels::getProcessDefId, v -> v))); + orgMap.put(OrgTypeEnum.TARGET_LABEL.name(), orgInfoDTO); + + //如果有上级条线主管单位 并且 不是市本级 + if (!RegionConst.RC_HZ.equals(project.getAreaCode()) && + CommonEnum.YES.getCode().equals(project.getIsHigherSuperOrg())) { + OrgInfoDTO parentLineOrgInfoDto = new OrgInfoDTO(); + parentLineOrgInfoDto.setOrganizationCode(project.getHigherSuperOrgCode()); + parentLineOrgInfoDto.setOrganizationName(project.getHigherSuperOrg()); + parentLineOrgInfoDto.setOrgModelMap(orgModelsList.stream() + .filter(v -> v.getOrgCode().equals(project.getHigherSuperOrgCode()) + && Boolean.FALSE.equals(v.getIsDelete()) + && (ProcessDefTypeEnum.SEAL.name().equals(v.getType()) || + ProcessDefTypeEnum.JOINT_REVIEW.name().equals(v.getType()) || + ProcessDefTypeEnum.DEFAULT.name().equals(v.getType()))) + .collect(Collectors.toMap(WflowOrgModels::getType, v -> v))); + + orgMap.put(OrgTypeEnum.TARGET_LINE_MANAGEMENT.name(), parentLineOrgInfoDto); + } + return orgMap; + } + + //根据提交者的单位 + public DeclaredProjectStatisticsPO declaredProjectOrgStatistics(Integer year, UserFullInfoDTO user) { + //查此人建设单位的项目 + return statisticsService.getOrgStatistics(user.getMhUnitIdStr(), year); + } + + //根据提交者的区域 他是区管或者超管 + public DeclaredProjectStatisticsPO declaredProjectRegionStatistics(Integer year, UserFullInfoDTO user) { + //查此人建设单位的项目 + return statisticsService.getRegionStatistics(null, year); + } + + /** + * 把条件值放入工作流 用于判断条件 根据dto + * + * @param params + * @param dto + */ + public void buildCondition(ProcessStartParamsVo params, DefaultDeclaredDTO dto) { + //放入条件判断的项目字段 + ProjectConditionDTO conditionDto = new ProjectConditionDTO(); + BeanUtils.copyProperties(dto.getProjectInfo(), conditionDto); + dto.getFormData().putAll( + JSON.parseObject(JSON.toJSONString(conditionDto), new TypeReference>() { + }) + ); + params.setFormData(dto.getFormData()); + } + + /** + * 把条件值放入工作流 用于判断条件 根据d项目实体 + * + * @param params + * @param projectInfo + */ + public void buildCondition(ProcessStartParamsVo params, Project projectInfo) { + //放入条件判断的项目字段 + ProjectConditionDTO conditionDto = new ProjectConditionDTO(); + BeanUtils.copyProperties(projectInfo, conditionDto); + params.setFormData(JSON.parseObject(JSON.toJSONString(conditionDto), new TypeReference>() { + })); + } + + public void buildCondition(ProcessStartParamsVo params, Project projectInfo, DefaultDeclaredDTO dto) { + //放入条件判断的项目字段 优先取dto的 再取项目的 + ProjectDTO projInfo = dto.getProjectInfo(); + ProjectConditionDTO condition = new ProjectConditionDTO(); + condition.setProjectId(projectInfo.getId()); + condition.setDeclareAmount(Objects.nonNull(projInfo.getDeclareAmount()) + ? projInfo.getDeclareAmount() : projectInfo.getDeclareAmount()); + condition.setIsDigitalReform(Objects.nonNull(projInfo.getIsDigitalReform()) + ? projInfo.getIsDigitalReform() : projectInfo.getIsDigitalReform()); + condition.setIsTemporaryAugment(Objects.nonNull(projInfo.getIsTemporaryAugment()) + ? projInfo.getIsTemporaryAugment() : projectInfo.getIsTemporaryAugment()); + condition.setBizDomain(Objects.nonNull(projInfo.getBizDomain()) + ? projInfo.getBizDomain() : projectInfo.getBizDomain()); + params.setFormData(JSON.parseObject(JSON.toJSONString(condition), TypeReferenceConst.STR_OBJ_MAP)); + } +} diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/manage/DeclaredProjectManage.java b/hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/manage/DeclaredProjectManage.java index a3e6f82..78043ce 100644 --- a/hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/manage/DeclaredProjectManage.java +++ b/hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/manage/DeclaredProjectManage.java @@ -29,8 +29,8 @@ import com.hz.pm.api.projectlib.model.dto.ProjectDTO; import com.hz.pm.api.projectlib.model.dto.ProjectPaymentPlanDTO; import com.hz.pm.api.projectlib.model.entity.Project; import com.hz.pm.api.projectlib.model.entity.ProjectApplication; -import com.hz.pm.api.projectlib.model.enumeration.status.ProjectStatus; import com.hz.pm.api.projectlib.model.enumeration.ProjectTypeNewEnum; +import com.hz.pm.api.projectlib.model.enumeration.status.ProjectStatus; import com.hz.pm.api.projectlib.model.req.ProjectListReq; import com.hz.pm.api.projectlib.model.vo.ProjectLibListItemVO; import com.hz.pm.api.projectlib.service.IProjectService; @@ -88,7 +88,7 @@ public class DeclaredProjectManage { private final IProjectDraftService projectDraftService; private final ProcessInstanceService processService; private final ProcessModelManage processModelManage; - private final DefaultDeclaredProjectManage declaredProjectManage; + private final DeclaredProjectHelper declaredProjectHelper; private final NoticeManage noticeManage; private final UserInfoHelper userInfoHelper; private final MhUnitCache mhUnitCache; @@ -103,41 +103,40 @@ public class DeclaredProjectManage { public synchronized String startTheProcess(DefaultDeclaredDTO req) { UserInfoDetails user = LoginUserUtil.loginUserDetail(); - WflowModels model = processModelManage.getWflowModels(ProjectProcessStageEnum.ORG_INTERNAL_APPROVAL_PROCESS, + WflowModels model = processModelManage.getWflowModels(ProjectProcessStageEnum.COMPLIANCE_REVIEW, user.getMhUnitId()); if (Objects.isNull(model)) { throw BizException.wrap("找不到单位流程配置"); } - ProjectDTO projectInfo = req.getProjectInfo(); - - projectInfo.setBuildOrgCode(user.getMhUnitIdStr()); - projectInfo.setBuildOrgName(user.getMhUnitName()); + ProjectDTO reqProj = req.getProjectInfo(); + reqProj.setBuildOrgCode(user.getMhUnitIdStr()); + reqProj.setBuildOrgName(user.getMhUnitName()); //项目名称去重 - declaredProjectManage.checkDuplication(projectInfo); + declaredProjectHelper.checkDuplication(reqProj); //判断申报金额 是否等于总的 判断年度支付金额 是否等于总金额 - declaredProjectManage.checkAmount(projectInfo); + declaredProjectHelper.checkAmount(reqProj); //写死 是否有主管单位 - projectInfo.setIsHigherSuperOrg(CommonEnum.YES.getCode()); - projectInfo.setIsSuperOrg(CommonEnum.YES.getCode()); + reqProj.setIsHigherSuperOrg(CommonEnum.YES.getCode()); + reqProj.setIsSuperOrg(CommonEnum.YES.getCode()); //如果主管单位没有 那么主管单位就是自己 - if (CommonEnum.NO.getCode().equals(projectInfo.getIsSuperOrg())) { - projectInfo.setSuperOrgCode(user.getMhUnitIdStr()); - projectInfo.setSuperOrg(user.getMhUnitName()); + if (CommonEnum.NO.eq(reqProj.getIsSuperOrg())) { + reqProj.setSuperOrgCode(user.getMhUnitIdStr()); + reqProj.setSuperOrg(user.getMhUnitName()); } //如果是重新提交的话 判断下 项目是否存在 - if (Objects.nonNull(projectInfo.getId())) { + if (Objects.nonNull(reqProj.getId())) { //新申报的项目不允许带项目id - projectInfo.setId(null); + reqProj.setId(null); } ProcessStartParamsVo params = new ProcessStartParamsVo(); - params.setUser(declaredProjectManage.buildUser(user)); + params.setUser(declaredProjectHelper.buildUser(user)); params.setProcessUsers(Collections.emptyMap()); //放入条件判断的项目字段 ProjectConditionDTO conditionDto = new ProjectConditionDTO(); @@ -147,20 +146,19 @@ public class DeclaredProjectManage { }) ); params.setFormData(req.getFormData()); - //开始申报 // 获取发起单位、发起单位主管单位、发起单位上级主管条线单位信息 Project project = new Project(); - BeanUtils.copyProperties(projectInfo, project); - Map orgModelMap = declaredProjectManage.buildOrgModelMap(user.getUserId(), project); + BeanUtils.copyProperties(reqProj, project); + Map orgModelMap = declaredProjectHelper.buildOrgModelMap(user.getUserId(), project); String instanceId = processService.startProcessLs(model, params, orgModelMap); log.info("申报项目成功 【{}】", instanceId); //如果是重新提交的话 判断下 项目是否存在 //保存项目相关 - Project buildProject = projectLibManage.saveProjectInDeclared(projectInfo, instanceId, user.getUserId()); - if (Objects.nonNull(projectInfo.getDraftId())) { + Project buildProject = projectLibManage.saveProjectInDeclared(reqProj, instanceId, user.getUserId()); + if (Objects.nonNull(reqProj.getDraftId())) { //如果是草稿箱提交 删除对应的草稿箱 - projectDraftService.removeById(projectInfo.getDraftId()); + projectDraftService.removeById(reqProj.getDraftId()); } //发送给第一个审批人消息 @@ -174,25 +172,25 @@ public class DeclaredProjectManage { /** * 重新提交 启动实例 * - * @param dto + * @param req * @return */ @Transactional(rollbackFor = Exception.class) - public synchronized String reStartTheProcess(DefaultDeclaredDTO dto) { + public synchronized String reStartTheProcess(DefaultDeclaredDTO req) { UserInfoDetails user = LoginUserUtil.loginUserDetail(); - ProjectDTO projectDto = dto.getProjectInfo(); - projectDto.setBuildOrgCode(user.getMhUnitIdStr()); - projectDto.setBuildOrgName(user.getMhUnitName()); + ProjectDTO reqProj = req.getProjectInfo(); + reqProj.setBuildOrgCode(user.getMhUnitIdStr()); + reqProj.setBuildOrgName(user.getMhUnitName()); - VUtils.isTrue(Objects.isNull(projectDto.getId())).throwMessage("提交失败 缺少项目ID!"); - Project projectInfo = projectService.getById(projectDto.getId()); + VUtils.isTrue(Objects.isNull(reqProj.getId())).throwMessage("提交失败 缺少项目ID!"); + Project projectInfo = projectService.getById(reqProj.getId()); VUtils.isTrue(Objects.isNull(projectInfo)).throwMessage("提交失败 此项目不存在!"); //项目名称去重 - if (StringUtils.isNotBlank(projectDto.getProjectName()) && - !projectDto.getProjectName().equals(projectInfo.getProjectName())) { - projectDto.setProjectCode(projectInfo.getProjectCode()); - declaredProjectManage.checkDuplication(projectDto); + if (StringUtils.isNotBlank(reqProj.getProjectName()) && + !reqProj.getProjectName().equals(projectInfo.getProjectName())) { + reqProj.setProjectCode(projectInfo.getProjectCode()); + declaredProjectHelper.checkDuplication(reqProj); } //写死 是否有主管单位 @@ -200,17 +198,17 @@ public class DeclaredProjectManage { projectInfo.setIsSuperOrg(CommonEnum.YES.getCode()); //如果主管单位没有 那么主管单位就是自己 - if (CommonEnum.NO.getCode().equals(projectDto.getIsSuperOrg())) { + if (CommonEnum.NO.getCode().equals(reqProj.getIsSuperOrg())) { projectInfo.setSuperOrgCode(user.getMhUnitIdStr()); projectInfo.setSuperOrg(user.getMhUnitName()); - projectDto.setSuperOrgCode(user.getMhUnitIdStr()); - projectDto.setSuperOrg(user.getMhUnitName()); + reqProj.setSuperOrgCode(user.getMhUnitIdStr()); + reqProj.setSuperOrg(user.getMhUnitName()); } //判断申报金额 是否等于总的 判断年度支付金额 是否等于总金额 - declaredProjectManage.checkAmount(projectDto); + declaredProjectHelper.checkAmount(reqProj); - WflowModels model = processModelManage.getWflowModels(ProjectProcessStageEnum.ORG_INTERNAL_APPROVAL_PROCESS, + WflowModels model = processModelManage.getWflowModels(ProjectProcessStageEnum.COMPLIANCE_REVIEW, user.getMhUnitId()); if (Objects.isNull(model)) { @@ -218,32 +216,34 @@ public class DeclaredProjectManage { } //首先要判断 项目当前状态 是不是 单位内部拒绝 - VUtils.isTrue(!ProjectStatus.UNDER_INTERNAL_AUDIT_NOT_PASS.getCode().equals(projectInfo.getStatus()) || - !ProjectStatus.NOT_APPROVED.getCode().equals(projectInfo.getStage())) + VUtils.isTrue(!ProjectStatus.COMPLIANCE_REVIEW_FAILED.eq(projectInfo.getStatus()) || + !ProjectStatus.NOT_APPROVED.eq(projectInfo.getStage())) .throwMessage("提交失败 该项目不是 单位内部拒绝审核状态或者未立项阶段"); - ProcessStartParamsVo params = new ProcessStartParamsVo(); - params.setUser(declaredProjectManage.buildUser(user)); - params.setProcessUsers(Collections.emptyMap()); + ProcessStartParamsVo instParam = new ProcessStartParamsVo(); + instParam.setUser(declaredProjectHelper.buildUser(user)); + instParam.setProcessUsers(Collections.emptyMap()); //把条件值给放入工作流 - declaredProjectManage.buildCondition(params, dto); + declaredProjectHelper.buildCondition(instParam, req); // 获取发起单位、发起单位主管单位、发起单位上级主管条线单位信息 Project project = new Project(); - BeanUtils.copyProperties(projectDto, project); - Map orgModelMap = declaredProjectManage.buildOrgModelMap(user.getUserId(), project); - String instanceId = processService.startProcessLs(model, params, orgModelMap); - log.info("重新申报项目成功 【{}】", instanceId); + BeanUtils.copyProperties(reqProj, project); + Map orgModelMap = declaredProjectHelper.buildOrgModelMap(user.getUserId(), project); + String instId = processService.startProcessLs(model, instParam, orgModelMap); + log.info("重新申报项目成功 【{}】", instId); //保存项目相关 - Project buildProject = projectLibManage.saveProjectInDeclared(projectDto, instanceId, user.getUserId()); + Project buildProject = projectLibManage.saveProjectInDeclared(reqProj, instId, + user.getUserId(), ProjectStatus.NOT_APPROVED, ProjectStatus.COMPLIANCE_REVIEW_FAILED, + ProjectProcessStageEnum.COMPLIANCE_REVIEW); //发送给第一个审批人消息 - noticeManage.sendFirstUser(buildProject, model.getFormName(), instanceId, + noticeManage.sendFirstUser(buildProject, model.getFormName(), instId, WorkNoticeConst.PASS_MSG_TEMPLATE, MsgTypeEnum.PROJECT_REVIEW); - return instanceId; + return instId; } public PageVo pageDraft(DeclaredProjectListParamDTO req, Integer draftType) { @@ -370,8 +370,7 @@ public class DeclaredProjectManage { //如果当前登录是单位管理员 String mhUnitId = user.getMhUnitIdStr(); if (user.getIsOrgAdmin()) { - query.and(s1 -> s1.eq(Project::getStatus, ProjectStatus.PREQUALIFICATION_FAILED.getCode()) - .eq(Project::getSuperOrgCode, mhUnitId) + query.and(s1 -> s1.eq(Project::getSuperOrgCode, mhUnitId) .or(q2 -> q2.eq(Project::getBuildOrgCode, mhUnitId))); } else { //否则 只能看到 非预审 并且 diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/manage/DefaultDeclaredProjectManage.java b/hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/manage/DefaultDeclaredProjectManage.java deleted file mode 100644 index 7a49998..0000000 --- a/hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/manage/DefaultDeclaredProjectManage.java +++ /dev/null @@ -1,360 +0,0 @@ -package com.hz.pm.api.projectdeclared.manage; - -import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.lang.Assert; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.TypeReference; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import com.google.common.collect.Maps; -import com.hz.pm.api.common.enumeration.CommonEnum; -import com.hz.pm.api.common.helper.UserInfoHelper; -import com.hz.pm.api.common.model.constant.BizConst; -import com.hz.pm.api.common.model.constant.RegionConst; -import com.hz.pm.api.common.model.constant.TypeReferenceConst; -import com.hz.pm.api.projectdeclared.model.dto.DefaultDeclaredDTO; -import com.hz.pm.api.projectdeclared.model.dto.ProjectConditionDTO; -import com.hz.pm.api.projectdeclared.model.po.DeclaredProjectStatisticsPO; -import com.hz.pm.api.projectdeclared.service.IDeclaredStatisticsService; -import com.hz.pm.api.projectlib.model.dto.ProjectDTO; -import com.hz.pm.api.projectlib.model.dto.ProjectPaymentPlanDTO; -import com.hz.pm.api.projectlib.model.entity.Project; -import com.hz.pm.api.projectlib.service.IProjectService; -import com.hz.pm.api.user.security.model.UserFullInfoDTO; -import com.hz.pm.api.user.security.model.UserInfoDetails; -import com.ningdatech.basic.function.VUtils; -import com.wflow.bean.entity.WflowModels; -import com.wflow.bean.entity.WflowOrgModels; -import com.wflow.enums.OrgTypeEnum; -import com.wflow.enums.ProcessDefTypeEnum; -import com.wflow.exception.BusinessException; -import com.wflow.service.OrgProcdefService; -import com.wflow.workflow.bean.dto.OrgInfoDTO; -import com.wflow.workflow.bean.dto.ProcessInstanceUserDto; -import com.wflow.workflow.bean.vo.ProcessStartParamsVo; -import com.wflow.workflow.service.ProcessModelService; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.BeanUtils; -import org.springframework.stereotype.Component; - -import java.math.BigDecimal; -import java.util.*; -import java.util.stream.Collectors; - -/** - * @Classname DefaultDeclaredProjectManage - * @Description - * @Date 2023/2/14 17:12 - * @Author PoffyZhang - */ -@Component -@Slf4j -@RequiredArgsConstructor -public class DefaultDeclaredProjectManage { - - private final IProjectService projectService; - - private final UserInfoHelper userInfoHelper; - - private final ProcessModelService processModelService; - private final OrgProcdefService orgProcdefService; - - private final IDeclaredStatisticsService statisticsService; - - /** - * 公共的发起流程方法 - */ - public void startProcess(ProjectDTO projectDTO, UserFullInfoDTO user, Integer processType) { - WflowModels model = processModelService.getOne(Wrappers.lambdaQuery(WflowModels.class) - .eq(WflowModels::getProcessType, processType) - .last(BizConst.LIMIT_1)); - - if (Objects.isNull(model)) { - throw new BusinessException("找不到对应流程配置"); - } - - ProcessStartParamsVo params = new ProcessStartParamsVo(); - params.setUser(buildUser(user)); - params.setProcessUsers(Collections.emptyMap()); - //放入条件判断的项目字段 - ProjectConditionDTO conditionDto = new ProjectConditionDTO(); - BeanUtils.copyProperties(projectDTO, conditionDto); - Map formData = Maps.newHashMap(); - formData.putAll(JSON.parseObject(JSON.toJSONString(conditionDto), TypeReferenceConst.STR_OBJ_MAP)); - params.setFormData(formData); - - } - - //项目名称去重 - public void checkDuplication(ProjectDTO project) { - VUtils.isTrue(projectService.count(Wrappers.lambdaQuery(Project.class) - .eq(Project::getProjectName, project.getProjectName()) - .eq(Project::getNewest, Boolean.TRUE) - .ne(Objects.nonNull(project.getProjectCode()), Project::getProjectCode, project.getProjectCode())) > 0) - .throwMessage(String.format("修改失败 此项目名 【%s】 已存在!", project.getProjectName())); - } - - public void checkAmount(ProjectDTO projectInfo) { - if (Objects.nonNull(projectInfo.getDeclareAmount())) { - BigDecimal declareAmount = projectInfo.getDeclareAmount(); - BigDecimal govSuperFinanceAmount = projectInfo.getDeclareGovSuperiorFinanceAmount(); - BigDecimal govOwnFinanceAmount = projectInfo.getDeclareGovOwnFinanceAmount(); - BigDecimal bankLendingAmount = projectInfo.getDeclareBankLendingAmount(); - BigDecimal haveAmount = projectInfo.getDeclareHaveAmount(); - BigDecimal otherAmount = projectInfo.getDeclareOtherAmount(); - BigDecimal totalAmount = govSuperFinanceAmount - .add(govOwnFinanceAmount).add(bankLendingAmount).add(haveAmount).add(otherAmount); - VUtils.isTrue(declareAmount.compareTo(totalAmount) != 0) - .throwMessage(String.format("申报失败! 申报总金额【%s】 不等于其它申报金额 【%s】", declareAmount, totalAmount)); - - //判断 年度计划金额 如果开着的话 - if (CollUtil.isNotEmpty(projectInfo.getPaymentPlanList())) { - for (ProjectPaymentPlanDTO paymentPlan : projectInfo.getPaymentPlanList()) { - BigDecimal annualPlanAmount = paymentPlan.getAnnualPlanAmount(); - - VUtils.isTrue(annualPlanAmount.compareTo(BigDecimal.ZERO) <= 0) - .throwMessage(String.format("申报失败! 年度支付总金额【%s】 不能小于等于0", annualPlanAmount)); - VUtils.isTrue(annualPlanAmount.compareTo(declareAmount) > 0) - .throwMessage(String.format("申报失败! 年度支付总金额【%s】 不能大于申报金额 【%s】", annualPlanAmount, declareAmount)); - - BigDecimal annualGovSuperAmount = paymentPlan.getAnnualPlanGovSuperiorFinanceAmount(); - BigDecimal annualOwnSuperAmount = paymentPlan.getAnnualPlanGovOwnFinanceAmount(); - BigDecimal annualHaveAmount = paymentPlan.getAnnualPlanHaveAmount(); - BigDecimal totalAnnual = annualGovSuperAmount.add(annualOwnSuperAmount).add(annualHaveAmount); - VUtils.isTrue(annualPlanAmount.compareTo(totalAnnual) != 0) - .throwMessage(String.format("申报失败! 年度支付总金额【%s】 不等于其它年度支付金额 【%s】", annualPlanAmount, totalAnnual)); - - } - } - } - } - - public ProcessInstanceUserDto buildUser(UserFullInfoDTO user) { - return ProcessInstanceUserDto.builder() - .userId(user.getUserIdStr()) - .userName(user.getRealName()) - .orgCode(user.getMhUnitIdStr()) - .orgName(user.getMhUnitName()) - .build(); - } - - public ProcessInstanceUserDto buildUser(Long userId) { - UserFullInfoDTO user = userInfoHelper.getUserFullInfo(userId); - Assert.notNull(user, "【%s】获取不到用户!", userId); - return buildUser(user); - } - - public ProcessInstanceUserDto buildUser(UserInfoDetails user) { - return ProcessInstanceUserDto.builder() - .userId(user.getUserIdStr()) - .userName(user.getRealName()) - .orgCode(user.getMhUnitIdStr()) - .orgName(user.getMhUnitName()) - .build(); - } - - public Map buildOrgModelMap(Long userId, Project project) { - Map orgMap = new HashMap<>(); - - // 查出所有的单位流程配置 - List orgModelsList = orgProcdefService.list(); - - UserFullInfoDTO userFullInfo = userInfoHelper.getUserFullInfo(userId); - if (Objects.isNull(userFullInfo)) { - log.warn("取不到员工 返回空map"); - return Collections.emptyMap(); - } - - String startOrgCode = userFullInfo.getMhUnitIdStr(); - String startOrgName = userFullInfo.getMhUnitName(); - String startOrgParentCode; - String startOrgParentName; - // 如果申报时 上级主管单位,由该单位自己审核 - if (CommonEnum.NO.getCode().equals(project.getIsSuperOrg())) { - startOrgParentCode = startOrgCode; - startOrgParentName = startOrgName; - } else { - startOrgParentCode = project.getSuperOrgCode(); - startOrgParentName = project.getSuperOrg(); - } - //查询 当前发起人及主管单位所在区域的 单位流程配置 - OrgInfoDTO startOrgInfoDto = new OrgInfoDTO(); - startOrgInfoDto.setOrganizationCode(startOrgCode); - startOrgInfoDto.setOrganizationName(startOrgName); - - startOrgInfoDto.setOrgModelMap(orgModelsList.stream() - .filter(v -> v.getOrgCode().equals(startOrgCode) - && Boolean.FALSE.equals(v.getIsDelete()) - && (ProcessDefTypeEnum.SEAL.name().equals(v.getType()) || - ProcessDefTypeEnum.JOINT_REVIEW.name().equals(v.getType()) || - ProcessDefTypeEnum.DEFAULT.name().equals(v.getType()))) - .collect(Collectors.toMap(WflowOrgModels::getType, v -> v))); - - OrgInfoDTO parentOrgInfoDto = new OrgInfoDTO(); - parentOrgInfoDto.setOrganizationCode(startOrgParentCode); - parentOrgInfoDto.setOrganizationName(startOrgParentName); - parentOrgInfoDto.setOrgModelMap(orgModelsList.stream() - .filter(v -> v.getOrgCode().equals(startOrgParentCode) - && Boolean.FALSE.equals(v.getIsDelete()) - && (ProcessDefTypeEnum.SEAL.name().equals(v.getType()) || - ProcessDefTypeEnum.JOINT_REVIEW.name().equals(v.getType()) || - ProcessDefTypeEnum.DEFAULT.name().equals(v.getType()))) - .collect(Collectors.toMap(WflowOrgModels::getType, v -> v))); - - orgMap.put(OrgTypeEnum.TARGET_OWNER.name(), startOrgInfoDto); - orgMap.put(OrgTypeEnum.TARGET_MANAGEMENT.name(), parentOrgInfoDto); - - // 如果是指定单位,直接根据流程定义ID放入map - OrgInfoDTO orgInfoDTO = new OrgInfoDTO(); - orgInfoDTO.setOrgModelMap(orgModelsList.stream() - .collect(Collectors.toMap(WflowOrgModels::getProcessDefId, v -> v))); - orgMap.put(OrgTypeEnum.TARGET_LABEL.name(), orgInfoDTO); - - //如果有上级条线主管单位 并且 不是市本级 - if (!RegionConst.RC_HZ.equals(project.getAreaCode()) && - CommonEnum.YES.getCode().equals(project.getIsHigherSuperOrg())) { - OrgInfoDTO parentLineOrgInfoDto = new OrgInfoDTO(); - parentLineOrgInfoDto.setOrganizationCode(project.getHigherSuperOrgCode()); - parentLineOrgInfoDto.setOrganizationName(project.getHigherSuperOrg()); - parentLineOrgInfoDto.setOrgModelMap(orgModelsList.stream() - .filter(v -> v.getOrgCode().equals(project.getHigherSuperOrgCode()) - && Boolean.FALSE.equals(v.getIsDelete()) - && (ProcessDefTypeEnum.SEAL.name().equals(v.getType()) || - ProcessDefTypeEnum.JOINT_REVIEW.name().equals(v.getType()) || - ProcessDefTypeEnum.DEFAULT.name().equals(v.getType()))) - .collect(Collectors.toMap(WflowOrgModels::getType, v -> v))); - - orgMap.put(OrgTypeEnum.TARGET_LINE_MANAGEMENT.name(), parentLineOrgInfoDto); - } - return orgMap; - } - - public Map buildOrgModelMapUserOrgCode(Project project) { - Map orgMap = new HashMap<>(); - - // 查出所有的单位流程配置 - List orgModelsList = orgProcdefService.list(); - - String startOrgCode = project.getBuildOrgCode(); - String startOrgName = project.getBuildOrgName(); - String startOrgParentCode; - String startOrgParentName; - // 如果申报时 上级主管单位,由该单位自己审核 - if (CommonEnum.NO.getCode().equals(project.getIsSuperOrg())) { - startOrgParentCode = startOrgCode; - startOrgParentName = startOrgName; - } else { - startOrgParentCode = project.getSuperOrgCode(); - startOrgParentName = project.getSuperOrg(); - } - //查询 当前发起人及主管单位所在区域的 单位流程配置 - OrgInfoDTO startOrgInfoDto = new OrgInfoDTO(); - startOrgInfoDto.setOrganizationCode(startOrgCode); - startOrgInfoDto.setOrganizationName(startOrgName); - - startOrgInfoDto.setOrgModelMap(orgModelsList.stream() - .filter(v -> v.getOrgCode().equals(startOrgCode) - && Boolean.FALSE.equals(v.getIsDelete()) - && (ProcessDefTypeEnum.SEAL.name().equals(v.getType()) || - ProcessDefTypeEnum.JOINT_REVIEW.name().equals(v.getType()) || - ProcessDefTypeEnum.DEFAULT.name().equals(v.getType()))) - .collect(Collectors.toMap(WflowOrgModels::getType, v -> v))); - - OrgInfoDTO parentOrgInfoDto = new OrgInfoDTO(); - parentOrgInfoDto.setOrganizationCode(startOrgParentCode); - parentOrgInfoDto.setOrganizationName(startOrgParentName); - parentOrgInfoDto.setOrgModelMap(orgModelsList.stream() - .filter(v -> v.getOrgCode().equals(startOrgParentCode) - && Boolean.FALSE.equals(v.getIsDelete()) - && (ProcessDefTypeEnum.SEAL.name().equals(v.getType()) || - ProcessDefTypeEnum.JOINT_REVIEW.name().equals(v.getType()) || - ProcessDefTypeEnum.DEFAULT.name().equals(v.getType()))) - .collect(Collectors.toMap(WflowOrgModels::getType, v -> v))); - - orgMap.put(OrgTypeEnum.TARGET_OWNER.name(), startOrgInfoDto); - orgMap.put(OrgTypeEnum.TARGET_MANAGEMENT.name(), parentOrgInfoDto); - - // 如果是指定单位,直接根据流程定义ID放入map - OrgInfoDTO orgInfoDTO = new OrgInfoDTO(); - orgInfoDTO.setOrgModelMap(orgModelsList.stream() - .collect(Collectors.toMap(WflowOrgModels::getProcessDefId, v -> v))); - orgMap.put(OrgTypeEnum.TARGET_LABEL.name(), orgInfoDTO); - - //如果有上级条线主管单位 并且 不是市本级 - if (!RegionConst.RC_HZ.equals(project.getAreaCode()) && - CommonEnum.YES.getCode().equals(project.getIsHigherSuperOrg())) { - OrgInfoDTO parentLineOrgInfoDto = new OrgInfoDTO(); - parentLineOrgInfoDto.setOrganizationCode(project.getHigherSuperOrgCode()); - parentLineOrgInfoDto.setOrganizationName(project.getHigherSuperOrg()); - parentLineOrgInfoDto.setOrgModelMap(orgModelsList.stream() - .filter(v -> v.getOrgCode().equals(project.getHigherSuperOrgCode()) - && Boolean.FALSE.equals(v.getIsDelete()) - && (ProcessDefTypeEnum.SEAL.name().equals(v.getType()) || - ProcessDefTypeEnum.JOINT_REVIEW.name().equals(v.getType()) || - ProcessDefTypeEnum.DEFAULT.name().equals(v.getType()))) - .collect(Collectors.toMap(WflowOrgModels::getType, v -> v))); - - orgMap.put(OrgTypeEnum.TARGET_LINE_MANAGEMENT.name(), parentLineOrgInfoDto); - } - return orgMap; - } - - //根据提交者的单位 - public DeclaredProjectStatisticsPO declaredProjectOrgStatistics(Integer year, UserFullInfoDTO user) { - //查此人建设单位的项目 - return statisticsService.getOrgStatistics(user.getMhUnitIdStr(), year); - } - - //根据提交者的区域 他是区管或者超管 - public DeclaredProjectStatisticsPO declaredProjectRegionStatistics(Integer year, UserFullInfoDTO user) { - //查此人建设单位的项目 - return statisticsService.getRegionStatistics(null, year); - } - - /** - * 把条件值放入工作流 用于判断条件 根据dto - * - * @param params - * @param dto - */ - public void buildCondition(ProcessStartParamsVo params, DefaultDeclaredDTO dto) { - //放入条件判断的项目字段 - ProjectConditionDTO conditionDto = new ProjectConditionDTO(); - BeanUtils.copyProperties(dto.getProjectInfo(), conditionDto); - dto.getFormData().putAll( - JSON.parseObject(JSON.toJSONString(conditionDto), new TypeReference>() { - }) - ); - params.setFormData(dto.getFormData()); - } - - /** - * 把条件值放入工作流 用于判断条件 根据d项目实体 - * - * @param params - * @param projectInfo - */ - public void buildCondition(ProcessStartParamsVo params, Project projectInfo) { - //放入条件判断的项目字段 - ProjectConditionDTO conditionDto = new ProjectConditionDTO(); - BeanUtils.copyProperties(projectInfo, conditionDto); - params.setFormData(JSON.parseObject(JSON.toJSONString(conditionDto), new TypeReference>() { - })); - } - - public void buildCondition(ProcessStartParamsVo params, Project projectInfo, DefaultDeclaredDTO dto) { - //放入条件判断的项目字段 优先取dto的 再取项目的 - ProjectDTO projInfo = dto.getProjectInfo(); - ProjectConditionDTO condition = new ProjectConditionDTO(); - condition.setProjectId(projectInfo.getId()); - condition.setDeclareAmount(Objects.nonNull(projInfo.getDeclareAmount()) - ? projInfo.getDeclareAmount() : projectInfo.getDeclareAmount()); - condition.setIsDigitalReform(Objects.nonNull(projInfo.getIsDigitalReform()) - ? projInfo.getIsDigitalReform() : projectInfo.getIsDigitalReform()); - condition.setIsTemporaryAugment(Objects.nonNull(projInfo.getIsTemporaryAugment()) - ? projInfo.getIsTemporaryAugment() : projectInfo.getIsTemporaryAugment()); - condition.setBizDomain(Objects.nonNull(projInfo.getBizDomain()) - ? projInfo.getBizDomain() : projectInfo.getBizDomain()); - params.setFormData(JSON.parseObject(JSON.toJSONString(condition), TypeReferenceConst.STR_OBJ_MAP)); - } -} diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/manage/DelayedApplyManage.java b/hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/manage/DelayedApplyManage.java index ccf16bc..c83e952 100644 --- a/hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/manage/DelayedApplyManage.java +++ b/hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/manage/DelayedApplyManage.java @@ -80,7 +80,7 @@ public class DelayedApplyManage { private final IProjectService projectService; private final UserInfoHelper userInfoHelper; private final ProcessModelManage processModelManage; - private final DefaultDeclaredProjectManage defaultDeclaredProjectManage; + private final DeclaredProjectHelper declaredProjectHelper; private final ProcessInstanceService processInstanceService; private final ProjectLibManage projectLibManage; private final NoticeManage noticeManage; @@ -264,13 +264,13 @@ public class DelayedApplyManage { } ProcessStartParamsVo params = new ProcessStartParamsVo(); - params.setUser(defaultDeclaredProjectManage.buildUser(user)); + params.setUser(declaredProjectHelper.buildUser(user)); params.setProcessUsers(Collections.emptyMap()); //放入条件判断的项目字段 //把条件值给放入工作流 - defaultDeclaredProjectManage.buildCondition(params, project); + declaredProjectHelper.buildCondition(params, project); // 获取发起单位、发起单位主管单位、发起单位上级条线主管单位信息 - Map orgModelMap = defaultDeclaredProjectManage.buildOrgModelMapUserOrgCode(project); + Map orgModelMap = declaredProjectHelper.buildOrgModelMapUserOrgCode(project); String instanceId = processInstanceService.newStartProcess(model.getProcessDefId(), model.getFormId(), params, orgModelMap); log.info("延期申请申报成功 【{}】", instanceId); diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/manage/FinalAcceptanceManage.java b/hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/manage/FinalAcceptanceManage.java index c2c83ea..dc19ccf 100644 --- a/hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/manage/FinalAcceptanceManage.java +++ b/hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/manage/FinalAcceptanceManage.java @@ -79,7 +79,7 @@ public class FinalAcceptanceManage { private final IPurchaseInstService purchaseInstService; private final ProcessModelManage processModelManage; private final ProcessInstanceService processInstanceService; - private final DefaultDeclaredProjectManage declaredProjectManage; + private final DeclaredProjectHelper declaredProjectManage; private final IContractService contractService; private final IProjectAnnualPaymentPlanService projectAnnualPaymentPlanService; private final ProjectStateMachineUtil projectStateMachineUtil; diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/manage/PrequalificationDeclaredProjectManage.java b/hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/manage/PrequalificationDeclaredProjectManage.java deleted file mode 100644 index e377a40..0000000 --- a/hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/manage/PrequalificationDeclaredProjectManage.java +++ /dev/null @@ -1,337 +0,0 @@ -package com.hz.pm.api.projectdeclared.manage; - -import com.alibaba.excel.EasyExcelFactory; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.google.common.collect.Lists; -import com.hz.pm.api.common.enumeration.ProjectProcessStageEnum; -import com.hz.pm.api.common.helper.UserInfoHelper; -import com.hz.pm.api.common.statemachine.util.ProjectStateMachineUtil; -import com.hz.pm.api.common.util.ExcelDownUtil; -import com.hz.pm.api.common.util.ExcelExportStyle; -import com.hz.pm.api.projectdeclared.model.dto.DefaultDeclaredDTO; -import com.hz.pm.api.projectdeclared.model.dto.PretrialDeclaredExportDTO; -import com.hz.pm.api.projectdeclared.model.req.PrequalificationDeclaredListReq; -import com.hz.pm.api.projectlib.helper.ProjectHelper; -import com.hz.pm.api.projectlib.manage.ProjectLibManage; -import com.hz.pm.api.projectlib.model.dto.ProjectDTO; -import com.hz.pm.api.projectlib.model.entity.Project; -import com.hz.pm.api.projectlib.model.entity.ProjectInst; -import com.hz.pm.api.projectlib.model.enumeration.status.ProjectStatus; -import com.hz.pm.api.projectlib.model.enumeration.ProjectTypeNewEnum; -import com.hz.pm.api.projectlib.model.req.ProjectListReq; -import com.hz.pm.api.projectlib.model.vo.ProjectLibListItemVO; -import com.hz.pm.api.projectlib.service.IProjectInstService; -import com.hz.pm.api.projectlib.service.IProjectService; -import com.hz.pm.api.staging.enums.MsgTypeEnum; -import com.hz.pm.api.staging.service.IProjectStagingService; -import com.hz.pm.api.sys.manage.NoticeManage; -import com.hz.pm.api.sys.manage.ProcessModelManage; -import com.hz.pm.api.todocenter.constant.TodoCenterConst; -import com.hz.pm.api.todocenter.constant.WorkNoticeConst; -import com.hz.pm.api.user.security.model.UserFullInfoDTO; -import com.hz.pm.api.user.security.model.UserInfoDetails; -import com.hz.pm.api.user.util.LoginUserUtil; -import com.ningdatech.basic.exception.BizException; -import com.ningdatech.basic.function.VUtils; -import com.ningdatech.basic.model.PageVo; -import com.ningdatech.basic.util.CollUtils; -import com.ningdatech.basic.util.NdDateUtils; -import com.wflow.bean.entity.WflowModels; -import com.wflow.exception.BusinessException; -import com.wflow.workflow.bean.dto.OrgInfoDTO; -import com.wflow.workflow.bean.vo.ProcessStartParamsVo; -import com.wflow.workflow.service.ProcessInstanceService; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.BeanUtils; -import org.springframework.stereotype.Component; -import org.springframework.transaction.annotation.Transactional; - -import javax.servlet.http.HttpServletResponse; -import java.io.IOException; -import java.time.LocalDateTime; -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.stream.Collectors; - -/** - * @Classname ProqualificationDeclaredProjectManage - * @Description - * @Date 2023/2/13 14:48 - * @Author PoffyZhang - */ -@Component -@Slf4j -@RequiredArgsConstructor -public class PrequalificationDeclaredProjectManage { - - private final IProjectService projectService; - - private final ProjectLibManage projectLibManage; - - private final ProjectStateMachineUtil projectStateMachineUtil; - - private final IProjectStagingService projectStagingService; - - private final UserInfoHelper userInfoHelper; - - private final ProcessModelManage processModelManage; - - private final DefaultDeclaredProjectManage defaultDeclaredProjectManage; - - private final ProcessInstanceService processInstanceService; - - private final IProjectInstService projectInstService; - - private final NoticeManage noticeManage; - - /** - * 提交预审 - * - * @param dto - * @return - */ - @Transactional(rollbackFor = Exception.class) - public synchronized String startTheProcess(DefaultDeclaredDTO dto) { - UserInfoDetails user = LoginUserUtil.loginUserDetail(); - ProjectDTO projectDto = dto.getProjectInfo(); - VUtils.isTrue(Objects.isNull(projectDto.getId())).throwMessage("提交失败 缺少项目ID!"); - Project projectInfo = projectService.getNewProject(projectDto.getId()); - VUtils.isTrue(Objects.isNull(projectInfo)).throwMessage("提交失败 此项目不存在!"); - - //要判断 当前操作人 是不是项目主管单位的人 - VUtils.isTrue(Objects.isNull(user.getMhUnitId())) - .throwMessage(String.format("当前登录人没有单位 【%s】", user.getRealName())); - VUtils.isTrue(!user.getMhUnitIdStr().equals(projectInfo.getSuperOrgCode())) - .throwMessage(String.format("只有主管单位 【%s】的人 才能够提交", projectInfo.getSuperOrg())); - - //首先要判断 项目当前状态 是不是 待预审 - VUtils.isTrue((!ProjectStatus.PENDING_PREQUALIFICATION.getCode().equals(projectInfo.getStatus()) && - !ProjectStatus.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_SUCCESS.getCode().equals(projectInfo.getStatus())) || - !ProjectStatus.NOT_APPROVED.getCode().equals(projectInfo.getStage())) - .throwMessage("提交失败 该项目不是 待预审状态(省级部门联审成功)或者未立项阶段"); - - //使用状态机 进入下一步 看看需不需要走省级审批 放入文件 - if (StringUtils.isNotBlank(projectDto.getHigherLineSuperOrgReviewComments())) { - projectInfo.setHigherLineSuperOrgReviewComments(projectDto.getHigherLineSuperOrgReviewComments()); - } - projectStateMachineUtil.pass(projectInfo); - String instanceId; - //如果是省级部门 需要联审的(申报金额大于1000万 并且是市级项目) - if (ProjectStatus.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS - .getCode().equals(projectInfo.getStatus())) { - //入库暂存表 后续处理 对接外部接口 - projectInfo.setUpdateOn(LocalDateTime.now()); - //保存一下 当前的主管单位发起人 - projectInfo.setPreStartUserId(user.getUserIdStr()); - //当前实例置为空 - projectInfo.setInstCode(TodoCenterConst.Declared.NULL_INST_CODE); - if (Boolean.TRUE.equals(projectStagingService.addByProject(projectInfo, "省级部门联审")) - && projectService.updateById(projectInfo)) { - return "提交省级部门联审成功"; - } - return "提交省级部门联审失败"; - } else if (ProjectStatus.PRE_APPLYING - .getCode().equals(projectInfo.getStatus())) { - //如果是非省级联审的项目 直接提交 预审 - instanceId = directStartProcess(projectInfo, user, dto.getRestart()); - } else { - throw new BusinessException("项目状态 错误 project :" + projectInfo.getId() + "," + projectInfo.getStatus()); - } - - return "提交预审成功【" + instanceId + "】"; - } - - /** - * 重新提交预审 - * - * @param dto - * @return - */ - @Transactional(rollbackFor = Exception.class) - public String restartTheProcess(DefaultDeclaredDTO dto) { - ProjectDTO projectDto = dto.getProjectInfo(); - VUtils.isTrue(Objects.isNull(projectDto.getId())).throwMessage("提交失败 缺少项目ID!"); - Project projectInfo = projectService.getById(projectDto.getId()); - VUtils.isTrue(Objects.isNull(projectInfo)).throwMessage("提交失败 此项目不存在!"); - //重新提交 生成新版本号 回到 待预审状态 - Project project = projectLibManage.saveProjectWithVersionAndStatus(projectDto, null, - ProjectStatus.PENDING_PREQUALIFICATION.getCode(), Boolean.FALSE); - dto.getProjectInfo().setId(project.getId()); - dto.setRestart(Boolean.TRUE); - return startTheProcess(dto); - } - - //直接提交预审方法 提取 在省级联审通过的时候 也可以用 - public String directStartProcess(Project projectInfo, UserInfoDetails user, Boolean restart) { - ProcessStartParamsVo params = new ProcessStartParamsVo(); - params.setUser(defaultDeclaredProjectManage.buildUser(user)); - params.setProcessUsers(Collections.emptyMap()); - Long userId = user.getUserId(); - //把条件值给放入工作流 - defaultDeclaredProjectManage.buildCondition(params, projectInfo); - ProjectProcessStageEnum instType = ProjectProcessStageEnum.PROJECT_PREQUALIFICATION_APPROVAL_PROCESS; - WflowModels model = processModelManage.getWflowModels(instType, user.getMhUnitId()); - if (Objects.isNull(model)) { - throw new BusinessException("找不到预审流程配置"); - } - - // 获取发起单位、发起单位主管单位、发起单位上级主管条线单位信息 - Map orgModelMap = defaultDeclaredProjectManage.buildOrgModelMap(userId, projectInfo); - String instanceId = processInstanceService.startProcessLs(model, params, orgModelMap); - log.info("提交预审项目成功 【{}】", instanceId); - - log.info("restart 【{}】", restart); - //保存预审项目 - if (Boolean.TRUE.equals(restart)) { - //如果是重新提交 不用生成新版本 前面已经生成过了 - preModifyProject(projectInfo, instanceId); - } else { - projectInfo = projectLibManage.saveProjectWithVersion(projectInfo, instanceId, - ProjectProcessStageEnum.PROJECT_PREQUALIFICATION_APPROVAL_PROCESS.getCode()); - } - - //发送给第一个审批人消息 - noticeManage.sendFirstUser(projectInfo, model.getFormName(), instanceId, - WorkNoticeConst.PASS_MSG_TEMPLATE, MsgTypeEnum.PROJECT_REVIEW); - - return instanceId; - } - - /** - * 提交预审项目 时 更新信息 - * - * @param project - * @param instanceId - */ - private void preModifyProject(Project project, String instanceId) { - //流程启动之后 入库项目 重要业务信息 用于列表查询 展示 - try { - project.setUpdateOn(LocalDateTime.now()); - project.setInstCode(instanceId); - projectService.updateById(project); - - //保存项目和实例的关系 - ProjectInst projectInst = new ProjectInst(); - projectInst.setProjectId(project.getId()); - projectInst.setInstCode(instanceId); - projectInst.setInstType(ProjectProcessStageEnum.PROJECT_PREQUALIFICATION_APPROVAL_PROCESS.getCode()); - projectInstService.save(projectInst); - } catch (Exception e) { - log.error("提交预审 项目信息修改 错误 ", e); - throw new BusinessException("提交预审 项目信息修改 错误 :" + e.getMessage()); - } - } - - /** - * 查询项目库 - * - * @param preReq - * @return - */ - public PageVo pageInfo(PrequalificationDeclaredListReq preReq) { - UserFullInfoDTO user = userInfoHelper.getUserFullInfo(LoginUserUtil.getUserId()); - VUtils.isTrue(Objects.isNull(user)).throwMessage("获取登录用户失败!"); - //限定参数 复制bean - ProjectListReq req = new ProjectListReq(); - BeanUtils.copyProperties(preReq, req); - //项目阶段 状态 已定 待预审和省级部门联审成功 - req.setStage(ProjectStatus.NOT_APPROVED.getCode()); - req.setStatusList(Lists.newArrayList(ProjectStatus.PENDING_PREQUALIFICATION.getCode(), - ProjectStatus.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_SUCCESS.getCode())); - LambdaQueryWrapper query = ProjectHelper.projectQuery(req); - buildPermission(query, user); - query.eq(Project::getNewest, Boolean.TRUE); - Page page = projectService.page(req.page(), query); - long total; - if ((total = page.getTotal()) == 0) { - return PageVo.empty(); - } - List records = CollUtils.convert(page.getRecords(), w -> { - ProjectLibListItemVO item = new ProjectLibListItemVO(); - item.setId(w.getId()); - item.setProjectName(w.getProjectName()); - item.setCreateOn(w.getCreateOn()); - item.setDeclaredAmount(w.getDeclareAmount()); - item.setStage(w.getStage()); - item.setStatus(w.getStatus()); - item.setProjectType(w.getProjectType()); - item.setProjectYear(w.getProjectYear()); - item.setBuildOrg(w.getBuildOrgName()); - item.setBizDomain(w.getBizDomain()); - item.setProcessStatus(w.getProcessStatus()); - item.setInstCode(w.getInstCode()); - item.setIsHigherSuperOrg(w.getIsHigherSuperOrg()); - if (user.getIsOrgAdmin() && - (ProjectStatus.PENDING_PREQUALIFICATION.getCode().equals(item.getStatus()) || - ProjectStatus.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_SUCCESS.getCode().equals(item.getStatus())) - && StringUtils.isNotBlank(w.getSuperOrgCode()) - && w.getSuperOrgCode().equals(user.getMhUnitIdStr())) { - item.setCanPreDeclared(Boolean.TRUE); - } - return item; - }); - return PageVo.of(records, total); - } - - /** - * build 项目的角色权限到req - * - * @param query - */ - public void buildPermission(LambdaQueryWrapper query, UserFullInfoDTO user) { - if (user.getIsOrgAdmin()) { - //单位管理员 看到自己单位去申报的 + 待预审的主管单位是自己单位的项目 - query.and(q1 -> q1.eq(Project::getBuildOrgCode, user.getMhUnitIdStr()) - .or(q2 -> q2.eq(Project::getStage, ProjectStatus.NOT_APPROVED.getCode()) - .and(s1 -> s1.eq(Project::getStatus, ProjectStatus.PENDING_PREQUALIFICATION.getCode()) - .or(s2 -> s2.eq(Project::getStatus, ProjectStatus.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_SUCCESS.getCode()))) - .eq(Project::getSuperOrgCode, user.getMhUnitIdStr()))); - } else { - query.eq(Project::getBuildOrgCode, user.getMhUnitIdStr()); - } - } - - public void exportList(HttpServletResponse response, PrequalificationDeclaredListReq preReq) { - ProjectListReq req = new ProjectListReq(); - BeanUtils.copyProperties(preReq, req); - //项目阶段 状态 已定 待预审 - req.setStage(ProjectStatus.NOT_APPROVED.getCode()); - req.setStatusList(Lists.newArrayList(ProjectStatus.PENDING_PREQUALIFICATION.getCode(), - ProjectStatus.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_SUCCESS.getCode())); - UserFullInfoDTO user = userInfoHelper.getUserFullInfo(LoginUserUtil.getUserId()); - LambdaQueryWrapper query = ProjectHelper.projectQuery(req); - //角色权限 - buildPermission(query, user); - query.eq(Project::getNewest, Boolean.TRUE); - List records = projectService.list(query); - - List collect = records.stream().map(r -> { - PretrialDeclaredExportDTO exportDTO = new PretrialDeclaredExportDTO(); - BeanUtils.copyProperties(r, exportDTO); - exportDTO.setProjectTypeName(ProjectTypeNewEnum.getDesc(r.getProjectType())); - String createOnStr = NdDateUtils.format(r.getCreateOn(), "yyyy-MM-dd HH:mm"); - exportDTO.setCreateOn(createOnStr); - return exportDTO; - }).collect(Collectors.toList()); - for (int i = 0; i < collect.size(); i++) { - collect.get(i).setSerialNumber(i + 1); - } - String fileName = "预审申报项目列表"; - ExcelDownUtil.setFileName(fileName, response); - //数据导出处理函数 - try { - EasyExcelFactory.write(response.getOutputStream(), PretrialDeclaredExportDTO.class) - .autoCloseStream(false) - .registerWriteHandler(ExcelExportStyle.formalStyle()) - .sheet(fileName) - .doWrite(collect); - } catch (IOException e) { - throw new BizException(e); - } - } -} diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/manage/ProjectAdjustmentManage.java b/hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/manage/ProjectAdjustmentManage.java index ffa599a..c8cb7f3 100644 --- a/hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/manage/ProjectAdjustmentManage.java +++ b/hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/manage/ProjectAdjustmentManage.java @@ -33,7 +33,6 @@ import org.springframework.transaction.annotation.Transactional; import javax.servlet.http.HttpServletResponse; import java.io.IOException; -import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -54,7 +53,7 @@ public class ProjectAdjustmentManage { private final IProjectService projectService; - private final DefaultDeclaredProjectManage defaultDeclaredProjectManage; + private final DeclaredProjectHelper declaredProjectHelper; private final ProjectLibManage projectLibManage; @@ -77,12 +76,12 @@ public class ProjectAdjustmentManage { if (StringUtils.isNotBlank(projectDto.getProjectName()) && !projectDto.getProjectName().equals(projectInfo.getProjectName())) { projectDto.setProjectCode(projectInfo.getProjectCode()); - defaultDeclaredProjectManage.checkDuplication(projectDto); + declaredProjectHelper.checkDuplication(projectDto); } //金额check if (Objects.nonNull(projectDto.getDeclareAmount())) { - defaultDeclaredProjectManage.checkAmount(projectDto); + declaredProjectHelper.checkAmount(projectDto); } //最后去重新 提交项目流程 不同的状态 提交到不同的工作流去 @@ -92,10 +91,8 @@ public class ProjectAdjustmentManage { return declaredFunction.apply(dto); } - private static final List PROJECT_STATUS = Arrays.asList( - ProjectStatus.UNDER_INTERNAL_AUDIT_NOT_PASS.getCode(), - ProjectStatus.PREQUALIFICATION_FAILED.getCode(), - ProjectStatus.THE_JOINT_REVIEW_OF_PROVINCIAL_DEPARTMENTS_FAILED.getCode()); + private static final List PROJECT_STATUS = Collections.singletonList( + ProjectStatus.UNDER_INTERNAL_AUDIT_NOT_PASS.getCode()); /** * 项目库 diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/manage/PurchaseManage.java b/hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/manage/PurchaseManage.java index db152a7..c8321c3 100644 --- a/hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/manage/PurchaseManage.java +++ b/hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/manage/PurchaseManage.java @@ -122,7 +122,7 @@ public class PurchaseManage { private final MhUnitCache mhUnitCache; private final IOperationService operationService; private final ProcessModelManage processModelManage; - private final DefaultDeclaredProjectManage declaredProjectManage; + private final DeclaredProjectHelper declaredProjectManage; private final ProcessInstanceService processInstanceService; private final TestValidStateMachineUtil testValidStateMachineUtil; private final SelfTestStateMachineUtil selfTestStateMachineUtil; diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/manage/ReviewByDeptJointManage.java b/hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/manage/ReviewByDeptJointManage.java index d72cc7b..9f4c681 100644 --- a/hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/manage/ReviewByDeptJointManage.java +++ b/hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/manage/ReviewByDeptJointManage.java @@ -40,9 +40,9 @@ public class ReviewByDeptJointManage { private final IProjectService projectService; private final ProcessModelManage processModelManage; private final ProcessInstanceService processService; - private final DefaultDeclaredProjectManage declaredProjectManage; + private final DeclaredProjectHelper declaredProjectManage; private final ProjectLibManage projectLibManage; - private final DefaultDeclaredProjectManage defaultDeclaredProjectManage; + private final DeclaredProjectHelper declaredProjectHelper; private final NoticeManage noticeManage; private final UserInfoHelper userInfoHelper; @@ -80,10 +80,10 @@ public class ReviewByDeptJointManage { params.setProcessUsers(Collections.emptyMap()); //放入条件判断的项目字段 //把条件值给放入工作流 - defaultDeclaredProjectManage.buildCondition(params, projectInfo); + declaredProjectHelper.buildCondition(params, projectInfo); // 获取发起单位、发起单位主管单位、发起单位上级主管条线单位信息 - Map orgMap = defaultDeclaredProjectManage.buildOrgModelMap(startUser.getUserId(), project); + Map orgMap = declaredProjectHelper.buildOrgModelMap(startUser.getUserId(), project); String instanceId = processService.startProcessLs(model, params, orgMap); log.info("部门联审申报成功 【{}】", instanceId); diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/utils/RestartProcessMapUtil.java b/hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/utils/RestartProcessMapUtil.java index 55f8b46..971dbfc 100644 --- a/hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/utils/RestartProcessMapUtil.java +++ b/hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/utils/RestartProcessMapUtil.java @@ -2,7 +2,6 @@ package com.hz.pm.api.projectdeclared.utils; import com.google.common.collect.Maps; import com.hz.pm.api.projectdeclared.manage.DeclaredProjectManage; -import com.hz.pm.api.projectdeclared.manage.PrequalificationDeclaredProjectManage; import com.hz.pm.api.projectdeclared.model.dto.DefaultDeclaredDTO; import com.hz.pm.api.projectlib.manage.DeclaredRecordManage; import com.hz.pm.api.projectlib.model.enumeration.status.ProjectStatus; @@ -25,14 +24,10 @@ public class RestartProcessMapUtil { private static final Map> RESTART_PROCESS_MAP = Maps.newHashMap(); public RestartProcessMapUtil(DeclaredProjectManage declaredProjectManage, - PrequalificationDeclaredProjectManage prequalificationDeclaredProjectManage, DeclaredRecordManage declaredRecordManage) { - //重新项目申报 + // 重新项目申报 RESTART_PROCESS_MAP.put(ProjectStatus.UNDER_INTERNAL_AUDIT_NOT_PASS.getCode(), declaredProjectManage::reStartTheProcess); - //预审方案 - RESTART_PROCESS_MAP.put(ProjectStatus.PREQUALIFICATION_FAILED.getCode(), - prequalificationDeclaredProjectManage::restartTheProcess); // 立项备案重新提交 RESTART_PROCESS_MAP.put(ProjectStatus.DECLARED_APPROVED_RECORD_FAILED.getCode(), declaredRecordManage::restartDeclaredRecord); diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/manage/AnnualPlanLibManage.java b/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/manage/AnnualPlanLibManage.java index 447aaac..c1dd72a 100644 --- a/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/manage/AnnualPlanLibManage.java +++ b/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/manage/AnnualPlanLibManage.java @@ -67,7 +67,7 @@ public class AnnualPlanLibManage { */ private static final List ANNUAL_PLAN_LIST_STATUS = Arrays.asList(IN_THE_ANNUAL_PLAN, TO_BE_APPROVED, TO_BE_DECLARED, - PLAN_TO_BE_DECLARED, PENDING_PREQUALIFICATION_CHOICE, PROJECT_APPROVED, TO_BE_PURCHASED, UNDER_CONSTRUCTION, + PLAN_TO_BE_DECLARED, PENDING_PREQUALIFICATION_CHOICE, PROJECT_APPROVED, TO_BE_PURCHASED, ON_PILOT_RUNNING, ARCHIVED); public PageVo annulPlanLibList(ProjectListReq req) { diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/manage/DeclaredRecordManage.java b/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/manage/DeclaredRecordManage.java index 0536c62..679c42f 100644 --- a/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/manage/DeclaredRecordManage.java +++ b/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/manage/DeclaredRecordManage.java @@ -8,14 +8,12 @@ import cn.hutool.poi.excel.ExcelUtil; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.hz.pm.api.common.enumeration.CommonEnum; import com.hz.pm.api.common.enumeration.ProjectProcessStageEnum; import com.hz.pm.api.common.helper.UserInfoHelper; import com.hz.pm.api.common.model.constant.TypeReferenceConst; -import com.hz.pm.api.common.statemachine.event.ProjectStateChangeEvent; import com.hz.pm.api.common.util.BizUtils; import com.hz.pm.api.datascope.model.DataScopeDTO; import com.hz.pm.api.datascope.utils.DataScopeUtil; @@ -23,7 +21,7 @@ import com.hz.pm.api.external.model.enumeration.MhUnitStripEnum; import com.hz.pm.api.external.model.enumeration.MhUnitTypeEnum; import com.hz.pm.api.external.todo.MHTodoClient; import com.hz.pm.api.external.todo.enumerization.MHTodoTypeEnum; -import com.hz.pm.api.projectdeclared.manage.DefaultDeclaredProjectManage; +import com.hz.pm.api.projectdeclared.manage.DeclaredProjectHelper; import com.hz.pm.api.projectdeclared.model.dto.DefaultDeclaredDTO; import com.hz.pm.api.projectdeclared.model.dto.ProjectConditionDTO; import com.hz.pm.api.projectdeclared.service.IProjectDraftService; @@ -35,7 +33,6 @@ import com.hz.pm.api.projectlib.model.dto.ProjectDTO; import com.hz.pm.api.projectlib.model.entity.MhProject; import com.hz.pm.api.projectlib.model.entity.MhProjectSchemaTargetData; import com.hz.pm.api.projectlib.model.entity.Project; -import com.hz.pm.api.projectlib.model.entity.ProjectStatusChange; import com.hz.pm.api.projectlib.model.enumeration.GovSystemReplaceTypeEnum; import com.hz.pm.api.projectlib.model.enumeration.status.ProjectStatus; import com.hz.pm.api.projectlib.model.req.DeclaredProjectListReq; @@ -98,7 +95,7 @@ public class DeclaredRecordManage { private final NoticeManage noticeManage; private final IProjectDraftService projectDraftService; private final ProcessModelManage processModelManage; - private final DefaultDeclaredProjectManage defaultDeclaredProjectManage; + private final DeclaredProjectHelper declaredProjectHelper; private final ProcessInstanceService processInstanceService; private final ProjectLibManage projectLibManage; private final IProjectStatusChangeService projectStatusChangeService; @@ -289,7 +286,7 @@ public class DeclaredRecordManage { projectInfo.setBuildOrgName(user.getMhUnitName()); // 项目名称去重 - defaultDeclaredProjectManage.checkDuplication(projectInfo); + declaredProjectHelper.checkDuplication(projectInfo); // 写死 是否有主管单位 projectInfo.setIsHigherSuperOrg(CommonEnum.YES.getCode()); @@ -308,7 +305,7 @@ public class DeclaredRecordManage { } ProcessStartParamsVo params = new ProcessStartParamsVo(); - params.setUser(defaultDeclaredProjectManage.buildUser(user)); + params.setUser(declaredProjectHelper.buildUser(user)); params.setProcessUsers(Collections.emptyMap()); //放入条件判断的项目字段 ProjectConditionDTO condition = new ProjectConditionDTO(); @@ -319,24 +316,21 @@ public class DeclaredRecordManage { // 获取发起单位、发起单位主管单位、发起单位上级主管条线单位信息 Project project = new Project(); BeanUtils.copyProperties(projectInfo, project); - Map orgModelMap = defaultDeclaredProjectManage.buildOrgModelMap(user.getUserId(), project); + Map orgModelMap = declaredProjectHelper.buildOrgModelMap(user.getUserId(), project); String instanceId = processInstanceService.startProcessLs(model, params, orgModelMap); log.info("立项备案成功 【{}】", instanceId); // 如果是重新提交的话 判断下 项目是否存在 // 保存项目相关 Project newProj = projectLibManage.saveProjectInDeclared(projectInfo, instanceId, user.getUserId(), - ProjectStatus.NOT_APPROVED, ProjectStatus.DECLARED_APPROVED_RECORD_AUDITING, + ProjectStatus.NOT_APPROVED, ProjectStatus.DECLARED_APPROVED_TO_BE_RECORD, ProjectProcessStageEnum.PROJECT_RECORD_APPROVAL_PROCESS); - // 保存状态变更 - saveProjectStatusChangeLog(ProjectStatus.DECLARED_APPROVED_TO_BE_RECORD, - newProj, ProjectStateChangeEvent.DECLARED_RECORD_SUBMIT); if (Objects.nonNull(projectInfo.getDraftId())) { //如果是草稿箱提交 删除对应的草稿箱 projectDraftService.removeById(projectInfo.getDraftId()); } // 申报项目完成后 保存项目编码 - LambdaUpdateWrapper update = Wrappers.lambdaUpdate(MhProject.class) + Wrapper update = Wrappers.lambdaUpdate(MhProject.class) .set(MhProject::getProjectCode, newProj.getProjectCode()) .eq(MhProject::getId, projectInfo.getMhProjectId()); mhProjectService.update(update); @@ -362,7 +356,7 @@ public class DeclaredRecordManage { if (StrUtil.isNotBlank(reqProj.getProjectName()) && !reqProj.getProjectName().equals(oldProj.getProjectName())) { reqProj.setProjectCode(oldProj.getProjectCode()); - defaultDeclaredProjectManage.checkDuplication(reqProj); + declaredProjectHelper.checkDuplication(reqProj); } UnitDTO unit = mhUnitCache.getById(user.getMhUnitId()); Assert.notNull(unit, "申报单位不存在"); @@ -373,7 +367,7 @@ public class DeclaredRecordManage { oldProj.setIsSuperOrg(CommonEnum.YES.getCode()); //如果主管单位没有 那么主管单位就是自己 - if (CommonEnum.NO.getCode().equals(reqProj.getIsSuperOrg())) { + if (CommonEnum.NO.eq(reqProj.getIsSuperOrg())) { oldProj.setSuperOrgCode(user.getMhUnitIdStr()); oldProj.setSuperOrg(user.getMhUnitName()); reqProj.setSuperOrgCode(user.getMhUnitIdStr()); @@ -387,51 +381,35 @@ public class DeclaredRecordManage { throw BizException.wrap("%s不存在", instType.getDesc()); } - //首先要判断 项目当前状态 是不是 单位内部拒绝 VUtils.isTrue(!ProjectStatus.DECLARED_APPROVED_RECORD_FAILED.eq(oldProj.getStatus()) || !ProjectStatus.NOT_APPROVED.eq(oldProj.getStage())) .throwMessage("提交失败,该项目不是立项备案审核不通过状态或者未立项阶段"); ProcessStartParamsVo params = new ProcessStartParamsVo(); - params.setUser(defaultDeclaredProjectManage.buildUser(user)); + params.setUser(declaredProjectHelper.buildUser(user)); params.setProcessUsers(Collections.emptyMap()); //把条件值给放入工作流 - defaultDeclaredProjectManage.buildCondition(params, req); + declaredProjectHelper.buildCondition(params, req); // 获取发起单位、发起单位主管单位、发起单位上级主管条线单位信息 Project project = new Project(); BeanUtils.copyProperties(reqProj, project); - Map orgModelMap = defaultDeclaredProjectManage.buildOrgModelMap(user.getUserId(), project); + Map orgModelMap = declaredProjectHelper.buildOrgModelMap(user.getUserId(), project); String instId = processInstanceService.startProcessLs(model, params, orgModelMap); log.info("立项备案成功 【{}】", instId); //保存项目相关 Project newProj = projectLibManage.saveProjectInDeclared(reqProj, instId, user.getUserId(), ProjectStatus.NOT_APPROVED, - ProjectStatus.DECLARED_APPROVED_RECORD_AUDITING, + ProjectStatus.DECLARED_APPROVED_RECORD_FAILED, instType); - // 保存状态变更 - saveProjectStatusChangeLog(ProjectStatus.DECLARED_APPROVED_RECORD_FAILED, - newProj, ProjectStateChangeEvent.DECLARED_RECORD_RESUBMIT); //发送给第一个审批人消息 noticeManage.sendFirstUser(newProj, model.getFormName(), instId, WorkNoticeConst.PASS_MSG_TEMPLATE, MsgTypeEnum.PROJECT_REVIEW); - return instId; } - private void saveProjectStatusChangeLog(ProjectStatus beforeStatus, Project project, ProjectStateChangeEvent event) { - ProjectStatusChange change = new ProjectStatusChange(); - change.setAfterStatus(project.getStatus()); - change.setProjectId(project.getId()); - change.setBeforeStatus(beforeStatus.getCode()); - change.setEvent(event.name()); - change.setCreateOn(LocalDateTime.now()); - change.setProjectCode(project.getProjectCode()); - projectStatusChangeService.save(change); - } - @Transactional(rollbackFor = Exception.class) public synchronized void initMhProjectToProject() { Wrapper query = Wrappers.lambdaQuery(MhProject.class) diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/manage/ProjectLibManage.java b/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/manage/ProjectLibManage.java index 92cc0da..08bf2d5 100644 --- a/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/manage/ProjectLibManage.java +++ b/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/manage/ProjectLibManage.java @@ -51,6 +51,7 @@ import com.hz.pm.api.projectdeclared.service.IOperationService; import com.hz.pm.api.projectdeclared.service.IPreInsAcceptancePersonService; import com.hz.pm.api.projectdeclared.service.IPurchaseService; import com.hz.pm.api.projectdeclared.utils.ProjectCodeGenUtil; +import com.hz.pm.api.projectdeclared.utils.ProjectIdCodeCacheUtil; import com.hz.pm.api.projectlib.entity.ProjectGovSystemReplaceInfos; import com.hz.pm.api.projectlib.handle.ProcessProgressHelper; import com.hz.pm.api.projectlib.helper.ProjectHelper; @@ -243,8 +244,7 @@ public class ProjectLibManage { item.setProcessStatus(w.getProcessStatus()); item.setInstCode(w.getInstCode()); item.setIsHigherSuperOrg(w.getIsHigherSuperOrg()); - if (finalUser.getIsOrgAdmin() && ProjectStatus.PENDING_PREQUALIFICATION.eq(item.getStatus()) - && StringUtils.isNotBlank(w.getSuperOrgCode()) + if (finalUser.getIsOrgAdmin() && StringUtils.isNotBlank(w.getSuperOrgCode()) && w.getSuperOrgCode().equals(finalUser.getMhUnitIdStr())) { item.setCanPreDeclared(Boolean.TRUE); } @@ -322,8 +322,7 @@ public class ProjectLibManage { item.setInstCode(w.getInstCode()); item.setIsHigherSuperOrg(w.getIsHigherSuperOrg()); item.setApproveUsers(buildApproveUsers(w.getInstCode(), map, userMap)); - if (user.getIsOrgAdmin() && ProjectStatus.PENDING_PREQUALIFICATION.eq(item.getStatus()) - && StringUtils.isNotBlank(w.getSuperOrgCode()) + if (user.getIsOrgAdmin() && StringUtils.isNotBlank(w.getSuperOrgCode()) && w.getSuperOrgCode().equals(user.getMhUnitIdStr())) { item.setCanPreDeclared(Boolean.TRUE); } @@ -425,8 +424,7 @@ public class ProjectLibManage { item.setProcessStatus(w.getProcessStatus()); item.setInstCode(w.getInstCode()); item.setIsHigherSuperOrg(w.getIsHigherSuperOrg()); - if (user.getIsOrgAdmin() && ProjectStatus.PENDING_PREQUALIFICATION.eq(item.getStatus()) - && StringUtils.isNotBlank(w.getSuperOrgCode()) + if (user.getIsOrgAdmin() && StringUtils.isNotBlank(w.getSuperOrgCode()) && w.getSuperOrgCode().equals(user.getMhUnitIdStr())) { item.setCanPreDeclared(Boolean.TRUE); } @@ -481,8 +479,7 @@ public class ProjectLibManage { item.setProcessStatus(w.getProcessStatus()); item.setInstCode(w.getInstCode()); item.setIsHigherSuperOrg(w.getIsHigherSuperOrg()); - if (user.getIsOrgAdmin() && ProjectStatus.PENDING_PREQUALIFICATION.eq(item.getStatus()) - && StringUtils.isNotBlank(w.getSuperOrgCode()) + if (user.getIsOrgAdmin() && StringUtils.isNotBlank(w.getSuperOrgCode()) && w.getSuperOrgCode().equals(user.getMhUnitIdStr())) { item.setCanPreDeclared(Boolean.TRUE); } @@ -574,8 +571,7 @@ public class ProjectLibManage { item.setInstCode(w.getInstCode()); item.setIsHigherSuperOrg(w.getIsHigherSuperOrg()); item.setApproveUsers(buildApproveUsers(w.getInstCode(), map, userMap)); - if (user.getIsOrgAdmin() && ProjectStatus.PENDING_PREQUALIFICATION.eq(item.getStatus()) - && StringUtils.isNotBlank(w.getSuperOrgCode()) + if (user.getIsOrgAdmin() && StringUtils.isNotBlank(w.getSuperOrgCode()) && w.getSuperOrgCode().equals(user.getMhUnitIdStr())) { item.setCanPreDeclared(Boolean.TRUE); } @@ -642,11 +638,11 @@ public class ProjectLibManage { */ public ProjectDetailVO getProjectDetail(Long projectId) { // 查询最新的项目申报信息 - Project projectInfo = projectService.getNewProject(projectId); - if (Objects.isNull(projectInfo)) { + Project project = projectService.getNewProject(projectId); + if (Objects.isNull(project)) { return null; } - return getProjectDetailLogic(projectInfo); + return getProjectDetailLogic(project); } public ProjectDetailVO getProjectDetail(Project project) { @@ -655,7 +651,8 @@ public class ProjectLibManage { public ProjectDetailVO detailProjectCode(String projectCode) { // 查询最新的项目申报信息 - Project project = projectService.getProjectByCode(projectCode); + Long projectId = ProjectIdCodeCacheUtil.newest(projectCode); + Project project = projectService.getById(projectId); return project == null ? null : getProjectDetailLogic(project); } @@ -814,9 +811,9 @@ public class ProjectLibManage { /** * 申报新项目时 保存项目信息和其它相关联的信息 * - * @param projectDto - * @param instanceId - * @return + * @param projectDto \ + * @param instanceId \ + * @return \ */ public Project saveProjectInDeclared(ProjectDTO projectDto, String instanceId, Long userId) { Project project = saveProjectNewVersion(projectDto, instanceId, userId, Boolean.FALSE); @@ -826,7 +823,7 @@ public class ProjectLibManage { projectInst.setInstCode(instanceId); projectInst.setCreateOn(LocalDateTime.now()); projectInst.setUpdateOn(LocalDateTime.now()); - projectInst.setInstType(ProjectProcessStageEnum.ORG_INTERNAL_APPROVAL_PROCESS.getCode()); + projectInst.setInstType(ProjectProcessStageEnum.COMPLIANCE_REVIEW.getCode()); projectInstService.save(projectInst); return project; } @@ -850,7 +847,7 @@ public class ProjectLibManage { projectInstService.save(projectInst); return project; } - + /** * 申报新项目时 保存项目信息和其它相关联的信息 * @@ -861,7 +858,7 @@ public class ProjectLibManage { public Project saveProjectNewVersion(ProjectDTO projectDto, String instanceId, Long userId, Boolean isContruct) { //流程启动之后 入库项目 重要业务信息 用于列表查询 展示 - return saveProjectNewVersion(projectDto, instanceId, userId, isContruct, ProjectStatus.NOT_APPROVED, ProjectStatus.UNDER_INTERNAL_AUDIT); + return saveProjectNewVersion(projectDto, instanceId, userId, isContruct, ProjectStatus.NOT_APPROVED, ProjectStatus.TO_BE_DECLARED); } public Project saveProjectNewVersion(ProjectDTO projectDto, String instanceId, @@ -883,6 +880,7 @@ public class ProjectLibManage { project.setSponsor(String.valueOf(userId)); String projectCode = projectCodeGenUtil.generateProjectCode(projectDto); project.setProjectCode(projectCode); + projectStateMachineUtil.pass(project); if (projectService.save(project)) { saveApplication(projectDto, project, null); savePaymentPlans(project, projectDto.getPaymentPlanList()); @@ -1237,7 +1235,6 @@ public class ProjectLibManage { //单位管理员 看到自己单位去申报的 + 待预审的主管单位是自己单位的项目 query.and(q1 -> q1.in(Project::getBuildOrgCode, viewUnitIdList) .or(q2 -> q2.eq(Project::getStage, ProjectStatus.NOT_APPROVED.getCode()) - .eq(Project::getStatus, ProjectStatus.PENDING_PREQUALIFICATION.getCode()) .in(Project::getSuperOrgCode, viewUnitIdList))); break; case SUPER_ADMIN: diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/manage/ProjectRenewalFundManage.java b/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/manage/ProjectRenewalFundManage.java index 541eab9..74d9ce0 100644 --- a/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/manage/ProjectRenewalFundManage.java +++ b/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/manage/ProjectRenewalFundManage.java @@ -32,8 +32,8 @@ import com.hz.pm.api.projectlib.model.entity.Project; import com.hz.pm.api.projectlib.model.entity.ProjectAnnualPaymentPlan; import com.hz.pm.api.projectlib.model.entity.ProjectRenewalFundDeclaration; import com.hz.pm.api.projectlib.model.enumeration.ProjectRenewalApprovalStatusEnum; -import com.hz.pm.api.projectlib.model.enumeration.status.ProjectStatus; import com.hz.pm.api.projectlib.model.enumeration.ProjectTypeNewEnum; +import com.hz.pm.api.projectlib.model.enumeration.status.ProjectStatus; import com.hz.pm.api.projectlib.model.po.ProjectRenewalFundDeclarationPO; import com.hz.pm.api.projectlib.model.req.ProjectRenewalAuditReq; import com.hz.pm.api.projectlib.model.req.ProjectRenewalListReq; @@ -174,9 +174,7 @@ public class ProjectRenewalFundManage { item.setProcessStatus(w.getProcessStatus()); item.setInstCode(w.getInstCode()); item.setIsHigherSuperOrg(w.getIsHigherSuperOrg()); - if (user.getIsOrgAdmin() && - ProjectStatus.PENDING_PREQUALIFICATION.eq(item.getStatus()) - && StringUtils.isNotBlank(w.getSuperOrgCode()) + if (user.getIsOrgAdmin() && StringUtils.isNotBlank(w.getSuperOrgCode()) && w.getSuperOrgCode().equals(user.getMhUnitIdStr())) { item.setCanPreDeclared(Boolean.TRUE); } diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/model/enumeration/InstTypeEnum.java b/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/model/enumeration/InstTypeEnum.java index 23d0b93..55de571 100644 --- a/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/model/enumeration/InstTypeEnum.java +++ b/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/model/enumeration/InstTypeEnum.java @@ -33,7 +33,8 @@ public enum InstTypeEnum { APPLY_BORROW(7, "申请借阅审批流程"), SELF_TEST(10, "系统自测审批流程"), ADAPTION(11, "适配改造审批流程"), - TEST_VALID(12, "测试验证审批流程"); + TEST_VALID(12, "测试验证审批流程"), + COMPLIANCE_REVIEW(13, "合规性审查"); private Integer code; private String desc; diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/model/enumeration/WarningFlowTypeEnum.java b/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/model/enumeration/WarningFlowTypeEnum.java index 78e90e0..9e873fc 100644 --- a/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/model/enumeration/WarningFlowTypeEnum.java +++ b/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/model/enumeration/WarningFlowTypeEnum.java @@ -21,10 +21,10 @@ public enum WarningFlowTypeEnum { /** * 预警填报类型枚举 */ - UNIT_INNER_AUDIT(1, "预审申报", ProjectStatus.PENDING_PREQUALIFICATION.getCode(),"declareManage/planDeclaration/preExaminationDeclare"), + UNIT_INNER_AUDIT(1, "预审申报", null,"declareManage/planDeclaration/preExaminationDeclare"), PRELIMINARY_PREVIEW(2, "建设方案申报", ProjectStatus.PLAN_TO_BE_DECLARED.getCode(),"declareManage/constructionPlanDeclare"), DEPT_UNITED_REVIEW(3,"采购结果备案", ProjectStatus.TO_BE_PURCHASED.getCode(),"declareManage/procurementRecord/purchaseResults"), - CONSTRUCTION_PLAN_REVIEW(4,"初验备案", ProjectStatus.UNDER_CONSTRUCTION.getCode(),"declareManage/acceptanceApply/initialInspectionRecord"), + CONSTRUCTION_PLAN_REVIEW(4,"初验备案", null,"declareManage/acceptanceApply/initialInspectionRecord"), PROJECT_FINAL_INSPECTION(5,"验收申报", ProjectStatus.ON_PILOT_RUNNING.getCode(),"declareManage/acceptanceApply/finalInspectionDeclare"); private Integer code; diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/model/enumeration/WarningOperationTypeEnum.java b/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/model/enumeration/WarningOperationTypeEnum.java index cb6b7e0..117019a 100644 --- a/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/model/enumeration/WarningOperationTypeEnum.java +++ b/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/model/enumeration/WarningOperationTypeEnum.java @@ -21,7 +21,7 @@ public enum WarningOperationTypeEnum { /** * 预警实施类型枚举 */ - CHUYAN(1, "项目初验", ProjectStatus.UNDER_CONSTRUCTION.getCode(), "declareManage/acceptanceApply/initialInspectionRecord"), + CHUYAN(1, "项目初验", null, "declareManage/acceptanceApply/initialInspectionRecord"), ZHONGYAN(2, "项目终验", ProjectStatus.ON_PILOT_RUNNING.getCode(), "declareManage/acceptanceApply/finalInspectionDeclare"); private Integer code; diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/model/enumeration/status/ProjectStatus.java b/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/model/enumeration/status/ProjectStatus.java index 0b673ce..4ba6102 100644 --- a/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/model/enumeration/status/ProjectStatus.java +++ b/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/model/enumeration/status/ProjectStatus.java @@ -20,46 +20,51 @@ import java.util.Optional; @Getter @AllArgsConstructor public enum ProjectStatus implements IStatus { + /** * 项目阶段:未立项 */ NOT_APPROVED(10000, "未立项", null), + TO_BE_DECLARED(10015, "待申报", null), + + /** + * 合规性审查 + */ + ON_COMPLIANCE_REVIEW(10030, "合规性审查中", null), + COMPLIANCE_REVIEW_FAILED(10031, "合规性审查不通过", null), + UNDER_INTERNAL_AUDIT(10001, "单位内部审核中", null), UNDER_INTERNAL_AUDIT_NOT_PASS(10002, "单位内部审核不通过", null), - PENDING_PREQUALIFICATION(10003, "待预审", null), - JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS(10004, "省级部门联审中", null), - - JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS_SUCCESS(10018, "省级部门联审通过", null), - THE_JOINT_REVIEW_OF_PROVINCIAL_DEPARTMENTS_FAILED(10005, "省级部门联审不通过", null), - PRE_APPLYING(10006, "预审中", null), - PREQUALIFICATION_FAILED(10007, "预审不通过", null), DEPARTMENT_JOINT_REVIEW(10008, "部门联审中", null), DEPARTMENT_JOINT_REVIEW_FAILED(10009, "部门联审不通过", null), IN_THE_ANNUAL_PLAN(10010, "年度计划中", null), BE_SUSPENDED(10011, "被暂缓", null), TO_BE_APPROVED(10014, "待立项批复", GovProjectStatusEnum.PENDING), - TO_BE_DECLARED(10015, "待申报", null), PLAN_TO_BE_DECLARED(10016, "方案待申报", null), PENDING_PREQUALIFICATION_CHOICE(10017, "待预审选择态", null), PREQUALIFICATION_WITHDRAW_CHOICE(10019, "预审中撤回选择态", null), APPROVED_AFTER_CHOICE(10020, "立项批复后选择态", null), + /** * 信产项目备案 */ DECLARED_APPROVED_TO_BE_RECORD(10022, "待立项备案", null), DECLARED_APPROVED_RECORD_AUDITING(10023, "立项备案审核中", null), DECLARED_APPROVED_RECORD_FAILED(10024, "立项备案审核不通过", null), + /** * 项目阶段:已立项 */ PROJECT_APPROVED(20000, "已立项", null), TO_BE_PURCHASED(20001, "待采购", GovProjectStatusEnum.APPROVED), ON_PURCHASING(20007, "采购中", GovProjectStatusEnum.APPROVED), - UNDER_CONSTRUCTION(20002, "建设中", null), + TO_BE_FIRST_INSPECTED(20008, "待上传初验材料", null), ON_PILOT_RUNNING(20009, "试运行中", null), + ON_FINALLY_INSPECTED(20004, "终验审核中", null), FINALLY_INSPECTED_FAILED(20005, "终验审核不通过", null), + /** * 项目阶段:已归档 */ diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/scheduler/listener/ProcessEndListener.java b/hz-pm-api/src/main/java/com/hz/pm/api/scheduler/listener/ProcessEndListener.java index 518aba8..ea9bd6f 100644 --- a/hz-pm-api/src/main/java/com/hz/pm/api/scheduler/listener/ProcessEndListener.java +++ b/hz-pm-api/src/main/java/com/hz/pm/api/scheduler/listener/ProcessEndListener.java @@ -173,13 +173,6 @@ public class ProcessEndListener { } } else { switch (ProjectStatus.getNoNull(project.getStatus())) { - // 当前项目状态是预审中 - case PRE_APPLYING: - //先修改项目状态 - handlerManage.updatePassProjectStatus(0L, project); - //然后入库暂存库 - projectStagingService.addByProject(project, "暂存入库 待提交部门联审"); - break; // 当前项目状态是单位内部审核中 case UNDER_INTERNAL_AUDIT: // 当前项目状态是部门联审中 diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/scheduler/task/EarlyWarningInstanceNotStartTask.java b/hz-pm-api/src/main/java/com/hz/pm/api/scheduler/task/EarlyWarningInstanceNotStartTask.java index fa96368..c40a023 100644 --- a/hz-pm-api/src/main/java/com/hz/pm/api/scheduler/task/EarlyWarningInstanceNotStartTask.java +++ b/hz-pm-api/src/main/java/com/hz/pm/api/scheduler/task/EarlyWarningInstanceNotStartTask.java @@ -15,8 +15,10 @@ import com.hz.pm.api.projectdeclared.model.entity.Operation; import com.hz.pm.api.projectdeclared.service.IOperationService; import com.hz.pm.api.projectlib.model.entity.Project; import com.hz.pm.api.projectlib.model.entity.ProjectRenewalFundDeclaration; -import com.hz.pm.api.projectlib.model.enumeration.*; -import com.hz.pm.api.projectlib.model.enumeration.status.ProjectStatus; +import com.hz.pm.api.projectlib.model.enumeration.ProjectRenewalApprovalStatusEnum; +import com.hz.pm.api.projectlib.model.enumeration.WarningFlowTypeEnum; +import com.hz.pm.api.projectlib.model.enumeration.WarningNoticeTypeEnum; +import com.hz.pm.api.projectlib.model.enumeration.WarningOperationTypeEnum; import com.hz.pm.api.projectlib.service.IProjectRenewalFundDeclarationService; import com.hz.pm.api.projectlib.service.IProjectService; import com.hz.pm.api.sys.manage.EarlyWarningManage; @@ -145,19 +147,6 @@ public class EarlyWarningInstanceNotStartTask { //需要发通知的项目 List needToWaringProjects = needNextProjects.stream() .filter(p -> { - //判断 当状态在 建设中的时候 是不是要初验了 - if (ProjectStatus.UNDER_CONSTRUCTION.eq(projectStatus)) { - // List allVersionProjectId = projectService.allVersionProjectIds(p.getProjectCode()); - //如果合同信息提交过了 才是 待初验状态 - // TODO 初验提醒 - /*if (StringUtils.isNotBlank(p.getPreliminaryInspectionMaterials())) { - if (0L == contractService.count(Wrappers.lambdaQuery(Contract.class) - .in(Contract::getProjectId, allVersionProjectId))) { - return Boolean.FALSE; - } - }*/ - } - List noticeTypes = Lists.newArrayList(); if (Objects.nonNull(time) && Duration.between(p.getUpdateOn(), LocalDateTime.now()).toMinutes() >= time * 60 && //time * 60 Duration.between(p.getUpdateOn(), LocalDateTime.now()).toMinutes() <= time * 60 + 1) { //time * 60 @@ -317,19 +306,6 @@ public class EarlyWarningInstanceNotStartTask { //需要发通知的项目 List needToWaringProjects = needNextProjects.stream() .filter(p -> { - //判断 当状态在 建设中的时候 是不是要初验了 - if (ProjectStatus.UNDER_CONSTRUCTION.eq(projectStatus)) { - // List allVersionProjectId = projectService.allVersionProjectIds(p.getProjectCode()); - //如果合同信息提交过了 才是 待初验状态 - // 初验提醒 - /*if (StringUtils.isNotBlank(p.getPreliminaryInspectionMaterials())) { - if (0L == contractService.count(Wrappers.lambdaQuery(Contract.class) - .in(Contract::getProjectId, allVersionProjectId))) { - return Boolean.FALSE; - } - }*/ - } - //判断 实施信息中 初验和终验的时间 if (!operationMap.containsKey(p.getProjectCode())) { return Boolean.FALSE; diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/todocenter/manage/HandlerManage.java b/hz-pm-api/src/main/java/com/hz/pm/api/todocenter/manage/HandlerManage.java index 866bbfa..80a78e4 100644 --- a/hz-pm-api/src/main/java/com/hz/pm/api/todocenter/manage/HandlerManage.java +++ b/hz-pm-api/src/main/java/com/hz/pm/api/todocenter/manage/HandlerManage.java @@ -190,14 +190,6 @@ public class HandlerManage { } else { ProjectStatus projectStatus = ProjectStatus.getNoNull(project.getStatus()); switch (projectStatus) { - // 当前项目状态是预审中 - case PRE_APPLYING: - //先修改项目状态 - updatePassProjectStatus(userId, project); - //然后入库暂存库 - projectStagingService.addByProject(project, "暂存入库 待提交部门联审"); - break; - // 当前项目状态是部门联审中 case DEPARTMENT_JOINT_REVIEW: case UNDER_INTERNAL_AUDIT: // 立项备案审批 @@ -433,8 +425,6 @@ public class HandlerManage { //删除所有项目相关的信息 deleteProjectRelated(project); break; - // 当前项目状态是预审中 - case PRE_APPLYING: // 当前项目状态是部门联审中 case DEPARTMENT_JOINT_REVIEW: updateWithdrawProjectStatus(userId, project); diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/todocenter/manage/TodoCenterManage.java b/hz-pm-api/src/main/java/com/hz/pm/api/todocenter/manage/TodoCenterManage.java index 4fcdaff..f75ef01 100644 --- a/hz-pm-api/src/main/java/com/hz/pm/api/todocenter/manage/TodoCenterManage.java +++ b/hz-pm-api/src/main/java/com/hz/pm/api/todocenter/manage/TodoCenterManage.java @@ -20,7 +20,7 @@ import com.hz.pm.api.common.model.entity.ExcelExportWriter; import com.hz.pm.api.common.util.BizUtils; import com.hz.pm.api.common.util.ExcelDownUtil; import com.hz.pm.api.irs.sign.IRSAPIRequest; -import com.hz.pm.api.projectdeclared.manage.DefaultDeclaredProjectManage; +import com.hz.pm.api.projectdeclared.manage.DeclaredProjectHelper; import com.hz.pm.api.projectdeclared.model.entity.PurchaseInst; import com.hz.pm.api.projectdeclared.service.IPurchaseInstService; import com.hz.pm.api.projectlib.manage.ProjectLibManage; @@ -127,7 +127,7 @@ public class TodoCenterManage { private final IProjectService projectService; private final ProjectLibManage projectLibManage; private final ProcessInstanceService processInstanceService; - private final DefaultDeclaredProjectManage defaultDeclaredProjectManage; + private final DeclaredProjectHelper declaredProjectHelper; private final IProjectApplicationService projectApplicationService; private final UserInfoHelper userInfoHelper; private final BuildUserUtils buildUserUtils; @@ -1072,10 +1072,10 @@ public class TodoCenterManage { //项目名称去重 if (StringUtils.isNotBlank(projectDto.getProjectName()) && !projectDto.getProjectName().equals(projectInfo.getProjectName())) { - defaultDeclaredProjectManage.checkDuplication(projectDto); + declaredProjectHelper.checkDuplication(projectDto); } projectDto.setProjectCode(projectInfo.getProjectCode()); - defaultDeclaredProjectManage.checkAmount(projectDto); + declaredProjectHelper.checkAmount(projectDto); //修改项目内容 if (!modifyProject(projectDto, projectInfo)) {