场景描述:进入页面时,如果设置强制签字,发送签字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. f5 irules

    1.插入XFF when HTTP_REQUEST { if { [HTTP::header exists X-Forward-For] } { set old_xff [HTTP::header v ...

  2. swift - 3D 视图,截图,关键字搜索

    1.xib 上的 3D效果 按钮 2. import UIKit //1.导入框架 import MapKit class ViewController: UIViewController { @IB ...

  3. [leetcode]449. Serialize and Deserialize BST序列化与反序列化BST

    Serialization is the process of converting a data structure or object into a sequence of bits so tha ...

  4. 通过docker-compose构建ghost博客(一)

    通过命令构建ghost博客 docker run -d --name ghost -p : -v $PWD/data:/var/lib/ghost ghost 当然也可以编写yml文件,通过docke ...

  5. kalman滤波(一)---对各参数的理解

    一.引言 1.卡尔曼滤波中的真实值,测量值,预测值,估计值怎么区分?他的5条公式是其核心内容,结合现代的计算机,其实卡尔曼的程序相当的简单,只要你理解了他的那5条公式. 用一个简单的小例子:假设我们要 ...

  6. linux小笔记

    1. 安装go并设置环境变量 Add /usr/local/go/bin to the PATH environment variable. You can do this by adding thi ...

  7. socketv 验证客户端链接的合法性

    一 .socketv 验证客户端链接的合法性 send()与sendall() 验证客户端 加密验证 如果你想在分布式系统中实现一个简单的客户端链接认证功能,又不像SSL那么复杂,那么利用hmac+加 ...

  8. c# 24种设计模式4建造者模式(Builder)

    先来一个例子 建造者接口 public interface IBuilder { void CreateLogo(); void CreateBody(); void CreateWheel(); v ...

  9. css font-size=0的妙用

    转自:css font-size=0有什么妙用? 回答一: 问题的根源是 inline(a标签默认是display:inline) 和 inline-block (.list-info 设置的是 di ...

  10. PHP Jquery 代码操作 内容 属性 样式 事件 Json数据

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...