diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/action/XcfhxStateChangeAction.java b/hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/action/XcfhxStateChangeAction.java index 569664e..56ffda6 100644 --- a/hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/action/XcfhxStateChangeAction.java +++ b/hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/action/XcfhxStateChangeAction.java @@ -3,6 +3,7 @@ package com.hz.pm.api.common.statemachine.action; import com.hz.pm.api.common.statemachine.builder.impl.XcfhxStateMachineBuilderImpl; import com.hz.pm.api.common.statemachine.event.ProjectStateChangeEvent; import com.hz.pm.api.projectdeclared.model.entity.Purchase; +import com.hz.pm.api.projectlib.model.enumeration.status.TenderMainStatus; import com.hz.pm.api.projectlib.model.enumeration.status.TenderXcfhxApplyStatus; import lombok.extern.slf4j.Slf4j; import org.springframework.messaging.Message; @@ -31,6 +32,7 @@ public class XcfhxStateChangeAction { @OnTransition(source = "TO_BE_SUBMIT_XCFHX_APPLY", target = "ON_XCFHX_APPLY") public void SUBMIT_XCFHX_APPLY(Message message) { Purchase purchase = getPurchaseInfo(message); + purchase.setStatus(TenderXcfhxApplyStatus.ON_XCFHX_APPLY.getCode()); purchase.setXcfhxApplyStatus(TenderXcfhxApplyStatus.ON_XCFHX_APPLY.getCode()); } @@ -42,6 +44,7 @@ public class XcfhxStateChangeAction { @OnTransition(source = "ON_XCFHX_APPLY", target = "XCFHX_APPLY_PASSED") public void XCFHX_APPLY_PASSED(Message message) { Purchase purchase = getPurchaseInfo(message); + purchase.setStatus(TenderMainStatus.TO_BE_SUBMIT_FINALLY_INSPECTED_APPLY.getCode()); purchase.setXcfhxApplyStatus(TenderXcfhxApplyStatus.XCFHX_APPLY_PASSED.getCode()); } @@ -53,6 +56,7 @@ public class XcfhxStateChangeAction { @OnTransition(source = "ON_XCFHX_APPLY", target = "XCFHX_APPLY_FAILED") public void XCFHX_APPLY_FAILED(Message message) { Purchase purchase = getPurchaseInfo(message); + purchase.setStatus(TenderXcfhxApplyStatus.XCFHX_APPLY_FAILED.getCode()); purchase.setXcfhxApplyStatus(TenderXcfhxApplyStatus.XCFHX_APPLY_FAILED.getCode()); } @@ -64,6 +68,7 @@ public class XcfhxStateChangeAction { @OnTransition(source = "XCFHX_APPLY_FAILED", target = "ON_XCFHX_APPLY") public void RESUBMIT_XCFHX_APPLY(Message message) { Purchase purchase = getPurchaseInfo(message); + purchase.setStatus(TenderXcfhxApplyStatus.ON_XCFHX_APPLY.getCode()); purchase.setXcfhxApplyStatus(TenderXcfhxApplyStatus.ON_XCFHX_APPLY.getCode()); } 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 28dbfce..13da56f 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 @@ -8,6 +8,7 @@ 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.TenderMainStatus; +import com.hz.pm.api.projectlib.model.enumeration.status.TenderXcfhxApplyStatus; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.BeanFactory; @@ -132,7 +133,7 @@ public class TenderStateMachineBuilderImpl implements BaseStateMachineBuilder(); + // 信创符合性申请 + FINAL_INSPECTED_TENDER_STATUS.add(TenderXcfhxApplyStatus.TO_BE_SUBMIT_XCFHX_APPLY.getCode()); + FINAL_INSPECTED_TENDER_STATUS.add(TenderXcfhxApplyStatus.ON_XCFHX_APPLY.getCode()); + FINAL_INSPECTED_TENDER_STATUS.add(TenderXcfhxApplyStatus.XCFHX_APPLY_FAILED.getCode()); + // 终验 FINAL_INSPECTED_TENDER_STATUS.add(TenderMainStatus.TO_BE_SUBMIT_FINALLY_INSPECTED_APPLY.getCode()); FINAL_INSPECTED_TENDER_STATUS.add(TenderMainStatus.ON_FINALLY_INSPECTED_APPLY.getCode()); FINAL_INSPECTED_TENDER_STATUS.add(TenderMainStatus.FINALLY_INSPECTED_PASSED.getCode()); @@ -138,12 +145,16 @@ public class FinalAcceptanceManage { .filter(purchase -> projectIds.contains(purchase.getProjectId())) .collect(Collectors.groupingBy(Purchase::getProjectId, Collectors.mapping(Purchase::getStatus, Collectors.toList()))); - BiFunction>, TenderMainStatus, Integer> counter = (statusMap, status) -> { + BiFunction>, ITenderStatus, Integer> counter = (statusMap, status) -> { Set>> entries = statusMap.entrySet(); return CollUtil.count(entries, entry -> entry.getValue().contains(status.getCode())); }; + Integer xcfhxApplyingCount = counter.apply(purchaseStatusMap, TenderXcfhxApplyStatus.TO_BE_SUBMIT_XCFHX_APPLY) + + counter.apply(purchaseStatusMap, TenderXcfhxApplyStatus.ON_XCFHX_APPLY) + + counter.apply(purchaseStatusMap, TenderXcfhxApplyStatus.XCFHX_APPLY_FAILED); return FinalAcceptProgressVO.builder() .totalCount(projects.size()) + .xcfhxCount(xcfhxApplyingCount) .auditCount(counter.apply(purchaseStatusMap, TenderMainStatus.ON_FINALLY_INSPECTED_APPLY)) .todoCount(counter.apply(purchaseStatusMap, TenderMainStatus.TO_BE_SUBMIT_FINALLY_INSPECTED_APPLY)) .failedCount(counter.apply(purchaseStatusMap, TenderMainStatus.FINALLY_INSPECTED_FAILED)) @@ -169,6 +180,10 @@ public class FinalAcceptanceManage { .eq(Purchase::getBidType, BidTypeEnum.BUILD_APP.getCode()); if (req.getTabStatus() == null) { purchaseQuery.in(Purchase::getStatus, FINAL_INSPECTED_TENDER_STATUS); + } else if (TenderXcfhxApplyStatus.ON_XCFHX_APPLY.eq(req.getTabStatus())) { + purchaseQuery.in(Purchase::getStatus, TenderXcfhxApplyStatus.TO_BE_SUBMIT_XCFHX_APPLY.getCode(), + TenderXcfhxApplyStatus.ON_XCFHX_APPLY.getCode(), + TenderXcfhxApplyStatus.XCFHX_APPLY_FAILED.getCode()); } else { purchaseQuery.eq(Purchase::getStatus, req.getTabStatus()); } 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 33ffff3..70a6864 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 @@ -712,7 +712,10 @@ public class PurchaseManage { } SpringUtil.publishEvent(MhTodoHandedEvent.of(MHTodoTypeEnum.WITHOUT_PURCHASE_CONTRACT, purchase.getId())); if (BidTypeEnum.BUILD_APP.eq(purchase.getBidType())) { - SpringUtil.publishEvent(MhTodoSendEvent.of(MHTodoTypeEnum.WITHOUT_OPERATION_PLAN, project, purchase)); + boolean exists = purchaseStatusChangeService.exists(project.getProjectCode(), TenderStateChangeEvent.SUBMIT_OPERATION_PLAN); + MhTodoSendEvent event = MhTodoSendEvent.of(MHTodoTypeEnum.WITHOUT_OPERATION_PLAN, project, purchase); + event.setActiveName((exists ? ProjectStatus.ON_ADAPTING : ProjectStatus.TO_BE_ADAPT).getCode()); + SpringUtil.publishEvent(event); } stagingManage.delete(StagingType.PURCHASE_RECORD, req.getBidId()); } @@ -1148,7 +1151,10 @@ public class PurchaseManage { projectService.updateById(project); } SpringUtil.publishEvent(MhTodoHandedEvent.of(MHTodoTypeEnum.WITHOUT_ORG_CONFIRM, req.getBidId())); - SpringUtil.publishEvent(MhTodoSendEvent.of(MHTodoTypeEnum.WITHOUT_FIRST_ACCEPT_RECORD, project, purchase)); + boolean exists = purchaseStatusChangeService.exists(project.getProjectCode(), TenderStateChangeEvent.SUBMIT_FIRST_INSPECTED_FILES); + MhTodoSendEvent todoEvent = MhTodoSendEvent.of(MHTodoTypeEnum.WITHOUT_FIRST_ACCEPT_RECORD, project, purchase); + todoEvent.setActiveName((exists ? ProjectStatus.ON_FIRST_INSPECTING : TO_BE_SUBMIT_FIRST_INSPECTED_INFO).getCode()); + SpringUtil.publishEvent(todoEvent); } private boolean allPurchaseOrgConfirmed(Long projectId) { diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/model/vo/FinalAcceptProgressVO.java b/hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/model/vo/FinalAcceptProgressVO.java index 4a1737d..cfbc381 100644 --- a/hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/model/vo/FinalAcceptProgressVO.java +++ b/hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/model/vo/FinalAcceptProgressVO.java @@ -19,6 +19,9 @@ public class FinalAcceptProgressVO { @ApiModelProperty("总数量") private Integer totalCount; + @ApiModelProperty("信创符合性申请数量") + private Integer xcfhxCount; + @ApiModelProperty("审核中数量") private Integer auditCount; diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/manage/ProjectManageTodoCountManage.java b/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/manage/ProjectManageTodoCountManage.java index d8c605f..71a3d16 100644 --- a/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/manage/ProjectManageTodoCountManage.java +++ b/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/manage/ProjectManageTodoCountManage.java @@ -104,7 +104,7 @@ public class ProjectManageTodoCountManage { projReqOrg.setBuildOrgCode(req.getBuildOrgCode()); FinalAcceptProgressVO finalAccept = finalAcceptanceManage.finalAcceptProgress(projReqOrg); ret.setFinalAccept(sum(finalAccept, FinalAcceptProgressVO::getTodoCount, - FinalAcceptProgressVO::getFailedCount)); + FinalAcceptProgressVO::getFailedCount, FinalAcceptProgressVO::getXcfhxCount)); }, ThreadPoolUtil.REQUEST)); CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])).join(); return ret; diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/model/enumeration/status/TenderXcfhxApplyStatus.java b/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/model/enumeration/status/TenderXcfhxApplyStatus.java index 8885af4..0b9c541 100644 --- a/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/model/enumeration/status/TenderXcfhxApplyStatus.java +++ b/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/model/enumeration/status/TenderXcfhxApplyStatus.java @@ -18,13 +18,14 @@ import java.util.Optional; */ @Getter @AllArgsConstructor -public enum TenderXcfhxApplyStatus implements IStatus { +public enum TenderXcfhxApplyStatus implements ITenderStatus { - TO_BE_SUBMIT_XCFHX_APPLY(301, "待信创符合性申请"), - ON_XCFHX_APPLY(302, "信创符合性申请中"), - XCFHX_APPLY_FAILED(303, "信创符合性申请不通过"), - XCFHX_APPLY_PASSED(304, "信创符合性申请通过"); + TO_BE_SUBMIT_XCFHX_APPLY(null, 301, "待信创符合性申请"), + ON_XCFHX_APPLY(null, 302, "信创符合性申请中"), + XCFHX_APPLY_FAILED(null, 303, "信创符合性申请不通过"), + XCFHX_APPLY_PASSED(null, 304, "信创符合性申请通过"); + private final ProjectStatus projectStatus; private final Integer code; private final String desc; @@ -33,7 +34,7 @@ public enum TenderXcfhxApplyStatus implements IStatus { } public static TenderXcfhxApplyStatus getNoNull(Integer code) { - return get(code).orElseThrow(() -> BizException.wrap("无效的信创符合性审查状态:%s",code)); + return get(code).orElseThrow(() -> BizException.wrap("无效的信创符合性审查状态:%s", code)); } public static String getDesc(Integer code) { diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/service/IPurchaseStatusChangeService.java b/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/service/IPurchaseStatusChangeService.java index b9b6873..17957f9 100644 --- a/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/service/IPurchaseStatusChangeService.java +++ b/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/service/IPurchaseStatusChangeService.java @@ -1,5 +1,6 @@ package com.hz.pm.api.projectlib.service; +import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.hz.pm.api.common.model.constant.BizConst; @@ -25,6 +26,13 @@ import java.util.Map; * @since 2024-04-01 */ public interface IPurchaseStatusChangeService extends IService { + default boolean exists(String projectCode, TenderStateChangeEvent event) { + Wrapper pscQuery = Wrappers.lambdaQuery(PurchaseStatusChange.class) + .eq(PurchaseStatusChange::getProjectCode, projectCode) + .eq(PurchaseStatusChange::getEvent, event); + return count(pscQuery) > 0; + } + default PurchaseStatusChange getLastOne(String projectCode, Collection events) { LambdaQueryWrapper pscQuery = Wrappers.lambdaQuery(PurchaseStatusChange.class) .eq(PurchaseStatusChange::getProjectCode, projectCode) diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/scheduler/listener/MhTodoHandedListener.java b/hz-pm-api/src/main/java/com/hz/pm/api/scheduler/listener/MhTodoHandedListener.java index c2f006e..ab76e63 100644 --- a/hz-pm-api/src/main/java/com/hz/pm/api/scheduler/listener/MhTodoHandedListener.java +++ b/hz-pm-api/src/main/java/com/hz/pm/api/scheduler/listener/MhTodoHandedListener.java @@ -1,7 +1,6 @@ package com.hz.pm.api.scheduler.listener; import cn.hutool.core.collection.CollUtil; -import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.hz.pm.api.scheduler.listener.event.MhTodoHandedEvent; @@ -36,7 +35,7 @@ public class MhTodoHandedListener { if (CollUtil.isNotEmpty(event.getBizIds())) { wrapper.in(MhTodoRecord::getBizId, CollUtils.convert(event.getBizIds(), String::valueOf)); } else { - wrapper.eq(MhTodoRecord::getBizId, event.getBizId().toString()); + wrapper.eq(MhTodoRecord::getBizId, event.getBizId()); } mhTodoRecordService.update(wrapper); } diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/scheduler/listener/MhTodoSendListener.java b/hz-pm-api/src/main/java/com/hz/pm/api/scheduler/listener/MhTodoSendListener.java index 363764d..460f874 100644 --- a/hz-pm-api/src/main/java/com/hz/pm/api/scheduler/listener/MhTodoSendListener.java +++ b/hz-pm-api/src/main/java/com/hz/pm/api/scheduler/listener/MhTodoSendListener.java @@ -81,6 +81,7 @@ public class MhTodoSendListener { .path(nextStep.getPagePath()) .userName(user.getRealName()) .userId(createBy) + .activeName(ObjUtil.defaultIfNull(event.getActiveName(), todoType.getActiveName())) .build(); mhTodoClient.addTodo(paramObj, user, nextStep, bizId.toString(), todoMsg); } diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/scheduler/listener/event/MhTodoSendEvent.java b/hz-pm-api/src/main/java/com/hz/pm/api/scheduler/listener/event/MhTodoSendEvent.java index f7e00b4..3244e0c 100644 --- a/hz-pm-api/src/main/java/com/hz/pm/api/scheduler/listener/event/MhTodoSendEvent.java +++ b/hz-pm-api/src/main/java/com/hz/pm/api/scheduler/listener/event/MhTodoSendEvent.java @@ -55,4 +55,6 @@ public class MhTodoSendEvent extends ApplicationEvent { private Xinchuang xinchuang; + private Integer activeName; + }