88 lines
2.3 KiB
JavaScript
Raw Normal View History

2026-07-30 16:49:41 +08:00
const Sm4Util = require("../../utils/sm4-util");
const CARD_STRING_FIELDS = [
"CardIDCode",
"CardNum",
"CardType",
"Gender",
"IDNum",
"Name",
"PsamTN",
"Message",
"flag",
"ylbxtcqbm",
];
function normalizeCardData(value) {
if (!value || typeof value !== "object" || Array.isArray(value)) {
return null;
}
const data = {
CanOpen: value.CanOpen === true,
Success: value.Success === true,
};
for (const field of CARD_STRING_FIELDS) {
if (value[field] === undefined || value[field] === null) continue;
if (typeof value[field] !== "string") return null;
const text = value[field].trim();
if (text.length > 256) return null;
data[field] = text;
}
if (!data.CanOpen || !data.Success) return null;
if (!data.IDNum && !data.CardNum && !data.CardIDCode) return null;
return data;
}
function normalizeString(value, maxLength) {
if (typeof value !== "string") return "";
const text = value.trim();
return text.length <= maxLength ? text : "";
}
async function saveScannedCard(item, db) {
const cardData = normalizeCardData(item.cardData);
if (!cardData) {
return { success: false, message: "卡片数据无效" };
}
try {
const encryptedCardData = Sm4Util.encryptDataForSm3(JSON.stringify(cardData));
const storeIds = Array.isArray(item.storeIds)
? [...new Set(item.storeIds.map((value) => normalizeString(value, 100)).filter(Boolean))]
: [];
const record = {
encryptedCardData,
encryption: "SM4",
dataVersion: 1,
readerType: normalizeString(item.readerType, 50) || "ZJ_HZ_310000",
corpId: normalizeString(item.corpId, 100),
storeIds,
createTime: Date.now(),
};
const result = await db.collection("scanned-card-archive").insertOne(record);
return {
success: true,
id: result.insertedId.toString(),
message: "卡片数据保存成功",
};
} catch (error) {
console.error("保存扫码建档数据失败:", error.message);
return { success: false, message: "保存卡片数据失败" };
}
}
module.exports = async (item, db) => {
switch (item.type) {
case "saveScannedCard":
return saveScannedCard(item, db);
default:
return { success: false, message: "未找到接口" };
}
};
module.exports.normalizeCardData = normalizeCardData;
module.exports.saveScannedCard = saveScannedCard;