前端转vue
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

SystemFunction.ts 14KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395
  1. // 由于没有确切的类型定义,我们先定义一些可能需要的类型
  2. import Message from "../../Communication/Message";
  3. import LoginUserInfo from "@/views/front/platfrom/common/RunningParameters/LoginUserInfo";
  4. import { IPage } from "@/views/front/platfrom/presentation/Interfaces/Ipage";
  5. import { TransitType } from "@/views/front/develop/Communication/MessageHelper/TransitType";
  6. // interface IPage {
  7. // // 这里需要根据实际情况补充IPage接口的属性和方法
  8. // OwnerContainer: any;
  9. // CallServer(msg: Message): boolean;
  10. // DoTransit(msg: Message, transitName?: string): boolean;
  11. // GetTradeInfoData(): TradeInfoData;
  12. // // 其他可能的方法
  13. // }
  14. // interface Message {
  15. // BitMapType: any;
  16. // Fd2: string;
  17. // Fd3: string;
  18. // Fd5: string;
  19. // Fd6: string;
  20. // Fd7: string;
  21. // Fd10: string;
  22. // Fd16: string;
  23. // Fd17: string;
  24. // Fd18: string;
  25. // Fd30: string;
  26. // Fd66: string;
  27. // Fd74: string;
  28. // Fd79: string;
  29. // TransitNode: TransitType;
  30. // TransitName: string;
  31. // CustomizeTransitEntry: any;
  32. // DoTransit(): boolean;
  33. // Init(): void;
  34. // InitGateway2CBS(txCode: string, serviceCode: string, svcSubCode: string, predicate2retCode: ((code: string) => boolean) | null): void;
  35. // InitHfmsApp(url: string, predicate2retCode: ((code: string) => boolean) | null): void;
  36. // FileData: string;
  37. // // 其他可能的属性和方法
  38. // }
  39. // interface LoginUserInfo {
  40. // KinbrNo: string;
  41. // TradeDate: string;
  42. // TellerNo: string;
  43. // TtyName: string;
  44. // // 其他可能的属性
  45. // }
  46. interface LoginAuthentication {
  47. PaymentNo: string;
  48. }
  49. interface TradeInfoData {
  50. LatestMessage: Message;
  51. // 其他可能的属性
  52. }
  53. // enum TransitType {
  54. // Unknown,
  55. // CallServer,
  56. // CallAgn,
  57. // CallAgn_JWK,
  58. // CallAgnCard,
  59. // CallAgnIBPS,
  60. // CallAgnIDC,
  61. // CallAgnRun,
  62. // CallAgnTips,
  63. // CallAgnCnaps2,
  64. // CallAgn_FGJWQ,
  65. // CallGateway2CBS,
  66. // CallHfmsApp,
  67. // CallAgnCIS,
  68. // CallAgn_EasyPay,
  69. // CallAgn_Ebill,
  70. // CallAgn_SDYCT,
  71. // CallAgn_CZYYSW,
  72. // CallAgn_GasFee,
  73. // CallAgnCLFJG,
  74. // CallAgn_NJT,
  75. // CallNoFileSys,
  76. // CallAgnNew_WL,
  77. // CallAgn_FGJWQ_HH,
  78. // CallAgn_DF,
  79. // CallAgn_CW,
  80. // CallAgn_ZJJG,
  81. // CallAgn_CKXT,
  82. // CallAgn_GGJ
  83. // }
  84. // 假设的全局变量
  85. // const LoginUserInfo: LoginUserInfo = {
  86. // KinbrNo: "",
  87. // TradeDate: "",
  88. // TellerNo: "",
  89. // TtyName: ""
  90. // };
  91. const LoginAuthentication = {
  92. PaymentNo: ""
  93. };
  94. export default class SystemFunction {
  95. static SubSwipeCardData(dataString: string): string {
  96. // todo
  97. return dataString;
  98. }
  99. static InitFd(target: IPage, message: Message): void {
  100. message.Init(Message.BitMap);
  101. }
  102. static CommSend(target: IPage, message: Message): void {
  103. message.Fd2 = LoginUserInfo.KinbrNo;
  104. message.Fd3 = LoginUserInfo.KinbrNo;
  105. message.Fd5 = LoginUserInfo.TradeDate;
  106. message.Fd6 = new Date().toLocaleTimeString().replace(/:/g, '').substring(0, 6);
  107. message.Fd7 = LoginUserInfo.TellerNo;
  108. message.Fd10 = LoginUserInfo.TtyName;
  109. switch (message.BitMapType) {
  110. case Message.BitMap.Server:
  111. //TODO:交易号
  112. // UserFunction.CommSend96(target, message);
  113. break;
  114. case Message.BitMap.Agn:
  115. break;
  116. case Message.BitMap.Cnaps2:
  117. message.Fd17 = LoginAuthentication.PaymentNo;
  118. break;
  119. default:
  120. break;
  121. }
  122. }
  123. static CommSend_Agn(target: IPage, message: Message): void {
  124. message.Fd2 = LoginUserInfo.KinbrNo;
  125. message.Fd3 = LoginUserInfo.KinbrNo;
  126. message.Fd5 = LoginUserInfo.TradeDate;
  127. message.Fd6 = new Date().toLocaleTimeString().replace(/:/g, '').substring(0, 6);
  128. message.Fd7 = LoginUserInfo.TellerNo;
  129. message.Fd10 = LoginUserInfo.TtyName;
  130. message.Fd92 = LoginUserInfo.TellerNo;
  131. }
  132. static Registration(target: IPage, tellerNo: string): string {
  133. let result = "";
  134. if (tellerNo.trim() === "") return result;
  135. const msg = new Message();
  136. SystemFunction.CommSend(target, msg);
  137. msg.Fd16 = "1827";
  138. msg.Fd30 = tellerNo.trim();
  139. // target.CallServer(msg);//hulei这里没有Callsever
  140. if (msg.Fd66.trim() !== "0" && msg.Fd66.trim() !== "2") {
  141. result = "";
  142. }
  143. return result = msg.Fd66;
  144. }
  145. static CheckTransit(message: Message): void {
  146. switch (message.TransitNode) {
  147. case TransitType.CallAgn:
  148. if (message.Fd18 === "") {
  149. message.Fd18 = "ECI";
  150. }
  151. message.TransitNode = TransitType.CallAgn;
  152. break;
  153. case TransitType.CallAgn_JWK:
  154. if (message.Fd18 === "") {
  155. message.Fd18 = "JWK";
  156. }
  157. message.TransitNode = TransitType.CallAgn_JWK;
  158. break;
  159. case TransitType.CallAgnCard:
  160. message.Fd18 = "CBP";
  161. message.TransitNode = TransitType.CallAgn;
  162. break;
  163. case TransitType.CallAgnIBPS:
  164. message.Fd18 = "SNB";
  165. message.TransitNode = TransitType.CallAgn;
  166. break;
  167. case TransitType.CallAgnIDC:
  168. message.Fd18 = "C101";
  169. message.Fd17 = LoginAuthentication.PaymentNo;
  170. if (LoginUserInfo.KinbrNo.substring(0, 3) === "118") {
  171. message.Fd17 = "320465100015";
  172. }
  173. message.TransitNode = TransitType.CallAgnIDC;
  174. break;
  175. case TransitType.CallAgnRun:
  176. message.Fd18 = "RUNB";
  177. message.TransitNode = TransitType.CallAgn;
  178. break;
  179. case TransitType.CallAgnTips:
  180. message.Fd18 = "TIBP";
  181. message.TransitNode = TransitType.CallAgn;
  182. break;
  183. case TransitType.CallAgnCnaps2:
  184. message.Fd18 = "CBS";
  185. message.Fd17 = LoginAuthentication.PaymentNo;
  186. message.TransitNode = TransitType.CallAgnCnaps2;
  187. break;
  188. case TransitType.CallAgn_FGJWQ:
  189. message.Fd6 = new Date().toLocaleTimeString().replace(/:/g, '').substring(0, 6);
  190. message.TransitNode = TransitType.CallAgn_FGJWQ;
  191. break;
  192. case TransitType.CallGateway2CBS:
  193. if (message.CustomizeTransitEntry === null) {
  194. let txCode = message["__TxCode__"] as string;
  195. let serviceCode: string | null = null;
  196. let svcSubCode: string | null = null;
  197. const tmp = txCode.split('.');
  198. switch (tmp.length) {
  199. case 1:
  200. break;
  201. case 2:
  202. serviceCode = tmp[0];
  203. svcSubCode = "01";
  204. txCode = tmp[1];
  205. break;
  206. case 3:
  207. serviceCode = tmp[0];
  208. svcSubCode = tmp[1];
  209. txCode = tmp[2];
  210. break;
  211. default:
  212. throw new Error("未设置有效的交易码[__TxCode__]!" + txCode);
  213. }
  214. const retCodeRegex = message["__RetCodeRegex__"] as string;
  215. const predicate2retCode = retCodeRegex === "" ? null : (code: string) => new RegExp(retCodeRegex).test(code);
  216. message.InitGateway2CBS(txCode, serviceCode!, svcSubCode!, predicate2retCode);
  217. }
  218. break;
  219. case TransitType.CallHfmsApp:
  220. if (message.CustomizeTransitEntry === null) {
  221. const url = message["__TxCode__"] as string;
  222. const retCodeRegex = message["__RetCodeRegex__"] as string;
  223. const predicate2retCode = retCodeRegex === "" ? null : (code: string) => new RegExp(retCodeRegex).test(code);
  224. message.InitHfmsApp(url, predicate2retCode);
  225. }
  226. break;
  227. }
  228. // 兼容处理
  229. try {
  230. // 假设这里有获取_transitList的逻辑
  231. const _transitList: string[] = [];
  232. if (message.TransitName.startsWith("CallAgn") && !_transitList.includes(message.TransitName)) {
  233. console.log(`CheckTransit:调整[${message.TransitName}]=>[CallAgn],fd16=[${message.Fd16}],fd18=[${message.Fd18}]`);
  234. message.TransitNode = TransitType.CallAgn;
  235. }
  236. } catch (ex) {
  237. console.error("CheckTransit:获取服务端配置信息报错!", ex);
  238. }
  239. try {
  240. // 假设这里有获取服务端时间的逻辑
  241. const serverTime = new Date().toLocaleTimeString().replace(/:/g, '').substring(0, 6);
  242. message.Fd6 = serverTime;
  243. // 假设LoginUserInfoExt有TradeTime属性
  244. // LoginUserInfoExt.TradeTime = message.Fd6;
  245. } catch (ex) {
  246. console.error("CheckTransit:同步服务端时间信息报错!", ex);
  247. }
  248. }
  249. static DoTransit(target: IPage, message: Message, transitName?: string): boolean {
  250. //hulei 通讯逻辑需要改写不能按原有的处理
  251. if (message === null) return false;
  252. if (transitName !== undefined) message.TransitName = transitName;
  253. SystemFunction.CheckTransit(message);
  254. let returnValue = false;
  255. const action = () => {
  256. returnValue = message.DoTransit();
  257. };
  258. if (target.OwnerContainer !== null) {
  259. // 假设这里有获取主页面的逻辑
  260. const page = MainPageManager.GetMainPage() as IPage;//hulei创建页面
  261. // if (page === null || !page.isAncestorOf(target)) {
  262. // page = target;
  263. // }
  264. // 假设这里有ModalInvoke的逻辑
  265. // page.OwnerContainer.ModalInvoke(action, "网络通讯中,请稍后...");
  266. //hulei
  267. } else {
  268. action();
  269. }
  270. // target.GetTradeInfoData().LatestMessage = message;
  271. return returnValue;
  272. }
  273. static CallServer(target: IPage, message: Message): boolean {
  274. return this.DoTransit(target, message, "TransitType.CallServer");//hulei 改为字符
  275. }
  276. static CallAgn(target: IPage, message: Message): boolean {
  277. return this.DoTransit(target, message, "TransitType.CallAgn");
  278. }
  279. // 其他方法...
  280. static Atoi(number: string): number {
  281. if (number.trim() === "") {
  282. number = "0";
  283. }
  284. return parseInt(number, 10);
  285. }
  286. static Itoa(number: number, format: string): string {
  287. const rgx = /^%{1}(-)?(([0-9]*)[dD]{1})|(([0-9]*)(.)?([0-9]*)[fF]{1})$/;
  288. if (!rgx.test(format)) {
  289. throw new Error("不支持该格式转换!");
  290. }
  291. let outdata = "";
  292. let width = -1;
  293. let sindex = 0;
  294. let eindex = 0;
  295. let signindex = format.includes("-") ? format.indexOf("-") : -1;
  296. let dotindex = -1;
  297. let formatparse = format;
  298. let hasZero = false;
  299. if (signindex === -1) {
  300. if (format.substring(1, 2) === "0") {
  301. formatparse = format.substring(0, 1) + format.substring(2);
  302. hasZero = true;
  303. }
  304. } else {
  305. if (format.substring(2, 3) === "0") {
  306. formatparse = format.substring(0, 2) + format.substring(3);
  307. hasZero = true;
  308. }
  309. }
  310. if (formatparse === "" || formatparse.includes("d") || formatparse.includes("D")) {
  311. eindex = formatparse.includes("d") ? formatparse.indexOf("d") : formatparse.indexOf("D");
  312. outdata = number.toFixed(0);
  313. }
  314. if (formatparse.includes("f") || formatparse.includes("F")) {
  315. dotindex = formatparse.indexOf(".");
  316. eindex = formatparse.includes("f") ? formatparse.indexOf("f") : formatparse.indexOf("F");
  317. if (dotindex === -1) {
  318. outdata = number.toFixed(0);
  319. } else {
  320. if (eindex - dotindex === 1) {
  321. outdata = number.toFixed(0);
  322. } else {
  323. const precision = parseInt(formatparse.substring(dotindex + 1, eindex), 10);
  324. outdata = number.toFixed(precision);
  325. }
  326. }
  327. }
  328. if (dotindex === -1) {
  329. if (signindex === -1) {
  330. width = eindex - sindex === 1 ? -1 : parseInt(formatparse.substring(sindex + 1, eindex), 10);
  331. } else {
  332. width = eindex - signindex === 1 ? -1 : parseInt(formatparse.substring(signindex + 1, eindex), 10);
  333. }
  334. } else {
  335. if (signindex === -1) {
  336. width = dotindex - sindex === 1 ? -1 : parseInt(formatparse.substring(sindex + 1, dotindex), 10);
  337. } else {
  338. width = dotindex - signindex === 1 ? -1 : parseInt(formatparse.substring(signindex + 1, dotindex), 10);
  339. }
  340. }
  341. if (width === -1) {
  342. return outdata;
  343. } else {
  344. if (outdata.length >= width) {
  345. return outdata;
  346. } else {
  347. if (signindex === -1) {
  348. if (hasZero) {
  349. return outdata.padStart(width, '0');
  350. } else {
  351. return outdata.padStart(width);
  352. }
  353. } else {
  354. if (hasZero) {
  355. return outdata.padEnd(width, '0');
  356. } else {
  357. return outdata.padEnd(width);
  358. }
  359. }
  360. }
  361. }
  362. }
  363. // 其他字符串数字处理方法...
  364. }
  365. export { SystemFunction };
  366. //hulei 这个文件还缺少很多方法 原文件由3328行后面缺的在补。