From c2a1a9d760c7980dd6f53280ff84fe97f87914f4 Mon Sep 17 00:00:00 2001 From: wangzhongjie Date: Fri, 28 Feb 2025 10:46:28 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=B5=8E=E5=8D=97=E5=90=8E=E7=BD=AE?= =?UTF-8?q?=E6=9C=BA=E6=96=B9=E6=A1=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- entry/build-profile.json5 | 5 + entry/src/main/ets/api/index.ts | 1 - entry/src/main/ets/api/judgeNew.ts | 189 ++++++++++-------- .../main/ets/common/service/videoService.ts | 26 +-- entry/src/main/ets/common/utils/File.ts | 6 +- .../ets/common/utils/UdpClientByCenter.ts | 30 +-- entry/src/main/ets/common/utils/new/tcp.ts | 88 +++++--- entry/src/main/ets/common/utils/request.ts | 2 +- entry/src/main/ets/common/utils/tools.ts | 91 ++++++--- entry/src/main/ets/model/SignDisplay.ets | 7 + entry/src/main/ets/pages/TerminalInfos.ets | 10 +- entry/src/main/ets/pages/UserInfo.ets | 10 +- .../ets/pages/compontents/SignDisplayCom.ets | 30 +-- .../src/main/ets/pages/compontents/judge.zip | Bin 11624 -> 0 bytes entry/src/main/ets/pages/judgeSDK/judge.ts | 8 +- 15 files changed, 310 insertions(+), 193 deletions(-) delete mode 100644 entry/src/main/ets/pages/compontents/judge.zip diff --git a/entry/build-profile.json5 b/entry/build-profile.json5 index 2160ea13..6cfa095d 100644 --- a/entry/build-profile.json5 +++ b/entry/build-profile.json5 @@ -2,6 +2,11 @@ "apiType": 'stageMode', "buildOption": { "externalNativeOptions": { + "abiFilters": [ + "arm64-v8a", + "armeabi-v7a", + "x86_64" + ], "path": "./src/main/cpp/CMakeLists.txt", "arguments": "", "cppFlags": "", diff --git a/entry/src/main/ets/api/index.ts b/entry/src/main/ets/api/index.ts index 254e201f..d7b4d752 100644 --- a/entry/src/main/ets/api/index.ts +++ b/entry/src/main/ets/api/index.ts @@ -1,4 +1,3 @@ -import { NewTcpClient, XmlToJson } from '../common/utils/new/tcp' import request from "../common/utils/request" import tempRequest from '../common/utils/tempRequest' diff --git a/entry/src/main/ets/api/judgeNew.ts b/entry/src/main/ets/api/judgeNew.ts index 7a733587..4e13d883 100644 --- a/entry/src/main/ets/api/judgeNew.ts +++ b/entry/src/main/ets/api/judgeNew.ts @@ -1,7 +1,8 @@ import { getSyncData } from '../common/service/initable'; import request from '../common/utils/request'; import FileUtil from '../common/utils/File'; -import { NewTcpClient, XmlToJson } from '../common/utils/new/tcp'; +import { HandleCenterCode, NewTcpClient, XmlToJson } from '../common/utils/new/tcp'; +import { PrintStr } from '../common/utils/tools'; let baseHost = globalThis.host; @@ -45,94 +46,122 @@ export default async function writeObjectOutNew(data, filePath): Promise { console.info('surenjun', '调用新监管') let temp try { - if (jkid === "17C51") { - temp = await request({ - host: globalThis.JGHOST, - method: 'post', - //是否是新中心 - isNewCenter: true, - xml: true, - url: '/dems_ws/services/TmriOutAccess?wsdl', - data: ` - - - - ${wglb} - ${jkxlh} - ${glbm} - ${jgbh} - ${sjbs} - ${JSON.stringify(params.data)} - ${JSON.stringify(params.file)} - - - `, - }) - } else { - let baseUrl = globalThis.JGHOST ? globalThis.JGHOST : globalThis.host - let key = new Date().getTime() - // 走后置机 - let data = { - url: `${baseUrl}/dems_ws/services/TmriOutAccess?wsdl`, - serialNumber: key, - type: 1, - method: "post", - isNewCenter: true, - data: ` - - - - ${wglb} - ${jkxlh} - ${glbm} - ${jgbh} - ${sjbs} - ${JSON.stringify(params.data)} - ${JSON.stringify(params.file)} - - - `, - contentType: 'text/xml', - isHeartBeat: "0", - } - NewTcpClient.sendMsg(`^#${JSON.stringify(data)}#$`) - NewTcpClient.onMessage((value) => { - console.log("zj value", value) - // 使用正则表达式提取^#和#$之间的JSON数据 - const jsonDataMatch = value.match(/\^#(.*?)#\$/); - if (jsonDataMatch && jsonDataMatch[1]) { - try { - const jsonData = JSON.parse(jsonDataMatch[1]); - if (Number(jsonData.serialNumber) === Number(key)) { - temp = XmlToJson(jsonData.data); - } - } catch (error) { - console.error("Failed to parse JSON data:", error); - } - } else { - console.log("No JSON data found between ^# and #$"); - } - }); - } + // if (jkid === "17C51") { + // temp = await request({ + // host: globalThis.JGHOST, + // method: 'post', + // //是否是新中心 + // isNewCenter: true, + // xml: true, + // url: '/dems_ws/services/TmriOutAccess?wsdl', + // data: ` + // + // + // + // ${wglb} + // ${jkxlh} + // ${glbm} + // ${jgbh} + // ${sjbs} + // ${JSON.stringify(params.data)} + // ${JSON.stringify(params.file)} + // + // + // `, + // }) + // } else { + temp = await getMessageByEnd(params, basic) + console.log("zj result", JSON.stringify(temp)) + // } } catch (e) { - console.log("新监管错误") + console.log("zj 新监管错误") temp = e } - console.log("temp message: ", JSON.stringify(temp)) + console.log("zj temp message: ", JSON.stringify(temp)) if (filePath) { await fileUtil.editFile(`${filePath}/wuxi_exam_data.txt`, JSON.stringify(temp) + `\n`); } return temp +} +function getMessageByEnd(params, basic) { + return new Promise((resolve, reject) => { + const timeoutId = setTimeout(() => { + PrintStr(params, 100) + // 如果超时,抛出错误 + console.log("zj tcp timeout") + reject(new Error("Timeout: No data received within 15 seconds")); + }, 15000); + const {wglb,jkxlh,glbm,jgbh,sjbs} = basic; + let baseUrl = globalThis.JGHOST ? globalThis.JGHOST : globalThis.host + let key = new Date().getTime() + // 走后置机 + params.file.param = [{ + field: '', data: "" + }] + let data = { + url: `${baseUrl}/dems_ws/services/TmriOutAccess?wsdl`, + serialNumber: key, + type: 1, + method: "post", + isNewCenter: true, + data: ` + + + + ${wglb} + ${jkxlh} + ${glbm} + ${jgbh} + ${sjbs} + ${JSON.stringify(params.data)} + ${JSON.stringify(params.file)} + + + `, + contentType: 'text/xml', + isHeartBeat: "0", + } + console.log("zj guocheng", JSON.stringify(data)) + NewTcpClient.sendMsg(`^#${JSON.stringify(data)}#$`) + let cache = "" + NewTcpClient.onMessage(async (value) => { + console.log("zj onMessage", value) + // 先找到^#和#$开始结束符号 + cache += value + let start = cache.indexOf("^#") + let end = cache.indexOf("#$") + if (start !== -1 && end !== -1) { + let message = cache.slice(start + 2, end) + cache = cache.slice(end + 2) + let tempIndex = message.indexOf("^#") + while (tempIndex > -1) { + message = message.slice(tempIndex + 2) + tempIndex = message.indexOf("^#") + } + let result: any = JSON.parse(message) + if (Number(result.serialNumber) === Number(key) && !result.url) { + let temp: any = XmlToJson(result.data) + if (temp.Envelope) { + console.log("zj accept", JSON.stringify(temp)) + const msgXml = temp.Envelope.Body.writeObjectOutResponse.return; + const dd = HandleCenterCode(msgXml, true); + clearTimeout(timeoutId); + resolve(dd) + } + } + } + }); + }) } export async function getParams(jkid, drvexam) { diff --git a/entry/src/main/ets/common/service/videoService.ts b/entry/src/main/ets/common/service/videoService.ts index 6884c912..4d32d526 100644 --- a/entry/src/main/ets/common/service/videoService.ts +++ b/entry/src/main/ets/common/service/videoService.ts @@ -54,7 +54,7 @@ export async function startRecordVideo(param, td, context, dir, path?, index?) { } // @ts-ignore - var recordResult = rtsp_server.startRecordVideo(context, video_uri, fileName, date,dir); + var recordResult = rtsp_server.startRecordVideo(context, video_uri, fileName, date, dir); const handleId = recordResult.dataInt; reslove(handleId) } @@ -181,7 +181,7 @@ interface takePhotoParam { */ const fileHelper = new FileHelper(); -export async function delPic(day,type) { +export async function delPic(day, type) { let phAccessHelper = photoAccessHelper.getPhotoAccessHelper(globalThis.context); console.info('albumGetAssetsDemoCallback'); let predicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates(); @@ -195,11 +195,11 @@ export async function delPic(day,type) { }; let albumList: photoAccessHelper.FetchResult = await phAccessHelper.getAlbums(photoAccessHelper.AlbumType.USER, photoAccessHelper.AlbumSubtype.USER_GENERIC, albumFetchOptions); let albums = await albumList.getAllObjects(); - for(let i=0;i<=albums.length;i++){ - let albumName=albums[i].albumName + for (let i = 0; i <= albums.length; i++) { + let albumName = albums[i].albumName // isSevenDaysAgo(albumName, day) - console.log('albumNamealbumName',albumName) - if (isSevenDaysAgo(albumName, day)&&albumName!='jt'&&albumName!='pz') { + console.log('albumNamealbumName', albumName) + if (isSevenDaysAgo(albumName, day) && albumName != 'jt' && albumName != 'pz') { deleteAllFileByPiC(albumName, type) } @@ -227,16 +227,17 @@ export async function takePhoto(param, context, dir, flag = 1, callback?) { return new Promise(async (resolve, reject) => { const time = await getCurrentTime() const date = time.split(' ')[0] - let dirName=dir?dir:date - rtsp_server.getVideoSnapshot(context, video_uri, fileName,dirName, true,async (err, snapResult) => { - if(snapResult.result&&snapResult.errorCode==0){ + let dirName = dir ? dir : date + rtsp_server.getVideoSnapshot(context, video_uri, fileName, dirName, true, async (err, snapResult) => { + console.log("zj photo", snapResult.fileSize.toString()) + if (snapResult.result && snapResult.errorCode == 0) { resolve({ base64: snapResult.dataString, name: snapResult.fileName, fileSize: snapResult.fileSize, errorCode: snapResult.errorCode }) - }else{ + } else { promptAction.showToast({ message: `拍照失败`, duration: 3000 @@ -249,9 +250,10 @@ export async function takePhoto(param, context, dir, flag = 1, callback?) { }) } } -export async function deleteAllPicturesFn(){ + +export async function deleteAllPicturesFn() { fileHelper.deleteAllPictures(); - deleteAllVideos(globalThis.context,photoAccessHelper.AlbumType.USER,photoAccessHelper.AlbumSubtype.VIDEO) + deleteAllVideos(globalThis.context, photoAccessHelper.AlbumType.USER, photoAccessHelper.AlbumSubtype.VIDEO) } diff --git a/entry/src/main/ets/common/utils/File.ts b/entry/src/main/ets/common/utils/File.ts index 3b0c78e6..6967e9d8 100644 --- a/entry/src/main/ets/common/utils/File.ts +++ b/entry/src/main/ets/common/utils/File.ts @@ -1,5 +1,6 @@ import Want from '@ohos.app.ability.Want' import promptAction from '@ohos.promptAction' +import fileAccess from '@ohos.file.fileAccess' import abilityAccessCtrl, { Permissions } from '@ohos.abilityAccessCtrl' import common from '@ohos.app.ability.common' import fs from '@ohos.file.fs' @@ -103,7 +104,7 @@ export default class FileUtil { }; private context: common.UIAbilityContext private wantInfos: Want[] - private fileAccessHelper: any + private fileAccessHelper: fileAccess.FileAccessHelper //后续文件路径待替换 private absolutePath = '/mnt/hmdfs/100/account/device_view/local/files/duolun' private getFilePathList = async (filePath: string, isSdcard: boolean) => { @@ -127,10 +128,8 @@ export default class FileUtil { } // 检索文件列表 public getSdCardPathList = async () => { - //@ts-ignore this.wantInfos = await fileAccess.getFileAccessAbilityInfo(); const {wantInfos,context} = this; - //@ts-ignore const fileAccessHelper = fileAccess.createFileAccessHelper(this.context, this.wantInfos); this.fileAccessHelper = fileAccessHelper; @@ -177,7 +176,6 @@ export default class FileUtil { 'ohos.permission.READ_MEDIA', 'ohos.permission.WRITE_MEDIA' ]; - // @ts-ignore this.wantInfos = await fileAccess.getFileAccessAbilityInfo(); let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager() atManager.requestPermissionsFromUser(context, permissions, async (code, result) => { diff --git a/entry/src/main/ets/common/utils/UdpClientByCenter.ts b/entry/src/main/ets/common/utils/UdpClientByCenter.ts index a2900d0a..b28b57c9 100644 --- a/entry/src/main/ets/common/utils/UdpClientByCenter.ts +++ b/entry/src/main/ets/common/utils/UdpClientByCenter.ts @@ -305,24 +305,24 @@ export default class UdpClientByCenter { console.info('surenjun', 'getUDP关闭udp message监听事件 成功') } - message_1Fn = (value) => { + message_1Fn = (strachArr) => { let callback = this.onMessage_1Callback // 收到的是ArrayBuffer 需要进行转换解析 this.plcUdpError = false - if (value) { - let dataView = new DataView(value.message) - let str = "" - for (let i = 0; i < dataView?.byteLength; ++i) { - let c = String.fromCharCode(dataView?.getUint8(i)) - if (c !== "\n") { - str += c - } - } - - let strachArr = str.split(',') - if (strachArr[0] != '#DN_GD') { - return - } + if (strachArr) { + // let dataView = new DataView(value.message) + // let str = "" + // for (let i = 0; i < dataView?.byteLength; ++i) { + // let c = String.fromCharCode(dataView?.getUint8(i)) + // if (c !== "\n") { + // str += c + // } + // } + // + // let strachArr = str.split(',') + // if (strachArr[0] != '#DN_GD') { + // return + // } strachArr[28] = globalThis.chuankoMsg || strachArr[28] diff --git a/entry/src/main/ets/common/utils/new/tcp.ts b/entry/src/main/ets/common/utils/new/tcp.ts index a4f8b16c..44e2df90 100644 --- a/entry/src/main/ets/common/utils/new/tcp.ts +++ b/entry/src/main/ets/common/utils/new/tcp.ts @@ -1,5 +1,7 @@ import socket from '@ohos.net.socket'; import convertxml from '@ohos.convertxml'; +import util from '@ohos.util'; +import Prompt from '@system.prompt'; class NewTcp { private localIp: string = '192.168.7.170' @@ -7,6 +9,7 @@ class NewTcp { private oppositeIp: string = '192.168.7.124' private oppositeIpPort: string = '20022' private tcp: socket.TCPSocket = null + private cbArr = [] constructor() { this.init() @@ -24,6 +27,26 @@ class NewTcp { timeout: 6000 }).then(res => { console.log('tcp connect success') + this.tcp.on("message", (value) => { + if (value) { + let decoder = util.TextDecoder.create() + let message = decoder.decodeWithStream(new Uint8Array(value.message)) + let strArr = message.split(',') + // 获取档位信息 + strArr[28] = globalThis.chuankoMsg || '0' + globalThis.udpClient.getCurrentMessage = strArr.toString() + this.cbArr.forEach(cb => { + cb && cb(strArr.toString()) + }) + // 超时15秒打印信息 + + + } else { + this.cbArr.forEach(cb => { + cb && cb("") + }) + } + }) }).catch(err => { console.log('tcp connect error', err) }) @@ -34,42 +57,19 @@ class NewTcp { return new Promise((resolve, reject) => { this.tcp.send({ data: data }, (err) => { if (err) { + console.log("zj tcp end error", JSON.stringify(err)) + console.log("zj tcp end error", data) reject(err); } else { // console.log("zj tcp end success") resolve(); - } }); }); } public onMessage(callback) { - this.tcp.on("message", (value) => { - if (value) { - let dataView = new DataView(value.message) - let str = "" - for (let i = 0; i < dataView?.byteLength; ++i) { - let c = String.fromCharCode(dataView?.getUint8(i)) - if (c !== "\n") { - str += c - } - } - - let strachArr = str.split(',') - if (strachArr[0] != '#DN_GD') { - return - } - // console.log(`udp222 on message array buffer:${str}`); - - strachArr[28] = globalThis.chuankoMsg || '0' - const newArr = JSON.parse(JSON.stringify(strachArr)) - callback && callback(newArr.toString()) - - } else { - callback && callback('') - } - }) + this.cbArr.push(callback) } // 重连 @@ -93,6 +93,42 @@ class NewTcp { export const NewTcpClient = new NewTcp() +export const HandleCenterCode = (msgXml, isNewCenter) => { + //新监管 + if (isNewCenter) { + const msg = JSON.parse(msgXml); + const result = msg?.data[0]?.result; + if (result) { + const {code,message,retval} = result + if (code != '1') { + const rMessage = decodeURIComponent(message as string) + Prompt.showToast({ + message: rMessage, + duration: 3000 + }); + return { code, message } + } else { + return { code, keystr: retval } + } + } + } + + //正则匹配code message字段 + const [code, message, keystr] = [/(.*)<\/code>/i, /(.*)<\/message>/i, /(.*)<\/keystr>/i].map(pattern => { + const patternArr = pattern.exec(msgXml); + return patternArr && patternArr[1] + }); + + if (code != '1') { + Prompt.showToast({ + message: decodeURIComponent(message as string), + duration: 3000 + }); + return { code, message: decodeURIComponent(message) } + } else { + return { code, keystr, message } + } +} export const XmlToJson = (result) => { let xmlOptions = { diff --git a/entry/src/main/ets/common/utils/request.ts b/entry/src/main/ets/common/utils/request.ts index 91450c5a..ced6cf41 100644 --- a/entry/src/main/ets/common/utils/request.ts +++ b/entry/src/main/ets/common/utils/request.ts @@ -161,7 +161,7 @@ function xmlToJson(result, url) { } //处理中心服务code -function handleCenterCode(msgXml, isNewCenter) { + function handleCenterCode(msgXml, isNewCenter) { //新监管 if (isNewCenter) { const msg = JSON.parse(msgXml); diff --git a/entry/src/main/ets/common/utils/tools.ts b/entry/src/main/ets/common/utils/tools.ts index df11e338..0a4714ef 100644 --- a/entry/src/main/ets/common/utils/tools.ts +++ b/entry/src/main/ets/common/utils/tools.ts @@ -1,19 +1,20 @@ //@ts-ignore import systemTime from '@ohos.systemDateTime'; -import { expect } from '@ohos/hypium'; import FileUtil from './File'; -export function isSevenDaysAgo(date,days=2) { + +export function isSevenDaysAgo(date, days = 2) { const today = new Date(); // 当前日期 const target = new Date(date); // 需要判断的日期 - console.info("listFile succeed1",JSON.stringify(target)); + console.info("listFile succeed1", JSON.stringify(target)); const diff = today.getTime() - target.getTime(); // 计算两个日期之间的毫秒数差异 const diffDays = diff / (1000 * 60 * 60 * 24); // 将毫秒转换为天数 - console.info("listFile succeed2",JSON.stringify(diffDays)); + console.info("listFile succeed2", JSON.stringify(diffDays)); // 如果差异天数正好是2,则原日期是当前日期的前2天 - console.log('diffDays',diffDays,days) - return diffDays >= (Number(days) ); + console.log('diffDays', diffDays, days) + return diffDays >= (Number(days)); } + // export async function writeLog(path,param){ // return // const fileUtil = new FileUtil(globalThis.context) @@ -52,7 +53,7 @@ function fill(value: number) { return (value > 9 ? '' : '0') + value; } -export function dateFormat(t) { +export function dateFormat(t) { let year = t.getFullYear() let month = t.getMonth() + 1 let day = t.getDate() @@ -62,7 +63,7 @@ export function dateFormat(t) { return year + "-" + fill(month) + "-" + fill(day) + " " + fill(hours) + ":" + fill(minutes) + ":" + fill(seconds); } -export function dateVersionFormat(t) { +export function dateVersionFormat(t) { let year = t.getFullYear() let month = t.getMonth() + 1 let day = t.getDate() @@ -72,12 +73,12 @@ export function dateVersionFormat(t) { return year + "." + fill(month) + "." + fill(day) + "." + fill(hours); } -enum timeType{ +enum timeType { fulltime = 1 } //获取当前时间并转化 -export async function getCurrentTime(type?:timeType):Promise { +export async function getCurrentTime(type?: timeType): Promise { const date = await systemTime.getDate(); const year = date.getFullYear(); @@ -96,15 +97,15 @@ export async function getCurrentTime(type?:timeType):Promise { let s = date.getSeconds(); //@ts-ignore s = s < 10 ? '0' + s : s; - if(type === 1){ + if (type === 1) { return `${year}${month}${dates}${h}${m}${s}` - }else{ + } else { return `${year}-${month}-${dates} ${h}:${m}:${s}` } } //获取时分秒毫秒 -export async function getCurrentHourTime():Promise { +export async function getCurrentHourTime(): Promise { const date = await systemTime.getDate(); const year = date.getFullYear(); @@ -120,19 +121,19 @@ export async function getCurrentHourTime():Promise { s = s < 10 ? '0' + s : s; let ss = date.getMilliseconds(); let nowSS = '' - if(ss < 10){ + if (ss < 10) { //@ts-ignore nowSS = '00' + ss } - if(ss >= 10 && ss < 100){ + if (ss >= 10 && ss < 100) { //@ts-ignore nowSS = '0' + s } - return `${h}${m}${s}${nowSS||ss}` + return `${h}${m}${s}${nowSS || ss}` } //时间戳转日期 -export function formatTime(time:number):string { +export function formatTime(time: number): string { //@ts-ignore const h = parseInt(time / 3600) //@ts-ignore @@ -146,9 +147,8 @@ export function formatTime(time:number):string { } - // 根据指定个数分割数组 -export function chunkArr (arr, size:number) { +export function chunkArr(arr, size: number) { //判断如果不是数组(就没有length),或者size没有传值,size小于1,就返回空数组 if (!arr.length || !size || size < 1) return [] let [start, end, result] = [null, null, []] @@ -166,7 +166,7 @@ export function deepClone(target) { if (typeof target === 'object' && target !== 'null') { // 创建容器 const result = Array.isArray(target) ? [] : {}; - const keys = Object.keys(target); //注解二 + const keys = Object.keys(target); //注解二 // Object.keys()会过滤掉原型链上的属性 keys.forEach(key => { result[key] = deepClone(target[key]) @@ -177,7 +177,7 @@ export function deepClone(target) { return target; } -export function stringToASC(str){ +export function stringToASC(str) { const tempStr = str + ''; const strArr = tempStr.split(''); //@ts-ignore @@ -185,7 +185,7 @@ export function stringToASC(str){ } -export function fillZero (str, len) { +export function fillZero(str, len) { str = str + ''; if (str.length > len || !len) { return str @@ -200,16 +200,16 @@ export function fillZero (str, len) { return zeroStr + str; } -export function string2Bytes(number, len){ - let str = (Math.floor(+number)).toString(2); - if(str.length > len) { +export function string2Bytes(number, len) { + let str = (Math.floor(+number)).toString(2); + if (str.length > len) { console.log('数据长度不对~~'); return } var byteString = fillZero(str, len); var arrBytes = new Array(); - for (var i = byteString.length; i > 0;) { + for (var i = byteString.length; i > 0; ) { let j = i - 8; if (j < 0) { j = 0 @@ -227,22 +227,21 @@ export function string2Bytes(number, len){ export function Array2Byte(array) { var buf = new ArrayBuffer(array.length); var view = new Uint8Array(buf); - for (var i = 0; i != array.length; ++i) - { + for (var i = 0; i != array.length; ++i) { view[i] = array[i] & 0xFF; } return view; } //经纬度转换 -export function convertGpsCoord2 (num){ +export function convertGpsCoord2(num) { const tempNum = Math.floor(num); - const du = Math.floor(tempNum / 100); + const du = Math.floor(tempNum / 100); const fen = tempNum % 100 + num - tempNum; return du + fen / 60 } -export function debounce(fn, delay){ +export function debounce(fn, delay) { // 利用闭包定义定时器id变量存储 let timer = null; return () => { @@ -252,4 +251,32 @@ export function debounce(fn, delay){ } timer = setTimeout(fn, delay); } -}; \ No newline at end of file +} +; + +// 循环打印一个字符串 +/** + * 分段打印字符串 + * @param {string} value - 需要打印的字符串 + * @param {number} length - 每段的长度 + */ +export function PrintStr(value, length) { + // 参数校验 + if (typeof value !== 'string' || typeof length !== 'number' || length <= 0) { + console.error('参数无效:value 必须是字符串,length 必须是正整数'); + return; + } + + // 如果字符串长度小于等于分段长度,直接打印整个字符串 + if (value.length <= length) { + console.log(value); + return; + } + + // 分段打印 + for (let i = 0; i < value.length; i += length) { + // 截取当前段 + const segment = value.slice(i, i + length); + console.log("zj PrintStr", segment); + } +} \ No newline at end of file diff --git a/entry/src/main/ets/model/SignDisplay.ets b/entry/src/main/ets/model/SignDisplay.ets index c3df4d32..84872fc0 100644 --- a/entry/src/main/ets/model/SignDisplay.ets +++ b/entry/src/main/ets/model/SignDisplay.ets @@ -2,3 +2,10 @@ export type SignalDataType = { key: string; value: string; }; + + +export interface Response { + serialNumber: string + data: string + isForwordHttp: string +} \ No newline at end of file diff --git a/entry/src/main/ets/pages/TerminalInfos.ets b/entry/src/main/ets/pages/TerminalInfos.ets index d7d94382..e6eb8c28 100644 --- a/entry/src/main/ets/pages/TerminalInfos.ets +++ b/entry/src/main/ets/pages/TerminalInfos.ets @@ -1,5 +1,8 @@ -import TopLogo from './compontents/TopLogo'; -import prompt from '@ohos.prompt'; +import TopLogo from './compontents/TopLogo' +import ethernet from '@ohos.net.ethernet'; +import prompt from '@ohos.prompt' +import { upDateTableByArray } from '../common/service/initable' +import { getSyncData } from '../common/service/initable' import FileUtil from '../common/utils/File'; import common from '@ohos.app.ability.common'; import { GlobalConfig } from '../config'; @@ -100,7 +103,6 @@ struct Index { } fileUtil.addFile(`${folderPath}/ipConfig.txt`, JSON.stringify(param), '') // upDateTableByArray('IpConfigTable',[]) - // @ts-ignore ethernet.setIfaceConfig("eth0", { mode: 0, ipAddr: this.inputTextList1[9], @@ -170,7 +172,7 @@ struct Index { this.inputTextList1[3] = result.centerPort } - //@ts-ignore + ethernet.getIfaceConfig("eth0", (error, value) => { if (error) { // that.errorMsg='error' diff --git a/entry/src/main/ets/pages/UserInfo.ets b/entry/src/main/ets/pages/UserInfo.ets index 7138850e..32ca533f 100644 --- a/entry/src/main/ets/pages/UserInfo.ets +++ b/entry/src/main/ets/pages/UserInfo.ets @@ -24,6 +24,7 @@ import errorMsgDialog from './compontents/errorMsgDialog'; import imageBtn from './compontents/imageBtn'; import FileUtil from '../common/utils/File'; import DB, { ColumnType } from '../common/database/DbSql'; +import { NewTcpClient } from '../common/utils/new/tcp'; @Entry @Component @@ -167,8 +168,6 @@ struct UserInfo { ) private filePhoto: FilePhoto private avPlayer - private AccountTable = new AccountTable(() => { - }, USER); private context = getContext(this) as common.UIAbilityContext; private labelBlocks = [ { label: '考生姓名', key: 'xm' }, @@ -919,7 +918,12 @@ struct UserInfo { resolve(true) return } - let plcValue = globalThis.udpClient.getCurrentMessage(); + // let plcValue = "" + let plcValue = globalThis.udpClient.getCurrentMessage; + // NewTcpClient.onMessage((value) => { + // console.log(value) + // plcValue = value + // }) const msgArr = plcValue.split(',') || '' const mkg = msgArr[14]; const fdjzs = msgArr[25]; diff --git a/entry/src/main/ets/pages/compontents/SignDisplayCom.ets b/entry/src/main/ets/pages/compontents/SignDisplayCom.ets index c6cfd5ab..fdf1e168 100644 --- a/entry/src/main/ets/pages/compontents/SignDisplayCom.ets +++ b/entry/src/main/ets/pages/compontents/SignDisplayCom.ets @@ -346,20 +346,24 @@ export default struct SignDisplayCom { // getSignal(msg) // } // }) - NewTcpClient.onMessage((msg) => { - console.log("zj msg", msg) - getSignal(msg) - }) - } else { - clearInterval(globalThis.signalTimer) - globalThis.signalTimer = setInterval(() => { - const msgStr = globalThis.msgStr - if (msgStr) { - getSignal(msgStr) - - } - }, 200) + // NewTcpClient.onMessage((msg) => { + // console.log("zj msg", msg) + // getSignal(msg) + // }) } + // clearInterval(globalThis.signalTimer) + // globalThis.signalTimer = setInterval(() => { + // const msgStr = globalThis.msgStr + // if (msgStr) { + // getSignal(msgStr) + // + // } + // }, 200) + NewTcpClient.onMessage((msg) => { + console.log("zj msg", msg) + getSignal(msg) + }) + } onPageShow() { diff --git a/entry/src/main/ets/pages/compontents/judge.zip b/entry/src/main/ets/pages/compontents/judge.zip deleted file mode 100644 index 711213e57d0c384e0ea7172af2e15879e796d283..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11624 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 { console.info('socketTag[PLC.UdpClient]', '收到udp回调数据') - handleUdp(msg) + console.log("zj msg1", msg) + this.handleUdp(msg) const udpIndex = globalThis.udpIndex; if (udpIndex % 5 === 0) { handDistance();