场景描述:进入页面时,如果设置强制签字,发送签字webSocket连接,同时页面有个重新签字按钮,这个按钮会多次调用

第一步:先建立一个websocket的js文件,名叫signSocket.js内容如下:

 /* websocket */
var socket;
var connectStatus = false; function Connect(){
try{
if(socket){
socket.close();
socket = null;
}
socket=new WebSocket('ws://127.0.0.1:40000');
}catch(e){
console.error("WebSocket 连接失败" ,e)
return;
}
socket.onopen = sOpen;
socket.onerror = sError;
socket.onmessage= sMessage;
socket.onclose= sClose;
}
function sOpen(){
console.info("WebSocket sOpen" ,"打开连接成功")
connectStatus = true;
}
function sError(e){
console.error("WebSocket sError" ,e)
// error("签字程序连接失败,请刷新页面再试");
var iframe = $(document.getElementsByTagName("iframe"));
if(iframe && iframe.length > 0){
iframe[0].contentWindow.layer.closeAll();
// iframe[0].contentWindow.error("签字程序连接失败,请刷新页面再试");
if(iframe[0].contentWindow.signatureError){
iframe[0].contentWindow.signatureError();
}
}
socket.close();
}
function sMessage(msg){
console.info("WebSocket sMessage" ,msg)
if(isExitsFunction('ifSignatureSuccess')){
ifSignatureSuccess(msg.data);
}
}
function sClose(e){
console.info("WebSocket sClose" ,e)
connectStatus = false;
} function Send(recordId, url){
Connect();
var intCount = 0;
var interval = setInterval(function(){
console.info("sockect 等待连接...")
if(intCount++ > 20){
clearInterval(interval);
}
if(connectStatus && socket){
if(!recordId){
socket.send("finish");
}else{
socket.send("open," + url + "," + recordId);
}
clearInterval(interval);
}
},100);
} function Close(){
socket.close();
}
/* websocket end */

第二步:页面引用,与发送请求

<script type='text/javascript' src='${ctxStatic}/js/signSockect.js?v=2018031914'></script>


function SignatureIdByOs(id){
console.info("当前os版本" + gs.ClientOs());
if(gs.ClientOs().indexOf("Win") > -1){
SignatureId(id);
}else {
SignatureIdApp(id);
}
} function SignatureId(id) {
// signatureStart();
console.info(id,'${host}${ftx}/api/disclosure?vaccid=S_' + localCode + "_" + id);
Send(id, '${host}${ftx}/api/disclosure?vaccid=S_' + localCode + "_" + id);
}

第三步:进入方法,返回数据给页面

@RequestMapping("/disclosure")
public String disclosure(HttpServletRequest request, String vaccid, Model model) {
logger.info("签字获取告知书vaccid" + vaccid);
String disContext = "";
...
   Map<String, String[]> args = request.getParameterMap();
model.addAttribute("pid", "");
model.addAttribute("childcode", "");
model.addAttribute("currentPrice", "");
model.addAttribute("paymentType", "");
model.addAttribute("rid", "");
model.addAttribute("createBy", ""); if(args.get("pid") != null) model.addAttribute("pid", args.get("pid")[0]);
if(args.get("childcode") != null) model.addAttribute("childcode", args.get("childcode")[0]);
if(args.get("currentPrice") != null) model.addAttribute("currentPrice", args.get("currentPrice")[0]);
if(args.get("paymentType") != null) model.addAttribute("paymentType", args.get("paymentType")[0]);
if(args.get("rid") != null) model.addAttribute("rid", args.get("rid")[0]);
if(args.get("createBy") != null) model.addAttribute("createBy", args.get("createBy")[0]);
return "modules/child_vaccinaterecord/signatureShow";
}
												

websocket项目电子签字使用场景的更多相关文章

  1. Redis在新项目中的使用场景

    Redis在新项目中的使用场景 数据类型 使用场景 string 比如说,我想知道什么时候封锁一个Ip地址,Incrby命令(使用这个命令记录被访问的次数) Hash 存储用户的信息[id,name, ...

  2. 分布式协同AI基准测试项目Ianvs:工业场景提升5倍研发效率

    摘要:全场景可扩展的分布式协同AI基准测试项目 Ianvs(雅努斯),能为算法及服务开发者提供全面开发套件支持,以研发.衡量和优化分布式协同AI系统. 本文分享自华为云社区<KubeEdge|分 ...

  3. OSG项目经验2<在场景中添加文字面版>

    添加文字版需要用到osg的三个名字空间:                         osgText::Text,这个类用来添加文字和设置文字的一些属性:                     ...

  4. websocket 项目应用

    序言 很早就想用起来websocket,可惜需要后台服务的支持,技术的翻新总会给我带来巨大的冲击,最近后端人员学习了websocket相关后台技术.于是我们开始动起来了. 学习 这位大兄弟的文章  h ...

  5. 小白需要了解的Ajax和websocket的区别以及使用场景!

    在我们日常使用的互联网产品中,很多都是前后端数据的交互来完成的,说到数据交互就不得不提Ajax和websocket,它们可是数据交互的利器,那么它们分别是什么?websocket与Ajax轮询的区别又 ...

  6. 尚硅谷面试第一季-17Redis 在项目中的使用场景

    数据类型 使用场景 String 比如说 ,我想知道什么时候封锁一个IP地址.Incrby命令 Hash 存储用户信息[id,name,age] Hset(key,field,value) Hset( ...

  7. REST,RPC和GraphQL应用场景,WebHooks、WebSocket、HTTP Streaming应用场景。

    一.请求--响应API. 请求--响应类的API的典型做法是,通过基于HTTP的Web服务器暴露一个/套接口.API定义一些端点,客户端发送数据的请求到这些端点,Web服务器处理这些请求,然后返回响应 ...

  8. 转:鏖战双十一-阿里直播平台面临的技术挑战(webSocket, 敏感词过滤等很不错)

    转自:http://www.infoq.com/cn/articles/alibaba-broadcast-platform-technology-challenges 鏖战双十一-阿里直播平台面临的 ...

  9. SoDiaoEditor电子病历编辑器更新至V3版本,愿与各位一路同行!

    简单闲聊两句-- 记得刚参加工作那会儿,去医院实施,信息科不远处就是手术室,门口每天都挤满了人,他们中大多数都是等待手术结果的患者家属,有的还会把折叠床带来,应该是陪床有段时间了.有时路过,还会听到一 ...

随机推荐

  1. 微信小程序开发——设置默认图片、错误加载图片

    小程序不支持h5中的onerrorimg,只开放了binderror属性,当错误发生时,会发布到 AppService,事件对象event.detail = {errMsg: 'something w ...

  2. 唯品会海量实时OLAP分析技术升级之路

    本文转载自公众号 DBAplus社群 , 作者:谢麟炯 谢麟炯,唯品会大数据平台高级技术架构经理,主要负责大数据自助多维分析平台,离线数据开发平台及分析引擎团队的开发和管理工作,加入唯品会以来还曾负责 ...

  3. ThreadLocal ——android消息机制handler在非主线程创建not called Looper.prepare() 错误的原因

    引用自:https://www.jianshu.com/p/a8fa72e708d3 引出: 使用Handler的时候,其必须要跟一个Looper绑定.在UI线程可直接初始化Handler来使用.但是 ...

  4. jquery写tab切换,三行代码搞定

    <script type="text/javascript"> $("button").on("click",function( ...

  5. node.js中npm包管理工具

    现在安装node.js,默认就会帮我们装上了npm包管理工具,npm主要用来下载,安装,管理第三方模块. 创建一个包描述文件: npm init [-y] 查看包的信息 npm info <pa ...

  6. jQuery 向另一个页面传参,同时跳转到该页面

    为了使参数能够传递到另外一个页面,使用ajax的跳转方式 $.ajax({ type: "POST", url:"/admin/sysjgl/sysjck/sjcs&qu ...

  7. System.ServiceProcess.TimeoutException: Time out has expired and the operation has not been completed.

    项目代码如下 ServiceController service = new ServiceController("ModbusAgent"); service.Stop(); T ...

  8. 如何将你拍摄的照片转换成全景图及六面体(PTGui)

    在完成全景照片的拍摄之后,接下来,我们需要的是进行全景图的拼接.全景图片分为两种类型1.立方体全景图(6面体)制作全景时通常使用该种格式 如下图 2.球形图(2:1的单张全景图片)2:1全景图宽高比例 ...

  9. 移动端页面返回,数据不刷新bug解决

    一,当安卓和ios都有问题的时候 // a.html 设置刷新 检测缓存是否有标志 要是有就说明数据有变化 a.html跳转到b.html页面 window.addEventListener(&quo ...

  10. gulp ( http://markpop.github.io/2014/09/17/Gulp入门教程 )

    前言 最近流行前端构建工具,苦于之前使用Grunt,代码很难阅读,现在出了Gulp,真是摆脱了痛苦.发现了一篇很好的Gulp英文教程,整理翻译给大家看看. 为什么使用Gulp Gulp基于Node.j ...