200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 生命周期组件框架:带有多状态机的单实现类

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

时间:2018-07-23 01:22:20

相关推荐

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

ServiceOrder生命周期元数据

@StateMachinepublic 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生命周期元数据

@StateMachinepublic 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生命周期元数据

@StateMachinepublic 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")@ReactiveObjectpublic 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;}}

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。