ServiceOrder生命周期元数据

@StateMachine
public interface ServiceOrderLifecycleMeta extends OrderLifecycleMeta {@StateSetpublic static class States extends OrderLifecycleMeta.States {@InboundWhiles({@InboundWhile(relation = SummaryPlan.class, on = { ServiceSummaryPlanLifecycleMeta.States.Ongoing.class }, otherwise = {@ErrorMessage(states = { ServiceSummaryPlanLifecycleMeta.States.VolumeLeftEmpty.class }, bundle = Consts.BUNDLE_NAME,code = ErrorCodes.SUMMARY_PLAN__SHOULD_BE_ONGOING_THAN_VOLUME_EMPTY),@ErrorMessage(states = { ServiceSummaryPlanLifecycleMeta.States.Done.class }, bundle = Consts.BUNDLE_NAME,code = ErrorCodes.SUMMARY_PLAN__SHOULD_BE_ONGOING_THAN_DONE) }),@InboundWhile(relation = PlantResource.class,on = { PlantResourceLifecycleMeta.States.Idle.class, PlantResourceLifecycleMeta.States.Busy.class }, otherwise = { @ErrorMessage(bundle = Consts.BUNDLE_NAME, code = ErrorCodes.MIXING_PLANT_RESOURCE_INOT_IN_IDLE_OR_BUSY_STATE,states = { PlantResourceLifecycleMeta.States.Maintaining.class }) }),@InboundWhile(relation = ConcreteTruckResource.class, on = { ConcreteTruckResourceLifecycleMeta.States.Idle.class,ConcreteTruckResourceLifecycleMeta.States.Busy.class }, otherwise = { @ErrorMessage(bundle = Consts.BUNDLE_NAME,code = ErrorCodes.TRUCK_RESOURCE_NOT_IN_IDLE_OR_BUSY_STATE, states = { ConcreteTruckResourceLifecycleMeta.States.Detached.class }) }) })public static class Ongoing extends OrderLifecycleMeta.States.Ongoing {}}@TransitionSetpublic static class Transitions extends OrderLifecycleMeta.Transitions {}@RelationSetpublic static class Relations {@Parent@RelateTo(ServiceSummaryPlanLifecycleMeta.class)public static class SummaryPlan {}@RelateTo(ConcreteTruckResourceLifecycleMeta.class)public static class ConcreteTruckResource {}@RelateTo(PlantResourceLifecycleMeta.class)public static class PlantResource {}}
}

VehicleScheduleOrder生命周期元数据

@StateMachine
public interface VehicleScheduleOrderLifecycleMeta extends OrderLifecycleMeta {@StateSetpublic static class States {@LifecycleOverride@CompositeState@InboundWhile(relation = Relations.ConcreteTruckResource.class, on = { ConcreteTruckResourceLifecycleMeta.States.Idle.class },otherwise = { @ErrorMessage(bundle = Consts.BUNDLE_NAME, code = ErrorCodes.TRUCK_RESOURCE_NOT_IN_IDLE_OR_BUSY_STATE,states = { ConcreteTruckResourceLifecycleMeta.States.Detached.class }) })public static class Ongoing extends OrderLifecycleMeta.States.Ongoing {@StateSetpublic static class CStates {@Initial@Function(transition = CTransitions.DoTransport.class, value = { OnPassage.class })public static class Loading {}@Function(transition = CTransitions.DoConstruct.class, value = { Constructing.class })public static class OnPassage {}@Function(transition = CTransitions.DoFinish.class, value = { Exit.class })public static class Constructing {}@End@ShortCut(value = Finished.class)public static class Exit {}}@TransitionSetpublic static class CTransitions {public static class DoFinish {}public static class DoTransport {}public static class DoConstruct {}}}}@TransitionSetpublic static class Transitions extends OrderLifecycleMeta.Transitions {}@RelationSetpublic static class Relations {@Parent@RelateTo(ServiceOrderLifecycleMeta.class)public static class ServiceOrder {}@RelateTo(ConcreteTruckResourceLifecycleMeta.class)public static class ConcreteTruckResource {}}
}

ConcreteTruckResource生命周期元数据

@StateMachine
public interface ConcreteTruckResourceLifecycleMeta extends SchedulableResourceLifecycleMeta {@StateSetpublic static class States extends SchedulableResourceLifecycleMeta.States {}@TransitionSetpublic static class Transitions extends SchedulableResourceLifecycleMeta.Transitions {}
}

IServiceOrder 业务接口

@LifecycleMeta(value = ServiceOrderLifecycleMeta.class)
public interface IServiceOrder {long getId();/** Transition methods **/@Transition(ServiceOrderLifecycleMeta.Transitions.Start.class)void configureResources(@Relation(ServiceOrderLifecycleMeta.Relations.PlantResource.class) MixingPlantResource plantResource,@Relation(ServiceOrderLifecycleMeta.Relations.ConcreteTruckResource.class) ConcreteTruckResource truckResource, double volume);@Transition(Finish.class)void confirmFinish();@Transition(Cancel.class)void cancel();@StateIndicator("serviceOrderState")String getState();@Relation(ServiceOrderLifecycleMeta.Relations.ConcreteTruckResource.class)ConcreteTruckResource getConcreteTruckResource();@Relation(ServiceOrderLifecycleMeta.Relations.SummaryPlan.class)ServiceSummaryPlan getSummaryPlan();@Relation(ServiceOrderLifecycleMeta.Relations.PlantResource.class)MixingPlantResource getMixingPlantResource();
}

IPlantScheduleOrder业务接口

@LifecycleMeta(value = PlantScheduleOrderLifecycleMeta.class)
public interface IPlantScheduleOrder {long getId();/* NON-TRANSITION Methods */String getPlantName();String getOperatorName();Date getProductionFinishedOn();Date getCreatedOn();/** Transition methods **/@Transition(PlantScheduleOrderLifecycleMeta.Transitions.Start.class)void doStartPlantOrder();@Transition(PlantScheduleOrderLifecycleMeta.Transitions.Finish.class)void doFinishPlantOrder();@Transition(PlantScheduleOrderLifecycleMeta.Transitions.Cancel.class)void cancelPlantOrder();@StateIndicatorString getPlantScheduleOrderState();@Relation(PlantScheduleOrderLifecycleMeta.Relations.ServiceOrder.class)IServiceOrder getServiceOrder();
} 

IVehicleScheduleOrder业务接口

@LifecycleMeta(value = VehicleScheduleOrderLifecycleMeta.class)
public interface IVehicleScheduleOrder {long getId();String getConcretePlantName();String getUnitProjectName();Address getAddress();Contact getContact();String getPouringPartName();String getMixtureStrengthGrade();String[] getAdditiveNames();double getTransportVolume();Date getCreatedOn();Date getTransportFinishedOn();/** Transition methods **/@Transition(VehicleScheduleOrderLifecycleMeta.Transitions.Start.class)void doLoad();@Transition(VehicleScheduleOrderLifecycleMeta.States.Ongoing.CTransitions.DoTransport.class)void doTransport();@Transition(VehicleScheduleOrderLifecycleMeta.States.Ongoing.CTransitions.DoConstruct.class)void doConstruct();@Transition(VehicleScheduleOrderLifecycleMeta.States.Ongoing.CTransitions.DoFinish.class)void doComplete();@Transition(VehicleScheduleOrderLifecycleMeta.Transitions.Finish.class)void doFinishVehicalOrder();@Transition(VehicleScheduleOrderLifecycleMeta.Transitions.Cancel.class)void doAbortOnVehicleScheduleOrder();@StateIndicatorString getVehicleScheduleOrderState();@Relation(VehicleScheduleOrderLifecycleMeta.Relations.ServiceOrder.class)IServiceOrder getServiceOrder();@Relation(VehicleScheduleOrderLifecycleMeta.Relations.ConcreteTruckResource.class)ConcreteTruckResource getConcreteTruckResource();
}

ServiceOrder业务实体——实现多个业务接口,同时具体化了多个状态机

@Entity
@Table(name = "service_order")
@ReactiveObject
public class ServiceOrder extends ServiceOrderBase implements IServiceOrder, IPlantScheduleOrder, IVehicleScheduleOrder {protected static final long serialVersionUID = -6118079224654228286L;protected ServiceOrder() {}public ServiceOrder(ServiceSummaryPlan parent) {parent.addResourceAllocatedTask(this);this.summaryPlan = parent;}@Transition(ServiceOrderLifecycleMeta.Transitions.Start.class)public void configureResources(@Relation(ServiceOrderLifecycleMeta.Relations.PlantResource.class) MixingPlantResource plantResource,@Relation(ServiceOrderLifecycleMeta.Relations.ConcreteTruckResource.class) ConcreteTruckResource truckResource, double volume) {{this.spec = summaryPlan.getSpec();this.truckResource = truckResource;this.mixingPlantResource = plantResource;this.plannedVolume = volume;}this.mixingPlantResource.assignOrder(this);this.truckResource.assignOrder(this);}@Transition(ServiceOrderLifecycleMeta.Transitions.Finish.class)public void confirmFinish() {this.finishedOn = new Date();}@Transition(ServiceOrderLifecycleMeta.Transitions.Cancel.class)public void cancel() {this.canceledOn = new Date();}@Override@Transition(VehicleScheduleOrderLifecycleMeta.Transitions.Start.class)public void doLoad() {this.vehicleLoadOn = new Date();}@Override@Transition(VehicleScheduleOrderLifecycleMeta.States.Ongoing.CTransitions.DoTransport.class)public void doTransport() {this.vehicleTransportOn = new Date();}@Override@Transition(VehicleScheduleOrderLifecycleMeta.States.Ongoing.CTransitions.DoConstruct.class)public void doConstruct() {this.vehicleConstructOn = new Date();}@Override@Transition(VehicleScheduleOrderLifecycleMeta.Transitions.Finish.class)public void doComplete() {this.vehicleCompletedOn = new Date();}@Override@Transition(VehicleScheduleOrderLifecycleMeta.Transitions.Cancel.class)public void doAbortOnVehicleScheduleOrder() {this.vehicleAbortedOn = new Date();}@Override@Transition(VehicleScheduleOrderLifecycleMeta.States.Ongoing.CTransitions.DoFinish.class)public void doFinishVehicalOrder() {}@Override@Transition(PlantScheduleOrderLifecycleMeta.Transitions.Start.class)public void doStartPlantOrder() {this.plantStartedOn = new Date();}@Override@Transition(PlantScheduleOrderLifecycleMeta.Transitions.Finish.class)public void doFinishPlantOrder() {this.plantFinishOn = new Date();}@Override@Transition(PlantScheduleOrderLifecycleMeta.Transitions.Cancel.class)public void cancelPlantOrder() {this.plantCanceledOn = new Date();}@Override@Relationpublic IServiceOrder getServiceOrder() {return this;}@Override@Relationpublic ConcreteTruckResource getConcreteTruckResource() {return this.truckResource;}@Overridepublic String getConcretePlantName() {return this.mixingPlantResource.getMixingPlant().getName();}@Overridepublic String getUnitProjectName() {return this.spec.getUnitProject().getName();}@Overridepublic Address getAddress() {return this.spec.getUnitProject().getAddress();}@Overridepublic Contact getContact() {return this.spec.getUnitProject().getContact();}@Overridepublic String getPouringPartName() {return this.spec.getPouringPart().getName();}@Overridepublic String getMixtureStrengthGrade() {return this.spec.getMixture().getGradeName();}@Overridepublic String[] getAdditiveNames() {final ArrayList<String> additiveNames = new ArrayList<String>();final List<Additive> additives = this.spec.getAdditives();for ( Additive additive : additives ) {additiveNames.add(additive.getName());}return additiveNames.toArray(new String[0]);}@Overridepublic double getTransportVolume() {return this.plannedVolume;}@Overridepublic Date getTransportFinishedOn() {return this.transportFinishedOn;}@Overridepublic String getPlantName() {return this.mixingPlantResource.getMixingPlant().getName();}@Overridepublic String getOperatorName() {return this.mixingPlantResource.getMixingPlant().getOperator().getFullName();}@Overridepublic Date getProductionFinishedOn() {return this.productionFinishedOn;}
}

前文:生命周期组件框架:关系型状态机服务

生命周期组件框架:带有多状态机的单实现类相关推荐

  1. Android Lifecycle 生命周期组件详解

    转载请标明出处:https://blog.csdn.net/zhaoyanjun6/article/details/99695779 本文出自[赵彦军的博客] 一.Lifecycle简介 为什么要引进 ...

  2. android 生命周期_Android生命周期组件 Lifecycle 源码详解(一)

    在上篇文章: warmcheng:Android生命周期组件 Lifecycle 使用详解​zhuanlan.zhihu.com 中,我们讲了 Lifecycle 的简单使用,本篇我们来研究下它的源码 ...

  3. Spring框架学习day_01: 框架配置方式/ 管理对象的作用域/ 生命周期/ 组件扫描/ 单例模式:“懒汉式“,“饿汉式“

    1. Spring框架的作用 Spring框架的主要作用是创建对象和管理对象. 创建对象:类似于User user = new User(); 管理对象:随时可以通过Spring框架获取对象,甚至Sp ...

  4. python 全栈开发,Day91(Vue实例的生命周期,组件间通信之中央事件总线bus,Vue Router,vue-cli 工具)...

    昨日内容回顾 0. 组件注意事项!!!data属性必须是一个函数!1. 注册全局组件Vue.component('组件名',{template: ``})var app = new Vue({el: ...

  5. php 追查框架生命周期,ThinkPHP5框架的生命周期:从发出请求到响应完成

    URL请求的生命周期 客户端通过URL发送访问请求 服务器端返回请求数据 TP5的生命周期 入口文件-->引导文件-->注册自动加载-->注册错误和异常机制-->应用初始化-- ...

  6. 28 Java类的加载机制、什么是类的加载、类的生命周期、加载:查找并加载类的二进制数据、连接、初始化、类加载器、双亲委派模型、自定义类加载器

    28Java类的加载机制 28.1.什么是类的加载 28.2.类的生命周期 28.2.1.加载:查找并加载类的二进制数据 28.2.2.连接 28.2.3.初始化 28.3.类加载器 28.4.类的加 ...

  7. Vue学习记录 (ref,生命周期,组件,router)

    ref="名称":注册引用信息 this.$ref.名称:获取对象(此为操作dom节点) 计算属性:computed 在差值表达式中调用此函数会直接返回计算结果,而不是函数本身 当 ...

  8. 前端学习(3139):react-hello-react之生命周期组件挂载过程

  9. 实现多线程、进程、线程、设置和获取线程名称、线程调度、线程控制、线程生命周期、同步代码块、线程安全的类、Lock锁、生产者消费者模式

    实现多线程:

最新文章

  1. Android 自定义ProgressBar 实现进度圆环
  2. html中嵌套iframe页面_selenium表单切换(iframe)
  3. BZOJ 1612: [Usaco2008 Jan]Cow Contest奶牛的比赛【Floyd】
  4. 为何人工智能(AI)首选Python?如何转行Python人工智能?
  5. 内核中修改和保存defconfig的方法
  6. python-mysql驱动64位
  7. UNIX网络编程笔记(3):简单的并发服务器
  8. doc文件转换html,HTML+CSS入门 如何使用POI将doc文件转换为HTML
  9. php 生命变量,深入理解PHP原理之变量生命期(一)
  10. HTML5 Audio标签API整理(一)
  11. swift调用oc_OC与Swift混编,三种场景的实现方式
  12. 报错:/BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit-3512.29.5/UITableView.m:7943解决方法
  13. java检测安卓程序退出_java – 退出应用程序时的Android停止服务
  14. hdu4608 暴力+大数
  15. 计算机考研各省份学校,想考研究生,哪个省份的高校更容易考上?
  16. 实现微信 委托代扣/包月服务
  17. IaaS(基础设施即服务),PaaS(平台即服务),SaaS(软件即服务)的区别
  18. Linux 时间校正
  19. 当计算机遇上经济学:如何量化你的投资并获得第一桶金
  20. 如何区分加密、压缩、编码?

热门文章

  1. WebSocket断开原因
  2. bzoj3698: XWW的难题 有上下界的网络流
  3. access文档合并
  4. DBCO-PEG-SAS DBCO--聚乙二醇-琥珀酰亚胺琥珀酰亚胺酯
  5. Keep It for Mac 1.3.4 强大的笔记本工具 破解版下载
  6. 基于微信小程序的师生答疑交流平台APP-计算机毕业设计
  7. sass入门_Sass入门
  8. Python小技巧:将大音频文件无损切割为小音频文件
  9. urlscan_砍死! 我不喜欢它-URLScan为零步
  10. HTTP学习笔记(适合初学)