import { InitializeTheCentralTableType, ResponseDataType, User } from '../../model'; import DB, { ColumnInfo, ColumnType } from '../DbSql'; import { CenterMap, ParameterPlatform, RemappingTableName } from './Relationship'; import { BusinessError } from '@ohos.base'; import Prompt from '@system.prompt'; import { initialization } from '../../api'; import { GlobalConfig } from '../../config'; import FileUtils from '../FileUtils'; // 建表操作 export async function InitTable() { Object.keys(ParameterPlatform).forEach(async (item) => { await DB.executeSql(ParameterPlatform.get(item).sqlCreate); }); } // 插表操作 export function SqlInsertTable(tableName: string, data: Array, delFlag = true): Promise { return new Promise((resolve, reject) => { data.forEach((element, index) => { element.id = !delFlag ? `${index + data.length}` : `${index}` }) DB.clearTable(tableName).then((res) => { const columns = Object.keys(data[0]).join(', '); const values = data .map((item) => { const rowValues = Object.values(item) .map((value: string | number) => (typeof value === 'string' ? `'${value}'` : value)) return `(${rowValues})`; }) .join(', '); let INSERT_SQL = "INSERT INTO " + tableName + " (" + columns + ") VALUES " + values DB.executeSql(INSERT_SQL).then(() => { console.log('sql insert,', res, 'tableName', tableName) resolve(true) }).catch((err: BusinessError) => { console.log('sql insert err,', JSON.stringify(err), 'tableName', tableName) reject(err) }) }) }) } // 参数平台 // TODO 后续废弃这个方法,直接调用SqlInsertTable // 依据数组和表名更新sql表 export function UpdateTableByArray(tableName: string, arr: Array): Promise { return SqlInsertTable(tableName, arr) } //依据表名同步获取数据 export async function GetSyncData(tableName: string): Promise { return new Promise((resolve, reject) => { const columns: ColumnInfo[] = ParameterPlatform.get(tableName).columns.map((res: string) => { return { name: res, columnName: res, type: ColumnType.STRING } as ColumnInfo }); DB.queryListBySql(`select * from ${tableName}`, columns).then((res: T[]) => { resolve(res); }).catch((err: BusinessError) => { reject(err); }); }); } // TODO 后续废弃这个方法,直接调用DB.deleteByName // 删除表 export async function DeleteSyncTable(tableName: string): Promise { return new Promise((resolve, reject) => { DB.deleteByName(tableName).then(() => { resolve(true) }).catch(() => { reject(false) }) }) } // 初始化中心表 export async function InitializeTheCentralTable(params: InitializeTheCentralTableType): Promise { return new Promise(async (resolve, reject) => { const fileUtil = new FileUtils(params.context) let flag = false // 单机模式 if (params.singlePlay) { 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`); flag = await SqlInsertTable(tableList[i], JSON.parse(data) || []) } if (!flag) { Prompt.showToast({ message: '本地文件初始化数据库失败' }) } resolve(flag) } // 非单机模式 if (params.carId) { resolve(false) } const str: InitializeTheCentralTableType = { carId: params?.carId, examinationRoomId: params.examinationRoomId, videoVersion: '1.0', judgeVersion: params.judgeVersion, shellVersion: params.shellVersion, host: params.host } const res: ResponseDataType = await initialization(str) if (!res || res.initializationRsp.head.resultCode == "1") { resolve(false) } for (const key of Object.keys(res.initializationRsp.body)) { if (CenterMap[key]) { continue } // TODO 后续替换类型 let arrList: ESObject[] = [] if (res.initializationRsp.body[key] instanceof Array) { arrList = res.initializationRsp.body[key] } else { arrList.push(res.initializationRsp.body[key]) } const folderPath = await fileUtil.initFolder(`/config/tableList`); fileUtil.addFile(`${folderPath}/${RemappingTableName.get(key)}.txt`, JSON.stringify(arrList)) try { const result = await SqlInsertTable(RemappingTableName.get(key), arrList) if (!result) { Prompt.showToast({ message: '初始化数据库失败' }) } resolve(result) } catch (e) { reject(e) } } }) }