Merge branch 'api10' of http://88.22.24.105:3000/harmony_car/subject-two into api10
This commit is contained in:
		
						commit
						1336100978
					
				| @ -86,6 +86,142 @@ interface JudgeFile { | ||||
|   param?: JudgeFileParam[]; | ||||
| } | ||||
| 
 | ||||
| /** 扣分表 **/ | ||||
| export interface Mark { | ||||
|   itemno; | ||||
|   string | ||||
|   markcatalog: string | ||||
|   markshow: string | ||||
|   markreal: string | ||||
|   markserial: string | ||||
|   kfxh: string | ||||
| } | ||||
| 
 | ||||
| /** lane **/ | ||||
| export interface Lane { | ||||
|   num: number | ||||
|   count: number | ||||
|   road: number | ||||
| } | ||||
| 
 | ||||
| export interface Sensor { | ||||
|   aqd: number | ||||
|   mkg: number | ||||
|   ssc: number | ||||
|   jsc: number | ||||
|   fsc: number | ||||
|   lhq: number | ||||
|   lb: number | ||||
|   skd: number | ||||
|   jgd: number | ||||
|   ygd: number | ||||
|   zfxd: number | ||||
|   yfxd: number | ||||
|   shtd: number | ||||
|   wd: number | ||||
|   ygq: number | ||||
|   dh1: number | ||||
|   dh2: number | ||||
|   fdjzs: number | ||||
|   dw: number | ||||
|   cs: number | ||||
|   fxp: number | ||||
|   ljmc: number | ||||
|   lcmc: number | ||||
|   csbzh: number | ||||
|   csbyh: number | ||||
|   csbyq: number | ||||
|   csbzq: number | ||||
|   zy: number | ||||
|   tbp: number | ||||
|   hsj: number | ||||
|   dcj: number | ||||
|   gx: number | ||||
|   yl: number | ||||
|   yy: number | ||||
|   sde: number | ||||
|   xhd: string | ||||
|   rmndg: number | ||||
|   wav: number | ||||
|   mndg: string | ||||
| } | ||||
| 
 | ||||
| export interface Gps { | ||||
|   bklx: number | ||||
|   dwzt: number | ||||
|   jdzt?: number | ||||
|   sj?: number, | ||||
|   jd: number | ||||
|   wd: number | ||||
|   hxj: number | ||||
|   fyj: number | ||||
|   hbg: number | ||||
|   gdc: number | ||||
|   sd: number | ||||
|   age: number | ||||
|   jdyz: number | ||||
|   wdyz: number | ||||
|   dwsxs: number | ||||
|   jdsxs?: number | ||||
| } | ||||
| 
 | ||||
| export interface Vision { | ||||
|   sj: number | ||||
|   score: number | ||||
|   zyjd: number | ||||
|   sxjd: number | ||||
|   ytjd: number | ||||
|   fxp: number | ||||
|   ch: number | ||||
|   hld: number | ||||
| } | ||||
| 
 | ||||
| export interface Radar { | ||||
|   sj: number | ||||
|   zxh: number | ||||
|   qfsj: Qfsj[] | ||||
|   hfsj: Qfsj[] | ||||
|   zqsj: Qfsj[] | ||||
|   zhsj: Qfsj[] | ||||
|   zcsj: Qfsj[] | ||||
|   yqsj: Qfsj[] | ||||
|   yhsj: Qfsj[] | ||||
|   ycsj: Qfsj[] | ||||
|   fqsj: Qfsj[] | ||||
|   qfwt: Qfwt | ||||
|   rcyz: number | ||||
|   show: Show[] | ||||
| } | ||||
| 
 | ||||
| interface Qfwt { | ||||
|   xrjl: number | ||||
|   zawjl: number | ||||
| } | ||||
| 
 | ||||
| export interface Plc { | ||||
|   sensor: Sensor, | ||||
|   gps: Gps, | ||||
|   gps2: Gps, | ||||
|   vision: Vision, | ||||
|   radar: Radar, | ||||
|   extend: object | ||||
| } | ||||
| 
 | ||||
| interface Qfsj { | ||||
|   bh: number | ||||
|   lx: number | ||||
|   jl: number | ||||
|   sd: number | ||||
| } | ||||
| interface Show{ | ||||
|   bh: number | ||||
|   zb:Zb[] | ||||
| } | ||||
| interface Zb{ | ||||
|   x:number, | ||||
|   y:number | ||||
| } | ||||
| 
 | ||||
| /** 考试过程数据 */ | ||||
| export interface DrvexamType extends BaseExamFields { | ||||
|   lsh?: string; | ||||
| @ -99,4 +235,22 @@ export interface DrvexamType extends BaseExamFields { | ||||
|   ksxtbh?: string; | ||||
|   ksysfzmhm?: string; | ||||
|   Ksy2sfzmhm?: string; | ||||
| } | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| export interface DefaultJudgeConfigObj{ | ||||
|   param_302:string | ||||
|   param_332:string | ||||
|   param_342:string | ||||
|   param_343:string | ||||
|   param_344:string | ||||
|   param_348:string | ||||
|   param_353:string | ||||
|   param_369:string | ||||
|   param_375:string | ||||
|   param_387:string | ||||
|   param_432:string | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
|  | ||||
| @ -1,27 +1,17 @@ | ||||
| import { testMarkRules, testRealExam } from '../dataTest/index'; | ||||
| import { GetCurrentTime, NumberToByteArray } from '../../../utils/Common'; | ||||
| 
 | ||||
| import systemTime from '@ohos.systemDateTime'; | ||||
| import { Array2Byte } from './Common'; | ||||
| import { CarInfoType } from '../../../model'; | ||||
| import { Gps, Lane,Plc,Vision,Radar, Sensor,DefaultJudgeConfigObj} from '../../../model/Judge' | ||||
| 
 | ||||
| //获取本地扣分项 | ||||
| export const getTestMarkRules = () => { | ||||
|   testMarkRules.map((mark: any) => { | ||||
|     return { | ||||
|       itemno: mark.itemno * 1, | ||||
|       markcatalog: mark.markcatalog, | ||||
|       markshow: mark.markshow, | ||||
|       markreal: mark.markreal * 1, | ||||
|       markserial: mark.markserial, | ||||
|       kfxh: mark.kfxh | ||||
|     } | ||||
|   }) | ||||
| } | ||||
| interface Extend {} | ||||
| 
 | ||||
| // 中心信号转换 | ||||
| export const getTranslateSignals = (tempItems) => { | ||||
| export const getTranslateSignals = (tempItems:number[]) => { | ||||
|   const len = Math.floor(tempItems.length / 8); | ||||
|   const arr = []; | ||||
|   const arr:string[] = []; | ||||
|   for (let i = 0; i < len; i++) { | ||||
|     const temp = tempItems.slice(i * 8, (i + 1) * 8); | ||||
|     arr.push(temp.join('')); | ||||
| @ -45,7 +35,7 @@ export function getCarStatus(status: -1 | 0 | 1): string { | ||||
| } | ||||
| 
 | ||||
| // 当前考车中心状态转换 | ||||
| export function getCarStatusType(carzt) { | ||||
| export function getCarStatusType(carzt?:number) { | ||||
|   switch (carzt) { | ||||
|     case -1: | ||||
|       return [1, 0] | ||||
| @ -59,7 +49,7 @@ export function getCarStatusType(carzt) { | ||||
| } | ||||
| 
 | ||||
| // 获取档位信号 | ||||
| export function getDwStatusType(dw) { | ||||
| export function getDwStatusType(dw?:number) { | ||||
|   switch (dw) { | ||||
|     case 0: | ||||
|       return [0, 0, 0, 0] | ||||
| @ -82,7 +72,7 @@ export function getDwStatusType(dw) { | ||||
| 
 | ||||
| 
 | ||||
| // 中心实时项目状态转换 | ||||
| export function getCenterProjectStatus(status) { | ||||
| export function getCenterProjectStatus(status?:number) { | ||||
|   switch (status) { | ||||
|   //不考 | ||||
|     case 0: | ||||
| @ -104,27 +94,29 @@ export function getCenterProjectStatus(status) { | ||||
| 
 | ||||
| //获取科目三开始项目、结束项目语音 | ||||
| export function getKmProjectVoice( | ||||
|   projectCode, | ||||
|   projectCode:string, | ||||
|   // 1:项目开始 2:项目结束 | ||||
|   type: 1 | 2, | ||||
|   judgeConfig, | ||||
|   lane, | ||||
|   xmxh | ||||
|   judgeConfig:object, | ||||
|   lane:Lane, | ||||
|   xmxh:number | ||||
| ) { | ||||
|   const carInfo = AppStorage.get<CarInfoType>('carInfo'); | ||||
|   const { examSubject } = carInfo; | ||||
|   const param506Str = judgeConfig['506']?.split(',') || []; | ||||
|   const param512Str = judgeConfig['512']?.split(',') || []; | ||||
|   const param544Str = judgeConfig['544']?.split(',') || []; | ||||
|   const param405Str = judgeConfig['405'] || 0; | ||||
|   const  examSubject = carInfo.examSubject; | ||||
|   const param506Str:number[] = ( Reflect.get(judgeConfig,'506')?.split(',') ) || [] | ||||
|   const param512Str:number[] = ( Reflect.get(judgeConfig,'512')?.split(',') ) || [] | ||||
|   const param544Str:number[] = ( Reflect.get(judgeConfig,'544')?.split(',') ) || [] | ||||
|   const param405Str:number = Reflect.get(judgeConfig,'405') || 0; | ||||
| 
 | ||||
|   console.info('surenjun => param544Str.length', param544Str.length) | ||||
| 
 | ||||
|   const { num, count, road } = lane | ||||
|   if (examSubject == 2) { | ||||
|   const num = lane.num | ||||
|   const count = lane.count | ||||
|   const road = lane.road | ||||
|   if (examSubject == '2') { | ||||
|     return projectCode | ||||
|   } | ||||
|   switch (projectCode * 1) { | ||||
|   switch (Number(projectCode)) { | ||||
|   //直线行驶 | ||||
|     case 40300: | ||||
|       return type === 1 ? 403001 : 403002 | ||||
| @ -181,11 +173,11 @@ export function getKmProjectVoice( | ||||
| 
 | ||||
| 
 | ||||
| //获取科目三&科目三取消项目语音 | ||||
| export function getKmProjectCancelVoice(examSubject, projectCode) { | ||||
| export function getKmProjectCancelVoice(examSubject:number, projectCode:number) { | ||||
|   if (examSubject == 2) { | ||||
|     return 'xmqx' | ||||
|   } | ||||
|   switch (projectCode * 1) { | ||||
|   switch (Number(projectCode)) { | ||||
|   //变更车道 | ||||
|     case 40500: | ||||
|       return 405004 | ||||
| @ -458,17 +450,66 @@ export function promptWxCode( | ||||
| 
 | ||||
| // 获取plc数据 | ||||
| export const plcStrToJson = async (plc: string) => { | ||||
| 
 | ||||
|   const p = plc.split(',').map((val, key) => { | ||||
|   const plcArr = plc.split(',') | ||||
|   const p = plcArr.map((val, key) => { | ||||
|     if (key !== 27 && key !== 92) { | ||||
|       return val * 1 | ||||
|     } else { | ||||
|       return val | ||||
|       return Number(val) | ||||
|     } | ||||
|   }); | ||||
|   let data: any = testRealExam; | ||||
|   const time = await systemTime.getCurrentTime() | ||||
|   const tempData = { | ||||
| 
 | ||||
| 
 | ||||
|   const sensor:Sensor =  { | ||||
|     //安全带     车门门开关   手刹        脚刹        副刹       离合器      喇叭      示宽灯     近光灯     远光灯 | ||||
|     aqd: p[19], | ||||
|     mkg: p[14], | ||||
|     ssc: p[13], | ||||
|     jsc: p[12], | ||||
|     fsc: p[18], | ||||
|     lhq: p[17], | ||||
|     lb: p[4], | ||||
|     skd: p[9], | ||||
|     jgd: p[7], | ||||
|     ygd: p[8], | ||||
|     //左方向灯   右方向灯     双跳灯      雾灯        雨刮器      点火1     点火2      发动机转速     档位       车速 | ||||
|     zfxd: p[2], | ||||
|     yfxd: p[3], | ||||
|     shtd: p[20], | ||||
|     wd: p[10], | ||||
|     ygq: p[11], | ||||
|     dh1: p[5], | ||||
|     dh2: p[6], | ||||
|     fdjzs: p[25], | ||||
|     dw: p[28], | ||||
|     cs: p[23], | ||||
|     // 方向盘 | ||||
|     fxp: Number(plcArr[27].split('_')[0]), | ||||
|     //累计脉冲   溜车脉冲   超声波左后     超声波右后     超声波右前     超声波左前    座椅    仪表盘   后视镜   倒车镜   光照  雨量 | ||||
|     ljmc: p[24], | ||||
|     lcmc: 0, | ||||
|     csbzh: p[32], | ||||
|     csbyh: p[30], | ||||
|     csbyq: p[31], | ||||
|     csbzq: p[29], | ||||
|     zy: 0, | ||||
|     tbp: 0, | ||||
|     hsj: 0, | ||||
|     dcj: 0, | ||||
|     gx: 0, | ||||
|     yl: 0, | ||||
|     //TODO 数据待替换 油压  闪灯 信号灯 | ||||
|     yy: 0, | ||||
|     sde: 0, | ||||
|     xhd: '', | ||||
|     rmndg: 0, | ||||
|     wav: 0, | ||||
|     mndg: '' | ||||
|   } | ||||
|   const gps2:Gps =testRealExam.gps2 | ||||
|   const radar:Radar =testRealExam.radar | ||||
|   const vision:Vision =testRealExam.vision | ||||
|   const extend:Extend = {}; | ||||
|   const tempData:Plc = { | ||||
|     sensor: { | ||||
|       //安全带     车门门开关   手刹        脚刹        副刹       离合器      喇叭      示宽灯     近光灯     远光灯 | ||||
|       aqd: p[19], | ||||
| @ -493,7 +534,7 @@ export const plcStrToJson = async (plc: string) => { | ||||
|       dw: p[28], | ||||
|       cs: p[23], | ||||
|       // 方向盘 | ||||
|       fxp: p[27].split('_')[0] * 1, | ||||
|       fxp: Number(plcArr[27].split('_')[0]), | ||||
|       //累计脉冲   溜车脉冲   超声波左后     超声波右后     超声波右前     超声波左前    座椅    仪表盘   后视镜   倒车镜   光照  雨量 | ||||
|       ljmc: p[24], | ||||
|       lcmc: 0, | ||||
| @ -520,7 +561,7 @@ export const plcStrToJson = async (plc: string) => { | ||||
|       bklx: p[56], | ||||
|       dwzt: p[83], | ||||
|       // 角度差分状态 | ||||
|       jdzt: p[92].split('-')[0] * 1, | ||||
|       jdzt:  Number(plcArr[92].split('-')[0]), | ||||
|       //gps数据 | ||||
|       //gps时间 经度      纬度       航向角      俯仰角      海拔高       高度差     速度 | ||||
|       sj: time, | ||||
| @ -537,26 +578,25 @@ export const plcStrToJson = async (plc: string) => { | ||||
|       wdyz: p[88], | ||||
|       dwsxs: p[84] || 0, | ||||
|       // 角度搜星数 | ||||
|       jdsxs: p[92].split('-')[1] * 1 || 0 | ||||
|       jdsxs: Number(plcArr[92].split('-')[1]) || 0 | ||||
|     }, | ||||
|     gps2: data.gps, | ||||
|     vision: data.vision, | ||||
|     radar: data.radar, | ||||
|     extend: {} | ||||
|     gps2: gps2, | ||||
|     vision, | ||||
|     radar, | ||||
|     extend | ||||
|   } | ||||
|   return tempData | ||||
| } | ||||
| 
 | ||||
| export const plcStrToWXJson = async (plc: string) => { | ||||
|   const plcArr = plc.split(',') | ||||
|   const p = plc.split(',').map((val, key) => { | ||||
|     if (key !== 27 && key !== 92) { | ||||
|       return val * 1 | ||||
|     } else { | ||||
|       return val | ||||
|       return Number(val) | ||||
|     } | ||||
|   }); | ||||
|   const timeStr = p[93] + '' + p[94]; | ||||
|   const gps = { | ||||
|   const gps:Gps = { | ||||
|     //办卡类型    定位差分状态 | ||||
|     bklx: p[56], | ||||
|     dwzt: p[83], | ||||
| @ -580,35 +620,39 @@ export const plcStrToWXJson = async (plc: string) => { | ||||
|     // 注车制动 行车制动 离合器 副制动   喇叭   雨刷    危险报警灯 示廓灯 系统未涉及的传感器信号 | ||||
|     p[13], p[12], p[17], p[18], p[4], p[11], p[20], p[9], 0 | ||||
|   ] | ||||
| 
 | ||||
|   const judgeSignalNum = Number(judgeSignal.join('')) | ||||
|   const judgeAnotherSignal = [ | ||||
|   // 低三挡位 左侧单边桥1 左侧单边桥2 右侧单边桥1 右侧单边桥2 雾灯 | ||||
|     '000', '0', '0', '0', '0', p[10], | ||||
|     // 桩杆全无信号  左后绕车 右后绕车 右前绕车 左前绕车 | ||||
|     '000', '0', '0', '0', '0' | ||||
|   ] | ||||
|   const judgeAnotherSignalNum = Number(judgeAnotherSignal.join('')) | ||||
| 
 | ||||
|   const wuXiData = [ | ||||
|   //         卫星时间     精度    纬度     高度      方位角    俯仰角    速度角  速度      横滚  卫星定位状态 | ||||
|     '$KSXT', timeStr, gps.jd, gps.wd, gps.hbg, gps.hxj, gps.fyj, '', gps.sd, '', gps.dwzt, gps.dwzt, | ||||
|     //前天线可用星数 后天线可用星数 东向坐标位置 北向位置坐标 天向位置坐标  东向速度 北向速度 天向速度 | ||||
|     '', '', '', '', '', '', '', '', | ||||
|     // 评判信号1 评判信号2 发动机转速 | ||||
|     (judgeSignal.join('') * 1).toString(16), (judgeAnotherSignal.join('') * 1).toString(16), p[25], | ||||
|     judgeSignalNum.toString(16),judgeAnotherSignalNum.toString(16), p[25], | ||||
|     '0xFFFFFFF' | ||||
|   ] | ||||
|   const wuXiDataStr = wuXiData.join(',') | ||||
|   return wuXiDataStr | ||||
| } | ||||
| 
 | ||||
| export const senorToWXDataStr = async (tempData) => { | ||||
|   const { sensor, gps } = tempData; | ||||
| export const senorToWXDataStr = async (tempData:Plc) => { | ||||
|   const sensor = tempData.sensor | ||||
|   const gps = tempData.gps | ||||
|   const timeStr = await getTimeStr() | ||||
| 
 | ||||
|   const { mkg, aqd, dh1, dh2, zfxd, yfxd, jgd, ygd, ssc, jsc, lhq, fsc, lb, ygq, wd } = sensor | ||||
|   const judgeSignal = [ | ||||
|   const judgeSignal:number[] = [ | ||||
|   //车门 安全带  熄火    发动机启动 左转向 右转向  前照灯近灯 前照灯远灯 | ||||
|     mkg, aqd, dh1, dh2, zfxd, yfxd, jgd, ygd, | ||||
|     sensor.mkg, sensor.aqd, sensor.dh1, sensor.dh2, sensor.zfxd, sensor.yfxd, sensor.jgd, sensor.ygd, | ||||
|     // 注车制动 行车制动 离合器 副制动   喇叭   雨刷    危险报警灯 示廓灯 系统未涉及的传感器信号 | ||||
|     ssc, jsc, lhq, fsc, lb, ygq, 0, 0, 0 | ||||
|     sensor.ssc, sensor.jsc, sensor.lhq, sensor.fsc, sensor.lb, sensor.ygq, 0, 0, 0 | ||||
|   ] | ||||
| 
 | ||||
|   const judgeAnotherSignal = [ | ||||
| @ -618,8 +662,8 @@ export const senorToWXDataStr = async (tempData) => { | ||||
|     '000', '0', '0', '0', '0', '0', '0' | ||||
|   ] | ||||
| 
 | ||||
|   const str1 = (judgeSignal.join('') * 1).toString(16); | ||||
|   const str2 = (judgeAnotherSignal.join('') * 1).toString(16); | ||||
|   const str1 = (Number(judgeSignal.join(''))).toString(16); | ||||
|   const str2 = (Number(judgeAnotherSignal.join(''))).toString(16); | ||||
| 
 | ||||
|   const wuXiData = [ | ||||
|   //         卫星时间     精度    纬度     高度      方位角    俯仰角    速度角  速度      横滚  卫星定位状态 | ||||
| @ -652,43 +696,44 @@ export const getTimeStr = async () => { | ||||
| export function sendBlue() { | ||||
|   const arrBlue = [0x55, 0xaa, 0x01, 0x00, 0x02, 0x01, 0x03, 0x00]; | ||||
|   const arrBlueBuffer = Array2Byte(arrBlue).buffer | ||||
|   globalThis.lightLineUdp.send(arrBlueBuffer); | ||||
|   // globalThis.lightLineUdp.send(arrBlueBuffer); | ||||
| } | ||||
| 
 | ||||
| //绿灯 | ||||
| export function sendGreen() { | ||||
|   const arrGreen = [0x55, 0xaa, 0x01, 0x00, 0x02, 0x00, 0x03, 0x01]; | ||||
|   const arrGreenBuffer = Array2Byte(arrGreen).buffer | ||||
|   globalThis.lightLineUdp.send(arrGreenBuffer); | ||||
|   // globalThis.lightLineUdp.send(arrGreenBuffer); | ||||
| } | ||||
| 
 | ||||
| //红灯 | ||||
| export function sendRed() { | ||||
|   const arrRed = [0x55, 0xaa, 0x01, 0x01, 0x02, 0x00, 0x03, 0x00]; | ||||
|   const arrRedBuffer = Array2Byte(arrRed).buffer | ||||
|   globalThis.lightLineUdp.send(arrRedBuffer); | ||||
|   // globalThis.lightLineUdp.send(arrRedBuffer); | ||||
| } | ||||
| 
 | ||||
| export const defaultJudgeConfigObj = { | ||||
| 
 | ||||
| export const defaultJudgeConfigObj:DefaultJudgeConfigObj = { | ||||
|   //结束考试方式 0-不合格继续 1-考试不合格报靠边停车 2-不合格不报靠边 3-训练不合格报靠边 4-自动退出 5-不合格自动退出 | ||||
|   302: '5', | ||||
|   332: '', | ||||
|   param_302: '5', | ||||
|   param_332: '', | ||||
|   //是否能进行人工操作 0-不能人工评判 1-不能人工进项目 3-都不能 | ||||
|   342: '', | ||||
|   param_342: '', | ||||
|   //有项目未结束时可以靠边停车 0-否 1-是 | ||||
|   343: '1', | ||||
|   param_343: '1', | ||||
|   //考试未结束且有扣分,是否可以退出 | ||||
|   344: '0', | ||||
|   param_344: '0', | ||||
|   //直线行驶中是否可以进其它项目 0-否 1-是 | ||||
|   348: '0', | ||||
|   param_348: '0', | ||||
|   //车上是否能点结束考试 0:否 1:是 | ||||
|   353: '0', | ||||
|   param_353: '0', | ||||
|   //是否启动断电续考    0:否 1:是 | ||||
|   369: '1', | ||||
|   param_369: '1', | ||||
|   //是否显示应考里程 | ||||
|   375: '0', | ||||
|   param_375: '0', | ||||
|   //里程不够允许手工点靠边停车 | ||||
|   387: '0', | ||||
|   param_387: '0', | ||||
|   //监管模式有扣分续考(0-否++1-是+把上次未考完的扣分带下来重新考试) | ||||
|   432: '1' | ||||
|   param_432: '1' | ||||
| } | ||||
							
								
								
									
										58
									
								
								entry/src/main/ets/pages/judgeSDK/utils/judgeTask.ets
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								entry/src/main/ets/pages/judgeSDK/utils/judgeTask.ets
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,58 @@ | ||||
| import Prompt from '@system.prompt' | ||||
| 
 | ||||
| const TAG = 'SURENJUN_JUDGE' | ||||
| 
 | ||||
| interface DelayConfig{ | ||||
|   isDelay: boolean | ||||
|   delayTime: number | ||||
| } | ||||
| 
 | ||||
| interface QUEUE { | ||||
|   fn: Function, | ||||
|   delayConfig?: DelayConfig | ||||
| } | ||||
| 
 | ||||
| type GoTask = (currentTask:QUEUE)=>Promise<boolean> | ||||
| 
 | ||||
| export default class JudgeTask { | ||||
|   private queue?:QUEUE[] = [] | ||||
|   private status: string | ||||
| 
 | ||||
|   constructor() { | ||||
|     this.queue = [] | ||||
|     this.status = 'end' | ||||
|   } | ||||
| 
 | ||||
|   //执行任务 | ||||
|   goTask:GoTask = async (currentTask:QUEUE) => { | ||||
|     const fn = currentTask.fn; | ||||
|     const delayConfig = currentTask.delayConfig || {isDelay:false,delayTime:1000} | ||||
|     const isDelay = delayConfig.isDelay | ||||
|     const delayTime = delayConfig.delayTime | ||||
| 
 | ||||
|     return false | ||||
|   } | ||||
| 
 | ||||
|   executeQueue = async () => { | ||||
|     const queue = this.queue; | ||||
|     const executeQueue = this.executeQueue | ||||
|     if (queue.length) { | ||||
|       for (const currentTask of queue) { | ||||
|         await this.goTask(currentTask) | ||||
|         this.queue.shift() | ||||
|         await executeQueue() | ||||
|       } | ||||
|     } else { | ||||
|       this.status = 'end' | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   addTask = async (fn:Function, delayConfig?: DelayConfig) => { | ||||
|     this.queue.push({ | ||||
|       fn, delayConfig | ||||
|     }); | ||||
|     if (this.status == 'end' && this.queue.length === 1) { | ||||
|       await this.executeQueue(); | ||||
|     } | ||||
|   } | ||||
| } | ||||
| @ -1,67 +0,0 @@ | ||||
| import Prompt from '@system.prompt' | ||||
| 
 | ||||
| const TAG = 'SURENJUN_JUDGE' | ||||
| 
 | ||||
| interface QUEUE { | ||||
|   fn: Function, | ||||
|   config?: { | ||||
|     isDelay: boolean | ||||
|     delayTime: number | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| export default class JudgeTask { | ||||
|   private queue = [] | ||||
|   private status: string | ||||
| 
 | ||||
|   constructor() { | ||||
|     this.queue = [] | ||||
|     this.status = 'end' | ||||
|   } | ||||
| 
 | ||||
|   //
 | ||||
|   goTask = async (currentTask) => { | ||||
|     const {fn,delayConfig={}} = currentTask; | ||||
|     const { isDelay = false,delayTime = 1000} = delayConfig | ||||
|     return new Promise(async (res, rej) => { | ||||
|       setTimeout(async () => { | ||||
|         try { | ||||
|           await fn() | ||||
|           res(true) | ||||
|         } catch (e) { | ||||
|           console.info(TAG, '过程任务执行失败=>' + JSON.stringify(e)) | ||||
|           Prompt.showToast({ | ||||
|             message: '过程任务执行失败=>' + JSON.stringify(e), | ||||
|             duration: 3000 | ||||
|           }); | ||||
|           res(false) | ||||
|         } | ||||
|       }, isDelay ? delayTime : 0); | ||||
|     }) | ||||
|   } | ||||
| 
 | ||||
|   executeQueue = async () => { | ||||
|     const {queue,executeQueue} = this | ||||
|     if (queue.length) { | ||||
|       for (const currentTask of queue) { | ||||
|         await this.goTask(currentTask) | ||||
|         this.queue.shift() | ||||
|         await executeQueue() | ||||
|       } | ||||
|     } else { | ||||
|       this.status = 'end' | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   addTask = async (fn, delayConfig?: { | ||||
|     isDelay: Boolean, | ||||
|     delayTime?: Number | ||||
|   }) => { | ||||
|     this.queue.push({ | ||||
|       fn, delayConfig | ||||
|     }); | ||||
|     if (this.status == 'end' && this.queue.length === 1) { | ||||
|       await this.executeQueue(); | ||||
|     } | ||||
|   } | ||||
| } | ||||
| @ -7,17 +7,18 @@ import common from '@ohos.app.ability.common'; | ||||
| 
 | ||||
| const TAG = 'VoiceAnnounce' | ||||
| 
 | ||||
| interface Queue{ | ||||
|   url: string, | ||||
|   callback?: Function | ||||
| } | ||||
| 
 | ||||
| type PlayAudio = (urls: string[], shit?: boolean, callback?: Function) => Queue | void | ||||
| 
 | ||||
| export default class VoiceAnnounce { | ||||
|   //队列时候立马终止 | ||||
|   private isStopped: Boolean | ||||
|   private queue: { | ||||
|     url: string, | ||||
|     callback?: Function | ||||
|   }[] | ||||
|   private newQueue: { | ||||
|     url: string, | ||||
|     callback?: Function | ||||
|   }[] | ||||
|   private queue: Queue[] | ||||
|   private newQueue: Queue[] | ||||
|   private pendingQueue: String[] | ||||
|   private callback: Function; | ||||
| 
 | ||||
| @ -26,15 +27,18 @@ export default class VoiceAnnounce { | ||||
|     this.queue = [] | ||||
|   } | ||||
| 
 | ||||
|   async playAudio(urls: string[], shit?: boolean, callback?: Function) { | ||||
|     const { isStopped, queue } = this; | ||||
|     const tempUrls = urls.map((url, index) => { | ||||
|       return { | ||||
|         url, | ||||
|         callback: (index === urls.length - 1) ? callback : undefined | ||||
|       } | ||||
|   async playAudio(urls: string[], shit?: boolean, callbackFn?: Function) { | ||||
|     const isStopped = this.isStopped; | ||||
|     const queue = this.queue; | ||||
| 
 | ||||
|     const tempUrls: Queue[] = urls.map((url, index) => { | ||||
|       const callback:Function|undefined = (index === urls.length - 1) ? callbackFn : undefined | ||||
|       const temp:Queue = {url, callback} | ||||
|       return temp | ||||
|     }); | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|     if (shit) { | ||||
|       //队列清空,重新初始化 | ||||
|       this.isStopped = true; | ||||
| @ -53,7 +57,9 @@ export default class VoiceAnnounce { | ||||
| 
 | ||||
|   async executeQueue() { | ||||
|     const go = async () => { | ||||
|       const { queue, isStopped, newQueue } = this; | ||||
|       const queue = this.queue; | ||||
|       const isStopped = this.isStopped; | ||||
|       const newQueue = this.newQueue; | ||||
|       const avPlayer = new AVPlayer(); | ||||
|       if (isStopped) { | ||||
|         //清空原来队列 | ||||
| @ -77,8 +83,7 @@ export default class VoiceAnnounce { | ||||
| 
 | ||||
| 
 | ||||
| class AVPlayer { | ||||
|   public avPlayer: any = null; | ||||
| 
 | ||||
|   public avPlayer?: media.AVPlayer; | ||||
|   private voiceUrl: string[]; | ||||
|   private voiceStatus: 'completed' | 'playing' | ||||
|   private endCallback: Function | ||||
| @ -87,7 +92,7 @@ class AVPlayer { | ||||
|   } | ||||
| 
 | ||||
|   // 以下为使用资源管理接口获取打包在HAP内的媒体资源文件并通过fdSrc属性进行播放示例 | ||||
|   async play(name, callback) { | ||||
|   async play(name:string, callback:Function):Promise<boolean> { | ||||
|     try { | ||||
|       //检查SD中的语音 | ||||
|       // console.info('surenjun name',name) | ||||
| @ -123,7 +128,7 @@ class AVPlayer { | ||||
|       this.avPlayer = await media.createAVPlayer(); | ||||
|       return new Promise(async (resolve, reject) => { | ||||
|         await this.setAVPlayerCallback(() => { | ||||
|           resolve() | ||||
|           resolve(true) | ||||
|         }); | ||||
|         try { | ||||
|           const context: common.UIAbilityContext = AppStorage.get('context') | ||||
| @ -133,34 +138,28 @@ class AVPlayer { | ||||
|             message: `${name}语音文件不存在`, | ||||
|             duration: 4000 | ||||
|           }); | ||||
|           resolve(1) | ||||
|           resolve(true) | ||||
|         } | ||||
|       }) | ||||
|     } | ||||
| 
 | ||||
| 
 | ||||
|   } | ||||
| 
 | ||||
|   async queryFile(displayName): Promise<mediaLibrary.FileAsset> { | ||||
|   async queryFile(displayName:string): Promise<mediaLibrary.FileAsset> { | ||||
|     return new Promise(async (resolve, reject) => { | ||||
|       const context = AppStorage.get('context') | ||||
|       const context = AppStorage.get<common.UIAbilityContext>('context') | ||||
|       const mediaLib = mediaLibrary.getMediaLibrary(context); | ||||
|       let ret | ||||
|       let fetchOp = { | ||||
|       let fileResult = await mediaLib.getFileAssets({ | ||||
|         selections: `media_type=?  AND display_name = ?`, | ||||
|         selectionArgs: [`${mediaLibrary.MediaType.AUDIO}`, displayName], | ||||
|       }; | ||||
|       let fileResult = await mediaLib.getFileAssets(fetchOp); | ||||
|       }); | ||||
|       let retCount = fileResult.getCount(); | ||||
|       if (retCount > 0) { | ||||
|         ret = await fileResult.getFirstObject(); | ||||
|         let ret = await fileResult.getFirstObject(); | ||||
|         return resolve(ret); | ||||
|       } else { | ||||
|         return reject(false); | ||||
|       } | ||||
|     }) | ||||
| 
 | ||||
| 
 | ||||
|   } | ||||
| 
 | ||||
|   //音频播放队列 | ||||
| @ -175,7 +174,7 @@ class AVPlayer { | ||||
|   } | ||||
| 
 | ||||
|   // 注册avplayer回调函数 | ||||
|   setAVPlayerCallback(callBack) { | ||||
|   setAVPlayerCallback(callBack:Function) { | ||||
|     this.avPlayer.on('error', (err) => { | ||||
|       this.avPlayer && this.avPlayer.stop() | ||||
|       this.avPlayer && this.avPlayer.reset() | ||||
| @ -185,7 +184,7 @@ class AVPlayer { | ||||
|     let num = 0; | ||||
|     // 状态机变化回调函数 | ||||
|     this.avPlayer.on('stateChange', async (state, reason) => { | ||||
|       const { endCallback } = this; | ||||
|       const endCallback = this.endCallback; | ||||
|       switch (state) { | ||||
|         case 'idle': // 成功调用reset接口后触发该状态机上报 | ||||
|           break; | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user