From f5429fd58cb41e1e4cea49ca15d0e6f771a9cec2 Mon Sep 17 00:00:00 2001 From: xs Date: Mon, 19 May 2025 11:18:57 +0800 Subject: [PATCH] =?UTF-8?q?1.3.5=20=E5=90=8E=E7=AB=AF=EF=BC=9A=E7=8A=B6?= =?UTF-8?q?=E6=80=81=E5=8F=98=E6=8D=A2=E7=A4=BA=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mes/config/PlanStatusMachineConfig.java | 92 +++++++++++++++++++ .../org/dromara/mes/enums/PlanEventEnum.java | 16 ++++ .../org/dromara/mes/enums/PlanStatusEnum.java | 41 +++++++++ .../mes/listeners/StatusMachineListeners.java | 39 ++++++++ 4 files changed, 188 insertions(+) create mode 100644 ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/config/PlanStatusMachineConfig.java create mode 100644 ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/enums/PlanEventEnum.java create mode 100644 ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/enums/PlanStatusEnum.java create mode 100644 ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/listeners/StatusMachineListeners.java diff --git a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/config/PlanStatusMachineConfig.java b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/config/PlanStatusMachineConfig.java new file mode 100644 index 0000000..da9de6b --- /dev/null +++ b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/config/PlanStatusMachineConfig.java @@ -0,0 +1,92 @@ +package org.dromara.mes.config; + +import org.dromara.mes.enums.PlanEventEnum; +import org.dromara.mes.enums.PlanStatusEnum; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.statemachine.config.EnableStateMachineFactory; +import org.springframework.statemachine.config.StateMachineConfigurerAdapter; +import org.springframework.statemachine.config.builders.StateMachineStateConfigurer; +import org.springframework.statemachine.config.builders.StateMachineTransitionConfigurer; + +import org.springframework.statemachine.guard.Guard; +import org.springframework.statemachine.action.Action; + +import java.util.EnumSet; + +@Configuration +@EnableStateMachineFactory +public class PlanStatusMachineConfig extends StateMachineConfigurerAdapter { + + @Override + public void configure(StateMachineStateConfigurer states) throws Exception { + states + .withStates() + .initial(PlanStatusEnum.CREATED) + .states(EnumSet.allOf(PlanStatusEnum.class)); + } + + @Override + public void configure(StateMachineTransitionConfigurer transitions) throws Exception { + transitions + .withExternal() + .source(PlanStatusEnum.CREATED) + .target(PlanStatusEnum.PLANNED) + .event(PlanEventEnum.PLAN) + .and() + .withExternal() + .source(PlanStatusEnum.PLANNED) + .target(PlanStatusEnum.IN_PROGRESS) + .event(PlanEventEnum.START) + .action(startAction()) + .and() + .withExternal() + .source(PlanStatusEnum.IN_PROGRESS) + .target(PlanStatusEnum.PAUSED) + .event(PlanEventEnum.PAUSE) + .and() + .withExternal() + .source(PlanStatusEnum.PAUSED) + .target(PlanStatusEnum.IN_PROGRESS) + .event(PlanEventEnum.RESUME) + .and() + .withExternal() + .source(PlanStatusEnum.IN_PROGRESS) + .target(PlanStatusEnum.COMPLETED) + .event(PlanEventEnum.COMPLETE) + .guard(completionGuard()) + .and() + .withExternal() + .source(PlanStatusEnum.CREATED) + .target(PlanStatusEnum.CANCELLED) + .event(PlanEventEnum.CANCEL) + .and() + .withExternal() + .source(PlanStatusEnum.PLANNED) + .target(PlanStatusEnum.CANCELLED) + .event(PlanEventEnum.CANCEL) + .and() + .withExternal() + .source(PlanStatusEnum.IN_PROGRESS) + .target(PlanStatusEnum.CANCELLED) + .event(PlanEventEnum.CANCEL); + } + + @Bean + public Action startAction() { + return context -> { + System.out.println("工单启动,准备资源..."); + // 可注入其他Service + }; + } + + @Bean + public Guard completionGuard() { + return context -> { + // 检查是否允许完成 + System.out.println("检查是否允许完成"); + return true; // 示例:始终允许 + }; + } + +} diff --git a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/enums/PlanEventEnum.java b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/enums/PlanEventEnum.java new file mode 100644 index 0000000..89ffda3 --- /dev/null +++ b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/enums/PlanEventEnum.java @@ -0,0 +1,16 @@ +package org.dromara.mes.enums; + +/** + * @description 生产工单(pro_plan_info)事件枚举 + * 工单计划状态(0未下发 1已下发 2已开始 3已完成 4已撤回) + * @author xins + * @date 2025/4/15 9:28 + */ +public enum PlanEventEnum { + PLAN, // 计划 + START, // 开始 + PAUSE, // 暂停 + RESUME, // 恢复 + COMPLETE, // 完成 + CANCEL // 取消 +} diff --git a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/enums/PlanStatusEnum.java b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/enums/PlanStatusEnum.java new file mode 100644 index 0000000..ec36cb6 --- /dev/null +++ b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/enums/PlanStatusEnum.java @@ -0,0 +1,41 @@ +package org.dromara.mes.enums; + +/** + * @description 生产工单(pro_plan_info)状态枚举 + * 工单计划状态(0未下发 1已下发 2已开始 3已完成 4已撤回) + * @author xins + * @date 2025/4/15 9:28 + */ +public enum PlanStatusEnum { + CREATED("0", "已创建"), + PLANNED("1", "已计划"), + IN_PROGRESS("2", "进行中"), + PAUSED("3", "已暂停"), + COMPLETED("4", "已完成"), + CANCELLED("5", "已取消"); + + private final String code; + private final String description; + + PlanStatusEnum(String code, String description) { + this.code = code; + this.description = description; + } + + public String getCode() { + return code; + } + + public String getDescription() { + return description; + } + + public static PlanStatusEnum fromCode(String code) { + for (PlanStatusEnum status : PlanStatusEnum.values()) { + if (status.getCode().equals(code)) { + return status; + } + } + throw new IllegalArgumentException("Invalid status code: " + code); + } +} diff --git a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/listeners/StatusMachineListeners.java b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/listeners/StatusMachineListeners.java new file mode 100644 index 0000000..243636d --- /dev/null +++ b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/listeners/StatusMachineListeners.java @@ -0,0 +1,39 @@ +package org.dromara.mes.listeners; + +import lombok.extern.slf4j.Slf4j; +import org.dromara.mes.enums.PlanEventEnum; +import org.dromara.mes.enums.PlanStatusEnum; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationEventPublisher; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.statemachine.listener.StateMachineListener; +import org.springframework.statemachine.listener.StateMachineListenerAdapter; +import org.springframework.statemachine.state.State; +import org.springframework.stereotype.Component; + +/** + * @Author xins + * @Date 2025/4/15 14:07 + * @Description: + */ +@Slf4j +@Component +public class StatusMachineListeners extends StateMachineListenerAdapter{ + + @Override + public void stateChanged(State from, State to) { + System.out.println("State changed from " + (from != null ? from.getId() : "null") + + " to " + to.getId()); + } + + @Override + public void stateEntered(State state) { + System.out.println("Entered state: " + state.getId()); + } + + @Override + public void stateExited(State state) { + System.out.println("Exited state: " + state.getId()); + } +}