// 由于没有确切的类型定义,我们先定义一些可能需要的类型 import Message from "../../Communication/Message"; import LoginUserInfo from "@/views/front/platfrom/common/RunningParameters/LoginUserInfo"; import { IPage } from "@/views/front/platfrom/presentation/Interfaces/Ipage"; import { TransitType } from "@/views/front/develop/Communication/MessageHelper/TransitType"; // interface IPage { // // 这里需要根据实际情况补充IPage接口的属性和方法 // OwnerContainer: any; // CallServer(msg: Message): boolean; // DoTransit(msg: Message, transitName?: string): boolean; // GetTradeInfoData(): TradeInfoData; // // 其他可能的方法 // } // interface Message { // BitMapType: any; // Fd2: string; // Fd3: string; // Fd5: string; // Fd6: string; // Fd7: string; // Fd10: string; // Fd16: string; // Fd17: string; // Fd18: string; // Fd30: string; // Fd66: string; // Fd74: string; // Fd79: string; // TransitNode: TransitType; // TransitName: string; // CustomizeTransitEntry: any; // DoTransit(): boolean; // Init(): void; // InitGateway2CBS(txCode: string, serviceCode: string, svcSubCode: string, predicate2retCode: ((code: string) => boolean) | null): void; // InitHfmsApp(url: string, predicate2retCode: ((code: string) => boolean) | null): void; // FileData: string; // // 其他可能的属性和方法 // } // interface LoginUserInfo { // KinbrNo: string; // TradeDate: string; // TellerNo: string; // TtyName: string; // // 其他可能的属性 // } interface LoginAuthentication { PaymentNo: string; } interface TradeInfoData { LatestMessage: Message; // 其他可能的属性 } // enum TransitType { // Unknown, // CallServer, // CallAgn, // CallAgn_JWK, // CallAgnCard, // CallAgnIBPS, // CallAgnIDC, // CallAgnRun, // CallAgnTips, // CallAgnCnaps2, // CallAgn_FGJWQ, // CallGateway2CBS, // CallHfmsApp, // CallAgnCIS, // CallAgn_EasyPay, // CallAgn_Ebill, // CallAgn_SDYCT, // CallAgn_CZYYSW, // CallAgn_GasFee, // CallAgnCLFJG, // CallAgn_NJT, // CallNoFileSys, // CallAgnNew_WL, // CallAgn_FGJWQ_HH, // CallAgn_DF, // CallAgn_CW, // CallAgn_ZJJG, // CallAgn_CKXT, // CallAgn_GGJ // } // 假设的全局变量 // const LoginUserInfo: LoginUserInfo = { // KinbrNo: "", // TradeDate: "", // TellerNo: "", // TtyName: "" // }; const LoginAuthentication = { PaymentNo: "" }; export default class SystemFunction { static SubSwipeCardData(dataString: string): string { // todo return dataString; } static InitFd(target: IPage, message: Message): void { message.Init(Message.BitMap); } static CommSend(target: IPage, message: Message): void { message.Fd2 = LoginUserInfo.KinbrNo; message.Fd3 = LoginUserInfo.KinbrNo; message.Fd5 = LoginUserInfo.TradeDate; message.Fd6 = new Date().toLocaleTimeString().replace(/:/g, '').substring(0, 6); message.Fd7 = LoginUserInfo.TellerNo; message.Fd10 = LoginUserInfo.TtyName; switch (message.BitMapType) { case Message.BitMap.Server: //TODO:交易号 // UserFunction.CommSend96(target, message); break; case Message.BitMap.Agn: break; case Message.BitMap.Cnaps2: message.Fd17 = LoginAuthentication.PaymentNo; break; default: break; } } static CommSend_Agn(target: IPage, message: Message): void { message.Fd2 = LoginUserInfo.KinbrNo; message.Fd3 = LoginUserInfo.KinbrNo; message.Fd5 = LoginUserInfo.TradeDate; message.Fd6 = new Date().toLocaleTimeString().replace(/:/g, '').substring(0, 6); message.Fd7 = LoginUserInfo.TellerNo; message.Fd10 = LoginUserInfo.TtyName; message.Fd92 = LoginUserInfo.TellerNo; } static Registration(target: IPage, tellerNo: string): string { let result = ""; if (tellerNo.trim() === "") return result; const msg = new Message(); SystemFunction.CommSend(target, msg); msg.Fd16 = "1827"; msg.Fd30 = tellerNo.trim(); // target.CallServer(msg);//hulei这里没有Callsever if (msg.Fd66.trim() !== "0" && msg.Fd66.trim() !== "2") { result = ""; } return result = msg.Fd66; } static CheckTransit(message: Message): void { switch (message.TransitNode) { case TransitType.CallAgn: if (message.Fd18 === "") { message.Fd18 = "ECI"; } message.TransitNode = TransitType.CallAgn; break; case TransitType.CallAgn_JWK: if (message.Fd18 === "") { message.Fd18 = "JWK"; } message.TransitNode = TransitType.CallAgn_JWK; break; case TransitType.CallAgnCard: message.Fd18 = "CBP"; message.TransitNode = TransitType.CallAgn; break; case TransitType.CallAgnIBPS: message.Fd18 = "SNB"; message.TransitNode = TransitType.CallAgn; break; case TransitType.CallAgnIDC: message.Fd18 = "C101"; message.Fd17 = LoginAuthentication.PaymentNo; if (LoginUserInfo.KinbrNo.substring(0, 3) === "118") { message.Fd17 = "320465100015"; } message.TransitNode = TransitType.CallAgnIDC; break; case TransitType.CallAgnRun: message.Fd18 = "RUNB"; message.TransitNode = TransitType.CallAgn; break; case TransitType.CallAgnTips: message.Fd18 = "TIBP"; message.TransitNode = TransitType.CallAgn; break; case TransitType.CallAgnCnaps2: message.Fd18 = "CBS"; message.Fd17 = LoginAuthentication.PaymentNo; message.TransitNode = TransitType.CallAgnCnaps2; break; case TransitType.CallAgn_FGJWQ: message.Fd6 = new Date().toLocaleTimeString().replace(/:/g, '').substring(0, 6); message.TransitNode = TransitType.CallAgn_FGJWQ; break; case TransitType.CallGateway2CBS: if (message.CustomizeTransitEntry === null) { let txCode = message["__TxCode__"] as string; let serviceCode: string | null = null; let svcSubCode: string | null = null; const tmp = txCode.split('.'); switch (tmp.length) { case 1: break; case 2: serviceCode = tmp[0]; svcSubCode = "01"; txCode = tmp[1]; break; case 3: serviceCode = tmp[0]; svcSubCode = tmp[1]; txCode = tmp[2]; break; default: throw new Error("未设置有效的交易码[__TxCode__]!" + txCode); } const retCodeRegex = message["__RetCodeRegex__"] as string; const predicate2retCode = retCodeRegex === "" ? null : (code: string) => new RegExp(retCodeRegex).test(code); message.InitGateway2CBS(txCode, serviceCode!, svcSubCode!, predicate2retCode); } break; case TransitType.CallHfmsApp: if (message.CustomizeTransitEntry === null) { const url = message["__TxCode__"] as string; const retCodeRegex = message["__RetCodeRegex__"] as string; const predicate2retCode = retCodeRegex === "" ? null : (code: string) => new RegExp(retCodeRegex).test(code); message.InitHfmsApp(url, predicate2retCode); } break; } // 兼容处理 try { // 假设这里有获取_transitList的逻辑 const _transitList: string[] = []; if (message.TransitName.startsWith("CallAgn") && !_transitList.includes(message.TransitName)) { console.log(`CheckTransit:调整[${message.TransitName}]=>[CallAgn],fd16=[${message.Fd16}],fd18=[${message.Fd18}]`); message.TransitNode = TransitType.CallAgn; } } catch (ex) { console.error("CheckTransit:获取服务端配置信息报错!", ex); } try { // 假设这里有获取服务端时间的逻辑 const serverTime = new Date().toLocaleTimeString().replace(/:/g, '').substring(0, 6); message.Fd6 = serverTime; // 假设LoginUserInfoExt有TradeTime属性 // LoginUserInfoExt.TradeTime = message.Fd6; } catch (ex) { console.error("CheckTransit:同步服务端时间信息报错!", ex); } } static DoTransit(target: IPage, message: Message, transitName?: string): boolean { //hulei 通讯逻辑需要改写不能按原有的处理 if (message === null) return false; if (transitName !== undefined) message.TransitName = transitName; SystemFunction.CheckTransit(message); let returnValue = false; const action = () => { returnValue = message.DoTransit(); }; if (target.OwnerContainer !== null) { // 假设这里有获取主页面的逻辑 const page = MainPageManager.GetMainPage() as IPage;//hulei创建页面 // if (page === null || !page.isAncestorOf(target)) { // page = target; // } // 假设这里有ModalInvoke的逻辑 // page.OwnerContainer.ModalInvoke(action, "网络通讯中,请稍后..."); //hulei } else { action(); } // target.GetTradeInfoData().LatestMessage = message; return returnValue; } static CallServer(target: IPage, message: Message): boolean { return this.DoTransit(target, message, "TransitType.CallServer");//hulei 改为字符 } static CallAgn(target: IPage, message: Message): boolean { return this.DoTransit(target, message, "TransitType.CallAgn"); } // 其他方法... static Atoi(number: string): number { if (number.trim() === "") { number = "0"; } return parseInt(number, 10); } static Itoa(number: number, format: string): string { const rgx = /^%{1}(-)?(([0-9]*)[dD]{1})|(([0-9]*)(.)?([0-9]*)[fF]{1})$/; if (!rgx.test(format)) { throw new Error("不支持该格式转换!"); } let outdata = ""; let width = -1; let sindex = 0; let eindex = 0; let signindex = format.includes("-") ? format.indexOf("-") : -1; let dotindex = -1; let formatparse = format; let hasZero = false; if (signindex === -1) { if (format.substring(1, 2) === "0") { formatparse = format.substring(0, 1) + format.substring(2); hasZero = true; } } else { if (format.substring(2, 3) === "0") { formatparse = format.substring(0, 2) + format.substring(3); hasZero = true; } } if (formatparse === "" || formatparse.includes("d") || formatparse.includes("D")) { eindex = formatparse.includes("d") ? formatparse.indexOf("d") : formatparse.indexOf("D"); outdata = number.toFixed(0); } if (formatparse.includes("f") || formatparse.includes("F")) { dotindex = formatparse.indexOf("."); eindex = formatparse.includes("f") ? formatparse.indexOf("f") : formatparse.indexOf("F"); if (dotindex === -1) { outdata = number.toFixed(0); } else { if (eindex - dotindex === 1) { outdata = number.toFixed(0); } else { const precision = parseInt(formatparse.substring(dotindex + 1, eindex), 10); outdata = number.toFixed(precision); } } } if (dotindex === -1) { if (signindex === -1) { width = eindex - sindex === 1 ? -1 : parseInt(formatparse.substring(sindex + 1, eindex), 10); } else { width = eindex - signindex === 1 ? -1 : parseInt(formatparse.substring(signindex + 1, eindex), 10); } } else { if (signindex === -1) { width = dotindex - sindex === 1 ? -1 : parseInt(formatparse.substring(sindex + 1, dotindex), 10); } else { width = dotindex - signindex === 1 ? -1 : parseInt(formatparse.substring(signindex + 1, dotindex), 10); } } if (width === -1) { return outdata; } else { if (outdata.length >= width) { return outdata; } else { if (signindex === -1) { if (hasZero) { return outdata.padStart(width, '0'); } else { return outdata.padStart(width); } } else { if (hasZero) { return outdata.padEnd(width, '0'); } else { return outdata.padEnd(width); } } } } } // 其他字符串数字处理方法... } export { SystemFunction }; //hulei 这个文件还缺少很多方法 原文件由3328行后面缺的在补。