场景描述:进入页面时,如果设置强制签字,发送签字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. AWVS结果分析与实践-XSS

      今天趁着老师接项目,做了一丢丢实践,以下是一点点感触.     都知道AWVS是神器,可是到我手里就是不灵.拿了它扫了一个URL,结果提示XSS漏洞,实践没反应,只好愉快地享受了过程.来看看.   ...

  2. P3375 【模板】KMP字符串匹配

    P3375 [模板]KMP字符串匹配 https://www.luogu.org/problemnew/show/P3375 题目描述 如题,给出两个字符串s1和s2,其中s2为s1的子串,求出s2在 ...

  3. 【mysql】分区表

    分区表是什么? 分区表可以按照事先创建的规则,对mysql的记录进行分组,每一个组具有一个独立的逻辑单元来存储该组的数据.典型的如:按照创建时间的年份分组,按照id的顺序分组(每1000万条数据分一个 ...

  4. 关于xshell连接阿里云服务器后报错的问题,git安装失败,找不到git包

    1.如果安装git出现这样的错误的,在接下来键入这样一行命令 curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-c ...

  5. go语言sync包的学习(Mutex、WaitGroup、Cond)

    package main; import ( "fmt" "sync" "runtime" "time" ) //加锁, ...

  6. DOM心得

    一.自定义属性值两种方法的注意事项 1.用元素节点.属性(元素节点[属性])绑定的属性值不会出现在标签上. 2.用get/set/removeAttribut(,)等绑定的属性会出现在标签上.且两种方 ...

  7. PHP swoole process的使用

    引入背景:假如我们每天有10000个订单生成,需要同步到仓储系统中去,以前做法是开启一个crontab去跑这些任务,但是发现总有感觉同步效率低,间隔时间都是分钟级别的. 解决方案测试:我们将同步订单的 ...

  8. hdu 1198 (并查集 or dfs) Farm Irrigation

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1198 有题目图11种土地块,块中的绿色线条为土地块中修好的水渠,现在一片土地由上述的各种土地块组成,需要浇 ...

  9. linux如何查询系统驱动是否支持该型号显卡

    操作系统在做硬件适配时,经常会检查系统内核是否支持硬件的显卡:如果不支持,则一般是通过升级内核或者该型号对应品牌的显卡驱动来解决(开源或者闭源): 操作流程如下 1> 查询本机的显卡型号 因显卡 ...

  10. node.js 在使用child_process 模块时候,调试端口占用的问题解决方案(EADDRINUSE)

    在fork的时候,带参数{ execArgv: ['--debug=' + (process.debugPort +   1)] }