Browse Source

modify:

1. 状态机优化;
tags/24082201
WendyYang 4 months ago
parent
commit
ed2fdd107c
20 changed files with 162 additions and 125 deletions
  1. +9
    -9
      hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/action/TenderStateChangeAction.java
  2. +2
    -2
      hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/action/TestValidStateChangeAction.java
  3. +1
    -0
      hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/builder/impl/AdaptStateMachineBuilderImpl.java
  4. +40
    -34
      hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/builder/impl/TenderStateMachineBuilderImpl.java
  5. +1
    -1
      hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/util/AbstractStateMachineUtil.java
  6. +1
    -0
      hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/util/AdaptStateMachineUtil.java
  7. +3
    -3
      hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/util/TenderStateMachineUtil.java
  8. +5
    -5
      hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/manage/ConstructionManage.java
  9. +8
    -8
      hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/manage/FinalAcceptanceManage.java
  10. +2
    -3
      hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/manage/OperationManage.java
  11. +16
    -21
      hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/manage/PurchaseManage.java
  12. +8
    -0
      hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/service/IContractService.java
  13. +3
    -7
      hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/service/IPurchaseService.java
  14. +4
    -4
      hz-pm-api/src/main/java/com/hz/pm/api/projectlib/helper/ProjectChangeStopHelper.java
  15. +2
    -3
      hz-pm-api/src/main/java/com/hz/pm/api/projectlib/manage/ProjectLibManage.java
  16. +15
    -0
      hz-pm-api/src/main/java/com/hz/pm/api/projectlib/model/enumeration/status/ITenderStatus.java
  17. +6
    -5
      hz-pm-api/src/main/java/com/hz/pm/api/projectlib/model/enumeration/status/TenderAdaptStatus.java
  18. +24
    -10
      hz-pm-api/src/main/java/com/hz/pm/api/projectlib/model/enumeration/status/TenderMainStatus.java
  19. +6
    -5
      hz-pm-api/src/main/java/com/hz/pm/api/projectlib/model/enumeration/status/TenderSelfTestStatus.java
  20. +6
    -5
      hz-pm-api/src/main/java/com/hz/pm/api/projectlib/model/enumeration/status/TenderTestValidStatus.java

+ 9
- 9
hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/action/TenderStateChangeAction.java View File

@@ -6,7 +6,7 @@ import com.hz.pm.api.common.statemachine.event.TenderStateChangeEvent;
import com.hz.pm.api.common.statemachine.util.TenderStateMachineUtil; import com.hz.pm.api.common.statemachine.util.TenderStateMachineUtil;
import com.hz.pm.api.projectdeclared.model.entity.Purchase; import com.hz.pm.api.projectdeclared.model.entity.Purchase;
import com.hz.pm.api.projectlib.model.enumeration.status.TenderAdaptStatus; import com.hz.pm.api.projectlib.model.enumeration.status.TenderAdaptStatus;
import com.hz.pm.api.projectlib.model.enumeration.status.TenderStatus;
import com.hz.pm.api.projectlib.model.enumeration.status.TenderMainStatus;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.messaging.Message; import org.springframework.messaging.Message;
import org.springframework.statemachine.annotation.OnTransition; import org.springframework.statemachine.annotation.OnTransition;
@@ -39,7 +39,7 @@ public class TenderStateChangeAction {
public void SUBMIT_PURCHASE_CONSTRUCTION_INFO(Message<TenderStateChangeEvent> message) { public void SUBMIT_PURCHASE_CONSTRUCTION_INFO(Message<TenderStateChangeEvent> message) {
Purchase purchase = getPurchaseInfo(message); Purchase purchase = getPurchaseInfo(message);
purchase.setAdaptStatus(TenderAdaptStatus.WITHOUT_ADAPT_INFO.getCode()); purchase.setAdaptStatus(TenderAdaptStatus.WITHOUT_ADAPT_INFO.getCode());
purchase.setStatus(TenderStatus.TO_BE_SUBMIT_OPERATION_PLAN.getCode());
purchase.setStatus(TenderMainStatus.TO_BE_SUBMIT_OPERATION_PLAN.getCode());
} }


/** /**
@@ -50,7 +50,7 @@ public class TenderStateChangeAction {
@OnTransition(source = "TO_BE_SUBMIT_PURCHASE_CONSTRUCTION_INFO", target = "TO_BE_SUBMIT_FIRST_INSPECTED_INFO") @OnTransition(source = "TO_BE_SUBMIT_PURCHASE_CONSTRUCTION_INFO", target = "TO_BE_SUBMIT_FIRST_INSPECTED_INFO")
public void SUBMIT_PURCHASE_CONSTRUCTION_INFO_SKIP_TO_FINAL_INSPECT(Message<TenderStateChangeEvent> message) { public void SUBMIT_PURCHASE_CONSTRUCTION_INFO_SKIP_TO_FINAL_INSPECT(Message<TenderStateChangeEvent> message) {
Purchase purchase = getPurchaseInfo(message); Purchase purchase = getPurchaseInfo(message);
purchase.setStatus(TenderStatus.TO_BE_SUBMIT_FIRST_INSPECTED_INFO.getCode());
purchase.setStatus(TenderMainStatus.TO_BE_SUBMIT_FIRST_INSPECTED_INFO.getCode());
} }


/** /**
@@ -61,7 +61,7 @@ public class TenderStateChangeAction {
@OnTransition(source = "WAIT_ORG_CONFIRM", target = "TO_BE_SUBMIT_FIRST_INSPECTED_INFO") @OnTransition(source = "WAIT_ORG_CONFIRM", target = "TO_BE_SUBMIT_FIRST_INSPECTED_INFO")
public void SUBMIT_PURCHASE_ORG_CONFIRM(Message<TenderStateChangeEvent> message) { public void SUBMIT_PURCHASE_ORG_CONFIRM(Message<TenderStateChangeEvent> message) {
Purchase purchase = getPurchaseInfo(message); Purchase purchase = getPurchaseInfo(message);
purchase.setStatus(TenderStatus.TO_BE_SUBMIT_FIRST_INSPECTED_INFO.getCode());
purchase.setStatus(TenderMainStatus.TO_BE_SUBMIT_FIRST_INSPECTED_INFO.getCode());
} }


/** /**
@@ -84,7 +84,7 @@ public class TenderStateChangeAction {
@OnTransition(source = "TO_BE_SUBMIT_FIRST_INSPECTED_INFO", target = "TO_BE_SUBMIT_FINALLY_INSPECTED_APPLY") @OnTransition(source = "TO_BE_SUBMIT_FIRST_INSPECTED_INFO", target = "TO_BE_SUBMIT_FINALLY_INSPECTED_APPLY")
public void SUBMIT_FIRST_INSPECTED_FILES(Message<TenderStateChangeEvent> message) { public void SUBMIT_FIRST_INSPECTED_FILES(Message<TenderStateChangeEvent> message) {
Purchase purchase = getPurchaseInfo(message); Purchase purchase = getPurchaseInfo(message);
purchase.setStatus(TenderStatus.TO_BE_SUBMIT_FINALLY_INSPECTED_APPLY.getCode());
purchase.setStatus(TenderMainStatus.TO_BE_SUBMIT_FINALLY_INSPECTED_APPLY.getCode());
} }


/** /**
@@ -95,7 +95,7 @@ public class TenderStateChangeAction {
@OnTransition(source = "TO_BE_SUBMIT_FINALLY_INSPECTED_APPLY", target = "ON_FINALLY_INSPECTED_APPLY") @OnTransition(source = "TO_BE_SUBMIT_FINALLY_INSPECTED_APPLY", target = "ON_FINALLY_INSPECTED_APPLY")
public void SUBMIT_FINALLY_INSPECTED(Message<TenderStateChangeEvent> message) { public void SUBMIT_FINALLY_INSPECTED(Message<TenderStateChangeEvent> message) {
Purchase purchase = getPurchaseInfo(message); Purchase purchase = getPurchaseInfo(message);
purchase.setStatus(TenderStatus.ON_FINALLY_INSPECTED_APPLY.getCode());
purchase.setStatus(TenderMainStatus.ON_FINALLY_INSPECTED_APPLY.getCode());
} }


/** /**
@@ -106,7 +106,7 @@ public class TenderStateChangeAction {
@OnTransition(source = "FINALLY_INSPECTED_FAILED", target = "ON_FINALLY_INSPECTED_APPLY") @OnTransition(source = "FINALLY_INSPECTED_FAILED", target = "ON_FINALLY_INSPECTED_APPLY")
public void RESUBMIT_FINALLY_INSPECTED(Message<TenderStateChangeEvent> message) { public void RESUBMIT_FINALLY_INSPECTED(Message<TenderStateChangeEvent> message) {
Purchase purchase = getPurchaseInfo(message); Purchase purchase = getPurchaseInfo(message);
purchase.setStatus(TenderStatus.ON_FINALLY_INSPECTED_APPLY.getCode());
purchase.setStatus(TenderMainStatus.ON_FINALLY_INSPECTED_APPLY.getCode());
} }


/** /**
@@ -117,7 +117,7 @@ public class TenderStateChangeAction {
@OnTransition(source = "ON_FINALLY_INSPECTED_APPLY", target = "FINALLY_INSPECTED_PASSED") @OnTransition(source = "ON_FINALLY_INSPECTED_APPLY", target = "FINALLY_INSPECTED_PASSED")
public void FINALLY_INSPECTED_PASSED(Message<TenderStateChangeEvent> message) { public void FINALLY_INSPECTED_PASSED(Message<TenderStateChangeEvent> message) {
Purchase purchase = getPurchaseInfo(message); Purchase purchase = getPurchaseInfo(message);
purchase.setStatus(TenderStatus.FINALLY_INSPECTED_PASSED.getCode());
purchase.setStatus(TenderMainStatus.FINALLY_INSPECTED_PASSED.getCode());
} }


/** /**
@@ -128,7 +128,7 @@ public class TenderStateChangeAction {
@OnTransition(source = "ON_FINALLY_INSPECTED_APPLY", target = "FINALLY_INSPECTED_FAILED") @OnTransition(source = "ON_FINALLY_INSPECTED_APPLY", target = "FINALLY_INSPECTED_FAILED")
public void FINALLY_INSPECTED_FAILED(Message<TenderStateChangeEvent> message) { public void FINALLY_INSPECTED_FAILED(Message<TenderStateChangeEvent> message) {
Purchase purchase = getPurchaseInfo(message); Purchase purchase = getPurchaseInfo(message);
purchase.setStatus(TenderStatus.FINALLY_INSPECTED_FAILED.getCode());
purchase.setStatus(TenderMainStatus.FINALLY_INSPECTED_FAILED.getCode());
} }


} }

+ 2
- 2
hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/action/TestValidStateChangeAction.java View File

@@ -5,7 +5,7 @@ import com.hz.pm.api.common.statemachine.builder.impl.TestValidStateMachineBuild
import com.hz.pm.api.common.statemachine.event.TestValidStateChangeEvent; import com.hz.pm.api.common.statemachine.event.TestValidStateChangeEvent;
import com.hz.pm.api.common.statemachine.util.TenderStateMachineUtil; import com.hz.pm.api.common.statemachine.util.TenderStateMachineUtil;
import com.hz.pm.api.projectdeclared.model.entity.Purchase; import com.hz.pm.api.projectdeclared.model.entity.Purchase;
import com.hz.pm.api.projectlib.model.enumeration.status.TenderStatus;
import com.hz.pm.api.projectlib.model.enumeration.status.TenderMainStatus;
import com.hz.pm.api.projectlib.model.enumeration.status.TenderTestValidStatus; import com.hz.pm.api.projectlib.model.enumeration.status.TenderTestValidStatus;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.messaging.Message; import org.springframework.messaging.Message;
@@ -40,7 +40,7 @@ public class TestValidStateChangeAction {
@OnTransition(source = "TEST_VALID_INFO_AUDIT", target = "TEST_VALID_INFO_PASSED") @OnTransition(source = "TEST_VALID_INFO_AUDIT", target = "TEST_VALID_INFO_PASSED")
public void TEST_VALID_INFO_PASSED(Message<TestValidStateChangeEvent> message) { public void TEST_VALID_INFO_PASSED(Message<TestValidStateChangeEvent> message) {
Purchase purchase = getPurchaseInfo(message); Purchase purchase = getPurchaseInfo(message);
purchase.setStatus(TenderStatus.WAIT_ORG_CONFIRM.getCode());
purchase.setStatus(TenderMainStatus.WAIT_ORG_CONFIRM.getCode());
purchase.setTestValidStatus(TenderTestValidStatus.TEST_VALID_INFO_PASSED.getCode()); purchase.setTestValidStatus(TenderTestValidStatus.TEST_VALID_INFO_PASSED.getCode());
} }




+ 1
- 0
hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/builder/impl/AdaptStateMachineBuilderImpl.java View File

@@ -3,6 +3,7 @@ package com.hz.pm.api.common.statemachine.builder.impl;
import com.hz.pm.api.common.statemachine.builder.BaseStateMachineBuilder; import com.hz.pm.api.common.statemachine.builder.BaseStateMachineBuilder;
import com.hz.pm.api.common.statemachine.event.AdaptStateChangeEvent; import com.hz.pm.api.common.statemachine.event.AdaptStateChangeEvent;
import com.hz.pm.api.projectdeclared.model.entity.Purchase; import com.hz.pm.api.projectdeclared.model.entity.Purchase;
import com.hz.pm.api.projectlib.model.enumeration.status.ITenderStatus;
import com.hz.pm.api.projectlib.model.enumeration.status.TenderAdaptStatus; import com.hz.pm.api.projectlib.model.enumeration.status.TenderAdaptStatus;
import com.ningdatech.basic.exception.BizException; import com.ningdatech.basic.exception.BizException;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;


+ 40
- 34
hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/builder/impl/TenderStateMachineBuilderImpl.java View File

@@ -1,11 +1,15 @@
package com.hz.pm.api.common.statemachine.builder.impl; package com.hz.pm.api.common.statemachine.builder.impl;


import cn.hutool.core.collection.ListUtil;
import cn.hutool.core.util.EnumUtil;
import com.hz.pm.api.common.statemachine.action.TenderStateChangeAction; import com.hz.pm.api.common.statemachine.action.TenderStateChangeAction;
import com.hz.pm.api.common.statemachine.builder.BaseStateMachineBuilder; import com.hz.pm.api.common.statemachine.builder.BaseStateMachineBuilder;
import com.hz.pm.api.common.statemachine.event.TenderStateChangeEvent; import com.hz.pm.api.common.statemachine.event.TenderStateChangeEvent;
import com.hz.pm.api.projectdeclared.model.entity.Purchase; import com.hz.pm.api.projectdeclared.model.entity.Purchase;
import com.hz.pm.api.projectdeclared.model.enumerization.BidTypeEnum; import com.hz.pm.api.projectdeclared.model.enumerization.BidTypeEnum;
import com.hz.pm.api.projectlib.model.enumeration.status.TenderStatus;
import com.hz.pm.api.projectlib.model.enumeration.status.ITenderStatus;
import com.hz.pm.api.projectlib.model.enumeration.status.TenderAdaptStatus;
import com.hz.pm.api.projectlib.model.enumeration.status.TenderMainStatus;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.BeanFactory;
@@ -21,7 +25,7 @@ import org.springframework.statemachine.persist.StateMachinePersister;
import org.springframework.statemachine.support.DefaultStateMachineContext; import org.springframework.statemachine.support.DefaultStateMachineContext;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;


import java.util.EnumSet;
import java.util.*;


/** /**
* <p> * <p>
@@ -35,22 +39,22 @@ import java.util.EnumSet;
@Component @Component
@EnableStateMachine(name = TenderStateMachineBuilderImpl.MACHINE_ID) @EnableStateMachine(name = TenderStateMachineBuilderImpl.MACHINE_ID)
@RequiredArgsConstructor @RequiredArgsConstructor
public class TenderStateMachineBuilderImpl implements BaseStateMachineBuilder<Purchase, TenderStateChangeEvent, TenderStatus> {
public class TenderStateMachineBuilderImpl implements BaseStateMachineBuilder<Purchase, TenderStateChangeEvent, ITenderStatus> {


public static final String MACHINE_ID = "tenderStateMachine"; public static final String MACHINE_ID = "tenderStateMachine";


private final BeanFactory beanFactory; private final BeanFactory beanFactory;


@Override @Override
public StateMachine<TenderStatus, TenderStateChangeEvent> build() throws StateMachineException {
StateMachine<TenderStatus, TenderStateChangeEvent> stateMachine = build(beanFactory);
public StateMachine<ITenderStatus, TenderStateChangeEvent> build() throws StateMachineException {
StateMachine<ITenderStatus, TenderStateChangeEvent> stateMachine = build(beanFactory);
log.info("状态机ID:{}", stateMachine.getId()); log.info("状态机ID:{}", stateMachine.getId());
stateMachine.start(); stateMachine.start();
return stateMachine; return stateMachine;
} }


@Override @Override
public StateMachine<TenderStatus, TenderStateChangeEvent> build(BeanFactory beanFactory) throws StateMachineException {
public StateMachine<ITenderStatus, TenderStateChangeEvent> build(BeanFactory beanFactory) throws StateMachineException {
try { try {
return buildStateMachine(beanFactory); return buildStateMachine(beanFactory);
} catch (Exception e) { } catch (Exception e) {
@@ -58,28 +62,30 @@ public class TenderStateMachineBuilderImpl implements BaseStateMachineBuilder<Pu
} }
} }


private StateMachine<TenderStatus, TenderStateChangeEvent> buildStateMachine(BeanFactory factory) throws Exception {
StateMachineBuilder.Builder<TenderStatus, TenderStateChangeEvent> builder = StateMachineBuilder.builder();
private StateMachine<ITenderStatus, TenderStateChangeEvent> buildStateMachine(BeanFactory factory) throws Exception {
StateMachineBuilder.Builder<ITenderStatus, TenderStateChangeEvent> builder = StateMachineBuilder.builder();
builder.configureConfiguration() builder.configureConfiguration()
.withConfiguration() .withConfiguration()
.machineId(MACHINE_ID) .machineId(MACHINE_ID)
.beanFactory(factory); .beanFactory(factory);


List<ITenderStatus> states = ListUtil.toList(TenderMainStatus.values());
states.add(TenderAdaptStatus.WITHOUT_ADAPT_INFO);

builder.configureStates() builder.configureStates()
.withStates() .withStates()
.initial(TenderStatus.TO_BE_SUBMIT_PURCHASE_CONSTRUCTION_INFO)
.states(EnumSet.allOf(TenderStatus.class));

.initial(TenderMainStatus.TO_BE_SUBMIT_PURCHASE_CONSTRUCTION_INFO)
.states(new HashSet<>(states));
builder.configureTransitions() builder.configureTransitions()
// 填写采购&合同信息 // 填写采购&合同信息
.withExternal() .withExternal()
.source(TenderStatus.TO_BE_SUBMIT_PURCHASE_CONSTRUCTION_INFO)
.target(TenderStatus.TO_BE_SUBMIT_OPERATION_PLAN)
.source(TenderMainStatus.TO_BE_SUBMIT_PURCHASE_CONSTRUCTION_INFO)
.target(TenderMainStatus.TO_BE_SUBMIT_OPERATION_PLAN)
.event(TenderStateChangeEvent.SUBMIT_PURCHASE_CONSTRUCTION_INFO) .event(TenderStateChangeEvent.SUBMIT_PURCHASE_CONSTRUCTION_INFO)
.and() .and()
.withExternal() .withExternal()
.source(TenderStatus.TO_BE_SUBMIT_PURCHASE_CONSTRUCTION_INFO)
.target(TenderStatus.TO_BE_SUBMIT_FIRST_INSPECTED_INFO)
.source(TenderMainStatus.TO_BE_SUBMIT_PURCHASE_CONSTRUCTION_INFO)
.target(TenderMainStatus.TO_BE_SUBMIT_FIRST_INSPECTED_INFO)
.event(TenderStateChangeEvent.SUBMIT_PURCHASE_CONSTRUCTION_INFO) .event(TenderStateChangeEvent.SUBMIT_PURCHASE_CONSTRUCTION_INFO)
.guard(ctx -> { .guard(ctx -> {
Purchase purchase = TenderStateChangeAction.getPurchaseInfo(ctx.getMessage()); Purchase purchase = TenderStateChangeAction.getPurchaseInfo(ctx.getMessage());
@@ -88,43 +94,43 @@ public class TenderStateMachineBuilderImpl implements BaseStateMachineBuilder<Pu
.and() .and()
// 填写实施计划 // 填写实施计划
.withExternal() .withExternal()
.source(TenderStatus.TO_BE_SUBMIT_OPERATION_PLAN)
.target(TenderStatus.WITHOUT_ADAPT_INFO)
.source(TenderMainStatus.TO_BE_SUBMIT_OPERATION_PLAN)
.target(TenderAdaptStatus.WITHOUT_ADAPT_INFO)
.event(TenderStateChangeEvent.SUBMIT_OPERATION_PLAN) .event(TenderStateChangeEvent.SUBMIT_OPERATION_PLAN)
.and() .and()
.withExternal() .withExternal()
.source(TenderStatus.WAIT_ORG_CONFIRM)
.target(TenderStatus.TO_BE_SUBMIT_FIRST_INSPECTED_INFO)
.source(TenderMainStatus.WAIT_ORG_CONFIRM)
.target(TenderMainStatus.TO_BE_SUBMIT_FIRST_INSPECTED_INFO)
.event(TenderStateChangeEvent.SUBMIT_PURCHASE_ORG_CONFIRM) .event(TenderStateChangeEvent.SUBMIT_PURCHASE_ORG_CONFIRM)
.and() .and()
// 上传初验材料 // 上传初验材料
.withExternal() .withExternal()
.source(TenderStatus.TO_BE_SUBMIT_FIRST_INSPECTED_INFO)
.target(TenderStatus.TO_BE_SUBMIT_FINALLY_INSPECTED_APPLY)
.source(TenderMainStatus.TO_BE_SUBMIT_FIRST_INSPECTED_INFO)
.target(TenderMainStatus.TO_BE_SUBMIT_FINALLY_INSPECTED_APPLY)
.event(TenderStateChangeEvent.SUBMIT_FIRST_INSPECTED_FILES) .event(TenderStateChangeEvent.SUBMIT_FIRST_INSPECTED_FILES)
.and() .and()
// 终验申报 // 终验申报
.withExternal() .withExternal()
.source(TenderStatus.TO_BE_SUBMIT_FINALLY_INSPECTED_APPLY)
.target(TenderStatus.ON_FINALLY_INSPECTED_APPLY)
.source(TenderMainStatus.TO_BE_SUBMIT_FINALLY_INSPECTED_APPLY)
.target(TenderMainStatus.ON_FINALLY_INSPECTED_APPLY)
.event(TenderStateChangeEvent.SUBMIT_FINALLY_INSPECTED) .event(TenderStateChangeEvent.SUBMIT_FINALLY_INSPECTED)
.and() .and()
// 终验申报重新提交 // 终验申报重新提交
.withExternal() .withExternal()
.source(TenderStatus.FINALLY_INSPECTED_FAILED)
.target(TenderStatus.ON_FINALLY_INSPECTED_APPLY)
.source(TenderMainStatus.FINALLY_INSPECTED_FAILED)
.target(TenderMainStatus.ON_FINALLY_INSPECTED_APPLY)
.event(TenderStateChangeEvent.RESUBMIT_FINALLY_INSPECTED) .event(TenderStateChangeEvent.RESUBMIT_FINALLY_INSPECTED)
.and() .and()
// 终验申报通过 // 终验申报通过
.withExternal() .withExternal()
.source(TenderStatus.ON_FINALLY_INSPECTED_APPLY)
.target(TenderStatus.FINALLY_INSPECTED_PASSED)
.source(TenderMainStatus.ON_FINALLY_INSPECTED_APPLY)
.target(TenderMainStatus.FINALLY_INSPECTED_PASSED)
.event(TenderStateChangeEvent.FINALLY_INSPECTED_PASSED) .event(TenderStateChangeEvent.FINALLY_INSPECTED_PASSED)
.and() .and()
// 终验申报拒绝 // 终验申报拒绝
.withExternal() .withExternal()
.source(TenderStatus.ON_FINALLY_INSPECTED_APPLY)
.target(TenderStatus.FINALLY_INSPECTED_FAILED)
.source(TenderMainStatus.ON_FINALLY_INSPECTED_APPLY)
.target(TenderMainStatus.FINALLY_INSPECTED_FAILED)
.event(TenderStateChangeEvent.FINALLY_INSPECTED_FAILED) .event(TenderStateChangeEvent.FINALLY_INSPECTED_FAILED)
.and(); .and();
return builder.build(); return builder.build();
@@ -132,16 +138,16 @@ public class TenderStateMachineBuilderImpl implements BaseStateMachineBuilder<Pu


@Override @Override
@Bean(name = "tenderStatePersister") @Bean(name = "tenderStatePersister")
public StateMachinePersister<TenderStatus, TenderStateChangeEvent, Purchase> stateMachinePersister() {
return new DefaultStateMachinePersister<>(new StateMachinePersist<TenderStatus, TenderStateChangeEvent, Purchase>() {
public StateMachinePersister<ITenderStatus, TenderStateChangeEvent, Purchase> stateMachinePersister() {
return new DefaultStateMachinePersister<>(new StateMachinePersist<ITenderStatus, TenderStateChangeEvent, Purchase>() {
@Override @Override
public void write(StateMachineContext<TenderStatus, TenderStateChangeEvent> context, Purchase contextObj) {
public void write(StateMachineContext<ITenderStatus, TenderStateChangeEvent> context, Purchase contextObj) {
log.info("当前项目为:{} ==> {}", contextObj.getProjectId(), contextObj.getId()); log.info("当前项目为:{} ==> {}", contextObj.getProjectId(), contextObj.getId());
} }


@Override @Override
public StateMachineContext<TenderStatus, TenderStateChangeEvent> read(Purchase contextObj) {
return new DefaultStateMachineContext<>(TenderStatus.getNoNull(contextObj.getStatus()),
public StateMachineContext<ITenderStatus, TenderStateChangeEvent> read(Purchase contextObj) {
return new DefaultStateMachineContext<>(TenderMainStatus.getNoNull(contextObj.getStatus()),
null, null, null, null, MACHINE_ID); null, null, null, null, MACHINE_ID);
} }
}); });


+ 1
- 1
hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/util/AbstractStateMachineUtil.java View File

@@ -34,7 +34,7 @@ public interface AbstractStateMachineUtil<O, E extends Enum<E> & AbstractStateCh
try { try {
execute(obj, AbstractStateChangeEvent.getPassEvent(eventClass(), statusFunction().apply(obj))); execute(obj, AbstractStateChangeEvent.getPassEvent(eventClass(), statusFunction().apply(obj)));
} catch (Exception e) { } catch (Exception e) {
LoggerFactory.getLogger(this.getClass()).info("状态机 通过失败 :{}", e.getMessage());
LoggerFactory.getLogger(this.getClass()).info("状态机 通过失败", e);
throw BizException.wrap("状态机通过失败"); throw BizException.wrap("状态机通过失败");
} }
} }


+ 1
- 0
hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/util/AdaptStateMachineUtil.java View File

@@ -5,6 +5,7 @@ import com.hz.pm.api.common.statemachine.event.AdaptStateChangeEvent;
import com.hz.pm.api.projectdeclared.model.entity.Purchase; import com.hz.pm.api.projectdeclared.model.entity.Purchase;
import com.hz.pm.api.projectdeclared.utils.ProjectIdCodeCacheUtil; import com.hz.pm.api.projectdeclared.utils.ProjectIdCodeCacheUtil;
import com.hz.pm.api.projectlib.entity.PurchaseStatusChange; import com.hz.pm.api.projectlib.entity.PurchaseStatusChange;
import com.hz.pm.api.projectlib.model.enumeration.status.ITenderStatus;
import com.hz.pm.api.projectlib.model.enumeration.status.TenderAdaptStatus; import com.hz.pm.api.projectlib.model.enumeration.status.TenderAdaptStatus;
import com.hz.pm.api.projectlib.service.IPurchaseStatusChangeService; import com.hz.pm.api.projectlib.service.IPurchaseStatusChangeService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;


+ 3
- 3
hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/util/TenderStateMachineUtil.java View File

@@ -5,7 +5,7 @@ import com.hz.pm.api.common.statemachine.event.TenderStateChangeEvent;
import com.hz.pm.api.projectdeclared.model.entity.Purchase; import com.hz.pm.api.projectdeclared.model.entity.Purchase;
import com.hz.pm.api.projectdeclared.utils.ProjectIdCodeCacheUtil; import com.hz.pm.api.projectdeclared.utils.ProjectIdCodeCacheUtil;
import com.hz.pm.api.projectlib.entity.PurchaseStatusChange; import com.hz.pm.api.projectlib.entity.PurchaseStatusChange;
import com.hz.pm.api.projectlib.model.enumeration.status.TenderStatus;
import com.hz.pm.api.projectlib.model.enumeration.status.ITenderStatus;
import com.hz.pm.api.projectlib.service.IPurchaseStatusChangeService; import com.hz.pm.api.projectlib.service.IPurchaseStatusChangeService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@@ -54,12 +54,12 @@ public class TenderStateMachineUtil implements AbstractStateMachineUtil<Purchase
change.setProjectId(purchase.getProjectId()); change.setProjectId(purchase.getProjectId());
change.setProjectCode(ProjectIdCodeCacheUtil.get(purchase.getProjectId())); change.setProjectCode(ProjectIdCodeCacheUtil.get(purchase.getProjectId()));
change.setCreateOn(LocalDateTime.now()); change.setCreateOn(LocalDateTime.now());
StateMachine<TenderStatus, TenderStateChangeEvent> stateMachine = tenderStateMachineBuilder.build();
StateMachine<ITenderStatus, TenderStateChangeEvent> stateMachine = tenderStateMachineBuilder.build();
Message<TenderStateChangeEvent> message = MessageBuilder.withPayload(event) Message<TenderStateChangeEvent> message = MessageBuilder.withPayload(event)
.setHeader(PURCHASE, purchase) .setHeader(PURCHASE, purchase)
.build(); .build();
//初始化状态机 //初始化状态机
StateMachinePersister<TenderStatus, TenderStateChangeEvent, Purchase> stateMachinePersister = tenderStateMachineBuilder.stateMachinePersister();
StateMachinePersister<ITenderStatus, TenderStateChangeEvent, Purchase> stateMachinePersister = tenderStateMachineBuilder.stateMachinePersister();
stateMachinePersister.restore(stateMachine, purchase); stateMachinePersister.restore(stateMachine, purchase);
stateMachine.sendEvent(message); stateMachine.sendEvent(message);
change.setAfterStatus(purchase.getStatus()); change.setAfterStatus(purchase.getStatus());


+ 5
- 5
hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/manage/ConstructionManage.java View File

@@ -34,7 +34,7 @@ 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.entity.ProjectInst;
import com.hz.pm.api.projectlib.model.enumeration.ProjectTypeNewEnum; 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.ProjectStatus;
import com.hz.pm.api.projectlib.model.enumeration.status.TenderStatus;
import com.hz.pm.api.projectlib.model.enumeration.status.TenderMainStatus;
import com.hz.pm.api.projectlib.model.enumeration.status.TenderXcfhxApplyStatus; import com.hz.pm.api.projectlib.model.enumeration.status.TenderXcfhxApplyStatus;
import com.hz.pm.api.projectlib.model.req.ProjectListReq; import com.hz.pm.api.projectlib.model.req.ProjectListReq;
import com.hz.pm.api.projectlib.model.vo.ProjectLibListItemVO; import com.hz.pm.api.projectlib.model.vo.ProjectLibListItemVO;
@@ -286,11 +286,11 @@ public class ConstructionManage {
return BeanUtil.copyToList(contracts, ContractVO.class); return BeanUtil.copyToList(contracts, ContractVO.class);
} }


private static final List<TenderStatus> PRE_INSPECTED_PURCHASE_STATUS;
private static final List<TenderMainStatus> PRE_INSPECTED_PURCHASE_STATUS;


static { static {
PRE_INSPECTED_PURCHASE_STATUS = new ArrayList<>(); PRE_INSPECTED_PURCHASE_STATUS = new ArrayList<>();
PRE_INSPECTED_PURCHASE_STATUS.add(TenderStatus.TO_BE_SUBMIT_FIRST_INSPECTED_INFO);
PRE_INSPECTED_PURCHASE_STATUS.add(TenderMainStatus.TO_BE_SUBMIT_FIRST_INSPECTED_INFO);
} }


/** /**
@@ -359,7 +359,7 @@ public class ConstructionManage {
tender.setBidName(x.getBidName()); tender.setBidName(x.getBidName());
tender.setBidId(x.getId()); tender.setBidId(x.getId());
tender.setBidStatus(x.getStatus()); tender.setBidStatus(x.getStatus());
tender.setBidStatusName(TenderStatus.getDescByStatus(x.getStatus()));
tender.setBidStatusName(TenderMainStatus.getDesc(x.getStatus()));
Contract contract = contractMap.get(x.getId()); Contract contract = contractMap.get(x.getId());
if (contract != null) { if (contract != null) {
tender.setConstructionAmount(contract.getTotalAmount()); tender.setConstructionAmount(contract.getTotalAmount());
@@ -476,7 +476,7 @@ public class ConstructionManage {
public synchronized void submitFirstInspectedFiles(PreInsSaveDTO req) { public synchronized void submitFirstInspectedFiles(PreInsSaveDTO req) {
UserInfoDetails user = LoginUserUtil.loginUserDetail(); UserInfoDetails user = LoginUserUtil.loginUserDetail();
Purchase purchase = purchaseService.getById(req.getBidId()); Purchase purchase = purchaseService.getById(req.getBidId());
if (!TenderStatus.TO_BE_SUBMIT_FIRST_INSPECTED_INFO.eq(purchase.getStatus())) {
if (!TenderMainStatus.TO_BE_SUBMIT_FIRST_INSPECTED_INFO.eq(purchase.getStatus())) {
throw BizException.wrap("该标段无法上传初验材料"); throw BizException.wrap("该标段无法上传初验材料");
} }
LocalDateTime now = LocalDateTime.now(); LocalDateTime now = LocalDateTime.now();


+ 8
- 8
hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/manage/FinalAcceptanceManage.java View File

@@ -28,7 +28,7 @@ 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.entity.ProjectInst;
import com.hz.pm.api.projectlib.model.enumeration.status.ProjectStatus; 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.ProjectTypeNewEnum;
import com.hz.pm.api.projectlib.model.enumeration.status.TenderStatus;
import com.hz.pm.api.projectlib.model.enumeration.status.TenderMainStatus;
import com.hz.pm.api.projectlib.model.req.ProjectListReq; import com.hz.pm.api.projectlib.model.req.ProjectListReq;
import com.hz.pm.api.projectlib.model.vo.ProjectLibListItemVO; import com.hz.pm.api.projectlib.model.vo.ProjectLibListItemVO;
import com.hz.pm.api.projectlib.model.vo.TenderListInfoVO; import com.hz.pm.api.projectlib.model.vo.TenderListInfoVO;
@@ -85,13 +85,13 @@ public class FinalAcceptanceManage {


//================================================================================================================== //==================================================================================================================


private static final List<TenderStatus> FINAL_INSPECTED_TENDER_STATUS;
private static final List<TenderMainStatus> FINAL_INSPECTED_TENDER_STATUS;


static { static {
FINAL_INSPECTED_TENDER_STATUS = new ArrayList<>(); FINAL_INSPECTED_TENDER_STATUS = new ArrayList<>();
FINAL_INSPECTED_TENDER_STATUS.add(TenderStatus.FINALLY_INSPECTED_FAILED);
FINAL_INSPECTED_TENDER_STATUS.add(TenderStatus.TO_BE_SUBMIT_FINALLY_INSPECTED_APPLY);
FINAL_INSPECTED_TENDER_STATUS.add(TenderStatus.ON_FINALLY_INSPECTED_APPLY);
FINAL_INSPECTED_TENDER_STATUS.add(TenderMainStatus.FINALLY_INSPECTED_FAILED);
FINAL_INSPECTED_TENDER_STATUS.add(TenderMainStatus.TO_BE_SUBMIT_FINALLY_INSPECTED_APPLY);
FINAL_INSPECTED_TENDER_STATUS.add(TenderMainStatus.ON_FINALLY_INSPECTED_APPLY);
} }




@@ -162,7 +162,7 @@ public class FinalAcceptanceManage {
tender.setBidName(x.getBidName()); tender.setBidName(x.getBidName());
tender.setBidId(x.getId()); tender.setBidId(x.getId());
tender.setBidStatus(x.getStatus()); tender.setBidStatus(x.getStatus());
tender.setBidStatusName(TenderStatus.getDescByStatus(x.getStatus()));
tender.setBidStatusName(TenderMainStatus.getDesc(x.getStatus()));
Contract contract = contractMap.get(x.getId()); Contract contract = contractMap.get(x.getId());
if (contract != null) { if (contract != null) {
tender.setConstructionAmount(contract.getTotalAmount()); tender.setConstructionAmount(contract.getTotalAmount());
@@ -257,8 +257,8 @@ public class FinalAcceptanceManage {
Map<Long, Purchase> purchaseMap = CollUtils.listToMap(purchases, Purchase::getId); Map<Long, Purchase> purchaseMap = CollUtils.listToMap(purchases, Purchase::getId);
Purchase purchase = purchaseMap.get(req.getBidId()); Purchase purchase = purchaseMap.get(req.getBidId());
Assert.notNull(purchase, "当前标段不存在"); Assert.notNull(purchase, "当前标段不存在");
if (!TenderStatus.TO_BE_SUBMIT_FINALLY_INSPECTED_APPLY.eq(purchase.getStatus())
&& !TenderStatus.FINALLY_INSPECTED_FAILED.eq(purchase.getStatus())) {
if (!TenderMainStatus.TO_BE_SUBMIT_FINALLY_INSPECTED_APPLY.eq(purchase.getStatus())
&& !TenderMainStatus.FINALLY_INSPECTED_FAILED.eq(purchase.getStatus())) {
throw BizException.wrap("该标段不支持终验申报"); throw BizException.wrap("该标段不支持终验申报");
} }
Project project = projectService.getNewProject(req.getProjectId()); Project project = projectService.getNewProject(req.getProjectId());


+ 2
- 3
hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/manage/OperationManage.java View File

@@ -1,7 +1,6 @@
package com.hz.pm.api.projectdeclared.manage; package com.hz.pm.api.projectdeclared.manage;


import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.hz.pm.api.common.statemachine.util.ProjectStateMachineUtil; import com.hz.pm.api.common.statemachine.util.ProjectStateMachineUtil;
@@ -13,7 +12,7 @@ import com.hz.pm.api.projectdeclared.model.vo.OperationVO;
import com.hz.pm.api.projectdeclared.service.IOperationService; import com.hz.pm.api.projectdeclared.service.IOperationService;
import com.hz.pm.api.projectdeclared.service.IPurchaseService; import com.hz.pm.api.projectdeclared.service.IPurchaseService;
import com.hz.pm.api.projectlib.model.entity.Project; import com.hz.pm.api.projectlib.model.entity.Project;
import com.hz.pm.api.projectlib.model.enumeration.status.TenderStatus;
import com.hz.pm.api.projectlib.model.enumeration.status.TenderMainStatus;
import com.hz.pm.api.projectlib.service.IProjectService; import com.hz.pm.api.projectlib.service.IProjectService;
import com.hz.pm.api.user.security.model.UserInfoDetails; import com.hz.pm.api.user.security.model.UserInfoDetails;
import com.hz.pm.api.user.util.LoginUserUtil; import com.hz.pm.api.user.util.LoginUserUtil;
@@ -75,7 +74,7 @@ public class OperationManage {
List<Purchase> purchases = purchaseService.listByProjectId(req.getProjectId()); List<Purchase> purchases = purchaseService.listByProjectId(req.getProjectId());
Map<Long, Purchase> purchaseMap = CollUtils.listToMap(purchases, Purchase::getId); Map<Long, Purchase> purchaseMap = CollUtils.listToMap(purchases, Purchase::getId);
Purchase purchase = purchaseMap.get(req.getBidId()); Purchase purchase = purchaseMap.get(req.getBidId());
if (!TenderStatus.TO_BE_SUBMIT_OPERATION_PLAN.eq(purchase.getStatus())) {
if (!TenderMainStatus.TO_BE_SUBMIT_OPERATION_PLAN.eq(purchase.getStatus())) {
throw BizException.wrap("该标段不支持填写实施计划"); throw BizException.wrap("该标段不支持填写实施计划");
} }
Operation operation = operationService.getByBidId(req.getBidId()) Operation operation = operationService.getByBidId(req.getBidId())


+ 16
- 21
hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/manage/PurchaseManage.java View File

@@ -41,7 +41,6 @@ import com.hz.pm.api.projectdeclared.model.vo.PurchaseVO;
import com.hz.pm.api.projectdeclared.model.vo.XcfhxApplyListVO; import com.hz.pm.api.projectdeclared.model.vo.XcfhxApplyListVO;
import com.hz.pm.api.projectdeclared.model.vo.XinchuangVO; import com.hz.pm.api.projectdeclared.model.vo.XinchuangVO;
import com.hz.pm.api.projectdeclared.service.*; import com.hz.pm.api.projectdeclared.service.*;
import com.hz.pm.api.projectdeclared.utils.ProjectIdCodeCacheUtil;
import com.hz.pm.api.projectlib.helper.ProjectManageUtil; import com.hz.pm.api.projectlib.helper.ProjectManageUtil;
import com.hz.pm.api.projectlib.model.entity.Project; 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.entity.ProjectInst;
@@ -52,7 +51,6 @@ import com.hz.pm.api.projectlib.model.vo.ProjectLibListItemVO;
import com.hz.pm.api.projectlib.model.vo.TenderListInfoVO; import com.hz.pm.api.projectlib.model.vo.TenderListInfoVO;
import com.hz.pm.api.projectlib.service.IProjectInstService; import com.hz.pm.api.projectlib.service.IProjectInstService;
import com.hz.pm.api.projectlib.service.IProjectService; import com.hz.pm.api.projectlib.service.IProjectService;
import com.hz.pm.api.projectlib.service.IPurchaseStatusChangeService;
import com.hz.pm.api.sys.manage.ProcessModelManage; import com.hz.pm.api.sys.manage.ProcessModelManage;
import com.hz.pm.api.user.helper.MhUnitCache; import com.hz.pm.api.user.helper.MhUnitCache;
import com.hz.pm.api.user.security.model.UserFullInfoDTO; import com.hz.pm.api.user.security.model.UserFullInfoDTO;
@@ -122,10 +120,7 @@ public class PurchaseManage {
private final IPurchaseInstService purchaseInstService; private final IPurchaseInstService purchaseInstService;
private final IProjectInstService projectInstService; private final IProjectInstService projectInstService;
private final EnvironmentUtil environmentUtil; private final EnvironmentUtil environmentUtil;
private final IPurchaseStatusChangeService purchaseStatusChangeService;

private final IXinchuangService xinchuangService; private final IXinchuangService xinchuangService;

private final MhXchxFileHelper mhXchxFileHelper; private final MhXchxFileHelper mhXchxFileHelper;


/** /**
@@ -158,7 +153,7 @@ public class PurchaseManage {
List<Long> projectIds = CollUtils.fieldList(page.getRecords(), Project::getId); List<Long> projectIds = CollUtils.fieldList(page.getRecords(), Project::getId);
List<Purchase> purchases = purchaseService.listByProjectIds(projectIds); List<Purchase> purchases = purchaseService.listByProjectIds(projectIds);
Map<Long, List<Purchase>> purchaseMap = CollUtils.group(purchases, Purchase::getProjectId); Map<Long, List<Purchase>> purchaseMap = CollUtils.group(purchases, Purchase::getProjectId);
Map<Long, Contract> contractMap = contractService.listByProjectIds(projectIds);
Map<Long, BigDecimal> contractAmountMap = contractService.listContractAmountByProjectIds(projectIds);
List<ProjectLibListItemVO> records = CollUtils.convert(page.getRecords(), w -> { List<ProjectLibListItemVO> records = CollUtils.convert(page.getRecords(), w -> {
ProjectLibListItemVO item = new ProjectLibListItemVO(); ProjectLibListItemVO item = new ProjectLibListItemVO();
item.setId(w.getId()); item.setId(w.getId());
@@ -184,11 +179,8 @@ public class PurchaseManage {
tender.setBidName(x.getBidName()); tender.setBidName(x.getBidName());
tender.setBidId(x.getId()); tender.setBidId(x.getId());
tender.setBidStatus(x.getStatus()); tender.setBidStatus(x.getStatus());
tender.setBidStatusName(TenderStatus.getDescByStatus(x.getStatus()));
Contract contract = contractMap.get(x.getId());
if (contract != null) {
tender.setConstructionAmount(contract.getTotalAmount());
}
tender.setBidStatusName(TenderMainStatus.getDesc(x.getStatus()));
tender.setConstructionAmount(contractAmountMap.get(x.getId()));
return tender; return tender;
})); }));
} }
@@ -359,7 +351,7 @@ public class PurchaseManage {
if (purchase.getId() == null) { if (purchase.getId() == null) {
purchase.setCreateBy(user.getUserIdStr()); purchase.setCreateBy(user.getUserIdStr());
} }
purchase.setStatus(TenderStatus.TO_BE_SUBMIT_PURCHASE_CONSTRUCTION_INFO.getCode());
purchase.setStatus(TenderMainStatus.TO_BE_SUBMIT_PURCHASE_CONSTRUCTION_INFO.getCode());
purchase.setXcfhxApplyStatus(TenderXcfhxApplyStatus.TO_BE_SUBMIT_XCFHX_APPLY.getCode()); purchase.setXcfhxApplyStatus(TenderXcfhxApplyStatus.TO_BE_SUBMIT_XCFHX_APPLY.getCode());
if (Boolean.TRUE.equals(mhPurchaseNoticeOpen) && Boolean.TRUE.equals(w.getPublishMhNotice())) { if (Boolean.TRUE.equals(mhPurchaseNoticeOpen) && Boolean.TRUE.equals(w.getPublishMhNotice())) {
notices.add(buildPurchaseNotice(w, user)); notices.add(buildPurchaseNotice(w, user));
@@ -421,7 +413,7 @@ public class PurchaseManage {
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public synchronized void submitPurchaseRecord(SubmitPurchaseContractRecordReq req) { public synchronized void submitPurchaseRecord(SubmitPurchaseContractRecordReq req) {
Purchase purchase = purchaseService.getById(req.getBidId()); Purchase purchase = purchaseService.getById(req.getBidId());
if (!TenderStatus.TO_BE_SUBMIT_PURCHASE_CONSTRUCTION_INFO.eq(purchase.getStatus())) {
if (!TenderMainStatus.TO_BE_SUBMIT_PURCHASE_CONSTRUCTION_INFO.eq(purchase.getStatus())) {
throw BizException.wrap("该标段无法进行采购&合同信息备案"); throw BizException.wrap("该标段无法进行采购&合同信息备案");
} }
// 保存采购信息 // 保存采购信息
@@ -498,21 +490,24 @@ public class PurchaseManage {
} }
List<Purchase> records = page.getRecords(); List<Purchase> records = page.getRecords();
List<Long> projectIds = CollUtils.fieldList(records, Purchase::getProjectId); List<Long> projectIds = CollUtils.fieldList(records, Purchase::getProjectId);
List<Project> projects = projectService.listByIds(projectIds);
Wrapper<Project> projectQuery = Wrappers.lambdaQuery(Project.class)
.select(Project::getId, Project::getProjectCode, Project::getProjectName, Project::getStatus,
Project::getBuildOrgName, Project::getBuildOrgCode, Project::getUnitStrip)
.in(Project::getId, projectIds);
List<Project> projects = projectService.list(projectQuery);
Map<Long, Project> projectMap = CollUtils.listToMap(projects, Project::getId); Map<Long, Project> projectMap = CollUtils.listToMap(projects, Project::getId);
Map<Long, Contract> contractMap = contractService.listByProjectIds(projectIds); Map<Long, Contract> contractMap = contractService.listByProjectIds(projectIds);
List<PurchaseAdaptionListVO> data = records.stream().map(w -> { List<PurchaseAdaptionListVO> data = records.stream().map(w -> {
PurchaseAdaptionListVO adaption = new PurchaseAdaptionListVO(); PurchaseAdaptionListVO adaption = new PurchaseAdaptionListVO();
adaption.setBidId(w.getId()); adaption.setBidId(w.getId());
adaption.setStatus(w.getStatus());
adaption.setBizName(w.getBidName());
adaption.setProjectId(w.getProjectId());
Project project = projectMap.get(w.getProjectId()); Project project = projectMap.get(w.getProjectId());
adaption.setProjectName(project.getProjectName()); adaption.setProjectName(project.getProjectName());
adaption.setStatus(w.getStatus());
adaption.setBuildOrg(project.getBuildOrgName()); adaption.setBuildOrg(project.getBuildOrgName());
adaption.setProjectStatus(project.getStatus()); adaption.setProjectStatus(project.getStatus());
adaption.setBizName(w.getBidName());
adaption.setProjectId(w.getProjectId());
String projectCode = ProjectIdCodeCacheUtil.get(w.getProjectId());
adaption.setProjectCode(projectCode);
adaption.setProjectCode(project.getProjectCode());
adaption.setUnitStripName(MhUnitStripEnum.getVal(project.getUnitStrip())); adaption.setUnitStripName(MhUnitStripEnum.getVal(project.getUnitStrip()));
Contract contract = contractMap.get(w.getId()); Contract contract = contractMap.get(w.getId());
if (contract != null) { if (contract != null) {
@@ -801,7 +796,7 @@ public class PurchaseManage {
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public synchronized void purchaseOrgConfirm(PurchaseOrgConfirmReq req) { public synchronized void purchaseOrgConfirm(PurchaseOrgConfirmReq req) {
Purchase purchase = purchaseService.getById(req.getBidId()); Purchase purchase = purchaseService.getById(req.getBidId());
if (!TenderStatus.WAIT_ORG_CONFIRM.eq(purchase.getStatus())) {
if (!TenderMainStatus.WAIT_ORG_CONFIRM.eq(purchase.getStatus())) {
throw BizException.wrap("该标段不支持单位确认"); throw BizException.wrap("该标段不支持单位确认");
} }
tenderStateMachineUtil.pass(purchase); tenderStateMachineUtil.pass(purchase);
@@ -814,7 +809,7 @@ public class PurchaseManage {
if (!BidTypeEnum.BUILD_APP.eq(w.getBidType())) { if (!BidTypeEnum.BUILD_APP.eq(w.getBidType())) {
return true; return true;
} }
return TenderStatus.TO_BE_SUBMIT_FIRST_INSPECTED_INFO.eq(w.getStatus());
return TenderMainStatus.TO_BE_SUBMIT_FIRST_INSPECTED_INFO.eq(w.getStatus());
}); });
if (changeProjectStatus) { if (changeProjectStatus) {
Project project = projectService.getNewestNoNull(purchase.getProjectId()); Project project = projectService.getNewestNoNull(purchase.getProjectId());


+ 8
- 0
hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/service/IContractService.java View File

@@ -7,6 +7,7 @@ import com.hz.pm.api.common.model.constant.BizConst;
import com.hz.pm.api.projectdeclared.model.entity.Contract; import com.hz.pm.api.projectdeclared.model.entity.Contract;
import com.ningdatech.basic.util.CollUtils; import com.ningdatech.basic.util.CollUtils;


import java.math.BigDecimal;
import java.util.Collection; import java.util.Collection;
import java.util.Map; import java.util.Map;
import java.util.Optional; import java.util.Optional;
@@ -40,4 +41,11 @@ public interface IContractService extends IService<Contract> {
return CollUtils.listToMap(list(query), Contract::getBidId); return CollUtils.listToMap(list(query), Contract::getBidId);
} }


default Map<Long, BigDecimal> listContractAmountByProjectIds(Collection<Long> projectIds) {
LambdaQueryWrapper<Contract> query = Wrappers.lambdaQuery(Contract.class)
.select(Contract::getBidId, Contract::getTotalAmount)
.in(Contract::getProjectId, projectIds);
return CollUtils.listToMap(list(query), Contract::getBidId, Contract::getTotalAmount);
}

} }

+ 3
- 7
hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/service/IPurchaseService.java View File

@@ -4,16 +4,12 @@ import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.hz.pm.api.common.util.BizUtils;
import com.hz.pm.api.datascope.model.DataScopeDTO;
import com.hz.pm.api.datascope.utils.DataScopeUtil;
import com.hz.pm.api.projectdeclared.model.entity.Purchase; import com.hz.pm.api.projectdeclared.model.entity.Purchase;
import com.hz.pm.api.projectdeclared.model.req.XcfhxListReq; import com.hz.pm.api.projectdeclared.model.req.XcfhxListReq;
import com.hz.pm.api.projectdeclared.model.vo.XcfhxApplyListVO; import com.hz.pm.api.projectdeclared.model.vo.XcfhxApplyListVO;
import com.hz.pm.api.projectlib.model.enumeration.status.TenderStatus;
import com.hz.pm.api.projectlib.model.enumeration.status.TenderMainStatus;
import com.hz.pm.api.user.security.model.UserFullInfoDTO; import com.hz.pm.api.user.security.model.UserFullInfoDTO;
import com.ningdatech.basic.util.CollUtils; import com.ningdatech.basic.util.CollUtils;
import lombok.extern.slf4j.Slf4j;


import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@@ -40,12 +36,12 @@ public interface IPurchaseService extends IService<Purchase> {
.orderByAsc(Purchase::getId)); .orderByAsc(Purchase::getId));
} }


default Set<Long> listProjectIdByStatus(Collection<TenderStatus> status) {
default Set<Long> listProjectIdByStatus(Collection<TenderMainStatus> status) {
if (CollUtil.isEmpty(status)) { if (CollUtil.isEmpty(status)) {
return Collections.emptySet(); return Collections.emptySet();
} }
List<Integer> statusCodes = status.stream() List<Integer> statusCodes = status.stream()
.map(TenderStatus::getCode)
.map(TenderMainStatus::getCode)
.collect(Collectors.toList()); .collect(Collectors.toList());
LambdaQueryWrapper<Purchase> query = Wrappers.lambdaQuery(Purchase.class) LambdaQueryWrapper<Purchase> query = Wrappers.lambdaQuery(Purchase.class)
.select(Purchase::getProjectId) .select(Purchase::getProjectId)


+ 4
- 4
hz-pm-api/src/main/java/com/hz/pm/api/projectlib/helper/ProjectChangeStopHelper.java View File

@@ -87,17 +87,17 @@ public class ProjectChangeStopHelper {
beforeEvent = null; beforeEvent = null;
tenderBeforeEvent = null; tenderBeforeEvent = null;
ProjectStatus status; ProjectStatus status;
TenderStatus tenderStatus;
TenderMainStatus tenderStatus;
if (event.equals(ProjectStateChangeEvent.STOPPED_APPLY_SUBMIT)) { if (event.equals(ProjectStateChangeEvent.STOPPED_APPLY_SUBMIT)) {
status = ProjectStatus.ON_STOPPED_APPLY; status = ProjectStatus.ON_STOPPED_APPLY;
tenderStatus = TenderStatus.ON_STOPPED_APPLY;
tenderStatus = TenderMainStatus.ON_STOPPED_APPLY;
project.setStoppedStatus(buildBizStatus(event).getCode()); project.setStoppedStatus(buildBizStatus(event).getCode());
} else if (event.equals(ProjectStateChangeEvent.CHANGE_APPLY_SUBMIT)) { } else if (event.equals(ProjectStateChangeEvent.CHANGE_APPLY_SUBMIT)) {
status = ProjectStatus.ON_CHANGE_APPLY; status = ProjectStatus.ON_CHANGE_APPLY;
tenderStatus = TenderStatus.ON_CHANGE_APPLY;
tenderStatus = TenderMainStatus.ON_CHANGE_APPLY;
} else { } else {
status = ProjectStatus.STOPPED_PASSED; status = ProjectStatus.STOPPED_PASSED;
tenderStatus = TenderStatus.STOPPED_PASSED;
tenderStatus = TenderMainStatus.STOPPED_PASSED;
project.setStoppedStatus(buildBizStatus(event).getCode()); project.setStoppedStatus(buildBizStatus(event).getCode());
} }
ProjectStatusChange projectStatusChange = ProjectStatusChange.builder() ProjectStatusChange projectStatusChange = ProjectStatusChange.builder()


+ 2
- 3
hz-pm-api/src/main/java/com/hz/pm/api/projectlib/manage/ProjectLibManage.java View File

@@ -27,7 +27,6 @@ import com.hz.pm.api.datascope.model.DataScopeDTO;
import com.hz.pm.api.datascope.utils.DataScopeUtil; import com.hz.pm.api.datascope.utils.DataScopeUtil;
import com.hz.pm.api.expert.model.entity.ExpertReview; import com.hz.pm.api.expert.model.entity.ExpertReview;
import com.hz.pm.api.expert.model.enumeration.ReviewTemplateTypeEnum; import com.hz.pm.api.expert.model.enumeration.ReviewTemplateTypeEnum;
import com.hz.pm.api.expert.model.vo.ProjectReviewDetailVO;
import com.hz.pm.api.expert.service.IExpertReviewService; import com.hz.pm.api.expert.service.IExpertReviewService;
import com.hz.pm.api.filemanage.model.entity.ProjectApplyBorrow; import com.hz.pm.api.filemanage.model.entity.ProjectApplyBorrow;
import com.hz.pm.api.filemanage.service.INdProjectApplyBorrowService; import com.hz.pm.api.filemanage.service.INdProjectApplyBorrowService;
@@ -63,7 +62,7 @@ import com.hz.pm.api.projectlib.model.entity.*;
import com.hz.pm.api.projectlib.model.enumeration.InstTypeEnum; import com.hz.pm.api.projectlib.model.enumeration.InstTypeEnum;
import com.hz.pm.api.projectlib.model.enumeration.ProjectRenewalApprovalStatusEnum; 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.status.ProjectStatus;
import com.hz.pm.api.projectlib.model.enumeration.status.TenderStatus;
import com.hz.pm.api.projectlib.model.enumeration.status.TenderMainStatus;
import com.hz.pm.api.projectlib.model.po.ProjectPO; import com.hz.pm.api.projectlib.model.po.ProjectPO;
import com.hz.pm.api.projectlib.model.req.ProjectApplicationListReq; import com.hz.pm.api.projectlib.model.req.ProjectApplicationListReq;
import com.hz.pm.api.projectlib.model.req.ProjectListReq; import com.hz.pm.api.projectlib.model.req.ProjectListReq;
@@ -725,7 +724,7 @@ public class ProjectLibManage {
if (!purchases.isEmpty()) { if (!purchases.isEmpty()) {
Map<Long, PurchaseVO> purchaseMap = CollUtils.listToMap(purchases, Purchase::getId, w -> { Map<Long, PurchaseVO> purchaseMap = CollUtils.listToMap(purchases, Purchase::getId, w -> {
PurchaseVO purchase = BeanUtil.copyProperties(w, PurchaseVO.class); PurchaseVO purchase = BeanUtil.copyProperties(w, PurchaseVO.class);
purchase.setStatusName(TenderStatus.getDescByStatus(w.getStatus()));
purchase.setStatusName(TenderMainStatus.getDesc(w.getStatus()));
return purchase; return purchase;
}); });
//查询合同备案 //查询合同备案


+ 15
- 0
hz-pm-api/src/main/java/com/hz/pm/api/projectlib/model/enumeration/status/ITenderStatus.java View File

@@ -0,0 +1,15 @@
package com.hz.pm.api.projectlib.model.enumeration.status;

/**
* <p>
* ITenderStatus
* </p>
*
* @author WendyYang
* @since 20:54 2024/8/19
*/
public interface ITenderStatus extends IStatus<Integer, String> {

ProjectStatus getProjectStatus();

}

+ 6
- 5
hz-pm-api/src/main/java/com/hz/pm/api/projectlib/model/enumeration/status/TenderAdaptStatus.java View File

@@ -18,13 +18,14 @@ import java.util.Optional;
*/ */
@Getter @Getter
@AllArgsConstructor @AllArgsConstructor
public enum TenderAdaptStatus implements IStatus<Integer, String> {
public enum TenderAdaptStatus implements ITenderStatus {


WITHOUT_ADAPT_INFO(2100, "待上传开工文件"),
ADAPT_INFO_AUDIT(2101, "开工文件审核中"),
ADAPT_INFO_FAILED(2102, "开工文件审核失败"),
ADAPT_INFO_PASSED(2103, "开工文件审核通过");
WITHOUT_ADAPT_INFO(null, 2100, "待上传开工文件"),
ADAPT_INFO_AUDIT(null, 2101, "开工文件审核中"),
ADAPT_INFO_FAILED(null, 2102, "开工文件审核失败"),
ADAPT_INFO_PASSED(null, 2103, "开工文件审核通过");


private final ProjectStatus projectStatus;
private final Integer code; private final Integer code;
private final String desc; private final String desc;




hz-pm-api/src/main/java/com/hz/pm/api/projectlib/model/enumeration/status/TenderStatus.java → hz-pm-api/src/main/java/com/hz/pm/api/projectlib/model/enumeration/status/TenderMainStatus.java View File

@@ -6,7 +6,11 @@ import lombok.AllArgsConstructor;
import lombok.Getter; import lombok.Getter;


import java.util.Arrays; import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Optional; import java.util.Optional;
import java.util.stream.Collectors;
import java.util.stream.Stream;


/** /**
* <p> * <p>
@@ -18,12 +22,11 @@ import java.util.Optional;
*/ */
@Getter @Getter
@AllArgsConstructor @AllArgsConstructor
public enum TenderStatus implements IStatus<Integer, String> {
public enum TenderMainStatus implements ITenderStatus {


TO_BE_SUBMIT_PURCHASE_CONSTRUCTION_INFO(ProjectStatus.ON_PURCHASING, 101, "待填写采购&合同信息"), TO_BE_SUBMIT_PURCHASE_CONSTRUCTION_INFO(ProjectStatus.ON_PURCHASING, 101, "待填写采购&合同信息"),
TO_BE_SUBMIT_OPERATION_PLAN(ProjectStatus.ON_ADAPTING, 103, "待填写实施计划"), TO_BE_SUBMIT_OPERATION_PLAN(ProjectStatus.ON_ADAPTING, 103, "待填写实施计划"),
// 衔接状态 // 衔接状态
WITHOUT_ADAPT_INFO(ProjectStatus.ON_ADAPTING, TenderAdaptStatus.WITHOUT_ADAPT_INFO.getCode(), "待填写适配改造信息"),
WAIT_ORG_CONFIRM(ProjectStatus.ON_ADAPTING, 104, "待单位确认"), WAIT_ORG_CONFIRM(ProjectStatus.ON_ADAPTING, 104, "待单位确认"),
TO_BE_SUBMIT_FIRST_INSPECTED_INFO(ProjectStatus.TO_BE_FIRST_INSPECTED, 201, "待上传初验材料"), TO_BE_SUBMIT_FIRST_INSPECTED_INFO(ProjectStatus.TO_BE_FIRST_INSPECTED, 201, "待上传初验材料"),
TO_BE_SUBMIT_FINALLY_INSPECTED_APPLY(ProjectStatus.ON_PILOT_RUNNING, 401, "待终验申报"), TO_BE_SUBMIT_FINALLY_INSPECTED_APPLY(ProjectStatus.ON_PILOT_RUNNING, 401, "待终验申报"),
@@ -39,18 +42,29 @@ public enum TenderStatus implements IStatus<Integer, String> {
private final String desc; private final String desc;




private static Optional<TenderStatus> get(Integer tenderStatus) {
return Arrays.stream(values())
.filter(w -> w.eq(tenderStatus))
.findFirst();
private static Optional<ITenderStatus> get(Integer status) {
return Optional.ofNullable(TENDER_STATUS_MAP.get(status));
} }


public static TenderStatus getNoNull(Integer tenderStatus) {
return get(tenderStatus).orElseThrow(() -> BizException.wrap("无效的标段状态:%s", tenderStatus));
public static ITenderStatus getNoNull(Integer status) {
return get(status).orElseThrow(() -> BizException.wrap("无效的标段状态:%s", status));
} }


public static String getDescByStatus(Integer tenderStatus) {
return get(tenderStatus).flatMap(w -> Optional.of(w.getDesc())).orElse(StrUtil.EMPTY);
public static String getDesc(Integer status) {
return get(status).flatMap(w -> Optional.of(w.getDesc())).orElse(StrUtil.EMPTY);
}

private static final Map<Integer, ITenderStatus> TENDER_STATUS_MAP;

static {
List<ITenderStatus> mainStatusList = Arrays.asList(TenderMainStatus.values());
List<ITenderStatus> adaptStatusList = Arrays.asList(TenderAdaptStatus.values());
List<ITenderStatus> selfTestStatusList = Arrays.asList(TenderSelfTestStatus.values());
List<ITenderStatus> testValidStatusList = Arrays.asList(TenderTestValidStatus.values());
TENDER_STATUS_MAP = Stream.of(mainStatusList, adaptStatusList, selfTestStatusList, testValidStatusList)
.flatMap(List::stream)
.collect(Collectors.toMap(IStatus::getCode, w -> w));

} }


} }

+ 6
- 5
hz-pm-api/src/main/java/com/hz/pm/api/projectlib/model/enumeration/status/TenderSelfTestStatus.java View File

@@ -18,13 +18,14 @@ import java.util.Optional;
*/ */
@Getter @Getter
@AllArgsConstructor @AllArgsConstructor
public enum TenderSelfTestStatus implements IStatus<Integer, String> {
public enum TenderSelfTestStatus implements ITenderStatus {


WITHOUT_SELF_TEST_INFO(1100, "待填写系统自测信息"),
SELF_TEST_INFO_AUDIT(1101, "系统自测信息审核中"),
SELF_TEST_INFO_FAILED(1102, "系统自测信息审核失败"),
SELF_TEST_INFO_PASSED(1103, "系统自测信息审核通过");
WITHOUT_SELF_TEST_INFO(null, 1100, "待填写系统自测信息"),
SELF_TEST_INFO_AUDIT(null, 1101, "系统自测信息审核中"),
SELF_TEST_INFO_FAILED(null, 1102, "系统自测信息审核失败"),
SELF_TEST_INFO_PASSED(null, 1103, "系统自测信息审核通过");


private final ProjectStatus projectStatus;
private final Integer code; private final Integer code;
private final String desc; private final String desc;




+ 6
- 5
hz-pm-api/src/main/java/com/hz/pm/api/projectlib/model/enumeration/status/TenderTestValidStatus.java View File

@@ -18,13 +18,14 @@ import java.util.Optional;
*/ */
@Getter @Getter
@AllArgsConstructor @AllArgsConstructor
public enum TenderTestValidStatus implements IStatus<Integer, String> {
public enum TenderTestValidStatus implements ITenderStatus {


WITHOUT_TEST_VALID_INFO(3100, "待填写测试验证信息"),
TEST_VALID_INFO_AUDIT(3101, "测试验证信息审核中"),
TEST_VALID_INFO_FAILED(3102, "测试验证信息审核失败"),
TEST_VALID_INFO_PASSED(3103, "测试验证信息审核通过");
WITHOUT_TEST_VALID_INFO(null, 3100, "待填写测试验证信息"),
TEST_VALID_INFO_AUDIT(null, 3101, "测试验证信息审核中"),
TEST_VALID_INFO_FAILED(null, 3102, "测试验证信息审核失败"),
TEST_VALID_INFO_PASSED(null, 3103, "测试验证信息审核通过");


private final ProjectStatus projectStatus;
private final Integer code; private final Integer code;
private final String desc; private final String desc;




Loading…
Cancel
Save