310 lines
		
	
	
		
			9.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			310 lines
		
	
	
		
			9.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| 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<WR> {
 | |
|   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: `<?xml version="1.0"?>
 | |
|     //             <SOAP-ENV:Envelope
 | |
|     //               xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
 | |
|     //               xmlns:xsd="http://www.w3.org/2001/XMLSchema"
 | |
|     //               xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
 | |
|     //              >
 | |
|     //              <SOAP-ENV:Body>
 | |
|     //                 <writeObjectOut  xmlns="http://service.es.doron">
 | |
|     //                   <wglb>${wglb}</wglb>
 | |
|     //                   <jkxlh>${jkxlh}</jkxlh>
 | |
|     //                   <glbm>${glbm}</glbm>
 | |
|     //                   <jgbh>${jgbh}</jgbh>
 | |
|     //                   <sjbs>${sjbs}</sjbs>
 | |
|     //                   <data>${JSON.stringify(params.data)}</data>
 | |
|     //                   <file>${JSON.stringify(params.file)}</file>
 | |
|     //                 </writeObjectOut>
 | |
|     //              </SOAP-ENV:Body>
 | |
|     //            </SOAP-ENV:Envelope>`,
 | |
|     //   })
 | |
|     // } 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: `<?xml version="1.0"?>
 | |
|                 <SOAP-ENV:Envelope
 | |
|                   xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
 | |
|                   xmlns:xsd="http://www.w3.org/2001/XMLSchema"
 | |
|                   xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
 | |
|                  >
 | |
|                  <SOAP-ENV:Body>
 | |
|                     <writeObjectOut  xmlns="http://service.es.doron">
 | |
|                       <wglb>${wglb}</wglb>
 | |
|                       <jkxlh>${jkxlh}</jkxlh>
 | |
|                       <glbm>${glbm}</glbm>
 | |
|                       <jgbh>${jgbh}</jgbh>
 | |
|                       <sjbs>${sjbs}</sjbs>
 | |
|                       <data>${JSON.stringify(params.data)}</data>
 | |
|                       <file>${JSON.stringify(params.file)}</file>
 | |
|                     </writeObjectOut>
 | |
|                  </SOAP-ENV:Body>
 | |
|                </SOAP-ENV:Envelope>`,
 | |
|       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],
 | |
|   }
 | |
| } |