2025-03-26 14:48:56 +08:00

475 lines
15 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { initCenterCache, initCenterCacheByKSPT, initEsModel, initialization } from '../../api/index';
import AccountTable from '../database/tables/AccountTable';
import MA_MARKRULE from '../constants/MA_MARKRULE';
import MA_SYSTEMPARM from '../constants/MA_SYSTEMPARM';
import MA_MAP_COLLECT from '../constants/MA_MAP_COLLECT';
import MA_MAP_COLLECT_SHAPE from '../constants/MA_MAP_COLLECT_SHAPE';
import MA_MAP_ITEMCLASS from '../constants/MA_MAP_ITEMCLASS';
import MA_MAP_POINT from '../constants/MA_MAP_POINT';
import MA_MAP_POINT_ITEM from '../constants/MA_MAP_POINT_ITEM';
import MA_MAP_ROAD from '../constants/MA_MAP_ROAD';
import MA_MAP_ROAD_LANE from '../constants/MA_MAP_ROAD_LANE';
import MA_MAP_SUBITEM from '../constants/MA_MAP_SUBITEM';
import MA_SYSSET from '../constants/MA_SYSSET';
import ES_CARINFO from '../constants/ES_CARINFO';
import ES_EXAMPOINTDETAIL from '../constants/ES_EXAMPOINTDETAIL';
import MA_MARKRULESET from '../constants/MA_MARKRULESET';
import MA_CDSBINFO from '../constants/MA_CDSBINFO';
import MA_ITEMINFO from '../constants/MA_ITEMINFO';
import MA_T_CARPARMSET from '../constants/MA_T_CARPARMSET';
import ES_CAR_VIDEO_PARAMETER from '../constants/ES_CAR_VIDEO_PARAMETER';
import IpConfigTable from '../constants/IpConfigTable';
import CommonConstants from '../constants/CommonConstants';
import DeviceInfoTable from '../constants/DeviceInfoTable';
import USER from '../constants/USER';
import USERLIST from '../constants/USERLIST';
import util from '@ohos.util';
import FileModel from '../../pages/judgeSDK/utils/fileModel';
import { GlobalConfig } from '../../config/index';
import prompt from '@ohos.promptAction';
import DB, { ColumnType } from '../database/DbSql';
import FileUtils from '../../utils/FileUtils';
import { TimeSynchronizationRspBody } from '../../model';
//读表
//参数平台
const map = {
'MA_MARKRULE': MA_MARKRULE,
'MA_SYSTEMPARM': MA_SYSTEMPARM,
'MA_MAP_COLLECT': MA_MAP_COLLECT,
'MA_MAP_COLLECT_SHAPE': MA_MAP_COLLECT_SHAPE,
'MA_MAP_ITEMCLASS': MA_MAP_ITEMCLASS,
'MA_MAP_POINT': MA_MAP_POINT,
'MA_MAP_POINT_ITEM': MA_MAP_POINT_ITEM,
'MA_MAP_ROAD': MA_MAP_ROAD,
'MA_MAP_ROAD_LANE': MA_MAP_ROAD_LANE,
'MAP_SUBITEM': MA_MAP_SUBITEM,
'MA_MAP_SUBITEM': MA_MAP_SUBITEM,
'MA_SYSSET': MA_SYSSET,
'ES_CARINFO': ES_CARINFO,
'ES_EXAMPOINTDETAIL': ES_EXAMPOINTDETAIL,
'MA_MARKRULESET': MA_MARKRULESET,
'MA_CDSBINFO': MA_CDSBINFO,
'MA_ITEMINFO': MA_ITEMINFO,
'MA_T_CARPARMSET': MA_T_CARPARMSET,
'ES_CAR_VIDEO_PARAMETER': ES_CAR_VIDEO_PARAMETER,
'USER': USER,
'USERLIST': USERLIST,
'IpConfigTable': IpConfigTable,
'DeviceInfoTable': DeviceInfoTable,
'CommonConstants': CommonConstants
}
const centerToMap = {
'ItemInfo': MA_ITEMINFO,
'MarkRule': MA_MARKRULE,
'SystemParm': MA_SYSTEMPARM,
'mapCollectList': MA_MAP_COLLECT,
'mapCollectshapeList': MA_MAP_COLLECT_SHAPE,
'Map_Collect': MA_MAP_COLLECT,
'Map_Collect_Shape': MA_MAP_COLLECT_SHAPE,
'Map_ItemClass': MA_MAP_ITEMCLASS,
'Map_Point': MA_MAP_POINT,
'Map_Point_Item': MA_MAP_POINT_ITEM,
'Map_Road': MA_MAP_ROAD,
'Map_Road_Lane': MA_MAP_ROAD_LANE,
'Map_SubItem': MA_MAP_SUBITEM,
'Sysset': MA_SYSSET,
'CarInfo': ES_CARINFO,
'MarkRuleSet': MA_MARKRULE,
'Cdsbinfo': MA_CDSBINFO,
'T_CarParmSet': MA_T_CARPARMSET,
}
// 建表操作
export async function initTable() {
console.log("sql inittable")
for (let key in map) {
await DB.executeSql(map[key].ACCOUNT_TABLE.sqlCreate)
}
}
export function sqlInsertCommonFn(tableName, resultArr, delFlag = true) {
return new Promise((resolve, reject) => {
DB.clearTable(tableName).then((res) => {
let INSERT_SQL = "INSERT INTO " + tableName
+ " (" + map[tableName].ACCOUNT_TABLE.columns.toString() + ") VALUES "
resultArr.map((data, i) => {
data.id = !delFlag ? `${i + resultArr.length}` : `${i}`
let str = '('
map[tableName].ACCOUNT_TABLE.columns.map((res, index) => {
if (map[tableName].ACCOUNT_TABLE.columns.length - 1 == index) {
str += data[res] ? `'${data[res]}'` : 'NULL'
} else {
str += (data[res] ? `'${data[res]}'` : 'NULL') + ','
}
})
if (i == resultArr.length - 1) {
str += ')'
} else {
str += '),'
}
INSERT_SQL += str
})
console.log("sql insert sqlCode", INSERT_SQL)
DB.executeSql(INSERT_SQL).then(() => {
console.log('sql insert,', res, 'tableName', tableName)
resolve(true)
}).catch((err) => {
console.log('sql insert err,', JSON.stringify(err), 'tableName', tableName)
reject(err)
})
})
})
}
//参数平台
export async function getDataBaseTable(params, reqParam) {
return new Promise<void>(async (resolve, reject) => {
const date = new Date()
if (!reqParam?.paraKdid) {
prompt.showToast({
message: 'paraKdid获取失败',
duration: 3000
});
return
}
const str = {
"head": { "time": dateFormat(date) },
"body":
{
"tableName": params.tableName, // 表名
"paraKdid": reqParam.paraKdid, //参数平台kdid
"examinationRoomId": reqParam.examinationRoomId, //考试平台kdid
"typeRsp": "0" // 赋默认值0无需改变
}
}
let res: any = await initCenterCache(str, reqParam.centerHost)
if (res.body[params.tableName].length == 0) {
resolve();
return
}
if (params.tableName == 'MA_SYSSET') {
res.body[params.tableName] = res.body[params.tableName].filter(res => {
return res['v_no'] < 300 || res['v_no'] > 700
})
}
sqlInsertCommonFn(params.tableName, res.body[params.tableName], reqParam.context).then((val) => {
// resolve(val)
resolve()
})
})
}
//依据数组和表名更新sql表
export async function upDateTableByArray(tableName, arr) {
return new Promise(async (reslove, reject) => {
const data = await sqlInsertCommonFn(tableName, arr)
reslove(data)
})
}
//更新双中心表
export async function upDateTable(params, reqParam) {
return new Promise((resolve, reject) => {
const date = new Date()
let paraKdid = reqParam?.paraKdid || ''
let examinationRoomId = reqParam?.kdid || ''
if (!paraKdid || !examinationRoomId) {
resolve(false)
return
}
const str = {
"head": { "time": dateFormat(date) },
"body":
{
"tableName": params.tableName, // 表名
"paraKdid": reqParam.paraKdid, //参数平台kdid
"examinationRoomId": reqParam.kdid, //考试平台kdid
"typeRsp": "0" // 赋默认值0无需改变
}
}
const url = reqParam.centerHost
initCenterCache(str, url).then(async (res: ESObject) => {
if (!res || res == undefined || res == '') {
resolve(false)
return
}
try {
const result = await sqlInsertCommonFn(params.tableName, res.body[params.tableName], reqParam.context)
resolve(result)
} catch (error) {
console.log(error)
}
})
});
}
//考试平台
export async function getMySystemSetTable(params, reqParam) {
return new Promise<void>((resolve, reject) => {
const date = new Date()
if (!reqParam.paraKdid) {
prompt.showToast({
message: 'paraKdid获取失败',
duration: 3000
});
return
}
const str = {
"head": { "time": dateFormat(date) },
"body":
{
"tableName": params.tableName, // 表名
"paraKdid": reqParam?.paraKdid, //参数平台kdid
"examinationRoomId": reqParam?.kdid, //考试平台kdid
"typeRsp": "0" // 赋默认值0无需改变
}
}
initCenterCacheByKSPT(str, reqParam.url).then((res: ESObject) => {
if (res.body[params.tableName].length == 0) {
resolve();
return
}
if (params.tableName == 'MA_SYSSET') {
res.body[params.tableName] = res.body[params.tableName].filter(res => {
return res['v_no'] >= 300 && res['v_no'] <= 700
})
}
sqlInsertCommonFn(params.tableName, res.body[params.tableName], false).then((result) => {
// resolve(result)
resolve()
})
})
})
}
//依据表名同步获取数据
export async function getSyncData(tableName, context?) {
return new Promise((resolve, reject) => {
const column = map[tableName].ACCOUNT_TABLE.columns.map(res => {
return {
name: res,
columnName: res,
type: ColumnType.STRING
}
})
DB.queryListBySql(`select * from ${tableName}`, column).then(res => {
console.log("sql MA_SYSSET", JSON.stringify(res))
resolve(res)
}).catch(err => {
console.log("sql err MA_SYSSET", JSON.stringify(err))
reject(err)
})
})
}
export async function delSyncTable(tableName, context?) {
return new Promise((resolve, reject) => {
const accountTable = new AccountTable(() => {
const SQL = `DELETE FROM ${tableName};`
console.log("sql message 删除操作,表", tableName)
accountTable.sqlOperate(SQL, tableName, (val) => {
console.log('teststet3', '删除成功')
resolve(val)
})
}, map[tableName], context);
// accountTable.deleteTableData((ret) => {
// console.log('删除成功')
// resolve(true)
// }, tableName, context)
})
}
//获取车模、场地模型
export async function getEsCarModel(context) {
const date = new Date()
const timeInfo = AppStorage.get<TimeSynchronizationRspBody>('timeInfo')
if (!timeInfo?.paraKdid) {
prompt.showToast({
message: 'paraKdid获取失败',
duration: 3000
});
return
}
const carStr = {
"head": { "time": dateFormat(date) },
"body":
{
"rtkType": "1", //1:车模 2:场地模型
"rspType": "0", //返回类型
"paraKdid": timeInfo.paraKdid, //参数平台kdid
"examinationRoomId": timeInfo.kdid, //考试平台kdid
// "carMac":"MAC-HCPAD-210",
"carMac": AppStorage.get<string>('deviceNo')
}
}
const venueStr = {
"head": { "time": dateFormat(date) },
"body":
{
"rtkType": "2", //1:车模 2:场地模型
"rspType": "0", //返回类型
"paraKdid": timeInfo.paraKdid, //参数平台kdid
"examinationRoomId": timeInfo.kdid, //考试平台kdid
// "carMac":"MAC-HCPAD-210",
"carMac": AppStorage.get<string>('deviceNo')
}
}
let carRes: any = await initEsModel(carStr);
let venueRes: any = await initEsModel(venueStr);
const carModel = carRes.body.ES_MODEL[0][1];
const venueModel = venueRes.body.ES_MODEL[0][2];
let tmpBase64Array = carModel.split("\r\n")
let newBase64Str: string = '';
for (let i = 0; i < tmpBase64Array.length; ++i) {
newBase64Str += tmpBase64Array[i];
}
const base64 = new util.Base64();
let result = base64.decodeSync(newBase64Str);
const fileModel = new FileModel(context);
await fileModel.initFolder()
await fileModel.storingFiles(result.buffer)
}
export async function upDataZhongxinginitialization(param) {
return new Promise(async (resolve, reject) => {
console.log('teststet00', JSON.stringify(param))
let flag = true
if (param.singlePlay) {
console.log('teststet0', JSON.stringify(param))
const fileUtil = new FileUtils(param.context)
const tableList =
['MA_SYSSET', 'MA_SYSTEMPARM', 'MA_MARKRULE', 'MA_MARKRULESET', 'ES_CARINFO', 'MA_MAP_ROAD', 'MA_MAP_ROAD_LANE',
'MAP_SUBITEM', 'MA_T_CARPARMSET', 'MA_MAP_ITEMCLASS', 'MA_MAP_POINT', 'MA_MAP_POINT_ITEM'];
for (let i = 0; i <= tableList.length - 1; i++) {
const data =
await fileUtil.readFile(GlobalConfig.comoonfileWriteAddress + `/config/tableList/${tableList[i]}.txt`);
const result = await sqlInsertCommonFn(tableList[i], JSON.parse(data) || [], param.context)
result ? (flag = true) : (flag = false)
}
console.log('teststet1', JSON.stringify(param))
if (!flag) {
prompt.showToast({
message: '本地文件初始化数据库失败',
duration: 3000
});
}
console.log("init table1")
resolve(flag)
return
}
if (!param.carId) {
console.log("init table2")
resolve(false)
return
}
try {
const str = {
"carId": param.carId, // 表名
"examinationRoomId": param.examinationRoomId, //考试平台kdid
videoVersion: '1.0',
judgeVersion: param.judgeVersion,
shellVersion: param.shellVersion,
host: param.host
}
console.log('daihai2', JSON.stringify(str))
initialization(str).then(async (res: ESObject) => {
console.log('daihai3', JSON.stringify(res))
if (!res || res.initializationRsp.head.resultCode == 1) {
console.log('daihai34', JSON.stringify(res))
console.log("init table3")
resolve(false)
return
}
let flag
console.log('resposestart')
for (let key in res.initializationRsp.body) {
if (!centerToMap[key]) {
continue
}
const data = await setSyncCenterSqlData(key, res, param)
if (!data) {
console.log("init table4")
resolve(false)
}
}
resolve(true)
}).catch((Error) => {
console.log("init table5", JSON.stringify(Error))
resolve(false)
})
} catch (error) {
console.log("init table6", JSON.stringify(error))
resolve(false)
}
})
}
function setSyncCenterSqlData(key, res, param) {
return new Promise(async (resolve, reject) => {
const mapName = {
'ItemInfo': 'MA_ITEMINFO',
'MarkRule': 'MA_MARKRULE',
'SystemParm': 'MA_SYSTEMPARM',
'Map_Collect': 'MA_MAP_COLLECT',
'Map_Collect_Shape': 'MA_MAP_COLLECT_SHAPE',
'Map_ItemClass': 'MA_MAP_ITEMCLASS',
'Map_Point': 'MA_MAP_POINT',
'Map_Point_Item': 'MA_MAP_POINT_ITEM',
'Map_Road': 'MA_MAP_ROAD',
'Map_Road_Lane': 'MA_MAP_ROAD_LANE',
'Map_SubItem': 'MAP_SUBITEM',
'Sysset': 'MA_SYSSET',
'CarInfo': 'ES_CARINFO',
// 'ES_EXAMPOINTDETAIL':ES_EXAMPOINTDETAIL,
'MarkRuleSet': 'MA_MARKRULESET',
'Cdsbinfo': 'MA_CDSBINFO',
'T_CarParmSet': 'MA_T_CARPARMSET',
}
let arrList
if (res.initializationRsp.body[key].record instanceof Array) {
arrList = res.initializationRsp.body[key].record
} else {
arrList = [res.initializationRsp.body[key].record]
}
const fileUtil = new FileUtil(param.context)
const folderPath = await fileUtil.initFolder(`/config/tableList`);
fileUtil.addFile(`${folderPath}/${mapName[key]}.txt`, JSON.stringify(arrList))
console.log('mapName[key]', mapName[key], key)
sqlInsertCommonFn(mapName[key], arrList, param.context).then((result) => {
console.log(key, '表建立成功')
// writeLog('PLC',{
// time:dateFormat(new Date()),
// PLC:`${key} 表建立成功`,
// })
if (result) {
resolve(true)
} else {
resolve(false)
}
}).catch((msg) => {
reject(false)
console.log(key, '表建立失败')
})
})
}