feat: 远程工具
This commit is contained in:
parent
9d6b9691a9
commit
e6c94fc951
@ -1,46 +0,0 @@
|
||||
// @ts-ignore
|
||||
/* eslint-disable */
|
||||
// @ts-ignore
|
||||
import request from '../common/utils/http';
|
||||
|
||||
/** 2.无锡所接口请求 无锡所通用接口请求 POST /common/callWxsRest.do */
|
||||
export async function callWxsRestUsingPost(body: API.Pinyin_20, options?: { [key: string]: any }) {
|
||||
return request<API.ROfobject>('/common/callWxsRest.do', {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json;charset=UTF-8',
|
||||
},
|
||||
data: body,
|
||||
...(options || {}),
|
||||
});
|
||||
}
|
||||
|
||||
/** 3.无锡所接口请求测试 无锡所接口请求测试,返回测试数据 POST /common/callWxsRestTest.do */
|
||||
export async function callWxsRestTestUsingPost(
|
||||
body: API.Pinyin_20,
|
||||
options?: { [key: string]: any },
|
||||
) {
|
||||
return request<API.ROfobject>('/common/callWxsRestTest.do', {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json;charset=UTF-8',
|
||||
},
|
||||
data: body,
|
||||
...(options || {}),
|
||||
});
|
||||
}
|
||||
|
||||
/** 1.大屏显示数据查询与控制 大屏显示数据查询与控制 POST /data/examInfoStandardDisplay.ws */
|
||||
export async function examInfoStandardDisplayUsingPost(
|
||||
body: API.Pinyin_13,
|
||||
options?: { [key: string]: any },
|
||||
) {
|
||||
return request<API.ROf5>('/data/examInfoStandardDisplay.ws', {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json;charset=UTF-8',
|
||||
},
|
||||
data: body,
|
||||
...(options || {}),
|
||||
});
|
||||
}
|
||||
@ -1,31 +0,0 @@
|
||||
// @ts-ignore
|
||||
/* eslint-disable */
|
||||
import request from '../common/utils/http';
|
||||
|
||||
/** 2.考试中心执行参数同步 由外部(考试平台)调用,主动请求参数平台同步基础数据 GET /system/doParamBaseDataSync */
|
||||
export async function doParamBaseDataSyncUsingGet(options?: { [key: string]: any }) {
|
||||
return request<API.ROfobject>('/system/doParamBaseDataSync', {
|
||||
method: 'GET',
|
||||
...(options || {}),
|
||||
});
|
||||
}
|
||||
|
||||
/** 3.考试中心执行参数数据同步 由外部(考试平台)调用,主动请求参数平台同步参数数据 GET /system/doParamConfigDataSync */
|
||||
export async function doParamConfigDataSyncUsingGet(options?: { [key: string]: any }) {
|
||||
return request<API.ROfobject>('/system/doParamConfigDataSync', {
|
||||
method: 'GET',
|
||||
...(options || {}),
|
||||
});
|
||||
}
|
||||
|
||||
/** 1.用户登录 用户登录接口,获取用户相关信息和登录Token,登录后调用后台接口时,将Token放到请求头中 POST /system/userLogin.do */
|
||||
export async function userLoginUsingPost(body: API.Pinyin_21, options?: { [key: string]: any }) {
|
||||
return request<API.ROfobject>('/system/userLogin.do', {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json;charset=UTF-8',
|
||||
},
|
||||
data: body,
|
||||
...(options || {}),
|
||||
});
|
||||
}
|
||||
964
entry/src/main/ets/api/typings.d.ts
vendored
964
entry/src/main/ets/api/typings.d.ts
vendored
@ -1,964 +0,0 @@
|
||||
declare namespace API {
|
||||
type CarBrand_ = {
|
||||
/** 品牌名 {type_name} */
|
||||
brandName?: string;
|
||||
/** 创建者 */
|
||||
createBy?: string;
|
||||
/** 创建时间 */
|
||||
createTime?: string;
|
||||
/** 百米脉冲 */
|
||||
hundredMeterPulse?: string;
|
||||
/** 主键 */
|
||||
id?: number;
|
||||
/** 签到序号起始点 */
|
||||
signNumber?: number;
|
||||
/** SIMPLE_NAME */
|
||||
simpleName?: string;
|
||||
/** 更新者 */
|
||||
updateBy?: string;
|
||||
/** 更新时间 */
|
||||
updateTime?: string;
|
||||
};
|
||||
|
||||
type CarInfo_ = {
|
||||
/** 监管分车时间 */
|
||||
assignTime?: string;
|
||||
/** 车辆品牌id [car_brand.id] {cartypeid} */
|
||||
carBrandId?: number;
|
||||
/** 考车自检状态(0:不用检查,1:待检查,2:检查通过,3:检查不通过) */
|
||||
carCheckStatus?: string;
|
||||
/** 考车实际IP {carip} */
|
||||
carIp?: string;
|
||||
/** 考车对应mac地址 */
|
||||
carMac?: string;
|
||||
/** 考车编号 {carno} */
|
||||
carNo?: string;
|
||||
/** 考车身份证号 */
|
||||
cardNoArray?: string;
|
||||
/** 创建者 */
|
||||
createBy?: string;
|
||||
/** 创建时间 */
|
||||
createTime?: string;
|
||||
/** 删除标记(0:存在,2:已经删除)(status) */
|
||||
delFlag?: string;
|
||||
/** 考点id [sys_dept.dept_id] {exampointid} */
|
||||
deptId?: number;
|
||||
/** 设备号 */
|
||||
deviceNo?: string;
|
||||
/** 考车状态(1:正常,2:停用,3:异常) */
|
||||
deviceStatus?: string;
|
||||
/** 准驾车型 {cartype} */
|
||||
drivingLicenseType?: string;
|
||||
/** 终点库位号 {zdkwh} */
|
||||
endPointNo?: string;
|
||||
/** 考车路线 */
|
||||
examLineArray?: string;
|
||||
/** 所属考官对应的用户id [sys_user.user_id] */
|
||||
examManId?: number;
|
||||
/** 考试场次 {kscc} */
|
||||
examRound?: number;
|
||||
/** 当前登录随车考试员id [examiner_info.id] */
|
||||
examinerId?: number;
|
||||
/** 考场区域代号 */
|
||||
fieldId?: string;
|
||||
/** 百米脉冲 */
|
||||
hundredMeterPulse?: string;
|
||||
/** 主键 */
|
||||
id?: number;
|
||||
/** 监控审核人脸识别方式(0:无人脸识别,1:视频截图方式,2:考车上传方式) {isface} */
|
||||
isFace?: string;
|
||||
/** 是否更新map_collect (0:否,1:是) {is_mapcollect} */
|
||||
isMapCollect?: string;
|
||||
/** 是否需要审核(0:否,1:是) */
|
||||
isReview?: string;
|
||||
/** 上一次登录随车考试员 [examiner_info.id] */
|
||||
lastExaminerId?: number;
|
||||
/** 考车号牌 {carcode} */
|
||||
licensePlate?: string;
|
||||
/** 模型id [model_info.id] {modelid} */
|
||||
modelId?: number;
|
||||
/** 导航线路 {dhxl} */
|
||||
navigationLine?: string;
|
||||
/** 考车对应软件版本 */
|
||||
softwareVersion?: string;
|
||||
/** 更新者 */
|
||||
updateBy?: string;
|
||||
/** 更新时间 */
|
||||
updateTime?: string;
|
||||
/** 车辆型号 */
|
||||
vehicleModel?: string;
|
||||
/** 考车对应车辆识别代号 */
|
||||
vin?: string;
|
||||
/** 考试路线 */
|
||||
wayNo?: number;
|
||||
};
|
||||
|
||||
type ExamInfoVo = {
|
||||
bk1?: string;
|
||||
bz1?: string;
|
||||
cartype?: string;
|
||||
czlx?: string;
|
||||
fieldid?: string;
|
||||
flag?: string;
|
||||
fz?: string;
|
||||
jdxx?: string;
|
||||
jxmc?: string;
|
||||
kchp?: string;
|
||||
kfxm?: string;
|
||||
kscc?: string;
|
||||
kscx?: string;
|
||||
ksdd?: string;
|
||||
kskm?: string;
|
||||
kslx?: string;
|
||||
ksmjzp?: string;
|
||||
kssycs?: string;
|
||||
ksxl?: string;
|
||||
ksy1?: string;
|
||||
ksy1sfzmhm?: string;
|
||||
ksy2?: string;
|
||||
ksy2sfzmhm?: string;
|
||||
kszp?: string;
|
||||
kszt?: string;
|
||||
ktbh?: string;
|
||||
lsh?: string;
|
||||
motorType?: string;
|
||||
roadway?: string;
|
||||
securityGuard?: string;
|
||||
sfcode?: string;
|
||||
sfzmhm?: string;
|
||||
updatetime?: string;
|
||||
xb?: string;
|
||||
xh?: string;
|
||||
xldm?: string;
|
||||
xm?: string;
|
||||
ykrq?: string;
|
||||
yycs?: string;
|
||||
zkzmbh?: string;
|
||||
zwxx1?: string;
|
||||
zwxx2?: string;
|
||||
zwxx3?: string;
|
||||
zwxx4?: string;
|
||||
};
|
||||
|
||||
type ExamPointInfo_ = {
|
||||
/** 考场地址 {address} */
|
||||
address?: string;
|
||||
/** 考场车辆类型(1:小车,2:大车,3:摩托){is_motor} */
|
||||
carType?: string;
|
||||
/** 创建者 */
|
||||
createBy?: string;
|
||||
/** 创建时间 */
|
||||
createTime?: string;
|
||||
/** 所属部门id [sys_dept.dept_id] {organize_id} */
|
||||
deptId?: number;
|
||||
/** 考点名称 {name} */
|
||||
deptName?: string;
|
||||
/** 准驾车型(列表,逗号隔开) {car_type} */
|
||||
drivingLicenseType?: string;
|
||||
/** 考点代码 {code} */
|
||||
examPointCode?: string;
|
||||
/** 考点全称 {fullname} */
|
||||
fullName?: string;
|
||||
/** 主键 */
|
||||
id?: number;
|
||||
/** 联系人 {contact} */
|
||||
master?: string;
|
||||
/** 联系电话 {phone} */
|
||||
phone?: string;
|
||||
/** 电子地图映射信息json */
|
||||
photoInfo?: string;
|
||||
/** 电子地图图片路径 {path} */
|
||||
photoPath?: string;
|
||||
/** 备注 */
|
||||
remark?: string;
|
||||
/** 考试科目 {type} */
|
||||
subjectType?: string;
|
||||
/** 更新者 */
|
||||
updateBy?: string;
|
||||
/** 更新时间 */
|
||||
updateTime?: string;
|
||||
};
|
||||
|
||||
type GpsIPUdpIP_ = {
|
||||
/** 车辆品牌名称 */
|
||||
carBrandName?: string;
|
||||
/** 准驾车型(C1、C2...) */
|
||||
drivingLicenseType?: string;
|
||||
/** GPS差分服务器地址 */
|
||||
gpsAddress?: string;
|
||||
/** 是否需要自检(0:不需要自检,1:需要自检) */
|
||||
isNeedCheck?: string;
|
||||
/** 百米脉冲 */
|
||||
pulse?: string;
|
||||
/** 考试科目 */
|
||||
subjectType?: string;
|
||||
/** UDP服务器数据端口号 */
|
||||
udpDataPort?: string;
|
||||
/** UDP服务器ip */
|
||||
udpIp?: string;
|
||||
/** UDP服务器消息端口号 */
|
||||
udpMessagePort?: string;
|
||||
/** 语音对讲服务ip */
|
||||
voiceIp?: string;
|
||||
/** 语音对讲服务端口号 */
|
||||
voicePort?: string;
|
||||
};
|
||||
|
||||
type GpsIPUdpIP2 = {
|
||||
/** 车牌号 */
|
||||
licensePlate: string;
|
||||
/** 评判版本号 */
|
||||
softwareVersion: string;
|
||||
};
|
||||
|
||||
type MarkRuleSet = {
|
||||
itemName?: string;
|
||||
itemno?: string;
|
||||
kfxh?: string;
|
||||
markcatalog?: string;
|
||||
markdepend?: string;
|
||||
markreal?: string;
|
||||
markserial?: string;
|
||||
markshow?: string;
|
||||
markstandard?: string;
|
||||
};
|
||||
|
||||
type paramConfigDataSyncUsingGETParams = {
|
||||
/** tableName */
|
||||
tableName: string;
|
||||
};
|
||||
|
||||
type Pinyin__ = {
|
||||
/** 车牌号 */
|
||||
licensePlate: string;
|
||||
/** 考试里程{kslc} */
|
||||
mileage: number;
|
||||
/** 流水号 */
|
||||
serialNo: string;
|
||||
/** 特殊扣分内容 */
|
||||
specialSub?: string;
|
||||
};
|
||||
|
||||
type Pinyin_10 = {
|
||||
/** 考车id */
|
||||
gunCameraInfos?: Pinyin_9[];
|
||||
};
|
||||
|
||||
type Pinyin_11 = {
|
||||
/** 小红球程序编号 */
|
||||
deviceNo: string;
|
||||
/** 小红球消息 */
|
||||
message: string;
|
||||
};
|
||||
|
||||
type Pinyin_12 = {
|
||||
kaoShengXinXi?: ExamInfoVo[];
|
||||
};
|
||||
|
||||
type Pinyin_13 = {
|
||||
b2no?: string;
|
||||
c1no?: string;
|
||||
c2no?: string;
|
||||
c5no?: string;
|
||||
deviceNo?: string;
|
||||
fieldId?: string;
|
||||
kscc?: string;
|
||||
};
|
||||
|
||||
type Pinyin_14 = {
|
||||
judgeVersion?: string;
|
||||
kdid?: string;
|
||||
kskm?: string;
|
||||
markRuleSet?: MarkRuleSet[];
|
||||
shellVersion?: string;
|
||||
speendParam?: string;
|
||||
vehicleSpeend?: VehicleSpeend[];
|
||||
};
|
||||
|
||||
type Pinyin_15 = {
|
||||
/** 小红球程序编号 */
|
||||
deviceNo: string;
|
||||
};
|
||||
|
||||
type Pinyin_16 = {
|
||||
aqyphoto?: string;
|
||||
aqysfzmhm?: string;
|
||||
aqyxm?: string;
|
||||
bkhgkssj?: string;
|
||||
jxmc?: string;
|
||||
kch?: string;
|
||||
kchp?: string;
|
||||
kclx?: string;
|
||||
kcmc?: string;
|
||||
kscs?: string;
|
||||
kscx?: string;
|
||||
ksxl?: string;
|
||||
ksyphoto?: string;
|
||||
ksysfzmhm?: string;
|
||||
ksyxm?: string;
|
||||
lsh?: string;
|
||||
sfzmhm?: string;
|
||||
xm?: string;
|
||||
yycs?: string;
|
||||
zp1?: string;
|
||||
zp2?: string;
|
||||
zwh?: string;
|
||||
};
|
||||
|
||||
type Pinyin_17 = {
|
||||
/** 考车编号 */
|
||||
carNo: string;
|
||||
/** 小红球程序编号 */
|
||||
deviceNo: string;
|
||||
/** 流水号 */
|
||||
serialNo: string;
|
||||
};
|
||||
|
||||
type Pinyin_18 = {
|
||||
/** 随车考试员编号 */
|
||||
examinerCode?: string;
|
||||
/** 车牌号 */
|
||||
licensePlate: string;
|
||||
/** 流水号 */
|
||||
serialNo: string;
|
||||
};
|
||||
|
||||
type Pinyin_19 = {
|
||||
/** 安徽已考项目 */
|
||||
ahykxx?: string;
|
||||
/** 大车初考项目 */
|
||||
firstABykxx?: string;
|
||||
/** 考试剩余次数 */
|
||||
kssycs?: string;
|
||||
/** 考试预约流水号 */
|
||||
lsh?: string;
|
||||
/** 摩托车考试模式 */
|
||||
motorType?: string;
|
||||
/** 大车补考项目 */
|
||||
secondABykxx?: string;
|
||||
/** 约考信息,内容如:开始时间;里程;考试项目;扣分项目;特殊地方扣分明细 */
|
||||
ykxx?: string;
|
||||
};
|
||||
|
||||
type Pinyin_2 = {
|
||||
/** 文件base64 */
|
||||
examData: string;
|
||||
/** 考试结束时间 */
|
||||
examEndTime: string;
|
||||
/** 考试开始时间 */
|
||||
examStartTime: string;
|
||||
/** 文件名称(type=2/3时需要传) */
|
||||
fileName?: string;
|
||||
/** 车牌号 */
|
||||
licensePlate: string;
|
||||
/** 流水号 */
|
||||
serialNo: string;
|
||||
/** 文件类型,鸿蒙考车固定传1(0:本地轨迹,1:监管轨迹,2:轨迹回放,3:注意力识别) */
|
||||
type: string;
|
||||
};
|
||||
|
||||
type Pinyin_20 = {
|
||||
/** 考车请求时间,跟下面请求数据data中的业务发生时间相同,这里用作设备时差校验 */
|
||||
carSendTime: string;
|
||||
/** 请求数据,详见无锡所接口文档。JSON对象 */
|
||||
data: Record<string, any>;
|
||||
/** 文件列表 */
|
||||
files?: WxsBaseFileBean[];
|
||||
/** 车牌号 */
|
||||
licensePlate: string;
|
||||
/** 接口编号,例如:02-21-000009(考试开始) */
|
||||
restCode: string;
|
||||
};
|
||||
|
||||
type Pinyin_21 = {
|
||||
/** 设备imei号 */
|
||||
imei: string;
|
||||
/** 用户登录时间戳 */
|
||||
loginTime: number;
|
||||
/** md5加密串(根据imei号+时间戳+盐混淆) */
|
||||
signKey: string;
|
||||
};
|
||||
|
||||
type Pinyin_22 = {
|
||||
/** 中心服务器当前时间 */
|
||||
time?: string;
|
||||
};
|
||||
|
||||
type Pinyin_23 = {
|
||||
/** 设备名称 */
|
||||
deviceName: string;
|
||||
/** 设备编号 */
|
||||
deviceNo: string;
|
||||
/** 设备类型(1:考车;2:闸机;3:大屏;4:指纹仪;5:拍照) */
|
||||
type: string;
|
||||
};
|
||||
|
||||
type Pinyin_24 = {
|
||||
/** 考试项目 */
|
||||
bk1?: string;
|
||||
/** 备注1 0,0, */
|
||||
bz1?: string;
|
||||
/** 考试车型,考生表的carType */
|
||||
cartype?: string;
|
||||
/** 操作类型 */
|
||||
czlx?: string;
|
||||
/** 考试区域 */
|
||||
fieldid?: string;
|
||||
/** 考试是否合格 */
|
||||
flag?: string;
|
||||
/** 考试分组 */
|
||||
fz?: string;
|
||||
/** 阶段信息 */
|
||||
jdxx?: string;
|
||||
/** 驾校名称 */
|
||||
jxmc?: string;
|
||||
/** 考车号牌 */
|
||||
kchp?: string;
|
||||
/** 扣分项目 */
|
||||
kfxm?: string;
|
||||
/** 考试场次 */
|
||||
kscc?: string;
|
||||
/** 考试车型 */
|
||||
kscx?: string;
|
||||
/** 考试地点,考场编号 */
|
||||
ksdd?: string;
|
||||
/** 考试科目 */
|
||||
kskm?: string;
|
||||
/** 考试类型 */
|
||||
kslx?: string;
|
||||
/** ksmjzp */
|
||||
ksmjzp?: string;
|
||||
/** 考试剩余次数 */
|
||||
kssycs?: string;
|
||||
/** 考试线路-实用 */
|
||||
ksxl?: string;
|
||||
/** 考试员姓名1 */
|
||||
ksy1?: string;
|
||||
/** 考试员1身份证号 */
|
||||
ksy1sfzmhm?: string;
|
||||
/** 考试员随车考试员2 */
|
||||
ksy2?: string;
|
||||
/** 考试员2身份证号 */
|
||||
ksy2sfzmhm?: string;
|
||||
/** 考生照片,base64编码 */
|
||||
kszp?: string;
|
||||
/** 考试状态 */
|
||||
kszt?: string;
|
||||
/** 考台编号 */
|
||||
ktbh?: string;
|
||||
/** 考试预约流水号 */
|
||||
lsh?: string;
|
||||
/** 摩托车考试模式 1.先考科目2,再考科目3 2.科目2 3.科目3 4.先考科目3,再考科目2 */
|
||||
motorType?: string;
|
||||
/** 车道 */
|
||||
roadway?: string;
|
||||
/** 安全员姓名 */
|
||||
securityGuard?: string;
|
||||
/** 6位身份编码 */
|
||||
sfcode?: string;
|
||||
/** 身份证号 */
|
||||
sfzmhm?: string;
|
||||
/** 上车更新时间 */
|
||||
updatetime?: string;
|
||||
/** 考生性别 */
|
||||
xb?: string;
|
||||
/** 序号 */
|
||||
xh?: string;
|
||||
/** 监管线路代码,上传用 */
|
||||
xldm?: string;
|
||||
/** 考生姓名 */
|
||||
xm?: string;
|
||||
/** 约考日期 */
|
||||
ykrq?: string;
|
||||
/** 预约次数 */
|
||||
yycs?: string;
|
||||
/** 准考证明编号,admissionNo */
|
||||
zkzmbh?: string;
|
||||
/** 指纹1 */
|
||||
zwxx1?: string;
|
||||
/** 指纹2 */
|
||||
zwxx2?: string;
|
||||
/** 指纹3 */
|
||||
zwxx3?: string;
|
||||
/** 指纹4 */
|
||||
zwxx4?: string;
|
||||
};
|
||||
|
||||
type Pinyin_25 = {
|
||||
/** 设备号 */
|
||||
deviceNo: string;
|
||||
/** 照片1 */
|
||||
firstImage: string;
|
||||
/** 照片2 */
|
||||
secondImage: string;
|
||||
/** 身份证号码 */
|
||||
sfzh: string;
|
||||
};
|
||||
|
||||
type Pinyin_26 = {
|
||||
/** 车牌号 */
|
||||
licensePlate: string;
|
||||
/** 流水号 */
|
||||
serialNo: string;
|
||||
};
|
||||
|
||||
type Pinyin_27 = {
|
||||
/** 类别(1:外壳,2:视屏,3:评判,4:接口) */
|
||||
category: string;
|
||||
/** 车牌号 */
|
||||
licensePlate: string;
|
||||
/** 日志内容 */
|
||||
logData: string;
|
||||
/** 考车日志类型(1:升级日,2:错误日志) */
|
||||
logType: string;
|
||||
/** 考车发生时间(格式:yyyy-MM-dd HH:mm:ss) */
|
||||
vehicleTime: string;
|
||||
};
|
||||
|
||||
type Pinyin_28 = {
|
||||
/** 设备编号 */
|
||||
deviceNo: string;
|
||||
};
|
||||
|
||||
type Pinyin_29 = {
|
||||
/** 自检结果附带信息 */
|
||||
condition: string;
|
||||
/** 自检结果(1:合格,0:不合格) */
|
||||
flag: string;
|
||||
/** 车牌号 */
|
||||
licensePlate: string;
|
||||
};
|
||||
|
||||
type Pinyin_3 = {
|
||||
/** 车牌号 */
|
||||
licensePlate: string;
|
||||
};
|
||||
|
||||
type Pinyin_30 = {
|
||||
/** 考车编号 */
|
||||
carNo?: string;
|
||||
/** 车辆类型 */
|
||||
carType?: string;
|
||||
/** 身份证号 */
|
||||
cardNo?: string;
|
||||
/** 设备编号 */
|
||||
deviceNo?: string;
|
||||
faceVerifyRes?: string;
|
||||
/** fieldId */
|
||||
fieldId?: string;
|
||||
fingerVerifyRes?: string;
|
||||
/** 体温是否正常标志 */
|
||||
health?: string;
|
||||
/** 6位身份编码 */
|
||||
idNoSix?: string;
|
||||
/** 考官证件号码 */
|
||||
kgCardNo?: string;
|
||||
/** 人工过门禁原因 */
|
||||
manualReason?: string;
|
||||
/** mixModel */
|
||||
mixModel?: string;
|
||||
/** 人脸识别度 */
|
||||
rlsbValue?: string;
|
||||
/** 流水号 */
|
||||
serialNo?: string;
|
||||
sfzzp?: string;
|
||||
/** 考试科目 */
|
||||
subjectType?: string;
|
||||
/** 体温值 */
|
||||
temperature?: string;
|
||||
/** 体温照片1 */
|
||||
twzp1?: string;
|
||||
/** 体温照片2 */
|
||||
twzp2?: string;
|
||||
/** 照片 */
|
||||
zp?: string;
|
||||
zw1?: string;
|
||||
zw2?: string;
|
||||
zw3?: string;
|
||||
zw4?: string;
|
||||
};
|
||||
|
||||
type Pinyin_31 = {
|
||||
/** 模型内容(base64) */
|
||||
content: string;
|
||||
/** 文件名 */
|
||||
filename: string;
|
||||
};
|
||||
|
||||
type Pinyin_32 = {
|
||||
/** 车牌号 */
|
||||
licensePlate: string;
|
||||
};
|
||||
|
||||
type Pinyin_33 = {
|
||||
/** 车牌号码 */
|
||||
licensePlate: string;
|
||||
};
|
||||
|
||||
type Pinyin_34 = {
|
||||
/** 车牌号 */
|
||||
licensePlate: string;
|
||||
};
|
||||
|
||||
type Pinyin_35 = {
|
||||
/** 是否需要自检(0:不需要自检,1:需要自检) */
|
||||
isNeedCheck?: string;
|
||||
/** 自检项目 */
|
||||
items?: string;
|
||||
/** 串口号 */
|
||||
portNo?: string;
|
||||
/** 重试次数 */
|
||||
retryTime?: string;
|
||||
/** (1:取反,0:不取反)例如安全带取反且离合器不取反即(1^0) */
|
||||
reverse?: string;
|
||||
};
|
||||
|
||||
type Pinyin_36 = {
|
||||
/** 住址 */
|
||||
addr?: string;
|
||||
/** 设备编号 */
|
||||
deviceNo?: string;
|
||||
/** fieldId */
|
||||
fieldId?: string;
|
||||
/** 考官证件号码 */
|
||||
kgsfzmhm?: string;
|
||||
/** 考试科目 */
|
||||
kskm?: string;
|
||||
/** 流水号 */
|
||||
lsh?: string;
|
||||
/** mixModel */
|
||||
mixModel?: string;
|
||||
/** 身份证号 */
|
||||
sfzh: string;
|
||||
/** 姓名 */
|
||||
xm?: string;
|
||||
};
|
||||
|
||||
type Pinyin_37 = {
|
||||
/** 设备号 */
|
||||
deviceNo?: string;
|
||||
/** 照片1 */
|
||||
firstImage?: string;
|
||||
/** 考试科目 */
|
||||
kskm?: string;
|
||||
/** 认证次数 */
|
||||
rzcs?: string;
|
||||
/** 照片2 */
|
||||
secondImage: string;
|
||||
/** 身份证号码 */
|
||||
sfzh: string;
|
||||
/** 设备类型(1、门禁2、考车3、过程) */
|
||||
type: string;
|
||||
/** 审核类型(2、人工审核) */
|
||||
verifyType?: string;
|
||||
};
|
||||
|
||||
type Pinyin_38 = {
|
||||
/** 设备硬件号 */
|
||||
deviceNo: string;
|
||||
/** 门禁程序版本号 */
|
||||
gateVersion: string;
|
||||
};
|
||||
|
||||
type Pinyin_39 = {
|
||||
/** 随车考试员登录用户名(可以是身份证号、员工号、制卡号等等) */
|
||||
examinerName: string;
|
||||
/** 随车考试员密码 */
|
||||
examinerPwd?: string;
|
||||
/** 车牌号 */
|
||||
licensePlate: string;
|
||||
};
|
||||
|
||||
type Pinyin_4 = {
|
||||
/** 考生信息列表 */
|
||||
studentList?: Pinyin_24[];
|
||||
};
|
||||
|
||||
type Pinyin_40 = {
|
||||
/** 指纹信息1 */
|
||||
finger1?: string;
|
||||
/** 指纹信息2 */
|
||||
finger2?: string;
|
||||
/** 随车考试员姓名 */
|
||||
name?: string;
|
||||
};
|
||||
|
||||
type Pinyin_5 = {
|
||||
/** 车牌号码 */
|
||||
licensePlate: string;
|
||||
/** 表名,大写 */
|
||||
tableName: string;
|
||||
};
|
||||
|
||||
type Pinyin_6 = {
|
||||
/** car_mac */
|
||||
car_mac: string;
|
||||
/** 设备类型(1:海康,2:大华) */
|
||||
equipment_type: string;
|
||||
/** 第一路通道 */
|
||||
first_channel: string;
|
||||
/** 第一路ip */
|
||||
first_ip: string;
|
||||
/** 第一路密码 */
|
||||
first_password: string;
|
||||
/** 第一路端口 */
|
||||
first_port: string;
|
||||
/** 第一路用户名 */
|
||||
first_username: string;
|
||||
/** 第四路通道 */
|
||||
fourth_channel: string;
|
||||
/** 第四路ip */
|
||||
fourth_ip: string;
|
||||
/** 第四路密码 */
|
||||
fourth_password: string;
|
||||
/** 第四路端口 */
|
||||
fourth_port: string;
|
||||
/** 第四路用户名 */
|
||||
fourth_username: string;
|
||||
/** 连接类型(0:主码流TCP方式,1:子码流TCP方式,2:主码流UDP方式,3:子码流UDP方式) */
|
||||
line_type: string;
|
||||
/** 拍照通道 */
|
||||
photo_channel: string;
|
||||
/** 叠加内容1(1.考生姓名,身份证号,3.当前项目,4.当前时间) */
|
||||
photo_overlay_text_content1: string;
|
||||
/** 叠加内容2(1.考生姓名,身份证号,3.当前项目,4.当前时间,0:空) */
|
||||
photo_overlay_text_content2: string;
|
||||
/** 叠加内容3(1.考生姓名,身份证号,3.当前项目,4.当前时间,0:空) */
|
||||
photo_overlay_text_content3: string;
|
||||
/** 照片叠加文字(1:启用,0:关闭) */
|
||||
photo_overlay_text_enable: string;
|
||||
/** 位置(1:左上角,2:右上角,3:左下角,4.右下角) */
|
||||
photo_overlay_text_position: string;
|
||||
/** 文字大小 */
|
||||
photo_overlay_text_size: string;
|
||||
/** 分割符(1:/,2:*\,3:换行) */
|
||||
photo_overlay_text_split: string;
|
||||
/** 启用过程人脸比对 {process_face_comparion_enable} */
|
||||
process_face_comparion_enable: string;
|
||||
/** 过程人脸比对模式(1:启用,0:关闭) {process_face_comparion_mode} */
|
||||
process_face_comparion_mode: string;
|
||||
/** 第二路通道 */
|
||||
second_channel: string;
|
||||
/** 第二路ip */
|
||||
second_ip: string;
|
||||
/** 第二路密码 */
|
||||
second_password: string;
|
||||
/** 第二路端口 */
|
||||
second_port: string;
|
||||
/** 第二路用户名 */
|
||||
second_username: string;
|
||||
/** 第三路通道 */
|
||||
third_channel: string;
|
||||
/** 第三路ip */
|
||||
third_ip: string;
|
||||
/** 第三路密码 */
|
||||
third_password: string;
|
||||
/** 第三路端口 */
|
||||
third_port: string;
|
||||
/** 第三路用户名 */
|
||||
third_username: string;
|
||||
/** 视频路数 */
|
||||
video_channel: string;
|
||||
/** 录像方式(0:本地录像,1:本地不录象) */
|
||||
video_mode: string;
|
||||
/** 视频遮挡 */
|
||||
video_occlusion: string;
|
||||
/** 视频遮挡范围(1:一路,2:二路,3:三路,4:四路) */
|
||||
video_occlusion_range: string;
|
||||
/** 视频叠加位置X */
|
||||
video_overlay_position_x: string;
|
||||
/** 视频叠加位置Y */
|
||||
video_overlay_position_y: string;
|
||||
/** 视频叠加内容1(1:考生姓名,2:身份证号,3:当前项目,4:当前时间) */
|
||||
video_overlay_text_content1: string;
|
||||
/** 视频叠加内容2(1:考生姓名,2:身份证号,3:当前项目,4:当前时间,0:空) */
|
||||
video_overlay_text_content2: string;
|
||||
/** 视频叠加内容3(1:考生姓名,2:身份证号,3:当前项目,4:当前时间,0:空) */
|
||||
video_overlay_text_content3: string;
|
||||
/** 视频叠加文字(1:启用,0:关闭) */
|
||||
video_overlay_text_enable: string;
|
||||
/** 视频叠加分割符(1:/,2:*\,3:换行) */
|
||||
video_overlay_text_split: string;
|
||||
/** 录像范围(1:一路,2:二路,3:三路,4:四路) */
|
||||
video_range: string;
|
||||
/** 本考车对应视频合成服务器IP(填错将不能开始考试) */
|
||||
video_synthesis_server_ip: string;
|
||||
/** 本考车对应视频合成服务器端口(填错将不能开始考试) */
|
||||
video_synthesis_server_port: string;
|
||||
/** 本考车对应视频合成信息处理系统IP(填错或不填将可能导致录像丢失) */
|
||||
video_synthesis_system_ip: string;
|
||||
/** 本考车对应视频合成信息处理系统本地响应端口(填错或不填将可能导致录像丢失) */
|
||||
video_synthesis_system_port: string;
|
||||
};
|
||||
|
||||
type Pinyin_7 = {
|
||||
/** 车牌号 */
|
||||
licensePlate: string;
|
||||
};
|
||||
|
||||
type Pinyin_8 = {
|
||||
/** 车辆品牌列表 */
|
||||
carBrandList?: CarBrand_[];
|
||||
/** 考车列表 */
|
||||
carInfoList?: CarInfo_[];
|
||||
/** 考点列表 */
|
||||
examPointInfoList?: ExamPointInfo_[];
|
||||
};
|
||||
|
||||
type Pinyin_9 = {
|
||||
/** 摄像头通道号 */
|
||||
channel?: string;
|
||||
/** 硬盘录像机ip */
|
||||
deviceIP?: string;
|
||||
/** 监管场地编号 */
|
||||
equipmentId?: string;
|
||||
/** 非全景绑定的全景 */
|
||||
fullId?: string;
|
||||
/** 全景区域坐标 */
|
||||
gpsArea?: string;
|
||||
/** 摄像头id */
|
||||
id?: string;
|
||||
/** 是否全景摄像头 */
|
||||
isFull?: string;
|
||||
/** 硬盘录像机密码 */
|
||||
password?: string;
|
||||
/** 硬盘录像机端口 */
|
||||
port?: string;
|
||||
/** 硬盘录像机用户名 */
|
||||
user?: string;
|
||||
};
|
||||
|
||||
type ROf_ = {
|
||||
/** 状态码 1成功 0通用失败 */
|
||||
code: number;
|
||||
data?: Pinyin_4;
|
||||
/** 返回消息 */
|
||||
msg: string;
|
||||
};
|
||||
|
||||
type ROf10 = {
|
||||
/** 状态码 1成功 0通用失败 */
|
||||
code: number;
|
||||
data?: Pinyin_31;
|
||||
/** 返回消息 */
|
||||
msg: string;
|
||||
};
|
||||
|
||||
type ROf11 = {
|
||||
/** 状态码 1成功 0通用失败 */
|
||||
code: number;
|
||||
data?: Pinyin_35;
|
||||
/** 返回消息 */
|
||||
msg: string;
|
||||
};
|
||||
|
||||
type ROf12 = {
|
||||
/** 状态码 1成功 0通用失败 */
|
||||
code: number;
|
||||
data?: Pinyin_40;
|
||||
/** 返回消息 */
|
||||
msg: string;
|
||||
};
|
||||
|
||||
type ROf2 = {
|
||||
/** 状态码 1成功 0通用失败 */
|
||||
code: number;
|
||||
data?: Pinyin_6;
|
||||
/** 返回消息 */
|
||||
msg: string;
|
||||
};
|
||||
|
||||
type ROf3 = {
|
||||
/** 状态码 1成功 0通用失败 */
|
||||
code: number;
|
||||
data?: Pinyin_8;
|
||||
/** 返回消息 */
|
||||
msg: string;
|
||||
};
|
||||
|
||||
type ROf4 = {
|
||||
/** 状态码 1成功 0通用失败 */
|
||||
code: number;
|
||||
data?: Pinyin_10;
|
||||
/** 返回消息 */
|
||||
msg: string;
|
||||
};
|
||||
|
||||
type ROf5 = {
|
||||
/** 状态码 1成功 0通用失败 */
|
||||
code: number;
|
||||
data?: Pinyin_12;
|
||||
/** 返回消息 */
|
||||
msg: string;
|
||||
};
|
||||
|
||||
type ROf6 = {
|
||||
/** 状态码 1成功 0通用失败 */
|
||||
code: number;
|
||||
data?: Pinyin_14;
|
||||
/** 返回消息 */
|
||||
msg: string;
|
||||
};
|
||||
|
||||
type ROf7 = {
|
||||
/** 状态码 1成功 0通用失败 */
|
||||
code: number;
|
||||
data?: Pinyin_16;
|
||||
/** 返回消息 */
|
||||
msg: string;
|
||||
};
|
||||
|
||||
type ROf8 = {
|
||||
/** 状态码 1成功 0通用失败 */
|
||||
code: number;
|
||||
data?: Pinyin_19;
|
||||
/** 返回消息 */
|
||||
msg: string;
|
||||
};
|
||||
|
||||
type ROf9 = {
|
||||
/** 状态码 1成功 0通用失败 */
|
||||
code: number;
|
||||
data?: Pinyin_22;
|
||||
/** 返回消息 */
|
||||
msg: string;
|
||||
};
|
||||
|
||||
type ROfGpsIPUdpIP_ = {
|
||||
/** 状态码 1成功 0通用失败 */
|
||||
code: number;
|
||||
data?: GpsIPUdpIP_;
|
||||
/** 返回消息 */
|
||||
msg: string;
|
||||
};
|
||||
|
||||
type ROfListOfobject = {
|
||||
/** 状态码 1成功 0通用失败 */
|
||||
code: number;
|
||||
/** 承载数据 */
|
||||
data?: Record<string, any>[];
|
||||
/** 返回消息 */
|
||||
msg: string;
|
||||
};
|
||||
|
||||
type ROfobject = {
|
||||
/** 状态码 1成功 0通用失败 */
|
||||
code: number;
|
||||
/** 承载数据 */
|
||||
data?: Record<string, any>;
|
||||
/** 返回消息 */
|
||||
msg: string;
|
||||
};
|
||||
|
||||
type VehicleSpeend = {
|
||||
carType?: string;
|
||||
speend?: string;
|
||||
};
|
||||
|
||||
type WxsBaseFileBean = {
|
||||
/** 文件内容base64编码 */
|
||||
data: string;
|
||||
/** 文件类别或id */
|
||||
fileid: string;
|
||||
};
|
||||
}
|
||||
@ -12,7 +12,7 @@ const TAG = '[updateModelAndCar]'
|
||||
export async function updateModelAndCar(flag){
|
||||
const data:any = await getModalValueCdAndCar({ carid: globalThis.carInfo.carId })
|
||||
|
||||
const outFile = flag ? '/data/storage/el2/base/haps/entry/files/' : '/mnt/hmdfs/100/account/device_view/local/files/duolun/models'
|
||||
const outFile = flag ? '/data/storage/el2/base/haps/entry/files/' : '/mnt/hmdfs/100/account/device_view/local/files/duolun/models'
|
||||
const httpPath = flag ? data.getModalValueCdAndCarRsp.body.appPath : data.getModalValueCdAndCarRsp.body.filePath
|
||||
const arr = httpPath.split('/')
|
||||
let path
|
||||
|
||||
@ -1,7 +1,5 @@
|
||||
//import UdpClient from './UdpClient';
|
||||
import UdpClientByCenter from './UdpClientByCenter';
|
||||
import { getSyncData } from '../service/initable';
|
||||
import { getChuankouFn,uploadLogFile} from '../../common/service/indexService';
|
||||
import { getChuankouFn, uploadLogFile } from '../../common/service/indexService';
|
||||
import FileUtil from '../../common/utils/File';
|
||||
import { GlobalConfig } from '../../config/index';
|
||||
import { Array2Byte, string2Bytes } from './tools';
|
||||
@ -11,20 +9,17 @@ export async function sendMsg(val) {
|
||||
}
|
||||
|
||||
export async function getUDP(context, errorFlag?) {
|
||||
return new Promise(async (reslove, reject) => {
|
||||
return new Promise(async (resolve, reject) => {
|
||||
const fileUtil = new FileUtil(context)
|
||||
const data = await fileUtil.readFile(GlobalConfig.comoonfileWriteAddress + '/config/ipConfig.txt');
|
||||
console.log('ttttt', data)
|
||||
if (data === '' || data === undefined) {
|
||||
console.log(` getUDP has no IPConfigTable `);
|
||||
globalThis.udpClient = {}
|
||||
globalThis.host = ''
|
||||
reslove('')
|
||||
resolve('')
|
||||
} else {
|
||||
const result = JSON.parse(data)
|
||||
console.log(` getUDP has IPConfigTable `);
|
||||
if (globalThis.udpClient && globalThis.udpClient.closeUdp) {
|
||||
console.log(` getUDP has udclent close and rebind `);
|
||||
globalThis.udpClient.closeUdp(() => {
|
||||
setTimeout(() => {
|
||||
globalThis.udpClient.rebindUdp(result.udplocalIp, result.udplocalIpPort, result.udpOppositeIp,
|
||||
@ -32,22 +27,17 @@ export async function getUDP(context, errorFlag?) {
|
||||
globalThis.udpClient.sendMsg('111', null)
|
||||
globalThis.host = `http://${result.centerIp}:${result.centerPort}`
|
||||
globalThis.udpClient.onError_Callback(() => {
|
||||
console.log('getUDPgetUDPgetUDP')
|
||||
getUDP(context, true)
|
||||
if (errorFlag && globalThis.udpClient && globalThis.udpClient.onMessage_1) {
|
||||
globalThis.udpClient.onMessage_1 = globalThis.udpClient.onMessage_1
|
||||
}
|
||||
})
|
||||
reslove(`http://${result.centerIp}:${result.centerPort}`)
|
||||
|
||||
// globalThis.udpClient.onError_resend(globalThis.udpClient.onMessage_1?globalThis.udpClient.onMessage_1:()=>{})
|
||||
resolve(`http://${result.centerIp}:${result.centerPort}`)
|
||||
}, 1000)
|
||||
})
|
||||
|
||||
} else {
|
||||
// 未绑定
|
||||
console.log(` getUDP has no udclent and bind `);
|
||||
console.log('ttttttdata', JSON.stringify(result))
|
||||
const udpClient: UdpClientByCenter =
|
||||
new UdpClientByCenter(result.udplocalIp, result.udplocalIpPort, result.udpOppositeIp,
|
||||
result.udpOppositeIpPort)
|
||||
@ -64,78 +54,12 @@ export async function getUDP(context, errorFlag?) {
|
||||
}
|
||||
})
|
||||
getChuankouFn()
|
||||
reslove(`http://${result.centerIp}:${result.centerPort}`)
|
||||
resolve(`http://${result.centerIp}:${result.centerPort}`)
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
return
|
||||
getSyncData('IpConfigTable').then((result: Array<any>) => {
|
||||
if (result.length) {
|
||||
console.log(` getUDP has IPConfigTable `);
|
||||
if (globalThis.udpClient && globalThis.udpClient.closeUdp) {
|
||||
console.log(` getUDP has udclent close and rebind `);
|
||||
globalThis.udpClient.closeUdp(() => {
|
||||
setTimeout(() => {
|
||||
globalThis.udpClient.rebindUdp(result[0].udplocalIp, result[0].udplocalIpPort, result[0].udpOppositeIp,
|
||||
result[0].udpOppositeIpPort)
|
||||
globalThis.udpClient.sendMsg('111', null)
|
||||
globalThis.host = `http://${result[0].centerIp}:${result[0].centerPort}`
|
||||
globalThis.udpClient.onError_Callback(() => {
|
||||
console.log('getUDPgetUDPgetUDP')
|
||||
getUDP(true, context)
|
||||
if (errorFlag && globalThis.udpClient && globalThis.udpClient.onMessage_1) {
|
||||
globalThis.udpClient.onMessage_1 = globalThis.udpClient.onMessage_1
|
||||
}
|
||||
})
|
||||
reslove(`http://${result[0].centerIp}:${result[0].centerPort}`)
|
||||
|
||||
// globalThis.udpClient.onError_resend(globalThis.udpClient.onMessage_1?globalThis.udpClient.onMessage_1:()=>{})
|
||||
}, 1000)
|
||||
})
|
||||
|
||||
} else {
|
||||
// 未绑定
|
||||
console.log(` getUDP has no udclent and bind `);
|
||||
const udpClient: UdpClientByCenter =
|
||||
new UdpClientByCenter(result[0].udplocalIp, result[0].udplocalIpPort, result[0].udpOppositeIp,
|
||||
result[0].udpOppositeIpPort)
|
||||
udpClient.bindUdp()
|
||||
udpClient.sendMsg('111')
|
||||
globalThis.host = `http://${result[0].centerIp}:${result[0].centerPort}`
|
||||
globalThis.udpClient = udpClient
|
||||
|
||||
globalThis.udpClient.onMessage_1(() => {
|
||||
console.log('getUDPonMessage_1msgmsgByGloalUdp')
|
||||
|
||||
})
|
||||
globalThis.udpClient.onError_Callback(() => {
|
||||
getUDP(true, context)
|
||||
if (errorFlag && globalThis.udpClient && globalThis.udpClient.onMessage_1) {
|
||||
globalThis.udpClient.onMessage_1 = globalThis.udpClient.onMessage_1
|
||||
}
|
||||
})
|
||||
// udpClient.onError_resend(globalThis.udpClient.onMessage_1?globalThis.udpClient.onMessage_1:()=>{})
|
||||
getChuankouFn()
|
||||
reslove(`http://${result[0].centerIp}:${result[0].centerPort}`)
|
||||
|
||||
|
||||
}
|
||||
|
||||
} else {
|
||||
console.log(` getUDP has no IPConfigTable `);
|
||||
// if(globalThis.udpClient)
|
||||
// {
|
||||
// console.log(` getUDP2 has IPConfigTable ,has udpClient ,close it`);
|
||||
// globalThis.udpClient.closeUdp(async ()=>{ })
|
||||
// }
|
||||
globalThis.udpClient = {}
|
||||
// globalThis.udpClient.onMessage_1 = () => {}
|
||||
globalThis.host = ''
|
||||
reslove('')
|
||||
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
}
|
||||
@ -187,7 +111,7 @@ export async function getUDP2(context, errorFlag?) {
|
||||
console.info('surenjun', `接收到平台扣分请求,请求指令为:${val.body[1]}`)
|
||||
globalThis.udpEvent.sendOnKf(val.body[1])
|
||||
}
|
||||
if(val.body[0] == 6){
|
||||
if (val.body[0] == 6) {
|
||||
console.info('surenjun', `接收到平台停考指令,请求指令为:${val.body[1]}`)
|
||||
globalThis.judgeUdp.askStopExam(val.body[1])
|
||||
}
|
||||
@ -199,7 +123,7 @@ export async function getUDP2(context, errorFlag?) {
|
||||
console.info('surenjun', 'GlobalUdp收到endExam事件')
|
||||
globalThis.udpEvent.sendEndExam(val.body[1])
|
||||
}
|
||||
if(val.body[0] == 18){
|
||||
if (val.body[0] == 18) {
|
||||
//上传日志和轨迹
|
||||
uploadLogFile()
|
||||
}
|
||||
@ -221,10 +145,10 @@ export async function getUDP2(context, errorFlag?) {
|
||||
placeId: globalThis.carInfo.examinationRoomId
|
||||
}
|
||||
globalThis.udpClient2.send(param)
|
||||
}else if(val.id == '39'){
|
||||
} else if (val.id == '39') {
|
||||
//确定远程终止
|
||||
const lsh = val.body.map(byte => String.fromCharCode(byte)).join('')
|
||||
if( lsh == globalThis.lsh ){
|
||||
if (lsh == globalThis.lsh) {
|
||||
globalThis.udpEvent.sendStopExam()
|
||||
globalThis.judgeUdp.confirmStopExam(globalThis.signNum)
|
||||
}
|
||||
@ -236,67 +160,7 @@ export async function getUDP2(context, errorFlag?) {
|
||||
}
|
||||
}
|
||||
return
|
||||
console.log(` getUDP2 enter`);
|
||||
getSyncData('IpConfigTable').then(async (result: Array<any>) => {
|
||||
if (result.length) {
|
||||
console.log(` getUDP2 has IPConfigTable `);
|
||||
if (globalThis.udpClient2 && globalThis.udpClient2.closeUdp) {
|
||||
console.log(` getUDP2 has udclent ,close and rebind `);
|
||||
globalThis.udpClient2.closeUdp(async () => {
|
||||
setTimeout(() => {
|
||||
globalThis.udpClient2.rebindUdp(result[0].udplocalIp, '8800', globalThis.carInfo?.udpAddress,
|
||||
globalThis.carInfo?.messagePort)
|
||||
globalThis.udpClient2.onError_Callback(() => {
|
||||
getUDP2(true);
|
||||
if (errorFlag && globalThis.udpClient2 && globalThis.udpClient2.onMessage_2) {
|
||||
globalThis.udpClient2.onMessage_2 = globalThis.udpClient2.onMessage_2
|
||||
}
|
||||
})
|
||||
}, 1000)
|
||||
})
|
||||
} else {
|
||||
// 未绑定
|
||||
console.log(` getUDP2 has no udclent and bind `);
|
||||
const udpClient2: UdpClientByCenter =
|
||||
new UdpClientByCenter(result[0].udplocalIp, '8800', globalThis.carInfo?.udpAddress,
|
||||
globalThis.carInfo?.messagePort)
|
||||
await udpClient2.bindUdp()
|
||||
await udpClient2.onError_Callback(() => {
|
||||
getUDP2(true);
|
||||
if (errorFlag && globalThis.udpClient2 && globalThis.udpClient2.onMessage_2) {
|
||||
globalThis.udpClient2.onMessage_2 = globalThis.udpClient2.onMessage_2
|
||||
}
|
||||
})
|
||||
if (!errorFlag) {
|
||||
await udpClient2.onMessage_2((val) => {
|
||||
if (val.id == '32') {
|
||||
globalThis.signNum = val.body[1]
|
||||
|
||||
} else if (val.id == '46') {
|
||||
let tmpList = []
|
||||
const str = globalThis.lsh
|
||||
for (let i = 0; i < str.length; i++) {
|
||||
tmpList.push(this.string2Bytes(str.charCodeAt(i), 1 * 8)[0])
|
||||
}
|
||||
const param = {
|
||||
id: 47,
|
||||
list: tmpList,
|
||||
carNo: globalThis.carInfo.carNo,
|
||||
placeId: globalThis.carInfo.examinationRoomId
|
||||
}
|
||||
globalThis.udpClient2.send(param)
|
||||
}
|
||||
})
|
||||
}
|
||||
globalThis.udpClient2 = udpClient2
|
||||
|
||||
}
|
||||
} else {
|
||||
globalThis.udpClient2 = {}
|
||||
globalThis.udpClient2.setMsgCallBack = () => {
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
export async function setTopLineUdp() {
|
||||
@ -325,7 +189,6 @@ export async function setJudgeUdp() {
|
||||
const config = JSON.parse(data)
|
||||
|
||||
//
|
||||
// const config = await getSyncData('IpConfigTable');
|
||||
let udpIndex = 0;
|
||||
let currentUdpIndex = 0;
|
||||
let judgeUdpTimer
|
||||
@ -343,15 +206,12 @@ export async function setJudgeUdp() {
|
||||
)
|
||||
console.info('surenjun hintPort=> ', globalThis.carInfo?.hintPort)
|
||||
|
||||
await udpClientbyCenter.onError_Callback(() => {
|
||||
udpClientbyCenter.onError_Callback(() => {
|
||||
})
|
||||
await udpClientbyCenter.bindUdp()
|
||||
await udpClientbyCenter.onMessage_2((val) => {
|
||||
udpClientbyCenter.bindUdp()
|
||||
udpClientbyCenter.onMessage_2((val) => {
|
||||
})
|
||||
|
||||
//远程监听开始考试、结束考试、扣分指令
|
||||
|
||||
// globalThis.judgeUdpClient = udpClientbyCenter;
|
||||
return {
|
||||
send(bytes) {
|
||||
if (udpIndex > currentUdpIndex) {
|
||||
@ -388,11 +248,11 @@ export async function setJudgeUdp() {
|
||||
},
|
||||
|
||||
//申请语音对讲
|
||||
askVoice(){
|
||||
console.log('surenjun','发送语音对讲')
|
||||
askVoice() {
|
||||
console.log('surenjun', '发送语音对讲')
|
||||
//udp bug 连发消息
|
||||
let num =0;
|
||||
let timer = setInterval(()=>{
|
||||
let num = 0;
|
||||
let timer = setInterval(() => {
|
||||
globalThis.udpClient2.sendMsgExt({
|
||||
id: 49,
|
||||
list: ['1'],
|
||||
@ -400,15 +260,15 @@ export async function setJudgeUdp() {
|
||||
placeId: globalThis.carInfo.examinationRoomId,
|
||||
})
|
||||
num++;
|
||||
if(num >=5){
|
||||
if (num >= 5) {
|
||||
clearInterval(timer)
|
||||
}
|
||||
},200)
|
||||
}, 200)
|
||||
|
||||
},
|
||||
|
||||
//查询远程终止考试
|
||||
askStopExam(directives){
|
||||
askStopExam(directives) {
|
||||
globalThis.udpClient2.sendMsgExt({
|
||||
id: 38,
|
||||
list: [directives],
|
||||
@ -417,11 +277,11 @@ export async function setJudgeUdp() {
|
||||
})
|
||||
},
|
||||
// 确定远程终止考试
|
||||
confirmStopExam(directives){
|
||||
console.log('surenjun','确定远程终止考试 directives=》'+directives)
|
||||
confirmStopExam(directives) {
|
||||
console.log('surenjun', '确定远程终止考试 directives=》' + directives)
|
||||
globalThis.udpClient2.sendMsgExt({
|
||||
id: 40,
|
||||
list: [directives,1],
|
||||
list: [directives, 1],
|
||||
carNo: globalThis.carInfo.carNo,
|
||||
placeId: globalThis.carInfo.examinationRoomId
|
||||
})
|
||||
|
||||
@ -1,6 +1,13 @@
|
||||
import webSocket from '@ohos.net.webSocket'
|
||||
import promptAction from '@ohos.promptAction'
|
||||
import router from '@ohos.router'
|
||||
import fs from '@ohos.file.fs';
|
||||
import request from '@ohos.request';
|
||||
import common from '@ohos.app.ability.common';
|
||||
import zlib from '@ohos.zlib';
|
||||
import appRecovery from '@ohos.app.ability.appRecovery';
|
||||
import power from '@ohos.power';
|
||||
import preferences from '@ohos.data.preferences';
|
||||
|
||||
enum PlatFormEventType {
|
||||
RestartDevice = "1",
|
||||
@ -39,34 +46,155 @@ const routerMap = {
|
||||
SignDisplay: 12,
|
||||
}
|
||||
|
||||
export const gpsConfig = [
|
||||
{ label: "差分状态", prop: "cfzt" },
|
||||
{ label: "经纬度收星数", prop: "sxs" },
|
||||
{ label: "龄期", prop: "lq" },
|
||||
{ label: "海拔高", prop: "hb" },
|
||||
{ label: "高度差", prop: "gdc" },
|
||||
{ label: "纬度", prop: "wd" },
|
||||
{ label: "经度", prop: "jd" },
|
||||
{ label: "纬度因子", prop: "wdyz" },
|
||||
{ label: "经度因子", prop: "jdyz" },
|
||||
{ label: "速度", prop: "sd" },
|
||||
{ label: "航向角", prop: "hxj" },
|
||||
{ label: "航向角状态", prop: "hxjzt" },
|
||||
{ label: "航向角收星数", prop: "hxjsxs" },
|
||||
{ label: "俯仰角", prop: "fyj" },
|
||||
{ label: "年月日", prop: "nyr" },
|
||||
{ label: "时分秒", prop: "sfm" }
|
||||
]
|
||||
|
||||
interface PlatformEvent<T = any> {
|
||||
serialNumber: string
|
||||
eventType: PlatFormEventType // 操作类型(1:重启设备 2:重启程序 3:日志列表 4:上传日志 5:考试镜像开始(1:1)6:考试镜像结束(1:1)7:考试镜像命令下发 8:考试镜像数据上报 9:设备注册 10:平台注册11:摆渡机注册 12:终端在线状态上报)
|
||||
uploadType: string //1:平台下发 2:终端上传
|
||||
eventType: PlatFormEventType // 操作类型(1:重启设备 2:重启程序 3:日志列表 4:上传日志 5:考试镜像开始(1:1)6:考试镜像结束(1:1)7:考试镜像命令下发 8:考试镜像数据上报 9:设备注册 10:平台注册11:摆渡机注册 12:终端在线状态上报)
|
||||
uploadType: string //1:平台下发 2:终端上传
|
||||
deviceNo: string
|
||||
data: T
|
||||
}
|
||||
|
||||
export interface DataParams {
|
||||
page: string;
|
||||
page: number;
|
||||
data: string;
|
||||
}
|
||||
|
||||
export interface StudentData {
|
||||
select: number
|
||||
students: Array<{
|
||||
id: string // 流水号
|
||||
name: string // 姓名
|
||||
idCard: string // 身份证
|
||||
avatar?: string // 头像base64 考虑要不要传
|
||||
subject: string // 科目
|
||||
examCount: string // 剩余考试次数
|
||||
examLine: string // 考试线路
|
||||
examiner: string // 考官姓名
|
||||
id: string // 流水号
|
||||
name: string // 姓名
|
||||
idCard: string // 身份证
|
||||
avatar?: string // 头像base64 考虑要不要传
|
||||
subject: string // 科目
|
||||
examCount: string // 剩余考试次数
|
||||
examLine: string // 考试线路
|
||||
examiner: string // 考官姓名
|
||||
}>
|
||||
}
|
||||
|
||||
interface FileInfo {
|
||||
fileName: string
|
||||
lastUpdateTime: string
|
||||
fileSize: number
|
||||
}
|
||||
|
||||
const Tag = "[websocket]"
|
||||
const SystemLogDir = "/data/log/hilog"
|
||||
const AppLogDir = '/mnt/hmdfs/100/account/device_view/local/files/duolun/logs'
|
||||
|
||||
async function sleep(duration: number) {
|
||||
return new Promise<void>((resolve, _reject) => {
|
||||
setTimeout(() => {
|
||||
resolve()
|
||||
}, duration)
|
||||
})
|
||||
}
|
||||
|
||||
function formatDate(date: Date | string | number, fmt = 'yyyy-MM-dd') {
|
||||
date = date instanceof Date ? date : new Date(date);
|
||||
|
||||
const pad = (n) => (n < 10 ? `0${n}` : `${n}`);
|
||||
const pad3 = (n) => (n < 10 ? `00${n}` : n < 100 ? `0${n}` : `${n}`);
|
||||
|
||||
return fmt
|
||||
.replace(/yyyy/g, date.getFullYear().toString())
|
||||
.replace(/yy/g, `${date.getFullYear()}`.slice(-2))
|
||||
.replace(/MM/g, pad(date.getMonth() + 1))
|
||||
.replace(/M/g, (date.getMonth() + 1).toString())
|
||||
.replace(/dd/g, pad(date.getDate()))
|
||||
.replace(/d/g, (date.getDate()).toString())
|
||||
.replace(/HH/g, pad(date.getHours()))
|
||||
.replace(/H/g, (date.getHours()).toString())
|
||||
.replace(/hh/g, pad(date.getHours() % 12 || 12))
|
||||
.replace(/h/g, (date.getHours() % 12 || 12).toString())
|
||||
.replace(/mm/g, pad(date.getMinutes()))
|
||||
.replace(/m/g, date.getMinutes().toString())
|
||||
.replace(/ss/g, pad(date.getSeconds()))
|
||||
.replace(/s/g, date.getSeconds().toString())
|
||||
.replace(/SSS/g, pad3(date.getMilliseconds()))
|
||||
.replace(/S/g, date.getMilliseconds().toString())
|
||||
.replace(/a/g, date.getHours() < 12 ? '上午' : '下午')
|
||||
.replace(/A/g, date.getHours() < 12 ? 'AM' : 'PM')
|
||||
.replace(/q/g, Math.floor((date.getMonth() + 3) / 3).toString());
|
||||
}
|
||||
|
||||
function getSystemLogList(year: string, month: string, date: string) {
|
||||
let list: FileInfo[] = []
|
||||
try {
|
||||
list = fs.listFileSync(SystemLogDir).filter(name => {
|
||||
return new RegExp(year + month + date).test(name)
|
||||
}).map(name => {
|
||||
let info = fs.statSync(SystemLogDir + '/' + name)
|
||||
return {
|
||||
fileName: name,
|
||||
lastUpdateTime: formatDate(info.mtime, 'yyyy-MM-dd HH:mm:ss'),
|
||||
fileSize: info.size
|
||||
}
|
||||
})
|
||||
|
||||
} catch (e) {
|
||||
console.log(Tag, JSON.stringify(e))
|
||||
}
|
||||
return list
|
||||
}
|
||||
|
||||
function getAppLogList(year: string, month: string, date: string) {
|
||||
let list: FileInfo[] = []
|
||||
const path = AppLogDir + `/${year}_${month}_${date}`
|
||||
if (!fs.accessSync(path)) {
|
||||
return []
|
||||
}
|
||||
list = fs.listFileSync(path).map(name => {
|
||||
let info = fs.statSync(path + '/' + name)
|
||||
return {
|
||||
fileName: name,
|
||||
lastUpdateTime: formatDate(info.mtime, 'yyyy-MM-dd HH:mm:ss'),
|
||||
fileSize: info.size
|
||||
}
|
||||
})
|
||||
return list
|
||||
}
|
||||
|
||||
function uploadFile(context: common.UIAbilityContext, serialNumber: string, filename: string, ext: string) {
|
||||
return new Promise<void>((resolve, reject) => {
|
||||
return request.uploadFile(context, {
|
||||
url: `http://88.22.20.30:8080/ws-signaling-0.0.1/api/file/upload?serialNumber=${serialNumber}`,
|
||||
header: { 'Accept': '*/*', 'Content-Type': 'multipart/form-data' },
|
||||
method: 'post',
|
||||
files: [{ filename, name: 'file', uri: `internal://cache/${filename}`, type: ext }],
|
||||
data: [{ name: "serialNumber", value: serialNumber }]
|
||||
}).then(task => {
|
||||
task.on("fail", (err) => {
|
||||
reject(err)
|
||||
})
|
||||
task.on("complete", () => {
|
||||
resolve()
|
||||
})
|
||||
}).catch(reject).finally(() => {
|
||||
fs.unlinkSync(`internal://cache/${filename}`)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
export class RemoteToolWebsocket {
|
||||
private instance: webSocket.WebSocket
|
||||
@ -74,9 +202,14 @@ export class RemoteToolWebsocket {
|
||||
private serialNumber: string = ""
|
||||
private reconnectCount: number = 0
|
||||
private url: string = ''
|
||||
private onStartCallback: Array<() => void> = []
|
||||
private onStartCallback: Array<{
|
||||
page: number,
|
||||
cb: () => void
|
||||
}> = []
|
||||
public isStart: boolean = false
|
||||
private isRegister: boolean = false
|
||||
private context: common.UIAbilityContext
|
||||
private store: preferences.Preferences | null = null
|
||||
|
||||
constructor() {
|
||||
if (!RemoteToolWebsocket.instance) {
|
||||
@ -85,36 +218,153 @@ export class RemoteToolWebsocket {
|
||||
return RemoteToolWebsocket.instance
|
||||
}
|
||||
|
||||
private sendReply(serialNumber: string, eventType: string) {
|
||||
private handleSignal(msg: string) {
|
||||
let data = msg.split(",")
|
||||
let plc = [
|
||||
data[2], //左方向灯
|
||||
data[3], //右方向灯
|
||||
data[7], //近光灯
|
||||
data[8], //远光灯
|
||||
data[9], //示廓灯
|
||||
data[20], //双跳灯
|
||||
data[10], //雾灯
|
||||
data[4], //喇叭
|
||||
data[5], //点火1
|
||||
data[6], //点火2
|
||||
data[11], //雨刮器
|
||||
data[4], //脚刹
|
||||
data[13], //手刹
|
||||
data[17], //离合
|
||||
data[18], //副刹车
|
||||
data[19], //安全带
|
||||
data[14], //主驾驶门
|
||||
data[21], //其他门
|
||||
data[23], //车速
|
||||
data[25], //发动机转速
|
||||
data[22], //转速过高
|
||||
data[28], //档位
|
||||
data[27]?.split("_")[0], //方向盘角度
|
||||
data[24], //累计脉冲
|
||||
data[26], //熄火次数
|
||||
data[29], //超声波1
|
||||
data[30], //超声波2
|
||||
data[31], //超声波3
|
||||
data[32], //超声波4
|
||||
data[33], //触摸1
|
||||
data[34], //触摸2
|
||||
data[35], //触摸3
|
||||
'0,1,2', //车辆状态
|
||||
data[15], //NC
|
||||
data[16], //SA15
|
||||
data[36], //SCIO
|
||||
data[37], //SC1A_C
|
||||
data[38], //SC1B_C
|
||||
data[39], //SC2A_C
|
||||
data[40], //SC2B_C
|
||||
data[41], //SC3A_C
|
||||
data[42], //SC3B_C
|
||||
data[43], //SC4A_C
|
||||
data[44], //SC4B_C
|
||||
data[45], //SC5A_C
|
||||
data[46], //SC5B_C
|
||||
data[47], //SC6A_C
|
||||
data[48],//SC6B_C
|
||||
]
|
||||
const hours = Number(data[94]?.substring(0, 2)) + 8
|
||||
let time = (hours > 9 ? hours : '0' + hours) + data[94]?.substring(2, data[94]?.length - 2)
|
||||
let gps = [
|
||||
data[83], // 差分状态
|
||||
data[84], // 经纬度收星数
|
||||
data[87], // 龄期
|
||||
data[85], // 海拔高
|
||||
data[86], // 高度差
|
||||
data[96], // 纬度
|
||||
data[95], // 经度
|
||||
data[88], // 纬度因子
|
||||
data[89], // 经度因子
|
||||
data[97], // 速度
|
||||
data[90], // 航向角
|
||||
data[92]?.split('-')[0], // 航向角状态
|
||||
data[92]?.split('-')[1], // 航向角收星数
|
||||
data[91], // 俯仰角
|
||||
data[93], // 年月日
|
||||
time,// 时分秒
|
||||
]
|
||||
return [...plc, ...gps].join(",")
|
||||
}
|
||||
|
||||
private sendReply(serialNumber: string, eventType: string, data?: string) {
|
||||
this.send(JSON.stringify({
|
||||
serialNumber,
|
||||
eventType,
|
||||
uploadType: "2",
|
||||
deviceNo: globalThis.deviceNo
|
||||
deviceNo: globalThis.deviceNo,
|
||||
data
|
||||
}))
|
||||
}
|
||||
|
||||
private onMessage() {
|
||||
this.instance.on("message", (err, event: string) => {
|
||||
this.instance.on("message", async (err, event: string) => {
|
||||
const data = JSON.parse(event) as PlatformEvent;
|
||||
console.log("websocket", event)
|
||||
console.log(Tag, 'receive', event)
|
||||
switch (data.eventType) {
|
||||
case PlatFormEventType.RestartDevice:
|
||||
try {
|
||||
power.reboot("remote tools command")
|
||||
this.sendReply(data.serialNumber, data.eventType, JSON.stringify({
|
||||
code: "200",
|
||||
msg: "重启成功"
|
||||
}))
|
||||
} catch (e) {
|
||||
this.sendReply(data.serialNumber, data.eventType, JSON.stringify({
|
||||
code: "500",
|
||||
msg: e
|
||||
}))
|
||||
}
|
||||
break
|
||||
case PlatFormEventType.RestartApp:
|
||||
let lastTime: number = await this.store.get('lastRestartTime', 0) as number
|
||||
let now = new Date().getTime()
|
||||
if (now - lastTime < 60 * 1000) {
|
||||
this.sendReply(data.serialNumber, data.eventType, JSON.stringify({
|
||||
code: "500",
|
||||
msg: "1分钟内只能重启一次!"
|
||||
}))
|
||||
} else {
|
||||
await this.store.put('lastRestartTime', new Date().getTime())
|
||||
await this.store.put('serialNumber', data.serialNumber)
|
||||
await this.store.flush()
|
||||
appRecovery.restartApp()
|
||||
setTimeout(async () => {
|
||||
this.sendReply(data.serialNumber, PlatFormEventType.RestartApp, JSON.stringify({
|
||||
code: "500",
|
||||
msg: "重启失败"
|
||||
}))
|
||||
await this.store.put('serialNumber', "")
|
||||
await this.store.flush()
|
||||
}, 2000)
|
||||
}
|
||||
break
|
||||
case PlatFormEventType.UploadLogList:
|
||||
this.onUploadLogList(data.serialNumber)
|
||||
let date = JSON.parse(data.data).logDate
|
||||
this.onUploadLogList(data.serialNumber, date)
|
||||
break
|
||||
case PlatFormEventType.UploadLog:
|
||||
this.onUploadLogFile(data.serialNumber)
|
||||
let fileName = JSON.parse(data.data).fileName
|
||||
this.onUploadLogFile(data.serialNumber, fileName)
|
||||
break
|
||||
case PlatFormEventType.StartSync:
|
||||
this.isStart = true
|
||||
this.serialNumber = data.serialNumber
|
||||
this.sendReply(this.serialNumber, data.eventType)
|
||||
await sleep(1000)
|
||||
this.sendRouter("", routerMap[router.getState().name])
|
||||
this.onStartCallback.forEach(cb => cb())
|
||||
await sleep(1000)
|
||||
this.onStartCallback.forEach(item => {
|
||||
if (item.page === routerMap[router.getState().name]) {
|
||||
item.cb()
|
||||
}
|
||||
})
|
||||
break
|
||||
case PlatFormEventType.StopSync:
|
||||
this.isStart = false
|
||||
@ -127,32 +377,139 @@ export class RemoteToolWebsocket {
|
||||
console.warn("Unknown event type:", data.eventType);
|
||||
}
|
||||
})
|
||||
this.instance.on("close", async () => {
|
||||
this.isStart = false
|
||||
console.log(Tag, "close")
|
||||
await this.init(this.url, this.context)
|
||||
await this.register()
|
||||
this.isStart = true
|
||||
})
|
||||
}
|
||||
|
||||
private send(data: string) {
|
||||
return this.instance.send(data)
|
||||
.then(() => {
|
||||
console.log(Tag, 'send success')
|
||||
console.log(Tag, 'send success, data:', data)
|
||||
})
|
||||
.catch((err) => {
|
||||
console.log(Tag, 'send error: ', JSON.stringify(err))
|
||||
})
|
||||
}
|
||||
|
||||
private onUploadLogList(serialNumber: string) {
|
||||
|
||||
private onUploadLogList(serialNumber: string, time: string) {
|
||||
console.log(Tag, serialNumber, time)
|
||||
let year = time.split("-")[0]
|
||||
let month = time.split("-")[1]
|
||||
let date = time.split("-")[2]
|
||||
let systemList = getSystemLogList(year, month, date)
|
||||
let appList = getAppLogList(year, month, date)
|
||||
let list = [...systemList, ...appList]
|
||||
list.forEach(item => {
|
||||
console.log(Tag, JSON.stringify(item))
|
||||
})
|
||||
this.send(JSON.stringify({
|
||||
serialNumber: serialNumber,
|
||||
eventType: PlatFormEventType.UploadLogList,
|
||||
uploadType: "2",
|
||||
deviceNo: globalThis.deviceNo,
|
||||
data: JSON.stringify({
|
||||
code: "200",
|
||||
logList: list,
|
||||
})
|
||||
}))
|
||||
}
|
||||
|
||||
private onUploadLogFile(serialNumber: string) {
|
||||
|
||||
private onUploadLogFile(serialNumber: string, file: string) {
|
||||
const reply = (error?: object | string) => {
|
||||
this.send(JSON.stringify({
|
||||
serialNumber: serialNumber,
|
||||
eventType: PlatFormEventType.UploadLog,
|
||||
uploadType: "2",
|
||||
deviceNo: globalThis.deviceNo,
|
||||
data: JSON.stringify({
|
||||
code: error ? "500" : '200',
|
||||
msg: error || undefined
|
||||
})
|
||||
}))
|
||||
}
|
||||
try {
|
||||
if (/hilog/.test(file)) {
|
||||
fs.copyFileSync('/data/log/hilog/' + file, this.context.cacheDir + '/' + file)
|
||||
zlib.compressFile(this.context.cacheDir + '/' + file, this.context.cacheDir + '/' + file + '.zip', {
|
||||
level: zlib.CompressLevel.COMPRESS_LEVEL_DEFAULT_COMPRESSION,
|
||||
memLevel: zlib.MemLevel.MEM_LEVEL_DEFAULT,
|
||||
strategy: zlib.CompressStrategy.COMPRESS_STRATEGY_DEFAULT_STRATEGY
|
||||
})
|
||||
.then(() => {
|
||||
return uploadFile(this.context, serialNumber, file + '.zip', 'zip')
|
||||
})
|
||||
.then(() => {
|
||||
reply()
|
||||
})
|
||||
.catch((err) => {
|
||||
reply(err)
|
||||
})
|
||||
.finally(() => {
|
||||
fs.unlinkSync(this.context.cacheDir + '/' + file)
|
||||
fs.unlinkSync(this.context.cacheDir + '/' + file + '.zip')
|
||||
})
|
||||
} else {
|
||||
let tempDir = this.context.cacheDir + '/' + file
|
||||
fs.mkdirSync(tempDir)
|
||||
let date: string = file.substring(0, 10)
|
||||
let path = AppLogDir + "/" + date + '/' + file
|
||||
let list = fs.listFileSync(path)
|
||||
list.forEach(name => {
|
||||
fs.copyFileSync(path + '/' + name, tempDir + '/' + name)
|
||||
})
|
||||
zlib.compressFile(tempDir, tempDir + '.zip', {
|
||||
level: zlib.CompressLevel.COMPRESS_LEVEL_DEFAULT_COMPRESSION,
|
||||
memLevel: zlib.MemLevel.MEM_LEVEL_DEFAULT,
|
||||
strategy: zlib.CompressStrategy.COMPRESS_STRATEGY_DEFAULT_STRATEGY
|
||||
})
|
||||
.then(() => {
|
||||
return uploadFile(this.context, serialNumber, file + '.zip', 'zip')
|
||||
})
|
||||
.then(() => {
|
||||
reply()
|
||||
})
|
||||
.catch((err) => {
|
||||
reply(err)
|
||||
})
|
||||
.finally(() => {
|
||||
fs.rmdirSync(this.context.cacheDir + '/' + file)
|
||||
fs.unlinkSync(this.context.cacheDir + '/' + file + '.zip')
|
||||
})
|
||||
}
|
||||
} catch (err) {
|
||||
this.send(JSON.stringify({
|
||||
serialNumber: serialNumber,
|
||||
eventType: PlatFormEventType.UploadLogList,
|
||||
uploadType: "2",
|
||||
deviceNo: globalThis.deviceNo,
|
||||
data: JSON.stringify({
|
||||
code: "500",
|
||||
msg: err
|
||||
})
|
||||
}))
|
||||
console.log(Tag, JSON.stringify(err))
|
||||
}
|
||||
}
|
||||
|
||||
init(url: string) {
|
||||
async init(url: string, context: common.UIAbilityContext) {
|
||||
if (!this.store) {
|
||||
try {
|
||||
this.store = await preferences.getPreferences(context, "websocket")
|
||||
} catch (e) {
|
||||
console.log(Tag, JSON.stringify(e))
|
||||
}
|
||||
}
|
||||
this.context = context
|
||||
this.url = url
|
||||
this.instance = webSocket.createWebSocket()
|
||||
this.onMessage()
|
||||
return this.instance.connect(url).then(() => {
|
||||
console.log(Tag, 'connect success')
|
||||
console.log(Tag, 'connect success', 'address', this.url)
|
||||
this.reconnectCount = 0
|
||||
}).catch((err) => {
|
||||
console.log(Tag, 'connect error: ', JSON.stringify(err))
|
||||
@ -162,15 +519,56 @@ export class RemoteToolWebsocket {
|
||||
message: "websocket connect failed"
|
||||
})
|
||||
} else {
|
||||
this.init(url)
|
||||
this.init(url, context)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
register() {
|
||||
async register() {
|
||||
if (this.isRegister) {
|
||||
return
|
||||
}
|
||||
|
||||
this.sendData({
|
||||
page: 20,
|
||||
data: JSON.stringify({
|
||||
time: new Date().getTime().toString(),
|
||||
signal: this.handleSignal(""),
|
||||
error: '',
|
||||
vehicle: globalThis.carInfo.kscx,
|
||||
carId: globalThis.carInfo.plateNo
|
||||
})
|
||||
})
|
||||
|
||||
setInterval(() => {
|
||||
if (this.isStart && [11, 12].includes(routerMap[router.getState().name])) {
|
||||
this.sendData({
|
||||
page: 20,
|
||||
data: JSON.stringify({
|
||||
time: new Date().getTime().toString(),
|
||||
signal: this.handleSignal(""),
|
||||
error: '',
|
||||
vehicle: globalThis.carInfo.kscx,
|
||||
carId: globalThis.carInfo.plateNo
|
||||
})
|
||||
})
|
||||
}
|
||||
}, 2000)
|
||||
|
||||
globalThis.udpClient.onMessage_1(async (msg: string) => {
|
||||
if (this.isStart) {
|
||||
this.sendData({
|
||||
page: 20,
|
||||
data: JSON.stringify({
|
||||
time: new Date().getTime().toString(),
|
||||
signal: this.handleSignal(msg),
|
||||
error: '',
|
||||
vehicle: globalThis.carInfo.kscx,
|
||||
carId: globalThis.carInfo.plateNo
|
||||
})
|
||||
})
|
||||
}
|
||||
});
|
||||
return this.send(JSON.stringify({
|
||||
serialNumber: this.serialNumber,
|
||||
eventType: PlatFormEventType.DeviceRegister,
|
||||
@ -182,10 +580,25 @@ export class RemoteToolWebsocket {
|
||||
plateNo: globalThis.carInfo.plateNo,
|
||||
vehicleKind: globalThis.carInfo.kscx
|
||||
})
|
||||
}))
|
||||
})).then(async () => {
|
||||
|
||||
let lastSerialNumber = await this.store.get('serialNumber', "") as string
|
||||
if (lastSerialNumber) {
|
||||
this.sendReply(lastSerialNumber, PlatFormEventType.RestartApp, JSON.stringify({
|
||||
code: "200",
|
||||
msg: "重启成功"
|
||||
}))
|
||||
await this.store.put('serialNumber', "")
|
||||
await this.store.flush()
|
||||
}
|
||||
this.isRegister = true
|
||||
})
|
||||
}
|
||||
|
||||
sendData<T = object>(data: T) {
|
||||
if (!this.isStart) {
|
||||
return Promise.resolve()
|
||||
}
|
||||
return this.send(JSON.stringify({
|
||||
serialNumber: this.serialNumber,
|
||||
eventType: PlatFormEventType.SyncData,
|
||||
@ -199,6 +612,9 @@ export class RemoteToolWebsocket {
|
||||
}
|
||||
|
||||
sendRouter(from: string, to: string) {
|
||||
if (!this.isStart) {
|
||||
return Promise.resolve()
|
||||
}
|
||||
return this.send(JSON.stringify({
|
||||
serialNumber: this.serialNumber,
|
||||
eventType: PlatFormEventType.SyncData,
|
||||
@ -214,11 +630,14 @@ export class RemoteToolWebsocket {
|
||||
}))
|
||||
}
|
||||
|
||||
onStart(cb: () => void) {
|
||||
this.onStartCallback.push(cb)
|
||||
onStart(cb: () => void, page: number) {
|
||||
this.onStartCallback.push({
|
||||
page,
|
||||
cb
|
||||
})
|
||||
}
|
||||
|
||||
offStart(cb: () => void) {
|
||||
this.onStartCallback = this.onStartCallback.filter(item => item != cb)
|
||||
offStart(page: number) {
|
||||
this.onStartCallback = this.onStartCallback.filter(item => item.page != page)
|
||||
}
|
||||
}
|
||||
@ -1,19 +1,21 @@
|
||||
import UIAbility from '@ohos.app.ability.UIAbility';
|
||||
import hilog from '@ohos.hilog';
|
||||
import window from '@ohos.window';
|
||||
import relationalStore from '@ohos.data.relationalStore'
|
||||
import abilityAccessCtrl, { Permissions } from '@ohos.abilityAccessCtrl';
|
||||
// import featureAbility from '@ohos.ability.featureAbility'
|
||||
import { makedir } from '../common/service/fileService'
|
||||
import { Array2Byte } from '../common/utils/tools'
|
||||
import { GlobalConfig } from '../config/global'
|
||||
import { tcpUtil } from '../common/utils/TcpRequest';
|
||||
import DB from '../common/database/DbSql';
|
||||
import { initTable } from '../common/service/initable';
|
||||
import { RemoteToolWebsocket } from '../common/utils/RemotetoolWebsocket';
|
||||
import appRecovery from '@ohos.app.ability.appRecovery';
|
||||
|
||||
export default class EntryAbility extends UIAbility {
|
||||
async onCreate(want, launchParam) {
|
||||
appRecovery.enableAppRecovery(
|
||||
appRecovery.RestartFlag.ALWAYS_RESTART,
|
||||
appRecovery.SaveOccasionFlag.SAVE_WHEN_ERROR,
|
||||
appRecovery.SaveModeFlag.SAVE_WITH_FILE
|
||||
);
|
||||
try {
|
||||
console.log("sql first")
|
||||
await DB.init(this.context)
|
||||
@ -35,17 +37,13 @@ export default class EntryAbility extends UIAbility {
|
||||
}
|
||||
|
||||
async onWindowStageCreate(windowStage: window.WindowStage) {
|
||||
// this.context
|
||||
// Main window is created, set main page for this ability
|
||||
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate');
|
||||
new RemoteToolWebsocket().init("ws://88.22.20.30:1989/sig/v1")
|
||||
|
||||
globalThis.carInfo = {}
|
||||
globalThis.examinerInfo = {}
|
||||
globalThis.deviceNo = '';
|
||||
globalThis.hasAuth = false
|
||||
|
||||
// globalThis.judgeVersion ='2024.08.24.1'
|
||||
// globalThis.version ='2023.12.13.01';
|
||||
globalThis.version = GlobalConfig.version.wx.km2[0];
|
||||
globalThis.judgeVersion = GlobalConfig.version.wx.km2[1];
|
||||
globalThis.tcpSendNum = 0
|
||||
@ -76,28 +74,26 @@ export default class EntryAbility extends UIAbility {
|
||||
hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? '');
|
||||
return;
|
||||
}
|
||||
new RemoteToolWebsocket().init("ws://88.22.20.30:1989/sig/v1", this.context)
|
||||
hilog.info(0x0000, 'testTag', 'Succeeded in loading the content. Data: %{public}s', JSON.stringify(data) ?? '');
|
||||
});
|
||||
|
||||
this.creatFiles();
|
||||
this.createFiles();
|
||||
}
|
||||
|
||||
onWindowStageDestroy() {
|
||||
// Main window is destroyed, release UI related resources
|
||||
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageDestroy');
|
||||
}
|
||||
|
||||
onForeground() {
|
||||
// Ability has brought to foreground
|
||||
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onForeground');
|
||||
}
|
||||
|
||||
onBackground() {
|
||||
// Ability has back to background
|
||||
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onBackground');
|
||||
}
|
||||
|
||||
creatFiles() {
|
||||
createFiles() {
|
||||
makedir('/testFile');
|
||||
}
|
||||
}
|
||||
@ -5,7 +5,6 @@ import { setCurrentTime } from '../common/service/timeService';
|
||||
import { getCurrentTime, string2Bytes } from '../common/utils/tools';
|
||||
import { FileHelper } from '../common/service/FileHelper';
|
||||
import { getEsCarModel, getSyncData, } from '../common/service/initable';
|
||||
import FileUtil from '../common/utils/File';
|
||||
import { getUDP, getUDP2 } from '../common/utils/GlobalUdp';
|
||||
import { initJudgeUdp } from '../common/utils/UdpJudge';
|
||||
import { judgeConfig } from './judgeSDK/utils/judgeConfig';
|
||||
@ -20,11 +19,8 @@ import { delPic } from '../common/service/videoService';
|
||||
import imageBtn from './compontents/imageBtn';
|
||||
import VoiceAnnounce from './judgeSDK/utils/voiceAnnouncements';
|
||||
import { updateModelAndCar } from '../common/autoUpdate/index'
|
||||
// import {uploadLogFile} from '../common/service/indexService'
|
||||
import { getModalValueCdAndCar } from '../api';
|
||||
import { RemoteToolWebsocket } from '../common/utils/RemotetoolWebsocket';
|
||||
|
||||
// import VoiceAnnounce from './judgeSDK/utils/voiceAnnouncements';
|
||||
|
||||
@Entry
|
||||
@Component
|
||||
@ -61,12 +57,10 @@ struct Index {
|
||||
alignment: DialogAlignment.Center,
|
||||
},
|
||||
)
|
||||
private fileUtil: FileUtil
|
||||
private interval = null;
|
||||
// private vocObj = null;
|
||||
private avPlayer
|
||||
private workerInstance = null;
|
||||
private context = getContext(this) as common.UIAbilityContext;
|
||||
private remoteToolWebsocket: RemoteToolWebsocket = new RemoteToolWebsocket()
|
||||
|
||||
@Styles
|
||||
commStyle(){
|
||||
@ -74,7 +68,6 @@ struct Index {
|
||||
.height(69 * this.ratio * this.dialogRatio)
|
||||
.backgroundImage($r('app.media.button_nor'))
|
||||
.backgroundImageSize({ width: '100%', height: '100%' })
|
||||
// .margin({ bottom: 12 * this.ratio })
|
||||
}
|
||||
|
||||
build() {
|
||||
@ -110,14 +103,9 @@ struct Index {
|
||||
imageBtn({ btnWidth: '28%', btnHeight: '71%', imgSrc: $r('app.media.index_lw') })
|
||||
.margin({ left: 80 * globalThis.ratio })
|
||||
.onClick(async () => {
|
||||
// this.vocObj.playAudio({
|
||||
// type: 1,
|
||||
// name: 'button_media.wav'
|
||||
// })
|
||||
// ||!this.initParamFlag
|
||||
|
||||
if (this.loading) {
|
||||
// globalThis.title = '正在初始化,请等待5s后重试'
|
||||
// this.errorDialog.open()
|
||||
|
||||
return
|
||||
}
|
||||
setTimeout(() => {
|
||||
@ -157,10 +145,7 @@ struct Index {
|
||||
if (this.loading) {
|
||||
return
|
||||
}
|
||||
// this.vocObj.playAudio({
|
||||
// type: 1,
|
||||
// name: 'button_media.wav'
|
||||
// })
|
||||
|
||||
if (judgeConfig.isTrajectoryOpen) {
|
||||
router.pushUrl({
|
||||
url: 'pages/UserInfo',
|
||||
@ -171,6 +156,7 @@ struct Index {
|
||||
getSyncData('MA_SYSSET').then(data => {
|
||||
console.log('datadata', JSON.stringify(data))
|
||||
if (data?.[0]) {
|
||||
this.remoteToolWebsocket.sendRouter("1", "9")
|
||||
router.pushUrl({
|
||||
url: 'pages/UserInfo',
|
||||
}, router.RouterMode.Single)
|
||||
@ -186,10 +172,7 @@ struct Index {
|
||||
if (this.loading) {
|
||||
return
|
||||
}
|
||||
// this.vocObj.playAudio({
|
||||
// type: 1,
|
||||
// name: 'button_media.wav'
|
||||
// })
|
||||
|
||||
router.pushUrl({
|
||||
url: 'pages/CarCheck'
|
||||
}, router.RouterMode.Single);
|
||||
@ -212,11 +195,7 @@ struct Index {
|
||||
.fontSize(18 * globalThis.ratio)
|
||||
.width('30%')
|
||||
.margin({ bottom: 10 })
|
||||
// Text('V 1.0')
|
||||
// .fontColor('#CCAE7A')
|
||||
// .fontSize(22 * globalThis.ratio)
|
||||
// .width('30%')
|
||||
// .margin({ bottom: 10 })
|
||||
|
||||
Text('授权信息:' + (this.hasAuth ? '已授权' : '未授权'))
|
||||
.fontColor('#CCAE7A')
|
||||
.fontSize(18 * globalThis.ratio)
|
||||
@ -261,10 +240,7 @@ struct Index {
|
||||
.commStyle()
|
||||
.onClick(() => {
|
||||
this.dialogVisiable = false
|
||||
// this.vocObj.playAudio({
|
||||
// type: 1,
|
||||
// name: 'button_media.wav'
|
||||
// })
|
||||
|
||||
}).margin({ right: 10 * this.ratio })
|
||||
|
||||
Flex({ justifyContent: FlexAlign.Center, alignItems: ItemAlign.Center }) {
|
||||
@ -275,11 +251,7 @@ struct Index {
|
||||
}
|
||||
.commStyle()
|
||||
.onClick(() => {
|
||||
// this.vocObj.playAudio({
|
||||
// type: 1,
|
||||
// name: 'button_media.wav'
|
||||
// })
|
||||
router.back()
|
||||
this.context.terminateSelf()
|
||||
})
|
||||
}.position({ y: 265 * this.ratio * this.dialogRatio, x: 115 * this.ratio * this.dialogRatio })
|
||||
|
||||
@ -380,11 +352,9 @@ struct Index {
|
||||
//判断是否能点开始考试
|
||||
if (sys.v_no === '305') {
|
||||
console.log('syssyssyssys')
|
||||
// this.delLoading=true
|
||||
// globalThis.param854Str=sys.v_value
|
||||
|
||||
delPic(Number(sys.v_value), 1)
|
||||
delPic(Number(sys.v_value), 2)
|
||||
// this.delLoading=false
|
||||
|
||||
}
|
||||
})
|
||||
@ -400,9 +370,7 @@ struct Index {
|
||||
if (this.loading) {
|
||||
return
|
||||
}
|
||||
// let mode=globalThis.timeInfo?.mode?globalThis.timeInfo?.mode:1
|
||||
|
||||
// console.log('mode',mode)
|
||||
|
||||
const param = {
|
||||
carId: globalThis.carInfo?.carId,
|
||||
@ -438,23 +406,10 @@ struct Index {
|
||||
this.loadingText = '正在安装考车最新版本,请稍候……'
|
||||
return false
|
||||
}
|
||||
// DB.queryListBySql('select * from MA_SYSSET', [{
|
||||
// name: "v_no",
|
||||
// type: ColumnType.STRING,
|
||||
// columnName: "v_no"
|
||||
// }]).then((res) => {
|
||||
// console.log('sql success', JSON.stringify(res))
|
||||
// }).catch((err) => {
|
||||
// console.log('sql error1', err)
|
||||
// })
|
||||
|
||||
if (ret) {
|
||||
if (globalThis.singlePlay) {
|
||||
router.pushUrl({
|
||||
url: 'pages/userInfo'
|
||||
}, router.RouterMode.Single)
|
||||
return
|
||||
}
|
||||
if (globalThis.singlePlay) {
|
||||
this.remoteToolWebsocket.sendRouter("1", "9")
|
||||
router.pushUrl({
|
||||
url: 'pages/UserInfo',
|
||||
}, router.RouterMode.Single)
|
||||
@ -486,47 +441,6 @@ struct Index {
|
||||
|
||||
}
|
||||
})
|
||||
// workerInstance.postMessage(param);
|
||||
// workerInstance.onmessage = (e: MessageEvents): void => {
|
||||
// console.log("baoyihu after postMessage :", JSON.stringify(e.data));
|
||||
// // @ts-ignore
|
||||
// let workData: WorkData = e.data;
|
||||
// this.loading = false
|
||||
// if (workData.isComplete) {
|
||||
// if(globalThis.singlePlay){
|
||||
// router.pushUrl({
|
||||
// url: 'pages/UserInfo',
|
||||
// }, router.RouterMode.Single)
|
||||
// return
|
||||
// }
|
||||
// getSyncData('MA_SYSSET').then(data => {
|
||||
// console.log('datadata', JSON.stringify(data))
|
||||
// // @ts-ignore
|
||||
// data.forEach(sys => {
|
||||
// //判断是否能点开始考试
|
||||
// if(sys.v_no === '854'){
|
||||
// globalThis.param854Str=sys.v_value
|
||||
// }
|
||||
// if (sys.v_no === '824'&&decodeURIComponent(sys.v_value)=='0') {
|
||||
// // this.Param612Str= decodeURIComponent(sys.v_value)
|
||||
// router.pushUrl({
|
||||
// url:'pages/CarCheck',
|
||||
// params: {
|
||||
// 'fromIndex':true
|
||||
// }
|
||||
// }, router.RouterMode.Single)
|
||||
// }else{
|
||||
// router.pushUrl({
|
||||
// url: 'pages/ExaminerLogin',
|
||||
// }, router.RouterMode.Single)
|
||||
// }
|
||||
// })
|
||||
// });
|
||||
//
|
||||
// }
|
||||
// workerInstance.terminate();
|
||||
//
|
||||
// }
|
||||
}
|
||||
|
||||
async heartMsg() {
|
||||
@ -556,17 +470,10 @@ struct Index {
|
||||
await this.userAuth();
|
||||
console.log('globalThis.singlePlay', globalThis.singlePlay)
|
||||
if (globalThis.singlePlay == undefined || globalThis.singlePlay == null) {
|
||||
// setVideoParam()
|
||||
console.log('diyidiy')
|
||||
this.context.resourceManager.getRawFileContent("welcome.wav")
|
||||
.then(value => {
|
||||
this.avPlayer.playAudio(['welcome.wav'])
|
||||
|
||||
// this.vocObj.playAudio({
|
||||
// type: 1,
|
||||
// name: 'welcome.wav'
|
||||
// })
|
||||
// let rawFile = value;
|
||||
})
|
||||
.catch(error => {
|
||||
console.log("getRawFileContent promise error is " + error);
|
||||
@ -575,9 +482,7 @@ struct Index {
|
||||
globalThis.singlePlay = false
|
||||
}
|
||||
this.isSingle = globalThis.singlePlay
|
||||
// this.loading = false
|
||||
this.num = 0
|
||||
// const TcpClient: TcpClient =new TcpClient(result[0].tcplocalIp, result[0].tcplocalIpPort,result[0].tcpOppositeIp,result[0].tcpOppositePort)
|
||||
globalThis.lsh = '1111111111111'
|
||||
|
||||
}
|
||||
@ -587,7 +492,6 @@ struct Index {
|
||||
const time = await getCurrentTime()
|
||||
const date = time.split(' ')[0]
|
||||
this.fileHelper.createAlbum('jt')
|
||||
// this.fileHelper.createAlbum('2025-01-02')
|
||||
this.fileHelper.createAlbum('pz');
|
||||
this.fileHelper.createAlbum(date);
|
||||
|
||||
@ -628,7 +532,7 @@ struct Index {
|
||||
await getDeviceInfo(this.context)
|
||||
|
||||
await getCarInfo()
|
||||
new RemoteToolWebsocket().register()
|
||||
this.remoteToolWebsocket.register()
|
||||
await getUDP2(this.context, false)
|
||||
getTCP()
|
||||
this.deviceId = globalThis.carInfo.carNo
|
||||
|
||||
@ -9,7 +9,6 @@ import Judge from './judgeSDK/judge';
|
||||
import { defaultJudgeConfigObj } from './judgeSDK/utils//judgeCommon';
|
||||
import { uploadExamMileage } from '../api/judge'
|
||||
import DwztErrorPopup from './compontents/judge/DwztErrorPopup'
|
||||
import { debounce } from '../common/utils/tools'
|
||||
import MsgPopup from './compontents/judge/MsgPopup'
|
||||
|
||||
import {
|
||||
@ -26,25 +25,64 @@ import {
|
||||
} 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/judgeConfig';
|
||||
import FileUtil from '../common/utils/File';
|
||||
import SignDisplayCom from './compontents/signDisplayCom';
|
||||
import promptAction from '@ohos.promptAction';
|
||||
import { voiceService } from '../common/service/voiceService';
|
||||
import { DataParams, RemoteToolWebsocket } from '../common/utils/RemotetoolWebsocket';
|
||||
|
||||
@Entry
|
||||
@Component
|
||||
struct Index {
|
||||
@State @Watch('syncData') currentList: string[] = []
|
||||
@State @Watch('syncData') timestamp: number = 0
|
||||
private remoteToolWebsocket: RemoteToolWebsocket = new RemoteToolWebsocket()
|
||||
private syncToolData = () => {
|
||||
this.syncData()
|
||||
}
|
||||
|
||||
syncData() {
|
||||
if (this.remoteToolWebsocket.isStart) {
|
||||
this.remoteToolWebsocket.sendData<DataParams>({
|
||||
page: 11,
|
||||
data: JSON.stringify({
|
||||
user: {
|
||||
name: this.name, // 姓名
|
||||
idCard: this.idCard, // 身份证
|
||||
subject: this.examSubject, // 科目
|
||||
examCount: this.kssycs, // 剩余考试次数
|
||||
},
|
||||
projects: this.projects.map(item => ({
|
||||
code: item.projectCode,
|
||||
status: item.type
|
||||
})),
|
||||
deduction: this.kfArr.map(item => ({
|
||||
code: item.markcatalog
|
||||
})),
|
||||
exam: {
|
||||
startTime: this.timestamp.toString(), // 开始时间
|
||||
examLine: this.wayno, // 考试线路
|
||||
examMile: `${this.jl},${this.examMileage}`, // 考试里程 已行驶,应行驶
|
||||
score: this.totalScore, // 当前分数
|
||||
},
|
||||
deducted: this.isDeductedPopShow ? 1 : 0,
|
||||
deductionList: this.currentList.map(item => ({ code: item })), // 扣分列表
|
||||
error: '',
|
||||
})
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
async aboutToDisappear() {
|
||||
this.remoteToolWebsocket.offStart(11)
|
||||
clearInterval(this.mileageTimer)
|
||||
}
|
||||
|
||||
async aboutToAppear() {
|
||||
this.remoteToolWebsocket.onStart(this.syncToolData, 11)
|
||||
globalThis.windowClass.setWindowSystemBarEnable([])
|
||||
const time = await getCurrentTime()
|
||||
|
||||
this.timestamp = new Date(time).getTime()
|
||||
this.startTime = time.split(' ')[1]
|
||||
this.startFullTime = await getCurrentTime(1);
|
||||
this.startHourTime = await getCurrentHourTime()
|
||||
@ -961,6 +999,9 @@ struct Index {
|
||||
this.isDeductedPopShow = false
|
||||
this.popTimer = null;
|
||||
}, 500)
|
||||
},
|
||||
onListChange: (list: string[]) => {
|
||||
this.currentList = list
|
||||
}
|
||||
})
|
||||
}
|
||||
@ -982,10 +1023,6 @@ struct Index {
|
||||
.backgroundImage($rawfile('judge/close.png'), ImageRepeat.NoRepeat)
|
||||
.backgroundImageSize({ width: '33.33%', height: '33.33%' })
|
||||
.onClick(() => {
|
||||
// this.vocObj.playAudio({
|
||||
// type: 1,
|
||||
// name: 'button_media.wav'
|
||||
// })
|
||||
this.signDisplayComVisible = false
|
||||
})
|
||||
}.width('100%').height('100%').position({ y: 0 }).backgroundColor('rgba(0,0,0,0.6)')
|
||||
@ -1331,7 +1368,7 @@ struct Index {
|
||||
}
|
||||
scroller: Scroller = new Scroller()
|
||||
//页面通用字体大小
|
||||
@State wayno: number = 0
|
||||
@State @Watch('syncData') wayno: number = 0
|
||||
@State FONTSIZE: number = 30
|
||||
@State BIGFONTSIZE: number = 32
|
||||
//结束考试弹窗
|
||||
@ -1345,29 +1382,29 @@ struct Index {
|
||||
//考试用时
|
||||
@State examTime: number = 0
|
||||
//开始时间
|
||||
@State startTime: string = '00:00:00'
|
||||
@State @Watch('syncData') startTime: string = '00:00:00'
|
||||
@State startFullTime: string = ''
|
||||
@State startHourTime: string = ''
|
||||
@State startExamTime: string = ''
|
||||
//科目类型
|
||||
@State examSubject: 2 | 3 = 3;
|
||||
@State @Watch('syncData') examSubject: 2 | 3 = 3;
|
||||
@State ddxkTime: number = 0;
|
||||
@State ddxkKsxmArr: string[] = []
|
||||
@State ddxkKfArr: string[] = []
|
||||
@State xmmcStr: string = ''
|
||||
@State carztStr: string = ''
|
||||
@State kfArr: {
|
||||
@State @Watch('syncData') kfArr: {
|
||||
xmmcStr?: string,
|
||||
score: string,
|
||||
desc: string
|
||||
markcatalog: string
|
||||
}[] = []
|
||||
@State name: string = ''
|
||||
@State idCard: string = ''
|
||||
@State @Watch('syncData') name: string = ''
|
||||
@State @Watch('syncData') idCard: string = ''
|
||||
@State singlePlay: boolean = false;
|
||||
@State totalScore: number = 100
|
||||
@State @Watch('syncData') totalScore: number = 100
|
||||
//模拟考试项目
|
||||
@State projects: Project[] = []
|
||||
@State @Watch('syncData') projects: Project[] = []
|
||||
@State projectsObj: ProjectObj = {}
|
||||
@State projectsCenterObj: ProjectObj = {}
|
||||
@State markRuleListObj: MarkRule = {}
|
||||
@ -1380,8 +1417,8 @@ struct Index {
|
||||
@State lsh: string = ''
|
||||
@State kszp: string = ''
|
||||
@State ksdd: string = ''
|
||||
@State kssycs: string = ''
|
||||
@State ksxl: string = ''
|
||||
@State @Watch('syncData') kssycs: string = ''
|
||||
@State @Watch('syncData') ksxl: string = ''
|
||||
@State kslx: string = ''
|
||||
//监管线路代码
|
||||
@State xldm: string = ''
|
||||
@ -1394,14 +1431,14 @@ struct Index {
|
||||
@State syssetParam386ET3: boolean = false;
|
||||
@State carType: string = ''
|
||||
@State carName: string = ''
|
||||
@State isDeductedPopShow: boolean = false
|
||||
@State @Watch('syncData') isDeductedPopShow: boolean = false
|
||||
@State isAmplifyPopShow: boolean = false
|
||||
@State amplifiedImgIndex: number = 0
|
||||
@State judge: any = {}
|
||||
//行驶距离
|
||||
@State jl: number = 0
|
||||
@State @Watch('syncData') jl: number = 0
|
||||
//应考里程
|
||||
@State examMileage: string = '0'
|
||||
@State @Watch('syncData') examMileage: string = '0'
|
||||
@State artSubject3Projects: string[] = ['直线', '会车', '变道', '超车', '掉头', '停车']
|
||||
@State artSubject3ProjectsCodesArr: string[] = ['3', '9', '4', '10', '12', '11']
|
||||
@State manualMarkRules: MarkRule[] = []
|
||||
|
||||
@ -3,6 +3,7 @@ import MA_SYSTEMPARM from '../common/constants/MA_SYSTEMPARM';
|
||||
import AccountTable from '../common/database/tables/AccountTable';
|
||||
import { getSyncData } from '../common/service/initable';
|
||||
import router from '@ohos.router';
|
||||
import { RemoteToolWebsocket } from '../common/utils/RemotetoolWebsocket';
|
||||
|
||||
const cBg = $rawfile('judge/km3/road/luxian_pre.png');
|
||||
const lBg = $rawfile('judge/km3/road/luxian_nor.png');
|
||||
@ -15,6 +16,7 @@ const ltBg = $rawfile('judge/km3/road/luxian_nor.png');
|
||||
export default struct Index {
|
||||
@State @Watch('outClick') outFlag: boolean = false;
|
||||
@State roadObj: any = {}
|
||||
private remoteToolWebsocket: RemoteToolWebsocket = new RemoteToolWebsocket()
|
||||
|
||||
async aboutToAppear() {
|
||||
//读取systemparam表的no1等于4的
|
||||
@ -32,7 +34,7 @@ export default struct Index {
|
||||
build() {
|
||||
Column() {
|
||||
TopLogo({ outFlag: $outFlag })
|
||||
Flex({wrap:FlexWrap.Wrap,direction:FlexDirection.Row,justifyContent:FlexAlign.Start}){
|
||||
Flex({ wrap: FlexWrap.Wrap, direction: FlexDirection.Row, justifyContent: FlexAlign.Start }) {
|
||||
List({}) {
|
||||
ListItem() {
|
||||
Column() {
|
||||
@ -56,9 +58,10 @@ export default struct Index {
|
||||
const roadArr = Reflect.ownKeys(this.roadObj).map((roadKey) => {
|
||||
return this.roadObj[roadKey]
|
||||
});
|
||||
const wayno = roadArr[Math.floor(Math.random()*roadArr.length)];
|
||||
const wayno = roadArr[Math.floor(Math.random() * roadArr.length)];
|
||||
this.goJudge(wayno)
|
||||
})
|
||||
|
||||
ForEach(Reflect.ownKeys(this.roadObj), (roadIndex) => {
|
||||
ListItem() {
|
||||
Column() {
|
||||
@ -68,6 +71,7 @@ export default struct Index {
|
||||
.backgroundImageSize({ width: '100%', height: '100%' })
|
||||
.width(90)
|
||||
.height(80)
|
||||
|
||||
Text(`线路${this.roadObj[roadIndex] + ''}`) {
|
||||
}.fontColor('#FFF2D9').fontSize(24).padding({ top: 10 })
|
||||
}
|
||||
@ -92,15 +96,17 @@ export default struct Index {
|
||||
goJudge(wayno) {
|
||||
let currentParams: any = router.getParams() || {};
|
||||
const {sczb,kfdm} = currentParams;
|
||||
this.remoteToolWebsocket.sendRouter("10", "11")
|
||||
router.replaceUrl({
|
||||
url: 'pages/Judge',
|
||||
params:{
|
||||
params: {
|
||||
sczb,
|
||||
kfdm,
|
||||
wayno,
|
||||
}
|
||||
}, router.RouterMode.Single);
|
||||
|
||||
}, router.RouterMode.Single)
|
||||
}
|
||||
|
||||
outClick() {
|
||||
}
|
||||
outClick(){}
|
||||
}
|
||||
@ -126,15 +126,15 @@ struct UserInfo {
|
||||
const {examSubject} = globalThis.carInfo;
|
||||
this.currentUser.id = '0'
|
||||
await upDateTableByArray('USER', [this.currentUser])
|
||||
this.remoteToolWebsocket.sendRouter("9", examSubject == 3 ? '10' : '11')
|
||||
router.pushUrl({
|
||||
url: examSubject == 3 ? 'pages/Roads' : 'pages/Judge',
|
||||
params: {
|
||||
sczb: Number(this.isBoardPrePareSetPopupOpen),
|
||||
kfdm: this.sczbkf,
|
||||
}
|
||||
}, router.RouterMode.Single);
|
||||
}, router.RouterMode.Single)
|
||||
this.ksksLimit = false
|
||||
|
||||
this.stopDeviceById()
|
||||
return
|
||||
}
|
||||
@ -187,14 +187,17 @@ struct UserInfo {
|
||||
]
|
||||
private fileUtil: FileUtil
|
||||
private remoteToolWebsocket: RemoteToolWebsocket = new RemoteToolWebsocket()
|
||||
private syncToolData = () => {
|
||||
this.syncData()
|
||||
}
|
||||
|
||||
syncData() {
|
||||
if (this.remoteToolWebsocket.isStart) {
|
||||
this.remoteToolWebsocket.sendData<DataParams>({
|
||||
page: "9",
|
||||
page: 9,
|
||||
data: JSON.stringify({
|
||||
select: this.select,
|
||||
students: this.dataList.map(item => ({
|
||||
student: this.dataList.map(item => ({
|
||||
id: item.lsh,
|
||||
name: item.xm,
|
||||
idCard: item.sfzmhm,
|
||||
@ -211,12 +214,12 @@ struct UserInfo {
|
||||
aboutToAppear() {
|
||||
this.fileUtil = new FileUtil(this.context)
|
||||
this.avPlayer = new VoiceAnnounce();
|
||||
this.remoteToolWebsocket.onStart(this.syncData)
|
||||
this.remoteToolWebsocket.onStart(this.syncToolData, 9)
|
||||
}
|
||||
|
||||
aboutToDisappear() {
|
||||
this.outClick()
|
||||
this.remoteToolWebsocket.offStart(this.syncData)
|
||||
this.remoteToolWebsocket.offStart(9)
|
||||
}
|
||||
|
||||
async onPageShow() {
|
||||
@ -939,8 +942,6 @@ struct UserInfo {
|
||||
console.info('surenjun', '播放结束开始考试接口调用')
|
||||
const {code,keystr,message} = await this.beginExam() || {};
|
||||
console.info('surenjun', '开始考试接口调用结束')
|
||||
// console.info('surenjun',code +'')
|
||||
//@ts-ignore TODO code转换
|
||||
|
||||
if (code != 1) {
|
||||
avPlayer.playAudio([code == -200 ? 'voice/photo_error.mp3' : 'voice/监管审核未通过.mp3']);
|
||||
@ -956,6 +957,7 @@ struct UserInfo {
|
||||
await upDateTableByArray('USER', [this.currentUser])
|
||||
this.stepFlag = false
|
||||
this.isLoadingPopupVisible = false
|
||||
this.remoteToolWebsocket.sendRouter("9", "11")
|
||||
router.pushUrl({
|
||||
url: 'pages/Judge',
|
||||
params: {
|
||||
@ -965,7 +967,7 @@ struct UserInfo {
|
||||
//真实监管项目
|
||||
kString: decodeURIComponent(keystr || '')
|
||||
}
|
||||
}, router.RouterMode.Single);
|
||||
}, router.RouterMode.Single)
|
||||
this.updateTimeLimit = false
|
||||
this.stopDeviceById()
|
||||
this.stepFlag = false
|
||||
@ -1080,11 +1082,11 @@ struct UserInfo {
|
||||
// 开始考试
|
||||
async beginExam() {
|
||||
const carInfo = globalThis.carInfo;
|
||||
const {carId,examinationRoomId} = carInfo;
|
||||
const { examSubject,plateNo } = carInfo;
|
||||
const date = new Date()
|
||||
globalThis.startHourTime = await getCurrentHourTime()
|
||||
const photoBase64 = await this.getPhoto();
|
||||
// const photoBase64 = await this.getPhoto();
|
||||
const photoBase64: string = 'data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABB2lDQ1BJQ0MgUHJvZmlsZQAAKM9jYGA8wQAELAYMDLl5JUVB7k4KEZFRCuwPGBiBEAwSk4sLGHADoKpv1yBqL+sykA44U1KLk4H0ByBWKQJaDjRSBMgWSYewNUDsJAjbBsQuLykoAbIDQOyikCBnIDsFyNZIR2InIbGTC4pA6nuAbJvcnNJkhLsZeFLzQoOBNAcQyzAUMwQxuDM4gfwPUZK/iIHB4isDA/MEhFjSTAaG7a0MDBK3EGIqCxgY+FsYGLadR4ghwqQgsSgRLMQCxExpaQwMn5YzMPBGMjAIX2Bg4IqGBQQOtymA3ebOkA+E6Qw5DKlAEU+GPIZkBj0gy4jBgMGQwQwAptY/P1N/5B4AAAAJcEhZcwAADsIAAA7CARUoSoAAAABHdEVYdENvbW1lbnQAeyJzaGExIjoiOWU0ODg3NzY3MzRlODljY2RmNmU3ZGM1ZTQyZjQ1NmFhZTg4OTVlOCIsImV4dCI6InBuZyJ9fFoHZQAAAuVpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0n77u/JyBpZD0nVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkJz8+DQo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIj48cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPjxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSJ1dWlkOmZhZjViZGQ1LWJhM2QtMTFkYS1hZDMxLWQzM2Q3NTE4MmYxYiIgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iPjxleGlmOlVzZXJDb21tZW50PjxyZGY6QWx0IHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+PHJkZjpsaSB4bWw6bGFuZz0ieC1kZWZhdWx0Ij57InNoYTEiOiI5ZTQ4ODc3NjczNGU4OWNjZGY2ZTdkYzVlNDJmNDU2YWFlODg5NWU4IiwiZXh0IjoicG5nIn08L3JkZjpsaT48L3JkZjpBbHQ+DQoJCQk8L2V4aWY6VXNlckNvbW1lbnQ+PC9yZGY6RGVzY3JpcHRpb24+PHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9InV1aWQ6ZmFmNWJkZDUtYmEzZC0xMWRhLWFkMzEtZDMzZDc1MTgyZjFiIiB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyI+PGV4aWY6TGlnaHRTb3VyY2U+MDwvZXhpZjpMaWdodFNvdXJjZT48L3JkZjpEZXNjcmlwdGlvbj48L3JkZjpSREY+PC94OnhtcG1ldGE+DQo8P3hwYWNrZXQgZW5kPSd3Jz8+W4OfQgAAAE9JREFUOE9j1JE1+M9ARcCELkApGDWQcjAkDGSCmksuxjCQumDUQMrBYDPwH7oAA1I6JAT+YcFQwPifgZGJgYERahplgBG1fKbcQDRAdQMBlzoJvmxg6wkAAAAASUVORK5CYII=';
|
||||
if (photoBase64 == '') {
|
||||
this.ksksLimit = false
|
||||
this.isLoadingPopupVisible = false
|
||||
|
||||
@ -1,175 +1,233 @@
|
||||
import {MarkRule} from '../../judgeSDK/api/judgeSDK'
|
||||
import { MarkRule } from '../../judgeSDK/api/judgeSDK'
|
||||
import EndPoPup from './EndPopup';
|
||||
|
||||
interface SEL{
|
||||
fontColor:string
|
||||
bgColor:string
|
||||
interface SEL {
|
||||
fontColor: string
|
||||
bgColor: string
|
||||
}
|
||||
|
||||
@Component
|
||||
export default struct DeductedPopup {
|
||||
export default struct DeductedPopup {
|
||||
constructor() {
|
||||
super()
|
||||
}
|
||||
|
||||
@State fontSize:number = 30
|
||||
@State unselected:SEL = {fontColor:'#000000', bgColor:'#CCC4B8'}
|
||||
@State selected:SEL = {fontColor:'#FFAD33', bgColor:'#26231E'}
|
||||
|
||||
@State currentIndex:number = 0
|
||||
@State currentPageIndex:number = 0
|
||||
@State fontSize: number = 30
|
||||
@State unselected: SEL = { fontColor: '#000000', bgColor: '#CCC4B8' }
|
||||
@State selected: SEL = { fontColor: '#FFAD33', bgColor: '#26231E' }
|
||||
@State currentIndex: number = 0
|
||||
@State currentPageIndex: number = 0
|
||||
//通用评判扣分
|
||||
@State currentUniversalPageIndex:number = 0;
|
||||
private markRules:MarkRule[] = []
|
||||
@State universalMarkRules:MarkRule[] = []
|
||||
@State manualMarkRules:MarkRule[] = []
|
||||
@State lineBg:Array<string> = ['#4D4136','#26231E']
|
||||
@State selectedLine:number = undefined
|
||||
@State endPopupVisible:boolean = false
|
||||
private closePopup:Function = ()=> {}
|
||||
private confirmMark:Function = (itemno:number,serial:string) => {}
|
||||
@State selectedLineStyle:SEL = {
|
||||
fontColor:'#FFF',
|
||||
bgColor:'#B36E00'
|
||||
@State currentUniversalPageIndex: number = 0;
|
||||
private markRules: MarkRule[] = []
|
||||
@State universalMarkRules: MarkRule[] = []
|
||||
@State manualMarkRules: MarkRule[] = []
|
||||
@State lineBg: Array<string> = ['#4D4136', '#26231E']
|
||||
@State selectedLine: number = undefined
|
||||
@State endPopupVisible: boolean = false
|
||||
private closePopup: Function = () => {
|
||||
}
|
||||
private confirmMark: Function = (itemno: number, serial: string) => {
|
||||
}
|
||||
@State selectedLineStyle: SEL = {
|
||||
fontColor: '#FFF',
|
||||
bgColor: '#B36E00'
|
||||
}
|
||||
@Prop defaultTabIndex: number = 0
|
||||
@Prop @Watch('changeCurrentItems') currentItems: string[] = [];
|
||||
@State preCurrentItemsLength: number = 0
|
||||
onListChange?: (list: string[]) => void
|
||||
|
||||
@Prop defaultTabIndex:number = 0
|
||||
@Prop @Watch('changeCurrentItems') currentItems:string[] = [];
|
||||
@State preCurrentItemsLength:number = 0
|
||||
|
||||
aboutToAppear(){
|
||||
aboutToAppear() {
|
||||
//@ts-ignore
|
||||
this.universalMarkRules = this.markRules.filter(item => (this.currentItems.includes(item.itemno) || this.currentItems.includes(item.itemno + '')));
|
||||
this.currentIndex = this.defaultTabIndex
|
||||
if(this.currentIndex == 1){
|
||||
this.universalMarkRules = this.markRules.filter(item => item.itemno == 20 )
|
||||
if (this.currentIndex == 1) {
|
||||
this.universalMarkRules = this.markRules.filter(item => item.itemno == 20)
|
||||
}
|
||||
this.preCurrentItemsLength = this.currentItems.length
|
||||
}
|
||||
|
||||
changeCurrentItems(){
|
||||
if(this.currentItems?.length && (this.currentItems?.length >= this.preCurrentItemsLength)){
|
||||
changeCurrentItems() {
|
||||
if (this.currentItems?.length && (this.currentItems?.length >= this.preCurrentItemsLength)) {
|
||||
//@ts-ignore
|
||||
this.universalMarkRules = this.markRules.filter(item => (this.currentItems.includes(item.itemno) || this.currentItems.includes(item.itemno + '')));
|
||||
this.currentIndex = this.defaultTabIndex
|
||||
if(this.currentIndex == 1){
|
||||
this.universalMarkRules = this.markRules.filter(item => item.itemno == 20 )
|
||||
if (this.currentIndex == 1) {
|
||||
this.universalMarkRules = this.markRules.filter(item => item.itemno == 20)
|
||||
}
|
||||
this.preCurrentItemsLength = this.currentItems.length
|
||||
}else{
|
||||
} else {
|
||||
this.preCurrentItemsLength = 0
|
||||
}
|
||||
}
|
||||
|
||||
//上一页 下一页
|
||||
goPage(typeIndex){
|
||||
goPage(typeIndex) {
|
||||
const currentIndex = this.currentIndex
|
||||
if(currentIndex){
|
||||
if (currentIndex) {
|
||||
//通用评判
|
||||
typeIndex ? (this.currentUniversalPageIndex += 1) : (this.currentUniversalPageIndex -= 1)
|
||||
}else{
|
||||
} else {
|
||||
typeIndex ? (this.currentPageIndex += 1) : (this.currentPageIndex -= 1)
|
||||
}
|
||||
this.selectedLine = -1
|
||||
}
|
||||
|
||||
//选中扣分项
|
||||
getSelectedLine(index){
|
||||
getSelectedLine(index) {
|
||||
const {selectedLine,selectedLineStyle,lineBg} = this;
|
||||
if(selectedLine === index){
|
||||
if (selectedLine === index) {
|
||||
return selectedLineStyle.bgColor
|
||||
}
|
||||
if(index % 2 === 0){
|
||||
if (index % 2 === 0) {
|
||||
return lineBg[0]
|
||||
}else{
|
||||
} else {
|
||||
return lineBg[1]
|
||||
}
|
||||
}
|
||||
|
||||
//获取当前页的数据
|
||||
getCurrentMarkRuleList(){
|
||||
getCurrentMarkRuleList() {
|
||||
const {currentIndex,currentUniversalPageIndex,currentPageIndex,markRules,universalMarkRules} = this;
|
||||
if(currentIndex){
|
||||
if (currentIndex) {
|
||||
this.onListChange(universalMarkRules.slice(currentUniversalPageIndex * 7, (currentUniversalPageIndex + 1) * 7)
|
||||
.map(item => item.markcatalog))
|
||||
//通用评判
|
||||
return universalMarkRules.slice(currentUniversalPageIndex*7,(currentUniversalPageIndex + 1)*7)
|
||||
}else{
|
||||
return universalMarkRules.slice(currentPageIndex*7,(currentPageIndex + 1)*7)
|
||||
return universalMarkRules.slice(currentUniversalPageIndex * 7, (currentUniversalPageIndex + 1) * 7)
|
||||
} else {
|
||||
this.onListChange(universalMarkRules.slice(currentPageIndex * 7, (currentPageIndex + 1) * 7)
|
||||
.map(item => item.markcatalog))
|
||||
return universalMarkRules.slice(currentPageIndex * 7, (currentPageIndex + 1) * 7)
|
||||
}
|
||||
}
|
||||
|
||||
build(){
|
||||
Column(){
|
||||
Column(){
|
||||
Column(){
|
||||
Row(){
|
||||
Row(){
|
||||
ForEach(['人工评判','通用评判'],(text,index)=>{
|
||||
Row(){
|
||||
Text(text).fontColor(index === this.currentIndex ? this.selected.fontColor : this.unselected.fontColor).fontSize(this.fontSize).fontWeight(500)
|
||||
build() {
|
||||
Column() {
|
||||
Column() {
|
||||
Column() {
|
||||
Row() {
|
||||
Row() {
|
||||
ForEach(['人工评判', '通用评判'], (text, index) => {
|
||||
Row() {
|
||||
Text(text)
|
||||
.fontColor(index === this.currentIndex ? this.selected.fontColor : this.unselected.fontColor)
|
||||
.fontSize(this.fontSize)
|
||||
.fontWeight(500)
|
||||
}
|
||||
.width(140).height(60)
|
||||
.backgroundColor(index === this.currentIndex ? this.selected.bgColor: this.unselected.bgColor ).justifyContent(FlexAlign.Center).justifyContent(FlexAlign.Center)
|
||||
.borderRadius({topLeft:20,topRight:20}).margin({right:10})
|
||||
.onClick(()=>{
|
||||
.width(140)
|
||||
.height(60)
|
||||
.backgroundColor(index === this.currentIndex ? this.selected.bgColor : this.unselected.bgColor)
|
||||
.justifyContent(FlexAlign.Center)
|
||||
.justifyContent(FlexAlign.Center)
|
||||
.borderRadius({ topLeft: 20, topRight: 20 })
|
||||
.margin({ right: 10 })
|
||||
.onClick(() => {
|
||||
this.currentIndex = index;
|
||||
this.selectedLine = -1;
|
||||
if(index === 1) {
|
||||
this.universalMarkRules = this.markRules.filter(item => item.itemno == 20 )
|
||||
}else{
|
||||
if (index === 1) {
|
||||
this.universalMarkRules = this.markRules.filter(item => item.itemno == 20)
|
||||
} else {
|
||||
//@ts-ignore
|
||||
this.universalMarkRules = this.markRules.filter(item => (this.currentItems.includes(item.itemno) || this.currentItems.includes(item.itemno+'')))
|
||||
this.universalMarkRules = this.markRules.filter(item => (this.currentItems.includes(item.itemno) || this.currentItems.includes(item.itemno + '')))
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
Row(){
|
||||
if(
|
||||
(Math.ceil(this.universalMarkRules.length / 7 - 1)) >= (this.currentIndex ? this.currentUniversalPageIndex: this.currentPageIndex) &&
|
||||
(this.currentIndex ? this.currentUniversalPageIndex: this.currentPageIndex) > 0
|
||||
){
|
||||
Row(){
|
||||
Image($rawfile(`judge/km3/zuo_nor.png`)).height(15).margin({left:20,top:0})
|
||||
Text('上一页'){}.fontColor('#FFF').fontSize(this.fontSize)
|
||||
}.width(150).height(60).justifyContent(FlexAlign.Start).alignItems(VerticalAlign.Center).backgroundImage($rawfile(`judge/km3/button_nor.png`)).backgroundImageSize({width:'100%',height:'100%'}).margin({right:30})
|
||||
.onClick(()=>{this.goPage(0)})
|
||||
|
||||
Row() {
|
||||
if (
|
||||
(Math.ceil(this.universalMarkRules.length / 7 - 1)) >= (this.currentIndex ? this.currentUniversalPageIndex : this.currentPageIndex) &&
|
||||
(this.currentIndex ? this.currentUniversalPageIndex : this.currentPageIndex) > 0
|
||||
) {
|
||||
Row() {
|
||||
Image($rawfile(`judge/km3/zuo_nor.png`)).height(15).margin({ left: 20, top: 0 })
|
||||
Text('上一页') {
|
||||
}.fontColor('#FFF').fontSize(this.fontSize)
|
||||
}
|
||||
.width(150)
|
||||
.height(60)
|
||||
.justifyContent(FlexAlign.Start)
|
||||
.alignItems(VerticalAlign.Center)
|
||||
.backgroundImage($rawfile(`judge/km3/button_nor.png`))
|
||||
.backgroundImageSize({ width: '100%', height: '100%' })
|
||||
.margin({ right: 30 })
|
||||
.onClick(() => {
|
||||
this.goPage(0)
|
||||
})
|
||||
}
|
||||
|
||||
if(
|
||||
(Math.ceil(this.universalMarkRules.length / 7 - 1)) > (this.currentIndex ? this.currentUniversalPageIndex: this.currentPageIndex)
|
||||
){
|
||||
Row(){
|
||||
Text('下一页'){}.fontColor('#FFF').fontSize(this.fontSize).padding({left:30})
|
||||
Image($rawfile(`judge/km3/you_nor.png`)).height(15).margin({right:6,top:0})
|
||||
}.width(150).height(60).justifyContent(FlexAlign.Start).alignItems(VerticalAlign.Center).backgroundImage($rawfile(`judge/km3/button_nor.png`)).backgroundImageSize({width:'100%',height:'100%'}).margin({right:30})
|
||||
.onClick(()=>{this.goPage(1)})
|
||||
if (
|
||||
(Math.ceil(this.universalMarkRules.length / 7 - 1)) > (this.currentIndex ? this.currentUniversalPageIndex : this.currentPageIndex)
|
||||
) {
|
||||
Row() {
|
||||
Text('下一页') {
|
||||
}.fontColor('#FFF').fontSize(this.fontSize).padding({ left: 30 })
|
||||
|
||||
Image($rawfile(`judge/km3/you_nor.png`)).height(15).margin({ right: 6, top: 0 })
|
||||
}
|
||||
.width(150)
|
||||
.height(60)
|
||||
.justifyContent(FlexAlign.Start)
|
||||
.alignItems(VerticalAlign.Center)
|
||||
.backgroundImage($rawfile(`judge/km3/button_nor.png`))
|
||||
.backgroundImageSize({ width: '100%', height: '100%' })
|
||||
.margin({ right: 30 })
|
||||
.onClick(() => {
|
||||
this.goPage(1)
|
||||
})
|
||||
}
|
||||
|
||||
Row(){
|
||||
Text('扣 分'){}.fontColor('#FFF').fontSize(this.fontSize).padding({left:35})
|
||||
}.width(140).height(60).justifyContent(FlexAlign.Start).alignItems(VerticalAlign.Center).backgroundImage($rawfile(`judge/km3/button_nor.png`)).backgroundImageSize({width:'100%',height:'100%'})
|
||||
.onClick(()=>{
|
||||
Row() {
|
||||
Text('扣 分') {
|
||||
}.fontColor('#FFF').fontSize(this.fontSize).padding({ left: 35 })
|
||||
}
|
||||
.width(140)
|
||||
.height(60)
|
||||
.justifyContent(FlexAlign.Start)
|
||||
.alignItems(VerticalAlign.Center)
|
||||
.backgroundImage($rawfile(`judge/km3/button_nor.png`))
|
||||
.backgroundImageSize({ width: '100%', height: '100%' })
|
||||
.onClick(() => {
|
||||
this.endPopupVisible = true
|
||||
})
|
||||
}
|
||||
}.width('100%').justifyContent(FlexAlign.SpaceBetween)
|
||||
Column(){
|
||||
ForEach(this.getCurrentMarkRuleList(),(item,index) => {
|
||||
Row(){
|
||||
Row(){
|
||||
Text(`${item.markshow} (${item.markcatalog})`).fontColor('#FFF').fontSize(this.fontSize).fontWeight(600)
|
||||
|
||||
Column() {
|
||||
ForEach(this.getCurrentMarkRuleList(), (item, index) => {
|
||||
Row() {
|
||||
Row() {
|
||||
Text(`${item.markshow} (${item.markcatalog})`)
|
||||
.fontColor('#FFF')
|
||||
.fontSize(this.fontSize)
|
||||
.fontWeight(600)
|
||||
}.width(1000)
|
||||
Row(){
|
||||
|
||||
Row() {
|
||||
Text(item.markreal + '').fontColor('#FFF').fontSize(this.fontSize).fontWeight(600)
|
||||
}
|
||||
}
|
||||
.width('100%').justifyContent(FlexAlign.SpaceBetween).alignItems(VerticalAlign.Center).constraintSize({minHeight:70})
|
||||
.padding({left:20,right:20})
|
||||
.width('100%')
|
||||
.justifyContent(FlexAlign.SpaceBetween)
|
||||
.alignItems(VerticalAlign.Center)
|
||||
.constraintSize({ minHeight: 70 })
|
||||
.padding({ left: 20, right: 20 })
|
||||
.backgroundColor(this.getSelectedLine(index))
|
||||
.onClick(()=>{this.selectedLine = index})
|
||||
.onClick(() => {
|
||||
this.selectedLine = index
|
||||
})
|
||||
})
|
||||
}
|
||||
}
|
||||
}.width(1200).height(620).position({x:30,y:315}).backgroundColor('#E6E3DF').padding({top:15,bottom:15,left:25,right:25}).borderRadius(20)
|
||||
}
|
||||
.width(1200)
|
||||
.height(620)
|
||||
.position({ x: 30, y: 315 })
|
||||
.backgroundColor('#E6E3DF')
|
||||
.padding({ top: 15, bottom: 15, left: 25, right: 25 })
|
||||
.borderRadius(20)
|
||||
|
||||
// Row(){}.width(100).height(100).position({y:'85%',x:'50%'}).backgroundImage($rawfile('judge/km3/close_nor.png')).backgroundImageSize({width:'100%',height:'100%'})
|
||||
//结束考试弹窗
|
||||
if (this.endPopupVisible) {
|
||||
@ -179,12 +237,14 @@ export default struct DeductedPopup {
|
||||
this.endPopupVisible = false;
|
||||
},
|
||||
confirmFn: async () => {
|
||||
const index = this.currentIndex ? this.currentUniversalPageIndex: this.currentPageIndex;
|
||||
const index = this.currentIndex ? this.currentUniversalPageIndex : this.currentPageIndex;
|
||||
const mark = this.universalMarkRules[index * 7 + this.selectedLine]
|
||||
mark && this.confirmMark(mark.itemno,mark.markserial)
|
||||
mark && this.confirmMark(mark.itemno, mark.markserial)
|
||||
}
|
||||
})
|
||||
}
|
||||
}.width('100%').height('100%').position({y:0}).onClick(()=>{this.closePopup()})
|
||||
}.width('100%').height('100%').position({ y: 0 }).onClick(() => {
|
||||
this.closePopup()
|
||||
})
|
||||
}
|
||||
}
|
||||
@ -1,9 +1,8 @@
|
||||
|
||||
|
||||
{
|
||||
"module": {
|
||||
"name": "entry",
|
||||
"type": "entry",
|
||||
"srcEntry": "./ets/entryability/EntryAbility.ets",
|
||||
"description": "$string:module_desc",
|
||||
"mainElement": "EntryAbility",
|
||||
"deviceTypes": [
|
||||
@ -13,17 +12,16 @@
|
||||
"deliveryWithInstall": true,
|
||||
"installationFree": false,
|
||||
"pages": "$profile:main_pages",
|
||||
|
||||
"abilities": [
|
||||
{
|
||||
"name": "EntryAbility",
|
||||
"srcEntrance": "./ets/entryability/EntryAbility.ets",
|
||||
"srcEntry": "./ets/entryability/EntryAbility.ets",
|
||||
"description": "$string:EntryAbility_desc",
|
||||
"icon": "$media:logo_app",
|
||||
"label": "$string:EntryAbility_label",
|
||||
"startWindowIcon": "$media:icon",
|
||||
"startWindowBackground": "$color:start_window_background",
|
||||
"visible": true,
|
||||
"exported": true,
|
||||
"skills": [
|
||||
{
|
||||
"entities": [
|
||||
@ -36,9 +34,13 @@
|
||||
]
|
||||
}
|
||||
],
|
||||
"requestPermissions":[
|
||||
{"name": "ohos.permission.CONNECTIVITY_INTERNAL"},
|
||||
{"name": "ohos.permission.SET_TIME"},
|
||||
"requestPermissions": [
|
||||
{
|
||||
"name": "ohos.permission.CONNECTIVITY_INTERNAL"
|
||||
},
|
||||
{
|
||||
"name": "ohos.permission.SET_TIME"
|
||||
},
|
||||
{
|
||||
"name": "ohos.permission.INTERNET"
|
||||
},
|
||||
@ -102,26 +104,6 @@
|
||||
"when": "always"
|
||||
}
|
||||
},
|
||||
// {
|
||||
// "name": "ohos.permission.READ_MEDIA",
|
||||
// "reason": "$string:module_desc",
|
||||
// "usedScene": {
|
||||
// "abilities": [
|
||||
// "MainAbility"
|
||||
// ],
|
||||
// "when": "always"
|
||||
// }
|
||||
// },
|
||||
// {
|
||||
// "name": "ohos.permission.WRITE_MEDIA",
|
||||
// "reason": "$string:module_desc",
|
||||
// "usedScene": {
|
||||
// "abilities": [
|
||||
// "MainAbility"
|
||||
// ],
|
||||
// "when": "always"
|
||||
// }
|
||||
// },
|
||||
{
|
||||
"name": "ohos.permission.FILE_ACCESS_MANAGER",
|
||||
"reason": "$string:module_desc",
|
||||
@ -135,7 +117,6 @@
|
||||
{
|
||||
"name": "ohos.permission.STORAGE_MANAGER"
|
||||
},
|
||||
|
||||
{
|
||||
"name": "ohos.permission.GET_BUNDLE_INFO_PRIVILEGED",
|
||||
"reason": "$string:module_desc",
|
||||
@ -145,7 +126,7 @@
|
||||
],
|
||||
"when": "always"
|
||||
}
|
||||
}
|
||||
},
|
||||
]
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user