繁体   English   中英

optaplanner护士调度系统中的XML文件可以实时与前台交互

[英]The XML file in optaplanner nurse scheduling system can interact with the front desk in real time

我正在使用您的optaplanner作为医生调度系统。

我有一个问题问你:

我使用optaplanner作为后端系统,通过PHP将XML文件传递给optaplanner,并通过optaplanner将计算出的XML结果返回给PHP后端系统。 现在我希望医生能够实时查看网页上的变化。 我可以实现吗? 它是为了使optaplanner能够实时生成XML文件,而不是生成最后计算的XML文件。

是的,这是可能的,但它可能需要您稍微改变您的架构。

要将结果从服务器发送到客户端(用户的浏览器),您需要使用websockets。

Optaplanner有SolverEventListener,每次最佳解决方案更改时都会调用它。 您可以做的是每次在侦听器中调用bestSolutionChanged时,通过websocket发送解决方案。 出于性能原因,您可能希望websocket发送请求是非阻塞操作,并且您的解决方案的序列化应该快速发生。 您可能还希望在每个webocket发送请求/ bestSolutionChanged调用之间包含最短时间,因为在开始时Optaplanner可能会经常找到新的最佳解决方案。

我不知道你是如何在PHP中做到这一点的,但通常对于这类实时应用程序而言,vert.x非常适合我(optaplanner解决方案计算在工作者Verticle中处理,新的解决方案被发送出去通过sockjs eventbus桥接的eventbus)

我主要像Alex G所描述的那样实现它。

由于我们的解决方案可以变得非常大,我只发送一个websocket事件,提供新的最佳解决方案,让应用程序请求解决方案,而不是每次找到新的最佳解决方案时序列化并推送完整的解决方案。

获取xml:

如果我必须这样做(我更喜欢json更小,更容易在javascript前端处理)我的方法将是以下步骤:

1)创建一个SolverEventListener类

class SolverEventListenerImpl implements SolverEventListener<ProblemSolutionClass> {... 

2)在求解器中注册eventListener

solver.addEventListener(new SolverEventListenerImpl());

3)覆盖bestSolutionChanged方法

public void bestSolutionChanged( BestSolutionChangedEvent<ProblemSolutionClass> event) {      
  ProblemSolutionClass solution = event.getNewBestSolution();

4)将其转换为XML - 例如使用Optaplanner中已有的Xstream内容

XStream xStream = new XStream();
xStream.setMode(XStream.ID_REFERENCES);
xStream.processAnnotations(xStreamAnnotatedClasses);
String xml = xstream.toXML(solution);

你在这。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM