Compare commits
4 Commits
b1264c19e8
...
284de0a0e3
| Author | SHA1 | Date | |
|---|---|---|---|
| 284de0a0e3 | |||
| 313998c531 | |||
| ce1fc28f3d | |||
| ab9d50f47e |
@ -136,7 +136,7 @@ export async function uploadExamProgressData(params: UploadExamProgressDataParam
|
|||||||
if (singlePlay) {
|
if (singlePlay) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
return request({
|
return request<object>({
|
||||||
url: '/der2/services/exam/uploadExamDataFile.ws',
|
url: '/der2/services/exam/uploadExamDataFile.ws',
|
||||||
data: `<?xml version="1.0" encoding="UTF-8"?>
|
data: `<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<uploadExamDataFileReq>
|
<uploadExamDataFileReq>
|
||||||
|
|||||||
@ -108,7 +108,7 @@ interface GetPhotosForOtherParams {
|
|||||||
|
|
||||||
//参数下发读表接口
|
//参数下发读表接口
|
||||||
export async function getPhotosForOther(params: GetPhotosForOtherParams) {
|
export async function getPhotosForOther(params: GetPhotosForOtherParams) {
|
||||||
return request({
|
return request<object>({
|
||||||
url: '/der2/services/third/getPhotosForOther.ws',
|
url: '/der2/services/third/getPhotosForOther.ws',
|
||||||
data: `<?xml version="1.0" encoding="utf-8"?><getBmzpReq><head><time>${params.time}</time></head><body><sfzmhm>${params.sfzmhm}</sfzmhm><kskm>2</kskm><zptype>${params.zptype}</zptype><ksrq>${params.ksrq}</ksrq></body></getBmzpReq>`,
|
data: `<?xml version="1.0" encoding="utf-8"?><getBmzpReq><head><time>${params.time}</time></head><body><sfzmhm>${params.sfzmhm}</sfzmhm><kskm>2</kskm><zptype>${params.zptype}</zptype><ksrq>${params.ksrq}</ksrq></body></getBmzpReq>`,
|
||||||
method: http.RequestMethod.POST,
|
method: http.RequestMethod.POST,
|
||||||
@ -118,7 +118,7 @@ export async function getPhotosForOther(params: GetPhotosForOtherParams) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export async function setVideoText() {
|
export async function setVideoText() {
|
||||||
return request({
|
return request<object>({
|
||||||
url: 'http://admin:12345qwe@192.168.36.94/PSIA/Custom/SelfExt/OSD/channels/2/textOverlay',
|
url: 'http://admin:12345qwe@192.168.36.94/PSIA/Custom/SelfExt/OSD/channels/2/textOverlay',
|
||||||
data: `<?xml version="1.0" encoding="UTF-8" ?>
|
data: `<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
<TextOverlayList><TextOverlay><id>1</id><enabled>true</enabled><positionX>0</positionX><positionY>0</positionY><displayText>1222</displayText></TextOverlay><TextOverlay><id>2</id><enabled>true</enabled><positionX>0</positionX><positionY>0</positionY><displayText>2222</displayText></TextOverlay><TextOverlay><id>3</id><enabled>false</enabled><positionX>0</positionX><positionY>0</positionY><displayText></displayText></TextOverlay><TextOverlay><id>4</id><enabled>false</enabled><positionX>0</positionX><positionY>0</positionY><displayText></displayText></TextOverlay><TextOverlay><id>5</id><enabled>false</enabled><positionX>0</positionX><positionY>0</positionY><displayText></displayText></TextOverlay><TextOverlay><id>6</id><enabled>false</enabled><positionX>0</positionX><positionY>0</positionY><displayText></displayText></TextOverlay><TextOverlay><id>7</id><enabled>false</enabled><positionX>0</positionX><positionY>0</positionY><displayText></displayText></TextOverlay><TextOverlay><id>8</id><enabled>false</enabled><positionX>0</positionX><positionY>0</positionY><displayText></displayText></TextOverlay></TextOverlayList>`,
|
<TextOverlayList><TextOverlay><id>1</id><enabled>true</enabled><positionX>0</positionX><positionY>0</positionY><displayText>1222</displayText></TextOverlay><TextOverlay><id>2</id><enabled>true</enabled><positionX>0</positionX><positionY>0</positionY><displayText>2222</displayText></TextOverlay><TextOverlay><id>3</id><enabled>false</enabled><positionX>0</positionX><positionY>0</positionY><displayText></displayText></TextOverlay><TextOverlay><id>4</id><enabled>false</enabled><positionX>0</positionX><positionY>0</positionY><displayText></displayText></TextOverlay><TextOverlay><id>5</id><enabled>false</enabled><positionX>0</positionX><positionY>0</positionY><displayText></displayText></TextOverlay><TextOverlay><id>6</id><enabled>false</enabled><positionX>0</positionX><positionY>0</positionY><displayText></displayText></TextOverlay><TextOverlay><id>7</id><enabled>false</enabled><positionX>0</positionX><positionY>0</positionY><displayText></displayText></TextOverlay><TextOverlay><id>8</id><enabled>false</enabled><positionX>0</positionX><positionY>0</positionY><displayText></displayText></TextOverlay></TextOverlayList>`,
|
||||||
|
|||||||
@ -9,7 +9,6 @@ import DB from '../utils/DbSql';
|
|||||||
import { DrivingDataStorage } from '../utils/business/DrivingDataStorage';
|
import { DrivingDataStorage } from '../utils/business/DrivingDataStorage';
|
||||||
import { InitTable } from '../utils/table/Operation';
|
import { InitTable } from '../utils/table/Operation';
|
||||||
import FileUtils from '../utils/FileUtils';
|
import FileUtils from '../utils/FileUtils';
|
||||||
import { lightUDPClient } from '../utils/UdpUtils';
|
|
||||||
|
|
||||||
export default class EntryAbility extends UIAbility {
|
export default class EntryAbility extends UIAbility {
|
||||||
async onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
|
async onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
|
||||||
@ -33,7 +32,7 @@ export default class EntryAbility extends UIAbility {
|
|||||||
onDestroy() {
|
onDestroy() {
|
||||||
const arrClose = [0x55, 0xaa, 0x01, 0x00, 0x02, 0x00, 0x03, 0x00]
|
const arrClose = [0x55, 0xaa, 0x01, 0x00, 0x02, 0x00, 0x03, 0x00]
|
||||||
// TODO UDP缺失
|
// TODO UDP缺失
|
||||||
lightUDPClient.sendMsg(new Uint8Array(arrClose).buffer)
|
// lightUDPClient.sendMsg(new Uint8Array(arrClose).buffer)
|
||||||
DrivingDataStorage.close()
|
DrivingDataStorage.close()
|
||||||
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onDestroy');
|
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onDestroy');
|
||||||
}
|
}
|
||||||
|
|||||||
@ -34,10 +34,10 @@ export interface AmplifyItem {
|
|||||||
|
|
||||||
/** UDP 通信参数 */
|
/** UDP 通信参数 */
|
||||||
export interface UDPParamType {
|
export interface UDPParamType {
|
||||||
id?: number;
|
id: number;
|
||||||
list?: number[];
|
list: number[];
|
||||||
carNo?: string;
|
carNo: string;
|
||||||
placeId?: string;
|
placeId: string;
|
||||||
sendCallback?: () => void;
|
sendCallback?: () => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -74,11 +74,11 @@ export function ArrayToByteArray(array: number[]): Uint8Array {
|
|||||||
* @param len 字节数
|
* @param len 字节数
|
||||||
* @returns 返回字节数组
|
* @returns 返回字节数组
|
||||||
*/
|
*/
|
||||||
export function NumberToByteArray(number: number, len: number): number[] | undefined {
|
export function NumberToByteArray(number: number, len: number): number[] {
|
||||||
let str = Math.floor(number).toString(2);
|
let str = Math.floor(number).toString(2);
|
||||||
if (str.length > len) {
|
if (str.length > len) {
|
||||||
console.log('数据长度不对~~');
|
console.log('数据长度不对~~');
|
||||||
return;
|
return [];
|
||||||
}
|
}
|
||||||
const byteString = FillZero(str, len);
|
const byteString = FillZero(str, len);
|
||||||
|
|
||||||
|
|||||||
@ -35,6 +35,10 @@ function xmlToJSON(target: string): object {
|
|||||||
return transfer(result['_elements'])
|
return transfer(result['_elements'])
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function setObj(target: Record<string, object>, key: string, value: object) {
|
||||||
|
target[key] = value
|
||||||
|
}
|
||||||
|
|
||||||
function transfer(target: Array<object>, name?: string): object {
|
function transfer(target: Array<object>, name?: string): object {
|
||||||
const result: object = new Object()
|
const result: object = new Object()
|
||||||
|
|
||||||
@ -44,7 +48,7 @@ function transfer(target: Array<object>, name?: string): object {
|
|||||||
if (_elements === undefined) {
|
if (_elements === undefined) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
const jsonObj: object = result[el['_name']]
|
const jsonObj: Record<string, object> = result[el['_name']] as Record<string, object>
|
||||||
const handleCommonArray = (obj: object) => {
|
const handleCommonArray = (obj: object) => {
|
||||||
if (Array.isArray(jsonObj)) {
|
if (Array.isArray(jsonObj)) {
|
||||||
result[el['_name']].push(obj)
|
result[el['_name']].push(obj)
|
||||||
@ -57,16 +61,18 @@ function transfer(target: Array<object>, name?: string): object {
|
|||||||
if (jsonObj) {
|
if (jsonObj) {
|
||||||
handleCommonArray(_elements[0]['_text'])
|
handleCommonArray(_elements[0]['_text'])
|
||||||
} else {
|
} else {
|
||||||
jsonObj[el['_name']] = _elements[0]["_text"]
|
setObj(jsonObj, el['_name'], _elements[0]["_text"])
|
||||||
|
// jsonObj[el['_name'] as string] = _elements[0]["_text"] as object
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (jsonObj) {
|
if (jsonObj) {
|
||||||
handleCommonArray(transfer(el['_elements'], el['_name']))
|
handleCommonArray(transfer(el['_elements'], el['_name']))
|
||||||
} else {
|
} else {
|
||||||
jsonObj[el['_name']] = transfer(el['_elements'], el['_name'])
|
setObj(jsonObj, el['_name'], transfer(el['_elements'], el['_name']))
|
||||||
|
// jsonObj[el['_name'] as string] = transfer(el['_elements'], el['_name'])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (el['_attributes']) {
|
} else if (el['_attributes'] && name) {
|
||||||
result[name] = {
|
result[name] = {
|
||||||
value: el['_text'],
|
value: el['_text'],
|
||||||
attributes: el['__attributes']
|
attributes: el['__attributes']
|
||||||
@ -82,7 +88,7 @@ interface CenterCodeResult {
|
|||||||
keystr?: string
|
keystr?: string
|
||||||
}
|
}
|
||||||
|
|
||||||
function dealCenterCode(message: string, isNewCenter: boolean): CenterCodeResult {
|
function dealCenterCode(message: string, isNewCenter: boolean = false): CenterCodeResult | undefined {
|
||||||
if (isNewCenter) {
|
if (isNewCenter) {
|
||||||
const msg: object = JSON.parse(message);
|
const msg: object = JSON.parse(message);
|
||||||
const result: object = msg?.['data'][0]?.result;
|
const result: object = msg?.['data'][0]?.result;
|
||||||
@ -107,9 +113,12 @@ function dealCenterCode(message: string, isNewCenter: boolean): CenterCodeResult
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return undefined
|
||||||
}
|
}
|
||||||
|
|
||||||
export default function Request<T = object>(options: RequestOption): Promise<T> {
|
type RequestResult = Object | object | string | CenterCodeResult
|
||||||
|
|
||||||
|
export default function Request<T extends RequestResult>(options: RequestOption): Promise<T> {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
const instance = http.createHttp()
|
const instance = http.createHttp()
|
||||||
const baseURL = options.host || base
|
const baseURL = options.host || base
|
||||||
@ -123,11 +132,11 @@ export default function Request<T = object>(options: RequestOption): Promise<T>
|
|||||||
readTimeout: options.timeout || 30 * 1000
|
readTimeout: options.timeout || 30 * 1000
|
||||||
}).then(async data => {
|
}).then(async data => {
|
||||||
let result = options.xml ? xmlToJSON(data.result as string) : data.result
|
let result = options.xml ? xmlToJSON(data.result as string) : data.result
|
||||||
let resObj: object
|
let resObj: object = new Object()
|
||||||
if (typeof result === 'string') {
|
if (typeof result === 'string') {
|
||||||
result = JSON.parse(result)
|
result = JSON.parse(result)
|
||||||
}
|
}
|
||||||
if (result['Envelope']) {
|
if (result['Envelope'] !== undefined) {
|
||||||
const msgXml: string = result['Envelope']['Body']['writeObjectOutResponse']['return'];
|
const msgXml: string = result['Envelope']['Body']['writeObjectOutResponse']['return'];
|
||||||
resolve(dealCenterCode(msgXml, options.isNewCenter) as T)
|
resolve(dealCenterCode(msgXml, options.isNewCenter) as T)
|
||||||
return
|
return
|
||||||
|
|||||||
@ -4,6 +4,7 @@ import { CarInfoType, EnvironmentConfigurationType } from '../model'
|
|||||||
import { UDPTag } from '../config'
|
import { UDPTag } from '../config'
|
||||||
import { BusinessError } from '@ohos.base'
|
import { BusinessError } from '@ohos.base'
|
||||||
import { FillZero, StringToBytes, StringToASCII } from './Common'
|
import { FillZero, StringToBytes, StringToASCII } from './Common'
|
||||||
|
import { CenterUDPClientInstance } from './business/CenterUdpBusiness'
|
||||||
|
|
||||||
interface MsgExt {
|
interface MsgExt {
|
||||||
id: number,
|
id: number,
|
||||||
@ -36,19 +37,19 @@ export default class UdpClient {
|
|||||||
private localIpPort: string = ''
|
private localIpPort: string = ''
|
||||||
private oppositeIp: string = ''
|
private oppositeIp: string = ''
|
||||||
private oppositeIpPort: string = ''
|
private oppositeIpPort: string = ''
|
||||||
protected udp: socket.UDPSocket = null
|
protected udp: socket.UDPSocket | null = null
|
||||||
private messageEvents: Array<Function> = []
|
private messageEvents: Array<Function> = []
|
||||||
private errorEvents: Array<Function> = []
|
private errorEvents: Array<Function> = []
|
||||||
private dealMethod: DealMethod<object>
|
private dealMethod?: DealMethod<object>
|
||||||
|
|
||||||
private bindEvent() {
|
private bindEvent() {
|
||||||
this.udp?.on("message", value => {
|
this.udp?.on("message", value => {
|
||||||
let result = this.dealMethod(value.message)
|
let result = this.dealMethod?.(value.message)
|
||||||
this.messageEvents.forEach(cb => {
|
this.messageEvents.forEach(cb => {
|
||||||
cb(result)
|
cb(result)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
this.udp.on("error", (err) => {
|
this.udp?.on("error", (err) => {
|
||||||
console.log(UDPTag, 'udp error', JSON.stringify(err))
|
console.log(UDPTag, 'udp error', JSON.stringify(err))
|
||||||
this.errorEvents.forEach(cb => {
|
this.errorEvents.forEach(cb => {
|
||||||
cb(err)
|
cb(err)
|
||||||
@ -57,8 +58,8 @@ export default class UdpClient {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bindUdp(): Promise<void> {
|
bindUdp(): Promise<void> | undefined {
|
||||||
return this.udp.bind({
|
return this.udp?.bind({
|
||||||
address: this.localIp, port: parseInt(this.localIpPort), family: 1
|
address: this.localIp, port: parseInt(this.localIpPort), family: 1
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -70,10 +71,10 @@ export default class UdpClient {
|
|||||||
await this.bindUdp()
|
await this.bindUdp()
|
||||||
}
|
}
|
||||||
|
|
||||||
close(): Promise<void> {
|
close(): Promise<void> | undefined {
|
||||||
this.messageEvents = []
|
this.messageEvents = []
|
||||||
this.errorEvents = []
|
this.errorEvents = []
|
||||||
this.dealMethod = null
|
this.dealMethod = undefined
|
||||||
this.udp?.off("message")
|
this.udp?.off("message")
|
||||||
this.udp?.off("error")
|
this.udp?.off("error")
|
||||||
return this.udp?.close()
|
return this.udp?.close()
|
||||||
@ -83,8 +84,8 @@ export default class UdpClient {
|
|||||||
this.dealMethod = fun
|
this.dealMethod = fun
|
||||||
}
|
}
|
||||||
|
|
||||||
sendMsg(data: ArrayBuffer | string): Promise<void> {
|
sendMsg(data: ArrayBuffer | string): Promise<void> | undefined {
|
||||||
return this.udp.send({
|
return this.udp?.send({
|
||||||
data,
|
data,
|
||||||
address: {
|
address: {
|
||||||
address: this.oppositeIp, port: parseInt(this.oppositeIpPort), family: 1
|
address: this.oppositeIp, port: parseInt(this.oppositeIpPort), family: 1
|
||||||
@ -134,179 +135,3 @@ export default class UdpClient {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取后置机信号
|
|
||||||
class ObjUdpClient extends UdpClient {
|
|
||||||
private static instance: ObjUdpClient
|
|
||||||
|
|
||||||
constructor() {
|
|
||||||
super()
|
|
||||||
if (!ObjUdpClient.instance) {
|
|
||||||
ObjUdpClient.instance = this
|
|
||||||
}
|
|
||||||
return ObjUdpClient.instance
|
|
||||||
}
|
|
||||||
|
|
||||||
async init(): Promise<void> {
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
try {
|
|
||||||
let result: EnvironmentConfigurationType =
|
|
||||||
AppStorage.get<EnvironmentConfigurationType>("EnvironmentConfiguration")
|
|
||||||
if (result) {
|
|
||||||
this.create(result.udplocalIp, result.udplocalIpPort, result.udpOppositeIp, result.udpOppositeIpPort)
|
|
||||||
.then(resolve)
|
|
||||||
.catch(reject)
|
|
||||||
}
|
|
||||||
} catch (e) {
|
|
||||||
promptAction.showToast({
|
|
||||||
message: "初始化obj udp失败"
|
|
||||||
})
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 中心
|
|
||||||
class CenterUDPClient extends UdpClient {
|
|
||||||
private static instance: CenterUDPClient
|
|
||||||
|
|
||||||
constructor() {
|
|
||||||
super()
|
|
||||||
if (!CenterUDPClient.instance) {
|
|
||||||
CenterUDPClient.instance = this
|
|
||||||
}
|
|
||||||
return CenterUDPClient.instance
|
|
||||||
}
|
|
||||||
|
|
||||||
async init(): Promise<void> {
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
try {
|
|
||||||
let result: EnvironmentConfigurationType =
|
|
||||||
AppStorage.get<EnvironmentConfigurationType>("EnvironmentConfiguration")
|
|
||||||
const carInfo: CarInfoType = AppStorage.get<CarInfoType>('carInfo')
|
|
||||||
if (result) {
|
|
||||||
this.create(result.udplocalIp, '8800', carInfo?.udpAddress, carInfo?.messagePort).then(resolve).catch(reject)
|
|
||||||
}
|
|
||||||
} catch (e) {
|
|
||||||
reject(e)
|
|
||||||
promptAction.showToast({
|
|
||||||
message: "初始化中心 udp失败"
|
|
||||||
})
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 顶灯
|
|
||||||
class LightUDPClient extends UdpClient {
|
|
||||||
private static instance: LightUDPClient
|
|
||||||
|
|
||||||
constructor() {
|
|
||||||
super()
|
|
||||||
if (!LightUDPClient.instance) {
|
|
||||||
LightUDPClient.instance = this
|
|
||||||
}
|
|
||||||
return LightUDPClient.instance
|
|
||||||
}
|
|
||||||
|
|
||||||
async init(): Promise<void> {
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
try {
|
|
||||||
let result: EnvironmentConfigurationType =
|
|
||||||
AppStorage.get<EnvironmentConfigurationType>("EnvironmentConfiguration")
|
|
||||||
if (result) {
|
|
||||||
this.create(result.udplocalIp, '55509', result.udpOppositeIp, result.udpOppositeIpPort)
|
|
||||||
.then(resolve)
|
|
||||||
.catch(reject)
|
|
||||||
}
|
|
||||||
} catch (e) {
|
|
||||||
reject(e)
|
|
||||||
promptAction.showToast({
|
|
||||||
message: "初始化灯光 udp失败"
|
|
||||||
})
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 评判udp
|
|
||||||
class JudgeUdpClient extends UdpClient {
|
|
||||||
private udpIndex = 0;
|
|
||||||
private currentUdpIndex = 0;
|
|
||||||
private static instance: JudgeUdpClient
|
|
||||||
|
|
||||||
constructor() {
|
|
||||||
super()
|
|
||||||
if (!JudgeUdpClient.instance) {
|
|
||||||
JudgeUdpClient.instance = this
|
|
||||||
}
|
|
||||||
return JudgeUdpClient.instance
|
|
||||||
}
|
|
||||||
|
|
||||||
async init(): Promise<void> {
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
try {
|
|
||||||
let result: EnvironmentConfigurationType =
|
|
||||||
AppStorage.get<EnvironmentConfigurationType>("EnvironmentConfiguration")
|
|
||||||
const carInfo: CarInfoType = AppStorage.get<CarInfoType>('carInfo')
|
|
||||||
if (result) {
|
|
||||||
this.create(result.udplocalIp, '8080', carInfo.udpAddress, carInfo.hintPort).then(resolve).catch(reject)
|
|
||||||
setInterval(() => {
|
|
||||||
this.udpIndex += 1
|
|
||||||
}, 1000)
|
|
||||||
}
|
|
||||||
} catch (e) {
|
|
||||||
reject(e)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
send(bytes: number[]) {
|
|
||||||
const carInfo: CarInfoType = AppStorage.get<CarInfoType>('carInfo')
|
|
||||||
if (this.udpIndex > this.currentUdpIndex) {
|
|
||||||
this.sendMsgExt({
|
|
||||||
id: 45,
|
|
||||||
list: bytes,
|
|
||||||
carNo: carInfo.carNo,
|
|
||||||
placeId: carInfo.examinationRoomId
|
|
||||||
})
|
|
||||||
this.currentUdpIndex = this.udpIndex
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//申请远程扣分查询
|
|
||||||
askKf(directives: number) {
|
|
||||||
const carInfo: CarInfoType = AppStorage.get<CarInfoType>('carInfo')
|
|
||||||
centerUDPClient.sendMsgExt({
|
|
||||||
id: 35,
|
|
||||||
list: [directives],
|
|
||||||
carNo: carInfo.carNo,
|
|
||||||
placeId: carInfo.examinationRoomId,
|
|
||||||
})
|
|
||||||
console.info('surenjun', `考车查询扣分项目内容,请求指令为:${directives}`)
|
|
||||||
}
|
|
||||||
|
|
||||||
//确定远程扣分
|
|
||||||
confirmKf(directives: number, code: number) {
|
|
||||||
const carInfo: CarInfoType = AppStorage.get<CarInfoType>('carInfo')
|
|
||||||
centerUDPClient.sendMsgExt({
|
|
||||||
id: 37,
|
|
||||||
list: [directives, code],
|
|
||||||
carNo: carInfo.carNo,
|
|
||||||
placeId: carInfo.examinationRoomId
|
|
||||||
})
|
|
||||||
console.info('surenjun', `考车发送确定扣分指令,指令为:${directives}`)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// obj
|
|
||||||
export const objUDPClient = new ObjUdpClient()
|
|
||||||
|
|
||||||
// 中心
|
|
||||||
export const centerUDPClient = new CenterUDPClient()
|
|
||||||
|
|
||||||
// 灯光
|
|
||||||
export const lightUDPClient = new LightUDPClient()
|
|
||||||
|
|
||||||
// 评判
|
|
||||||
export const judgeUDPClient = new JudgeUdpClient()
|
|
||||||
|
|||||||
@ -8,13 +8,13 @@ import { UDPTag } from '../../config';
|
|||||||
// 中心UDP业务逻辑
|
// 中心UDP业务逻辑
|
||||||
class CenterUDPBusiness {
|
class CenterUDPBusiness {
|
||||||
private static instance: CenterUDPBusiness
|
private static instance: CenterUDPBusiness
|
||||||
private udp: UdpClient
|
private udp: UdpClient = new UdpClient()
|
||||||
private timer: number = -1
|
private timer: number = -1
|
||||||
private headLength: number = 9
|
private headLength: number = 9
|
||||||
private sendId: number = 0
|
private sendId: number = 0
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
if (!CenterUDPBusiness.instance) {
|
if (CenterUDPBusiness.instance) {
|
||||||
CenterUDPBusiness.instance = this
|
CenterUDPBusiness.instance = this
|
||||||
}
|
}
|
||||||
return CenterUDPBusiness.instance
|
return CenterUDPBusiness.instance
|
||||||
@ -45,14 +45,19 @@ class CenterUDPBusiness {
|
|||||||
let headJudge = this.setMessageExclusive(head);
|
let headJudge = this.setMessageExclusive(head);
|
||||||
let bodyJudge = this.setMessageExclusive(params.list);
|
let bodyJudge = this.setMessageExclusive(params.list);
|
||||||
let end = [13, 10];
|
let end = [13, 10];
|
||||||
const arr: Array<number> = [...head, ...headJudge, ...params.list, ...bodyJudge, ...end]
|
const arr: number[] = []
|
||||||
|
head.forEach(item => arr.push(item))
|
||||||
|
headJudge.forEach(item => arr.push(item))
|
||||||
|
params.list?.forEach(item => arr.push(item))
|
||||||
|
bodyJudge.forEach(item => arr.push(item))
|
||||||
|
end.forEach(item => arr.push(item))
|
||||||
return this.array2Byte(arr).buffer
|
return this.array2Byte(arr).buffer
|
||||||
}
|
}
|
||||||
|
|
||||||
private array2Byte(array: Array<number>) {
|
private array2Byte(array: Array<number>) {
|
||||||
const buf = new ArrayBuffer(array.length);
|
const buf = new ArrayBuffer(array.length);
|
||||||
const view = new Uint8Array(buf);
|
const view = new Uint8Array(buf);
|
||||||
for (let i = 0; i != array.length; ++i) {
|
for (let i = 0; i = array.length; ++i) {
|
||||||
view[i] = array[i] & 0xFF;
|
view[i] = array[i] & 0xFF;
|
||||||
}
|
}
|
||||||
return view;
|
return view;
|
||||||
@ -62,7 +67,11 @@ class CenterUDPBusiness {
|
|||||||
let a = string2Bytes(Number(`${params.id}${fillZero(params.placeId, 3)}`), 2 * 8);
|
let a = string2Bytes(Number(`${params.id}${fillZero(params.placeId, 3)}`), 2 * 8);
|
||||||
let b = string2Bytes(Number(`${fillZero(params.carNo, 4)}${AppStorage.get('lshNo')}`), 4 * 8);
|
let b = string2Bytes(Number(`${fillZero(params.carNo, 4)}${AppStorage.get('lshNo')}`), 4 * 8);
|
||||||
let c = string2Bytes(params.list.length, 2 * 8);
|
let c = string2Bytes(params.list.length, 2 * 8);
|
||||||
return [...a, ...b, ...c];
|
let result: number[] = []
|
||||||
|
a?.forEach(item => result.push(item))
|
||||||
|
b?.forEach(item => result.push(item))
|
||||||
|
c?.forEach(item => result.push(item))
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
private setMessageExclusive(tmpList: Array<number>) {
|
private setMessageExclusive(tmpList: Array<number>) {
|
||||||
@ -93,12 +102,12 @@ class CenterUDPBusiness {
|
|||||||
for (let i = 0; i < str.length; i++) {
|
for (let i = 0; i < str.length; i++) {
|
||||||
tmpList.push(NumberToByteArray(str.charCodeAt(i), 1 * 8)[0])
|
tmpList.push(NumberToByteArray(str.charCodeAt(i), 1 * 8)[0])
|
||||||
}
|
}
|
||||||
const carInfo = AppStorage.get<CarInfoType>('carInfo')
|
const carInfo = AppStorage.get<CarInfoType>('carInfo')!
|
||||||
const data: UDPParamType = {
|
const data: UDPParamType = {
|
||||||
id: 31,
|
id: 31,
|
||||||
list: tmpList,
|
list: tmpList,
|
||||||
carNo: carInfo.carNo,
|
carNo: carInfo.carNo!,
|
||||||
placeId: carInfo.examinationRoomId
|
placeId: carInfo.examinationRoomId!
|
||||||
}
|
}
|
||||||
const param = this.setWholeMsg(data)
|
const param = this.setWholeMsg(data)
|
||||||
this.udp.sendMsg(param);
|
this.udp.sendMsg(param);
|
||||||
@ -117,9 +126,9 @@ class CenterUDPBusiness {
|
|||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
try {
|
try {
|
||||||
let result: EnvironmentConfigurationType =
|
let result: EnvironmentConfigurationType =
|
||||||
AppStorage.get<EnvironmentConfigurationType>("EnvironmentConfiguration")
|
AppStorage.get<EnvironmentConfigurationType>("EnvironmentConfiguration")!
|
||||||
const carInfo: CarInfoType = AppStorage.get<CarInfoType>('carInfo')
|
const carInfo: CarInfoType = AppStorage.get<CarInfoType>('carInfo')!
|
||||||
this.udp.create(result.udplocalIp, '8800', carInfo?.udpAddress, carInfo?.messagePort)
|
this.udp.create(result.udplocalIp!, '8800', carInfo.udpAddress!, carInfo.messagePort!)
|
||||||
.then(resolve)
|
.then(resolve)
|
||||||
.catch(reject)
|
.catch(reject)
|
||||||
this.udp.setDealMethod(this.dealMsg)
|
this.udp.setDealMethod(this.dealMsg)
|
||||||
|
|||||||
@ -24,7 +24,7 @@ class drivingDataStorage {
|
|||||||
this.totalTime = 0;
|
this.totalTime = 0;
|
||||||
this.fd = await this.fileUtil!.editFile(
|
this.fd = await this.fileUtil!.editFile(
|
||||||
`${folderPath}/${this.date}.txt`,
|
`${folderPath}/${this.date}.txt`,
|
||||||
`程序启动时间:${this.time} 累计行驶距离:${this.totalDistance}m 累计运行时常:${this.totalTime}min`)
|
`程序启动时间:${this.time} 累计行驶距离:${this.totalDistance}m 累计运行时常:${this.totalTime}min`)!
|
||||||
return folderPath
|
return folderPath
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -28,7 +28,7 @@ function string2Bytes(num: number | string, len: number) {
|
|||||||
let str = (Math.floor(Number(num))).toString(2);
|
let str = (Math.floor(Number(num))).toString(2);
|
||||||
if (str.length > len) {
|
if (str.length > len) {
|
||||||
console.log('数据长度不对~~');
|
console.log('数据长度不对~~');
|
||||||
return
|
return []
|
||||||
}
|
}
|
||||||
let byteString = FillZero(str, len);
|
let byteString = FillZero(str, len);
|
||||||
|
|
||||||
@ -48,7 +48,7 @@ function string2Bytes(num: number | string, len: number) {
|
|||||||
|
|
||||||
class JudgeUdpBusiness {
|
class JudgeUdpBusiness {
|
||||||
private static instance: JudgeUdpBusiness
|
private static instance: JudgeUdpBusiness
|
||||||
private udp: UdpClient
|
private udp: UdpClient = new UdpClient()
|
||||||
private currentUdpIndex = 0;
|
private currentUdpIndex = 0;
|
||||||
public udpIndex = 0;
|
public udpIndex = 0;
|
||||||
|
|
||||||
@ -81,7 +81,11 @@ class JudgeUdpBusiness {
|
|||||||
let a = string2Bytes(Number(`${params.id}${fillZero(params.placeId, 3)}`), 2 * 8);
|
let a = string2Bytes(Number(`${params.id}${fillZero(params.placeId, 3)}`), 2 * 8);
|
||||||
let b = string2Bytes(Number(`${fillZero(params.carNo, 4)}${AppStorage.get('lshNo')}`), 4 * 8);
|
let b = string2Bytes(Number(`${fillZero(params.carNo, 4)}${AppStorage.get('lshNo')}`), 4 * 8);
|
||||||
let c = string2Bytes(params.list.length, 2 * 8);
|
let c = string2Bytes(params.list.length, 2 * 8);
|
||||||
return [...a, ...b, ...c];
|
let result: number[] = []
|
||||||
|
a?.forEach(item => result.push(item))
|
||||||
|
b?.forEach(item => result.push(item))
|
||||||
|
c?.forEach(item => result.push(item))
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
private setMessageExclusive(tmpList: Array<number>) {
|
private setMessageExclusive(tmpList: Array<number>) {
|
||||||
@ -231,7 +235,7 @@ class JudgeUdpBusiness {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async getMessageHeartbeat(msg: string): Promise<number[]> {
|
async getMessageHeartbeat(msg: string): Promise<number[]> {
|
||||||
const carInfo: CarInfoType = AppStorage.get<CarInfoType>('carInfo')
|
const carInfo: CarInfoType = AppStorage.get<CarInfoType>('carInfo')!
|
||||||
let gpsDigit = JudgeConfig.fourInOneScreen.gpsDigit
|
let gpsDigit = JudgeConfig.fourInOneScreen.gpsDigit
|
||||||
const asclshArr = StringToASCII(FillZero(
|
const asclshArr = StringToASCII(FillZero(
|
||||||
AppStorage.get<boolean>("singlePlay")
|
AppStorage.get<boolean>("singlePlay")
|
||||||
@ -240,7 +244,7 @@ class JudgeUdpBusiness {
|
|||||||
13));
|
13));
|
||||||
const ascksyhArr = StringToASCII(carInfo.examSubject === '2' ? '0000000000000' : '1111111111111')
|
const ascksyhArr = StringToASCII(carInfo.examSubject === '2' ? '0000000000000' : '1111111111111')
|
||||||
const ascsbxhArr = StringToASCII('00000000')
|
const ascsbxhArr = StringToASCII('00000000')
|
||||||
const serialIndex = AppStorage.get<number>("serialIndex")
|
const serialIndex = AppStorage.get<number>("serialIndex")!
|
||||||
const plcData = await this.getPlcData(msg);
|
const plcData = await this.getPlcData(msg);
|
||||||
let param: number[] = Object.entries(plcData.sensor)
|
let param: number[] = Object.entries(plcData.sensor)
|
||||||
.filter((item: [string, number]) => {
|
.filter((item: [string, number]) => {
|
||||||
@ -328,13 +332,13 @@ class JudgeUdpBusiness {
|
|||||||
}
|
}
|
||||||
|
|
||||||
sendData(bytes: number[]) {
|
sendData(bytes: number[]) {
|
||||||
const carInfo: CarInfoType = AppStorage.get<CarInfoType>('carInfo')
|
const carInfo: CarInfoType = AppStorage.get<CarInfoType>('carInfo')!
|
||||||
if (this.udpIndex > this.currentUdpIndex) {
|
if (this.udpIndex > this.currentUdpIndex) {
|
||||||
this.udp.sendMsgExt({
|
this.udp.sendMsgExt({
|
||||||
id: 45,
|
id: 45,
|
||||||
list: bytes,
|
list: bytes,
|
||||||
carNo: carInfo.carNo,
|
carNo: carInfo.carNo!,
|
||||||
placeId: carInfo.examinationRoomId
|
placeId: carInfo.examinationRoomId!
|
||||||
})
|
})
|
||||||
this.currentUdpIndex = this.udpIndex
|
this.currentUdpIndex = this.udpIndex
|
||||||
}
|
}
|
||||||
@ -342,24 +346,24 @@ class JudgeUdpBusiness {
|
|||||||
|
|
||||||
//申请远程扣分查询
|
//申请远程扣分查询
|
||||||
askKf(directives: number) {
|
askKf(directives: number) {
|
||||||
const carInfo: CarInfoType = AppStorage.get<CarInfoType>('carInfo')
|
const carInfo: CarInfoType = AppStorage.get<CarInfoType>('carInfo')!
|
||||||
CenterUDPClientInstance.sendData({
|
CenterUDPClientInstance.sendData({
|
||||||
id: 35,
|
id: 35,
|
||||||
list: [directives],
|
list: [directives],
|
||||||
carNo: carInfo.carNo,
|
carNo: carInfo.carNo!,
|
||||||
placeId: carInfo.examinationRoomId,
|
placeId: carInfo.examinationRoomId!,
|
||||||
})
|
})
|
||||||
console.info('surenjun', `考车查询扣分项目内容,请求指令为:${directives}`)
|
console.info('surenjun', `考车查询扣分项目内容,请求指令为:${directives}`)
|
||||||
}
|
}
|
||||||
|
|
||||||
//确定远程扣分
|
//确定远程扣分
|
||||||
confirmKf(directives: number, code: number) {
|
confirmKf(directives: number, code: number) {
|
||||||
const carInfo: CarInfoType = AppStorage.get<CarInfoType>('carInfo')
|
const carInfo: CarInfoType = AppStorage.get<CarInfoType>('carInfo')!
|
||||||
CenterUDPClientInstance.sendData({
|
CenterUDPClientInstance.sendData({
|
||||||
id: 37,
|
id: 37,
|
||||||
list: [directives, code],
|
list: [directives, code],
|
||||||
carNo: carInfo.carNo,
|
carNo: carInfo.carNo!,
|
||||||
placeId: carInfo.examinationRoomId
|
placeId: carInfo.examinationRoomId!
|
||||||
})
|
})
|
||||||
console.info('surenjun', `考车发送确定扣分指令,指令为:${directives}`)
|
console.info('surenjun', `考车发送确定扣分指令,指令为:${directives}`)
|
||||||
}
|
}
|
||||||
@ -368,9 +372,9 @@ class JudgeUdpBusiness {
|
|||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
try {
|
try {
|
||||||
let result: EnvironmentConfigurationType =
|
let result: EnvironmentConfigurationType =
|
||||||
AppStorage.get<EnvironmentConfigurationType>("EnvironmentConfiguration")
|
AppStorage.get<EnvironmentConfigurationType>("EnvironmentConfiguration")!
|
||||||
const carInfo: CarInfoType = AppStorage.get<CarInfoType>('carInfo')
|
const carInfo: CarInfoType = AppStorage.get<CarInfoType>('carInfo')!
|
||||||
this.udp.create(result.udplocalIp, '8080', carInfo.udpAddress, carInfo.hintPort).then(resolve).catch(reject)
|
this.udp.create(result.udplocalIp!, '8080', carInfo.udpAddress!, carInfo.hintPort!).then(resolve).catch(reject)
|
||||||
ObtainUdpBusinessInstance.onMsg(async (msg: string) => {
|
ObtainUdpBusinessInstance.onMsg(async (msg: string) => {
|
||||||
let prevJd = 0, preWd = 0
|
let prevJd = 0, preWd = 0
|
||||||
|
|
||||||
@ -378,8 +382,8 @@ class JudgeUdpBusiness {
|
|||||||
if (stashArr[0] != '#DN_GD') {
|
if (stashArr[0] != '#DN_GD') {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
const udpIndex = AppStorage.get<number>("udpIndex");
|
const udpIndex = AppStorage.get<number>("udpIndex")!;
|
||||||
const isJudge = AppStorage.get<boolean>("isJudge");
|
const isJudge = AppStorage.get<boolean>("isJudge")!;
|
||||||
if (udpIndex % 5 === 0 && !isJudge) {
|
if (udpIndex % 5 === 0 && !isJudge) {
|
||||||
const bytes = await this.getMessageHeartbeat(msg);
|
const bytes = await this.getMessageHeartbeat(msg);
|
||||||
const msgArr: string[] = msg.split(',');
|
const msgArr: string[] = msg.split(',');
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
import emitter from '@ohos.events.emitter';
|
import emitter from '@ohos.events.emitter';
|
||||||
import { judgeUDPClient } from '../UdpUtils';
|
import { JudgeUdpBusinessInstance } from './JudgeUdpBusiness';
|
||||||
|
|
||||||
enum EventId {
|
enum EventId {
|
||||||
//远程扣分处理
|
//远程扣分处理
|
||||||
@ -21,22 +21,22 @@ class JudgeEmitter {
|
|||||||
}
|
}
|
||||||
private kfContent: Function = () => {
|
private kfContent: Function = () => {
|
||||||
}
|
}
|
||||||
private directives: string
|
private directives: string = ''
|
||||||
|
|
||||||
//监听开始考试
|
//监听开始考试
|
||||||
public onBeginExam(callBack?: Function) {
|
public onBeginExam(callBack: Function) {
|
||||||
console.info('surenjun', '注册远程开始考试事件')
|
console.info('surenjun', '注册远程开始考试事件')
|
||||||
this.beginExamCallBack = callBack
|
this.beginExamCallBack = callBack
|
||||||
}
|
}
|
||||||
|
|
||||||
//监听结束考试
|
//监听结束考试
|
||||||
public onEndExam(callBack?: Function) {
|
public onEndExam(callBack: Function) {
|
||||||
console.info('surenjun', '注册远程结束考试事件')
|
console.info('surenjun', '注册远程结束考试事件')
|
||||||
this.endExamCallBack = callBack
|
this.endExamCallBack = callBack
|
||||||
}
|
}
|
||||||
|
|
||||||
//监听扣分处理
|
//监听扣分处理
|
||||||
public onKfExam(callBack?: Function) {
|
public onKfExam(callBack: Function) {
|
||||||
console.info('surenjun', '注册远程扣分考试事件')
|
console.info('surenjun', '注册远程扣分考试事件')
|
||||||
this.kfContent = callBack
|
this.kfContent = callBack
|
||||||
}
|
}
|
||||||
@ -80,7 +80,7 @@ class JudgeEmitter {
|
|||||||
//监听扣分指令
|
//监听扣分指令
|
||||||
public sendOnKf(directives: string) {
|
public sendOnKf(directives: string) {
|
||||||
this.directives = directives
|
this.directives = directives
|
||||||
judgeUDPClient.askKf(Number(directives))
|
JudgeUdpBusinessInstance.askKf(Number(directives))
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取扣分项目编号
|
// 获取扣分项目编号
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user