fix: 解决考生缺考问题,解决进入不了联网考试问题

This commit is contained in:
wangzhongjie 2025-07-15 16:55:14 +08:00
parent 78be17b13b
commit 5b48137d66
5 changed files with 64 additions and 39 deletions

View File

@ -6,6 +6,8 @@ import { GetSyncData } from '../utils/table/Operation';
import { GetCurrentTime } from '../utils/Common'; import { GetCurrentTime } from '../utils/Common';
import FileUtils from '../utils/FileUtils'; import FileUtils from '../utils/FileUtils';
import common from '@ohos.app.ability.common'; import common from '@ohos.app.ability.common';
import { dConsole } from '../utils/LogWorker';
import { JudgeTag } from '../config';
let baseHost: string = AppStorage.get<string>('host')!; let baseHost: string = AppStorage.get<string>('host')!;
@ -35,43 +37,39 @@ export async function writeObjectOut(params: RegulatoryInterfaceParams, filePath
return { code: 1 } return { code: 1 }
} }
let JGHOST: string = AppStorage.get<string>("JGHOST") || "" let JGHOST: string = AppStorage.get<string>("JGHOST") || ""
let isJGNew: boolean = false
//获取监管接口地址路径 //获取监管接口地址路径
if (!JGHOST) { if (!JGHOST) {
const syssetParams: MASYSSETTableType[] = await GetSyncData<MASYSSETTableType>("MA_SYSSET"); const syssetParams: MASYSSETTableType[] = await GetSyncData<MASYSSETTableType>("MA_SYSSET");
syssetParams.forEach(sys => { syssetParams.forEach(sys => {
if (sys.v_no == '839') { if (sys.v_no == '839') {
//是否是新监管 //是否是新监管
// globalThis.isJGNew = sys.v_value == '3' isJGNew = sys.v_value == '3'
AppStorage.setOrCreate('isJGNew', sys.v_value == '3') AppStorage.setOrCreate('isJGNew', isJGNew)
} }
if (sys.v_no == '900') { if (sys.v_no == '900') {
// globalThis.JGHOST = validateIP(decodeURIComponent(sys.v_value)) const ip = decodeURIComponent(sys.v_value || "")
AppStorage.setOrCreate('JGHOST', validateIP(decodeURIComponent(sys.v_value || ""))) JGHOST = validateIP(ip) || ""
dConsole.log(JudgeTag, "监管地址取值", JGHOST)
AppStorage.setOrCreate('JGHOST', JGHOST)
} }
}) })
} }
// const { xtlb, jkxlh, jkid, drvexam } = params;
const isJGNew: boolean = AppStorage.get<boolean>('isJGNew') || false
//新监管调用 //新监管调用
if (isJGNew) { if (isJGNew) {
dConsole.log(JudgeTag, "新监管")
return await writeObjectOutNew(params, filePath, context) return await writeObjectOutNew(params, filePath, context)
} }
params.drvexam = params.drvexam ?? {}; params.drvexam = params.drvexam ?? {};
params.drvexam.zp = params.drvexam.zp === undefined ? undefined : encodeURIComponent(params.drvexam.zp); params.drvexam.zp = params.drvexam.zp === undefined ? undefined : encodeURIComponent(params.drvexam.zp);
const drvexamArrs = Object.entries(params.drvexam) const drvexamArr = Object.entries(params.drvexam)
.filter((item: [string, string]) => item[1] != undefined) .filter((item: [string, string]) => item[1] != undefined)
.map((item: [string, object]) => `<${item[0]}>${item[1]}</${item[0]}>`) .map((item: [string, object]) => `<${item[0]}>${item[1]}</${item[0]}>`)
// const drvexamArrs = Reflect.ownKeys(params.drvexam)
// .filter(dKey => Reflect.get(params.drvexam, dKey) != undefined)
// .map((key: string) => (
// `<${key}>${Reflect.get(params.drvexam, key)}</${key}>`));
if (filePath) { if (filePath) {
const fileUtil = new FileUtils(context); const fileUtil = new FileUtils(context);
await fileUtil.initFolder(filePath); await fileUtil.initFolder(filePath);
let obj: WuxiExamType = { let obj: WuxiExamType = {
xtlb: params.xtlb, xtlb: params.xtlb,
jkxlh: params.jkxlh, jkxlh: params.jkxlh,
@ -83,9 +81,8 @@ export async function writeObjectOut(params: RegulatoryInterfaceParams, filePath
} }
fileUtil.editFile(`${filePath}/wuxi_exam_data.txt`, JSON.stringify(obj) + `\n`); fileUtil.editFile(`${filePath}/wuxi_exam_data.txt`, JSON.stringify(obj) + `\n`);
} }
dConsole.log(JudgeTag, "老监管", JGHOST)
//对象转换成xml //对象转换成xml
JGHOST = AppStorage.get<string>("JGHOST") || ""
const temp = await request<object>({ const temp = await request<object>({
host: JGHOST, host: JGHOST,
url: '/dems_ws/services/TmriOutAccess?wsdl', url: '/dems_ws/services/TmriOutAccess?wsdl',
@ -105,7 +102,7 @@ export async function writeObjectOut(params: RegulatoryInterfaceParams, filePath
<?xm lversion="1.0 "encoding="GBK"?> <?xm lversion="1.0 "encoding="GBK"?>
<root> <root>
<drvexam> <drvexam>
${drvexamArrs} ${drvexamArr}
</drvexam> </drvexam>
</root> </root>
]]> ]]>
@ -262,11 +259,6 @@ export async function uploadExamMileage(params: UploadExamMileage) {
// }) // })
// } // }
function validateIP(path: string) {
const reg = new RegExp(`(\w+):\/\/([^/:]+)(:\d*)?`)
const result = path.match(reg);
return result ? result[0] : "";
}
// 上传运行时常 // 上传运行时常
export async function uploadHarmonyLiCheng(data: object) { export async function uploadHarmonyLiCheng(data: object) {
@ -277,3 +269,11 @@ export async function uploadHarmonyLiCheng(data: object) {
xml: false xml: false
}) })
} }
function validateIP(path: string) {
// const regex = /(\w+):\/\/([\d.]+)(:\d+)?/;
const regex = new RegExp("(\\w+):\\/\\/([\\d.]+)(:\\d+)?");
const result = path.match(regex);
return result ? result[0] : null;
}

View File

@ -132,7 +132,13 @@ struct ExaminerLoginPage {
const endTime = new Date().getTime(); const endTime = new Date().getTime();
const elapsedTime = endTime - startTime; const elapsedTime = endTime - startTime;
const remainingTime = Math.max(0, minDisplayTime - elapsedTime); const remainingTime = Math.max(0, minDisplayTime - elapsedTime);
const examinerLoginInfo: ExaminerLoginInfo | undefined = res.examinerLoginRsp?.body;
if (!examinerLoginInfo) {
dConsole.error(ExaminerLoginTag, 'examinerLoginRsp.body is undefined');
return;
}
examinerLoginInfo.username = this.userName;
AppStorage.setOrCreate<ExaminerLoginInfo>('examinerInfo', examinerLoginInfo);
// 延迟关闭弹窗和跳转 // 延迟关闭弹窗和跳转
setTimeout(() => { setTimeout(() => {
this.loadingDialog.close(); this.loadingDialog.close();
@ -142,14 +148,6 @@ struct ExaminerLoginPage {
type: 1 type: 1
} }
}, router.RouterMode.Single); }, router.RouterMode.Single);
const examinerLoginInfo: ExaminerLoginInfo | undefined = res.examinerLoginRsp?.body;
if (!examinerLoginInfo) {
dConsole.error(ExaminerLoginTag, 'examinerLoginRsp.body is undefined');
return;
}
examinerLoginInfo.username = this.userName;
AppStorage.setOrCreate<ExaminerLoginInfo>('examinerInfo', examinerLoginInfo);
}, remainingTime); }, remainingTime);
} catch (e) { } catch (e) {

View File

@ -206,7 +206,7 @@ struct Index {
this.initWork = true this.initWork = true
} }
DifferentialAndSignal.onMsg(() => { DifferentialAndSignal.onMsg(() => {
dConsole.log("外层接受") // dConsole.log("外层接受")
}) })
} }

View File

@ -41,7 +41,7 @@ import { GetCurrentTime, NumberToByteArray } from '../utils/Common';
import DB from '../utils/DbSql'; import DB from '../utils/DbSql';
import { CenterUDPBusinessInstance } from '../utils/business/CenterUdpBusiness'; import { CenterUDPBusinessInstance } from '../utils/business/CenterUdpBusiness';
import { JudgeEmitterInstance } from '../utils/business/UdpEvent'; import { JudgeEmitterInstance } from '../utils/business/UdpEvent';
import { JudgeConfig, StartExamTag } from '../config'; import { JudgeConfig, StartExamTag, UserInfoTag } from '../config';
import { dConsole } from '../utils/LogWorker'; import { dConsole } from '../utils/LogWorker';
import HeaderComponent from './compontents/Header'; import HeaderComponent from './compontents/Header';
import AvatarComponent from './UserInfo/Avatar'; import AvatarComponent from './UserInfo/Avatar';
@ -778,7 +778,7 @@ struct UserInfoPage {
sfzmhm: this.currentUser.sfzmhm, sfzmhm: this.currentUser.sfzmhm,
examinationRoomId: this.carInfo.examinationRoomId || "", examinationRoomId: this.carInfo.examinationRoomId || "",
username: this.examinerLoginInfo.username || "", username: this.examinerLoginInfo.username || "",
lsh: this.lsh lsh: this.lsh,
} }
dConsole.log('carNo1111', param) dConsole.log('carNo1111', param)
examinationStuAbsent(param).then(res => { examinationStuAbsent(param).then(res => {
@ -800,6 +800,7 @@ struct UserInfoPage {
this.pageIndex = 0 this.pageIndex = 0
this.qkFlag = false this.qkFlag = false
this.currentUser = EmptyCandidateObject this.currentUser = EmptyCandidateObject
this.missAnExamDialogController.close()
this.getExaminationStudentInfoFn() this.getExaminationStudentInfoFn()
return return
} }
@ -854,9 +855,8 @@ struct UserInfoPage {
avPlayer.playAudio([`voice/监管通信中.mp3`], false, async () => { avPlayer.playAudio([`voice/监管通信中.mp3`], false, async () => {
dConsole.info('surenjun', '播放结束开始考试接口调用') dConsole.info('surenjun', '播放结束开始考试接口调用')
// const { code, keystr, message } = await this.beginExam() || {};
const res = await this.beginExam() const res = await this.beginExam()
dConsole.info('surenjun', '开始考试接口调用结束') dConsole.info('surenjun', '开始考试接口调用结束', JSON.stringify(res))
//TODO code转换 //TODO code转换
if (res.code != 1) { if (res.code != 1) {
@ -1007,7 +1007,7 @@ struct UserInfoPage {
return { code: -200 } return { code: -200 }
} }
const drvexam: DrvexamType = { const drvexam: DrvexamType = {
lsh: "this.currentUser.lsh", lsh: this.currentUser.lsh,
kskm: this.carInfo.examSubject, kskm: this.carInfo.examSubject,
ksxtbh: this.ksxtbh || '222', ksxtbh: this.ksxtbh || '222',
sfzmhm: this.currentUser.sfzmhm || '', sfzmhm: this.currentUser.sfzmhm || '',
@ -1216,6 +1216,7 @@ struct UserInfoPage {
.margin({ bottom: 21 }) .margin({ bottom: 21 })
.onClick(async () => { .onClick(async () => {
if (this.systemParam.Param612Str == '1') { if (this.systemParam.Param612Str == '1') {
dConsole.log(UserInfoTag, "不给开始考试")
return return
} }
await this.prePareExam() await this.prePareExam()

View File

@ -3,6 +3,7 @@ import convertxml from '@ohos.convertxml';
import { BusinessError } from '@ohos.base'; import { BusinessError } from '@ohos.base';
import promptAction from '@ohos.promptAction'; import promptAction from '@ohos.promptAction';
import { RequestTag } from '../config'; import { RequestTag } from '../config';
import Prompt from '@system.prompt';
interface RequestOption { interface RequestOption {
url: string url: string
@ -112,7 +113,32 @@ function dealCenterCode(message: string, isNewCenter: boolean = false): CenterCo
} }
} }
} }
return undefined const result = parseXml(message)
if (result.code != '1') {
Prompt.showToast({
message: decodeURIComponent(message as string),
duration: 3000
});
return { code: result.code, message: decodeURIComponent(result.message || "") } as CenterCodeResult
} else {
return result
}
}
function parseXml(xml: string) {
const codeRegex = new RegExp("<code>(.*?)<\\/code>");
const messageRegex = new RegExp("<message>(.*?)<\\/message>");
const keystrRegex = new RegExp("<keystr>(.*?)<\\/keystr>");
const codeMatch = xml.match(codeRegex);
const messageMatch = xml.match(messageRegex);
const keystrMatch = xml.match(keystrRegex);
return {
code: codeMatch ? codeMatch[1] : null,
message: messageMatch ? messageMatch[1] : null,
keystr: keystrMatch ? keystrMatch[1] : null,
} as CenterCodeResult;
} }
type RequestResult = Object | object | string | CenterCodeResult type RequestResult = Object | object | string | CenterCodeResult
@ -134,9 +160,9 @@ export default function Request<T extends RequestResult>(options: RequestOption)
readTimeout: options.timeout || 30 * 1000 readTimeout: options.timeout || 30 * 1000
}).then(async data => { }).then(async data => {
console.log(RequestTag, baseURL, options.url, "返回的数据", JSON.stringify(data)) console.log(RequestTag, baseURL, options.url, "返回的数据", JSON.stringify(data))
// let result = options.xml ? xmlToJSON(data.result as string) : data.result console.log(RequestTag, baseURL, options.url, "入参", options.accept, "xml", options.xml)
let result = options.xml ? (options.accept ? data.result : xmlToJSON(data.result as string)) : data.result; let result = options.xml ? (options.accept ? data.result : xmlToJSON(data.result as string)) : data.result;
console.log("结束xml解析") console.log("结束xml解析", JSON.stringify(result))
let resObj: object = new Object() let resObj: object = new Object()
if (typeof result === 'string') { if (typeof result === 'string') {
result = JSON.parse(result) result = JSON.parse(result)