LIJU 2 недель назад
Родитель
Сommit
652c4797aa

+ 139 - 0
src/main/resources/static/js/mz/registration.js

@@ -175,6 +175,13 @@ $(function () {
         siReadCard("jiangsu_face_01101");
     });
 
+    /**
+     * 社保卡读取
+     */
+    $("#siReadSocialCard").on("click", function (t) {
+        siReadSocialCard();
+    });
+
 
     /**
      * 身份证读卡
@@ -2363,4 +2370,136 @@ function consume() {
             $("#consume").attr("disabled", false);
         }
     });
+}
+
+/**
+ * 社保卡读取功能
+ * 使用自动重试机制,确保读卡成功率
+ */
+function siReadSocialCard() {
+    // 显示loading效果
+    $("#readLoadingModal").modal('show');
+    
+    // 社保卡读卡URL
+    var url = "http://localhost:8321/readcard/jiangsu/readcard_auto";
+    
+    // 使用自动重试机制调用读卡接口
+    callReadCardWithRetry(url, 5, 500, function (res) {
+        // 成功回调
+        $("#readLoadingModal").modal('hide');
+        
+        try {
+            // 解析社保卡数据
+            var cardDataArray = res.rawCardData.split('|');
+            
+            // 提取关键信息
+            var regionCode = cardDataArray[0];        // 发卡地区行政区划代码
+            var idNo = cardDataArray[1];              // 社会保障号码(身份证号)
+            var cardNo = cardDataArray[2];            // 卡号
+            var cardId = cardDataArray[3];            // 卡识别码
+            var userName = cardDataArray[4];          // 姓名
+            var cardResetInfo = cardDataArray[5];     // 卡复位信息
+            var version = cardDataArray[6];           // 规范版本
+            var issueDate = cardDataArray[7];         // 发卡日期
+            var validDate = cardDataArray[8];         // 卡有效期
+            var terminalNo = cardDataArray[9];        // 终端机编号
+            var deviceNo = cardDataArray[10];         // 终端设备号
+            
+            // 填充表单数据
+            $("#userName").val(userName);
+            $("#idCard").val(idNo);
+            $("#cardNo").val(cardNo);
+            
+            // 设置证件类型为身份证
+            $('#certificateType').selectpicker('val', '01');
+            $('#certificateType').selectpicker('refresh');
+            
+            // 根据身份证号计算年龄和性别
+            if (idNo && idNo.length === 18) {
+                var birthYear = parseInt(idNo.substring(6, 10));
+                var birthMonth = parseInt(idNo.substring(10, 12));
+                var birthDay = parseInt(idNo.substring(12, 14));
+                var genderCode = parseInt(idNo.substring(16, 17));
+                
+                // 计算年龄
+                var currentYear = new Date().getFullYear();
+                var age = currentYear - birthYear;
+                $("#age").val(age);
+                
+                // 设置性别(1-男,2-女)
+                var gender = genderCode % 2 === 1 ? 1 : 2;
+                $('#gender').selectpicker('val', gender);
+                $('#gender').selectpicker('refresh');
+                
+                // 设置出生日期
+                var birthDate = birthYear + '-' + 
+                               String(birthMonth).padStart(2, '0') + '-' + 
+                               String(birthDay).padStart(2, '0');
+                $("#birthDay").val(birthDate);
+            }
+            
+            // 保存业务卡串信息,用于后续医保业务
+            var busiData = res.rawBusiData;
+            // 可以将busiData存储到隐藏字段或localStorage中
+            // localStorage.setItem('socialCardBusiData', busiData);
+            
+            // 查询用户信息
+            queryUserInfoBySocialNo(1);
+            
+            successMesageSimaple("社保卡读取成功!");
+            
+        } catch (error) {
+            console.error("社保卡数据解析失败:", error);
+            errorMesageSimaple("社保卡数据解析失败,请重试!");
+        }
+        
+    }, function (err) {
+        // 失败回调
+        $("#readLoadingModal").modal('hide');
+        warningMesageSimaple("社保卡读取失败,请检查卡片是否正确放置!");
+        console.log("社保卡读取失败:", err);
+    });
+}
+
+/**
+ * 自动重试的通用函数
+ * @param url 请求URL
+ * @param retryCount 重试次数
+ * @param retryDelay 重试间隔(毫秒)
+ * @param successCallback 成功回调
+ * @param errorCallback 失败回调
+ */
+function callReadCardWithRetry(url, retryCount, retryDelay, successCallback, errorCallback) {
+    $.ajax({
+        type: "GET",
+        url: url,
+        contentType: "application/json;charset=UTF-8",
+        dataType: "json",
+        headers: {
+            'Accept': 'application/json',
+            'Authorization': 'Bearer ' + localStorage.getItem("token")
+        },
+        success: function (res) {
+            if (res.code == 200) {
+                successCallback(res);
+            } else if (retryCount > 0) {
+                // 重试时保持loading状态,不隐藏
+                setTimeout(function () {
+                    callReadCardWithRetry(url, retryCount - 1, retryDelay, successCallback, errorCallback);
+                }, retryDelay);
+            } else {
+                errorCallback(res);
+            }
+        },
+        error: function (XMLHttpRequest, textStatus, errorThrown) {
+            if (retryCount > 0) {
+                // 重试时保持loading状态,不隐藏
+                setTimeout(function () {
+                    callReadCardWithRetry(url, retryCount - 1, retryDelay, successCallback, errorCallback);
+                }, retryDelay);
+            } else {
+                errorCallback({ message: "读卡异常" });
+            }
+        }
+    });
 }

+ 18 - 0
src/main/resources/templates/mz/registration.html

@@ -73,6 +73,7 @@
                         <a onclick="editUserModal(null)" id="editUser" hidden><i class="fa fa-edit">&nbsp;修改患者</i></a>
                         <a id="siReadCard"><i class="fa fa-barcode">&nbsp;医保电子凭证</i></a>
                         <a id="siReadCardFace"><i class="fa fa-github-alt">&nbsp;医保刷脸</i></a>
+                        <a id="siReadSocialCard"><i class="fa fa-credit-card">&nbsp;读社保卡</i></a>
                         <a id="copyAddress" hidden><i class="fa fa-copyright" onclick="copyAddress()">&nbsp;复制身份证地址</i></a>
                         <a id="clearRegistration"><i class="fa fa-trash">&nbsp;清空</i></a>
                     </div>
@@ -1351,6 +1352,23 @@
 <!--交易查询弹窗结尾-->
 <!--智能pos工具包实际HTML结尾-->
 
+<!--社保卡读取Loading弹框开始-->
+<div class="modal fade bs-example-modal-lg" tabindex="-1" role="dialog" aria-hidden="true" id="readLoadingModal" data-backdrop="static" data-keyboard="false" style="margin-top: 50px;">
+    <div class="modal-dialog modal-lg">
+        <div class="modal-content">
+            <div class="modal-header">
+                <h4 class="modal-title modal-title-thmz">正在读取社保卡,请稍候...</h4>
+            </div>
+            <div class="modal-body">
+                <div class="text-center">
+                    <i class="fa fa-spinner fa-spin fa-3x fa-fw"></i>
+                    <p style="margin-top: 20px; font-size: 16px;">正在读取社保卡信息,请确保卡片正确放置...</p>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+<!--社保卡读取Loading弹框结尾-->
 
 <object id="LODOP_OB" classid="clsid:2105C259-1E0C-4534-8141-A753534CB4CA" width=0 height=0>
     <embed id="LODOP_EM" type="application/x-print-lodop" width=0 height=0></embed>