BC-CS交互实现

背景
iMedicalLIS采用BS的设计结构,目标就是支持主流浏览器。作为科室的业务系统、各种单据的打印是必不可少的。检验报告单等不光要客户端打印,还要公布接口给自助打印机,给第三方生成报告文件等。已经控制打印机边距,按程序指定的打印机名称打印等都是难以用JS控制实现的。为此需要开发CS打印程序实现打印,对CS版本的系统这些都不是问题。由于网络的安全问题,浏览器对本地操作限制也越来越严,网站程序调动客户端本地的EXE也就成了问题。需要一套BS和CS的交互通道来完成双方的消息交互。

探索的三个阶段
1.第一阶段实现了谷歌浏览器插件,优点:比较稳定 缺点:浏览器版本限制,只能谷歌浏览器
2.第二阶段实现了浏览器呼出,优点:多种浏览器支持 缺点:有的电脑无法呼出,谷歌高版本也无法调用
3.第三阶段通过websockt实现了BS-CS交互通道,优点:跨浏览器,调用稳定 缺点:要运行监听程序

最终交互结构
BC-CS交互实现
为了确保websockt通道交互的稳定性和扩展性,抽取了消息处理接口(引入了Spring的IOC后续介绍)。实现类通过sockt对象给JS回复消息
BC-CS交互实现
对打印调用来说只需要实现消息接口配置实现类即可
BC-CS交互实现
配置实现对象入消息链对象,以对消息链的消息处理
BC-CS交互实现
调包装的websockt方法驱动消息
BC-CS交互实现

websockt服务宿主提供统一日志
BC-CS交互实现
以上就实现了打印使用消息机制的调用(先尝试了谷歌插件,然后尝试调用消息驱动打印插件,然后尝试浏览器呼出调用),来满足各种调用。要运行监听程序的消息服务模式,可支持CA类的BS和CS的交互场景。后期改为先尝试websockt发送,再尝试谷歌浏览器插件,再尝试浏览器呼出。