添加socket.io taskshchedule等
| | |
| | | const WebFramework = require('@midwayjs/web').Framework; |
| | | const { SocketFramework, createRedisAdapter} = require('@cool-midway/socket'); |
| | | const web = new WebFramework().configure({ |
| | | port: 8001, |
| | | }); |
| | | |
| | | // // 初始化 socket.io 框架 |
| | | // const socketFramework = new SocketFramework().configure({ |
| | | // port: 3000, |
| | | // // adapter: createRedisAdapter({ host: '192.168.1.2', port: 6379}), |
| | | // }); |
| | | |
| | | const { Bootstrap } = require('@midwayjs/bootstrap'); |
| | | Bootstrap.load(web).run(); |
| | | |
| | | const schedule_ = require("./src/schedule/taskSchedule.js"); |
| | | schedule_.job_(); |
| | |
| | | { |
| | | "name": "cool-admin", |
| | | "version": "4.0.0", |
| | | "description": "cool-admin 一个很酷的通用后台管理系统", |
| | | "description": "一个很酷的通用后台管理系统", |
| | | "private": true, |
| | | "dependencies": { |
| | | "@cool-midway/alipay": "^4.0.4", |
| | |
| | | "@midwayjs/core": "^2.14.0", |
| | | "@midwayjs/decorator": "^2.14.0", |
| | | "@midwayjs/orm": "^2.14.0", |
| | | "@midwayjs/socketio": "^3.3.5", |
| | | "@midwayjs/swagger": "^1.3.0", |
| | | "@midwayjs/view-nunjucks": "^2.14.0", |
| | | "@midwayjs/web": "^2.13.4", |
| | | "axios": "^0.27.2", |
| | | "egg": "^2.33.1", |
| | | "egg-cors": "^2.2.3", |
| | | "egg-scripts": "^2.15.2", |
| | |
| | | "md5": "^2.3.0", |
| | | "mini-svg-data-uri": "^1.4.3", |
| | | "mysql2": "^2.3.3", |
| | | "node-schedule": "^2.1.0", |
| | | "node-xlsx": "^0.17.2", |
| | | "protobufjs": "^6.11.3", |
| | | "svg-captcha": "^1.4.0", |
| | | "typeorm": "^0.2.41" |
| | | }, |
| New file |
| | |
| | | syntax = "proto3"; |
| | | |
| | | // enum SysCommand { |
| | | // UNKOWN_COMMAND = 0; // 未知命令 |
| | | // SYS_COMMAND = 1; // 系统命令 |
| | | // SENSOR_COMMAND = 2; // 传感器命令 |
| | | // FIVE_G_COMMAND = 3; // 通讯5G模块命令 |
| | | // CAMERA_COMMAND = 4; // 摄像头参数命令 |
| | | // IO_COMMAND = 5; // 外设IO口操作命令 |
| | | // SYS_PARAMS_COMMAND = 6; // 系统参数获取 |
| | | // WIFI_COMMAND = 7; // 设备WIFI参数设置 |
| | | // KERNEL_COMMAND = 8; // 核心计算参数设 |
| | | // DEVICE_COMMAND = 9; // 工作设备参数设置 |
| | | // MICRO_WAVE_COMMAND = 10; // 毫米波 |
| | | // } |
| | | |
| | | // enum SubCommand { |
| | | // option allow_alias = true; |
| | | |
| | | // UNKOWN_SUB_COMMAND = 0; // 未知子命令 |
| | | |
| | | // // 系统命令 |
| | | // POWER_ON_SUB_COMMAND = 1; // 开机 |
| | | // POWER_OFF_SUB_COMMAND = 2; // 关机 |
| | | |
| | | // // 传感器命令 |
| | | // SENSOR_INIT_SUB_COMMAND = 1; // 传感器初始化 |
| | | // SENSOR_REQURE_SUB_COMMAND = 2; // 传感器参数获取 |
| | | // RTK_SETTING_SUB_COMMAND = 3; // RTK外设参数设置 |
| | | // RTK_REQURE_SUB_COMMAND = 4; // RTK外设数据获取 |
| | | |
| | | // // 通讯5G模块命令 |
| | | // FIVE_G_INIT_SUB_COMMAND = 1; // 5G模块参数初始化 |
| | | // FIVE_G_SEND_IMAGE_SUB_COMMAND = 2; // 5G通讯图像数据发送 |
| | | // FIVE_G_REQURE_SUB_COMMAND = 3; // 5G通讯接收 |
| | | |
| | | // // 摄像头参数命令 |
| | | // CAMERA_NUMBER_SUB_COMMAND = 1; // 设备摄像头个数 |
| | | // CAMERA_RESOLUTION_SUB_COMMAND = 2; // 设备摄像头工作分辨率 |
| | | // CAMERA_FRAME_RATE_SUB_COMMAND = 3; // 摄像头工作帧率 |
| | | // CAMERA_OTHER_PARAMS_SUB_COMMAND = 4; // 摄像头工作其他参数 |
| | | |
| | | // // 外设IO口操作命令 |
| | | // CAMERA_DUST_REMOVAL_START_SUB_COMMAND = 1; // 摄像头除尘启动 |
| | | // CAMERA_CONTROL_START_SUB_COMMAND = 2; // 外设控制数据启动(18路控制) |
| | | |
| | | // // 系统参数获取 |
| | | // CPU_FREQUENCY_SUB_COMMAND = 1; // CPU主频工作数据 |
| | | // CPU_KERNAL_TEMP_SUB_COMMAND = 2; // CPU核心温度数据 |
| | | // CPU_BETTERY_DATA_SUB_COMMAND = 3; // 电池供电电量数据 |
| | | |
| | | // // 设备WIFI参数设置 |
| | | // WIFI_HOTSPOT_SETTING_SUB_COMMAND = 1; // WIFI热点设置 |
| | | // WIFI_HOTSPOT_START_STOP_SUB_COMMAND = 2; // WIFI热点开启和关闭 |
| | | |
| | | // // 核心计算参数设置 |
| | | // POINT_CLOUD_ACCURACY_SUB_COMMAND = 1; // 点云计算精度 |
| | | // SPLICING_PARAMS_SUB_COMMAND = 2; // 拼接参数 |
| | | // MAP_INTERFACE_PLATFORM_SUB_COMMAND = 3; // 地图接口平台 |
| | | // DATA_STORE_BACKUP_SUB_COMMAND = 4; // 数据存储备份 |
| | | |
| | | // // 工作设备参数设置 |
| | | // SYSTEM_TIMER_SUB_COMMAND = 1; // 系统工作定时 |
| | | // SYSTEM_COORD_HEIGHT_SUB_COMMAND = 2; // 工作区域坐标与高度 |
| | | // TRIGGER_CONDITION_SUB_COMMAND = 3; // 工作触发条件 |
| | | // GRAVITY_FAILURE_SUB_COMMAND = 4; // 重力加速度失效参数 |
| | | // NINE_AXIS_FAILURE_SUB_COMMAND = 5; // 九轴加速度失效参数 |
| | | |
| | | // // 毫米波 |
| | | // MICRO_WAVE_SUB_COMMAND = 1; // 毫米波 |
| | | // } |
| | | |
| | | // message DataField { |
| | | // int32 length = 1; // 数据长度 |
| | | // bytes data = 2; // 数据内容 |
| | | // int32 checksum = 3; // 校验码 |
| | | // } |
| | | |
| | | // message CapturedData { |
| | | // int64 capture_time = 1; // 采集时间 |
| | | // string capture_device =2; // 采集设备 |
| | | // int32 capture_port = 3; // 采集设备序号 |
| | | // DataField DataField = 4; |
| | | // string data_type = 5; // 数据类型 image udp |
| | | // } |
| | | |
| | | // message DataMessage{ |
| | | // int64 sending_time = 1; |
| | | // string sending_device = 2; |
| | | // string target_device = 3; |
| | | // CapturedData CapturedData = 5; |
| | | // } |
| | | |
| | | // message StateData { |
| | | // int64 state_time = 1; |
| | | // string state_device = 2; |
| | | // DataField DataField = 4; |
| | | // } |
| | | |
| | | // message StateMessage { |
| | | // int64 sending_time = 1; |
| | | // string sending_device = 2; |
| | | // string target_device = 3; |
| | | // CapturedData StatedData = 5; |
| | | // } |
| | | |
| | | // message CommandData { |
| | | // SysCommand SysCommand = 1; |
| | | // SubCommand SubCommand = 2; |
| | | // } |
| | | |
| | | // message CommandMessage { |
| | | // int64 sending_time = 1; |
| | | // string sending_device = 2; |
| | | // string target_device = 3; |
| | | // CommandData CommandData =4; |
| | | // } |
| | | |
| | | enum SysCommand{ |
| | | UNKOWN_COMMAND = 0; |
| | | CAMERA_COMMAND = 1; |
| | | MICROWAVE_COMMAND = 2; |
| | | DUSTCLEANER_COMMAND = 3; |
| | | |
| | | } |
| | | |
| | | enum SubCommand{ |
| | | UNKOWN_SUBCOMMAND = 0; |
| | | |
| | | // camera params |
| | | ONE_TIME_CAPTURE = 1; |
| | | |
| | | // microwave params |
| | | ONE_CIRCLE_SCAN = 2; |
| | | |
| | | // dust cleaner params |
| | | ONE_CLEAN_SCAN = 4; |
| | | |
| | | } |
| | | |
| | | |
| | | message CommandMessage{ |
| | | string source = 1; |
| | | string generatetime = 2; |
| | | SysCommand syscommand = 3; |
| | | SubCommand subcommand = 4; |
| | | string targetclient = 5; |
| | | string returnserver = 6; |
| | | string taskuuid = 7; |
| | | } |
| | | |
| | | message LogsMessage{ |
| | | string source = 1; |
| | | string timestamp = 2; |
| | | string context = 3; |
| | | optional string taskuuid = 4; |
| | | } |
| | | |
| | | |
| | | message ImagesMessage |
| | | { |
| | | string source = 1; |
| | | string timestamp = 2; |
| | | |
| | | message ImageItems |
| | | { |
| | | int32 length = 1; // 数据长度 |
| | | bytes data = 2; // 数据内容 |
| | | } |
| | | |
| | | repeated ImageItems Image = 3; |
| | | optional string taskuuid = 4; |
| | | } |
| | | |
| | | |
| | | |
| | | message PlysMessage |
| | | { |
| | | string source = 1; |
| | | string timestamp = 2; |
| | | |
| | | message PointCloudItem |
| | | { |
| | | int32 length = 1; |
| | | int32 rows = 2; |
| | | int32 cols = 3; |
| | | string order = 4; |
| | | string dtype = 5; |
| | | bytes data = 6; |
| | | |
| | | } |
| | | |
| | | repeated PointCloudItem Plydata = 3; |
| | | optional string taskuuid = 4; |
| | | |
| | | // enum ref_system |
| | | // { |
| | | // MICROWAVE_SYSTEM = 0; |
| | | // DEVICE_SYSTEM = 1; |
| | | // } |
| | | |
| | | // ref_system reference = 4 |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | // message MicroWaveMessage |
| | | // { |
| | | // int32 length = 1; // 数据长度 |
| | | // bytes data = 2; // 数据内容 |
| | | // } |
| | | |
| | | // message CommandRequest{ |
| | | |
| | | // } |
| | | |
| | | // message StateMessage{ |
| | | // string message_type = 1; |
| | | // int64 generatetime = 2; |
| | | // string generate_device = 3; |
| | | // string target_device = 4; |
| | | // string message_uuid = 5; |
| | | // string str_body = 6; |
| | | // } |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | // message RequestCommand { |
| | | // int32 sync_word = 1; // 同步字 |
| | | // string device_id = 2; // 设备ID |
| | | // SysCommand sys_command = 3; // 命令1 |
| | | // SubCommand sub_command = 4; // 命令2 |
| | | // DataField data1 = 5; // 数据1 |
| | | // DataField data2 = 6; // 数据2 |
| | | // int32 checksum = 7; // 校验码 |
| | | // } |
| | | |
| | | // enum ResponseState |
| | | // { |
| | | // SUCCESS = 0; // 成功 |
| | | // FAILURE = 1; // 失败 |
| | | // ABNORMAL = 2; // 异常 |
| | | // INFICIENT_POWER = 3; // 电量不足 |
| | | // OTHER = 4; // 其他 |
| | | // } |
| | | |
| | | // message ResponseCommand |
| | | // { |
| | | // string device_id = 1; // 设备ID |
| | | // SysCommand sys_command = 2; // 命令1 |
| | | // SubCommand sub_command = 3; // 命令2 |
| | | // ResponseState state = 4; // 响应状态 |
| | | // int32 data_length = 5; // 数据长度 |
| | | // bytes data = 6; // 数据 |
| | | // int32 checksum = 7; // 校验码 |
| | | // } |
| | | |
| | | |
| | | // // 服务端向采集端发送的主指令 |
| | | // enum ControlSysCommand { |
| | | // DUST_CLEANER_COMMAND = 0; |
| | | // } |
| | | |
| | | // // 服务端向采集端发送的子命令 |
| | | // enum ControlSubCommand { |
| | | // // dust cleaner sub commands |
| | | // DUST_CLEANER_ONETIME_CLEAN_SELF = 0; |
| | | // DUST_CLEANER_ONETIME_CLEAN_CAMERA = 1; |
| | | // DUST_CLEANER_CLOSE_PERIOD_CLEAN_SELF = 2; |
| | | // DUST_CLEANER_CLOSE_PERIOD_CLEAN_CAMERA = 3; |
| | | // DUST_CLEANER_PERIOD_CLEAN_SELF = 4; |
| | | // DUST_CLEANER_PERIOD_CLEAN_CAMERA = 5; |
| | | // } |
| | | |
| | | // // dust cleaner command message |
| | | // message DustCleanerMessage { |
| | | // uint32 period = 1; |
| | | // } |
| | | |
| | | // // 控制上位机消息 |
| | | // message ControllMessage { |
| | | // int32 sync_word = 1; // 同步字 |
| | | // ControlSysCommand sys_command = 3; // 主命令 |
| | | // ControlSubCommand sub_command = 4; // 子命令 |
| | | // DataField data = 5; // 数据 |
| | | // int32 checksum = 7; // 校验码 |
| | | // } |
| New file |
| | |
| | | import { Inject, Provide } from '@midwayjs/decorator'; |
| | | import { BaseService, ICoolCache, } from '@cool-midway/core'; |
| | | import * as _ from 'lodash'; |
| | | import { MysqlUtil } from '../../utils/mysqlutil'; |
| | | import { DateUtil } from '../../utils/dateutil'; |
| | | import { AxiosUtil } from '../../utils/axiosutil'; |
| | | |
| | | // 引入读写核心模块 |
| | | |
| | | |
| | | /** |
| | | * 系统用户 |
| | | */ |
| | | @Provide() |
| | | export class RpcService extends BaseService { |
| | | |
| | | @Inject('cool:cache') |
| | | coolCache: ICoolCache; |
| | | |
| | | @Inject() |
| | | mysqlUtil: MysqlUtil; |
| | | |
| | | rpc_url: "http://192.168.1.4:5000/api"; |
| | | |
| | | @Inject() |
| | | dateUtil: DateUtil; |
| | | |
| | | @Inject() |
| | | axios: AxiosUtil; |
| | | |
| | | /** |
| | | * 远程调用设备,启动任务执行 |
| | | * @param query |
| | | */ |
| | | async remoteCall(url, query) { |
| | | if (url == null) { |
| | | url = this.rpc_url; |
| | | } |
| | | let stattime = this.dateUtil.getCurretTimeStr() |
| | | console.log('---------------------------------------------send msg to device-----------------------------------------') |
| | | console.log(query) |
| | | // let res = await this.axios.httpPostBuffer(url, query) |
| | | console.log('---------------------------------------receive the reply msg from device-----------------------------------') |
| | | this.axios.httpPostBuffer(url, query).then(res => { |
| | | console.log(res) |
| | | const bidsql = `insert into t_config_interface_record (interface_direct,start_time,end_time,request_type,createTime,remark,status,params,result) |
| | | values ('${url}','${stattime}','${this.dateUtil.getCurretTimeStr()}','post',now(),'ok',200,'${JSON.stringify(query)}','${res}') `; |
| | | this.nativeQuery(bidsql); |
| | | return res |
| | | }).catch((error) => { |
| | | console.log(error) |
| | | return error |
| | | }) |
| | | |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 分页查询 |
| | | * @param query |
| | | */ |
| | | async getData(query) { |
| | | // const { keyWord, status, departmentIds = [] } = query; |
| | | // const permsDepartmentArr = await this.baseSysPermsService.departmentIds( |
| | | // this.ctx.admin.userId |
| | | // ); // 部门权限 |
| | | const bidsql = `select * from t_sys_business_config where id_='${query.bid}' limit 0,1`; |
| | | const bid_obj_ = await this.nativeQuery(bidsql); |
| | | console.log(bid_obj_) |
| | | let sqlObj = this.mysqlUtil.create_sql(bid_obj_[0], query?.pageindex || null, query?.pagesize || null, query); |
| | | if (sqlObj?.status == 0) { |
| | | return sqlObj?.msg; |
| | | } |
| | | return this.nativeQuery(sqlObj?.sql, query); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 分页查询 |
| | | * @param query |
| | | */ |
| | | async getDataByNative(query) { |
| | | // const { keyWord, status, departmentIds = [] } = query; |
| | | // const permsDepartmentArr = await this.baseSysPermsService.departmentIds( |
| | | // this.ctx.admin.userId |
| | | // ); // 部门权限 |
| | | const bidsql = `select * from t_sys_business_config where id_='${query.bid}' limit 0,1`; |
| | | const bid_obj_ = await this.nativeQuery(bidsql); |
| | | console.log(bid_obj_) |
| | | let sqlObj = this.mysqlUtil.create_sql(bid_obj_[0], query?.pageindex || null, query?.pagesize || null, query); |
| | | if (sqlObj?.status == 0) { |
| | | return sqlObj?.msg; |
| | | } |
| | | return this.nativeQuery(sqlObj?.sql) |
| | | } |
| | | |
| | | /** |
| | | * 分页查询 |
| | | * @param query |
| | | */ |
| | | async updateData(query) { |
| | | // const { keyWord, status, departmentIds = [] } = query; |
| | | // const permsDepartmentArr = await this.baseSysPermsService.departmentIds( |
| | | // this.ctx.admin.userId |
| | | // ); // 部门权限 |
| | | const bidsql = `select * from t_sys_business_config where id_='${query.bid}' limit 0,1`; |
| | | const bid_obj_ = await this.nativeQuery(bidsql); |
| | | let sqlObj = this.mysqlUtil.create_sql(bid_obj_[0], query?.pageindex || null, query?.pagesize || null, query); |
| | | if (sqlObj?.status == 0) { |
| | | return sqlObj?.msg; |
| | | } |
| | | return this.sqlRenderPage(sqlObj?.sql, query); |
| | | } |
| | | |
| | | } |
| New file |
| | |
| | | import { Provide } from "@midwayjs/decorator" |
| | | const axios = require('axios'); |
| | | |
| | | /** |
| | | * 系统用户 |
| | | */ |
| | | @Provide() |
| | | export class AxiosUtil { |
| | | |
| | | async httpGet(uri) { |
| | | console.log(uri); |
| | | axios.get(uri).then(response => { |
| | | console.log(response.data); |
| | | return response; |
| | | }).catch(error => { |
| | | console.log(error); |
| | | return error |
| | | }); |
| | | } |
| | | |
| | | async httpPost(uri, postdata) { |
| | | // let data = { |
| | | // name: 'John Doe', |
| | | // job: 'Content Writer' |
| | | // }; |
| | | axios.post(uri, postdata).then((res) => { |
| | | console.log(`Status: ${res.status}`); |
| | | console.log('Body: ', res.data); |
| | | return res; |
| | | }).catch((err) => { |
| | | console.error(err); |
| | | return err |
| | | }); |
| | | } |
| | | |
| | | async httpPostBuffer(uri,postdata) { |
| | | axios({ |
| | | method: 'post', |
| | | url: uri, |
| | | data: postdata, |
| | | headers: { |
| | | 'Content-Type': 'application/octet-stream', // 关键 |
| | | }, |
| | | }).then(res => { |
| | | console.log(res) |
| | | return res |
| | | }).catch((error) => { |
| | | console.log(error) |
| | | return error |
| | | }) |
| | | } |
| | | |
| | | |
| | | |
| | | } |
| | | |
| | |
| | | @Provide() |
| | | export class DateUtil { |
| | | |
| | | |
| | | date_format(date_str, format) { |
| | | // = 'YY-MM-DD hh:mm:ss' |
| | | let date = new Date(date_str) |
| | |
| | | return result |
| | | } |
| | | |
| | | getCurretTimeStr() { |
| | | let currtime = this.date_format(new Date(), 'YY-MM-DD hh:mm:ss') |
| | | return currtime |
| | | } |
| | | |
| | | } |
| | |
| | | import { ALL, Body, Get, Inject, Post, Provide, Query } from '@midwayjs/decorator'; |
| | | import { CoolController, BaseController } from '@cool-midway/core'; |
| | | import { Colletmeta } from '../../entity/colletmeta'; |
| | | // import { ColletmetaService } from '../../service/colletmeta'; |
| | | // import { ColletmetaService } from '../../service/'; |
| | | import { DataController } from '../../../base/controller/dataController'; |
| | | import { SocketHandler } from '../../../../../socket/socketHandle'; |
| | | import { RpcService } from '../../../base/service/dataapi/rpcservice'; |
| | | /** |
| | | * 监测元数据 |
| | | */ |
| | |
| | | export class ColletmetaController extends DataController { |
| | | // @Inject() |
| | | // colletmetaService: ColletmetaService; |
| | | |
| | | |
| | | @Inject() |
| | | socketHandler: SocketHandler |
| | | |
| | | @Inject() |
| | | rpcService: RpcService |
| | | |
| | | /** |
| | | * 接收设备监控消息 |
| | | */ |
| | | @Post('/getDeviceMsg', { summary: '接收设备消息' }) |
| | | async getDeviceMsg(@Query(ALL) params: any) { |
| | | this.dealMessage(params) |
| | | return this.ok(); |
| | | } |
| | | |
| | | /** |
| | | * 获得数据 |
| | |
| | | async postData(@Query(ALL) params: any) { |
| | | return this.ok(await this.dataService.getData(params)); |
| | | } |
| | | |
| | | |
| | | async dealMessage(params: any) { |
| | | // this.socketHandler.connection |
| | | console.log(params); |
| | | } |
| | | |
| | | } |
| | |
| | | import { ALL, Body, Get, Inject, Post, Provide, Query } from '@midwayjs/decorator'; |
| | | import { CoolController, BaseController } from '@cool-midway/core'; |
| | | import { Taskimmediately } from '../../entity/taskimmediately'; |
| | | // import { TaskimmediatelyService } from '../../service/taskimmediately'; |
| | | import { TaskimmediatelyService } from '../../../business/service/taskimmediately'; |
| | | import { DataController } from '../../../base/controller/dataController'; |
| | | import { SocketHandler } from '../../../../../socket/socketHandle'; |
| | | import { RpcService } from '../../../base/service/dataapi/rpcservice'; |
| | | import { randomUUID } from 'crypto'; |
| | | |
| | | const ProtoBufJs = require("protobufjs"); |
| | | const root = ProtoBufJs.loadSync("D:/21-dljc/road-env-server/server/models/aerial.proto"); |
| | | const CommandMessage = root.lookupType("CommandMessage"); |
| | | const command_req = CommandMessage.create(); |
| | | // const SYScommand = root.lookupType("SysCommand"); |
| | | // const SUBcommand = root.lookupType("SubCommand"); |
| | | |
| | | /** |
| | | * 即时任务记录 |
| | | */ |
| | | @Provide() |
| | | @CoolController({ |
| | | api: ['add', 'delete', 'update', 'list', 'page', 'info'], |
| | | api: ['delete', 'update', 'list', 'page', 'info'], |
| | | entity: Taskimmediately, |
| | | // service: TaskimmediatelyService, |
| | | // service: TaskimmediatelyService, |
| | | }) |
| | | export class TaskimmediatelyController extends DataController { |
| | | // @Inject() |
| | | // taskimmediatelyService: TaskimmediatelyService; |
| | | |
| | | @Inject() |
| | | taskimmediatelyService: TaskimmediatelyService; |
| | | |
| | | @Inject() |
| | | socketHandler: SocketHandler |
| | | |
| | | @Inject() |
| | | rpcService: RpcService |
| | | |
| | | private colletServiceUrl = "http://192.168.1.4:5000/api"; |
| | | |
| | | /** |
| | | * 下发设备指令消息 |
| | | */ |
| | | @Post('/sendMsgToDevice', { summary: '下发设备指令消息' }) |
| | | async sendMsgToDevice(@Query(ALL) params: any) { |
| | | |
| | | console.log(params); |
| | | return this.ok(await this.rpcService.remoteCall(this.colletServiceUrl, this.createCommand(params))) |
| | | } |
| | | |
| | | /** |
| | | * 下发设备指令消息 |
| | | */ |
| | | @Get('/sendMsgToDevice', { summary: '下发设备指令消息' }) |
| | | async sendMsg2Device(@Query(ALL) params: any) { |
| | | // this.socketHandler.connection |
| | | console.log(params); |
| | | return this.ok(await this.rpcService.remoteCall(this.colletServiceUrl, this.createCommand(params))) |
| | | // this.rpcService.remoteCall("http://192.168.1.4:5000/api", params); |
| | | } |
| | | |
| | | /** |
| | | * 获得数据 |
| | |
| | | async postData(@Query(ALL) params: any) { |
| | | return this.ok(await this.dataService.getData(params)); |
| | | } |
| | | |
| | | createCommand(params: any) { |
| | | |
| | | command_req.source = "testcommand" |
| | | command_req.generatetime = "2" |
| | | command_req.syscommand = root.SysCommand.CAMERA_COMMAND |
| | | command_req.subcommand = root.SubCommand.ONE_TIME_CAPTURE |
| | | command_req.targetclient = "bunker0.block0.device0" |
| | | command_req.returnserver = "server0" |
| | | command_req.taskuuid = randomUUID() |
| | | console.log(JSON.stringify(command_req)) |
| | | |
| | | // Verify the payload if necessary (i.e. when possibly incomplete or invalid) |
| | | let errMsg = CommandMessage.verify(command_req); |
| | | if (errMsg) |
| | | throw Error(errMsg); |
| | | |
| | | // let buffer = Buffer.from(command_req) |
| | | let buffer_ = CommandMessage.encode(command_req).finish(); |
| | | // let msg_ = CommandMessage.decode(buffer_); |
| | | return buffer_; |
| | | |
| | | } |
| | | |
| | | |
| | | } |
| | |
| | | import { Taskmonitor } from '../../entity/taskmonitor'; |
| | | // import { TaskmonitorService } from '../../service/taskmonitor'; |
| | | import { DataController } from '../../../base/controller/dataController'; |
| | | import { SocketHandler } from '../../../../../socket/socketHandle'; |
| | | import { RpcService } from '../../../base/service/dataapi/rpcservice'; |
| | | /** |
| | | * 监测任务 |
| | | */ |
| | |
| | | @CoolController({ |
| | | api: ['add', 'delete', 'update', 'list', 'page', 'info'], |
| | | entity: Taskmonitor, |
| | | service: RpcService, |
| | | // service: TaskmonitorService, |
| | | }) |
| | | export class TaskmonitorController extends DataController { |
| | | // @Inject() |
| | | // taskmonitorService: TaskmonitorService; |
| | | |
| | | @Inject() |
| | | socketHandler: SocketHandler |
| | | |
| | | @Inject() |
| | | rpcService: RpcService |
| | | |
| | | |
| | | |
| | | /** |
| | | * 任务下发 |
| | | */ |
| | | @Get('/add', { summary: '下发任务' }) |
| | | async add(@Query(ALL) params: any) { // 这个io对象对应 SocketHandler的命名空间 |
| | | // this.socketHandler.connection |
| | | this.socketHandler.clients.get("").emit('device is offline'); |
| | | this.rpcService.remoteCall(null,""); |
| | | |
| | | } |
| | | |
| | | /** |
| | | * 获得数据 |
| | | */ |
| | | @Get('/getdata', { summary: '数据接口' }) |
| | | async getData(@Query(ALL) params: any) { |
| | | async getData(@Query(ALL) params: any) { // 这个io对象对应 SocketHandler的命名空间 |
| | | // this.socketHandler.connection |
| | | this.socketHandler.clients.get("").emit('device is offline'); |
| | | return this.ok(await this.dataService.getData(params)); |
| | | } |
| | | /** |
| | |
| | | async postData(@Query(ALL) params: any) { |
| | | return this.ok(await this.dataService.getData(params)); |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | } |
| | |
| | | @Column({ comment: '周期任务', type: 'varchar', default: '', length: 255 }) |
| | | crontab_rule: string; |
| | | |
| | | @Column({ comment: '任务开始时间', type: 'datetime' }) |
| | | start_time: Date; |
| | | |
| | | @Column({ comment: '任务结束时间', type: 'datetime' }) |
| | | end_time: Date; |
| | | |
| New file |
| | |
| | | import { Provide } from '@midwayjs/decorator'; |
| | | import { BaseService } from '@cool-midway/core'; |
| | | import { InjectEntityModel } from '@midwayjs/orm'; |
| | | import { Repository } from 'typeorm'; |
| | | import { Basedeviceinfo } from '../entity/basedeviceinfo'; |
| | | import { Devicegroup } from '../entity/devicegroup'; |
| | | |
| | | /** |
| | | * 描述 |
| | | */ |
| | | @Provide() |
| | | export class TaskimmediatelyService extends BaseService { |
| | | @InjectEntityModel(Basedeviceinfo) |
| | | Basedeviceinfo: Repository<Basedeviceinfo>; |
| | | @InjectEntityModel(Devicegroup) |
| | | Devicegroup: Repository<Devicegroup>; |
| | | |
| | | /** |
| | | * 描述 |
| | | */ |
| | | // async add(param: any) { |
| | | // console.log(param, "dddddddd") |
| | | // const { logic_id } = param |
| | | // const devicegroup = this.Devicegroup |
| | | // await this.Devicegroup.insert(param) |
| | | // return await super.add(param) |
| | | // } |
| | | |
| | | |
| | | async delete(logic_id: any) { |
| | | console.log(this.ctx, "ddd") |
| | | await this.nativeQuery( |
| | | 'DELETE t_base_deviceinfo,t_base_device_group FROM t_base_deviceinfo,t_base_device_group WHERE t_base_deviceinfo.logic_id = t_base_device_group.logic_id AND t_base_deviceinfo.id in (?)', |
| | | [logic_id] |
| | | ); |
| | | await this.Basedeviceinfo.delete(logic_id) |
| | | |
| | | } |
| | | |
| | | |
| | | async page(query) { |
| | | |
| | | // const { keyWord, status, departmentIds = [] } = query; |
| | | // const permsDepartmentArr = await this.Basedeviceinfo.id( |
| | | // this.ctx.admin.userId |
| | | // ); // 部门权限 |
| | | const sql = ` |
| | | SELECT a.*,b.configurator FROM t_base_deviceinfo a,t_base_device_group b WHERE 1 = 1`; |
| | | return this.sqlRenderPage(sql, query); |
| | | } |
| | | } |
| | |
| | | // 文件上传 |
| | | file: { |
| | | // 文件路径前缀 本地上传模式下 有效 |
| | | // domain: 'http://127.0.0.1:8001', |
| | | domain: 'http://112.74.77.127:9100/hn', |
| | | domain: 'http://127.0.0.1:8001', |
| | | }, |
| | | // redis为插件名称 |
| | | redis: { |
| | | host: "127.0.0.1", |
| | | password: "", |
| | | port: 6379, |
| | | db: 0 |
| | | }, |
| | | socket: { |
| | | cors: { |
| | | // 这里可以写具体的地址如:http://127.0.0.1:8080 |
| | | origin: '*', |
| | | methods: ['GET', 'POST'], |
| | | }, |
| | | }, |
| | | } as CoolConfig; |
| | | |
| | |
| | | import * as swagger from '@midwayjs/swagger'; |
| | | // import * as wxpay from '@cool-midway/wxpay'; |
| | | // import * as oss from '@cool-midway/oss'; |
| | | // import * as redis from '@cool-midway/redis'; |
| | | // import * as queue from '@cool-midway/queue'; |
| | | import * as redis from '@cool-midway/redis'; |
| | | import * as queue from '@cool-midway/queue'; |
| | | // import * as alipay from '@cool-midway/alipay'; |
| | | // import * as socket from '@cool-midway/socket'; |
| | | import * as socket from '@cool-midway/socket'; |
| | | |
| | | @Configuration({ |
| | | |
| | | |
| | | // 注意组件顺序 cool 有依赖orm组件, 所以必须放在,orm组件之后 cool的其他组件必须放在cool 核心组件之后 |
| | | imports: [ |
| | | // 模板渲染 |
| | |
| | | // oss插件,需要到后台配置之后才有用,默认是本地上传 |
| | | // oss, |
| | | // 将缓存替换成redis |
| | | // redis, |
| | | // // 队列 |
| | | // queue, |
| | | redis, |
| | | // 队列 |
| | | queue, |
| | | // 微信支付 |
| | | //wxpay, |
| | | // 支付宝支付 |
| | | // alipay, |
| | | // socket |
| | | //socket, |
| | | socket, |
| | | // file, |
| | | ], |
| | | }) |
| New file |
| | |
| | | syntax = "proto3"; |
| | | |
| | | // enum SysCommand { |
| | | // UNKOWN_COMMAND = 0; // 未知命令 |
| | | // SYS_COMMAND = 1; // 系统命令 |
| | | // SENSOR_COMMAND = 2; // 传感器命令 |
| | | // FIVE_G_COMMAND = 3; // 通讯5G模块命令 |
| | | // CAMERA_COMMAND = 4; // 摄像头参数命令 |
| | | // IO_COMMAND = 5; // 外设IO口操作命令 |
| | | // SYS_PARAMS_COMMAND = 6; // 系统参数获取 |
| | | // WIFI_COMMAND = 7; // 设备WIFI参数设置 |
| | | // KERNEL_COMMAND = 8; // 核心计算参数设 |
| | | // DEVICE_COMMAND = 9; // 工作设备参数设置 |
| | | // MICRO_WAVE_COMMAND = 10; // 毫米波 |
| | | // } |
| | | |
| | | // enum SubCommand { |
| | | // option allow_alias = true; |
| | | |
| | | // UNKOWN_SUB_COMMAND = 0; // 未知子命令 |
| | | |
| | | // // 系统命令 |
| | | // POWER_ON_SUB_COMMAND = 1; // 开机 |
| | | // POWER_OFF_SUB_COMMAND = 2; // 关机 |
| | | |
| | | // // 传感器命令 |
| | | // SENSOR_INIT_SUB_COMMAND = 1; // 传感器初始化 |
| | | // SENSOR_REQURE_SUB_COMMAND = 2; // 传感器参数获取 |
| | | // RTK_SETTING_SUB_COMMAND = 3; // RTK外设参数设置 |
| | | // RTK_REQURE_SUB_COMMAND = 4; // RTK外设数据获取 |
| | | |
| | | // // 通讯5G模块命令 |
| | | // FIVE_G_INIT_SUB_COMMAND = 1; // 5G模块参数初始化 |
| | | // FIVE_G_SEND_IMAGE_SUB_COMMAND = 2; // 5G通讯图像数据发送 |
| | | // FIVE_G_REQURE_SUB_COMMAND = 3; // 5G通讯接收 |
| | | |
| | | // // 摄像头参数命令 |
| | | // CAMERA_NUMBER_SUB_COMMAND = 1; // 设备摄像头个数 |
| | | // CAMERA_RESOLUTION_SUB_COMMAND = 2; // 设备摄像头工作分辨率 |
| | | // CAMERA_FRAME_RATE_SUB_COMMAND = 3; // 摄像头工作帧率 |
| | | // CAMERA_OTHER_PARAMS_SUB_COMMAND = 4; // 摄像头工作其他参数 |
| | | |
| | | // // 外设IO口操作命令 |
| | | // CAMERA_DUST_REMOVAL_START_SUB_COMMAND = 1; // 摄像头除尘启动 |
| | | // CAMERA_CONTROL_START_SUB_COMMAND = 2; // 外设控制数据启动(18路控制) |
| | | |
| | | // // 系统参数获取 |
| | | // CPU_FREQUENCY_SUB_COMMAND = 1; // CPU主频工作数据 |
| | | // CPU_KERNAL_TEMP_SUB_COMMAND = 2; // CPU核心温度数据 |
| | | // CPU_BETTERY_DATA_SUB_COMMAND = 3; // 电池供电电量数据 |
| | | |
| | | // // 设备WIFI参数设置 |
| | | // WIFI_HOTSPOT_SETTING_SUB_COMMAND = 1; // WIFI热点设置 |
| | | // WIFI_HOTSPOT_START_STOP_SUB_COMMAND = 2; // WIFI热点开启和关闭 |
| | | |
| | | // // 核心计算参数设置 |
| | | // POINT_CLOUD_ACCURACY_SUB_COMMAND = 1; // 点云计算精度 |
| | | // SPLICING_PARAMS_SUB_COMMAND = 2; // 拼接参数 |
| | | // MAP_INTERFACE_PLATFORM_SUB_COMMAND = 3; // 地图接口平台 |
| | | // DATA_STORE_BACKUP_SUB_COMMAND = 4; // 数据存储备份 |
| | | |
| | | // // 工作设备参数设置 |
| | | // SYSTEM_TIMER_SUB_COMMAND = 1; // 系统工作定时 |
| | | // SYSTEM_COORD_HEIGHT_SUB_COMMAND = 2; // 工作区域坐标与高度 |
| | | // TRIGGER_CONDITION_SUB_COMMAND = 3; // 工作触发条件 |
| | | // GRAVITY_FAILURE_SUB_COMMAND = 4; // 重力加速度失效参数 |
| | | // NINE_AXIS_FAILURE_SUB_COMMAND = 5; // 九轴加速度失效参数 |
| | | |
| | | // // 毫米波 |
| | | // MICRO_WAVE_SUB_COMMAND = 1; // 毫米波 |
| | | // } |
| | | |
| | | // message DataField { |
| | | // int32 length = 1; // 数据长度 |
| | | // bytes data = 2; // 数据内容 |
| | | // int32 checksum = 3; // 校验码 |
| | | // } |
| | | |
| | | // message CapturedData { |
| | | // int64 capture_time = 1; // 采集时间 |
| | | // string capture_device =2; // 采集设备 |
| | | // int32 capture_port = 3; // 采集设备序号 |
| | | // DataField DataField = 4; |
| | | // string data_type = 5; // 数据类型 image udp |
| | | // } |
| | | |
| | | // message DataMessage{ |
| | | // int64 sending_time = 1; |
| | | // string sending_device = 2; |
| | | // string target_device = 3; |
| | | // CapturedData CapturedData = 5; |
| | | // } |
| | | |
| | | // message StateData { |
| | | // int64 state_time = 1; |
| | | // string state_device = 2; |
| | | // DataField DataField = 4; |
| | | // } |
| | | |
| | | // message StateMessage { |
| | | // int64 sending_time = 1; |
| | | // string sending_device = 2; |
| | | // string target_device = 3; |
| | | // CapturedData StatedData = 5; |
| | | // } |
| | | |
| | | // message CommandData { |
| | | // SysCommand SysCommand = 1; |
| | | // SubCommand SubCommand = 2; |
| | | // } |
| | | |
| | | // message CommandMessage { |
| | | // int64 sending_time = 1; |
| | | // string sending_device = 2; |
| | | // string target_device = 3; |
| | | // CommandData CommandData =4; |
| | | // } |
| | | |
| | | enum SysCommand{ |
| | | UNKOWN_COMMAND = 0; |
| | | CAMERA_COMMAND = 1; |
| | | MICROWAVE_COMMAND = 2; |
| | | DUSTCLEANER_COMMAND = 3; |
| | | |
| | | } |
| | | |
| | | enum SubCommand{ |
| | | UNKOWN_SUBCOMMAND = 0; |
| | | |
| | | // camera params |
| | | ONE_TIME_CAPTURE = 1; |
| | | |
| | | // microwave params |
| | | ONE_CIRCLE_SCAN = 2; |
| | | |
| | | // dust cleaner params |
| | | ONE_CLEAN_SCAN = 4; |
| | | |
| | | } |
| | | |
| | | |
| | | message CommandMessage{ |
| | | string source = 1; |
| | | string generatetime = 2; |
| | | SysCommand syscommand = 3; |
| | | SubCommand subcommand = 4; |
| | | string targetclient = 5; |
| | | string returnserver = 6; |
| | | string taskuuid = 7; |
| | | } |
| | | |
| | | message LogsMessage{ |
| | | string source = 1; |
| | | string timestamp = 2; |
| | | string context = 3; |
| | | optional string task_uuid = 4; |
| | | } |
| | | |
| | | |
| | | message ImagesMessage |
| | | { |
| | | string source = 1; |
| | | string timestamp = 2; |
| | | |
| | | message ImageItems |
| | | { |
| | | int32 length = 1; // 数据长度 |
| | | bytes data = 2; // 数据内容 |
| | | } |
| | | |
| | | repeated ImageItems Image = 3; |
| | | optional string task_uuid = 4; |
| | | } |
| | | |
| | | |
| | | |
| | | message PlysMessage |
| | | { |
| | | string source = 1; |
| | | string timestamp = 2; |
| | | |
| | | message PointCloudItem |
| | | { |
| | | int32 length = 1; |
| | | int32 rows = 2; |
| | | int32 cols = 3; |
| | | string order = 4; |
| | | string dtype = 5; |
| | | bytes data = 6; |
| | | |
| | | } |
| | | |
| | | repeated PointCloudItem Plydata = 3; |
| | | optional string task_uuid = 4; |
| | | |
| | | // enum ref_system |
| | | // { |
| | | // MICROWAVE_SYSTEM = 0; |
| | | // DEVICE_SYSTEM = 1; |
| | | // } |
| | | |
| | | // ref_system reference = 4 |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | // message MicroWaveMessage |
| | | // { |
| | | // int32 length = 1; // 数据长度 |
| | | // bytes data = 2; // 数据内容 |
| | | // } |
| | | |
| | | // message CommandRequest{ |
| | | |
| | | // } |
| | | |
| | | // message StateMessage{ |
| | | // string message_type = 1; |
| | | // int64 generate_time = 2; |
| | | // string generate_device = 3; |
| | | // string target_device = 4; |
| | | // string message_uuid = 5; |
| | | // string str_body = 6; |
| | | // } |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | // message RequestCommand { |
| | | // int32 sync_word = 1; // 同步字 |
| | | // string device_id = 2; // 设备ID |
| | | // SysCommand sys_command = 3; // 命令1 |
| | | // SubCommand sub_command = 4; // 命令2 |
| | | // DataField data1 = 5; // 数据1 |
| | | // DataField data2 = 6; // 数据2 |
| | | // int32 checksum = 7; // 校验码 |
| | | // } |
| | | |
| | | // enum ResponseState |
| | | // { |
| | | // SUCCESS = 0; // 成功 |
| | | // FAILURE = 1; // 失败 |
| | | // ABNORMAL = 2; // 异常 |
| | | // INFICIENT_POWER = 3; // 电量不足 |
| | | // OTHER = 4; // 其他 |
| | | // } |
| | | |
| | | // message ResponseCommand |
| | | // { |
| | | // string device_id = 1; // 设备ID |
| | | // SysCommand sys_command = 2; // 命令1 |
| | | // SubCommand sub_command = 3; // 命令2 |
| | | // ResponseState state = 4; // 响应状态 |
| | | // int32 data_length = 5; // 数据长度 |
| | | // bytes data = 6; // 数据 |
| | | // int32 checksum = 7; // 校验码 |
| | | // } |
| | | |
| | | |
| | | // // 服务端向采集端发送的主指令 |
| | | // enum ControlSysCommand { |
| | | // DUST_CLEANER_COMMAND = 0; |
| | | // } |
| | | |
| | | // // 服务端向采集端发送的子命令 |
| | | // enum ControlSubCommand { |
| | | // // dust cleaner sub commands |
| | | // DUST_CLEANER_ONETIME_CLEAN_SELF = 0; |
| | | // DUST_CLEANER_ONETIME_CLEAN_CAMERA = 1; |
| | | // DUST_CLEANER_CLOSE_PERIOD_CLEAN_SELF = 2; |
| | | // DUST_CLEANER_CLOSE_PERIOD_CLEAN_CAMERA = 3; |
| | | // DUST_CLEANER_PERIOD_CLEAN_SELF = 4; |
| | | // DUST_CLEANER_PERIOD_CLEAN_CAMERA = 5; |
| | | // } |
| | | |
| | | // // dust cleaner command message |
| | | // message DustCleanerMessage { |
| | | // uint32 period = 1; |
| | | // } |
| | | |
| | | // // 控制上位机消息 |
| | | // message ControllMessage { |
| | | // int32 sync_word = 1; // 同步字 |
| | | // ControlSysCommand sys_command = 3; // 主命令 |
| | | // ControlSubCommand sub_command = 4; // 子命令 |
| | | // DataField data = 5; // 数据 |
| | | // int32 checksum = 7; // 校验码 |
| | | // } |
| New file |
| | |
| | | import { Provide, Inject, Schedule, CommonSchedule } from '@midwayjs/decorator'; |
| | | import { Context } from 'egg'; |
| | | |
| | | @Provide() |
| | | @Schedule({ |
| | | interval: 2333, // 2.333s 间隔 |
| | | type: 'worker', // 指定某一个 worker 执行 |
| | | //cron: '0 0 */3 * * *', |
| | | }) |
| | | export class HelloCron implements CommonSchedule { |
| | | |
| | | @Inject() |
| | | ctx: Context; |
| | | |
| | | // 定时执行的具体任务 |
| | | async exec() { |
| | | this.ctx.logger.info(process.pid, 'hello'); |
| | | } |
| | | } |
| New file |
| | |
| | | const schedule = require('node-schedule'); |
| | | const axios = require('axios'); |
| | | |
| | | const ProtoBufJs = require("protobufjs"); |
| | | const root = ProtoBufJs.loadSync("D:/22-hn3d/hn3d/src/schedule/aerial.proto"); |
| | | const CommandMessage = root.lookupType("CommandMessage"); |
| | | const command_req = CommandMessage.create(); |
| | | var jsonData = '';//存储天气信息 |
| | | // 定义规则 |
| | | let rule = new schedule.RecurrenceRule(); |
| | | // rule.minute = [1,6,11,16,21,26,31,36,41,46,51,56] |
| | | rule.second = [58]; // 每隔 10 秒执行一次 |
| | | |
| | | let rule_task = new schedule.RecurrenceRule(); |
| | | // rule.minute = [1,6,11,16,21,26,31,36,41,46,51,56] |
| | | rule_task.second = [00]; // 每隔 10 秒执行一次 |
| | | |
| | | var periodTasklist = [] |
| | | |
| | | var payload = { source: "AwesomeString", syscommand: 1, subcommand: 2, generatetime: "2", targetclient:"111",returnserver:"#server#", taskuuid:"1234" }; |
| | | |
| | | // Verify the payload if necessary (i.e. when possibly incomplete or invalid) |
| | | var errMsg = CommandMessage.verify(payload); |
| | | if (errMsg) |
| | | throw Error(errMsg); |
| | | |
| | | // Create a new message |
| | | var message = CommandMessage.create(payload); // or use .fromObject if conversion is necessary |
| | | |
| | | // let buffer = Buffer.from(command_req) |
| | | // let buffer = CommandMessage.encode(message).finish(); |
| | | // let msg = CommandMessage.decode(buffer); |
| | | |
| | | |
| | | module.exports = { |
| | | async job_() { |
| | | // schedule.scheduleJob('5 * * * * *', async () => { |
| | | |
| | | // }); |
| | | }, |
| | | |
| | | }; |
| | | |
| | | schedule.scheduleJob(rule_task, async () => {//每分钟读取周期任务 并将任务分解执行 |
| | | // let res = httpGet('http://127.0.0.1:8001/admin/business/periodicsetting/getdata?bid=getPeriodTaskList'); |
| | | axios.get('http://127.0.0.1:8001/admin/business/periodicsetting/getdata?bid=getPeriodTaskList').then(response => { |
| | | periodTasklist = response.data.data; |
| | | console.log(periodTasklist) |
| | | }).catch(error => { |
| | | console.log(error); |
| | | }); |
| | | }); |
| | | |
| | | schedule.scheduleJob(rule, async () => {//每分钟读取周期任务 并将任务分解执行 |
| | | //http://192.168.1.4:5000/api |
| | | // Exemplary payload |
| | | var payload = { source: "AwesomeString", syscommand: 1, subcommand: 2, generatetime: "2", targetclient:"111",returnserver:"#server#", taskuuid:"1234" }; |
| | | |
| | | // Verify the payload if necessary (i.e. when possibly incomplete or invalid) |
| | | var errMsg = CommandMessage.verify(payload); |
| | | if (errMsg) |
| | | throw Error(errMsg); |
| | | |
| | | // Create a new message |
| | | var message = CommandMessage.create(payload); // or use .fromObject if conversion is necessary |
| | | |
| | | // let buffer = Buffer.from(command_req) |
| | | let buffer = CommandMessage.encode(message).finish(); |
| | | let msg = CommandMessage.decode(buffer); |
| | | console.log('-------step in-------------------------') |
| | | let urlstr = "http://192.168.1.4:5000/api"; |
| | | axios({ |
| | | method: 'post', |
| | | url: urlstr, |
| | | data: buffer, |
| | | headers: { |
| | | 'Content-Type': 'application/octet-stream', // 关键 |
| | | }, |
| | | }).then(res => { |
| | | console.log(res) |
| | | }).catch((error) => { |
| | | console.log(error) |
| | | }) |
| | | |
| | | |
| | | console.log('-----step over------------------------------------------------') |
| | | |
| | | }); |
| | | |
| | | |
| | | |
| | | // schedule.scheduleJob(rule, async () => {//每小时定时取天气数据 |
| | | // //https://devapi.heweather.net/v7/weather/now?location=101021700&key=495b433d21c84986a99c4ac52d42fd3b |
| | | // // 1. 检测当前是否已有天气数据 |
| | | // let sqlstr = `select count(1) as counter from t_d_weather_hour where TO_DAYS(now())=TO_DAYS(posttime) and HOUR(now())=hour(posttime) and posttime> date_sub(now(), interval 1 hour)`; |
| | | // let lastdata_times = await mysql.query_data(sqlstr, 'master', null); |
| | | // if( lastdata_times[0].counter > 0 ) { return ;} |
| | | // // 2.若当前无天气数据,重新抓取 |
| | | // let urlstr = "https://devapi.heweather.net/v7/weather/now?location=location_code&key=495b433d21c84986a99c4ac52d42fd3b"; |
| | | // sqlstr = `select * from t_s_weather_city order by code`; |
| | | // let data_rets = await mysql.query_data(sqlstr, 'master', null) |
| | | // for (let index = 0; index < data_rets.length; index++) { |
| | | // let element = data_rets[index]; |
| | | // axios.get(urlstr.replace('location_code', element.code)).then(response => { |
| | | // if(response.data.now) { |
| | | // let w = response.data.now; |
| | | // let posttime_ = w.obsTime.replace('T',' ').substr(0,13)+ ':00:00'; |
| | | // let sql_ = `insert into t_d_weather_hour (type,citycode,cityname,posttime,temp,feelsLike,icon,text,wind360,windDir,windScale,windSpeed,humidity,precip,pressure,vis,cloud,dew,responsedata) |
| | | // values ('${element.type}','${element.code}','${element.name}','${posttime_}','${w.temp}','${w.feelsLike}','${w.icon}','${w.text}','${w.wind360}', |
| | | // '${w.windDir}','${w.windScale}','${w.windSpeed}','${w.humidity}','${w.precip}','${w.pressure}','${w.vis}','${w.cloud}','${w.dew}','${JSON.stringify(response.data)}' |
| | | // )`; |
| | | // mysql.query_data(sql_, 'master', null) |
| | | // } |
| | | // }).catch(error => { |
| | | // console.log(error); |
| | | // }); |
| | | // } |
| | | |
| | | // }); |
| | | |
| | | |
| | | // schedule.scheduleJob(rule, async () => {//每天定时更新天气数据 |
| | | // //https://devapi.qweather.com/v7/weather/3d?location=101021700&key=495b433d21c84986a99c4ac52d42fd3b |
| | | // // 1. 检测当前是否已有天气数据 |
| | | // let sqlstr = `select count(1) as counter from t_d_weather_day where TO_DAYS(now())=TO_DAYS(posttime)`; |
| | | // let lastdata_times = await mysql.query_data(sqlstr, 'master', null); |
| | | // if( lastdata_times[0].counter > 0 ) { return ;} |
| | | // // 2.若当前无天气数据,重新抓取 |
| | | // let urlstr = "https://devapi.qweather.com/v7/weather/3d?location=location_code&key=495b433d21c84986a99c4ac52d42fd3b"; |
| | | // sqlstr = `select * from t_s_weather_city order by code`; |
| | | // let data_rets = await mysql.query_data(sqlstr, 'master', null) |
| | | // for (let index = 0; index < data_rets.length; index++) { |
| | | // let element = data_rets[index]; |
| | | // axios.get(urlstr.replace('location_code', element.code)).then(response => { |
| | | // if(response.data.daily) { |
| | | // let w = response.data.daily[0]; |
| | | // let posttime_ = w.fxDate+ ' 00:00:00'; |
| | | // let sql_ = `insert into t_d_weather_day (type,citycode,cityname,posttime,iconNight,iconDay,humidity,precip,pressure,vis,cloud, |
| | | // moonPhase,moonPhaseIcon,moonrise,moonset,sunrise,sunset,tempMax,tempMin,textDay,textNight,uvIndex, |
| | | // wind360Day,windDirDay,wind360Night,windDirNight,windScaleDay,windScaleNight,windSpeedDay,windSpeedNight,responsedata) |
| | | // values ('${element.type}','${element.code}','${element.name}','${posttime_}','${w.iconNight}','${w.iconDay}','${w.humidity}','${w.precip}','${w.pressure}','${w.vis}', |
| | | // '${w.cloud}','${w.moonPhase}','${w.moonPhaseIcon}','${w.moonrise}','${w.moonset}','${w.sunrise}','${w.sunset}','${w.tempMax}','${w.tempMin}','${w.textDay}','${w.textNight}','${w.uvIndex}', |
| | | // '${w.wind360Day}','${w.windDirDay}','${w.wind360Night}','${w.windDirNight}','${w.windScaleDay}','${w.windScaleNight}','${w.windSpeedDay}','${w.windSpeedNight}', |
| | | // '${JSON.stringify(response.data)}' |
| | | // )`; |
| | | // mysql.query_data(sql_, 'master', null) |
| | | // } |
| | | // }).catch(error => { |
| | | // console.log(error); |
| | | // }); |
| | | // } |
| | | |
| | | // }); |
| | | |
| | | |
| | | // https://devapi.heweather.net/v7/weather/now?location=101021700&key=495b433d21c84986a99c4ac52d42fd3b |
| | | |
| | | |
| | | function httpGet(uri) { |
| | | console.log(uri); |
| | | axios.get(uri).then(response => { |
| | | console.log(response.data); |
| | | return response.data; |
| | | }).catch(error => { |
| | | console.log(error); |
| | | }); |
| | | } |
| | | |
| | | function httpPost(uri, postdata) { |
| | | // let data = { |
| | | // name: 'John Doe', |
| | | // job: 'Content Writer' |
| | | // }; |
| | | axios.post(uri, postdata).then((res) => { |
| | | return res.data; |
| | | console.log(`Status: ${res.status}`); |
| | | console.log('Body: ', res.data); |
| | | }).catch((err) => { |
| | | console.error(err); |
| | | }); |
| | | } |
| New file |
| | |
| | | import { EntityModel } from '@midwayjs/orm'; |
| | | import { BaseEntity } from '@cool-midway/core'; |
| | | import { Column, Index } from 'typeorm'; |
| | | |
| | | /** |
| | | * 系统日志 |
| | | */ |
| | | @EntityModel('t_sys_user_chat') |
| | | export class ChatUserEntity extends BaseEntity { |
| | | @Index() |
| | | @Column({ comment: '用户ID', nullable: true, type: 'bigint' }) |
| | | userId: number; |
| | | |
| | | @Index() |
| | | @Column({ comment: '行为', length: 100 }) |
| | | action: string; |
| | | |
| | | @Index() |
| | | @Column({ comment: '内容', length: 100 }) |
| | | chatmsg: string; |
| | | |
| | | @Index() |
| | | @Column({ comment: 'ip', nullable: true, length: 50 }) |
| | | ip: string; |
| | | |
| | | @Index() |
| | | @Column({ comment: 'ip地址', nullable: true, length: 50 }) |
| | | ipAddr: string; |
| | | |
| | | @Column({ comment: '参数', nullable: true, type: 'text' }) |
| | | params: string; |
| | | } |
| New file |
| | |
| | | import { Config, Provide, Scope, ScopeEnum } from '@midwayjs/decorator'; |
| | | import { InjectEntityModel } from '@midwayjs/orm'; |
| | | import { CoolSocket, SocketEnvent } from '@cool-midway/socket'; |
| | | import { Socket } from 'socket.io'; |
| | | // import { ChatUserEntity } from '../entity/user'; |
| | | import { Repository } from 'typeorm'; |
| | | |
| | | import * as jwt from 'jsonwebtoken'; |
| | | |
| | | /** |
| | | * socket的事件 |
| | | */ |
| | | @Provide() |
| | | @Scope(ScopeEnum.Singleton) |
| | | @CoolSocket() // 支持设置命名空间 如:@CoolSocket('/test') |
| | | export class SocketHandler { |
| | | // 获得模块的配置信息 |
| | | @Config('module.chat.jwt') |
| | | jwtConfig; |
| | | |
| | | public clients: Map<String, Socket>; |
| | | |
| | | // @InjectEntityModel(ChatUserEntity) |
| | | // chatUserEntity: Repository<ChatUserEntity>; |
| | | |
| | | /** |
| | | * 连接成功 |
| | | * @param data |
| | | */ |
| | | @SocketEnvent() |
| | | async connection(socket: Socket) { |
| | | // console.log('socket事件', socket.id, socket.handshake.query); |
| | | // console.log('socket事件', socket.id, socket.handshake); |
| | | console.log(socket); |
| | | this.clients.set(socket.id, socket) |
| | | const { token } = socket.handshake.query; |
| | | console.log('-----------------------------------------------------------------------------------------------------------------------') |
| | | console.log(token) |
| | | // let tokenInfo; |
| | | // try { |
| | | // // eslint-disable-next-line @typescript-eslint/ban-ts-comment |
| | | // // @ts-ignore |
| | | // tokenInfo = jwt.verify(token, this.jwtConfig.secret); |
| | | // } catch (error) { |
| | | // // 如果验证不通过则断开连接 |
| | | // socket.emit('comm', '校验失效'); |
| | | // socket.disconnect(); |
| | | // return; |
| | | // } |
| | | socket.on('disconnect', eventSocket => { |
| | | this.clients.delete(socket.id) |
| | | console.log('断开连接'); |
| | | }); |
| | | |
| | | |
| | | socket.on('msg', msg => { |
| | | console.log('客户端消息', msg); |
| | | socket.emit('data', 're:'+msg.op +" "+ msg.deviceid) |
| | | |
| | | }); |
| | | |
| | | socket.on('devicelog',msg => { |
| | | //解析终端上报的状态消息 |
| | | |
| | | //入库 |
| | | |
| | | //推送到前端 |
| | | socket.broadcast.emit(''); |
| | | }); |
| | | |
| | | } |
| | | |
| | | /** |
| | | * 连接成功 |
| | | * @param data |
| | | */ |
| | | @SocketEnvent() |
| | | async broadcast(socket: Socket) { |
| | | |
| | | //推送到前端 |
| | | socket.broadcast.emit(''); |
| | | |
| | | } |
| | | |
| | | } |