import { getSyncData } from '../common/service/initable'; import request from '../common/utils/request'; import FileUtil from '../common/utils/File'; import { HandleCenterCode, NewTcpClient, XmlToJson } from '../common/utils/new/tcp'; import { PrintStr } from '../common/utils/tools'; let baseHost = globalThis.host; //监管接口序列号映射 const gjxlhObj = { '17C51': '02-21-000009', '17C52': '02-21-000010', '17C53': '02-21-000011', '17C54': '02-21-000012', '17C55': '02-21-000013', '17C56': '02-21-000014', } interface WR { message?: string code: number } export default async function writeObjectOutNew(data, filePath): Promise { const fileUtil = new FileUtil(globalThis.context); const {jkid , drvexam} = data; const basic = await getBasicConfig(jkid); const params = await getParams(jkid, drvexam); const {wglb,jkxlh,glbm,jgbh,sjbs} = basic; if (filePath) { await fileUtil.editFile(`${filePath}/wuxi_exam_data.txt`, JSON.stringify({ wglb, jkxlh, glbm, jgbh, sjbs, data: params.data, file: { ...params.file, param: [] }, })); } // let connectTimeout = sjbs === '02-21-000014' ?60000:1 console.info('surenjun', '调用新监管') let temp try { // if (jkid === "17C51") { // temp = await request({ // host: globalThis.JGHOST, // method: 'post', // //是否是新中心 // isNewCenter: true, // xml: true, // url: '/dems_ws/services/TmriOutAccess?wsdl', // data: ` // // // // ${wglb} // ${jkxlh} // ${glbm} // ${jgbh} // ${sjbs} // ${JSON.stringify(params.data)} // ${JSON.stringify(params.file)} // // // `, // }) // } else { temp = await getMessageByEnd(params, basic) console.log("zj result", JSON.stringify(temp)) // } } catch (e) { console.log("zj 新监管错误") temp = e } console.log("zj temp message: ", JSON.stringify(temp)) if (filePath) { await fileUtil.editFile(`${filePath}/wuxi_exam_data.txt`, JSON.stringify(temp) + `\n`); } return temp } function getMessageByEnd(params, basic) { return new Promise((resolve, reject) => { const timeoutId = setTimeout(() => { PrintStr(params, 100) // 如果超时,抛出错误 console.log("zj tcp timeout") reject(new Error("Timeout: No data received within 15 seconds")); }, 15000); const {wglb,jkxlh,glbm,jgbh,sjbs} = basic; let baseUrl = globalThis.JGHOST ? globalThis.JGHOST : globalThis.host let key = new Date().getTime() // 走后置机 params.file.param = [{ field: '', data: "" }] let data = { url: `${baseUrl}/dems_ws/services/TmriOutAccess?wsdl`, serialNumber: key, type: 1, method: "post", isNewCenter: true, data: ` ${wglb} ${jkxlh} ${glbm} ${jgbh} ${sjbs} ${JSON.stringify(params.data)} ${JSON.stringify(params.file)} `, contentType: 'text/xml', isHeartBeat: "0", } console.log("zj guocheng", JSON.stringify(data)) NewTcpClient.sendMsg(`^#${JSON.stringify(data)}#$`) let cache = "" NewTcpClient.onMessage(async (value) => { console.log("zj onMessage", value) // 先找到^#和#$开始结束符号 cache += value let start = cache.indexOf("^#") let end = cache.indexOf("#$") if (start !== -1 && end !== -1) { let message = cache.slice(start + 2, end) cache = cache.slice(end + 2) let tempIndex = message.indexOf("^#") while (tempIndex > -1) { message = message.slice(tempIndex + 2) tempIndex = message.indexOf("^#") } let result: any = JSON.parse(message) if (Number(result.serialNumber) === Number(key) && !result.url) { let temp: any = XmlToJson(result.data) if (temp.Envelope) { console.log("zj accept", JSON.stringify(temp)) const msgXml = temp.Envelope.Body.writeObjectOutResponse.return; const dd = HandleCenterCode(msgXml, true); clearTimeout(timeoutId); resolve(dd) } } } }); }) } export async function getParams(jkid, drvexam) { const examSubject = globalThis.carInfo.examSubject; switch (jkid) { //开始考试 case '17C51': return { data: { sjbs: gjxlhObj[jkid], param: { sfzmhm: drvexam.sfzmhm, kchp: decodeURI(drvexam.kchp), kskm: examSubject, ksxl: examSubject == 3 ? drvexam.ksxl : undefined, kssj: drvexam.kssj } }, file: { sjbs: gjxlhObj[jkid], // param: [{ field: '', data: examSubject == 2 ? encodeURIComponent(drvexam.zp) : drvexam.zp }] param: [{ field: '', data: drvexam.zp }] } } //项目开始 case '17C52': return { data: { sjbs: gjxlhObj[jkid], param: { sfzmhm: drvexam.sfzmhm, kskm: drvexam.kskm, ksxm: drvexam.ksxm, ksxl: examSubject == 3 ? drvexam.ksxl : undefined, kchp: decodeURI(drvexam.kchp), //TODO 待验证 科目三无 sbbh: examSubject == 3 ? undefined : drvexam.sbxh, kssj: drvexam.kssj } }, file: { sjbs: gjxlhObj[jkid], param: [{ field: '', data: '' }] } } //扣分 case '17C53': return { data: { sjbs: gjxlhObj[jkid], param: { kffs: drvexam.kffs, kfsj: drvexam.kfsj, kfxm: drvexam.kfxm, kfxmmx: drvexam.kfxmmx, kskm: examSubject, ksxm: drvexam.ksxm, sfzmhm: drvexam.sfzmhm } }, file: { sjbs: gjxlhObj[jkid], param: [{ field: '', data: '' }] } } //过程照片 case '17C54': return { data: { sjbs: gjxlhObj[jkid], param: { cs: drvexam.cs, kskm: drvexam.kskm, ksxm: drvexam.ksxm, sfzmhm: drvexam.sfzmhm, zpsj: drvexam.zpsj } }, file: { sjbs: gjxlhObj[jkid], param: [{ field: '', data: drvexam.zp }] } } //项目结束 case '17C55': return { data: { param: { czlx: drvexam.czlx, jssj: drvexam.jssj, kskm: examSubject, ksxl: drvexam.ksxl, sbbh: examSubject == 3 ? undefined : drvexam.sbxh, ksxm: drvexam.ksxm, sfzmhm: drvexam.sfzmhm }, sjbs: gjxlhObj[jkid], }, file: { sjbs: gjxlhObj[jkid], param: [{ field: '', data: '' }] } } //考试结束 case '17C56': return { data: { sjbs: gjxlhObj[jkid], param: { dwlc: drvexam.dwlc, ghks: "0", jssj: drvexam.jssj, kscj: drvexam.kscj, kskm: examSubject, kslc: drvexam.kslc, sfzmhm: drvexam.sfzmhm }, }, file: { sjbs: gjxlhObj[jkid], param: [{ field: '', data: drvexam.zp }] } } default: return {} } } //获取基础信息 async function getBasicConfig(jkid) { const examSubject = globalThis.carInfo.examSubject; const syssetParam = await getSyncData('MA_SYSSET'); let syssetObj = {}; //@ts-ignore syssetParam.forEach(sys => { syssetObj[sys.v_no] = decodeURIComponent(sys.v_value) }); return { //外挂类别 wglb: examSubject == 2 ? "700203" : "700204", //监管接口序列号 jkxlh: syssetObj['901'], //管理部门 glbm: syssetObj['903'], //考场序号 jgbh: syssetObj['905'], //接口id sjbs: gjxlhObj[jkid], } }