diff --git a/entry/.gitignore b/entry/.gitignore index 3c6ea220..f105b5ae 100644 --- a/entry/.gitignore +++ b/entry/.gitignore @@ -2,4 +2,5 @@ /.preview /build /.cxx -/.idea \ No newline at end of file +/.idea +/oh_modules \ No newline at end of file diff --git a/entry/src/main/ets/common/service/usbService.ts b/entry/src/main/ets/common/service/usbService.ts new file mode 100644 index 00000000..162ec92b --- /dev/null +++ b/entry/src/main/ets/common/service/usbService.ts @@ -0,0 +1,120 @@ +// 导入USB接口api包。 +import usb from '@ohos.usbManager'; +const LOGTAG = 'USBSERVICES' + + +//字符串转字节 +function stringToArr(str){ + var arr = []; + for (var i = 0, j = str.length; i < j; ++i) { + arr.push(str.charCodeAt(i)); + } + return arr +} + +//plc数据转成无锡科研所usb字节数据 +function plcStrToWXCodeArr(wuXiDataStr){ + const arr = stringToArr(wuXiDataStr); + //数据包总长度 有效长度 + let packetSize = 65,maxDataSize = 63; + let packetArr = [] + const loop = Math.ceil(arr.length / maxDataSize) + for(let i = 0; i< loop; i++){ + const thisPacket = arr.slice(i * maxDataSize,(i + 1) * maxDataSize) + const oSize = maxDataSize - thisPacket.length; + //补齐0x00 + if(oSize > 0){ + let oSizeArr = [] + for(let j = 0;j < oSize;j++){oSizeArr.push(0x00)} + packetArr.push([thisPacket.length].concat(thisPacket).concat(oSizeArr)); + }else{ + packetArr.push([thisPacket.length].concat(thisPacket)); + } + } + return packetArr +} + +export default class UsbService{ + private devicepipe : usb.USBDevicePipe + private outEndpoint: usb.USBEndpoint + public isWXUSBDevice:Boolean + + constructor() { + //是否是无锡检测设备 + this.isWXUSBDevice = false + this.devicepipe + this.init() + } + + init = async()=>{ + // 获取设备列表。 + let deviceList : Array = usb.getDevices(); + + deviceList.forEach(async (device:usb.USBDevice) => { + const {vendorId,productId} = device; + console.log(LOGTAG,JSON.stringify(device)); + //无锡所检测设备接入 + if(vendorId === 6790 && productId === 58409){ + // if(vendorId === 2385 && productId === 5734){ + // 申请操作指定的device的操作权限。 + try { + let bool = usb.hasRight(device.name); + console.info(LOGTAG,'bool =>' + bool) + const isExit = await usb.requestRight(device.name); + console.info(LOGTAG,'isExit =>' + isExit) + if(isExit){ + let devicepipe : usb.USBDevicePipe = usb.connectDevice(device); + let interfaces = device.configs[0].interfaces[0]; + let ret = usb.claimInterface(devicepipe, interfaces,true); + console.info(LOGTAG,'ret =>' + ret); + + if(ret === 0 ){ + let outEndpoint : usb.USBEndpoint = interfaces.endpoints[1]; + let inEndpoint : usb.USBEndpoint = interfaces.endpoints[0]; + this.isWXUSBDevice = true; + this.devicepipe = devicepipe + this.outEndpoint = outEndpoint + + }else{ + console.info(LOGTAG,'usb claimInterface failed') + } + + }else{ + console.info(LOGTAG,'isExit =>' +'false') + } + + } catch (e) { + console.info(LOGTAG,'e=>' + JSON.stringify(e)) + } + + } + }); + + } + + sendUSB =async (wuXiDataStr) => { + console.info(LOGTAG,'正在发送数据') + const {devicepipe,isWXUSBDevice,outEndpoint} = this; + console.info(LOGTAG,'正在发送数据') + if(isWXUSBDevice){ + console.info(LOGTAG,wuXiDataStr) + const codeArr = plcStrToWXCodeArr(wuXiDataStr); + for(let i = 0; i < codeArr.length;i++){ + try { + console.info(LOGTAG,'正在发送数据') + const f = await usb.bulkTransfer(devicepipe, outEndpoint, new Uint8Array(codeArr[i])) + console.info(LOGTAG,'发送成功数据长度为:' + f) + } catch (e) { + console.info(LOGTAG,JSON.stringify(e)) + } + } + }else{ + console.info(LOGTAG,'usb设备初始化失败') + } + + } +} + + + +// export default initUsbServicesFn diff --git a/entry/src/main/ets/common/utils/UdpJudge.ts b/entry/src/main/ets/common/utils/UdpJudge.ts index a0b6fccf..6de5966d 100644 --- a/entry/src/main/ets/common/utils/UdpJudge.ts +++ b/entry/src/main/ets/common/utils/UdpJudge.ts @@ -1,7 +1,7 @@ import systemTime from '@ohos.systemDateTime'; import { Array2Byte, fillZero, string2Bytes, stringToASC } from '../../common/utils/tools'; import { testKmItems } from '../../pages/judgeSDK/dataTest/index'; -import { setJudgeUdp, setTopLineUdp } from './GlobleUdp'; +import { setJudgeUdp, setTopLineUdp } from './GlobalUdp'; import { convertGpsCoord2 } from '../utils/tools'; diff --git a/entry/src/main/ets/mock/CarCheck.ets b/entry/src/main/ets/mock/CarCheck.ets new file mode 100644 index 00000000..2e47c27f --- /dev/null +++ b/entry/src/main/ets/mock/CarCheck.ets @@ -0,0 +1,165 @@ +export const WarnFlagData = { + 1: '0', + 2: '0', + 3: '0', + 4: '0', + 5: '0', + 6: '0', + 7: '0', + 8: '0', + 9: '0', + 10: '0', + 11: '0', + 12: '0', + 13: '0', + 14: '0', + 15: '0', + 16: '0', + 17: '0', + 18: '0', + 19: '0', + 20: '0', + 21: '0', + 22: '0', + 23: '0', + 24: '0', + 25: '0', + 26: '0', + 27: '0', + 28: '0', + 29: '0', +} + +export const PassData = { + 1: false, + 2: false, + 3: false, + 4: false, + 5: false, + 6: false, + 7: false, + 8: false, + 9: false, + 10: false, + 11: false, + 12: false, + 13: false, + 14: false, + 15: false, + 16: false, + 17: false, + 18: false, + 19: false, + 20: false, + 21: false, + 22: false, + 23: false, + 24: false, + 25: false, + 26: false, + 27: false, + 28: false, + 29: false, +} + +export const StackValueData = { + 1: '', + 2: "", + 3: "", + 4: "", + 5: "", + 6: "", + 7: "", + 8: "", + 9: "", + 10: "", + 11: "", + 12: "", + 13: "", + 14: "", + 15: "", + 16: "", + 17: "", + 18: "", + 19: "", + 20: "", + 21: "", + 22: "", + 23: "", + 24: "", + 25: "", + 26: "", + 27: "", + 28: "", + 29: "", +} + +export const WarnFlagTipData = { + 0: [], + 1: [], + 2: [], + 3: ['check1.wav', 'check2.wav'], + 4: ['check3.wav', 'check4.wav'], + 5: ['check5.wav', 'check6.wav'], + 6: ['check7.wav', 'check8.wav'], + 7: ['check9.wav', 'check10.wav'], + 8: ['check26.wav', 'check27.wav'], + 9: ['dianhuoVideo.wav', 'xihuoVideo.wav'], + 10: ['check31.wav'], + 11: ['check30.wav'], + 12: ['check28.wav'], + 13: ['check29.wav'], + 14: ['check11.wav'], + 15: ['check12.wav'], + 16: ['check13.wav'], + 17: ['check14.wav'], + 18: ['check15.wav'], + 19: ['check16.wav'], + 20: ['check17.wav'], + 21: ['check18.wav'], + 22: ['check19.wav'], + 23: ['check22.wav'], + 24: ['check23.wav'], + 25: ['check20.wav', 'check21.wav'], + 26: ['check24.wav'], + // 27:[], + // 28:[], + // 29:[], +} + +export const RealNumData = { + 3: 19, + 4: 17, + 5: 13, + 6: 12, + 7: 14, + 8: 18, + 9: 5, + 10: 29, + 11: 30, + 12: 31, + 13: 32, + 14: 28, + 15: 28, + 16: 28, + 17: 28, + 18: 28, + 19: 28, + 20: 28, + 21: 2, //左方向灯, + 22: 3, + 23: 7, + 24: 8, + 25: 20, + 26: '' +} + +export const DwMapData={ + 14: '1', + 15: '2', + 16: '3', + 17: '4', + 18: '5', + 19: '9', + 20: '0' +} \ No newline at end of file diff --git a/entry/src/main/ets/mock/Judge.ets b/entry/src/main/ets/mock/Judge.ets new file mode 100644 index 00000000..7c569ac6 --- /dev/null +++ b/entry/src/main/ets/mock/Judge.ets @@ -0,0 +1,17 @@ +export const AmplifyArr = [ + { name: '直线', projectCode: '3', projectCodeCenter: '40300' }, + { name: '会车', projectCode: '9', projectCodeCenter: '41300' }, + { name: '变道', projectCode: '4', projectCodeCenter: '40500' }, + { name: '超车', projectCode: '10', projectCodeCenter: '41400' }, + { name: '掉头', projectCode: '12', projectCodeCenter: '41500' }, + { name: '停车', projectCode: '11', projectCodeCenter: '40600' }, +] + +export const AmplifyImages = [ + 'km_zxB.png', + 'km_hcB.png', + 'km_bdB.png', + 'km_ccB.png', + 'km_dtB.png', + 'km_tcB.png', +] \ No newline at end of file diff --git a/entry/src/main/ets/mock/SignDisplay.ets b/entry/src/main/ets/mock/SignDisplay.ets new file mode 100644 index 00000000..b8344fdb --- /dev/null +++ b/entry/src/main/ets/mock/SignDisplay.ets @@ -0,0 +1,67 @@ +export const SignalData = [ + { key: '左方向灯', value: '0' }, + { key: '右方向灯', value: '0' }, + { key: '喇叭', value: '0' }, + { key: '点火1', value: '0' }, + { key: '点火2', value: '0' }, + { key: '近光灯', value: '0' }, + { key: '远光灯', value: '0' }, + { key: '示廓灯', value: '0' }, + { key: '雾灯', value: '0' }, + { key: '雨刮器', value: '0' }, + { key: '脚刹', value: '0' }, + { key: '手刹', value: '0' }, + { key: '主驾驶门', value: '0' }, + { key: '离合', value: '0' }, + { key: '副刹车', value: '0' }, + { key: '安全带', value: '0' }, + { key: '双跳灯', value: '0' }, + { key: '车速', value: '0' }, + { key: '档位', value: '0' }, + { key: '超声波1', value: '0' }, + { key: '超声波2', value: '0' }, + { key: 'NC', value: '0' }, + { key: 'SA15', value: '0' }, + { key: '其他门', value: '0' }, + { key: '转速过高', value: '0' }, + { key: '累计脉冲', value: '0' }, + { key: '熄火次数', value: '0' }, + { key: '发动机转速', value: '0' }, + { key: '方向盘角度', value: '0' }, + { key: '超声波3', value: '0' }, + { key: '超声波4', value: '0' }, + { key: '触摸1', value: '0' }, + { key: '触摸2', value: '0' }, + { key: '触摸3', value: '0' }, + { key: 'SCIO', value: '0' }, + { key: 'SC1A_C', value: '0' }, + { key: 'SC1B_C', value: '0' }, + { key: 'SC2A_C', value: '0' }, + { key: 'SC2B_C', value: '0' }, + { key: 'SC3A_C', value: '0' }, + { key: 'SC3B_C', value: '0' }, + { key: 'SC4A_C', value: '0' }, + { key: 'SC4B_C', value: '0' }, + { key: 'SC5A_C', value: '0' }, + { key: 'SC5B_C', value: '0' }, + { key: 'SC6A_C', value: '0' }, + { key: 'SC6B_C', value: '0' } +] + +export const GPSData = [ + { key: '状态', value: '0' }, + { key: '收星数', value: '0' }, + { key: '海拔高', value: '0' }, + { key: '高度差', value: '0' }, + { key: '龄期', value: '0' }, + { key: '维度因子', value: '0' }, + { key: '经度因子', value: '0' }, + { key: '航向角', value: '0' }, + { key: '俯仰角', value: '0' }, + { key: '航向角状态-收星数', value: '0' }, + { key: '年月日', value: '0' }, + { key: '时分秒', value: '0' }, + { key: '经度', value: '0' }, + { key: '纬度', value: '0' }, + { key: '速度', value: '0' }, +] \ No newline at end of file diff --git a/entry/src/main/ets/mock/index.ets b/entry/src/main/ets/mock/index.ets index 61cf6ef0..add1ef21 100644 --- a/entry/src/main/ets/mock/index.ets +++ b/entry/src/main/ets/mock/index.ets @@ -1,3 +1,9 @@ export * from "./CandidateData" -export * from "./VideoData" \ No newline at end of file +export * from "./VideoData" + +export * from "./Judge" + +export * from "./SignDisplay" + +export * from "./CarCheck" \ No newline at end of file diff --git a/entry/src/main/ets/model/SignDisplay.ets b/entry/src/main/ets/model/SignDisplay.ets new file mode 100644 index 00000000..7ded50b4 --- /dev/null +++ b/entry/src/main/ets/model/SignDisplay.ets @@ -0,0 +1,4 @@ +export type SignalDataType = { + key: string; + value: string; +}; \ No newline at end of file diff --git a/entry/src/main/ets/model/index.ets b/entry/src/main/ets/model/index.ets new file mode 100644 index 00000000..2bb685e1 --- /dev/null +++ b/entry/src/main/ets/model/index.ets @@ -0,0 +1 @@ +export * from "./SignDisplay" \ No newline at end of file diff --git a/entry/src/main/ets/pages/CarCheck.ets b/entry/src/main/ets/pages/CarCheck.ets index 199c9bdb..4c70b4e9 100644 --- a/entry/src/main/ets/pages/CarCheck.ets +++ b/entry/src/main/ets/pages/CarCheck.ets @@ -4,6 +4,7 @@ import { carConfigurationInfo, uploadExamCarCheckResult } from '../api/checkCar' import TopLogo from './compontents/TopLogo'; import testNapi from '@ohos.hiserialsdk'; import { dateFormat } from '../common/utils/tools'; +import { DwMapData, PassData, RealNumData, StackValueData, WarnFlagData, WarnFlagTipData } from '../mock'; @Entry @Component @@ -24,167 +25,13 @@ export default struct Index { @State subFlag: boolean = true @State signArr: Array = [] @State checkListCopy: Array = [] - @State warnFlag: object = { - 1: '0', - 2: '0', - 3: '0', - 4: '0', - 5: '0', - 6: '0', - 7: '0', - 8: '0', - 9: '0', - 10: '0', - 11: '0', - 12: '0', - 13: '0', - 14: '0', - 15: '0', - 16: '0', - 17: '0', - 18: '0', - 19: '0', - 20: '0', - 21: '0', - 22: '0', - 23: '0', - 24: '0', - 25: '0', - 26: '0', - 27: '0', - 28: '0', - 29: '0', - } + @State warnFlag: object = WarnFlagData @State @Watch('outClick') outFlag: boolean = false; - @State passArray: object = { - 1: false, - 2: false, - 3: false, - 4: false, - 5: false, - 6: false, - 7: false, - 8: false, - 9: false, - 10: false, - 11: false, - 12: false, - 13: false, - 14: false, - 15: false, - 16: false, - 17: false, - 18: false, - 19: false, - 20: false, - 21: false, - 22: false, - 23: false, - 24: false, - 25: false, - 26: false, - 27: false, - 28: false, - 29: false, - } - @State stachValue: object = { - 1: '', - 2: "", - 3: "", - 4: "", - 5: "", - 6: "", - 7: "", - 8: "", - 9: "", - 10: "", - 11: "", - 12: "", - 13: "", - 14: "", - 15: "", - 16: "", - 17: "", - 18: "", - 19: "", - 20: "", - 21: "", - 22: "", - 23: "", - 24: "", - 25: "", - 26: "", - 27: "", - 28: "", - 29: "", - } - @State warnFlagTip: object = { - 0: [], - 1: [], - 2: [], - 3: ['check1.wav', 'check2.wav'], - 4: ['check3.wav', 'check4.wav'], - 5: ['check5.wav', 'check6.wav'], - 6: ['check7.wav', 'check8.wav'], - 7: ['check9.wav', 'check10.wav'], - 8: ['check26.wav', 'check27.wav'], - 9: ['dianhuoVideo.wav', 'xihuoVideo.wav'], - 10: ['check31.wav'], - 11: ['check30.wav'], - 12: ['check28.wav'], - 13: ['check29.wav'], - 14: ['check11.wav'], - 15: ['check12.wav'], - 16: ['check13.wav'], - 17: ['check14.wav'], - 18: ['check15.wav'], - 19: ['check16.wav'], - 20: ['check17.wav'], - 21: ['check18.wav'], - 22: ['check19.wav'], - 23: ['check22.wav'], - 24: ['check23.wav'], - 25: ['check20.wav', 'check21.wav'], - 26: ['check24.wav'], - // 27:[], - // 28:[], - // 29:[], - } - @State realNum: object = { - 3: 19, - 4: 17, - 5: 13, - 6: 12, - 7: 14, - 8: 18, - 9: 5, - 10: 29, - 11: 30, - 12: 31, - 13: 32, - 14: 28, - 15: 28, - 16: 28, - 17: 28, - 18: 28, - 19: 28, - 20: 28, - 21: 2, //左方向灯, - 22: 3, - 23: 7, - 24: 8, - 25: 20, - 26: '' - } - @State dwMap: object = { - 14: '1', - 15: '2', - 16: '3', - 17: '4', - 18: '5', - 19: '9', - 20: '0' - } + @State passArray: object = PassData + @State stachValue: object = StackValueData + @State warnFlagTip: object = WarnFlagTipData + @State realNum: object = RealNumData + @State dwMap: object = DwMapData @State fd: number = -1; @State devPath: string = "/dev/ttyS3" @State stopFlag: boolean = false @@ -262,143 +109,53 @@ export default struct Index { // carConfigurationInfoFn() { - if (globalThis.singlePlay) { - // - const str = "1:5;2:5;3:5;4:5;5:5;6:5;7:5;8:5;9:5;10:5;11:5;12:5;13:5;14:5;15:5;16:5;17:5;18:5;19:5;20:5;21:5;22:2;23:5;24:5;25:5;" - const data = str.split(';') - this.checkList = [] - const list = data - list.map(res => { - const arr = res.split(':') - this.checkList.push({ - 'key': parseInt(arr[0]) + 2, 'time': arr[1] + if (globalThis.singlePlay) { + // + const str = "1:5;2:5;3:5;4:5;5:5;6:5;7:5;8:5;9:5;10:5;11:5;12:5;13:5;14:5;15:5;16:5;17:5;18:5;19:5;20:5;21:5;22:2;23:5;24:5;25:5;" + const data = str.split(';') + this.checkList = [] + const list = data + list.map(res => { + const arr = res.split(':') + this.checkList.push({ + 'key': parseInt(arr[0]) + 2, 'time': arr[1] + }) }) - }) - this.checkListCopy = JSON.parse(JSON.stringify(this.checkList)) - return - } - //模拟真实数据 - const param = { - "body": - { - "carIdString": globalThis.carInfo.carId, //考车ID - "deviceNo": globalThis.deviceNo + this.checkListCopy = JSON.parse(JSON.stringify(this.checkList)) + return + } + //模拟真实数据 + const param = { + "body": + { + "carIdString": globalThis.carInfo.carId, //考车ID + "deviceNo": globalThis.deviceNo + } } - } - carConfigurationInfo(param).then(res => { - const data = res.body.ES_CHECK_CAR_ITEM[0].ITEMS.split(';') - this.checkList = [] - const list = data - list.map(res => { - const arr = res.split(':') - this.checkList.push({ - 'key': parseInt(arr[0]) + 2, 'time': arr[1] + carConfigurationInfo(param).then(res => { + const data = res.body.ES_CHECK_CAR_ITEM[0].ITEMS.split(';') + this.checkList = [] + const list = data + list.map(res => { + const arr = res.split(':') + this.checkList.push({ + 'key': parseInt(arr[0]) + 2, 'time': arr[1] + }) }) + this.checkListCopy = JSON.parse(JSON.stringify(this.checkList)) + // this.checkList = JSON.parse(res).body.ES_CHECK_CAR_ITEM[0].split(';') + console.log('this.checkList' + this.checkList) + }).catch((error) => { + console.log('error12error' + error) }) - this.checkListCopy = JSON.parse(JSON.stringify(this.checkList)) - // this.checkList = JSON.parse(res).body.ES_CHECK_CAR_ITEM[0].split(';') - console.log('this.checkList' + this.checkList) - }).catch((error) => { - console.log('error12error' + error) - }) -} + } async kszj() { this.breakFlag = true - this.stachValue = { - 1: '', - 2: "", - 3: "", - 4: "", - 5: "", - 6: "", - 7: "", - 8: "", - 9: "", - 10: "", - 11: "", - 12: "", - 13: "", - 14: "", - 15: "", - 16: "", - 17: "", - 18: "", - 19: "", - 20: "", - 21: "", - 22: "", - 23: "", - 24: "", - 25: "", - 26: "", - 27: "", - 28: "", - 29: "", - } - this.warnFlag = { - 1: 0, - 2: 0, - 3: 0, - 4: 0, - 5: 0, - 6: 0, - 7: 0, - 8: 0, - 9: 0, - 10: 0, - 11: 0, - 12: 0, - 13: 0, - 14: 0, - 15: 0, - 16: 0, - 17: 0, - 18: 0, - 19: 0, - 20: 0, - 21: 0, - 22: 0, - 23: 0, - 24: 0, - 25: 0, - 26: 0, - 27: 0, - 28: 0, - 29: 0, - } - this.passArray = { - 1: false, - 2: false, - 3: false, - 4: false, - 5: false, - 6: false, - 7: false, - 8: false, - 9: false, - 10: false, - 11: false, - 12: false, - 13: false, - 14: false, - 15: false, - 16: false, - 17: false, - 18: false, - 19: false, - 20: false, - 21: false, - 22: false, - 23: false, - 24: false, - 25: false, - 26: false, - 27: false, - 28: false, - 29: false, - } + this.stachValue = StackValueData + this.warnFlag = WarnFlagData + this.passArray = PassData this.checkListCopy = JSON.parse(JSON.stringify(this.checkList)) this.index = this.checkListCopy[0].key this.vocObj.playAudio({ diff --git a/entry/src/main/ets/pages/Index.ets b/entry/src/main/ets/pages/Index.ets index 6cc7d1e7..6d05819f 100644 --- a/entry/src/main/ets/pages/Index.ets +++ b/entry/src/main/ets/pages/Index.ets @@ -1,75 +1,40 @@ // @ts-nocheck -import promptAction from '@ohos.promptAction' import { VideoConfig } from './interfaces' import common from '@ohos.app.ability.common'; -import router from '@ohos.router' -import { getDeviceInfo ,getCarInfo} from '../common/service/terminalService' -import { setCurrentTime } from '../common/service/timeService' -import {string2Bytes} from '../common/utils/tools' +import router from '@ohos.router'; +import { getCarInfo, getDeviceInfo } from '../common/service/terminalService'; +import { setCurrentTime } from '../common/service/timeService'; +import { string2Bytes } from '../common/utils/tools'; import { FileHelper } from '../common/service/FileHelper'; -import { - getEsCarModel, -} from '../common/service/initable' -import FileUtil from '../common/utils/File' -import { getUDP, getUDP2 } from '../common/utils/GlobleUdp' -import {initJudgeUdp} from '../common/utils/UdpJudge' -import { getTCP } from '../common/utils/GlobleTcp' -import TcpClient from '../common/utils/TcpClient'; -import testNapi from '@ohos.hiserialsdk' -import {setliushuiNum,getliushuiNum,getSingleCenterTable,getDoubleCeneterTable,takePhotoFn} from '../common/service/indexService' +import { getEsCarModel, } from '../common/service/initable'; +import FileUtil from '../common/utils/File'; +import { getUDP, getUDP2 } from '../common/utils/GlobalUdp'; +import { initJudgeUdp } from '../common/utils/UdpJudge'; +import { getTCP } from '../common/utils/GlobalTcp'; +import { getliushuiNum, setliushuiNum } from '../common/service/indexService'; import abilityAccessCtrl, { Permissions } from '@ohos.abilityAccessCtrl'; import worker, { MessageEvents } from '@ohos.worker'; @Entry @Component struct Index { - private fileUtil: FileUtil @State carNum: string = '' @State version: string = '' @State url: string = '' @State hasAuth: boolean = false; @State isSingle: boolean = false; @State deviceId: string = ''; - private interval = null; - private workerInstance = null; @State angle: number = 0 @State ratio: number = 1700 / 960 @State loading: boolean = true @State fd: number = -1; + @State param: VideoConfig = VideoConfigData + fileHelper = null; + private fileUtil: FileUtil + private interval = null; + private workerInstance = null; private context = getContext(this) as common.UIAbilityContext; - @State param: VideoConfig = { - videoNum:'1', - spls: '1', - wz: '0,0', - faceFlag: false, - shuiying: true, - pztd: '2', - ljlx: '', - ip: '192.168.36.94', - port: '554', - userName: 'admin', - pwd: '12345qwe', - td1: '1', - td2: '2', - td3: '3', - td4: '4', - videoRecord1: false, - videoRecord2: true, - videoRecord3: false, - videoRecord4: false, - text1: '', - text2: '', - text3: '', - dolt: '', - fontSize: '', - rlls: '1', - spzd4:false, - spzd3:false, - spzd2:false, - spzd1:false, - zdyz:'5', - } - fileHelper =null; + build() { Column() { Column() { @@ -119,7 +84,7 @@ struct Index { Column() { Row() { if (!this.isSingle) { - Image($r('app.media.index_lw')).width('30.5%').height('74%').onClick(async() => { + Image($r('app.media.index_lw')).width('30.5%').height('74%').onClick(async () => { if (this.loading) { return } @@ -133,7 +98,7 @@ struct Index { message: `网络连接失败`, duration: 3000 }); - this.loading=false + this.loading = false } this.testXMLToJSONInWorker() @@ -193,39 +158,46 @@ struct Index { ) ) - Text('考车号:' + globalThis.deviceNo).fontColor('#CCAE7A').fontSize(22 * globalThis.ratio).margin({ right: 24 }) + Text('考车号:' + globalThis.deviceNo) + .fontColor('#CCAE7A') + .fontSize(22 * globalThis.ratio) + .margin({ right: 24 }) } .width('100%') .justifyContent(FlexAlign.SpaceBetween) .margin({ bottom: 10 }) } + // if (this.loading) { - Column() { - Image($r('app.media.open_loading')) - .width(200 * globalThis.ratio) - .rotate({ angle: this.angle }) - .height(200 * globalThis.ratio) - .animation({ - duration: 5000, // 动画时长 - curve: Curve.EaseOut, // 动画曲线 - delay: 500, // 动画延迟 - iterations: -1, // 播放次数 - playMode: PlayMode.Normal, // 动画模式 - }) - .margin({ top: 30 * globalThis.ratio }) - Image($r('app.media.car')) - .width(80 * globalThis.ratio) - .height(80 * globalThis.ratio) - .position({ x: 288 * globalThis.ratio, y: 89 * globalThis.ratio }) - Text('获取考车信息,请稍候……').fontSize(24 * globalThis.ratio).margin({ top: 20 * globalThis.ratio }).fontWeight(400) - } - .visibility(this.loading ? Visibility.Visible: Visibility.Hidden) - .width(660 * globalThis.ratio) - .height(360 * globalThis.ratio) - .position({ x: 150 * globalThis.ratio, y: 98 * globalThis.ratio }) - .backgroundColor('#E6E3DF') - .borderRadius(19 * globalThis.ratio) + Column() { + Image($r('app.media.open_loading')) + .width(200 * globalThis.ratio) + .rotate({ angle: this.angle }) + .height(200 * globalThis.ratio) + .animation({ + duration: 5000, // 动画时长 + curve: Curve.EaseOut, // 动画曲线 + delay: 500, // 动画延迟 + iterations: -1, // 播放次数 + playMode: PlayMode.Normal, // 动画模式 + }) + .margin({ top: 30 * globalThis.ratio }) + Image($r('app.media.car')) + .width(80 * globalThis.ratio) + .height(80 * globalThis.ratio) + .position({ x: 288 * globalThis.ratio, y: 89 * globalThis.ratio }) + Text('获取考车信息,请稍候……') + .fontSize(24 * globalThis.ratio) + .margin({ top: 20 * globalThis.ratio }) + .fontWeight(400) + } + .visibility(this.loading ? Visibility.Visible : Visibility.Hidden) + .width(660 * globalThis.ratio) + .height(360 * globalThis.ratio) + .position({ x: 150 * globalThis.ratio, y: 98 * globalThis.ratio }) + .backgroundColor('#E6E3DF') + .borderRadius(19 * globalThis.ratio) } } .width('100%') @@ -237,27 +209,28 @@ struct Index { } aboutToAppear() { - globalThis.ratio= 1700 / 960 + globalThis.ratio = 1700 / 960 this.angle = 0 this.loading = false } - async testXMLToJSONInWorker(){ + + async testXMLToJSONInWorker() { let workerInstance = new worker.ThreadWorker('entry/ets/workers/worker.ts', { name: 'FriendsMoments Worker' }); - const param={ - carId:globalThis.carInfo?.carId, - examinationRoomId:globalThis.carInfo?.examinationRoomId, - judgeVersion:globalThis.judgeVersion, - shellVersion:globalThis.version, - paraKdid:globalThis.timeInfo?.paraKdid, + const param = { + carId: globalThis.carInfo?.carId, + examinationRoomId: globalThis.carInfo?.examinationRoomId, + judgeVersion: globalThis.judgeVersion, + shellVersion: globalThis.version, + paraKdid: globalThis.timeInfo?.paraKdid, mode: globalThis.timeInfo?.mode, - context:this.context + context: this.context } workerInstance.postMessage(param); workerInstance.onmessage = (e: MessageEvents): void => { - console.log("baoyihu after postMessage :",JSON.stringify(e.data)); - if(e.data.isComplete){ + console.log("baoyihu after postMessage :", JSON.stringify(e.data)); + if (e.data.isComplete) { router.pushUrl({ url: 'pages/ExaminerLogin', }, router.RouterMode.Single) @@ -265,18 +238,24 @@ struct Index { this.loading=false } } + async heartMsg() { - const arr = [globalThis.signNum||0, globalThis.statue||1] + const arr = [globalThis.signNum || 0, globalThis.statue || 1] let tmpList = []; tmpList.push(string2Bytes(arr[0], 1 * 8)[0]) tmpList.push(string2Bytes(arr[1], 1 * 8)[0]) - const str =globalThis.lsh|| '0000000000000' - for (let i = 0;i < str.length; i++) { + const str = globalThis.lsh || '0000000000000' + for (let i = 0; i < str.length; i++) { tmpList.push(string2Bytes(str.charCodeAt(i), 1 * 8)[0]) } - console.log('globalThis.carInfo',JSON.stringify(globalThis.carInfo)) + console.log('globalThis.carInfo', JSON.stringify(globalThis.carInfo)) - const param= {id: 31,list:tmpList,carNo: globalThis.carInfo.carNo,placeId: globalThis.carInfo.examinationRoomId} + const param = { + id: 31, + list: tmpList, + carNo: globalThis.carInfo.carNo, + placeId: globalThis.carInfo.examinationRoomId + } // globalThis.udpClient2.initHeartSendMsg(param,this.context) if(!globalThis.closeHeartSocket){ globalThis.udpClient2.sendMsg(param, this.context) @@ -290,7 +269,7 @@ struct Index { getUDP() getUDP2() clearInterval(this.interval) - this.interval=setInterval(() => { + this.interval = setInterval(() => { setliushuiNum(this.context) getliushuiNum(this.context) this.heartMsg() @@ -339,8 +318,9 @@ struct Index { console.error(`Failed to request permissions from user. Code is ${err.code}, message is ${err.message}`); }) } + async initParams() { - this.loading=false + this.loading = false await getDeviceInfo() getCarInfo() await setCurrentTime(); @@ -352,8 +332,8 @@ struct Index { // await this.getModel() // const arr = [0x55, 0xaa, 0x01, 0x00, 0x02, 0x01, 0x03, 0x00] // globalThis.udpClientByTopLine.sendMsg(Array2Byte(arr).buffer) - console.info(testNapi) } + async getModel() { const context = this.context; //下载模型 diff --git a/entry/src/main/ets/pages/Judge.ets b/entry/src/main/ets/pages/Judge.ets index 07d176cc..ecd27f36 100644 --- a/entry/src/main/ets/pages/Judge.ets +++ b/entry/src/main/ets/pages/Judge.ets @@ -1,30 +1,106 @@ -import router from '@ohos.router' -import prompt from '@ohos.prompt' +import router from '@ohos.router'; +import Prompt from '@system.prompt'; import common from '@ohos.app.ability.common'; -import EndPoPup from './compontents/judge/end-popup' -import LoadingPopup from './compontents/judge/loading-popup' -import DeductedPopup from './compontents/judge/deduction-popup' -import AmplifyPopup from './compontents/judge/amplify-popup' -import Judge from './judgeSDK/judge' -import {defaultJudgeConfigObj} from './judgeSDK/utils//judge-common' +import EndPoPup from './compontents/judge/EndPopup'; +import LoadingPopup from './compontents/judge/LoadingPopup'; +import DeductedPopup from './compontents/judge/DeductionPopup'; +import AmplifyPopup from './compontents/judge/AmplifyPopup'; +import Judge from './judgeSDK/judge'; +import { defaultJudgeConfigObj } from './judgeSDK/utils//judge-common'; import { - Project, ProjectObj, MarkRule, CDSBInfo, - SYSTEMPARMARR,CARINFO ,MAPPOINT ,MAPITEMPOINTITEM,SYSSET -} from './judgeSDK/api/judgeSDK.d' -import { getCurrentTime, formatTime, getCurrentHourTime,chunkArr } from '../common/utils/tools' -import { examJudgeEndExam } from './judgeSDK/api/index' -import { getSyncData } from '../common/service/initable' -import { judgeConfig } from './judgeSDK/utils/judge-config' + CARINFO, + CDSBInfo, + MAPITEMPOINTITEM, + MAPPOINT, + MarkRule, + Project, + ProjectObj, + SYSSET, + SYSTEMPARMARR +} from './judgeSDK/api/judgeSDK.d'; +import { chunkArr, formatTime, getCurrentHourTime, getCurrentTime } from '../common/utils/tools'; +import { examJudgeEndExam } from './judgeSDK/api/index'; +import { getSyncData } from '../common/service/initable'; +import { judgeConfig } from './judgeSDK/utils/judge-config'; import FileUtil from '../common/utils/File'; -import SignDisplayCom from './compontents/signDisplayCom' -import {testMarkRules} from './judgeSDK/dataTest/index' +import SignDisplayCom from './compontents/signDisplayCom'; + @Entry @Component struct Index { scroller: Scroller = new Scroller() + //页面通用字体大小 + @State FONTSIZE: number = 28 + @State BIGFONTSIZE: number = 28 + //结束考试弹窗 + @State endPopupVisible: boolean = false + //等待弹窗(考试及格,考试不及格使用) + @State loadingPopupVisible: boolean = false + //实时轨迹弹窗 + @State signDisplayComVisible: boolean = false + @State isDdxk: boolean = false; + @State time: string = '' + //考试用时 + @State examTime: number = 0 + //开始时间 + @State startTime: string = '00:00:00' + @State startFullTime: string = '' + @State startHourTime: string = '' + //科目类型 + @State examSubject: 2 | 3 = 3; + @State ddxkTime: number = 0; + @State ddxkKsxmArr: string[] = [''] + @State ddxkKfArr: string[] = [''] + @State xmmcStr: string = '' + @State carztStr: string = '' + @State kfArr: { + xmmcStr?: string, + score: string, + desc: string + }[] = [] + @State name: string = '' + @State idCard: string = '' + @State totalScore: number = 100 + //模拟考试项目 + @State projects: Project[] = [] + @State projectsObj: ProjectObj = {} + @State projectsCenterObj: ProjectObj = {} + @State markRuleListObj: MarkRule = {} + @State cdsbInfoObj: CDSBInfo = {} + @State timer: number = 0 + @State judgeConfig: { [k: string]: string }[] = [] + @State judgeConfigObj: { [k: string]: any } = defaultJudgeConfigObj + //流水号 + @State lsh: string = '' + @State kszp: string = '' + @State ksdd: string = '' + @State kssycs: string = '' + @State kslx: string = '' + //监管接口序列号 + @State serialNumber: number = 0 + @State carType: string = '' + @State carName: string = '' + @State isDeductedPopShow: boolean = false + @State isAmplifyPopShow: boolean = false + @State amplifiedImgIndex: number = 0 + @State judge: any = {} + //行驶距离 + @State jl: number = 0 + //应考里程 + @State examMileage: string = '0' + @State artSubject3Projects: string[] = ['直线', '会车', '变道', '超车', '掉头', '停车'] + @State artSubject3ProjectsCodesArr: string[] = ['3', '9', '4', '10', '12', '11'] + @State manualMarkRules: MarkRule[] = [] + //科目三评判初始化数据 + @State systemparmArr: SYSTEMPARMARR[] = [] + @State mapPointItemArr: MAPITEMPOINTITEM[] = [] + @State carinfoArrr: CARINFO[] = [] + @State mapPointArr: MAPPOINT[] = [] private context = getContext(this) as common.UIAbilityContext; private img: ImageBitmap = new ImageBitmap("/resources/base/media/1.png") + //已考的考试项目 + private wantInfos = [] async aboutToAppear() { globalThis.windowClass.setWindowSystemBarEnable(['']) @@ -51,16 +127,16 @@ struct Index { } //初始化相关数据库表 - async initDb(){ + async initDb() { const examSubject = globalThis.carInfo.examSubject; const {isTrajectoryOpen,trajectoryPath} = judgeConfig await this.initStudent(); await this.initCar(); //是否开启轨迹回放模式 - if(isTrajectoryOpen){ + if (isTrajectoryOpen) { this.initTrajectoryParam(trajectoryPath) - }else{ + } else { examSubject == 2 ? await this.initSystemKm2Param() : await this.initSystemKm3Param() @@ -70,11 +146,12 @@ struct Index { await this.initCDSBInfo() // 科目三新增读取表数据 - if(examSubject == 3){ + if (examSubject == 3) { await this.initMapPoint() await this.initMapPointItem() } } + // 查询考车信息 async initCar() { const result = await getSyncData('ES_CARINFO') @@ -82,14 +159,14 @@ struct Index { this.carName = decodeURI(carInfo.carclass) this.carType = carInfo.kscx this.carinfoArrr.push({ - CARID:carInfo.carid, - IPADDR:'', - CARCLASS:decodeURI(carInfo.carclass), - KSCX:carInfo.kscx, - CARNAME:decodeURI(carInfo.carclass), - FLAG:carInfo.flag, - BK1:carInfo.bk1, - BK2:carInfo.bk2, + CARID: carInfo.carid, + IPADDR: '', + CARCLASS: decodeURI(carInfo.carclass), + KSCX: carInfo.kscx, + CARNAME: decodeURI(carInfo.carclass), + FLAG: carInfo.flag, + BK1: carInfo.bk1, + BK2: carInfo.bk2, }) } @@ -98,8 +175,8 @@ struct Index { const students = await getSyncData('USER') const stuInfo = students[0] || {}; const {xm,sfzmhm,lsh,kszp,ksdd,kssycs,kslx} = stuInfo; - this.name = xm; - this.idCard = sfzmhm; + this.name = xm || '测试考生'; + this.idCard = sfzmhm || '01234567891010'; this.lsh = lsh; this.kszp = kszp; this.ksdd = ksdd; @@ -109,36 +186,36 @@ struct Index { // 获取扣分代码信息 async initMarkRules(markRules ?: MarkRule[]) { - const markRuleParams = markRules ||( await getSyncData('MA_MARKRULE') as MarkRule[]) + const markRuleParams = markRules || (await getSyncData('MA_MARKRULE') as MarkRule[]) - markRuleParams .forEach(mark => { + markRuleParams.forEach(mark => { const tempObj = { - itemno:mark.itemno * 1, - markcatalog:mark.markcatalog, - markshow:decodeURI(mark.markshow), - markreal:mark.markreal * 1, - markserial:mark.markserial, - kfxh:mark.kfxh, - OnlyOneKind:mark.onlyoneid * 1, - NoCancelId:mark.nocancelid * 1, - GPS_SID:mark.gps_sid == 0 ? false : true + itemno: mark.itemno * 1, + markcatalog: mark.markcatalog, + markshow: decodeURI(mark.markshow), + markreal: mark.markreal * 1, + markserial: mark.markserial, + kfxh: mark.kfxh, + OnlyOneKind: mark.onlyoneid * 1, + NoCancelId: mark.nocancelid * 1, + GPS_SID: mark.gps_sid == 0 ? false : true } const markserial = mark.markserial * 1; //筛选出人工评判的扣分 - if(markserial > 100 && markserial < 200){ + if (markserial > 100 && markserial < 200) { this.manualMarkRules.push(tempObj) } this.markRuleListObj[`${mark.itemno}_${mark.markserial}`] = { - ...tempObj, + ...tempObj, markserial: mark.markserial, }; }) } // 获取sysset表信息 - async initSysset(sysset?:SYSSET[]) { - const syssetParams = sysset || await getSyncData('MA_SYSSET') + async initSysset(sysset?: SYSSET[]) { + const syssetParams = sysset || await getSyncData('MA_SYSSET') //@ts-ignore const serialNumberArr = syssetParams.filter(sys => sys.v_no === '901'); this.serialNumber = (serialNumberArr[0] && serialNumberArr[0].v_value) || '123456' @@ -147,7 +224,7 @@ struct Index { //@ts-ignore syssetParams.forEach((sys) => { - if(isTrajectoryOpen){ + if (isTrajectoryOpen) { sys.v_no = sys.key; sys.v_name = sys.name; sys.v_value = sys.value @@ -156,14 +233,14 @@ struct Index { const {v_no,v_value} = sys; const v_no_num = v_no * 1; const value = decodeURIComponent(v_value) - if(v_no_num >= 10 &&v_no_num <= 900){ + if (v_no_num >= 10 && v_no_num <= 900) { syssetJudgeConfigArr.push({ - key: v_no_num,value: value, + key: v_no_num, value: value, name: decodeURI(sys.v_name) }) } //科目三应行驶距离参数 - if(sys.v_no == '303'){ + if (sys.v_no == '303') { this.examMileage = sys.v_value + ''; } @@ -173,35 +250,35 @@ struct Index { } // 初始化systemParam表 - async initSystemKm2Param(sysParam?:SYSTEMPARMARR[]){ - const systemParms:any = sysParam || await getSyncData('MA_SYSTEMPARM') + async initSystemKm2Param(sysParam?: SYSTEMPARMARR[]) { + const systemParms: any = sysParam || await getSyncData('MA_SYSTEMPARM') const carName = this.carName; - let carNo2 = '',allItems = []; - systemParms.forEach((systemParm)=>{ + let carNo2 = '', allItems = []; + systemParms.forEach((systemParm) => { const {no1,no2,no3} = systemParm; //获取当前考车的no2 - if(no1 == 3 && no3 == 1){ + if (no1 == 3 && no3 == 1) { const txt1 = decodeURI(systemParm.txt1) - if(txt1 === carName){ + if (txt1 === carName) { carNo2 = no2; } } //获取当前考车的考试项目 - if(carNo2 !== '' && no2 == carNo2 && no3 == 10){ + if (carNo2 !== '' && no2 == carNo2 && no3 == 10) { allItems = decodeURIComponent(systemParm.txt1).split(',') } // 存储当前考车考试项目 - if(allItems.length && no1 == 6 && allItems.includes(no2)){ + if (allItems.length && no1 == 6 && allItems.includes(no2)) { const txt2 = decodeURIComponent(systemParm.txt2) const currentProject = { - name:decodeURI(systemParm.txt1), - abbreviation:decodeURI(systemParm.txt3), - projectCode:no2, - projectCodeCenter:txt2 + name: decodeURI(systemParm.txt1), + abbreviation: decodeURI(systemParm.txt3), + projectCode: no2, + projectCodeCenter: txt2 // sbxh:project.type } this.projectsObj[no2] = currentProject @@ -211,8 +288,8 @@ struct Index { }) const projects = this.projects; - if(!projects.length){ - prompt.showToast({ + if (!projects.length) { + Prompt.showToast({ message: '读取数据库信息失败,请重新考试!', duration: 8000 }); @@ -221,14 +298,14 @@ struct Index { } //初始化systemParam表 - async initSystemKm3Param(sysParam?:SYSTEMPARMARR[]) { + async initSystemKm3Param(sysParam?: SYSTEMPARMARR[]) { const systemParms: any = sysParam || await getSyncData('MA_SYSTEMPARM') - console.log('systemParms',JSON.stringify(systemParms)) + const {isTrajectoryOpen} = judgeConfig systemParms.forEach((systemParm) => { - if(isTrajectoryOpen){ + if (isTrajectoryOpen) { systemParm.no1 = systemParm.NO1; systemParm.no2 = systemParm.NO2; systemParm.no3 = systemParm.NO3; @@ -239,10 +316,12 @@ struct Index { const {no1,no2,no3,} = systemParm; this.systemparmArr.push({ - 'NO1':no1*1,'NO2':no2*1,'NO3':no3*1, - 'TXT1':decodeURIComponent(systemParm.txt1), - 'TXT2':decodeURIComponent(systemParm.txt2), - 'TXT3':decodeURIComponent(systemParm.txt3), + 'NO1': no1 * 1, + 'NO2': no2 * 1, + 'NO3': no3 * 1, + 'TXT1': decodeURIComponent(systemParm.txt1), + 'TXT2': decodeURIComponent(systemParm.txt2), + 'TXT3': decodeURIComponent(systemParm.txt3), }) const txt2 = decodeURIComponent(systemParm.txt2) @@ -263,7 +342,7 @@ struct Index { }) const projects = this.projects; if (!projects.length) { - prompt.showToast({ + Prompt.showToast({ message: '读取数据库信息失败,请重新考试!', duration: 8000 }); @@ -306,7 +385,7 @@ struct Index { // 断点续考判断 async goDdxkItems() { const judgeConfigObj = this.judgeConfigObj - if(judgeConfigObj['369'] != 1 || judgeConfigObj['432'] != 1){ + if (judgeConfigObj['369'] != 1 || judgeConfigObj['432'] != 1) { return } //断点续考判断 @@ -351,65 +430,76 @@ struct Index { } // 初始化mapPoint表 - async initMapPoint(){ + async initMapPoint() { const pointParams = await getSyncData('MA_MAP_POINT') //@ts-ignore - pointParams.forEach(point=>{ - const {point_no,gps_e,gps_n,point_no_f,point_type,road_code,gps_e_Location,gps_n_Location,f_gps_e,f_gps_n,passed} = point; - this.mapPointArr.push({ - point_no:point_no * 1, - gps_e:gps_e * 1, - gps_n:gps_n * 1, - point_no_f:point_no_f * 1, - point_type:point_type * 1, + pointParams.forEach(point => { + const { + point_no, + gps_e, + gps_n, + point_no_f, + point_type, road_code, - gps_e_Location:(gps_e_Location || 0 ) * 1, - gps_n_Location:(gps_n_Location || 0 ) * 1, - f_gps_e:f_gps_e * 1, - f_gps_n:f_gps_n * 1, - passed:passed * 1 + gps_e_Location, + gps_n_Location, + f_gps_e, + f_gps_n, + passed + } = point; + this.mapPointArr.push({ + point_no: point_no * 1, + gps_e: gps_e * 1, + gps_n: gps_n * 1, + point_no_f: point_no_f * 1, + point_type: point_type * 1, + road_code, + gps_e_Location: (gps_e_Location || 0) * 1, + gps_n_Location: (gps_n_Location || 0) * 1, + f_gps_e: f_gps_e * 1, + f_gps_n: f_gps_n * 1, + passed: passed * 1 }) }) } // 初始化mapPointItem表 - async initMapPointItem(){ + async initMapPointItem() { const pointItemPoints = await getSyncData('MA_MAP_POINT_ITEM'); //@ts-ignore pointItemPoints.forEach(itemPoint => { const {point_no,itemno,itemno1,subname} = itemPoint this.mapPointItemArr.push({ - point_no:point_no * 1, - itemno:itemno * 1, - itemno1:itemno1 * 1, - subname + point_no: point_no * 1, + itemno: itemno * 1, + itemno1: itemno1 * 1, + subname }) }) } // 初始化本地systemparam表、markrule表 - async initTrajectoryParam(trajectoryPath:string){ + async initTrajectoryParam(trajectoryPath: string) { const {isTrajectoryOpen} = judgeConfig //轨迹回放读取 systemparam表、markrule表 - const fileUtil = new FileUtil(this.context); + const fileUtil = new FileUtil(this.context); const folderPath = await fileUtil.initFolder(trajectoryPath); const str = await fileUtil.readFile(folderPath); const strArr = str.split('\n'); - const [initData,beginData] = [strArr[0],strArr[1]]; + const [initData, beginData] = [strArr[0], strArr[1]]; const initDataObj = JSON.parse(initData) const systemparm = initDataObj.systemparm; const examSubject = globalThis.carInfo.examSubject; - this.examSubject = isTrajectoryOpen ? (initDataObj.kskm*1):examSubject; + this.examSubject = isTrajectoryOpen ? (initDataObj.kskm * 1) : examSubject; globalThis.carInfo.examSubject = this.examSubject examSubject == 2 ? await this.initSystemKm2Param(systemparm) : await this.initSystemKm3Param(systemparm) //@ts-ignore - await this.initMarkRules(testMarkRules); + await this.initMarkRules(initDataObj.mark); await this.initSysset(initDataObj.sysset); } - build() { Column() { Row() { @@ -417,7 +507,7 @@ struct Index { Image($rawfile('judge/signal_logoS.png')).width(120) Text(this.time).fontColor('#CCB48F').fontSize(32).padding({ left: 10, right: 5 }) Image($rawfile('judge/xh_green.png')).width(50) - }.padding({left:20}) + }.padding({ left: 20 }) Row() { Text(`当前项目:${this.xmmcStr || '无'} `).fontColor('#E5CCA1').fontSize(32) @@ -445,7 +535,7 @@ struct Index { Text(this.startTime).fontColor('#FFF').fontSize(this.FONTSIZE) }.margin({ bottom: 10 }) - if(this.examSubject == 3){ + if (this.examSubject == 3) { Row() { Text('考试路线:').fontColor('#E5CCA1').fontSize(this.FONTSIZE) Text('线路6').fontColor('#FFAD33').fontSize(this.FONTSIZE) @@ -465,10 +555,13 @@ struct Index { Text(formatTime(this.examTime)).fontColor('#FFF').fontSize(this.FONTSIZE) }.margin({ bottom: 10 }) - if(this.examSubject == 3){ + if (this.examSubject == 3) { Row() { - if(this.judgeConfigObj['375'] == '0'){ - Text(`应行驶:${this.examMileage}m`).fontColor('#E5CCA1').fontSize(this.FONTSIZE).padding({right:20}) + if (this.judgeConfigObj['375'] == '0') { + Text(`应行驶:${this.examMileage}m`) + .fontColor('#E5CCA1') + .fontSize(this.FONTSIZE) + .padding({ right: 20 }) } Text(`已行驶:${this.jl}m`).fontColor('#FFAD33').fontSize(this.FONTSIZE) } @@ -479,113 +572,178 @@ struct Index { }.width('100%') Column() { - Row(){ + Row() { Text(this.carztStr).fontColor('#FFA500').fontSize(this.FONTSIZE) }.height(40) + Row() { Flex({ direction: FlexDirection.Column }) { - List({}) { - ForEach(this.kfArr, (item) => { - ListItem() { - Column() { - Row() { - Text(item.xmmcStr).fontSize(this.BIGFONTSIZE).fontColor('#FFF') - Text(`${item.score}分`).fontSize(this.BIGFONTSIZE).fontColor('#FFF') - } - .width('100%') - .backgroundColor('#38260B') - .justifyContent(FlexAlign.SpaceBetween) - .padding({ top: 12, bottom: 12, left: 8, right: 5 }) - Text(item.desc) - .fontSize(this.BIGFONTSIZE) - .fontColor('#E5CBA1') - .margin({ top: 10, bottom: 8, left: 5, right: 5 }) - }.margin({ top: 15 }).alignItems(HorizontalAlign.Start) + if (this.kfArr.length) { + List({}) { + ForEach(this.kfArr, (item) => { + ListItem() { + Column() { + Row() { + Text(item.xmmcStr).fontSize(this.BIGFONTSIZE).fontColor('#FFF') + Text(`${item.score}分`).fontSize(this.BIGFONTSIZE).fontColor('#FFF') + } + .width('100%') + .backgroundColor('#38260B') + .justifyContent(FlexAlign.SpaceBetween) + .padding({ top: 12, bottom: 12, left: 8, right: 5 }) + + Text(item.desc) + .fontSize(this.BIGFONTSIZE) + .fontColor('#E5CBA1') + .margin({ top: 10, bottom: 8, left: 5, right: 5 }) + }.margin({ top: 15 }).alignItems(HorizontalAlign.Start) + + }.margin({ bottom: 25 }) + }) + }.padding({ left: 15, right: 15, top: 30, bottom: 5 }) + } else { + Column() { + Row() { + Text('暂无扣分项').fontSize(this.BIGFONTSIZE).fontColor('#FFF') + } + .width('100%') + .backgroundColor('#38260B') + .justifyContent(FlexAlign.SpaceBetween) + .padding({ top: 12, bottom: 12, left: 8, right: 3 }) + + }.margin({ top: 35 }).padding({ left: 20, right: 20 }).alignItems(HorizontalAlign.Start) + } - }.margin({bottom:25}) - }) - }.padding({left:15,right:15,top:30,bottom:5}) } - .backgroundImage($rawfile('judge/score_bg.png'), ImageRepeat.NoRepeat) - .backgroundImageSize({ width: '100%', height: '100%' }) - .width(514) - .height(618) - .padding({ top: 18, bottom: 15, left: 13, right: 14 }) + .backgroundImage($rawfile('judge/score_bg.png'), ImageRepeat.NoRepeat) + .backgroundImageSize({ width: '100%', height: '100%' }) + .width(514) + .height(618) + .padding({ top: 18, bottom: 15, left: 13, right: 14 }) //科目二 - if(this.examSubject == 2){ - Flex({wrap:FlexWrap.Wrap,direction:FlexDirection.Row,justifyContent:FlexAlign.SpaceBetween}){ - List({}){ - ForEach(chunkArr(this.projects,2),(item)=>{ - ListItem(){ - Row(){ - Row(){ + if (this.examSubject == 2) { + Flex({ wrap: FlexWrap.Wrap, direction: FlexDirection.Row, justifyContent: FlexAlign.SpaceBetween }) { + List({}) { + ForEach(chunkArr(this.projects, 2), (item) => { + ListItem() { + Row() { + Row() { //#FF7566 #00FFD5 #E6DECF // Text(this.projectsObj[item[0].projectCode]) - Text(item[0].abbreviation).fontSize(item[0].abbreviation.length > 5?28:32).fontColor(this.getProjectColor(this.projectsObj[item[0].projectCode].type)) - }.backgroundImage($rawfile('judge/project_item.png'),ImageRepeat.NoRepeat).backgroundImageSize({width:'100%',height:'100%'}).width('48.5%').height(115).margin({bottom:5}).justifyContent(FlexAlign.Center) - if(item[1]){ - Row(){ + Text(item[0].abbreviation) + .fontSize(item[0].abbreviation.length > 5 ? 28 : 32) + .fontColor(this.getProjectColor(this.projectsObj[item[0].projectCode].type)) + } + .backgroundImage($rawfile('judge/project_item.png'), ImageRepeat.NoRepeat) + .backgroundImageSize({ width: '100%', height: '100%' }) + .width('48.5%') + .height(115) + .margin({ bottom: 5 }) + .justifyContent(FlexAlign.Center) + + if (item[1]) { + Row() { //#FF7566 #00FFD5 #E6DECF - Text(item[1].abbreviation).fontSize(item[1].abbreviation.length > 5?28:32).fontColor(this.getProjectColor(this.projectsObj[item[1].projectCode].type)) - }.backgroundImage($rawfile('judge/project_item.png'),ImageRepeat.NoRepeat).backgroundImageSize({width:'100%',height:'100%'}).width('48.5%').height(115).margin({left:5,bottom:5}).justifyContent(FlexAlign.Center) + Text(item[1].abbreviation) + .fontSize(item[1].abbreviation.length > 5 ? 28 : 32) + .fontColor(this.getProjectColor(this.projectsObj[item[1].projectCode].type)) + } + .backgroundImage($rawfile('judge/project_item.png'), ImageRepeat.NoRepeat) + .backgroundImageSize({ width: '100%', height: '100%' }) + .width('48.5%') + .height(115) + .margin({ left: 5, bottom: 5 }) + .justifyContent(FlexAlign.Center) } } } }); } - }.backgroundImage($rawfile('judge/project_bg.png'),ImageRepeat.NoRepeat).backgroundImageSize({width:'100%',height:'100%'}).width('57%').height('100%').padding(30).margin({right:10}) + } + .backgroundImage($rawfile('judge/project_bg.png'), ImageRepeat.NoRepeat) + .backgroundImageSize({ width: '100%', height: '100%' }) + .width('57%') + .height('100%') + .padding(30) + .margin({ right: 10 }) } //科目三 - if(this.examSubject == 3){ - Column(){ - Flex({wrap:FlexWrap.Wrap,direction:FlexDirection.Row,justifyContent:FlexAlign.SpaceBetween}){ - List({}){ - ForEach(this.projects,(project)=>{ - ListItem(){ - Text(project.name){ + if (this.examSubject == 3) { + Column() { + Flex({ + wrap: FlexWrap.Wrap, + direction: FlexDirection.Row, + justifyContent: FlexAlign.SpaceBetween + }) { + List({}) { + ForEach(this.projects, (project) => { + ListItem() { + Text(project.name) { - }.fontColor(this.getProjectColor(this.projectsObj[project.projectCode].type)).margin({bottom:5}).fontSize(26) - }.margin({bottom:8}) + } + .fontColor(this.getProjectColor(this.projectsObj[project.projectCode].type)) + .margin({ bottom: 5 }) + .fontSize(26) + }.margin({ bottom: 8 }) }) - }.lanes(2).margin({left:25}) - }.width('100%').height('50%').backgroundImage($rawfile('judge/project_km3_bg.png'),ImageRepeat.NoRepeat).backgroundImageSize({width:'100%',height:'100%'}).padding(30).margin({right:5}) + }.lanes(2).margin({ left: 25 }) + } + .width('100%') + .height('50%') + .backgroundImage($rawfile('judge/project_km3_bg.png'), ImageRepeat.NoRepeat) + .backgroundImageSize({ width: '100%', height: '100%' }) + .padding(30) + .margin({ right: 5 }) - Flex({wrap:FlexWrap.Wrap,direction:FlexDirection.Row,justifyContent:FlexAlign.SpaceAround}){ - List(){ - ForEach(this.artSubject3Projects,(item,index)=>{ - ListItem(){}.backgroundImage( + Flex({ wrap: FlexWrap.Wrap, direction: FlexDirection.Row, justifyContent: FlexAlign.SpaceAround }) { + List() { + ForEach(this.artSubject3Projects, (item, index) => { + ListItem() { + } + .backgroundImage( $rawfile( - `judge/km3/${this.getIsExitManualProject(index) ? item : (item+'_gray')}.png` - ),ImageRepeat.NoRepeat) - .backgroundImageSize({width:'100%',height:'100%'}).width(174).height(118).margin({bottom:15}) - .onClick(()=>{ - if(this.getIsExitManualProject(index)){ + `judge/km3/${this.getIsExitManualProject(index) ? item : (item + '_gray')}.png` + ), ImageRepeat.NoRepeat) + .backgroundImageSize({ width: '100%', height: '100%' }) + .width(174) + .height(118) + .margin({ bottom: 15 }) + .onClick(() => { + if (this.getIsExitManualProject(index)) { // 靠边停车时候可以触发 - if(this.judgeConfigObj['343'] == 0 ){ + if (this.judgeConfigObj['343'] == 0) { const xmmcStr = this.xmmcStr; - if(xmmcStr == '无' || xmmcStr == ''){ - this.amplifiedImgIndex = index;this.isAmplifyPopShow = true - } else{ - if(index === 5){ - prompt.showToast({ + if (xmmcStr == '无' || xmmcStr == '') { + this.amplifiedImgIndex = index; + this.isAmplifyPopShow = true + } else { + if (index === 5) { + Prompt.showToast({ message: `${xmmcStr}未结束,不允许靠边停车`, duration: 8000 }); } } - }else{ - this.amplifiedImgIndex = index;this.isAmplifyPopShow = true + } else { + this.amplifiedImgIndex = index; + this.isAmplifyPopShow = true } } }) }) - }.lanes(3).margin({left:5,top:18}) + }.lanes(3).margin({ left: 5, top: 18 }) } - }.backgroundImage($rawfile('judge/project_bg.png'),ImageRepeat.NoRepeat).backgroundImageSize({width:'100%',height:'100%'}).width(660).height(640).padding(44).margin({right:10}) + } + .backgroundImage($rawfile('judge/project_bg.png'), ImageRepeat.NoRepeat) + .backgroundImageSize({ width: '100%', height: '100%' }) + .width(660) + .height(640) + .padding(44) + .margin({ right: 10 }) } }.margin({ top: 15 }).height('80%').justifyContent(FlexAlign.SpaceBetween) }.width('100%').height('100%').alignItems(HorizontalAlign.Start).margin({ top: 10 }) @@ -616,23 +774,33 @@ struct Index { .backgroundImageSize({ width: '100%', height: '100%' }) .justifyContent(FlexAlign.Center) .alignItems(VerticalAlign.Center) - .margin({ top: 30 ,bottom:15}) + .margin({ top: 30, bottom: 15 }) } - Column(){ - if(this.examSubject == 3){ - Row(){ - Row(){}.width(60).height(60).backgroundImage($rawfile('judge/manual_judge.png'), ImageRepeat.NoRepeat).backgroundImageSize({ width: '100%', height: '100%' }) - Text('人工评判').fontColor('#FFF').fontSize(32).padding({right:12}) - }.width(334).height(110).justifyContent(FlexAlign.Center).alignItems(VerticalAlign.Center) - .backgroundImage($rawfile('judge/button_nor.png'), ImageRepeat.NoRepeat) - .backgroundImageSize({ width: '100%', height: '100%' }) - .margin({bottom:10}) - .onClick(()=>{ - if(this.judgeConfigObj['342'] == 0){ + Column() { + if (this.examSubject == 3) { + Row() { + Row() { + } + .width(60) + .height(60) + .backgroundImage($rawfile('judge/manual_judge.png'), ImageRepeat.NoRepeat) + .backgroundImageSize({ width: '100%', height: '100%' }) + + Text('人工评判').fontColor('#FFF').fontSize(32).padding({ right: 12 }) + } + .width(334) + .height(110) + .justifyContent(FlexAlign.Center) + .alignItems(VerticalAlign.Center) + .backgroundImage($rawfile('judge/button_nor.png'), ImageRepeat.NoRepeat) + .backgroundImageSize({ width: '100%', height: '100%' }) + .margin({ bottom: 10 }) + .onClick(() => { + if (this.judgeConfigObj['342'] == 0) { this.isDeductedPopShow = true - }else{ - prompt.showToast({ + } else { + Prompt.showToast({ message: '平台配置不允许人工评判!', duration: 4000 }); @@ -640,31 +808,41 @@ struct Index { }) } + Row() { + Row() { + } + .width(60) + .height(60) + .backgroundImage($rawfile('judge/phone.png'), ImageRepeat.NoRepeat) + .backgroundImageSize({ width: '100%', height: '100%' }) - Row(){ - Row(){}.width(60).height(60).backgroundImage($rawfile('judge/phone.png'), ImageRepeat.NoRepeat).backgroundImageSize({ width: '100%', height: '100%' }) - Text('呼叫请求').fontColor('#FFF').fontSize(32).padding({right:12}) - }.width(334).height(110).justifyContent(FlexAlign.Center).alignItems(VerticalAlign.Center) + Text('呼叫请求').fontColor('#FFF').fontSize(32).padding({ right: 12 }) + } + .width(334) + .height(110) + .justifyContent(FlexAlign.Center) + .alignItems(VerticalAlign.Center) .backgroundImage($rawfile('judge/button_nor.png'), ImageRepeat.NoRepeat) .backgroundImageSize({ width: '100%', height: '100%' }) - .margin({bottom:10}) + .margin({ bottom: 10 }) - Row() {} + Row() { + } .width(334) .height(100) .backgroundImage($rawfile('judge/anniu_nor.png'), ImageRepeat.NoRepeat) .backgroundImageSize({ width: '100%', height: '100%' }) .onClick(() => { - if(this.judgeConfigObj['353'] == '0' ){ + if (this.judgeConfigObj['353'] == '0') { this.endPopupVisible = true - }else{ - prompt.showToast({ + } else { + Prompt.showToast({ message: '车上不允许手动结束考试!', duration: 4000 }); } }) - }.margin({bottom:30}) + }.margin({ bottom: 30 }) } .width('25%') @@ -710,7 +888,8 @@ struct Index { msgStr: this.judge.plcStr || '' }).margin({ top: 100 }) - Row() {} + Row() { + } .width(240) .height(240) .position({ x: '81%', y: 80 }) @@ -725,30 +904,32 @@ struct Index { //科目三人工扣分弹窗 if (this.isDeductedPopShow) { DeductedPopup({ - currentItems:Reflect.ownKeys(this.projectsObj).map(projectKey => { + currentItems: Reflect.ownKeys(this.projectsObj).map(projectKey => { const project = this.projectsObj[projectKey] - return project.type == '2'?project.projectCode:'' + return project.type == '2' ? project.projectCode : '' }).filter(project => project !== ''), - markRules:this.manualMarkRules, - closePopup:()=>{this.isDeductedPopShow = false}, - confirmMark:async (itemno,serial) => { + markRules: this.manualMarkRules, + closePopup: () => { + this.isDeductedPopShow = false + }, + confirmMark: async (itemno, serial) => { const judge = this.judge - await judge.setJudgeMark(itemno,serial); + await judge.setJudgeMark(itemno, serial); this.isDeductedPopShow = false } }) } //科目三人工项目确认框 - if(this.isAmplifyPopShow){ + if (this.isAmplifyPopShow) { AmplifyPopup({ - amplifyImgIndex:this.amplifiedImgIndex, - confirmAmplify:async (amplify)=>{ + amplifyImgIndex: this.amplifiedImgIndex, + confirmAmplify: async (amplify) => { const judge = this.judge await judge.setJudgeItem(amplify.projectCode); this.isAmplifyPopShow = false }, - closeAmplifyPop:()=>{ + closeAmplifyPop: () => { this.isAmplifyPopShow = false } }) @@ -778,108 +959,30 @@ struct Index { } // 获取是否能人工进项目 - getIsExitManualProject = (index:number)=>{ + getIsExitManualProject = (index: number) => { const {judgeConfigObj,artSubject3ProjectsCodesArr,projectsObj} = this; const unExitManualProjects = judgeConfigObj['332'].split(',') || []; const param348 = judgeConfigObj['348'] || '0'; const param387 = judgeConfigObj['387'] || '0'; - if(judgeConfigObj['342'] === '3' || judgeConfigObj['342'] === '2'){ + if (judgeConfigObj['342'] === '3' || judgeConfigObj['342'] === '2') { return false } - if(unExitManualProjects.includes(artSubject3ProjectsCodesArr[index])){ + if (unExitManualProjects.includes(artSubject3ProjectsCodesArr[index])) { return false } - if(param348 == '0' && projectsObj['9']?.type == 2){ + if (param348 == '0' && projectsObj['9']?.type == 2) { return index === 0 ? true : false } - if(param387 === '0' && index === 5){ + if (param387 === '0' && index === 5) { const {examMileage,jl} = this return jl >= Number(examMileage) } return true } - - //页面通用字体大小 - @State FONTSIZE: number = 28 - @State BIGFONTSIZE: number = 28 - //结束考试弹窗 - @State endPopupVisible: boolean = false - //等待弹窗(考试及格,考试不及格使用) - @State loadingPopupVisible: boolean = false - //实时轨迹弹窗 - @State signDisplayComVisible: boolean = false - @State isDdxk: boolean = false; - @State time: string = '' - //考试用时 - @State examTime: number = 0 - //开始时间 - @State startTime: string = '00:00:00' - @State startFullTime: string = '' - @State startHourTime: string = '' - //科目类型 - @State examSubject: 2 | 3 = 3; - @State ddxkTime: number = 0; - @State ddxkKsxmArr: string[] = [''] - @State ddxkKfArr: string[] = [''] - @State xmmcStr: string = '' - @State carztStr: string = '' - @State kfArr: { - xmmcStr?: string, - score: string, - desc: string - }[] = [] - - @State name: string = '' - @State idCard: string = '' - @State totalScore: number = 100 - //模拟考试项目 - @State projects: Project[] = [] - @State projectsObj: ProjectObj = {} - @State projectsCenterObj: ProjectObj = {} - @State markRuleListObj: MarkRule = {} - @State cdsbInfoObj: CDSBInfo = {} - @State timer: number = 0 - @State judgeConfig: {[k:string]:string}[] = [] - @State judgeConfigObj: {[k:string]:any} = defaultJudgeConfigObj - - //流水号 - @State lsh: string = '' - @State kszp: string = '' - @State ksdd: string = '' - @State kssycs: string = '' - @State kslx: string = '' - - //监管接口序列号 - @State serialNumber: number = 0 - @State carType: string = '' - @State carName: string = '' - @State isDeductedPopShow: boolean = false - @State isAmplifyPopShow: boolean = false - @State amplifiedImgIndex: number = 0 - @State judge:any = {} - - //行驶距离 - @State jl:number =0 - //应考里程 - @State examMileage:string = '0' - //已考的考试项目 - private wantInfos = [] - - @State artSubject3Projects: string[] = ['直线', '会车', '变道','超车', '掉头', '停车'] - @State artSubject3ProjectsCodesArr: string[] = ['3', '9', '4','10', '12', '11'] - - @State manualMarkRules:MarkRule[] = [] - - //科目三评判初始化数据 - @State systemparmArr:SYSTEMPARMARR[] = [] - @State mapPointItemArr:MAPITEMPOINTITEM[] = [] - @State carinfoArrr:CARINFO[] = [] - @State mapPointArr:MAPPOINT[] = [] - } diff --git a/entry/src/main/ets/pages/RealTime.ets b/entry/src/main/ets/pages/RealTime.ets deleted file mode 100644 index 907672df..00000000 --- a/entry/src/main/ets/pages/RealTime.ets +++ /dev/null @@ -1,145 +0,0 @@ -import hilog from '@ohos.hilog'; -import apiJudgeSdk from 'libJudgeSdk.so'; -import Judge from './judgeSDK/utils/judge-real'; -import { MarkRule, Project, ProjectObj } from './judgeSDK/api/judgeSDK.d'; -import AccountTable from '../common/database/tables/AccountTable'; -import MA_SYSSET from '../common//constants/MA_SYSSET'; -import common from '@ohos.app.ability.common'; -import { getSyncData } from '../common/service/initable'; - -@Entry -@Component -export default struct Index { - @State message: string = '开始绘制' - // 控制XComponent组件的创建和销毁 - @State draw: boolean = false - //监管接口序列号 - @State serialNumber: number = 0 - //模拟考试项目 - @State projects: Project[] = [] - @State projectsObj: ProjectObj = {} - @State markRuleListObj: MarkRule = {} - private context = getContext(this) as common.UIAbilityContext; - - // xcomponentController: XComponentController = new XComponentController() - - build() { - Row() { - Column() { - if (this.draw) { - XComponent({ - id: 'duolun_plugin_id_draw', //显示轨迹窗口id名称,注意这个ID要和C++侧一致,不能变 - type: 'surface', - libraryname: 'JudgeSdk' - }) - .width(640) - .height(480) - .onLoad(() => { - apiJudgeSdk.examJudgeMapSetDrawing(true); //停止绘制地图轨迹,false:表示结束绘制 - hilog.info(0x0000, 'sdk-tag-ets', 'onLoad'); - - }) - .onDestroy(() => { - hilog.info(0x0000, 'sdk-tag-ets', 'onDestroy'); - apiJudgeSdk.examJudgeMapSetDrawing(false); //停止绘制地图轨迹,false:表示结束绘制 - }) - } else { - Column() { - } - .width(640 / 2) - .height(480 / 2) - } - - Text(this.message) - .fontSize(50) - .fontWeight(FontWeight.Bold) - .fontColor('rgba(255,255,255,0)') - .onClick(() => { - hilog.info(0x0000, 'sdk-tag-ets', 'start render'); - // 控制XComponent组件的创建和销毁,创建XComponent组件时,会调用libentry.so中的模块注册函数(Init)。 - this.draw = !this.draw; - clearInterval(globalThis.realTimer) - }) - } - .width('100%') - .backgroundColor('#777777') - } - .height('100%') - } - - async aboutToAppear() { - - await this.initMarkRules(); - //初始化项目 - await this.initProjectInfo(); - //初始化sysset表 - await this.initSysset() - - const judge = new Judge(this) - - } - - //获取项目信息 - async initProjectInfo() { - const that = this; - const systemParamsArr = await getSyncData('MA_SYSTEMPARM') - const itemInfoArr = await getSyncData('MA_ITEMINFO') - //@ts-ignore - const filterProjectsArr = systemParamsArr.filter(item => item.no1 == 6) - - that.projects = filterProjectsArr.map(project => { - - //TODO 临时代码 - const testType = { - 0: 1, - 2: 4, - 3: 3, - 5: 5, - 6: 2 - } - const currentProject = { - name: decodeURI(project.txt1), - abbreviation: decodeURI(project.txt3), - projectCode: decodeURI(project.no2), - projectCodeCenter: decodeURI(project.txt2), - //@ts-ignore - type: testType[decodeURI(project.no2)*1] - // type:'0' + (project.type || '1') - } - that.projectsObj[project.no2] = currentProject - return currentProject - }); - } - - //获取扣分代码信息 - async initMarkRules() { - const that = this; - const markRuleParams = await getSyncData('MA_MARKRULE') - //@ts-ignore - markRuleParams.forEach(mark => { - that.markRuleListObj[`${mark.itemno}_${mark.markserial}`] = { - itemno: mark.itemno * 1, - markcatalog: mark.markcatalog, - markshow: decodeURI(mark.markshow), - markreal: mark.markreal * 1, - markserial: mark.markserial - }; - }) - } - - // 获取sysset表信息 - async initSysset() { - const that = this; - const db = new AccountTable(() => { - }, MA_SYSSET); - const syssetParams = await getSyncData('MA_SYSSET') - //@ts-ignore - const serialNumberArr = syssetParams.filter(sys => sys.v_no === '901'); - that.serialNumber = serialNumberArr || '1234567' - } - - aboutToDisappear() { - //apiJudgeSdk.stopRender(); - - } -} diff --git a/entry/src/main/ets/pages/SignDisplay.ets b/entry/src/main/ets/pages/SignDisplay.ets index 43d17934..86e8331b 100644 --- a/entry/src/main/ets/pages/SignDisplay.ets +++ b/entry/src/main/ets/pages/SignDisplay.ets @@ -1,75 +1,13 @@ +import { GPSData, SignalData } from '../mock'; +import { SignalDataType } from '../model'; import signDisplayCom from './compontents/signDisplayCom'; @Entry @Component export default struct Index { @State signArr: Array = [] - @State sjxhColum: Array = [ - { key: '左方向灯', value: '0' }, - { key: '右方向灯', value: '0' }, - { key: '喇叭', value: '0' }, - { key: '点火1', value: '0' }, - { key: '点火2', value: '0' }, - { key: '近光灯', value: '0' }, - { key: '远光灯', value: '0' }, - { key: '示廓灯', value: '0' }, - { key: '雾灯', value: '0' }, - { key: '雨刮器', value: '0' }, - { key: '脚刹', value: '0' }, - { key: '手刹', value: '0' }, - { key: '主驾驶门', value: '0' }, - { key: '离合', value: '0' }, - { key: '副刹车', value: '0' }, - { key: '安全带', value: '0' }, - { key: '双跳灯', value: '0' }, - { key: '车速', value: '0' }, - { key: '档位', value: '0' }, - { key: '超声波1', value: '0' }, - { key: '超声波2', value: '0' }, - { key: 'NC', value: '0' }, - { key: 'SA15', value: '0' }, - { key: '其他门', value: '0' }, - { key: '转速过高', value: '0' }, - { key: '累计脉冲', value: '0' }, - { key: '熄火次数', value: '0' }, - { key: '发动机转速', value: '0' }, - { key: '方向盘角度', value: '0' }, - { key: '超声波3', value: '0' }, - { key: '超声波4', value: '0' }, - { key: '触摸1', value: '0' }, - { key: '触摸2', value: '0' }, - { key: '触摸3', value: '0' }, - { key: 'SCIO', value: '0' }, - { key: 'SC1A_C', value: '0' }, - { key: 'SC1B_C', value: '0' }, - { key: 'SC2A_C', value: '0' }, - { key: 'SC2B_C', value: '0' }, - { key: 'SC3A_C', value: '0' }, - { key: 'SC3B_C', value: '0' }, - { key: 'SC4A_C', value: '0' }, - { key: 'SC4B_C', value: '0' }, - { key: 'SC5A_C', value: '0' }, - { key: 'SC5B_C', value: '0' }, - { key: 'SC6A_C', value: '0' }, - { key: 'SC6B_C', value: '0' } - ]; - @State GPSColum: Array = [ - { key: '状态', value: '0' }, - { key: '收星数', value: '0' }, - { key: '海拔高', value: '0' }, - { key: '高度差', value: '0' }, - { key: '龄期', value: '0' }, - { key: '维度因子', value: '0' }, - { key: '经度因子', value: '0' }, - { key: '航向角', value: '0' }, - { key: '俯仰角', value: '0' }, - { key: '航向角状态-收星数', value: '0' }, - { key: '年月日', value: '0' }, - { key: '时分秒', value: '0' }, - { key: '经度', value: '0' }, - { key: '纬度', value: '0' }, - { key: '速度', value: '0' }, - ] + @State sjxhColum: Array =SignalData; + @State GPSColum: Array = GPSData @State ratio: number = 850 / 960 @State gpsActive: number = 1 @State active: number = 0 diff --git a/entry/src/main/ets/pages/TerminalInfos.ets b/entry/src/main/ets/pages/TerminalInfos.ets index 2c27b2f3..43b553eb 100644 --- a/entry/src/main/ets/pages/TerminalInfos.ets +++ b/entry/src/main/ets/pages/TerminalInfos.ets @@ -88,6 +88,7 @@ struct Index { gateway: this.inputTextList1[5],//value.gateway网关 netMask: this.inputTextList1[4],//value.netMask网络掩码 dnsServers: this.inputTextList1[6], + // @ts-ignore domain: "" }, (error) => { if (error) { diff --git a/entry/src/main/ets/pages/UserInfo.ets b/entry/src/main/ets/pages/UserInfo.ets index 5720aa28..fe4bae67 100644 --- a/entry/src/main/ets/pages/UserInfo.ets +++ b/entry/src/main/ets/pages/UserInfo.ets @@ -1,22 +1,21 @@ -import { getExaminationItem, getExaminationStudentInfo, examinationStuAbsent, getPhotosForOther } from '../api/userInfo' -import router from '@ohos.router' -import TopLogo from './compontents/TopLogo' +import { examinationStuAbsent, getExaminationItem, getExaminationStudentInfo } from '../api/userInfo'; +import router from '@ohos.router'; +import TopLogo from './compontents/TopLogo'; import Md5 from '../common/utils/md5'; import AccountTable from '../common/database/tables/AccountTable'; import USER from '../common/constants/USER'; -import { dateFormat, getCurrentTime } from '../common/utils/tools'; +import { dateFormat, getCurrentTime, string2Bytes } from '../common/utils/tools'; import MA_SYSSET from '../common//constants/MA_SYSSET'; -import FaceCompare from './compontents/FaceCompare' +import FaceCompare from './compontents/FaceCompare'; // import { initJudgeUdp } from '../common/utils/UdpJudge' -import { writeObjectOut } from '../api/judge' -import testNapi from "@ohos.idcard"; +import { writeObjectOut } from '../api/judge'; +import testNapi from '@ohos.idcard'; import common from '@ohos.app.ability.common'; -import { User } from './interfaces' -import WebRTCVoice from './webRTC/' -import promptAction from '@ohos.promptAction' -import { CandidateData, EmptyCandidateObject } from "../mock/CandidateData" -import {string2Bytes} from '../common/utils/tools' -import { getSyncData } from '../common/service/initable' +import { User } from './interfaces'; +import WebRTCVoice from './webRTC/'; +import promptAction from '@ohos.promptAction'; +import { CandidateData, EmptyCandidateObject } from '../mock/CandidateData'; + @Entry @Component struct UserInfo { @@ -38,9 +37,6 @@ struct UserInfo { @State currentUser: User = EmptyCandidateObject @State dataList: Array = [] @State list: Array = [] - private AccountTable = new AccountTable(() => { - }, USER); - private context = getContext(this) as common.UIAbilityContext; @State name: string = 'initName'; @State sex: string = ''; @State callBackFlag: boolean = false; @@ -57,9 +53,20 @@ struct UserInfo { @State signNum: number = 0; @State isCanClick: boolean = true; @State faceFlag: string = '0'; - @State FaceOpenStatue: string = '0';//是否开启人脸识别 + @State FaceOpenStatue: string = '0'; //是否开启人脸识别 subscriber; @State faceCatchImg: string = '' + private AccountTable = new AccountTable(() => { + }, USER); + private context = getContext(this) as common.UIAbilityContext; + private labelBlocks = [ + { label: '考生姓名', key: 'xm' }, + { label: '身份证号', key: 'sfzmhm' }, + { label: ' 流 水 号 ', key: 'lsh' }, + { label: '考试路线', key: 'kslx' }, + { label: '待考次数', key: 'kssycs' }, + { label: '考官姓名', key: 'ksy1' }, + ] async onPageShow() { //语音功能 @@ -75,8 +82,9 @@ struct UserInfo { this.heartMsg() } + //身份证读卡器初始化 - openDeviceByIDCard(){ + openDeviceByIDCard() { globalThis.indexComponent = this; // 应用启动时打开读卡设备 let ret = testNapi.OpenDevice(); @@ -86,11 +94,13 @@ struct UserInfo { console.error("zzctest Failed to Open Device"); } } - stopDeviceById(){ - if(this.faceFlag=='1'){ - testNapi&&testNapi.StopReadCard() + + stopDeviceById() { + if (this.faceFlag == '1') { + testNapi && testNapi.StopReadCard() } } + // 通过身份证获取当前学员 getCurrentStudent(id) { let flag = false @@ -126,6 +136,7 @@ struct UserInfo { }); } } + onReadCard(ret) { console.info(`zzctest xx Read Card ret =${ret.status}`) let thisVar = globalThis.indexComponent; @@ -182,7 +193,8 @@ struct UserInfo { changeQkfn() { this.qkFn() } - initData(){ + + initData() { this.stepFlag = false this.faceCompareSucess = 0 this.showFaceCompare = false @@ -207,21 +219,22 @@ struct UserInfo { } async heartMsg() { - globalThis.udpClient2&globalThis.udpClient2.setMsgCallBack((val)=>{ - if(val.id=='32'){ - globalThis.signNum=val.body[1] - if(val.body[0]=='7'){ + globalThis.udpClient2 & globalThis.udpClient2.setMsgCallBack((val) => { + if (val.id == '32') { + globalThis.signNum = val.body[1] + if (val.body[0] == '7') { //缺考处理 this.getqkFn() - this.signNum=val.body[1] + this.signNum = val.body[1] } - }else if(val.id=='42'){ + } else if (val.id == '42') { //收到中心缺考确认消息 - console.log('qkfnqkfn',val.body[0]) + console.log('qkfnqkfn', val.body[0]) this.qkFn() } }) } + //考点端查询缺考指令内容消息请求 getqkFn() { let tmpList = []; @@ -236,8 +249,6 @@ struct UserInfo { globalThis.udpClient2.sendMsg(param, this.context) } - - async initSysset() { const that = this; const db = new AccountTable(() => { @@ -251,15 +262,15 @@ struct UserInfo { const studentRefreshParam = syssetParams.filter(sys => sys.v_no === '452') that.studentRefreshStatue = studentRefreshParam?.[0]?.v_value || '0' const faceParam = syssetParams.filter(sys => sys.v_no === '2313') - that.FaceOpenStatue =faceParam?.[0]?.v_value=='3'? '1':'0' + that.FaceOpenStatue = faceParam?.[0]?.v_value == '3' ? '1' : '0' that.FaceOpenStatue = '0' + console.log('that.FaceOpenStatue', that.FaceOpenStatue) // faceParam?.[0]?.v_value || // 1身份证读卡器 2指纹 3人脸 - this.faceFlag=faceParam?.[0]?.v_value ||'0' - if(faceParam?.[0]?.v_value=='1'){ + this.faceFlag = faceParam?.[0]?.v_value || '0' + if (faceParam?.[0]?.v_value == '1') { that.openDeviceByIDCard() } - console.log('studentRefreshStatue',this.studentRefreshStatue) //0不自动更新 1自动更新(不限次数) 2没有考生更新2次 if (that.studentRefreshStatue == '2') { clearInterval(that.interval) @@ -276,18 +287,19 @@ struct UserInfo { that.getExaminationStudentInfoFn() } }, 5000) - }else{ + } else { this.getExaminationItemFn() } }) }) } -//人脸比对窗口关闭 + + //人脸比对窗口关闭 changeFaceCompareSuccess() { console.log('this.faceCompareSuces', this.faceCompareSucess, JSON.stringify(this.currentUser)) if (this.faceCompareSucess > 0) { - //人脸比对通过 + //人脸比对通过 this.sfbdinterfaceFn() } } @@ -307,7 +319,8 @@ struct UserInfo { this.pageIndex--; this.dataList = this.list.slice(this.pageIndex * 4, this.pageIndex * 4 + 4) } -//获取下载考生 + + //获取下载考生 getExaminationStudentInfoFn() { if (globalThis.singlePlay) { return @@ -360,6 +373,7 @@ struct UserInfo { console.log('error12error' + error) }) } + qkFn() { this.faceCompareSucess = 0 if (globalThis.singlePlay) { @@ -396,9 +410,10 @@ struct UserInfo { }) } - async getExaminationItemFn(){ + + async getExaminationItemFn() { console.info('surenjun', this.currentUser.lsh) - if(!this.currentUser.lsh||globalThis.singlePlay){ + if (!this.currentUser.lsh || globalThis.singlePlay) { return } const carInfo = globalThis.carInfo; @@ -409,14 +424,15 @@ struct UserInfo { lsh: this.currentUser.lsh || '', examinationRoomId }); - if(examItems?.getExaminationItemRsp?.body?.kssycs!=0){ + if (examItems?.getExaminationItemRsp?.body?.kssycs != 0) { this.getExaminationStudentInfoFn() - }else{ - this.dataList=[] + } else { + this.dataList = [] this.currentUser = EmptyCandidateObject } } + //身份比对 async sfbdinterfaceFn() { this.stepFlag = true @@ -441,7 +457,7 @@ struct UserInfo { ksxtbh: this.ksxtbh || '222', sfzmhm: this.currentUser.sfzmhm || '', ksysfzmhm: this.currentUser.ksy1sfzmhm || '', - zp: encodeURIComponent((this.faceCatchImg||this.currentUser.kszp.substr(22)) || ''), + zp: encodeURIComponent((this.faceCatchImg || this.currentUser.kszp.substr(22)) || ''), kssj: dateFormat(date) || '', kchp: decodeURI(plateNo), Ksy2sfzmhm: this.currentUser.ksy2sfzmhm || '' @@ -491,14 +507,18 @@ struct UserInfo { this.stepFlag = false } } + aboutToDisappear() { this.outClick() } + outClick() { clearInterval(this.interval) this.stopDeviceById() - globalThis.udpClient2&&globalThis.udpClient2?.setMsgCallBack(()=>{}) + globalThis.udpClient2 && globalThis.udpClient2?.setMsgCallBack(() => { + }) } + // 几个按钮公共样式 @Styles commStyle(){ @@ -509,15 +529,6 @@ struct UserInfo { .margin({ bottom: 12 * this.ratio }) } - private labelBlocks = [ - { label: '考生姓名', key: 'xm' }, - { label: '身份证号', key: 'sfzmhm' }, - { label: ' 流 水 号 ', key: 'lsh' }, - { label: '考试路线', key: 'kslx' }, - { label: '待考次数', key: 'kssycs' }, - { label: '考官姓名', key: 'ksy1' }, - ] - build() { Column() { TopLogo({ outFlag: $outFlag }).margin({ bottom: 10 }) @@ -656,9 +667,9 @@ struct UserInfo { }) return } - if(this.FaceOpenStatue!='0'){ + if (this.FaceOpenStatue != '0') { this.showFaceCompare = true - }else{ + } else { this.sfbdinterfaceFn() } }) diff --git a/entry/src/main/ets/pages/compontents/FaceCompare.ets b/entry/src/main/ets/pages/compontents/FaceCompare.ets index 650bb765..01d5796c 100644 --- a/entry/src/main/ets/pages/compontents/FaceCompare.ets +++ b/entry/src/main/ets/pages/compontents/FaceCompare.ets @@ -1,23 +1,16 @@ -//@ts-ignore - -import util from '@ohos.util'; - -import { voiceService } from '../../common/service/voiceService' -import { faceCompare } from '../../api/userInfo' -import FileUtil from '../../common/utils/File' -import { VideoConfig } from '../interfaces' +import { voiceService } from '../../common/service/voiceService'; +import { faceCompare } from '../../api/userInfo'; +import FileUtil from '../../common/utils/File'; +import { VideoConfig } from '../interfaces'; import common from '@ohos.app.ability.common'; -import { string2Bytes } from '../../common/utils/tools' -import { takePhoto } from '../../common/service/videoService' -import { GlobalConfig } from '../../config/index' +import { string2Bytes } from '../../common/utils/tools'; +import { takePhoto } from '../../common/service/videoService'; +import { GlobalConfig } from '../../config/index'; +import { VideoConfigData } from '../../mock'; @Component export default struct FaceCompare { - constructor() { - super() - } - @State imageBase64: string = 'data:image/jpeg;base64,' @Prop sfzh: string; @Prop lsh: string; @@ -27,46 +20,26 @@ export default struct FaceCompare { @Link getqkFlag: boolean; @Link faceCatchImg: string; @State imageThumbnail: string = ''; - private times = 1; //人脸比对失败次数, 超过3次将不会自动比对,需要点击重新打开重新触发 - private vocObj = null; @State callBackFlag: boolean = false; @State @Watch('clearIntervalFn') showFaceCompareFlag: Boolean = false; @State video_url: string = 'rtsp://admin:12345qwe@192.168.5.41:8000/h264/ch2/main/av_stream' @State previewUri: Resource = $r('app.media.2_nor') @State curRate: PlaybackSpeed = PlaybackSpeed.Speed_Forward_1_00_X @State showControls: boolean = false - private controller: VideoController = new VideoController() @State isAutoPlay: boolean = true @State signNum: number = 0; + @State param: VideoConfig = VideoConfigData + private times = 1; //人脸比对失败次数, 超过3次将不会自动比对,需要点击重新打开重新触发 + private vocObj = null; + private controller: VideoController = new VideoController() private fileUtil: FileUtil private interval: any - @State param: VideoConfig = { - spls: '', - videoNum: '1', - faceFlag: false, - pztd: '1', - ljlx: '', - ip: '192.168.7.112', - port: '554', - userName: 'admin', - pwd: '12345qwe', - td1: '1', - td2: '2', - td3: '3', - td4: '4', - videoRecord1: false, - videoRecord2: false, - videoRecord3: false, - videoRecord4: false, - rlls: '1', - spzd4:false, - spzd3:false, - spzd2:false, - spzd1:false, - zdyz:'500', - } private context = getContext(this) as common.UIAbilityContext; + constructor() { + super() + } + build() { Column() { Column() { @@ -162,7 +135,7 @@ export default struct FaceCompare { this.controller.stop() this.vocObj && this.vocObj.releasePlayer() this.showFaceCompare = !this.showFaceCompare - this.showFaceCompareFlag=!this.showFaceCompareFlag + this.showFaceCompareFlag = !this.showFaceCompareFlag this.faceCompareSucess = -1 globalThis.statue = 2 @@ -203,9 +176,9 @@ export default struct FaceCompare { } async faceComparFn() { - console.log('mmmmm0',1) + console.log('mmmmm0', 1) - takePhoto(this.param, this.context, 'jt/',0,({base64})=>{ + takePhoto(this.param, this.context, 'jt/', 0, ({base64}) => { faceCompare({ sfzh: this.sfzh, firstImage: this.firstImage.substr(22), @@ -213,12 +186,12 @@ export default struct FaceCompare { type: 2, verifyType: 1 }).then(res => { - console.log('mmmmm8',res) + console.log('mmmmm8', res) if (res) { this.controller.stop() this.showFaceCompare = !this.showFaceCompare - this.showFaceCompareFlag=!this.showFaceCompareFlag + this.showFaceCompareFlag = !this.showFaceCompareFlag this.faceCompareSucess = 1; // this.faceCatchImg = result this.vocObj.playAudio({ @@ -236,9 +209,7 @@ export default struct FaceCompare { } }) }) - console.log('mmmmm8',9) - - + console.log('mmmmm8', 9) } @@ -246,7 +217,7 @@ export default struct FaceCompare { async heartMsg(context) { let tmpList = [] const str = this.lsh - for (let i = 0;i < str.length; i++) { + for (let i = 0; i < str.length; i++) { tmpList.push(string2Bytes(str.charCodeAt(i), 1 * 8)[0]) } const param = { @@ -274,7 +245,7 @@ export default struct FaceCompare { globalThis.udpClient2.setMsgCallBack((val) => { if (val.id == '48') { if (val.body[13] == '1') { - this.showFaceCompareFlag=!this.showFaceCompareFlag + this.showFaceCompareFlag = !this.showFaceCompareFlag this.showFaceCompare = !this.showFaceCompare this.vocObj && this.vocObj.releasePlayer() this.faceCompareSucess = 1 @@ -311,7 +282,7 @@ export default struct FaceCompare { } } else if (val == 'yzcg.wav') { this.showFaceCompare = !this.showFaceCompare - this.showFaceCompareFlag=!this.showFaceCompareFlag + this.showFaceCompareFlag = !this.showFaceCompareFlag globalThis.statue = 4 this.faceCompareSucess = 1; this.vocObj && this.vocObj.releasePlayer() @@ -320,13 +291,13 @@ export default struct FaceCompare { this.vocObj && this.vocObj.releasePlayer() this.faceCompareSucess = -1 this.showFaceCompare = !this.showFaceCompare - this.showFaceCompareFlag=!this.showFaceCompareFlag + this.showFaceCompareFlag = !this.showFaceCompareFlag } } }); const data = await this.fileUtil.readFile(GlobalConfig.comoonfileWriteAddress + '/config/config3.txt'); - console.log('faceEnterIn,data',data) + console.log('faceEnterIn,data', data) setTimeout(() => { this.vocObj && this.vocObj.playAudio({ @@ -343,8 +314,6 @@ export default struct FaceCompare { this.controller.start() } - - async aboutToDisappear() { } diff --git a/entry/src/main/ets/pages/compontents/SignDisplayCom.ets b/entry/src/main/ets/pages/compontents/SignDisplayCom.ets index 4fe9d258..cb308267 100644 --- a/entry/src/main/ets/pages/compontents/SignDisplayCom.ets +++ b/entry/src/main/ets/pages/compontents/SignDisplayCom.ets @@ -1,95 +1,36 @@ -import router from '@ohos.router' +import router from '@ohos.router'; import UdpClient from '../../common/utils/UdpClient'; -import FileLog from '../judgeSDK/utils/file-log' -import { voiceService } from '../../common/service/voiceService' -import prompt from '@ohos.prompt' -import RealTime from '../compontents/judge/real-time' +import FileLog from '../judgeSDK/utils/file-log'; +import RealTime from '../compontents/judge/RealTime'; +import { GPSData, SignalData } from '../../mock'; +import { SignalDataType } from '../../model'; + @Component export default struct SignDisplayCom { - constructor() { - super() - } - @State showBack: boolean = false @State scaleNum: number = 1 @State msg: string = '' @State signArr: Array = [] - @State sjxhColum: Array = [ - { key: '左方向灯', value: '0' }, { key: '右方向灯', value: '0' }, { - key: '喇叭', - value: '0' - }, { key: '点火1', value: '0' }, { key: '点火2', value: '0' }, { key: '近光灯', value: '0' }, { - key: '远光灯', - value: '0' - }, { key: '示廓灯', value: '0' }, { key: '雾灯', value: '0' }, { key: '雨刮器', value: '0' }, { - key: '脚刹', - value: '0' - }, { key: '手刹', value: '0' }, { key: '主驾驶门', value: '0' }, { key: '离合', value: '0' }, { - key: '副刹车', - value: '0' - }, { - key: '安全带', - value: '0' - }, { key: '双跳灯', value: '0' }, { key: '车速', value: '0' }, { key: '档位', value: '0' }, { - key: '超声波1', - value: '0' - }, { - key: '超声波2', - value: '0' - }, { - key: 'NC', - value: '0' - }, { key: 'SA15', value: '0' }, { key: '其他门', value: '0' }, { key: '转速过高', value: '0' }, { - key: '累计脉冲', - value: '0' - }, { key: '熄火次数', value: '0' }, { key: '发动机转速', value: '0' }, { key: '方向盘角度', value: '0' }, { - key: '超声波3', - value: '0' - }, { key: '超声波4', value: '0' }, { key: '触摸1', value: '0' }, { key: '触摸2', value: '0' }, { - key: '触摸3', - value: '0' - }, { key: 'SCIO', value: '0' } - , { key: 'SC1A_C', value: '0' }, { key: 'SC1B_C', value: '0' }, { key: 'SC2A_C', value: '0' }, { - key: 'SC2B_C', - value: '0' - }, { key: 'SC3A_C', value: '0' }, { key: 'SC3B_C', value: '0' }, { key: 'SC4A_C', value: '0' }, { - key: 'SC4B_C', - value: '0' - }, { key: 'SC5A_C', value: '0' }, { key: 'SC5B_C', value: '0' }, { key: 'SC6A_C', value: '0' }, { - key: 'SC6B_C', - value: '0' - }] - @State GPSColum:Array=[ - { key: '状态', value: '0' }, - { key: '收星数', value: '0' }, - { key: '海拔高', value: '0' }, - { key: '高度差', value: '0' }, - { key: '龄期', value: '0' }, - { key: '维度因子', value: '0' }, - { key: '经度因子', value: '0' }, - { key: '航向角', value: '0' }, - { key: '俯仰角', value: '0' }, - { key: '航向角状态-收星数', value: '0' }, - { key: '年月日', value: '0' }, - { key: '时分秒', value: '0' }, - { key: '经度', value: '0' }, - { key: '纬度', value: '0' }, - { key: '速度', value: '0' }, - ] + @State sjxhColum: Array = SignalData + @State GPSColum: Array = GPSData @State ratio: number = 850 / 960 @State gpsActive: number = 1 @Prop active: number = 0 @State msgStr: string = '' - @State interval: any='' - + @State interval: number = 0 @State @Watch('outClick') outFlag: boolean = false; + @State url: string = '' private timer = null private udpClient: UdpClient = null private FileLog: FileLog private vocObj = null; - @State url: string = '' + + constructor() { + super() + } + build() { - Column(){ + Column() { Column() { Flex({ justifyContent: FlexAlign.SpaceBetween }) { Row() { @@ -137,7 +78,7 @@ export default struct SignDisplayCom { } Row() { - if(this.showBack){ + if (this.showBack) { Image($r('app.media.topB_back')).height('12.2%') .onClick(() => { router.back() @@ -259,8 +200,14 @@ export default struct SignDisplayCom { Text('海拔高:' + this.signArr[85]).fontColor('#FFB433').fontSize(14 * this.ratio).height(18 * this.ratio) Text('高度差:' + this.signArr[86]).fontColor('#FFB433').fontSize(14 * this.ratio).height(18 * this.ratio) Text('龄期:' + this.signArr[87]).fontColor('#FFB433').fontSize(14 * this.ratio).height(18 * this.ratio) - Text('维度因子:' + this.signArr[88]).fontColor('#FFB433').fontSize(14 * this.ratio).height(18 * this.ratio) - Text('经度因子:' + this.signArr[89]).fontColor('#FFB433').fontSize(14 * this.ratio).height(18 * this.ratio) + Text('维度因子:' + this.signArr[88]) + .fontColor('#FFB433') + .fontSize(14 * this.ratio) + .height(18 * this.ratio) + Text('经度因子:' + this.signArr[89]) + .fontColor('#FFB433') + .fontSize(14 * this.ratio) + .height(18 * this.ratio) Text('航向角:' + this.signArr[90]).fontColor('#FFB433').fontSize(14 * this.ratio).height(18 * this.ratio) Text('俯仰角:' + this.signArr[91]).fontColor('#FFB433').fontSize(14 * this.ratio).height(18 * this.ratio) Text('航向角状态-收星数:' + this.signArr[92]) @@ -293,16 +240,17 @@ export default struct SignDisplayCom { Row() { Text('GPS').fontColor(this.gpsActive == 0 ? '#2D3C5A' : '#fff') } - .width(316*this.ratio) - .height(24*this.ratio) + .width(316 * this.ratio) + .height(24 * this.ratio) .backgroundColor(this.gpsActive == 0 ? '#fff' : '#1A1A1A') - .margin({ left: 10*this.ratio, right: 10*this.ratio }) + .margin({ left: 10 * this.ratio, right: 10 * this.ratio }) .justifyContent(FlexAlign.Center) .onClick(() => { this.gpsActive = 0 }) - }.margin({ top: 10*this.ratio }) + }.margin({ top: 10 * this.ratio }) + Flex({ direction: FlexDirection.Column }) { ForEach(this.GPSColum, (item) => { Column() { @@ -314,7 +262,7 @@ export default struct SignDisplayCom { }) } } - .width(168 *2* this.ratio) + .width(168 * 2 * this.ratio) .height(380 * this.ratio) .backgroundColor('#282828') .margin({ top: 6 * this.ratio, left: 10 * this.ratio }) @@ -325,8 +273,8 @@ export default struct SignDisplayCom { Row() { RealTime({ - width:Math.floor(550 * this.ratio), - height:Math.floor(380 * this.ratio), + widthNumber: Math.floor(550 * this.ratio), + heightNumber: Math.floor(380 * this.ratio), }) } .width(550 * this.ratio) @@ -352,63 +300,64 @@ export default struct SignDisplayCom { aboutToDisappear() { clearInterval(this.interval) } - aboutToAppear(){ + + aboutToAppear() { this.ratio = this.ratio * (this.scaleNum || 1); const that = this const {showBack,getSignal} = this - if(showBack){ + if (showBack) { globalThis.udpClient.onMessage((msg) => { - console.log('msgmsg',msg) - if(msg){ + console.log('msgmsg', msg) + if (msg) { getSignal(msg) } }) - }else{ + } else { clearInterval(globalThis.signalTimer) - globalThis.signalTimer = setInterval(()=>{ + globalThis.signalTimer = setInterval(() => { const msgStr = globalThis.msgStr - if(msgStr){ + if (msgStr) { getSignal(msgStr) } - },200) + }, 200) } } onPageShow() { - console.info('SURENJUN',123) + console.info('SURENJUN', 123) const getSignal = this.getSignal; const that = this const showBack = this.showBack; - if(showBack){ + if (showBack) { globalThis.udpClient.onMessage((msg) => { getSignal(msg) }) - }else{ + } else { clearInterval(globalThis.signalTimer) - globalThis.signalTimer = setInterval(()=>{ + globalThis.signalTimer = setInterval(() => { //TODO 临时方案 const msgStr = globalThis.msgStr getSignal(msgStr) - },200) + }, 200) } } - getSignal= (msg)=> { - console.log('msgmsgmsg',msg) + getSignal = (msg) => { + console.log('msgmsgmsg', msg) const that = this; that.msg = msg - const strachArr=msg.split(',') + const strachArr = msg.split(',') if (strachArr[0] != '#DN_GD') { return } this.signArr = strachArr - for (let i = 0;i <= 12; i++) { + for (let i = 0; i <= 12; i++) { this.sjxhColum[i].value = this.signArr[i+2] } @@ -417,7 +366,7 @@ export default struct SignDisplayCom { this.sjxhColum[15].value = this.signArr[19] this.sjxhColum[16].value = this.signArr[20] this.sjxhColum[17].value = this.signArr[23] //车速 - this.sjxhColum[18].value=this.signArr[28] + this.sjxhColum[18].value = this.signArr[28] this.sjxhColum[19].value = this.signArr[29] this.sjxhColum[20].value = this.signArr[30] this.sjxhColum[21].value = this.signArr[15] //NC @@ -433,11 +382,11 @@ export default struct SignDisplayCom { this.sjxhColum[31].value = this.signArr[33] this.sjxhColum[32].value = this.signArr[34] this.sjxhColum[33].value = this.signArr[35] - for (let i = 34;i <= 46; i++) { + for (let i = 34; i <= 46; i++) { this.sjxhColum[i].value = this.signArr[i+2] } - let t=0 - for (let i = 83;i <= 97; i++) { + let t = 0 + for (let i = 83; i <= 97; i++) { this.GPSColum[t].value = this.signArr[i] t++ } @@ -445,11 +394,11 @@ export default struct SignDisplayCom { that.signArr = JSON.parse(JSON.stringify((this.signArr))) that.GPSColum = JSON.parse(JSON.stringify((this.GPSColum))) } + outClick() { } saveLog() { } - } diff --git a/entry/src/main/ets/pages/compontents/judge/AmplifyPopup.ets b/entry/src/main/ets/pages/compontents/judge/AmplifyPopup.ets new file mode 100644 index 00000000..c22fe3aa --- /dev/null +++ b/entry/src/main/ets/pages/compontents/judge/AmplifyPopup.ets @@ -0,0 +1,43 @@ +import { AmplifyArr, AmplifyImages } from '../../../mock' + +const folder = 'judge/km3/amplify/' + + +@Component +export default struct EndPopup { + private amplifyImgIndex: number = 0 + + constructor() { + super() + } + + build() { + Column() { + Column() { + + } + .width(530) + .height(386) + .backgroundImage($rawfile(`${folder}${AmplifyImages[this.amplifyImgIndex]}`)) + .backgroundImageSize({ width: '100%', height: '100%' }) + .position({ y: '25%', x: '37%' }) + .justifyContent(FlexAlign.Center) + .onClick((e: ClickEvent) => { + this.confirmAmplify(AmplifyArr[this.amplifyImgIndex]) + }) + + } + .width('100%') + .height('100%') + .position({ y: 0 }) + .backgroundColor('rgba(0,0,0,0.9)') + .onClick(() => { + this.closeAmplifyPop() + }) + } + + private closeAmplifyPop: Function = () => { + } + private confirmAmplify: Function = () => { + } +} diff --git a/entry/src/main/ets/pages/compontents/judge/deduction-popup.ets b/entry/src/main/ets/pages/compontents/judge/DeductionPopup.ets similarity index 99% rename from entry/src/main/ets/pages/compontents/judge/deduction-popup.ets rename to entry/src/main/ets/pages/compontents/judge/DeductionPopup.ets index 8e5ca4b9..fd9e9ecd 100644 --- a/entry/src/main/ets/pages/compontents/judge/deduction-popup.ets +++ b/entry/src/main/ets/pages/compontents/judge/DeductionPopup.ets @@ -5,7 +5,7 @@ interface SEL{ } @Component -struct DeductedPopup { +export default struct DeductedPopup { constructor() { super() } @@ -149,6 +149,4 @@ struct DeductedPopup { .onClick(()=>{this.closePopup()}) }.width('100%').height('100%').position({y:0}).backgroundColor('rgba(0,0,0,0.7)') } -} - -export default DeductedPopup \ No newline at end of file +} \ No newline at end of file diff --git a/entry/src/main/ets/pages/compontents/judge/end-popup.ets b/entry/src/main/ets/pages/compontents/judge/EndPopup.ets similarity index 96% rename from entry/src/main/ets/pages/compontents/judge/end-popup.ets rename to entry/src/main/ets/pages/compontents/judge/EndPopup.ets index 431a38be..9b24b1a8 100644 --- a/entry/src/main/ets/pages/compontents/judge/end-popup.ets +++ b/entry/src/main/ets/pages/compontents/judge/EndPopup.ets @@ -1,6 +1,6 @@ @Component -struct EndPopup { +export default struct EndPopup { constructor() { super() } @@ -22,6 +22,4 @@ struct EndPopup { }.width('100%').height('100%').position({y:0}).backgroundColor('rgba(0,0,0,0.7)') } -} - -export default EndPopup \ No newline at end of file +} \ No newline at end of file diff --git a/entry/src/main/ets/pages/compontents/judge/loading-popup.ets b/entry/src/main/ets/pages/compontents/judge/LoadingPopup.ets similarity index 90% rename from entry/src/main/ets/pages/compontents/judge/loading-popup.ets rename to entry/src/main/ets/pages/compontents/judge/LoadingPopup.ets index de821513..c80fd6ac 100644 --- a/entry/src/main/ets/pages/compontents/judge/loading-popup.ets +++ b/entry/src/main/ets/pages/compontents/judge/LoadingPopup.ets @@ -1,6 +1,5 @@ - @Component -struct LoadingPopup { +export default struct LoadingPopup { constructor() { super() } @@ -17,5 +16,3 @@ struct LoadingPopup { }.width('100%').height('100%').position({y:0}).backgroundColor('rgba(0,0,0,0.7)') } } - -export default LoadingPopup diff --git a/entry/src/main/ets/pages/compontents/judge/real-time.ets b/entry/src/main/ets/pages/compontents/judge/RealTime.ets similarity index 59% rename from entry/src/main/ets/pages/compontents/judge/real-time.ets rename to entry/src/main/ets/pages/compontents/judge/RealTime.ets index 4b033deb..9a69e4b2 100644 --- a/entry/src/main/ets/pages/compontents/judge/real-time.ets +++ b/entry/src/main/ets/pages/compontents/judge/RealTime.ets @@ -1,39 +1,27 @@ -// @ts-nocheck -import hilog from '@ohos.hilog'; import apiJudgeSdk from 'libJudgeSdk.so'; -// import apiJudgeSdk from '@ohos.judgesdk'; - -import Judge from '../../judgeSDK/utils/judge-real' -// import Judge from '../../judgeSDK/judge-track-playback' -import {Project,ProjectObj,MarkRule} from '../../judgeSDK/api/judgeSDK.d' -import AccountTable from '../../../common/database/tables/AccountTable'; -import MA_SYSSET from '../../../common//constants/MA_SYSSET'; +import Judge from '../../judgeSDK/utils/judge-real'; +import { MarkRule, Project, ProjectObj } from '../../judgeSDK/api/judgeSDK.d'; import common from '@ohos.app.ability.common'; -import { getSyncData } from '../../../common/service/initable' -import {testAllitems,testUIAllitems,testMarkRules} from '../../judgeSDK/dataTest/index' @Component -struct RealTime { - constructor() { - super() - } - - private height:number = 0 - private width:number = 0 - +export default struct RealTime { @State message: string = '开始绘制' - // 控制XComponent组件的创建和销毁 @State draw: boolean = false //监管接口序列号 - @State serialNumber:number = 0 - + @State serialNumber: number = 0 //模拟考试项目 - @State projects:Project[] = [] - @State projectsObj:ProjectObj = {} - @State markRuleListObj:MarkRule ={} + @State projects: Project[] = [] + @State projectsObj: ProjectObj = {} + @State markRuleListObj: MarkRule = {} + private widthNumber: string | number | Resource = 0 + private heightNumber: string | number | Resource = 0 private context = getContext(this) as common.UIAbilityContext; + constructor() { + super() + } + // xcomponentController: XComponentController = new XComponentController() build() { @@ -46,8 +34,8 @@ struct RealTime { libraryname: 'JudgeSdk' // libraryname: 'judgesdk' }) - .width(this.width) - .height(this.height) + .width(this.widthNumber) + .height(this.heightNumber) .onLoad(() => { apiJudgeSdk.examJudgeMapSetDrawing(true); //停止绘制地图轨迹,false:表示结束绘制 }) @@ -57,9 +45,10 @@ struct RealTime { clearInterval(globalThis.realTimer) }) } else { - Column() {} - .width(this.width) - .height(this.height) + Column() { + } + .width(this.widthNumber) + .height(this.heightNumber) } } .width('100%') @@ -77,7 +66,5 @@ struct RealTime { //apiJudgeSdk.stopRender(); } - } -export default RealTime diff --git a/entry/src/main/ets/pages/compontents/judge/amplify-popup.ets b/entry/src/main/ets/pages/compontents/judge/amplify-popup.ets deleted file mode 100644 index 62fb41e5..00000000 --- a/entry/src/main/ets/pages/compontents/judge/amplify-popup.ets +++ /dev/null @@ -1,39 +0,0 @@ -const folder = 'judge/km3/amplify/' -const amplifyImgs = [ - 'km_zxB.png','km_hcB.png', - 'km_bdB.png', - 'km_ccB.png','km_dtB.png','km_tcB.png', -] -const amplifyArrs = [ - {name:'直线',projectCode:'3',projectCodeCenter:'40300'}, - {name:'会车',projectCode:'9',projectCodeCenter:'41300'}, - {name:'变道',projectCode:'4',projectCodeCenter:'40500'}, - {name:'超车',projectCode:'10',projectCodeCenter:'41400'}, - {name:'掉头',projectCode:'12',projectCodeCenter:'41500'}, - {name:'停车',projectCode:'11',projectCodeCenter:'40600'}, -] - -@Component -struct EndPopup { - constructor() { - super() - } - private amplifyImgIndex:number = 0 - private closeAmplifyPop:Function = ()=>{} - private confirmAmplify:Function = ()=>{} - - build(){ - Column(){ - Column(){ - - }.width(530).height(386).backgroundImage($rawfile(`${folder}${amplifyImgs[this.amplifyImgIndex]}`)).backgroundImageSize({width:'100%',height:'100%'}).position({y:'25%',x:'37%'}).justifyContent(FlexAlign.Center) - .onClick((e:ClickEvent)=>{ - this.confirmAmplify(amplifyArrs[this.amplifyImgIndex]) - }) - - }.width('100%').height('100%').position({y:0}).backgroundColor('rgba(0,0,0,0.9)') - .onClick(()=>{this.closeAmplifyPop()}) - } -} - -export default EndPopup \ No newline at end of file diff --git a/entry/src/main/ets/pages/compontents/judge/video-play.ets b/entry/src/main/ets/pages/compontents/judge/video-play.ets deleted file mode 100644 index f37e4dcc..00000000 --- a/entry/src/main/ets/pages/compontents/judge/video-play.ets +++ /dev/null @@ -1,25 +0,0 @@ - -@Component -export default struct EndPopup { - constructor() { - super() - } - - private title:string = '' - private cancelFn:(event?: ClickEvent) => void - private confirmFn:(event?: ClickEvent) => void - - build(){ - Column(){ - Column(){ - Text(this.title).fontSize(38).margin({bottom:20}) - Row(){}.height(50) - Row(){ - Text('取消').backgroundImage($rawfile('judge/end-btn.png'),ImageRepeat.NoRepeat).backgroundImageSize({width:'100%',height:'100%'}).width(250).height(100).fontSize(30).fontColor('#FFF').textAlign(TextAlign.Center).onClick(this.cancelFn) - Text('确定').backgroundImage($rawfile('judge/end-btn.png'),ImageRepeat.NoRepeat).backgroundImageSize({width:'100%',height:'100%'}).width(250).height(100).fontSize(30).fontColor('#FFF').textAlign(TextAlign.Center).margin({left:45}).onClick(this.confirmFn) - } - }.width('80%').height('70%').backgroundColor('#E6E3DF').borderRadius(38).position({y:'12%',x:'10%'}).justifyContent(FlexAlign.Center) - - }.width('100%').height('100%').position({y:0}).backgroundColor('rgba(0,0,0,0.7)') - } -} diff --git a/entry/src/main/ets/pages/judgeSDK/dataTest/index.ts b/entry/src/main/ets/pages/judgeSDK/dataTest/index.ts index 3394359a..d6c76734 100644 --- a/entry/src/main/ets/pages/judgeSDK/dataTest/index.ts +++ b/entry/src/main/ets/pages/judgeSDK/dataTest/index.ts @@ -3116,7 +3116,6 @@ export const testMarkRules = [{ }, { "itemno": "41", - "markcatalog": "41603", "markdepend": "通过急弯、坡路、拱桥、人行横道或者没有交通信号灯控制的路口时,不交替使用远近光灯示意", "markreal": "-100", diff --git a/entry/src/main/ets/pages/judgeSDK/judge.ts b/entry/src/main/ets/pages/judgeSDK/judge.ts index f8d0e106..d554fe58 100644 --- a/entry/src/main/ets/pages/judgeSDK/judge.ts +++ b/entry/src/main/ets/pages/judgeSDK/judge.ts @@ -3,155 +3,382 @@ import router from '@ohos.router'; import util from '@ohos.util'; import buffer from '@ohos.buffer'; -import {testMarkRules,testKmItems} from './dataTest/index' -import {SOUND,EXAMDATA} from './api/judgeSDK' +import { testKmItems, testMarkRules } from './dataTest/index'; +import { EXAMDATA, SOUND } from './api/judgeSDK'; -import VoiceAnnounce from './utils/voice-announcements' -import FileModel from './utils/file-model' -import FilePhoto from './utils/file-photo' -import FileUtil from '../../common/utils/File' -import FileLog from '../judgeSDK/utils/file-log' +import VoiceAnnounce from './utils/voice-announcements'; +import FileModel from './utils/file-model'; +import FilePhoto from './utils/file-photo'; +import FileUtil from '../../common/utils/File'; +import FileLog from '../judgeSDK/utils/file-log'; -import JudgeTask from './utils/judge-task' -import SimulateLights from './utils/simulate-lights' -import { judgeConfig } from './utils/judge-config' +import JudgeTask from './utils/judge-task'; +import SimulateLights from './utils/simulate-lights'; +import { judgeConfig } from './utils/judge-config'; -import {writeObjectOut,uploadExamProgressData} from '../../api/judge' -import {deepClone,getCurrentTime,stringToASC,string2Bytes,fillZero,Array2Byte,convertGpsCoord2} from '../../common/utils/tools' -import {getTranslateSignals,getCarStatus,getCarStatusType,getCenterProjectStatus,plcStrToJson,plcStrToWXJson,promptWxCode,getKmProjectVoice} from './utils//judge-common' -import {examJudgeSetLogCallback,examJudgeBeginExam,examJudgeInit,examJudgeRealExam,examJudgeSetRealExamCallback,examJudgeSetPerformCallback,examJudgeEndExam,examJudgeArtificialMark,examJudgeArtificialItem} from './api/index' - -import prompt from '@ohos.prompt'; +import { uploadExamProgressData, writeObjectOut } from '../../api/judge'; +import { + Array2Byte, + convertGpsCoord2, + deepClone, + fillZero, + getCurrentTime, + string2Bytes, + stringToASC +} from '../../common/utils/tools'; +import { + getCarStatus, + getCarStatusType, + getCenterProjectStatus, + getKmProjectVoice, + getTranslateSignals, + plcStrToJson, + plcStrToWXJson, + promptWxCode, + senorToWXDataStr +} from './utils/judge-common'; +import { + examJudgeArtificialItem, + examJudgeArtificialMark, + examJudgeBeginExam, + examJudgeEndExam, + examJudgeInit, + examJudgeMapSetParam, + examJudgeMapSetScaling, + examJudgeRealExam, + examJudgeSetLogCallback, + examJudgeSetPerformCallback, + examJudgeSetRealExamCallback +} from './api/index'; +import UsbService from '../../common/service/usbService'; +import Prompt from '@system.prompt'; const judgeTag = 'SURENJUN_JUDGE' -export default class Judge{ - - constructor(judgeUI) { - this.serialIndex = 1; - this.judgeUI = judgeUI - - //语音播放工具 - this.avPlayer = new VoiceAnnounce(); - new SimulateLights(this.avPlayer) - //模型工具 - this.fileModel = new FileModel(judgeUI.context); - //文件工具 - this.fileUtil = new FileUtil(judgeUI.context) - this.judgeTask = new JudgeTask() - const mediaTest= new FilePhoto(judgeUI.context); - this.filePhoto = mediaTest - this.kfArr = judgeUI.kfArr - this.xmmcStr = '';this.xmmcCode = '';this.carztStr = ''; - this.testKmItems = {}; - - // 考试回放配置 - const {isTrajectoryOpen,modelPath,trajectoryPath} = judgeConfig - this.isTrajectoryOpen = isTrajectoryOpen; - this.modelPath = modelPath; - this.trajectoryPath = trajectoryPath; - - this.isExam = !globalThis.singlePlay; - const {projectsCenterObj} = judgeUI - - //科目三待修改 - testKmItems.forEach(item => { - this.testKmItems[item.code] = item; - //考试项目存在 - if(projectsCenterObj[item.code]){ - this.testKmItems[item.code] = {code:item.code,status:1} - } - }) - this.isEnd = false; +export default class Judge { + // 过程照片拍照 + getPhoto = async (empty?: boolean) => { + const singlePlay = globalThis.singlePlay + //单机模式返回空照片 + if (singlePlay) { + return '' + } else { + const {filePhoto} = this; + const photoBase64 = await filePhoto.getPhoto(); + console.info(judgeTag, '拍照完成') + return photoBase64 + } } + //人工进入项目 + public setJudgeItem = async (itemno) => { + const {fileLog} = this + await examJudgeArtificialItem(itemno * 1); - //开始评判 - private async judging(callBack:Function){ - const {judgeUI} = this; - const { name, lsh, idCard} = judgeUI; - const fileLog = new FileLog(judgeUI.context); - const filePath = await fileLog.initFileLogo({ - name, lsh, idCard - }); - this.fileLog = fileLog; - - const {getJudgeBeginData,handleUdp,fileUtil,handleTrajectoryUdp,isTrajectoryOpen,trajectoryPath,avPlayer} = this; - const isJudgeInitBool = globalThis.isJudgeInitBool; - let strArr = []; - if(isTrajectoryOpen){ - const folderPath = await this.fileUtil.initFolder(trajectoryPath); - const str = await fileUtil.readFile(folderPath) - strArr = str.split('\n') - } - //日志回调 - console.info(judgeTag,'1.进入评判入口') - await examJudgeSetLogCallback(3, async (level, info,len)=>{ - console.log('评判日志:' + info) - await fileLog.setExamJudgeLogData(info); + await fileLog.setExamJudgeData({ + method: 'examJudgeArtificialItem', + itemno: itemno * 1, + type: 1 }) - console.info(judgeTag,'2.注册日志回调完成') + console.info(judgeTag, `人工评判进入项目-${itemno}`) - let initInfo = isTrajectoryOpen ? JSON.parse(strArr[0]):await this.getJudgeInitData(); + } + //人工扣分 + public setJudgeMark = async (itemno, serial) => { + const {fileLog} = this + await examJudgeArtificialMark(itemno * 1, serial); - //相关评判初始化只做一次 - if(!isJudgeInitBool){ - await fileLog.setExamJudgeData(initInfo) - const tempJudge = await examJudgeInit(initInfo); - globalThis.isJudgeInitBool = true - console.info(judgeTag,'4.评判初始化完成') - }else{ - await fileLog.setExamJudgeData(initInfo) - } - - globalThis.isJudge = true - // 2.评判过程回调 - await examJudgeSetRealExamCallback(async (strData,len)=>{ - await fileLog.setExamJudgeCallbackData(strData) - console.info('评判回调数据',strData) - this.handleRealExam(strData,callBack) + await fileLog.setExamJudgeData({ + method: 'examJudgeArtificialMark', + itemno: itemno * 1, + serial }) - await examJudgeSetPerformCallback(async (info)=>{ - console.info('评判实时数据',info) - const performInfo = JSON.parse(info) - this.performInfo = performInfo - this.judgeUI.jl = Math.ceil((performInfo.qjjl + performInfo.dcjl) / 100) - }) - - // 3.开始考试 - let beginExamInfo = isTrajectoryOpen ? { - ...JSON.parse(strArr[1]), - replay:1 - } : await getJudgeBeginData() - - await fileLog.setExamJudgeData(beginExamInfo) - await examJudgeBeginExam(beginExamInfo); - console.info(judgeTag,'6.开始考试注册完成') - - avPlayer.playAudio(['voice/ksks.WAV']) - // 处理轨迹plc信息 - if(isTrajectoryOpen){ - handleTrajectoryUdp(strArr); + console.info(judgeTag, `人工扣分-${itemno}-${serial}`) + } + // 断网数据补传 + uploadDisConnectData = async () => { + const {isJudgeDisConnect,fileLog,fileUtil} = this; + if (!isJudgeDisConnect) { return } - - // 处理实时udp里的plc信号 - globalThis.udpClient.onMessage(async (msg) => { - handleUdp(msg) + const folderPath = fileLog.folderPath + const examDataStr = await fileUtil.readFile(`${folderPath}/wuxi_dis_progress_data.txt`); + const examDataArr = examDataStr.split('\n'); + for (let examDataStr of examDataArr) { + const examData = JSON.parse(examDataStr) + const code = await writeObjectOut(examData); + } + } + //上传无锡所过程数据 + uploadProgressData = async () => { + const {judgeUI,fileUtil,fileLog} = this; + const {idCard,startFullTime} = judgeUI + const carInfo = globalThis.carInfo; + const {carId,examinationRoomId} = carInfo + const folderPath = fileLog.folderPath + const base64 = new util.Base64(); + const time = await getCurrentTime(); + const endTime = await getCurrentTime(1) + let examDataBase64 + //@ts-ignore + //TODO try catch报错待优化 + const examDataStr: string = await fileUtil.readFile(`${folderPath}/wuxi_progress_data.txt`); + try { + let tempBuff = buffer.alloc(examDataStr.length, examDataStr) + let examData: Uint8Array = new Uint8Array(tempBuff.buffer) + examDataBase64 = base64.encodeToStringSync(examData) + } catch (e) { + console.info(judgeTag, JSON.stringify(e)) + } + console.info(judgeTag, '过程数据文件上传 start') + await uploadExamProgressData({ + time, + carId, + examinationRoomId, + examData: examDataBase64, + type: 1, + cardNo: idCard, + examStartTime: startFullTime, + examEndTime: endTime, }) - - + console.info(judgeTag, '过程数据文件上传 end') } - - public async onJudgeFn(fn:Function){ - await this.judging(fn) + //获取科目三的评判初始化配置 + getKm3JudgeInitConfig = async () => { + const {judgeUI,getModelData} = this; + const {carinfoArrr,mapPointArr,mapPointItemArr,systemparmArr} = judgeUI; + return { + carinfo: carinfoArrr, + map_point: mapPointArr, + systemparm: systemparmArr, + map_point_item: mapPointItemArr, + //科目三暂时为空 + iteminfo: [], + roads: getModelData('km3/Roads.txt'), + sharps: getModelData('km3/Sharps.txt') + } } + // 处理udp plc信号 + handleUdp = async (msg) => { + console.info('plc信号', msg) + const {fileLog,getPlcData} = this + const stachArr = msg.split(',') + const {isEnd} = this; + if (stachArr[0] != '#DN_GD' || isEnd) { + return + } + const plcData = await getPlcData(msg); + // 4.过程数据 + await fileLog.setExamJudgeData(plcData) + await examJudgeRealExam(plcData) + const udpIndex = globalThis.udpIndex; + if (udpIndex % 5 === 0) { + const judgeUdp = globalThis.judgeUdp + const bytes = await this.getMessageHeartbeat(); + judgeUdp.send(bytes) + } + globalThis.udpIndex += 1 + } + // 处理特殊参数配置 + handleSEP = async (code: number) => { + const {judgeUI:{ + judgeConfigObj + },avPlayer} = this; + const {examSubject} = globalThis.carInfo; + switch (code) { + //结束考试方式 + case 306: + if (judgeConfigObj[code] == 5) { + //靠边停车 + avPlayer.playAudio(['voice/406001.mp3']) + } + break; + + + } + } + public plcStr: string + private judgeUI + // 更改考试状态 + goVoiceAnnounce = async (event, xmdm, kf, xmjs) => { + const {projectsObj,judgeConfigObj} = this.judgeUI; + + const {beginProject,pointsDedute,endProject,avPlayer,uploadProgressPhoto,judgeTask,handEndExam} = this; + const xmhg = xmjs.xmhg + const kfLen = kf.length + + //不报语音的项目列表 + const ignoreVoiceCodeArr = (judgeConfigObj['312'] || '').split(',') + switch (event) { + + // 项目开始 + case 1: + const code = projectsObj[xmdm].projectCodeCenter; + const kmCode = getKmProjectVoice(code, 1) + if (!ignoreVoiceCodeArr.includes(code)) { + kmCode && avPlayer.playAudio([`voice/${kmCode}.mp3`]) + } + await judgeTask.addTask(async () => { + console.info(judgeTag, `项目开始-${xmdm}-${projectsObj[xmdm].name}`) + await beginProject(xmdm) + // console.info(judgeTag,'上传照片 start') + await uploadProgressPhoto(xmdm) + }) + break; + + // 项目结束 + case 2: + const endCode = projectsObj[xmdm].projectCodeCenter; + const endKmCode = getKmProjectVoice(endCode, 2) + if (!ignoreVoiceCodeArr.includes(endCode)) { + endKmCode && avPlayer.playAudio([`voice/${endKmCode}.mp3`]) + } + await judgeTask.addTask(async () => { + console.info(judgeTag, `项目结束-${xmdm}-${projectsObj[xmdm].name}`) + await endProject(xmdm) + }) + break; + + // 扣分 + case 3: + avPlayer.playAudio([`voice/${kf[kfLen -1].markcatalog}.mp3`]) + await judgeTask.addTask(async () => { + console.info(judgeTag, `项目扣分-${kf[kfLen -1].markcatalog}-${kf[kfLen -1].desc}`) + await pointsDedute(kf[kfLen -1].xmdm, kf[kfLen -1]) + }) + break; + + // 考车状态 + case 4: + break + + // 考试结束 + case 5: + clearInterval(globalThis.judgeTimer) + await judgeTask.addTask(async () => { + console.info(judgeTag, '考试结束 start') + await handEndExam() + }) + break + default: + break + } + } + private fileLog + private totalScore: number + private folderPath: string + private modelPath: string + private avPlayer + private carztStr: string + private rmndg: 0 | 1 + private wav: 0 | 1 + private mndgStr: string | undefined + // 模拟灯光 + setMndg = async (mndgStr: string) => { + this.mndgStr = mndgStr + this.rmndg = 1; + } + private xmmcStr: string + private xmmcCode: string + private xmmcSingleCode: number + private xmdm: string | number + private xmxh: string + private fileModel: FileModel + private filePhoto: FilePhoto + private usbService: UsbService + //是否是考试模式 + private isExam: boolean + //考试是否结束了 + private isEnd: boolean + //UDP服务序列号 + private serialIndex: number + private fileUtil: FileUtil + private judgeTask: JudgeTask + private tempData: any + private performInfo: any + private ksjs: { + // 累计前进距离 + qjjl: number, + // 累计倒车距离 + dcjl: number + } + private kfArr: { + //项目名称 + xmmcStr: string, + xmdm: string | number, + //扣分描述 + desc: string, + //扣分 + score: string + //无锡所扣分代码 + markcatalog: string + markserial: string + kfxh: string + }[] + private plcData: any + // 获取plc数据 + getPlcData = async (plc: string) => { + const {fileLog,mndgStr,rmndg,wav} = this; + await fileLog.setPlcProgressData(plc) + //plc字符串转化成评判初始化数据 + const tempData = await plcStrToJson(plc); + //模拟灯光回放时刻 + tempData.sensor.rmndg = rmndg; + //模拟灯光单个灯光结束时刻 + tempData.sensor.wav = wav; + //模拟灯灯光灯光项目 + tempData.sensor.mndg = mndgStr; + //plc字符串转化成无锡所过程数据 + const wuXiDataStr = await plcStrToWXJson(plc) + this.plcData = tempData + await fileLog.setExamJudgeWuxiProgressData(wuXiDataStr) + this.tempData = tempData + this.plcStr = plc; + this.mndgStr = ''; + this.rmndg = 0; + this.wav = 0; + globalThis.msgStr = plc + + return tempData + } + // 处理轨迹plc信号 + handleTrajectoryUdp = async (strArr) => { + const {fileLog} = this; + let num = 2; + const {usbService} = this; + const judgeTimer = setInterval(async () => { + const msg = JSON.parse(strArr[num]); + await fileLog.setExamJudgeData(msg) + if (!msg) { + console.info(judgeTag, '模拟数据考试结束') + examJudgeEndExam(); + globalThis.windowClass.setWindowSystemBarEnable(['navigation']) + clearInterval(judgeTimer) + return + } + // 4.过程数据 + this.tempData = msg + this.plcData = msg + globalThis.msgStr = '' + const str = await senorToWXDataStr(msg); + //检测到有无锡所设备接入,需要发送特定的数据,供检测 + if (usbService.isWXUSBDevice) { + usbService.sendUSB(str) + } + await examJudgeRealExam(msg) + num++ + }, 200) + globalThis.judgeTimer = judgeTimer; + } + private km2ItemsStatus: any[] + //所有的科目考试项目(大车&小车) + private testKmItems: any //处理评判过程回调 - handleRealExam = async (strData,callBack) => { + handleRealExam = async (strData, callBack) => { // console.log('过程数据:' + strData); - let examData:EXAMDATA = JSON.parse(strData); + let examData: EXAMDATA = JSON.parse(strData); const {getDqxmStr,getKfStr,goJudgeVoice,setMndg,judgeUI} = this; const {carzt,xmks,kf,event,xmjs,ksjs,sound,mndg} = examData @@ -159,7 +386,7 @@ export default class Judge{ const xmdm = event == 2 ? xmjs.xmdm : xmks.xmdm const xmxh = event == 2 ? xmjs.xmxh : xmks.xmxh; - switch (event){ + switch (event) { //项目开始 case 1: judgeUI.projectsObj[xmdm].type = '2'; @@ -187,31 +414,36 @@ export default class Judge{ //扣分 case 3: const thisKf = getKfStr(`${kf.xmdm}_${kf.kfdm}`) - //扣分信息 + //扣分信息 this.kfArr.push({ //扣分项目名称 - xmmcStr:getDqxmStr(kf.xmdm), - xmdm:kf.xmdm, + xmmcStr: getDqxmStr(kf.xmdm), + xmdm: kf.xmdm, //扣分描述 - desc:thisKf.desc, + desc: thisKf.desc, //扣分分数 - score:thisKf.score, + score: thisKf.score, // 扣分无锡所代码 - markcatalog:thisKf.markcatalog, - markserial:thisKf.markserial, - kfxh:thisKf.kfxh + markcatalog: thisKf.markcatalog, + markserial: thisKf.markserial, + kfxh: thisKf.kfxh }) - this.judgeUI.totalScore += thisKf.score*1; + this.judgeUI.totalScore += thisKf.score * 1; break; //考车状态 - case 4: this.carztStr = getCarStatus(carzt);break; + case 4: + this.carztStr = getCarStatus(carzt); + break; //考试结束 - case 5: this.ksjs = ksjs;break; + case 5: + this.ksjs = ksjs; + break; //项目取消 - case 6: break; + case 6: + break; //语音播放和提示 case 7: @@ -221,9 +453,10 @@ export default class Judge{ //模拟灯光事件 case 8: setMndg(mndg) - break; + break; - default:;break; + default: + ;break; } @@ -231,202 +464,62 @@ export default class Judge{ await callBack({ //项目名称 考车状态 扣分arr - xmmcStr, carztStr, kfArr + xmmcStr, carztStr, kfArr }); //语音播报 - this.goVoiceAnnounce(event,xmdm, this.kfArr,xmjs) + this.goVoiceAnnounce(event, xmdm, this.kfArr, xmjs) //更新UI - if(event == 1 || event == 2 || event == 3){ + if (event == 1 || event == 2 || event == 3) { const copyProjectsObj = this.judgeUI.projectsObj; judgeUI.projectsObj = deepClone(copyProjectsObj) } } - - // 评判语音提示 - goJudgeVoice = async (sound:SOUND) => { - const {avPlayer} = this; - const {xmdm,code} = sound; - //判断是不是模拟灯光语音 - const isLight = code.slice(0,3) === '417'; - console.info(judgeTag,'评判语音提示' + JSON.stringify(sound)) - - avPlayer.playAudio([`voice/${code}.mp3`],true,()=>{ - if(isLight){ - this.wav = 1; - console.info(judgeTag,'模拟灯光播放代码:' + code) - } - }) - - - } - - // 模拟灯光 - setMndg = async (mndgStr:string) => { - this.mndgStr = mndgStr - this.rmndg = 1; - } - - // 更改考试状态 - goVoiceAnnounce = async (event,xmdm,kf,xmjs) => { - const {projectsObj,judgeConfigObj} = this.judgeUI; - - const {beginProject,pointsDedute,endProject,avPlayer,uploadProgressPhoto,judgeTask,handEndExam} = this; - const xmhg = xmjs.xmhg - const kfLen = kf.length - - //不报语音的项目列表 - const ignoreVoiceCodeArr = (judgeConfigObj['312'] || '').split(',') - switch (event){ - - // 项目开始 - case 1: - const code = projectsObj[xmdm].projectCodeCenter; - const kmCode = getKmProjectVoice(code,1) - if(!ignoreVoiceCodeArr.includes(code)){ - kmCode && avPlayer.playAudio([`voice/${kmCode}.mp3`]) - } - await judgeTask.addTask(async ()=>{ - console.info(judgeTag,`项目开始-${xmdm}-${projectsObj[xmdm].name}`) - await beginProject(xmdm) - // console.info(judgeTag,'上传照片 start') - await uploadProgressPhoto(xmdm) - }) - break; - - // 项目结束 - case 2: - const endCode = projectsObj[xmdm].projectCodeCenter; - const endKmCode = getKmProjectVoice(endCode,2) - if(!ignoreVoiceCodeArr.includes(endCode)){ - endKmCode && avPlayer.playAudio([`voice/${endKmCode}.mp3`]) - } - await judgeTask.addTask(async ()=>{ - console.info(judgeTag,`项目结束-${xmdm}-${projectsObj[xmdm].name}`) - await endProject(xmdm) - }) - break; - - // 扣分 - case 3: - avPlayer.playAudio([`voice/${kf[kfLen -1].markcatalog}.mp3`]) - await judgeTask.addTask(async ()=>{ - console.info(judgeTag,`项目扣分-${kf[kfLen -1].markcatalog}-${kf[kfLen -1].desc}`) - await pointsDedute(kf[kfLen -1].xmdm,kf[kfLen -1]) - }) - break; - - // 考车状态 - case 4:break - - // 考试结束 - case 5: - clearInterval(globalThis.judgeTimer) - await judgeTask.addTask(async ()=>{ - console.info(judgeTag,'考试结束 start') - await handEndExam() - }) - break - default:break - } - } - - // 处理考试结束 - public handEndExam = async (isManual?:Boolean)=>{ - const {isExam,judgeUI,endExam,handleSEP,avPlayer} = this; - const {judgeConfigObj,totalScore} = judgeUI - - if(judgeConfigObj['344'] == 1){ - prompt.showToast({ - message: '考试未结束,不允许手动退出!', - duration: 4000 - }); - return - } - - await handleSEP(306); - avPlayer.playAudio(['voice/exam_waiting.mp3'],true) - this.isEnd = true - try { - const bytes = await this.getMessageHeartbeat(true); - const singlePlay = globalThis.singlePlay - singlePlay || globalThis.judgeUdp.send(bytes) - //结束评判函数 - await examJudgeEndExam(); - globalThis.isJudge = false - await endExam(isManual) - - }catch (e){ - setTimeout(()=>{ - router.back(); - },3000) - } - - } - - // 过程照片拍照 - getPhoto = async (empty?:boolean) => { - const singlePlay = globalThis.singlePlay - //单机模式返回空照片 - if(singlePlay){ - return '' - }else{ - const {filePhoto} = this; - const photoBase64 = await filePhoto.getPhoto(); - console.info(judgeTag,'拍照完成') - return photoBase64 - } - } - - // 当前项目转换 - getDqxmStr = (type) => { - const projectsObj = this.judgeUI.projectsObj - return projectsObj[type]?.abbreviation || '通用评判' - } - - // 扣分项目转换 - getKfStr = (code) => { - const markRuleListObj = this.judgeUI.markRuleListObj; - const thisMark = markRuleListObj[code] - return { - desc: thisMark.markshow, - score: thisMark.markreal, - markcatalog: thisMark.markcatalog, - markserial:thisMark.markserial, - kfxh:thisMark.kfxh - } - } - + //当前科目二的考试项目 + private currentKm2ItemsObj: any + //本地轨迹回放地址 + private trajectoryPath: string + private isTrajectoryOpen: boolean; + // 调代理接口是否断网了 + private isJudgeDisConnect: boolean; // 项目开始接口同步 - beginProject = async(ksxm) => { + beginProject = async (ksxm) => { const carInfo = globalThis.carInfo; const { examSubject,plateNo } = carInfo; const {judgeUI,fileLog,getSbbm,xmxh} = this; const {lsh,idCard,serialNumber,projectsObj,ksdd,kslx} = judgeUI const time = await getCurrentTime(); const project = projectsObj[ksxm] - const sbxh = getSbbm(ksxm,xmxh) + const sbxh = getSbbm(ksxm, xmxh) const data = { //系统类别 接口序列号 接口标识 - xtlb:'17', jkxlh:serialNumber, jkid:'17C52', - drvexam:{ + xtlb: '17', jkxlh: serialNumber, jkid: '17C52', + drvexam: { // 考试科目 身份证号码 - lsh, kskm:examSubject, sfzmhm:idCard, ksxm:project.projectCodeCenter,sbxh, kchp:encodeURI(plateNo), + lsh, + kskm: examSubject, + sfzmhm: idCard, + ksxm: project.projectCodeCenter, + sbxh, + kchp: encodeURI(plateNo), // 开始时间 - ksdd:encodeURI(ksdd), ksxl:encodeURI(kslx) || '', kssj:time + ksdd: encodeURI(ksdd), + ksxl: encodeURI(kslx) || '', + kssj: time } } const code = await writeObjectOut(data) // console.info(judgeTag,'项目开始 end') - if(code === 2300007){this.isJudgeDisConnect = true;} + if (code === 2300007) { + this.isJudgeDisConnect = true; + } const isJudgeDisConnect = this.isJudgeDisConnect isJudgeDisConnect ? fileLog.setExamJudgeDisWuxiProgressData(data) : fileLog.setExamJudgeWuxiData(data) - promptWxCode('17C52',code) + promptWxCode('17C52', code) } - // 项目结束接口同步 - endProject = async(ksxm) =>{ + endProject = async (ksxm) => { const carInfo = globalThis.carInfo; const deviceNo = globalThis.deviceNo; const { examSubject,plateNo,carNo } = carInfo; @@ -434,30 +527,35 @@ export default class Judge{ const {lsh,idCard,serialNumber,projectsObj,cdsbInfoObj,ksdd,kslx} = judgeUI const time = await getCurrentTime(); const project = projectsObj[ksxm] - const sbxh = getSbbm(ksxm,xmxh) + const sbxh = getSbbm(ksxm, xmxh) const data = { - xtlb:'17',jkxlh:serialNumber,jkid:'17C55', - drvexam:{ - lsh,kskm:examSubject,sfzmhm:idCard, - ksxm:project.projectCodeCenter, + xtlb: '17', jkxlh: serialNumber, jkid: '17C55', + drvexam: { + lsh, + kskm: examSubject, + sfzmhm: idCard, + ksxm: project.projectCodeCenter, sbxh, //操作类型 1:正常 0:撤销该考试记录 - czlx:'1', - kchp:encodeURI(plateNo),ksdd:encodeURI(ksdd),ksxl:encodeURI(kslx) || '', - jssj:time + czlx: '1', + kchp: encodeURI(plateNo), + ksdd: encodeURI(ksdd), + ksxl: encodeURI(kslx) || '', + jssj: time } } const code = await writeObjectOut(data) - if(code === 2300007){this.isJudgeDisConnect = true;} + if (code === 2300007) { + this.isJudgeDisConnect = true; + } const isJudgeDisConnect = this.isJudgeDisConnect isJudgeDisConnect ? fileLog.setExamJudgeDisWuxiProgressData(data) : fileLog.setExamJudgeWuxiData(data) // console.info(judgeTag,'项目结束 end') - promptWxCode('17C55',code) + promptWxCode('17C55', code) } - // 考试扣分 - pointsDedute= async (ksxm,kf) => { + pointsDedute = async (ksxm, kf) => { const carInfo = globalThis.carInfo; const deviceNo = globalThis.deviceNo; const { examSubject,plateNo,carNo } = carInfo; @@ -466,27 +564,31 @@ export default class Judge{ const time = await getCurrentTime(); const project = getProjectInfo(ksxm); const data = { - xtlb:'17',jkxlh:serialNumber,jkid:'17C53', - drvexam:{ - lsh,kskm:examSubject, + xtlb: '17', jkxlh: serialNumber, jkid: '17C53', + drvexam: { + lsh, + kskm: examSubject, // 通用评判科二10000,科三30000 - ksxm:project?project.projectCodeCenter:10000, - kfxm:kf.markcatalog, - kfxmmx:`${ksxm},${kf.markserial}`, - sfzmhm:idCard, kchp:encodeURI(carInfo.plateNo), + ksxm: project ? project.projectCodeCenter : 10000, + kfxm: kf.markcatalog, + kfxmmx: `${ksxm},${kf.markserial}`, + sfzmhm: idCard, + kchp: encodeURI(carInfo.plateNo), //1:自动 2:人工 - kffs:1, - ksdd:encodeURI(ksdd), kfsj:time + kffs: 1, + ksdd: encodeURI(ksdd), + kfsj: time } } const code = await writeObjectOut(data); - if(code === 2300007){this.isJudgeDisConnect = true} + if (code === 2300007) { + this.isJudgeDisConnect = true + } const isJudgeDisConnect = this.isJudgeDisConnect isJudgeDisConnect ? fileLog.setExamJudgeDisWuxiProgressData(data) : fileLog.setExamJudgeWuxiData(data) - console.info(judgeTag,'项目扣分 end') - promptWxCode('17C53',code) + console.info(judgeTag, '项目扣分 end') + promptWxCode('17C53', code) } - // 考试过程照片 uploadProgressPhoto = async (ksxm) => { const time = await getCurrentTime(); @@ -499,25 +601,151 @@ export default class Judge{ const project = projectsObj[ksxm] const data = { - xtlb:'17',jkxlh:serialNumber,jkid:'17C54', - drvexam:{ - lsh,kskm:examSubject,ksxm:project.projectCodeCenter, - sfzmhm:idCard,kchp:encodeURI(plateNo),zpsj:time, + xtlb: '17', jkxlh: serialNumber, jkid: '17C54', + drvexam: { + lsh, + kskm: examSubject, + ksxm: project.projectCodeCenter, + sfzmhm: idCard, + kchp: encodeURI(plateNo), + zpsj: time, //@ts-ignore - zp:encodeURIComponent(photoBase64), - cs:Math.ceil(gps.sd * 1.852), - ksdd:encodeURI(ksdd) + zp: encodeURIComponent(photoBase64), + cs: Math.ceil(gps.sd * 1.852), + ksdd: encodeURI(ksdd) } }; const code = await writeObjectOut(data); - if(code === 2300007){this.isJudgeDisConnect = true} - promptWxCode('17C54',code) + if (code === 2300007) { + this.isJudgeDisConnect = true + } + promptWxCode('17C54', code) fileLog.setExamJudgeWuxiData(data) - console.info(judgeTag,'上传照片 end') + console.info(judgeTag, '上传照片 end') + } + + constructor(judgeUI) { + this.serialIndex = 1; + this.judgeUI = judgeUI + + //语音播放工具 + this.avPlayer = new VoiceAnnounce(); + new SimulateLights(this.avPlayer) + //模型工具 + this.fileModel = new FileModel(judgeUI.context); + //文件工具 + this.fileUtil = new FileUtil(judgeUI.context) + this.judgeTask = new JudgeTask() + const mediaTest = new FilePhoto(judgeUI.context); + this.usbService = new UsbService(); + this.filePhoto = mediaTest + this.kfArr = judgeUI.kfArr + this.xmmcStr = ''; + this.xmmcCode = ''; + this.carztStr = ''; + this.testKmItems = {}; + + // 考试回放配置 + const {isTrajectoryOpen,modelPath,trajectoryPath} = judgeConfig + this.isTrajectoryOpen = isTrajectoryOpen; + this.modelPath = modelPath; + this.trajectoryPath = trajectoryPath; + + this.isExam = !globalThis.singlePlay; + const {projectsCenterObj} = judgeUI + + //科目三待修改 + testKmItems.forEach(item => { + this.testKmItems[item.code] = item; + //考试项目存在 + if (projectsCenterObj[item.code]) { + this.testKmItems[item.code] = { + code: item.code, status: 1 + } + } + }) + this.isEnd = false; + } + + public async onJudgeFn(fn: Function) { + await this.judging(fn) + } + + // 评判语音提示 + goJudgeVoice = async (sound: SOUND) => { + const {avPlayer} = this; + const {xmdm,code} = sound; + //判断是不是模拟灯光语音 + const isLight = code.slice(0, 3) === '417'; + if (isLight) { + console.info(judgeTag, '模拟灯光开始播放:' + code) + } + avPlayer.playAudio([`voice/${code}.mp3`], true, () => { + if (isLight) { + console.info(judgeTag, '播放结束:' + code) + setTimeout(() => { + this.wav = 1; + }) + } + }) + + + } + + // 处理考试结束 + public handEndExam = async (isManual?: Boolean) => { + const {isExam,judgeUI,endExam,handleSEP,avPlayer} = this; + const {judgeConfigObj,totalScore} = judgeUI + + if (judgeConfigObj['344'] == 1) { + Prompt.showToast({ + message: '考试未结束,不允许手动退出!', + duration: 4000 + }); + return + } + + await handleSEP(306); + avPlayer.playAudio(['voice/exam_waiting.mp3'], true) + this.isEnd = true + try { + const bytes = await this.getMessageHeartbeat(true); + const singlePlay = globalThis.singlePlay + singlePlay || globalThis.judgeUdp.send(bytes) + //结束评判函数 + await examJudgeEndExam(); + globalThis.isJudge = false + await endExam(isManual) + + } catch (e) { + setTimeout(() => { + router.back(); + }, 3000) + } + + } + + // 当前项目转换 + getDqxmStr = (type) => { + const projectsObj = this.judgeUI.projectsObj + return projectsObj[type]?.abbreviation || '通用评判' + } + + // 扣分项目转换 + getKfStr = (code) => { + const markRuleListObj = this.judgeUI.markRuleListObj; + const thisMark = markRuleListObj[code] + return { + desc: thisMark.markshow, + score: thisMark.markreal, + markcatalog: thisMark.markcatalog, + markserial: thisMark.markserial, + kfxh: thisMark.kfxh + } } // 考试结束 - public endExam = async (isManual?:Boolean) => { + public endExam = async (isManual?: Boolean) => { const carInfo = globalThis.carInfo; const deviceNo = globalThis.deviceNo; const { examSubject ,plateNo} = carInfo; @@ -528,119 +756,44 @@ export default class Judge{ const photoBase64 = await getPhoto(); const data = { - xtlb:'17',jkxlh:serialNumber,jkid:'17C56', - drvexam:{ - lsh,kchp:encodeURI(plateNo),kskm:examSubject,sfzmhm:idCard, + xtlb: '17', jkxlh: serialNumber, jkid: '17C56', + drvexam: { + lsh, + kchp: encodeURI(plateNo), + kskm: examSubject, + sfzmhm: idCard, //@ts-ignore - zp:encodeURIComponent(photoBase64),jssj:time, - kscj:(totalScore*1) > 0 ? totalScore : 0, - kslc:(ksjs?.qjjl + ksjs?.dcjl) || 0, - dwlc:'', + zp: encodeURIComponent(photoBase64), + jssj: time, + kscj: (totalScore * 1) > 0 ? totalScore : 0, + kslc: (ksjs?.qjjl + ksjs?.dcjl) || 0, + dwlc: '', } } const code = await writeObjectOut(data); - promptWxCode('17C56',code) - console.info(judgeTag,'考试结束 end') - if(!isManual){ - if(totalScore < 80){ + promptWxCode('17C56', code) + console.info(judgeTag, '考试结束 end') + if (!isManual) { + if (totalScore < 80) { judgeUI.loadingPopupVisible = true - if(kssycs == 1){ - avPlayer.playAudio(['voice/unqualified_one.wav'],true) - }else{ - avPlayer.playAudio(['voice/unqualified_two.wav'],true) + if (kssycs == 1) { + avPlayer.playAudio(['voice/unqualified_one.wav'], true) + } else { + avPlayer.playAudio(['voice/unqualified_two.wav'], true) } - }else{ - avPlayer.playAudio(['voice/qualified.mp3'],true) + } else { + avPlayer.playAudio(['voice/qualified.mp3'], true) } } - console.info(judgeTag,`考试成绩:${totalScore}`) + console.info(judgeTag, `考试成绩:${totalScore}`) fileLog.setExamJudgeWuxiData(data) await uploadProgressData(); - setTimeout(()=>{ + setTimeout(() => { router.back(); - },3000) + }, 3000) } - //人工进入项目 - public setJudgeItem = async (itemno) => { - const {fileLog} = this - await examJudgeArtificialItem(itemno * 1); - - await fileLog.setExamJudgeData({ - method:'examJudgeArtificialItem', - itemno:itemno * 1, - type:1 - }) - - console.info(judgeTag,`人工评判进入项目-${itemno}`) - - } - - //人工扣分 - public setJudgeMark = async (itemno,serial)=>{ - const {fileLog} = this - await examJudgeArtificialMark(itemno * 1,serial); - - await fileLog.setExamJudgeData({ - method:'examJudgeArtificialMark', - itemno:itemno * 1, - serial - }) - - console.info(judgeTag,`人工扣分-${itemno}-${serial}`) - } - - // 断网数据补传 - uploadDisConnectData = async () => { - const {isJudgeDisConnect,fileLog,fileUtil} = this; - if(!isJudgeDisConnect){ - return - } - const folderPath = fileLog.folderPath - const examDataStr = await fileUtil.readFile(`${folderPath}/wuxi_dis_progress_data.txt`); - const examDataArr = examDataStr.split('\n'); - for(let examDataStr of examDataArr){ - const examData = JSON.parse(examDataStr) - const code = await writeObjectOut(examData); - } - } - - //上传无锡所过程数据 - uploadProgressData = async () => { - const {judgeUI,fileUtil,fileLog} = this; - const {idCard,startFullTime} = judgeUI - const carInfo = globalThis.carInfo; - const {carId,examinationRoomId} = carInfo - const folderPath = fileLog.folderPath - const base64 = new util.Base64(); - const time = await getCurrentTime(); - const endTime = await getCurrentTime(1) - let examDataBase64 - //@ts-ignore - //TODO try catch报错待优化 - const examDataStr:string = await fileUtil.readFile(`${folderPath}/wuxi_progress_data.txt`); - try { - let tempBuff = buffer.alloc(examDataStr.length, examDataStr) - let examData:Uint8Array = new Uint8Array(tempBuff.buffer) - examDataBase64 = base64.encodeToStringSync(examData) - }catch (e){ - console.info(judgeTag,JSON.stringify(e)) - } - console.info(judgeTag,'过程数据文件上传 start') - await uploadExamProgressData({ - time, - carId, - examinationRoomId, - examData:examDataBase64, - type:1, - cardNo:idCard, - examStartTime:startFullTime, - examEndTime:endTime, - }) - console.info(judgeTag,'过程数据文件上传 end') - } - // 获取评判初始化数据 getJudgeInitData = async () => { const {getModelData,getKm3JudgeInitConfig} = this @@ -650,92 +803,89 @@ export default class Judge{ const judgeUI = this.judgeUI const {projectsObj,cdsbInfoObj,markRuleListObj,carType,carName} = judgeUI - const examType = examSubject == 2?'km2':'km3' + const examType = examSubject == 2 ? 'km2' : 'km3' let allitems = []; - if(examSubject == 2){ - allitems = Reflect.ownKeys(cdsbInfoObj).map(cdsbKey=>{ + if (examSubject == 2) { + allitems = Reflect.ownKeys(cdsbInfoObj).map(cdsbKey => { const cdsb = cdsbInfoObj[cdsbKey]; const {xmdm,xmxh,modelKey} = cdsb return { - xmdm,xmxh,model:getModelData(`${examType}/${modelKey}.txt`) + xmdm, xmxh, model: getModelData(`${examType}/${modelKey}.txt`) } }) } const initInfo = { - kskm:examSubject*1, - kchp:plateNo, - kchm:carId*1, - kscx:carType, - cxcode:'1', - name:carName, - carmodel:getModelData(`${examType}/${carType}.txt`), + kskm: examSubject * 1, + kchp: plateNo, + kchm: carId * 1, + kscx: carType, + cxcode: '1', + name: carName, + carmodel: getModelData(`${examType}/${carType}.txt`), allitems, - mark:Reflect.ownKeys(markRuleListObj).map(ruleKey=>(markRuleListObj[ruleKey])) || testMarkRules, - sysset:judgeUI.judgeConfig, + mark: Reflect.ownKeys(markRuleListObj).map(ruleKey => (markRuleListObj[ruleKey])) || testMarkRules, + sysset: judgeUI.judgeConfig, }; let km3Config = {} - if(examSubject){ - km3Config = await getKm3JudgeInitConfig(); + if (examSubject) { + km3Config = await getKm3JudgeInitConfig(); } // 获取科目三的评判配置 - console.info(judgeTag,'3.获取评判初始化数据完成') + console.info(judgeTag, '3.获取评判初始化数据完成') return { ...initInfo, ...km3Config, } } - //获取科目三的评判初始化配置 - getKm3JudgeInitConfig = async () => { - const {judgeUI,getModelData} = this; - const {carinfoArrr,mapPointArr,mapPointItemArr,systemparmArr} = judgeUI; - return { - carinfo:carinfoArrr, - map_point:mapPointArr, - systemparm:systemparmArr, - map_point_item:mapPointItemArr, - //科目三暂时为空 - iteminfo:[], - roads:getModelData('km3/Roads.txt'), - sharps:getModelData('km3/Sharps.txt') - } - } - // 消息心跳发送 - getMessageHeartbeat = async (isEnd?:Boolean) => { + getMessageHeartbeat = async (isEnd?: Boolean) => { console.log('kkkkkkmmm') const carInfo = globalThis.carInfo; const { examSubject,plateNo,ksyh } = carInfo; // const ksyh='0000000000000' // const ksyh=globalThis.ksyh ||'0000000000000' - const {judgeUI,isExam,serialIndex,tempData,xmmcCode,xmxh,xmmcSingleCode,xmdm,performInfo,kfArr,getTranslateProject,getSbxh} = this; + const { + judgeUI, + isExam, + serialIndex, + tempData, + xmmcCode, + xmxh, + xmmcSingleCode, + xmdm, + performInfo, + kfArr, + getTranslateProject, + getSbxh + } = this; const {lsh,startHourTime,totalScore} = judgeUI; - const examType = isExam?examSubject:0; + const examType = isExam ? examSubject : 0; const {sensor,gps} = tempData; const {zfxd,yfxd,shtd,ygd,jgd,skd,dh1,dh2,lhq,jsc,ssc,fsc,lb,mkg,aqd,ygq,cs,fdjzs} = sensor const {jd,wd, hxj, fyj, hbg,} = gps const translateProject = getTranslateProject(); - const sbxh = getSbxh(xmdm,xmxh) - console.log('sbxhsbxh',sbxh) + const sbxh = getSbxh(xmdm, xmxh) + console.log('sbxhsbxh', sbxh) const {carzt,dcjl,qjjl,dxjl,bxjl} = performInfo; - console.log('performInfo',JSON.stringify(performInfo)) + console.log('performInfo', JSON.stringify(performInfo)) // const asclshArr = stringToASC(lsh); const asclshArr = stringToASC(fillZero('0000000000000' || 0, 13)); //13不足要补0 - const ascksyhArr = stringToASC(fillZero(ksyh || 0,13)) + const ascksyhArr = stringToASC(fillZero(ksyh || 0, 13)) const ascsbxhArr = stringToASC(sbxh) const translateSignals = getTranslateSignals( - [zfxd, yfxd, shtd, ygd, jgd, skd, dh1, dh2, lhq, jsc,ssc,fsc, lb, mkg, aqd, 0,0,0,0 ].concat(getCarStatusType(carzt)).concat([ ygq, sensor.wd, 0 ]) + [zfxd, yfxd, shtd, ygd, jgd, skd, dh1, dh2, lhq, jsc, ssc, fsc, lb, mkg, aqd, 0, 0, 0, 0].concat(getCarStatusType(carzt)).concat([ygq, sensor.wd, 0]) ) console.log('jinweidu111jdwd0') //@ts-ignore - const translateJd = convertGpsCoord2(wd).toFixed(7) * Math.pow(10,7); + const translateJd = convertGpsCoord2(wd).toFixed(7) * Math.pow(10, 7); //@ts-ignore const translateWd = convertGpsCoord2(jd).toFixed(7) * Math.pow(10, 7) console.log('jinweidu111jdwd') @@ -744,51 +894,52 @@ export default class Judge{ //@ts-ignore // const translateProjects= translateProject.map(num => string2Bytes(p,8)[0]) - console.log('jinweidu2222',`${examType}${startHourTime}`) + console.log('jinweidu2222', `${examType}${startHourTime}`) const arr = [ //考生号 TODO 考试员号 - asclshArr.map(lsh => string2Bytes(lsh,8)[0]), + asclshArr.map(lsh => string2Bytes(lsh, 8)[0]), //考试员号 - ascksyhArr.map(ksyh => string2Bytes(ksyh,8)[0]), + ascksyhArr.map(ksyh => string2Bytes(ksyh, 8)[0]), //科目类型(0:未考试 1:科目二 2:科目三) + 考试开始时间 - string2Bytes(`${examType}${startHourTime}`,4 * 8), + string2Bytes(`${examType}${startHourTime}`, 4 * 8), // TODO 消息序号从1开始,0结束 - string2Bytes(isEnd ? 0 : serialIndex,2 * 8), + string2Bytes(isEnd ? 0 : serialIndex, 2 * 8), /*左向灯 右向灯 双跳灯 远光灯 近光灯 视宽灯 点火1 点火2 离合器 脚刹 手刹 副刹 喇叭 门开关 安全带 档位 车辆状态 雨刮器 雾灯 0*/ translateSignals, //速度 发动机转速 GPS纬度 GPS经度 主天线位置 //@ts-ignore - string2Bytes(cs,2 * 8), string2Bytes(fdjzs / 60,8), string2Bytes(translateJd,4*8), string2Bytes(translateWd,4*8), string2Bytes(1,8), + string2Bytes(cs, 2 * 8), string2Bytes(fdjzs / 60, 8), string2Bytes(translateJd, 4 * 8), string2Bytes(translateWd, 4 * 8), string2Bytes(1, 8), //GPS东向距离 - string2Bytes(dxjl < 0 ? (dxjl+4294967296) : dxjl,4*8), + string2Bytes(dxjl < 0 ? (dxjl + 4294967296) : dxjl, 4 * 8), //GPS北向距离 - string2Bytes(bxjl < 0 ? (bxjl+4294967296) : bxjl,4*8), + string2Bytes(bxjl < 0 ? (bxjl + 4294967296) : bxjl, 4 * 8), //航向角 俯仰角 高程(海拔) - string2Bytes((hxj+90) * 100,2*8), string2Bytes(fyj*100,2*8), string2Bytes(hbg*100,4*8), + string2Bytes((hxj + 90) * 100, 2 * 8), string2Bytes(fyj * 100, 2 * 8), string2Bytes(hbg * 100, 4 * 8), //项目状态 parseInt('01010010',2) 二进制转成10进制 translateProjects, //当前项目编号 - string2Bytes(xmmcSingleCode ? (xmmcSingleCode*1 + 1) : 0,8), + string2Bytes(xmmcSingleCode ? (xmmcSingleCode * 1 + 1) : 0, 8), //场地设备编号 - ascsbxhArr.map(sbxh => string2Bytes(sbxh,8)[0]), + ascsbxhArr.map(sbxh => string2Bytes(sbxh, 8)[0]), //本次考试行驶距离 - string2Bytes(Math.floor((dcjl + qjjl)/100),2*8), + string2Bytes(Math.floor((dcjl + qjjl) / 100), 2 * 8), //扣分 - string2Bytes(100 - Math.abs(totalScore),2*8), + string2Bytes(100 - Math.abs(totalScore), 2 * 8), //扣分数 //todo扣分值/扣分项 string2Bytes(0, 2 * 8), //扣分项数量 - string2Bytes(kfArr.length,8), + string2Bytes(kfArr.length, 8), //n个扣分序号 - kfArr.map(kf => string2Bytes(kf.kfxh,8)[0]) + kfArr.map(kf => string2Bytes(kf.kfxh, 8)[0]) ] let tempArr = []; - arr.forEach(itemArr =>{ tempArr = tempArr.concat(itemArr)}) + arr.forEach(itemArr => { + tempArr = tempArr.concat(itemArr) + }) this.serialIndex += 1; - console.log('kmkmkm2',tempArr.length) return Array2Byte(tempArr) } @@ -796,87 +947,67 @@ export default class Judge{ getJudgeBeginData = async () => { const {code,name:examinerName} = globalThis.examinerInfo; const {isExam,isTrajectoryOpen} = this; - const judgeUI = this.judgeUI + const judgeUI = this.judgeUI const {projects,carType,isDdxk,ddxkTime,projectsCenterObj,ddxkKsxmArr,ddxkKfArr} = judgeUI; const beginInfo = { - kgid:'012', - kgxm:decodeURI(examinerName || ''), - exam:isExam?1:0, + kgid: '012', + kgxm: decodeURI(examinerName || ''), + exam: isExam ? 1 : 0, //是否回放 - replay:0, + replay: 0, //生成的轨迹文件 - track:'', - xm:judgeUI.name, - sex:0, - kslsh:judgeUI.lsh, - sfzmhm:judgeUI.idCard, - ksyy:'', - kscx:carType, - kkcs:1, - sfyk:0, - ykkkcs:1, + track: '', + xm: judgeUI.name, + sex: 0, + kslsh: judgeUI.lsh, + sfzmhm: judgeUI.idCard, + ksyy: '', + kscx: carType, + kkcs: 1, + sfyk: 0, + ykkkcs: 1, //TODO 考试路线待修改 - wayno:3, - czlx:0, - kskssj:await systemTime.getCurrentTime(), - ksxm:projects.map(project=>{ + wayno: 3, + czlx: 0, + kskssj: await systemTime.getCurrentTime(), + ksxm: projects.map(project => { return { - xmdm:project.projectCode*1, - xmxh:'', + xmdm: project.projectCode * 1, + xmxh: '', } }), //断点续考 - ddxk:isDdxk ? 1 : 0, - ddkssj:ddxkTime, - ykxm:isDdxk?(ddxkKsxmArr?.map(projectCenterCode => (projectsCenterObj[projectCenterCode]?.projectCode)*1)):[], - kfxm:isDdxk?(ddxkKfArr?.map(kf => { - const [xmdm,kfdm] = kf.split(',') + ddxk: isDdxk ? 1 : 0, + ddkssj: ddxkTime, + ykxm: isDdxk ? (ddxkKsxmArr?.map(projectCenterCode => (projectsCenterObj[projectCenterCode]?.projectCode) * 1)) : [], + kfxm: isDdxk ? (ddxkKfArr?.map(kf => { + const [xmdm, kfdm] = kf.split(',') return { - xmdm:xmdm*1, + xmdm: xmdm * 1, kfdm } - })):[], - yklc:0, - special:[], + })) : [], + yklc: 0, + special: [], //TODO 科目三参数临时写死 - sczb:0,sczbkf:[],dmndg:false,nitem1:false,nitem41:false,mfxx:false,mfxxn:false + sczb: 0, + sczbkf: [], + dmndg: false, + nitem1: false, + nitem41: false, + mfxx: false, + mfxxn: false } - console.info(judgeTag,'5.获取开始考试数据完成') + console.info(judgeTag, '5.获取开始考试数据完成') return beginInfo } - // 获取plc数据 - getPlcData = async (plc:string) => { - const {fileLog,mndgStr,rmndg,wav} = this; - await fileLog.setPlcProgressData(plc) - //plc字符串转化成评判初始化数据 - const tempData = await plcStrToJson(plc); - //模拟灯光回放时刻 - tempData.sensor.rmndg = rmndg; - //模拟灯光单个灯光结束时刻 - tempData.sensor.wav = wav; - //模拟灯灯光灯光项目 - tempData.sensor.mndg = mndgStr; - //plc字符串转化成无锡所过程数据 - const wuXiDataStr = await plcStrToWXJson(plc) - this.plcData= tempData - await fileLog.setExamJudgeWuxiProgressData(wuXiDataStr) - this.tempData = tempData - this.plcStr = plc; - this.mndgStr = ''; - this.rmndg = 0; - this.wav = 0; - globalThis.msgStr= plc - - return tempData - } - //获取场地序号 - getSbxh = (ksxm,xmxh) => { + getSbxh = (ksxm, xmxh) => { const {judgeUI} = this; const {cdsbInfoObj,projectsObj} = judgeUI; const project = projectsObj[ksxm] - if(project === undefined){ + if (project === undefined) { return '00000000' } const projectType = project.sbxh; @@ -886,11 +1017,11 @@ export default class Judge{ return sbxh } - getSbbm = (ksxm,xmxh) => { + getSbbm = (ksxm, xmxh) => { const {judgeUI} = this; const {cdsbInfoObj,projectsObj} = judgeUI; const project = projectsObj[ksxm] - if(project === undefined){ + if (project === undefined) { return '00000000' } const projectKey = `${ksxm}_${xmxh}`; @@ -900,26 +1031,26 @@ export default class Judge{ } // 中心所有项目转换 - getTranslateProject = () => { + getTranslateProject = () => { // const {testKmItems} = this; - const tempItems = testKmItems.map(item=>{ + const tempItems = testKmItems.map(item => { const current = this.testKmItems[item.code]; return { - code:item.code, - status:getCenterProjectStatus(current.status) + code: item.code, + status: getCenterProjectStatus(current.status) } }) const len = Math.floor(tempItems.length / 8); const arr = []; - for(let i = 0;i <= len;i++){ - const temp = tempItems.slice( i*8 , (i+1)*8 ); + for (let i = 0; i <= len; i++) { + const temp = tempItems.slice(i * 8, (i + 1) * 8); let tempArr = temp.map(item => item.status) - if(i === 4){ - tempArr = tempArr.concat(['00','00']) + if (i === 4) { + tempArr = tempArr.concat(['00', '00']) } arr.push(tempArr.join('')); } - return arr.map(numStr => parseInt(numStr,2)); + return arr.map(numStr => parseInt(numStr, 2)); } // 获取考试项目详情 @@ -932,133 +1063,93 @@ export default class Judge{ getModelData = (modelName) => { const modelPath = this.modelPath const fileModel = this.fileModel; - const modelData = fileModel.getModelContent(modelPath,modelName); + const modelData = fileModel.getModelContent(modelPath, modelName); return modelData } - // 处理轨迹plc信号 - handleTrajectoryUdp = async (strArr) => { - const {fileLog} = this; - let num = 2; - const judgeTimer = setInterval(async ()=>{ - const msg = JSON.parse(strArr[num]); - await fileLog.setExamJudgeData(msg) - if(!msg){ - console.info(judgeTag,'模拟数据考试结束') - examJudgeEndExam(); - globalThis.windowClass.setWindowSystemBarEnable(['navigation']) - clearInterval(judgeTimer) - return - } - // 4.过程数据 - this.tempData = msg - this.plcData= msg - globalThis.msgStr= '' - await examJudgeRealExam(msg) - num++ - },200) - globalThis.judgeTimer = judgeTimer; - } + //开始评判 + private async judging(callBack: Function) { + const {judgeUI} = this; + const { name, lsh, idCard} = judgeUI; + const fileLog = new FileLog(judgeUI.context); + const filePath = await fileLog.initFileLogo({ + name, lsh, idCard + }); + this.fileLog = fileLog; - // 处理udp plc信号 - handleUdp = async (msg) => { - console.info('plc信号',msg) - const {fileLog,getPlcData} = this - const stachArr= msg.split(',') - const {isEnd} = this; - if (stachArr[0] != '#DN_GD' || isEnd) { + const {getJudgeBeginData,handleUdp,fileUtil,handleTrajectoryUdp,isTrajectoryOpen,trajectoryPath,avPlayer} = this; + const isJudgeInitBool = globalThis.isJudgeInitBool; + let strArr = []; + if (isTrajectoryOpen) { + const folderPath = await this.fileUtil.initFolder(trajectoryPath); + const str = await fileUtil.readFile(folderPath) + strArr = str.split('\n') + } + //日志回调 + console.info(judgeTag, '1.进入评判入口') + await examJudgeSetLogCallback(3, async (level, info, len) => { + console.log('评判日志:' + info) + await fileLog.setExamJudgeLogData(info); + }) + + console.info(judgeTag, '2.注册日志回调完成') + + let initInfo = isTrajectoryOpen ? JSON.parse(strArr[0]) : await this.getJudgeInitData(); + + //相关评判初始化只做一次 + if (!isJudgeInitBool) { + await fileLog.setExamJudgeData(initInfo) + const tempJudge = await examJudgeInit(initInfo); + globalThis.isJudgeInitBool = true + console.info(judgeTag, '4.评判初始化完成') + } else { + await fileLog.setExamJudgeData(initInfo) + } + + globalThis.isJudge = true + // 2.评判过程回调 + await examJudgeSetRealExamCallback(async (strData, len) => { + await fileLog.setExamJudgeCallbackData(strData) + console.info('评判回调数据', strData) + this.handleRealExam(strData, callBack) + }) + + await examJudgeSetPerformCallback(async (info) => { + console.info('评判实时数据', info) + const performInfo = JSON.parse(info) + this.performInfo = performInfo + this.judgeUI.jl = Math.ceil((performInfo.qjjl + performInfo.dcjl) / 100) + }) + + // 3.开始考试 + let beginExamInfo = isTrajectoryOpen ? { + ...JSON.parse(strArr[1]), + replay: 1 + } : await getJudgeBeginData() + + await fileLog.setExamJudgeData(beginExamInfo) + await examJudgeBeginExam(beginExamInfo); + console.info(judgeTag, '6.开始考试注册完成') + + avPlayer.playAudio(['voice/ksks.WAV']) + + await examJudgeMapSetParam(640, 480); //设置参数宽、高 + await examJudgeMapSetScaling(120); //设置缩放比例,一般默认填100(就是100%的意思) ,数字越大视野越大,数字越小视野越小,不能为0 + + this.judgeUI.draw = true + + // 处理轨迹plc信息 + if (isTrajectoryOpen) { + handleTrajectoryUdp(strArr); return } - const plcData = await getPlcData(msg); - // 4.过程数据 - await fileLog.setExamJudgeData(plcData) - await examJudgeRealExam(plcData) - const udpIndex = globalThis.udpIndex; - if(udpIndex % 5 === 0){ - const judgeUdp = globalThis.judgeUdp - const bytes= await this.getMessageHeartbeat(); - judgeUdp.send(bytes) - } - globalThis.udpIndex+=1 + + + // 处理实时udp里的plc信号 + globalThis.udpClient.onMessage(async (msg) => { + handleUdp(msg) + }) + + } - - // 处理特殊参数配置 - handleSEP = async (code:number) => { - const {judgeUI:{judgeConfigObj},avPlayer} = this; - const {examSubject} = globalThis.carInfo; - - switch (code){ - //结束考试方式 - case 306: - if(judgeConfigObj[code] == 5){ - //靠边停车 - avPlayer.playAudio(['voice/406001.mp3']) - } - break; - - - } - } - - private judgeUI - private fileLog - private totalScore:number - private folderPath:string - private modelPath:string - private avPlayer - private carztStr:string - - private rmndg:0 | 1 - private wav:0 | 1 - private mndgStr:string | undefined - - private xmmcStr:string - private xmmcCode:string - private xmmcSingleCode:number - private xmdm:string | number - private xmxh:string - private fileModel:FileModel - private filePhoto:FilePhoto - //是否是考试模式 - private isExam:boolean - //考试是否结束了 - private isEnd:boolean - //UDP服务序列号 - private serialIndex:number - private fileUtil:FileUtil - private judgeTask:JudgeTask - private tempData:any - public plcStr:string - private performInfo:any - private ksjs:{ - // 累计前进距离 - qjjl:number, - // 累计倒车距离 - dcjl:number - } - private kfArr:{ - //项目名称 - xmmcStr:string, - xmdm:string | number, - //扣分描述 - desc:string, - //扣分 - score:string - //无锡所扣分代码 - markcatalog:string - markserial:string - kfxh:string - }[] - private plcData:any - private km2ItemsStatus:any[] - - //所有的科目考试项目(大车&小车) - private testKmItems:any - //当前科目二的考试项目 - private currentKm2ItemsObj:any - //本地轨迹回放地址 - private trajectoryPath:string - private isTrajectoryOpen:boolean; - // 调代理接口是否断网了 - private isJudgeDisConnect:boolean; } \ No newline at end of file diff --git a/entry/src/main/ets/pages/judgeSDK/utils/judge-common.ts b/entry/src/main/ets/pages/judgeSDK/utils/judge-common.ts index c1b69c19..6f4b0c0e 100644 --- a/entry/src/main/ets/pages/judgeSDK/utils/judge-common.ts +++ b/entry/src/main/ets/pages/judgeSDK/utils/judge-common.ts @@ -301,6 +301,56 @@ export const plcStrToWXJson = async (plc:string) =>{ return wuXiDataStr } +export const senorToWXDataStr= async (tempData) => { + const {sensor,gps} = tempData; + const timeStr = await getTimeStr() + + const {mkg,aqd,dh1,dh2, zfxd, yfxd, jgd, ygd,ssc , jsc, lhq, fsc, lb, ygq,wd} = sensor + const judgeSignal = [ + //车门 安全带 熄火 发动机启动 左转向 右转向 前照灯近灯 前照灯远灯 + mkg, aqd, dh1, dh2, zfxd, yfxd, jgd, ygd, + // 注车制动 行车制动 离合器 副制动 喇叭 雨刷 危险报警灯 示廓灯 系统未涉及的传感器信号 + ssc , jsc, lhq, fsc, lb, ygq, 0, 0, 0 + ] + + const judgeAnotherSignal = [ + // 低三挡位 左侧单边桥1 左侧单边桥2 右侧单边桥1 右侧单边桥2 雾灯 + '000', '0', '0', '0', '0', '0',,'0', + // 桩杆全无信号 左后绕车 右后绕车 右前绕车 左前绕车 + '000', '0', '0', '0', '0', '0','0' + ] + //@ts-ignore + const str1 = (judgeSignal.join('')*1).toString(16); + //@ts-ignore + const str2 = (judgeAnotherSignal.join('')*1).toString(16); + + const wuXiData = [ + // 卫星时间 精度 纬度 高度 方位角 俯仰角 速度角 速度 横滚 卫星定位状态 + '$KSXT', timeStr, gps.jd, gps.wd, gps.hbg, gps.hxj, gps.fyj, '0' , gps.sd, '0', gps.dwzt, + //前天线可用星数 后天线可用星数 东向坐标位置 北向位置坐标 天向位置坐标 东向速度 北向速度 天向速度 + '0', '0', '0', '0', '0', '0', '0', '0','0', + //@ts-ignore 评判信号1 评判信号2 发动机转速 + // (judgeSignal.join('')*1).toString(16), (judgeAnotherSignal.join('')*1).toString(16) , sensor.fdjzs, + '0006', '0001' , sensor.fdjzs, + '0xFFFFFFF' + ] + return wuXiData.map(d => (d + '')).join(','); + // console.log('wuXiData',wuXiData.join(',')); +} + +export const getTimeStr = async () =>{ + const date = await systemTime.getDate() + const timeStr = ''; + const Y = date.getFullYear(); + const M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) ; + const D = (date.getDate() < 10 ? '0' + (date.getDate()) : date.getDate()); + const h = (date.getHours() < 10 ? '0' + (date.getHours()) : date.getHours()); + const m = (date.getMinutes() < 10 ? '0' + (date.getMinutes()) : date.getMinutes()); + const s = (date.getSeconds() < 10 ? '0' + (date.getSeconds()) : date.getSeconds()); + const ss = (date.getMilliseconds() +'').slice(0,2); + return timeStr + Y + M +D +h +m +s +'.' + ss +} + //蓝灯 export function sendBlue(){ const arrBlue = [0x55, 0xaa, 0x01, 0x00, 0x02, 0x01, 0x03, 0x00]; diff --git a/entry/src/main/ets/pages/judgeSDK/utils/judge-config.ts b/entry/src/main/ets/pages/judgeSDK/utils/judge-config.ts index 9b6c6287..2e1daa95 100644 --- a/entry/src/main/ets/pages/judgeSDK/utils/judge-config.ts +++ b/entry/src/main/ets/pages/judgeSDK/utils/judge-config.ts @@ -3,15 +3,14 @@ //考试回放开关 export const judgeConfig = { //本地目录开关 - isTrajectoryOpen: false, + isTrajectoryOpen: true, //是否开启Udp udpOpen:false, // 本地模型地址 modelPath: 'models/model_enc', // 轨迹回放地址 - trajectoryPath: 'logs/2024_06_18/0000000000001_342323199501470011_测试学员1_2024_06_18_14_32_25/judge_exam_data.txt' + trajectoryPath: 'logs/2024_06_18/0000000000001_342323199501470011_测试学员1_2024_06_26_10_04_23/judge_exam_data.txt' } - //0000000000001_342323199501470011_测试学员1_2024_04_28_10_59_44 // 模拟灯光轨迹 // test_sub3_car_test_jinan-32038219990808021X-20240417092356.txt diff --git a/entry/src/main/ets/pages/judgeSDK/utils/judge-real.ts b/entry/src/main/ets/pages/judgeSDK/utils/judge-real.ts index 53bb200d..64d3cbe6 100644 --- a/entry/src/main/ets/pages/judgeSDK/utils/judge-real.ts +++ b/entry/src/main/ets/pages/judgeSDK/utils/judge-real.ts @@ -1,11 +1,5 @@ import { - examJudgeSetLogCallback, - examJudgeBeginExam, - examJudgeInit, - examJudgeRealExam, - examJudgeSetRealExamCallback, examJudgeMapSetParam, - examJudgeMapSetDrawing, examJudgeMapSetScaling } from '../api/index' import systemTime from '@ohos.systemDateTime'; diff --git a/entry/src/main/ets/pages/judgeSDK/utils/judge-task.ts b/entry/src/main/ets/pages/judgeSDK/utils/judge-task.ts index 3e9791fd..7925f759 100644 --- a/entry/src/main/ets/pages/judgeSDK/utils/judge-task.ts +++ b/entry/src/main/ets/pages/judgeSDK/utils/judge-task.ts @@ -1,4 +1,5 @@ -import prompt from '@ohos.prompt' +import Prompt from '@system.prompt' + const TAG = 'SURENJUN_JUDGE' export default class JudgeTask{ @@ -17,8 +18,8 @@ export default class JudgeTask{ try { await currentTask(); }catch (e){ - console.info(TAG,'过程数据接口解析错误') - prompt.showToast({ + // console.info(TAG,'过程数据接口解析错误') + Prompt.showToast({ message: '过程数据接口解析错误', duration: 3000 }); diff --git a/entry/src/main/ets/pages/judgeSDK/utils/voice-announcements.ts b/entry/src/main/ets/pages/judgeSDK/utils/voice-announcements.ts index 020bcd7b..16a14643 100644 --- a/entry/src/main/ets/pages/judgeSDK/utils/voice-announcements.ts +++ b/entry/src/main/ets/pages/judgeSDK/utils/voice-announcements.ts @@ -1,5 +1,5 @@ import media from '@ohos.multimedia.media'; -import prompt from '@ohos.prompt'; +import Prompt from '@system.prompt'; const TAG = 'VoiceAnnounce' @@ -84,7 +84,7 @@ class AVPlayer { url = await globalThis.context.resourceManager.getRawFd(name); this.avPlayer.fdSrc = url; } catch (e) { - prompt.showToast({ + Prompt.showToast({ message: `${name}语音文件不存在`, duration: 4000 }); diff --git a/entry/src/main/resources/base/profile/main_pages.json b/entry/src/main/resources/base/profile/main_pages.json index fb7b1d1d..b641324d 100644 --- a/entry/src/main/resources/base/profile/main_pages.json +++ b/entry/src/main/resources/base/profile/main_pages.json @@ -9,7 +9,6 @@ "pages/TerminalInfos", "pages/VideoConfig", "pages/SignDisplay", - "pages/RealTime", "pages/Roads", "pages/Judge" ], diff --git a/entry/src/main/resources/rawfile/voice/10_01.mp3 b/entry/src/main/resources/rawfile/voice/10_01.mp3 new file mode 100644 index 00000000..e0af207b Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/10_01.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/10_02.mp3 b/entry/src/main/resources/rawfile/voice/10_02.mp3 new file mode 100644 index 00000000..15dff697 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/10_02.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/10_03.mp3 b/entry/src/main/resources/rawfile/voice/10_03.mp3 new file mode 100644 index 00000000..ea426686 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/10_03.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/10_04.mp3 b/entry/src/main/resources/rawfile/voice/10_04.mp3 new file mode 100644 index 00000000..b8d81bc0 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/10_04.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/10_05.mp3 b/entry/src/main/resources/rawfile/voice/10_05.mp3 new file mode 100644 index 00000000..656c738f Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/10_05.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/10_06.mp3 b/entry/src/main/resources/rawfile/voice/10_06.mp3 new file mode 100644 index 00000000..a0d6922f Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/10_06.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/10_101.mp3 b/entry/src/main/resources/rawfile/voice/10_101.mp3 new file mode 100644 index 00000000..f3590141 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/10_101.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/10_102.mp3 b/entry/src/main/resources/rawfile/voice/10_102.mp3 new file mode 100644 index 00000000..682428c1 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/10_102.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/10_103.mp3 b/entry/src/main/resources/rawfile/voice/10_103.mp3 new file mode 100644 index 00000000..b19f047c Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/10_103.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/10_104.mp3 b/entry/src/main/resources/rawfile/voice/10_104.mp3 new file mode 100644 index 00000000..e9d45baf Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/10_104.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/10_105.mp3 b/entry/src/main/resources/rawfile/voice/10_105.mp3 new file mode 100644 index 00000000..e50e4053 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/10_105.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/10_106.mp3 b/entry/src/main/resources/rawfile/voice/10_106.mp3 new file mode 100644 index 00000000..5363554a Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/10_106.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/10_107.mp3 b/entry/src/main/resources/rawfile/voice/10_107.mp3 new file mode 100644 index 00000000..1d7cc83a Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/10_107.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/10_41.mp3 b/entry/src/main/resources/rawfile/voice/10_41.mp3 new file mode 100644 index 00000000..281d01e3 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/10_41.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/10_42.mp3 b/entry/src/main/resources/rawfile/voice/10_42.mp3 new file mode 100644 index 00000000..1a950a38 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/10_42.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/10_43.mp3 b/entry/src/main/resources/rawfile/voice/10_43.mp3 new file mode 100644 index 00000000..df0a4afd Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/10_43.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/11_01.mp3 b/entry/src/main/resources/rawfile/voice/11_01.mp3 new file mode 100644 index 00000000..fe31351c Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/11_01.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/11_02.mp3 b/entry/src/main/resources/rawfile/voice/11_02.mp3 new file mode 100644 index 00000000..470b470f Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/11_02.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/11_03.mp3 b/entry/src/main/resources/rawfile/voice/11_03.mp3 new file mode 100644 index 00000000..77c84efe Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/11_03.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/11_04.mp3 b/entry/src/main/resources/rawfile/voice/11_04.mp3 new file mode 100644 index 00000000..973be526 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/11_04.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/11_05.mp3 b/entry/src/main/resources/rawfile/voice/11_05.mp3 new file mode 100644 index 00000000..51dd523f Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/11_05.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/11_06.mp3 b/entry/src/main/resources/rawfile/voice/11_06.mp3 new file mode 100644 index 00000000..4e4bf09d Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/11_06.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/11_07.mp3 b/entry/src/main/resources/rawfile/voice/11_07.mp3 new file mode 100644 index 00000000..f2412b8a Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/11_07.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/11_08.mp3 b/entry/src/main/resources/rawfile/voice/11_08.mp3 new file mode 100644 index 00000000..001d5445 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/11_08.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/11_09.mp3 b/entry/src/main/resources/rawfile/voice/11_09.mp3 new file mode 100644 index 00000000..1853f821 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/11_09.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/11_10.mp3 b/entry/src/main/resources/rawfile/voice/11_10.mp3 new file mode 100644 index 00000000..c1f5b26d Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/11_10.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/11_101.mp3 b/entry/src/main/resources/rawfile/voice/11_101.mp3 new file mode 100644 index 00000000..831e986e Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/11_101.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/11_102.mp3 b/entry/src/main/resources/rawfile/voice/11_102.mp3 new file mode 100644 index 00000000..50617871 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/11_102.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/11_41.mp3 b/entry/src/main/resources/rawfile/voice/11_41.mp3 new file mode 100644 index 00000000..bb7ebc30 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/11_41.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/11_42.mp3 b/entry/src/main/resources/rawfile/voice/11_42.mp3 new file mode 100644 index 00000000..cc48b0e1 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/11_42.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/11_43.mp3 b/entry/src/main/resources/rawfile/voice/11_43.mp3 new file mode 100644 index 00000000..4d6ee7e3 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/11_43.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/11_44.mp3 b/entry/src/main/resources/rawfile/voice/11_44.mp3 new file mode 100644 index 00000000..d25ae129 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/11_44.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/12_01.mp3 b/entry/src/main/resources/rawfile/voice/12_01.mp3 new file mode 100644 index 00000000..06a02afc Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/12_01.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/12_02.mp3 b/entry/src/main/resources/rawfile/voice/12_02.mp3 new file mode 100644 index 00000000..f9123c0e Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/12_02.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/12_04.mp3 b/entry/src/main/resources/rawfile/voice/12_04.mp3 new file mode 100644 index 00000000..be928aee Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/12_04.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/12_101.mp3 b/entry/src/main/resources/rawfile/voice/12_101.mp3 new file mode 100644 index 00000000..06a02afc Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/12_101.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/12_102.mp3 b/entry/src/main/resources/rawfile/voice/12_102.mp3 new file mode 100644 index 00000000..f9123c0e Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/12_102.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/12_103.mp3 b/entry/src/main/resources/rawfile/voice/12_103.mp3 new file mode 100644 index 00000000..be928aee Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/12_103.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/12_104.mp3 b/entry/src/main/resources/rawfile/voice/12_104.mp3 new file mode 100644 index 00000000..43968320 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/12_104.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/12_41.mp3 b/entry/src/main/resources/rawfile/voice/12_41.mp3 new file mode 100644 index 00000000..43968320 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/12_41.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/12_42.mp3 b/entry/src/main/resources/rawfile/voice/12_42.mp3 new file mode 100644 index 00000000..659fb164 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/12_42.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/12_44.mp3 b/entry/src/main/resources/rawfile/voice/12_44.mp3 new file mode 100644 index 00000000..f33feb10 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/12_44.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/12_45.mp3 b/entry/src/main/resources/rawfile/voice/12_45.mp3 new file mode 100644 index 00000000..48507d9f Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/12_45.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/12_46.mp3 b/entry/src/main/resources/rawfile/voice/12_46.mp3 new file mode 100644 index 00000000..aabefd3f Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/12_46.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/13_01.mp3 b/entry/src/main/resources/rawfile/voice/13_01.mp3 new file mode 100644 index 00000000..2ec402ff Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/13_01.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/13_02.mp3 b/entry/src/main/resources/rawfile/voice/13_02.mp3 new file mode 100644 index 00000000..86623949 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/13_02.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/13_03.mp3 b/entry/src/main/resources/rawfile/voice/13_03.mp3 new file mode 100644 index 00000000..b5af70ad Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/13_03.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/13_04.mp3 b/entry/src/main/resources/rawfile/voice/13_04.mp3 new file mode 100644 index 00000000..12a7d700 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/13_04.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/13_05.mp3 b/entry/src/main/resources/rawfile/voice/13_05.mp3 new file mode 100644 index 00000000..f292a7b1 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/13_05.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/13_06.mp3 b/entry/src/main/resources/rawfile/voice/13_06.mp3 new file mode 100644 index 00000000..fa2df110 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/13_06.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/13_08.mp3 b/entry/src/main/resources/rawfile/voice/13_08.mp3 new file mode 100644 index 00000000..116a9053 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/13_08.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/13_09.mp3 b/entry/src/main/resources/rawfile/voice/13_09.mp3 new file mode 100644 index 00000000..b94b00df Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/13_09.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/13_101.mp3 b/entry/src/main/resources/rawfile/voice/13_101.mp3 new file mode 100644 index 00000000..86623949 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/13_101.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/13_102.mp3 b/entry/src/main/resources/rawfile/voice/13_102.mp3 new file mode 100644 index 00000000..12a7d700 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/13_102.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/13_103.mp3 b/entry/src/main/resources/rawfile/voice/13_103.mp3 new file mode 100644 index 00000000..de342d47 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/13_103.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/14_01.mp3 b/entry/src/main/resources/rawfile/voice/14_01.mp3 new file mode 100644 index 00000000..1aaaf668 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/14_01.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/14_02.mp3 b/entry/src/main/resources/rawfile/voice/14_02.mp3 new file mode 100644 index 00000000..027fb561 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/14_02.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/14_66.mp3 b/entry/src/main/resources/rawfile/voice/14_66.mp3 new file mode 100644 index 00000000..d6ff7f76 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/14_66.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/14_67.mp3 b/entry/src/main/resources/rawfile/voice/14_67.mp3 new file mode 100644 index 00000000..c0243cfc Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/14_67.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/14_68.mp3 b/entry/src/main/resources/rawfile/voice/14_68.mp3 new file mode 100644 index 00000000..83aa4b86 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/14_68.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/14_71.mp3 b/entry/src/main/resources/rawfile/voice/14_71.mp3 new file mode 100644 index 00000000..cb1ce767 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/14_71.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/14_72.mp3 b/entry/src/main/resources/rawfile/voice/14_72.mp3 new file mode 100644 index 00000000..ac400e1c Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/14_72.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/14_82.mp3 b/entry/src/main/resources/rawfile/voice/14_82.mp3 new file mode 100644 index 00000000..32d831cf Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/14_82.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/14_90.mp3 b/entry/src/main/resources/rawfile/voice/14_90.mp3 new file mode 100644 index 00000000..d423756a Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/14_90.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/14_91.mp3 b/entry/src/main/resources/rawfile/voice/14_91.mp3 new file mode 100644 index 00000000..3a6e0eb5 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/14_91.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/15_01.mp3 b/entry/src/main/resources/rawfile/voice/15_01.mp3 new file mode 100644 index 00000000..188557b0 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/15_01.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/15_02.mp3 b/entry/src/main/resources/rawfile/voice/15_02.mp3 new file mode 100644 index 00000000..f345e9f6 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/15_02.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/15_03.mp3 b/entry/src/main/resources/rawfile/voice/15_03.mp3 new file mode 100644 index 00000000..57871cf7 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/15_03.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/15_04.mp3 b/entry/src/main/resources/rawfile/voice/15_04.mp3 new file mode 100644 index 00000000..ffc79358 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/15_04.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/15_05.mp3 b/entry/src/main/resources/rawfile/voice/15_05.mp3 new file mode 100644 index 00000000..7e220101 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/15_05.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/15_06.mp3 b/entry/src/main/resources/rawfile/voice/15_06.mp3 new file mode 100644 index 00000000..b924c35d Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/15_06.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/15_101.mp3 b/entry/src/main/resources/rawfile/voice/15_101.mp3 new file mode 100644 index 00000000..15267ed6 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/15_101.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/15_102.mp3 b/entry/src/main/resources/rawfile/voice/15_102.mp3 new file mode 100644 index 00000000..b92282dc Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/15_102.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/15_103.mp3 b/entry/src/main/resources/rawfile/voice/15_103.mp3 new file mode 100644 index 00000000..8f29b1db Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/15_103.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/15_41.mp3 b/entry/src/main/resources/rawfile/voice/15_41.mp3 new file mode 100644 index 00000000..a0532bfd Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/15_41.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/15_42.mp3 b/entry/src/main/resources/rawfile/voice/15_42.mp3 new file mode 100644 index 00000000..9ee51b85 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/15_42.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/15_43.mp3 b/entry/src/main/resources/rawfile/voice/15_43.mp3 new file mode 100644 index 00000000..6716e12e Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/15_43.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/15_44.mp3 b/entry/src/main/resources/rawfile/voice/15_44.mp3 new file mode 100644 index 00000000..f33feb10 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/15_44.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/15_45.mp3 b/entry/src/main/resources/rawfile/voice/15_45.mp3 new file mode 100644 index 00000000..48507d9f Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/15_45.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/16_01.mp3 b/entry/src/main/resources/rawfile/voice/16_01.mp3 new file mode 100644 index 00000000..803d55aa Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/16_01.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/16_02.mp3 b/entry/src/main/resources/rawfile/voice/16_02.mp3 new file mode 100644 index 00000000..f345e9f6 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/16_02.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/16_03.mp3 b/entry/src/main/resources/rawfile/voice/16_03.mp3 new file mode 100644 index 00000000..73eea05e Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/16_03.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/16_04.mp3 b/entry/src/main/resources/rawfile/voice/16_04.mp3 new file mode 100644 index 00000000..ffc79358 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/16_04.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/16_06.mp3 b/entry/src/main/resources/rawfile/voice/16_06.mp3 new file mode 100644 index 00000000..b924c35d Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/16_06.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/16_101.mp3 b/entry/src/main/resources/rawfile/voice/16_101.mp3 new file mode 100644 index 00000000..039696dd Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/16_101.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/16_102.mp3 b/entry/src/main/resources/rawfile/voice/16_102.mp3 new file mode 100644 index 00000000..b924c35d Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/16_102.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/16_103.mp3 b/entry/src/main/resources/rawfile/voice/16_103.mp3 new file mode 100644 index 00000000..ffc79358 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/16_103.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/16_41.mp3 b/entry/src/main/resources/rawfile/voice/16_41.mp3 new file mode 100644 index 00000000..78cb0b2e Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/16_41.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/16_42.mp3 b/entry/src/main/resources/rawfile/voice/16_42.mp3 new file mode 100644 index 00000000..9ee51b85 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/16_42.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/16_43.mp3 b/entry/src/main/resources/rawfile/voice/16_43.mp3 new file mode 100644 index 00000000..6716e12e Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/16_43.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/16_44.mp3 b/entry/src/main/resources/rawfile/voice/16_44.mp3 new file mode 100644 index 00000000..f33feb10 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/16_44.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/16_45.mp3 b/entry/src/main/resources/rawfile/voice/16_45.mp3 new file mode 100644 index 00000000..48507d9f Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/16_45.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/1_01.mp3 b/entry/src/main/resources/rawfile/voice/1_01.mp3 new file mode 100644 index 00000000..23be94b6 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/1_01.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/1_101.mp3 b/entry/src/main/resources/rawfile/voice/1_101.mp3 new file mode 100644 index 00000000..c9b1636e Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/1_101.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/1号线.mp3 b/entry/src/main/resources/rawfile/voice/1号线.mp3 new file mode 100644 index 00000000..9b0e7b41 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/1号线.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/20_01.mp3 b/entry/src/main/resources/rawfile/voice/20_01.mp3 new file mode 100644 index 00000000..922620b2 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/20_01.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/20_05.mp3 b/entry/src/main/resources/rawfile/voice/20_05.mp3 new file mode 100644 index 00000000..d9a1d541 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/20_05.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/20_06.mp3 b/entry/src/main/resources/rawfile/voice/20_06.mp3 new file mode 100644 index 00000000..9a05100e Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/20_06.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/20_101.mp3 b/entry/src/main/resources/rawfile/voice/20_101.mp3 new file mode 100644 index 00000000..28d73cd5 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/20_101.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/20_102.mp3 b/entry/src/main/resources/rawfile/voice/20_102.mp3 new file mode 100644 index 00000000..12eebe2a Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/20_102.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/20_103.mp3 b/entry/src/main/resources/rawfile/voice/20_103.mp3 new file mode 100644 index 00000000..a934e087 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/20_103.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/20_104.mp3 b/entry/src/main/resources/rawfile/voice/20_104.mp3 new file mode 100644 index 00000000..f3166bc1 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/20_104.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/20_105.mp3 b/entry/src/main/resources/rawfile/voice/20_105.mp3 new file mode 100644 index 00000000..cddd078d Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/20_105.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/20_106.mp3 b/entry/src/main/resources/rawfile/voice/20_106.mp3 new file mode 100644 index 00000000..bcb88f5f Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/20_106.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/20_107.mp3 b/entry/src/main/resources/rawfile/voice/20_107.mp3 new file mode 100644 index 00000000..5a624d18 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/20_107.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/20_108.mp3 b/entry/src/main/resources/rawfile/voice/20_108.mp3 new file mode 100644 index 00000000..d46a57de Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/20_108.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/20_109.mp3 b/entry/src/main/resources/rawfile/voice/20_109.mp3 new file mode 100644 index 00000000..4b268115 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/20_109.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/20_11.mp3 b/entry/src/main/resources/rawfile/voice/20_11.mp3 new file mode 100644 index 00000000..1eabeb0b Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/20_11.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/20_110.mp3 b/entry/src/main/resources/rawfile/voice/20_110.mp3 new file mode 100644 index 00000000..21f1a113 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/20_110.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/20_111.mp3 b/entry/src/main/resources/rawfile/voice/20_111.mp3 new file mode 100644 index 00000000..453c4999 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/20_111.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/20_112.mp3 b/entry/src/main/resources/rawfile/voice/20_112.mp3 new file mode 100644 index 00000000..be201ec8 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/20_112.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/20_113.mp3 b/entry/src/main/resources/rawfile/voice/20_113.mp3 new file mode 100644 index 00000000..875f2329 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/20_113.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/20_114.mp3 b/entry/src/main/resources/rawfile/voice/20_114.mp3 new file mode 100644 index 00000000..921b204c Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/20_114.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/20_115.mp3 b/entry/src/main/resources/rawfile/voice/20_115.mp3 new file mode 100644 index 00000000..8c99fdaf Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/20_115.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/20_116.mp3 b/entry/src/main/resources/rawfile/voice/20_116.mp3 new file mode 100644 index 00000000..a99f0465 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/20_116.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/20_117.mp3 b/entry/src/main/resources/rawfile/voice/20_117.mp3 new file mode 100644 index 00000000..76397382 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/20_117.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/20_118.mp3 b/entry/src/main/resources/rawfile/voice/20_118.mp3 new file mode 100644 index 00000000..ba1e60ba Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/20_118.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/20_119.mp3 b/entry/src/main/resources/rawfile/voice/20_119.mp3 new file mode 100644 index 00000000..24b9f266 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/20_119.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/20_120.mp3 b/entry/src/main/resources/rawfile/voice/20_120.mp3 new file mode 100644 index 00000000..a37414ae Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/20_120.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/20_121.mp3 b/entry/src/main/resources/rawfile/voice/20_121.mp3 new file mode 100644 index 00000000..7b6793bd Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/20_121.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/20_122.mp3 b/entry/src/main/resources/rawfile/voice/20_122.mp3 new file mode 100644 index 00000000..2313d088 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/20_122.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/20_123.mp3 b/entry/src/main/resources/rawfile/voice/20_123.mp3 new file mode 100644 index 00000000..5ac0781d Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/20_123.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/20_124.mp3 b/entry/src/main/resources/rawfile/voice/20_124.mp3 new file mode 100644 index 00000000..591bba73 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/20_124.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/20_125.mp3 b/entry/src/main/resources/rawfile/voice/20_125.mp3 new file mode 100644 index 00000000..d7b49884 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/20_125.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/20_126.mp3 b/entry/src/main/resources/rawfile/voice/20_126.mp3 new file mode 100644 index 00000000..79391d3c Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/20_126.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/20_127.mp3 b/entry/src/main/resources/rawfile/voice/20_127.mp3 new file mode 100644 index 00000000..d25ae129 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/20_127.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/20_128.mp3 b/entry/src/main/resources/rawfile/voice/20_128.mp3 new file mode 100644 index 00000000..8982f51f Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/20_128.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/20_129.mp3 b/entry/src/main/resources/rawfile/voice/20_129.mp3 new file mode 100644 index 00000000..922620b2 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/20_129.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/20_132.mp3 b/entry/src/main/resources/rawfile/voice/20_132.mp3 new file mode 100644 index 00000000..b73233dd Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/20_132.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/20_15.mp3 b/entry/src/main/resources/rawfile/voice/20_15.mp3 new file mode 100644 index 00000000..f2097dee Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/20_15.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/20_35.mp3 b/entry/src/main/resources/rawfile/voice/20_35.mp3 new file mode 100644 index 00000000..d7b49884 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/20_35.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/20_36.mp3 b/entry/src/main/resources/rawfile/voice/20_36.mp3 new file mode 100644 index 00000000..25207dc5 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/20_36.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/20_39.mp3 b/entry/src/main/resources/rawfile/voice/20_39.mp3 new file mode 100644 index 00000000..5ac0781d Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/20_39.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/20_40.mp3 b/entry/src/main/resources/rawfile/voice/20_40.mp3 new file mode 100644 index 00000000..d256e15d Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/20_40.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/20_41.mp3 b/entry/src/main/resources/rawfile/voice/20_41.mp3 new file mode 100644 index 00000000..6dffb53e Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/20_41.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/20_42.mp3 b/entry/src/main/resources/rawfile/voice/20_42.mp3 new file mode 100644 index 00000000..12960014 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/20_42.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/20_43.mp3 b/entry/src/main/resources/rawfile/voice/20_43.mp3 new file mode 100644 index 00000000..875f2329 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/20_43.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/20_44.mp3 b/entry/src/main/resources/rawfile/voice/20_44.mp3 new file mode 100644 index 00000000..d25ae129 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/20_44.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/20_45.mp3 b/entry/src/main/resources/rawfile/voice/20_45.mp3 new file mode 100644 index 00000000..fc4c9a99 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/20_45.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/20_46.mp3 b/entry/src/main/resources/rawfile/voice/20_46.mp3 new file mode 100644 index 00000000..9d44a17a Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/20_46.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/20_51.mp3 b/entry/src/main/resources/rawfile/voice/20_51.mp3 new file mode 100644 index 00000000..100e3a56 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/20_51.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/20_52.mp3 b/entry/src/main/resources/rawfile/voice/20_52.mp3 new file mode 100644 index 00000000..e897bf8c Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/20_52.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/20_53.mp3 b/entry/src/main/resources/rawfile/voice/20_53.mp3 new file mode 100644 index 00000000..2c165b13 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/20_53.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/20_54.mp3 b/entry/src/main/resources/rawfile/voice/20_54.mp3 new file mode 100644 index 00000000..d23723d4 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/20_54.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/20_55.mp3 b/entry/src/main/resources/rawfile/voice/20_55.mp3 new file mode 100644 index 00000000..bad59020 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/20_55.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/20_56.mp3 b/entry/src/main/resources/rawfile/voice/20_56.mp3 new file mode 100644 index 00000000..a04887fe Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/20_56.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/20_57.mp3 b/entry/src/main/resources/rawfile/voice/20_57.mp3 new file mode 100644 index 00000000..2e75ea12 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/20_57.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/20_58.mp3 b/entry/src/main/resources/rawfile/voice/20_58.mp3 new file mode 100644 index 00000000..1eb69281 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/20_58.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/20_59.mp3 b/entry/src/main/resources/rawfile/voice/20_59.mp3 new file mode 100644 index 00000000..d102e5a0 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/20_59.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/20_60.mp3 b/entry/src/main/resources/rawfile/voice/20_60.mp3 new file mode 100644 index 00000000..39781ed5 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/20_60.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/20_61.mp3 b/entry/src/main/resources/rawfile/voice/20_61.mp3 new file mode 100644 index 00000000..12eebe2a Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/20_61.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/20_62.mp3 b/entry/src/main/resources/rawfile/voice/20_62.mp3 new file mode 100644 index 00000000..8c99fdaf Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/20_62.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/20_63.mp3 b/entry/src/main/resources/rawfile/voice/20_63.mp3 new file mode 100644 index 00000000..a934e087 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/20_63.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/20_64.mp3 b/entry/src/main/resources/rawfile/voice/20_64.mp3 new file mode 100644 index 00000000..a99f0465 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/20_64.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/20_65.mp3 b/entry/src/main/resources/rawfile/voice/20_65.mp3 new file mode 100644 index 00000000..551627a8 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/20_65.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/20_66.mp3 b/entry/src/main/resources/rawfile/voice/20_66.mp3 new file mode 100644 index 00000000..e542dbfc Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/20_66.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/20_67.mp3 b/entry/src/main/resources/rawfile/voice/20_67.mp3 new file mode 100644 index 00000000..76397382 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/20_67.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/20_70.mp3 b/entry/src/main/resources/rawfile/voice/20_70.mp3 new file mode 100644 index 00000000..01b093e3 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/20_70.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/20_73.mp3 b/entry/src/main/resources/rawfile/voice/20_73.mp3 new file mode 100644 index 00000000..67d5a99b Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/20_73.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/20_75.mp3 b/entry/src/main/resources/rawfile/voice/20_75.mp3 new file mode 100644 index 00000000..188068be Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/20_75.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/20_76.mp3 b/entry/src/main/resources/rawfile/voice/20_76.mp3 new file mode 100644 index 00000000..be201ec8 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/20_76.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/20_77.mp3 b/entry/src/main/resources/rawfile/voice/20_77.mp3 new file mode 100644 index 00000000..b73233dd Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/20_77.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/20_78.mp3 b/entry/src/main/resources/rawfile/voice/20_78.mp3 new file mode 100644 index 00000000..24b9f266 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/20_78.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/20_79.mp3 b/entry/src/main/resources/rawfile/voice/20_79.mp3 new file mode 100644 index 00000000..3cc653f8 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/20_79.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/20_80.mp3 b/entry/src/main/resources/rawfile/voice/20_80.mp3 new file mode 100644 index 00000000..fac16dca Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/20_80.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/20_81.mp3 b/entry/src/main/resources/rawfile/voice/20_81.mp3 new file mode 100644 index 00000000..df490e38 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/20_81.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/20_83.mp3 b/entry/src/main/resources/rawfile/voice/20_83.mp3 new file mode 100644 index 00000000..d53de119 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/20_83.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/20_84.mp3 b/entry/src/main/resources/rawfile/voice/20_84.mp3 new file mode 100644 index 00000000..ea71b2c6 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/20_84.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/20_85.mp3 b/entry/src/main/resources/rawfile/voice/20_85.mp3 new file mode 100644 index 00000000..9740a893 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/20_85.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/20_86.mp3 b/entry/src/main/resources/rawfile/voice/20_86.mp3 new file mode 100644 index 00000000..7852bb56 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/20_86.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/20_87.mp3 b/entry/src/main/resources/rawfile/voice/20_87.mp3 new file mode 100644 index 00000000..81fb650b Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/20_87.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/20_88.mp3 b/entry/src/main/resources/rawfile/voice/20_88.mp3 new file mode 100644 index 00000000..3890ae09 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/20_88.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/20_89.mp3 b/entry/src/main/resources/rawfile/voice/20_89.mp3 new file mode 100644 index 00000000..69053940 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/20_89.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/20_90.mp3 b/entry/src/main/resources/rawfile/voice/20_90.mp3 new file mode 100644 index 00000000..bf80aba0 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/20_90.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/20_91.mp3 b/entry/src/main/resources/rawfile/voice/20_91.mp3 new file mode 100644 index 00000000..b8b05f08 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/20_91.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/20_92.mp3 b/entry/src/main/resources/rawfile/voice/20_92.mp3 new file mode 100644 index 00000000..ef66de29 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/20_92.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/20_93.mp3 b/entry/src/main/resources/rawfile/voice/20_93.mp3 new file mode 100644 index 00000000..28d73cd5 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/20_93.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/20_94.mp3 b/entry/src/main/resources/rawfile/voice/20_94.mp3 new file mode 100644 index 00000000..d5694b05 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/20_94.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/20_95.mp3 b/entry/src/main/resources/rawfile/voice/20_95.mp3 new file mode 100644 index 00000000..00039d54 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/20_95.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/20_97.mp3 b/entry/src/main/resources/rawfile/voice/20_97.mp3 new file mode 100644 index 00000000..bac80095 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/20_97.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/2_01.mp3 b/entry/src/main/resources/rawfile/voice/2_01.mp3 new file mode 100644 index 00000000..d35132a3 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/2_01.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/2_02.mp3 b/entry/src/main/resources/rawfile/voice/2_02.mp3 new file mode 100644 index 00000000..cdea6cc4 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/2_02.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/2_03.mp3 b/entry/src/main/resources/rawfile/voice/2_03.mp3 new file mode 100644 index 00000000..e9b657a1 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/2_03.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/2_04.mp3 b/entry/src/main/resources/rawfile/voice/2_04.mp3 new file mode 100644 index 00000000..e915ea46 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/2_04.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/2_05.mp3 b/entry/src/main/resources/rawfile/voice/2_05.mp3 new file mode 100644 index 00000000..700dba61 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/2_05.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/2_06.mp3 b/entry/src/main/resources/rawfile/voice/2_06.mp3 new file mode 100644 index 00000000..fb389d77 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/2_06.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/2_07.mp3 b/entry/src/main/resources/rawfile/voice/2_07.mp3 new file mode 100644 index 00000000..db211077 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/2_07.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/2_08.mp3 b/entry/src/main/resources/rawfile/voice/2_08.mp3 new file mode 100644 index 00000000..59bd73f3 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/2_08.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/2_09.mp3 b/entry/src/main/resources/rawfile/voice/2_09.mp3 new file mode 100644 index 00000000..8667b7de Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/2_09.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/2_10.mp3 b/entry/src/main/resources/rawfile/voice/2_10.mp3 new file mode 100644 index 00000000..f88710d3 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/2_10.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/2_101.mp3 b/entry/src/main/resources/rawfile/voice/2_101.mp3 new file mode 100644 index 00000000..f2a363f6 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/2_101.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/2_102.mp3 b/entry/src/main/resources/rawfile/voice/2_102.mp3 new file mode 100644 index 00000000..db211077 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/2_102.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/2_103.mp3 b/entry/src/main/resources/rawfile/voice/2_103.mp3 new file mode 100644 index 00000000..abd08fdc Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/2_103.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/2_105.mp3 b/entry/src/main/resources/rawfile/voice/2_105.mp3 new file mode 100644 index 00000000..dd8e9936 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/2_105.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/2_115.mp3 b/entry/src/main/resources/rawfile/voice/2_115.mp3 new file mode 100644 index 00000000..fb389d77 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/2_115.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/2_42.mp3 b/entry/src/main/resources/rawfile/voice/2_42.mp3 new file mode 100644 index 00000000..2ae2f00c Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/2_42.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/2_43.mp3 b/entry/src/main/resources/rawfile/voice/2_43.mp3 new file mode 100644 index 00000000..9b1063cf Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/2_43.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/2_44.mp3 b/entry/src/main/resources/rawfile/voice/2_44.mp3 new file mode 100644 index 00000000..f053eb04 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/2_44.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/2_46.mp3 b/entry/src/main/resources/rawfile/voice/2_46.mp3 new file mode 100644 index 00000000..f2675a37 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/2_46.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/2_47.mp3 b/entry/src/main/resources/rawfile/voice/2_47.mp3 new file mode 100644 index 00000000..de27d993 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/2_47.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/2_48.mp3 b/entry/src/main/resources/rawfile/voice/2_48.mp3 new file mode 100644 index 00000000..dd8e9936 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/2_48.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/2_50.mp3 b/entry/src/main/resources/rawfile/voice/2_50.mp3 new file mode 100644 index 00000000..abd08fdc Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/2_50.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/2号线.mp3 b/entry/src/main/resources/rawfile/voice/2号线.mp3 new file mode 100644 index 00000000..9291db04 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/2号线.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/300001.mp3 b/entry/src/main/resources/rawfile/voice/300001.mp3 new file mode 100644 index 00000000..88dc2733 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/300001.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/300001_1.mp3 b/entry/src/main/resources/rawfile/voice/300001_1.mp3 new file mode 100644 index 00000000..7d014469 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/300001_1.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/300002.mp3 b/entry/src/main/resources/rawfile/voice/300002.mp3 new file mode 100644 index 00000000..88dc2733 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/300002.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/300002_1.mp3 b/entry/src/main/resources/rawfile/voice/300002_1.mp3 new file mode 100644 index 00000000..7d014469 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/300002_1.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/300003.mp3 b/entry/src/main/resources/rawfile/voice/300003.mp3 new file mode 100644 index 00000000..88dc2733 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/300003.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/300003_1.mp3 b/entry/src/main/resources/rawfile/voice/300003_1.mp3 new file mode 100644 index 00000000..7d014469 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/300003_1.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/300004.mp3 b/entry/src/main/resources/rawfile/voice/300004.mp3 new file mode 100644 index 00000000..7d014469 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/300004.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/30105.mp3 b/entry/src/main/resources/rawfile/voice/30105.mp3 index 8dbbb98d..7c4b3a5a 100644 Binary files a/entry/src/main/resources/rawfile/voice/30105.mp3 and b/entry/src/main/resources/rawfile/voice/30105.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/3_01.mp3 b/entry/src/main/resources/rawfile/voice/3_01.mp3 new file mode 100644 index 00000000..efa3d42d Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/3_01.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/3_02.mp3 b/entry/src/main/resources/rawfile/voice/3_02.mp3 new file mode 100644 index 00000000..4e8956fd Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/3_02.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/3_03.mp3 b/entry/src/main/resources/rawfile/voice/3_03.mp3 new file mode 100644 index 00000000..9ab9020d Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/3_03.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/3_04.mp3 b/entry/src/main/resources/rawfile/voice/3_04.mp3 new file mode 100644 index 00000000..da0aea42 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/3_04.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/3_05.mp3 b/entry/src/main/resources/rawfile/voice/3_05.mp3 new file mode 100644 index 00000000..f9ddac58 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/3_05.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/3_101.mp3 b/entry/src/main/resources/rawfile/voice/3_101.mp3 new file mode 100644 index 00000000..4e8956fd Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/3_101.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/3_102.mp3 b/entry/src/main/resources/rawfile/voice/3_102.mp3 new file mode 100644 index 00000000..e0392d8e Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/3_102.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/3_103.mp3 b/entry/src/main/resources/rawfile/voice/3_103.mp3 new file mode 100644 index 00000000..cf632c21 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/3_103.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/3号线.mp3 b/entry/src/main/resources/rawfile/voice/3号线.mp3 new file mode 100644 index 00000000..3eb918d1 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/3号线.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/401001.mp3 b/entry/src/main/resources/rawfile/voice/401001.mp3 index f9e5a363..c1486223 100644 Binary files a/entry/src/main/resources/rawfile/voice/401001.mp3 and b/entry/src/main/resources/rawfile/voice/401001.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/401002.mp3 b/entry/src/main/resources/rawfile/voice/401002.mp3 index 6188ca01..0fbc4799 100644 Binary files a/entry/src/main/resources/rawfile/voice/401002.mp3 and b/entry/src/main/resources/rawfile/voice/401002.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/401003.mp3 b/entry/src/main/resources/rawfile/voice/401003.mp3 index 371188be..ddc9d5b2 100644 Binary files a/entry/src/main/resources/rawfile/voice/401003.mp3 and b/entry/src/main/resources/rawfile/voice/401003.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/401004.mp3 b/entry/src/main/resources/rawfile/voice/401004.mp3 index 7bdfe74a..0f74066b 100644 Binary files a/entry/src/main/resources/rawfile/voice/401004.mp3 and b/entry/src/main/resources/rawfile/voice/401004.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/402001.mp3 b/entry/src/main/resources/rawfile/voice/402001.mp3 index fa4f7222..ab7ce0e1 100644 Binary files a/entry/src/main/resources/rawfile/voice/402001.mp3 and b/entry/src/main/resources/rawfile/voice/402001.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/40203.mp3 b/entry/src/main/resources/rawfile/voice/40203.mp3 index ab576a7a..ed039ceb 100644 Binary files a/entry/src/main/resources/rawfile/voice/40203.mp3 and b/entry/src/main/resources/rawfile/voice/40203.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/403001.mp3 b/entry/src/main/resources/rawfile/voice/403001.mp3 index 10031716..2cdf14a3 100644 Binary files a/entry/src/main/resources/rawfile/voice/403001.mp3 and b/entry/src/main/resources/rawfile/voice/403001.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/403002.mp3 b/entry/src/main/resources/rawfile/voice/403002.mp3 index ba7432da..2a1d284e 100644 Binary files a/entry/src/main/resources/rawfile/voice/403002.mp3 and b/entry/src/main/resources/rawfile/voice/403002.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/404001.mp3 b/entry/src/main/resources/rawfile/voice/404001.mp3 index 2f746c16..79248462 100644 Binary files a/entry/src/main/resources/rawfile/voice/404001.mp3 and b/entry/src/main/resources/rawfile/voice/404001.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/4040021.mp3 b/entry/src/main/resources/rawfile/voice/4040021.mp3 new file mode 100644 index 00000000..23bf581c Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/4040021.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/4040022.mp3 b/entry/src/main/resources/rawfile/voice/4040022.mp3 new file mode 100644 index 00000000..d8ab0991 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/4040022.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/4040023.mp3 b/entry/src/main/resources/rawfile/voice/4040023.mp3 new file mode 100644 index 00000000..b39e4dc8 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/4040023.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/4040024.mp3 b/entry/src/main/resources/rawfile/voice/4040024.mp3 new file mode 100644 index 00000000..6433479d Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/4040024.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/4040032.mp3 b/entry/src/main/resources/rawfile/voice/4040032.mp3 new file mode 100644 index 00000000..b59071b3 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/4040032.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/4040033.mp3 b/entry/src/main/resources/rawfile/voice/4040033.mp3 new file mode 100644 index 00000000..e1e7d337 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/4040033.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/4040034.mp3 b/entry/src/main/resources/rawfile/voice/4040034.mp3 new file mode 100644 index 00000000..2f7f4e45 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/4040034.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/4040035.mp3 b/entry/src/main/resources/rawfile/voice/4040035.mp3 new file mode 100644 index 00000000..e3fb170e Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/4040035.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/40401.mp3 b/entry/src/main/resources/rawfile/voice/40401.mp3 index f2cbef7d..1f4b6ec1 100644 Binary files a/entry/src/main/resources/rawfile/voice/40401.mp3 and b/entry/src/main/resources/rawfile/voice/40401.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/40402.mp3 b/entry/src/main/resources/rawfile/voice/40402.mp3 new file mode 100644 index 00000000..464519db Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/40402.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/40403.mp3 b/entry/src/main/resources/rawfile/voice/40403.mp3 new file mode 100644 index 00000000..beff14c3 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/40403.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/405001.mp3 b/entry/src/main/resources/rawfile/voice/405001.mp3 index b1fbdeca..5e411e5f 100644 Binary files a/entry/src/main/resources/rawfile/voice/405001.mp3 and b/entry/src/main/resources/rawfile/voice/405001.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/406001.mp3 b/entry/src/main/resources/rawfile/voice/406001.mp3 index dc852bc9..58bf16b4 100644 Binary files a/entry/src/main/resources/rawfile/voice/406001.mp3 and b/entry/src/main/resources/rawfile/voice/406001.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/406002.mp3 b/entry/src/main/resources/rawfile/voice/406002.mp3 new file mode 100644 index 00000000..3e1aac02 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/406002.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/406003.mp3 b/entry/src/main/resources/rawfile/voice/406003.mp3 new file mode 100644 index 00000000..6f0122be Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/406003.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/406004.mp3 b/entry/src/main/resources/rawfile/voice/406004.mp3 new file mode 100644 index 00000000..c866771c Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/406004.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/406006.mp3 b/entry/src/main/resources/rawfile/voice/406006.mp3 new file mode 100644 index 00000000..7d014469 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/406006.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/407001.mp3 b/entry/src/main/resources/rawfile/voice/407001.mp3 index 4ba03c15..7ee36533 100644 Binary files a/entry/src/main/resources/rawfile/voice/407001.mp3 and b/entry/src/main/resources/rawfile/voice/407001.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/408001.mp3 b/entry/src/main/resources/rawfile/voice/408001.mp3 index 1a8d8c4f..2c0807f7 100644 Binary files a/entry/src/main/resources/rawfile/voice/408001.mp3 and b/entry/src/main/resources/rawfile/voice/408001.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/409001.mp3 b/entry/src/main/resources/rawfile/voice/409001.mp3 index 12bac094..bf82e451 100644 Binary files a/entry/src/main/resources/rawfile/voice/409001.mp3 and b/entry/src/main/resources/rawfile/voice/409001.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/410001.mp3 b/entry/src/main/resources/rawfile/voice/410001.mp3 index 9924fdd0..75693efa 100644 Binary files a/entry/src/main/resources/rawfile/voice/410001.mp3 and b/entry/src/main/resources/rawfile/voice/410001.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/410002.mp3 b/entry/src/main/resources/rawfile/voice/410002.mp3 index 7ef40688..3950ac3f 100644 Binary files a/entry/src/main/resources/rawfile/voice/410002.mp3 and b/entry/src/main/resources/rawfile/voice/410002.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/410003.mp3 b/entry/src/main/resources/rawfile/voice/410003.mp3 index 0ddcc385..af18a5c8 100644 Binary files a/entry/src/main/resources/rawfile/voice/410003.mp3 and b/entry/src/main/resources/rawfile/voice/410003.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/41001.mp3 b/entry/src/main/resources/rawfile/voice/41001.mp3 index 10a14582..0c6c44ec 100644 Binary files a/entry/src/main/resources/rawfile/voice/41001.mp3 and b/entry/src/main/resources/rawfile/voice/41001.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/411001.mp3 b/entry/src/main/resources/rawfile/voice/411001.mp3 index 3719b517..75693efa 100644 Binary files a/entry/src/main/resources/rawfile/voice/411001.mp3 and b/entry/src/main/resources/rawfile/voice/411001.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/411002.mp3 b/entry/src/main/resources/rawfile/voice/411002.mp3 index 3719b517..3120a7e5 100644 Binary files a/entry/src/main/resources/rawfile/voice/411002.mp3 and b/entry/src/main/resources/rawfile/voice/411002.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/411003.mp3 b/entry/src/main/resources/rawfile/voice/411003.mp3 index 3719b517..af18a5c8 100644 Binary files a/entry/src/main/resources/rawfile/voice/411003.mp3 and b/entry/src/main/resources/rawfile/voice/411003.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/412001.mp3 b/entry/src/main/resources/rawfile/voice/412001.mp3 index 03d0194d..75693efa 100644 Binary files a/entry/src/main/resources/rawfile/voice/412001.mp3 and b/entry/src/main/resources/rawfile/voice/412001.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/412002.mp3 b/entry/src/main/resources/rawfile/voice/412002.mp3 index 3d31eae2..7343214a 100644 Binary files a/entry/src/main/resources/rawfile/voice/412002.mp3 and b/entry/src/main/resources/rawfile/voice/412002.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/412003.mp3 b/entry/src/main/resources/rawfile/voice/412003.mp3 index 807b5265..af18a5c8 100644 Binary files a/entry/src/main/resources/rawfile/voice/412003.mp3 and b/entry/src/main/resources/rawfile/voice/412003.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/413001.mp3 b/entry/src/main/resources/rawfile/voice/413001.mp3 index 0fffdcb3..9d26ba66 100644 Binary files a/entry/src/main/resources/rawfile/voice/413001.mp3 and b/entry/src/main/resources/rawfile/voice/413001.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/413002.mp3 b/entry/src/main/resources/rawfile/voice/413002.mp3 index 7523da38..fef93496 100644 Binary files a/entry/src/main/resources/rawfile/voice/413002.mp3 and b/entry/src/main/resources/rawfile/voice/413002.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/414001.mp3 b/entry/src/main/resources/rawfile/voice/414001.mp3 index f38199cc..657eb388 100644 Binary files a/entry/src/main/resources/rawfile/voice/414001.mp3 and b/entry/src/main/resources/rawfile/voice/414001.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/414003.mp3 b/entry/src/main/resources/rawfile/voice/414003.mp3 index c376c095..21717a2b 100644 Binary files a/entry/src/main/resources/rawfile/voice/414003.mp3 and b/entry/src/main/resources/rawfile/voice/414003.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/415001.mp3 b/entry/src/main/resources/rawfile/voice/415001.mp3 index 88b30db3..cf994e61 100644 Binary files a/entry/src/main/resources/rawfile/voice/415001.mp3 and b/entry/src/main/resources/rawfile/voice/415001.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/417000.mp3 b/entry/src/main/resources/rawfile/voice/417000.mp3 index a310628d..94c6fc9c 100644 Binary files a/entry/src/main/resources/rawfile/voice/417000.mp3 and b/entry/src/main/resources/rawfile/voice/417000.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/417001.mp3 b/entry/src/main/resources/rawfile/voice/417001.mp3 index a310628d..82ed78e2 100644 Binary files a/entry/src/main/resources/rawfile/voice/417001.mp3 and b/entry/src/main/resources/rawfile/voice/417001.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/4170010.mp3 b/entry/src/main/resources/rawfile/voice/4170010.mp3 index 067483a9..aabd34ea 100644 Binary files a/entry/src/main/resources/rawfile/voice/4170010.mp3 and b/entry/src/main/resources/rawfile/voice/4170010.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/4170011.mp3 b/entry/src/main/resources/rawfile/voice/4170011.mp3 index 8fe0c079..2767c21a 100644 Binary files a/entry/src/main/resources/rawfile/voice/4170011.mp3 and b/entry/src/main/resources/rawfile/voice/4170011.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/4170012.mp3 b/entry/src/main/resources/rawfile/voice/4170012.mp3 index 57003c1f..adc1a4f8 100644 Binary files a/entry/src/main/resources/rawfile/voice/4170012.mp3 and b/entry/src/main/resources/rawfile/voice/4170012.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/4170013.mp3 b/entry/src/main/resources/rawfile/voice/4170013.mp3 index c21615ec..4022dd07 100644 Binary files a/entry/src/main/resources/rawfile/voice/4170013.mp3 and b/entry/src/main/resources/rawfile/voice/4170013.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/4170014.mp3 b/entry/src/main/resources/rawfile/voice/4170014.mp3 index 8ba484aa..e4b42740 100644 Binary files a/entry/src/main/resources/rawfile/voice/4170014.mp3 and b/entry/src/main/resources/rawfile/voice/4170014.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/4170015.mp3 b/entry/src/main/resources/rawfile/voice/4170015.mp3 index 111d4955..f0b88cd1 100644 Binary files a/entry/src/main/resources/rawfile/voice/4170015.mp3 and b/entry/src/main/resources/rawfile/voice/4170015.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/4170016.mp3 b/entry/src/main/resources/rawfile/voice/4170016.mp3 index 8ba484aa..adf1dd82 100644 Binary files a/entry/src/main/resources/rawfile/voice/4170016.mp3 and b/entry/src/main/resources/rawfile/voice/4170016.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/4170017.mp3 b/entry/src/main/resources/rawfile/voice/4170017.mp3 new file mode 100644 index 00000000..16882494 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/4170017.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/4170018.mp3 b/entry/src/main/resources/rawfile/voice/4170018.mp3 new file mode 100644 index 00000000..df3ea2d4 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/4170018.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/4170019.mp3 b/entry/src/main/resources/rawfile/voice/4170019.mp3 new file mode 100644 index 00000000..25d3c420 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/4170019.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/417002.mp3 b/entry/src/main/resources/rawfile/voice/417002.mp3 index de9f61a5..b276cf6a 100644 Binary files a/entry/src/main/resources/rawfile/voice/417002.mp3 and b/entry/src/main/resources/rawfile/voice/417002.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/4170020.mp3 b/entry/src/main/resources/rawfile/voice/4170020.mp3 new file mode 100644 index 00000000..17f31514 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/4170020.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/417003.mp3 b/entry/src/main/resources/rawfile/voice/417003.mp3 index 8ce9cb86..75aaaa12 100644 Binary files a/entry/src/main/resources/rawfile/voice/417003.mp3 and b/entry/src/main/resources/rawfile/voice/417003.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/417004.mp3 b/entry/src/main/resources/rawfile/voice/417004.mp3 index da47c577..1c3aa78a 100644 Binary files a/entry/src/main/resources/rawfile/voice/417004.mp3 and b/entry/src/main/resources/rawfile/voice/417004.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/417005.mp3 b/entry/src/main/resources/rawfile/voice/417005.mp3 index 09c75b39..f3e43a29 100644 Binary files a/entry/src/main/resources/rawfile/voice/417005.mp3 and b/entry/src/main/resources/rawfile/voice/417005.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/417006.mp3 b/entry/src/main/resources/rawfile/voice/417006.mp3 index a92bae40..6165a8db 100644 Binary files a/entry/src/main/resources/rawfile/voice/417006.mp3 and b/entry/src/main/resources/rawfile/voice/417006.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/417007.mp3 b/entry/src/main/resources/rawfile/voice/417007.mp3 index 0a9624cc..9f903bd7 100644 Binary files a/entry/src/main/resources/rawfile/voice/417007.mp3 and b/entry/src/main/resources/rawfile/voice/417007.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/417008.mp3 b/entry/src/main/resources/rawfile/voice/417008.mp3 index bafa510e..e8865121 100644 Binary files a/entry/src/main/resources/rawfile/voice/417008.mp3 and b/entry/src/main/resources/rawfile/voice/417008.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/417009.mp3 b/entry/src/main/resources/rawfile/voice/417009.mp3 index ebe90056..14fc2f46 100644 Binary files a/entry/src/main/resources/rawfile/voice/417009.mp3 and b/entry/src/main/resources/rawfile/voice/417009.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/41703.mp3 b/entry/src/main/resources/rawfile/voice/41703.mp3 index 38808097..f40842de 100644 Binary files a/entry/src/main/resources/rawfile/voice/41703.mp3 and b/entry/src/main/resources/rawfile/voice/41703.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/41_01.mp3 b/entry/src/main/resources/rawfile/voice/41_01.mp3 new file mode 100644 index 00000000..2ec402ff Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/41_01.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/41_02.mp3 b/entry/src/main/resources/rawfile/voice/41_02.mp3 new file mode 100644 index 00000000..86623949 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/41_02.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/41_03.mp3 b/entry/src/main/resources/rawfile/voice/41_03.mp3 new file mode 100644 index 00000000..61b06b0d Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/41_03.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/41_04.mp3 b/entry/src/main/resources/rawfile/voice/41_04.mp3 new file mode 100644 index 00000000..12a7d700 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/41_04.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/41_05.mp3 b/entry/src/main/resources/rawfile/voice/41_05.mp3 new file mode 100644 index 00000000..b295a10d Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/41_05.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/41_06.mp3 b/entry/src/main/resources/rawfile/voice/41_06.mp3 new file mode 100644 index 00000000..26fc059e Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/41_06.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/41_07.mp3 b/entry/src/main/resources/rawfile/voice/41_07.mp3 new file mode 100644 index 00000000..116a9053 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/41_07.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/41_08.mp3 b/entry/src/main/resources/rawfile/voice/41_08.mp3 new file mode 100644 index 00000000..6af5ebb3 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/41_08.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/41_09.mp3 b/entry/src/main/resources/rawfile/voice/41_09.mp3 new file mode 100644 index 00000000..b94b00df Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/41_09.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/41_42.mp3 b/entry/src/main/resources/rawfile/voice/41_42.mp3 new file mode 100644 index 00000000..c6d0bb84 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/41_42.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/471001.mp3 b/entry/src/main/resources/rawfile/voice/471001.mp3 new file mode 100644 index 00000000..bbfc0780 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/471001.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/4_01.mp3 b/entry/src/main/resources/rawfile/voice/4_01.mp3 new file mode 100644 index 00000000..589043c3 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/4_01.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/4_02.mp3 b/entry/src/main/resources/rawfile/voice/4_02.mp3 new file mode 100644 index 00000000..df5bc7ad Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/4_02.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/4_04.mp3 b/entry/src/main/resources/rawfile/voice/4_04.mp3 new file mode 100644 index 00000000..e553505e Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/4_04.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/4_101.mp3 b/entry/src/main/resources/rawfile/voice/4_101.mp3 new file mode 100644 index 00000000..77a1fba6 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/4_101.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/4_102.mp3 b/entry/src/main/resources/rawfile/voice/4_102.mp3 new file mode 100644 index 00000000..2ce381e0 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/4_102.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/4_103.mp3 b/entry/src/main/resources/rawfile/voice/4_103.mp3 new file mode 100644 index 00000000..45134482 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/4_103.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/4_41.mp3 b/entry/src/main/resources/rawfile/voice/4_41.mp3 new file mode 100644 index 00000000..1c5cbb4a Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/4_41.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/4_42.mp3 b/entry/src/main/resources/rawfile/voice/4_42.mp3 new file mode 100644 index 00000000..4958d4be Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/4_42.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/4_43.mp3 b/entry/src/main/resources/rawfile/voice/4_43.mp3 new file mode 100644 index 00000000..e6f4883c Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/4_43.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/4号线.mp3 b/entry/src/main/resources/rawfile/voice/4号线.mp3 new file mode 100644 index 00000000..e394177f Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/4号线.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/5_01.mp3 b/entry/src/main/resources/rawfile/voice/5_01.mp3 new file mode 100644 index 00000000..36412f12 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/5_01.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/5_02.mp3 b/entry/src/main/resources/rawfile/voice/5_02.mp3 new file mode 100644 index 00000000..53d59eef Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/5_02.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/5_03.mp3 b/entry/src/main/resources/rawfile/voice/5_03.mp3 new file mode 100644 index 00000000..3f98dc81 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/5_03.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/5_04.mp3 b/entry/src/main/resources/rawfile/voice/5_04.mp3 new file mode 100644 index 00000000..ffc79358 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/5_04.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/5_06.mp3 b/entry/src/main/resources/rawfile/voice/5_06.mp3 new file mode 100644 index 00000000..b924c35d Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/5_06.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/5_101.mp3 b/entry/src/main/resources/rawfile/voice/5_101.mp3 new file mode 100644 index 00000000..fe6767b9 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/5_101.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/5_102.mp3 b/entry/src/main/resources/rawfile/voice/5_102.mp3 new file mode 100644 index 00000000..89174d0b Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/5_102.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/5_103.mp3 b/entry/src/main/resources/rawfile/voice/5_103.mp3 new file mode 100644 index 00000000..b92282dc Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/5_103.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/5_104.mp3 b/entry/src/main/resources/rawfile/voice/5_104.mp3 new file mode 100644 index 00000000..8f29b1db Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/5_104.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/5_41.mp3 b/entry/src/main/resources/rawfile/voice/5_41.mp3 new file mode 100644 index 00000000..a0532bfd Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/5_41.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/5_42.mp3 b/entry/src/main/resources/rawfile/voice/5_42.mp3 new file mode 100644 index 00000000..ec302252 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/5_42.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/5_43.mp3 b/entry/src/main/resources/rawfile/voice/5_43.mp3 new file mode 100644 index 00000000..92a04f4f Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/5_43.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/5_44.mp3 b/entry/src/main/resources/rawfile/voice/5_44.mp3 new file mode 100644 index 00000000..4e533166 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/5_44.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/5_45.mp3 b/entry/src/main/resources/rawfile/voice/5_45.mp3 new file mode 100644 index 00000000..a6c9d888 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/5_45.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/5号线.mp3 b/entry/src/main/resources/rawfile/voice/5号线.mp3 new file mode 100644 index 00000000..afd98f62 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/5号线.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/6_01.mp3 b/entry/src/main/resources/rawfile/voice/6_01.mp3 new file mode 100644 index 00000000..53d59eef Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/6_01.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/6_02.mp3 b/entry/src/main/resources/rawfile/voice/6_02.mp3 new file mode 100644 index 00000000..b9152e61 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/6_02.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/6_03.mp3 b/entry/src/main/resources/rawfile/voice/6_03.mp3 new file mode 100644 index 00000000..c1d2f469 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/6_03.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/6_101.mp3 b/entry/src/main/resources/rawfile/voice/6_101.mp3 new file mode 100644 index 00000000..53d59eef Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/6_101.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/6_102.mp3 b/entry/src/main/resources/rawfile/voice/6_102.mp3 new file mode 100644 index 00000000..79400632 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/6_102.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/7_01.mp3 b/entry/src/main/resources/rawfile/voice/7_01.mp3 new file mode 100644 index 00000000..53d59eef Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/7_01.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/7_02.mp3 b/entry/src/main/resources/rawfile/voice/7_02.mp3 new file mode 100644 index 00000000..d8af16fd Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/7_02.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/7_03.mp3 b/entry/src/main/resources/rawfile/voice/7_03.mp3 new file mode 100644 index 00000000..c1d2f469 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/7_03.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/7_101.mp3 b/entry/src/main/resources/rawfile/voice/7_101.mp3 new file mode 100644 index 00000000..53d59eef Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/7_101.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/7_102.mp3 b/entry/src/main/resources/rawfile/voice/7_102.mp3 new file mode 100644 index 00000000..79400632 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/7_102.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/8_01.mp3 b/entry/src/main/resources/rawfile/voice/8_01.mp3 new file mode 100644 index 00000000..53d59eef Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/8_01.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/8_02.mp3 b/entry/src/main/resources/rawfile/voice/8_02.mp3 new file mode 100644 index 00000000..d8af16fd Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/8_02.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/8_03.mp3 b/entry/src/main/resources/rawfile/voice/8_03.mp3 new file mode 100644 index 00000000..c1d2f469 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/8_03.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/8_101.mp3 b/entry/src/main/resources/rawfile/voice/8_101.mp3 new file mode 100644 index 00000000..2e9cc9fc Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/8_101.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/8_102.mp3 b/entry/src/main/resources/rawfile/voice/8_102.mp3 new file mode 100644 index 00000000..c1d2f469 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/8_102.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/9_01.mp3 b/entry/src/main/resources/rawfile/voice/9_01.mp3 new file mode 100644 index 00000000..bf65cd74 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/9_01.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/9_03.mp3 b/entry/src/main/resources/rawfile/voice/9_03.mp3 new file mode 100644 index 00000000..f7ee3f45 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/9_03.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/9_101.mp3 b/entry/src/main/resources/rawfile/voice/9_101.mp3 new file mode 100644 index 00000000..bbdc0cbb Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/9_101.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/9_102.mp3 b/entry/src/main/resources/rawfile/voice/9_102.mp3 new file mode 100644 index 00000000..9daa9ff7 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/9_102.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/9_103.mp3 b/entry/src/main/resources/rawfile/voice/9_103.mp3 new file mode 100644 index 00000000..f7ee3f45 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/9_103.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/PLCError.mp3 b/entry/src/main/resources/rawfile/voice/PLCError.mp3 new file mode 100644 index 00000000..9ba68703 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/PLCError.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/auth.mp3 b/entry/src/main/resources/rawfile/voice/auth.mp3 new file mode 100644 index 00000000..bcee0f0b Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/auth.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/auth_fail.mp3 b/entry/src/main/resources/rawfile/voice/auth_fail.mp3 new file mode 100644 index 00000000..af7756f3 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/auth_fail.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/auth_no_pass.mp3 b/entry/src/main/resources/rawfile/voice/auth_no_pass.mp3 new file mode 100644 index 00000000..f6108a87 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/auth_no_pass.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/auth_pass.mp3 b/entry/src/main/resources/rawfile/voice/auth_pass.mp3 new file mode 100644 index 00000000..d5cb33ba Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/auth_pass.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/auth_success.mp3 b/entry/src/main/resources/rawfile/voice/auth_success.mp3 new file mode 100644 index 00000000..9705fc1e Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/auth_success.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/errorStart.mp3 b/entry/src/main/resources/rawfile/voice/errorStart.mp3 new file mode 100644 index 00000000..10e467c8 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/errorStart.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/exam_no_pass.mp3 b/entry/src/main/resources/rawfile/voice/exam_no_pass.mp3 new file mode 100644 index 00000000..1caf3c82 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/exam_no_pass.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/exam_no_pass_finish.mp3 b/entry/src/main/resources/rawfile/voice/exam_no_pass_finish.mp3 new file mode 100644 index 00000000..7c3ba16c Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/exam_no_pass_finish.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/exam_pass.mp3 b/entry/src/main/resources/rawfile/voice/exam_pass.mp3 new file mode 100644 index 00000000..cafeec8e Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/exam_pass.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/face.mp3 b/entry/src/main/resources/rawfile/voice/face.mp3 new file mode 100644 index 00000000..35ce3e7c Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/face.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/face_check.mp3 b/entry/src/main/resources/rawfile/voice/face_check.mp3 new file mode 100644 index 00000000..35ce3e7c Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/face_check.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/face_fail.mp3 b/entry/src/main/resources/rawfile/voice/face_fail.mp3 new file mode 100644 index 00000000..6a5dd905 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/face_fail.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/face_faile_wait.mp3 b/entry/src/main/resources/rawfile/voice/face_faile_wait.mp3 new file mode 100644 index 00000000..8e8973e7 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/face_faile_wait.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/face_success.mp3 b/entry/src/main/resources/rawfile/voice/face_success.mp3 new file mode 100644 index 00000000..8a18e5ff Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/face_success.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/failed1.mp3 b/entry/src/main/resources/rawfile/voice/failed1.mp3 new file mode 100644 index 00000000..7347ef9b Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/failed1.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/full_aqd_tips.mp3 b/entry/src/main/resources/rawfile/voice/full_aqd_tips.mp3 new file mode 100644 index 00000000..a7fa5564 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/full_aqd_tips.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/full_cm_tips.mp3 b/entry/src/main/resources/rawfile/voice/full_cm_tips.mp3 new file mode 100644 index 00000000..d42a3b52 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/full_cm_tips.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/full_dh_tips.mp3 b/entry/src/main/resources/rawfile/voice/full_dh_tips.mp3 new file mode 100644 index 00000000..901e215e Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/full_dh_tips.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/full_gd_tips.mp3 b/entry/src/main/resources/rawfile/voice/full_gd_tips.mp3 new file mode 100644 index 00000000..e5b1f948 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/full_gd_tips.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/full_ss_tips.mp3 b/entry/src/main/resources/rawfile/voice/full_ss_tips.mp3 new file mode 100644 index 00000000..e7857d47 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/full_ss_tips.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/ksjs.mp3 b/entry/src/main/resources/rawfile/voice/ksjs.mp3 new file mode 100644 index 00000000..8ce852d1 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/ksjs.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/line1.mp3 b/entry/src/main/resources/rawfile/voice/line1.mp3 new file mode 100644 index 00000000..42005a8f Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/line1.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/line2.mp3 b/entry/src/main/resources/rawfile/voice/line2.mp3 new file mode 100644 index 00000000..165ae7a0 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/line2.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/line3.mp3 b/entry/src/main/resources/rawfile/voice/line3.mp3 new file mode 100644 index 00000000..1884d066 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/line3.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/line4.mp3 b/entry/src/main/resources/rawfile/voice/line4.mp3 new file mode 100644 index 00000000..beaaa788 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/line4.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/line5.mp3 b/entry/src/main/resources/rawfile/voice/line5.mp3 new file mode 100644 index 00000000..29292d6e Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/line5.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/line6.mp3 b/entry/src/main/resources/rawfile/voice/line6.mp3 new file mode 100644 index 00000000..92d9443e Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/line6.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/mark_10.mp3 b/entry/src/main/resources/rawfile/voice/mark_10.mp3 new file mode 100644 index 00000000..d7698c52 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/mark_10.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/mark_100.mp3 b/entry/src/main/resources/rawfile/voice/mark_100.mp3 new file mode 100644 index 00000000..858f2dd3 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/mark_100.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/mark_5.mp3 b/entry/src/main/resources/rawfile/voice/mark_5.mp3 new file mode 100644 index 00000000..946777b4 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/mark_5.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/mark_tips.mp3 b/entry/src/main/resources/rawfile/voice/mark_tips.mp3 new file mode 100644 index 00000000..5523632e Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/mark_tips.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/mnyj.mp3 b/entry/src/main/resources/rawfile/voice/mnyj.mp3 new file mode 100644 index 00000000..03dfe36b Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/mnyj.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/no_pass.mp3 b/entry/src/main/resources/rawfile/voice/no_pass.mp3 new file mode 100644 index 00000000..322ef85d Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/no_pass.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/pass.mp3 b/entry/src/main/resources/rawfile/voice/pass.mp3 new file mode 100644 index 00000000..7f5395ab Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/pass.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/pull_fs.mp3 b/entry/src/main/resources/rawfile/voice/pull_fs.mp3 new file mode 100644 index 00000000..90456c77 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/pull_fs.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/push_fs.mp3 b/entry/src/main/resources/rawfile/voice/push_fs.mp3 new file mode 100644 index 00000000..e7db54ea Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/push_fs.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/pzcg.mp3 b/entry/src/main/resources/rawfile/voice/pzcg.mp3 new file mode 100644 index 00000000..5ea23635 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/pzcg.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/start.mp3 b/entry/src/main/resources/rawfile/voice/start.mp3 new file mode 100644 index 00000000..f0c7fa1f Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/start.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/take_phone.mp3 b/entry/src/main/resources/rawfile/voice/take_phone.mp3 new file mode 100644 index 00000000..0633039a Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/take_phone.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/take_photo_tips.mp3 b/entry/src/main/resources/rawfile/voice/take_photo_tips.mp3 new file mode 100644 index 00000000..bd5df508 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/take_photo_tips.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/ts_fdj.mp3 b/entry/src/main/resources/rawfile/voice/ts_fdj.mp3 new file mode 100644 index 00000000..3f20fb62 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/ts_fdj.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/ts_fdj2.mp3 b/entry/src/main/resources/rawfile/voice/ts_fdj2.mp3 new file mode 100644 index 00000000..f066e3c3 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/ts_fdj2.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/voice.txt b/entry/src/main/resources/rawfile/voice/voice.txt new file mode 100644 index 00000000..fdd61ecb --- /dev/null +++ b/entry/src/main/resources/rawfile/voice/voice.txt @@ -0,0 +1,102 @@ +30101_20 ****************** +30102_20 ****************** +30103_4 ****************** +30103_5 ****************** +30103_10 ****************** +30103_12 ****************** +30103_15 ****************** +30103_16 ****************** +30103_20 ****************** +30103_41 ****************** +30104_20 ****************** +30105_20 ****************** +30106_20 ****************** +30107_2 ****************** +30108_20 ****************** +30109_20 ****************** +30110_20 ****************** +30111_20 ****************** +30112_20 ****************** +30113_20 ****************** +30114_20 ****************** +30115_20 ****************** +30116_20 ****************** +30117_5 ****************** +30117_12 ****************** +30117_15 ****************** +30117_16 ****************** +30117_20 ****************** +30118_3 ****************** +30118_20 ****************** +30119_20 ****************** +30120_20 ****************** +30121_2 ****************** +30121_4 ****************** +30121_10 ****************** +30121_11 ****************** +30121_15 ****************** +30121_16 ****************** +30121_20 ****************** +30122_2 ****************** +30122_4 ****************** +30122_10 ****************** +30122_11 ****************** +30122_15 ****************** +30122_16 ****************** +30122_20 ****************** +30123_20 ****************** +30124_20 ****************** +30125_20 ****************** +30126_20 ****************** +30127_20 ****************** +30128_20 ****************** +30129_20 ****************** +30130_20 ****************** +30131_20 ****************** +30132_20 ****************** +30201_2 ****************** +30202_2 ****************** +30203_20 ****************** +30204_2 ****************** +30207_20 ****************** +30208_20 ****************** +30209_20 ****************** +30210_20 ****************** +40101_1 ****************** +30101_20****************** +30101_20****************** +30101_20****************** +30101_20****************** +30101_20****************** +30101_20****************** +30101_20****************** +30101_20****************** +30101_20****************** +30101_20****************** +30101_20****************** +30101_20****************** +30101_20****************** +30101_20****************** +30101_20****************** +30101_20****************** +30101_20****************** +30101_20****************** +30101_20****************** +30101_20****************** +30101_20****************** +30101_20****************** +30101_20****************** +30101_20****************** +30101_20****************** +30101_20****************** +30101_20****************** +30101_20****************** +30101_20****************** +30101_20****************** +30101_20****************** +30101_20****************** +30101_20****************** +30101_20****************** +30101_20****************** +30101_20****************** +30101_20****************** diff --git a/entry/src/main/resources/rawfile/voice/welcome.mp3 b/entry/src/main/resources/rawfile/voice/welcome.mp3 new file mode 100644 index 00000000..f12d1602 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/welcome.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/上车准备.mp3 b/entry/src/main/resources/rawfile/voice/上车准备.mp3 new file mode 100644 index 00000000..934efef5 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/上车准备.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/咚咚.mp3 b/entry/src/main/resources/rawfile/voice/咚咚.mp3 new file mode 100644 index 00000000..2eeb948c Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/咚咚.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/喀嚓.mp3 b/entry/src/main/resources/rawfile/voice/喀嚓.mp3 new file mode 100644 index 00000000..7afcc142 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/喀嚓.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/开始自检.mp3 b/entry/src/main/resources/rawfile/voice/开始自检.mp3 new file mode 100644 index 00000000..369dc027 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/开始自检.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/监管失败.mp3 b/entry/src/main/resources/rawfile/voice/监管失败.mp3 new file mode 100644 index 00000000..62b18903 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/监管失败.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/监管审核未通过.mp3 b/entry/src/main/resources/rawfile/voice/监管审核未通过.mp3 new file mode 100644 index 00000000..bce280bd Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/监管审核未通过.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/监管成功.mp3 b/entry/src/main/resources/rawfile/voice/监管成功.mp3 new file mode 100644 index 00000000..0325a7a7 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/监管成功.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/监管通信中.mp3 b/entry/src/main/resources/rawfile/voice/监管通信中.mp3 new file mode 100644 index 00000000..f74796f9 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/监管通信中.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/看镜头.mp3 b/entry/src/main/resources/rawfile/voice/看镜头.mp3 new file mode 100644 index 00000000..bd5df508 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/看镜头.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/等待监管认证.mp3 b/entry/src/main/resources/rawfile/voice/等待监管认证.mp3 new file mode 100644 index 00000000..75b5f25a Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/等待监管认证.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/综合评判.mp3 b/entry/src/main/resources/rawfile/voice/综合评判.mp3 new file mode 100644 index 00000000..f49a6c82 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/综合评判.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/考试结束.mp3 b/entry/src/main/resources/rawfile/voice/考试结束.mp3 new file mode 100644 index 00000000..37a9582d Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/考试结束.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/自检未通过.mp3 b/entry/src/main/resources/rawfile/voice/自检未通过.mp3 new file mode 100644 index 00000000..f435346d Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/自检未通过.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/自检通过.mp3 b/entry/src/main/resources/rawfile/voice/自检通过.mp3 new file mode 100644 index 00000000..94f00e53 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/自检通过.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/验证失败.mp3 b/entry/src/main/resources/rawfile/voice/验证失败.mp3 new file mode 100644 index 00000000..a392a739 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/验证失败.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/验证成功.mp3 b/entry/src/main/resources/rawfile/voice/验证成功.mp3 new file mode 100644 index 00000000..1f8fa85a Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/验证成功.mp3 differ