|
@@ -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: "读卡异常" });
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
}
|