Browse Source

init project

master
maochaoying 2 years ago
parent
commit
54c85cd161
  1. 4
      .env
  2. 2
      README.md
  3. 2
      package.json
  4. 21
      src/constant/command.type.js
  5. 13
      src/constant/err.type.js
  6. 101
      src/controller/gateway.controller.js
  7. 12
      src/controller/terminal.controller.js
  8. 80
      src/middleware/gateway.middleware.js
  9. 2
      src/model/account.model.js
  10. 29
      src/model/com.model.js
  11. 42
      src/model/gateway.model.js
  12. 28
      src/model/role.model.js
  13. 74
      src/model/terminal.model.js
  14. 61
      src/router/gateway.route.js
  15. 11
      src/router/terminal.route.js
  16. 21
      src/service/com.service.js
  17. 150
      src/service/gateway.service.js
  18. 75
      src/service/terminal.service.js
  19. 58
      src/tcp/controller/tcp.controller.js
  20. 40
      src/tcp/forwardCommand.js
  21. 5
      src/tcp/server.js
  22. 70
      src/test/tcpClient.js

4
.env

@ -15,7 +15,7 @@ MYSQL_HOST = localhost
MYSQL_PORT = 3306
MYSQL_USER = root
MYSQL_PWD = root
MYSQL_DB = solar_energy
MYSQL_DB = chicken_breeding
# salt
JWT_SECRET = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJsdJ9.eyJqdGkiOiJjYjc4M2I5Yi1kMGYxLTRjMWEtYmQyMC0zOTM'
JWT_SECRET = 'eyJ0e2223XAiOiJKV1Q33iLCJhbGciOiJsdJ9.eyJqd4GkiOiJjYjc4M2I5Yi1kMGYxLTRjMWEtYmQyMC0zOTM'

2
README.md

@ -1 +1 @@
# 智能太阳能服务端 Nodejs -> Koa
# 鸡管家养殖系统

2
package.json

@ -1,5 +1,5 @@
{
"name": "solar-energy-nodejs",
"name": "chicken-breeding-nodejs",
"version": "1.0.0",
"description": "",
"main": "index.js",

21
src/constant/command.type.js

@ -1,21 +0,0 @@
module.exports = {
// 重置网关名称 网关 -> 服务器
RESET_THE_GATEWAY_NAME: "ReceiptSetTheGatewayName",
// 设置网关名称 服务器 -> 网关
SET_THE_GATEWAY_NAME: "SetTheGatewayName",
// 全部注册 服务器 -> 网关
REGISTER_ALL_JUNCTION_BOXES: "CommandRegisterAllJunctionBoxes",
// 全部注册 网关 -> 服务器
RECEIPT_ALL_JUNCTION_BOXES: "ReceiptAllJunctionBoxes",
// 全部查询 服务器 -> 网关
QUERY_ALL_JUNCTION_BOXES: "CommandQueryAllJunctionBoxes",
// 全部查询 网关 -> 服务器
RECEIPT_QUERY_ALL_JUNCTION_BOXES: "ReceiptQueryAllJunctionBoxes",
// 单个控制 服务器 -> 网关
CONTROL_JUNCTION_BOX_SWITCH: "CommandControlJunctionBoxSwitch",
// 单个控制 网关 -> 服务器
RECEIPT_CONTROL_JUNCTION_BOX_SWITCH: "ReceiptControlJunctionBoxSwitch",
// 上传检测数据 网关 -> 服务器
JUNCTION_BOX_SWITCH_STATE_RECEIPT:
"command,getJunctionBoxSwitchsStateReceipt",
};

13
src/constant/err.type.js

@ -11,17 +11,4 @@ module.exports = {
tokenExpiredError: Response("40001", "token已经过期"),
noAuthorization: Response("40002", "Authorization头部为空"),
noAdminPermission: Response("40003", "没有超级管理员权限"),
gatewayFormatError: Response("50001", "传递网关信息不全"),
updateGatewayInfoError: Response("50002", "更新网关信息失败"),
getGatewayInfoError: Response("50003", "获取网关信息失败"),
addGatewayOneError: Response("50004", "新增网关信息失败"),
gatewayNameExistedError: Response("50005", "网关名称重复"),
getAllOnlineGateWayError: Response("50006", "查询所有在线网关失败"),
switchStateReceiptCommandError: Response(
"50007",
"上传监测数据command不正确"
),
saveTerminalInfoError: Response("50007", "保存接线盒信息错误"),
registerAllCommandError: Response("50008", "全部注册命令错误"),
queryAllCommandError: Response("50009", "全部查询命令错误"),
};

101
src/controller/gateway.controller.js

@ -1,101 +0,0 @@
const {
getGatewayInfo,
addGatewayOne,
updateGatewayInfo,
getAllOnlineGateWayInService,
saveOtherWatchDataList,
getTerminalInfoListByGatewayListService,
} = require('../service/gateway.service')
const Response = require('../utils/response')
const Request = require('../utils/request')
const {
addGatewayOneError,
saveTerminalInfoError,
} = require('../constant/err.type')
const { SET_THE_GATEWAY_NAME } = require('../constant/command.type')
const createClientToSendData = require('../tcp/client')
class GatewayController {
async addOrUpdateSingleGateway(ctx, next) {
const { TerminalName, TerminalID } = ctx.request.body
// 查询该网关是否存在
const gatewayInfo = await getGatewayInfo({ gateway_number: TerminalID })
let res = null
if (gatewayInfo) {
// 存在该网关则修改信息
if (gatewayInfo.gateway_name != TerminalName) {
res = await updateGatewayInfo(TerminalName, TerminalID)
}
} else {
// 不存在则新增
res = await addGatewayOne(TerminalName, TerminalID)
}
// 向网关发送5.3 设置网关名称指令
createClientToSendData(
Request(SET_THE_GATEWAY_NAME, { TerminalName, TerminalID }),
)
ctx.body = Response(0, '网关信息更新完毕', res)
}
async getAllOnlineGateWay(ctx, next) {
const { pageIndex, pageSize } = ctx.request.query
const res = await getAllOnlineGateWayInService(
pageIndex && parseInt(pageIndex),
pageSize && parseInt(pageSize),
)
ctx.body = Response(0, '查询成功', res)
}
async addOrUpdateWatchData(ctx, next) {
const { TerminalName, TerminalID, States } = ctx.request.body
// 查询该网关是否存在
try {
const gatewayInfo = await getGatewayInfo({ gateway_number: TerminalID })
let gatewayRes = null
if (gatewayInfo) {
// 存在该网关则修改信息
if (gatewayInfo.gateway_name != TerminalName) {
gatewayRes = await updateGatewayInfo(TerminalName, TerminalID)
}
} else {
// 不存在则新增
gatewayRes = await addGatewayOne(TerminalName, TerminalID)
}
} catch (error) {
ctx.app.emit('error', addGatewayOneError, ctx)
}
try {
const res = saveOtherWatchDataList(TerminalID, States)
ctx.body = Response(0, '更新网关及接线盒信息完毕', res)
} catch (error) {
ctx.app.emit('error', saveTerminalInfoError, ctx)
}
}
async registerAll(ctx, next) {
const { TerminalName, TerminalID, Command } = ctx.request.body
// 控制网关
createClientToSendData(Command, { TerminalName, TerminalID })
ctx.body = Response(0, '发送全部注册指令成功', null)
}
async queryAll(ctx, next) {
const { TerminalName, TerminalID, Command } = ctx.request.body
// 控制网关
createClientToSendData(Command, { TerminalName, TerminalID })
ctx.body = Response(0, '发送全部查询指令成功', null)
}
async getTerminalInfoListByGatewayList(ctx, next) {
const { gateway_id, terminal_status, pageIndex } = ctx.request.query
const res = await getTerminalInfoListByGatewayListService(
gateway_id,
terminal_status,
pageIndex,
)
ctx.body = Response(0, '查询接线盒信息成功', res)
}
}
module.exports = new GatewayController()

12
src/controller/terminal.controller.js

@ -1,12 +0,0 @@
const { updateTerminalSwitch } = require('../service/terminal.service')
const Response = require('../utils/response')
class TerminalController {
async updateTerminalSwitchState(ctx, next) {
const { switch_state, terminal_id } = ctx.request.body
const res = updateTerminalSwitch(switch_state, terminal_id)
ctx.body = Response(0, '更新接线盒通断状态成功', res)
}
}
module.exports = new TerminalController()

80
src/middleware/gateway.middleware.js

@ -1,80 +0,0 @@
const {
gatewayFormatError,
gatewayNameExistedError,
switchStateReceiptCommandError,
registerAllCommandError,
queryAllCommandError,
} = require("../constant/err.type");
const { getGatewayInfo } = require("../service/gateway.service");
const {
JUNCTION_BOX_SWITCH_STATE_RECEIPT,
QUERY_ALL_JUNCTION_BOXES,
REGISTER_ALL_JUNCTION_BOXES,
} = require("../constant/command.type");
// 检测网关参数是否传递正确
const gatewayValidator = async (ctx, next) => {
if (ctx.request.body) {
const { TerminalName, TerminalID } = ctx.request.body;
// 合法性
if (!TerminalID || !TerminalName) {
ctx.app.emit("error", gatewayFormatError, ctx);
return;
}
} else {
ctx.app.emit("error", gatewayFormatError, ctx);
return;
}
await next();
};
const isGatewayNameExisted = async (ctx, next) => {
const { TerminalName, TerminalID } = ctx.request.body;
const isGatewayNameExisted = await getGatewayInfo({
gateway_name: TerminalName,
});
if (isGatewayNameExisted) {
// 网关名称重复
if (TerminalID != isGatewayNameExisted.gateway_number) {
ctx.app.emit("error", gatewayNameExistedError, ctx);
return;
}
}
await next();
};
const verifyWatchCommandTrue = async (ctx, next) => {
const { Command } = ctx.request.body;
if (Command != JUNCTION_BOX_SWITCH_STATE_RECEIPT) {
ctx.app.emit("error", switchStateReceiptCommandError, ctx);
return;
}
await next();
};
const verifyRegisterCommandTrue = async (ctx, next) => {
const { Command } = ctx.request.body;
if (Command != REGISTER_ALL_JUNCTION_BOXES) {
ctx.app.emit("error", registerAllCommandError, ctx);
return;
}
await next();
};
const verifyQueryCommandTrue = async (ctx, next) => {
const { Command } = ctx.request.body;
if (Command != QUERY_ALL_JUNCTION_BOXES) {
ctx.app.emit("error", queryAllCommandError, ctx);
return;
}
await next();
};
module.exports = {
gatewayValidator,
isGatewayNameExisted,
verifyWatchCommandTrue,
verifyRegisterCommandTrue,
verifyQueryCommandTrue,
};

2
src/model/account.model.js

@ -2,7 +2,7 @@ const { DataTypes } = require("sequelize");
const seq = require("../db/seq");
const Account = seq.define("solar_account", {
const Account = seq.define("chicken_account", {
// id 会被sequelize自动创建, 管理
username: {
type: DataTypes.STRING,

29
src/model/com.model.js

@ -1,29 +0,0 @@
const { DataTypes } = require("sequelize");
const seq = require("../db/seq");
const Com = seq.define(
"solar_com",
{
// id 会被sequelize自动创建, 管理
com_number: {
type: DataTypes.STRING,
allowNull: false,
unique: true,
comment: "com口编号",
},
gateway_id: {
type: DataTypes.STRING,
allowNull: false,
comment: "网关id",
},
},
{
tableName: "solar_com",
}
);
// 强制同步数据库(创建数据表)
// Com.sync({ force: true });
module.exports = Com;

42
src/model/gateway.model.js

@ -1,42 +0,0 @@
const { DataTypes } = require("sequelize");
const seq = require("../db/seq");
const Gateway = seq.define(
"solar_gateway",
{
// id 会被sequelize自动创建, 管理
gateway_name: {
type: DataTypes.STRING(64),
allowNull: false,
unique: true,
comment: "网关名称",
},
is_online: {
type: DataTypes.BOOLEAN,
allowNull: false,
defaultValue: 1,
comment: "是否在线,0掉线,1在线",
},
gateway_number: {
type: DataTypes.STRING(64),
allowNull: false,
unique: true,
comment: "网关编号",
},
is_deleted: {
type: DataTypes.BOOLEAN,
defaultValue: 0,
allowNull: false,
comment: "是否在物理层面移除掉了该设备,0未移除,1已移除",
},
},
{
tableName: "solar_gateway",
}
);
// 强制同步数据库(创建数据表)
// Gateway.sync({ force: true });
module.exports = Gateway;

28
src/model/role.model.js

@ -1,28 +0,0 @@
const { DataTypes } = require("sequelize");
const seq = require("../db/seq");
const Role = seq.define(
"solar_role",
{
// id 会被sequelize自动创建, 管理
role_id: {
type: DataTypes.INTEGER,
allowNull: false,
comment: "角色id",
},
gateway_id: {
type: DataTypes.INTEGER,
allowNull: false,
comment: "网关id",
},
},
{
tableName: "solar_role",
}
);
// 强制同步数据库(创建数据表)
// Role.sync({ force: true });
module.exports = Role;

74
src/model/terminal.model.js

@ -1,74 +0,0 @@
const { DataTypes } = require("sequelize");
const seq = require("../db/seq");
const Terminal = seq.define(
"solar_terminal",
{
device_id: {
type: DataTypes.INTEGER,
allowNull: false,
unique: true,
comment: "接线盒的设备ID",
},
switch_state: {
type: DataTypes.BOOLEAN,
allowNull: false,
comment: "设备的开关状态,默认0关闭,1开启",
defaultValue: 0,
},
temperuature: {
type: DataTypes.INTEGER,
allowNull: false,
comment: "设备的温度,单位℃,精确到整数",
defaultValue: 0,
},
current: {
type: DataTypes.FLOAT(10, 1),
allowNull: false,
comment: "设备的电流,单位A,精确到小数点后一位",
defaultValue: 0,
},
voltage: {
type: DataTypes.FLOAT(10, 1),
allowNull: false,
comment: "设备的电压,单位V,精确到小数点后一位",
defaultValue: 0,
},
online_or_not: {
type: DataTypes.BOOLEAN,
allowNull: false,
comment: "接线盒是否在线,默认0不在线,1在线",
defaultValue: 1,
},
registration_info_match: {
type: DataTypes.BOOLEAN,
allowNull: false,
comment: "注册信息是否正确,默认0不正确,1正确",
defaultValue: 1,
},
gateway_id: {
type: DataTypes.STRING,
allowNull: false,
comment: "网关id",
},
com_id: {
type: DataTypes.STRING,
allowNull: false,
comment: "对应那个COM口",
},
rank: {
type: DataTypes.INTEGER,
allowNull: false,
comment: "当前终端在当前COM链条中的位置",
},
},
{
tableName: "solar_terminal",
}
);
// 强制同步数据库(创建数据表)
// Terminal.sync({ force: true });
module.exports = Terminal;

61
src/router/gateway.route.js

@ -1,61 +0,0 @@
const Router = require('koa-router')
const router = new Router({ prefix: '/gateway' })
const {
addOrUpdateSingleGateway,
getAllOnlineGateWay,
addOrUpdateWatchData,
registerAll,
queryAll,
getTerminalInfoListByGatewayList,
} = require('../controller/gateway.controller')
const { auth } = require('../middleware/auth.middleware')
const {
gatewayValidator,
isGatewayNameExisted,
verifyWatchCommandTrue,
verifyRegisterCommandTrue,
verifyQueryCommandTrue,
} = require('../middleware/gateway.middleware')
router.post(
'/addOrUpdateSingleGateway',
auth,
gatewayValidator,
isGatewayNameExisted,
addOrUpdateSingleGateway,
)
router.get('/list', auth, getAllOnlineGateWay)
router.post(
'/addOrUpdateWatchData',
auth,
gatewayValidator,
verifyWatchCommandTrue,
addOrUpdateWatchData,
)
router.get(
'/getTerminalInfoListByGatewayId',
auth,
getTerminalInfoListByGatewayList,
)
router.post(
'/allregister',
auth,
gatewayValidator,
verifyRegisterCommandTrue,
registerAll,
)
router.post(
'/allquery',
auth,
gatewayValidator,
verifyQueryCommandTrue,
queryAll,
)
module.exports = router

11
src/router/terminal.route.js

@ -1,11 +0,0 @@
const Router = require('koa-router')
const router = new Router({ prefix: '/terminal' })
const { auth } = require('../middleware/auth.middleware')
const {
updateTerminalSwitchState,
} = require('../controller/terminal.controller')
router.post('/updateState', auth, updateTerminalSwitchState)
module.exports = router

21
src/service/com.service.js

@ -1,21 +0,0 @@
const Com = require("../model/com.model");
class ComService {
async addComInfo(com_number, gateway_id) {
// 查询没有则添加
const whereOpt = {};
com_number && Object.assign(whereOpt, { com_number });
gateway_id && Object.assign(whereOpt, { gateway_id });
const findRes = await Com.findOne({
attributes: ["com_number", "gateway_id"],
where: whereOpt,
});
if (!findRes) {
const createRes = Com.create({
com_number,
gateway_id,
});
}
}
}
module.exports = new ComService();

150
src/service/gateway.service.js

@ -1,150 +0,0 @@
const Gateway = require('../model/gateway.model')
const {
updateGatewayInfoError,
getGatewayInfoError,
addGatewayOneError,
getAllOnlineGateWayError,
} = require('../constant/err.type')
const { addComInfo } = require('./com.service')
const { addTerminal } = require('./terminal.service')
const Terminal = require('../model/terminal.model')
class GatewayService {
async getGatewayInfo({ id, gateway_name, gateway_number }) {
try {
const whereOpt = {}
id && Object.assign(whereOpt, { id })
gateway_name && Object.assign(whereOpt, { gateway_name })
gateway_number && Object.assign(whereOpt, { gateway_number })
const res = await Gateway.findOne({
attributes: ['id', 'gateway_name', 'gateway_number'],
where: whereOpt,
})
return res ? res.dataValues : null
} catch (error) {
return ctx.app.exit('error', getGatewayInfoError, ctx)
}
}
async addGatewayOne(TerminalName, TerminalID) {
try {
const res = await Gateway.create({
gateway_name: TerminalName,
gateway_number: TerminalID,
})
return res ? res.dataValues : null
} catch (error) {
return ctx.app.exit('error', addGatewayOneError, ctx)
}
}
async updateGatewayInfo(TerminalName, TerminalID) {
try {
const res = await Gateway.update(
{
gateway_name: TerminalName,
},
{
where: {
gateway_number: TerminalID,
},
},
)
return res
} catch (error) {
return ctx.app.exit('error', updateGatewayInfoError, ctx)
}
}
async getAllOnlineGateWayInService(pageIndex = 1, pageSize = 10) {
try {
let count = await Gateway.count({
where: {
is_online: 1,
},
})
if (count != 0) {
const gatewayList = await Gateway.findAll({
where: {
is_online: 1,
},
limit: pageSize,
offset: (pageIndex - 1) * pageSize,
})
const res = gatewayList.map(item => item.dataValues)
return {
pageInfo: { pageIndex, pageSize, total: count },
list: res,
}
}
} catch (error) {
return ctx.app.exit('error', getAllOnlineGateWayError, ctx)
}
return
}
async saveOtherWatchDataList(gateway_id, states) {
// const { SwitchChannel, JunctionBoxs } = states || {};
// 存储com口编号和网关编号的对应关系
states &&
states.map(async item => {
const { SwitchChannel: com_number, JunctionBoxs: terminalList } =
item || {}
const comResult = addComInfo(com_number, gateway_id)
const rank = 1
terminalList &&
terminalList.map(t => {
const terminalResult = addTerminal({
...t,
com_number,
rank,
gateway_id,
})
})
})
return null
}
async getTerminalInfoListByGatewayListService(
gateway_id,
terminal_status = '0',
pageIndex = 1,
pageSize = 10,
) {
try {
let count = await Terminal.count({
where: {
gateway_id,
},
})
if (count != 0) {
// 需要根据terminal_status转换为对应的查询条件
let obj = { gateway_id }
if (terminal_status == '1') {
obj['online_or_not'] = 1
} else {
if (terminal_status == '2') {
obj['online_or_not'] = 0
}
if (terminal_status == '3') {
obj['registration_info_match'] = 0
}
}
console.log(pageIndex)
const terminalList = await Terminal.findAll({
where: obj,
limit: pageSize,
offset: (parseInt(pageIndex) - 1) * pageSize,
})
const res = terminalList.map(item => item.dataValues)
return {
pageInfo: { pageIndex, pageSize, total: count },
list: res || [],
}
}
} catch (error) {}
}
}
module.exports = new GatewayService()

75
src/service/terminal.service.js

@ -1,75 +0,0 @@
const Terminal = require('../model/terminal.model')
const createClientToSendData = require('../tcp/client')
class TerminalService {
async addTerminal({
DeviceID: device_id,
SwitchState: switch_state,
Temperuature: temperuature,
Current: current,
Voltage: voltage,
OnlineOrNot: online_or_not,
RegistrationInfoMatch: registration_info_match,
com_number: com_id,
rank,
gateway_id,
}) {
const findResult = await Terminal.findOne({
where: {
device_id,
},
})
if (findResult) {
const whereOpt = {}
switch_state && Object.assign(whereOpt, { switch_state })
temperuature && Object.assign(whereOpt, { temperuature })
current && Object.assign(whereOpt, { current })
voltage && Object.assign(whereOpt, { voltage })
online_or_not && Object.assign(whereOpt, { online_or_not })
registration_info_match &&
Object.assign(whereOpt, { registration_info_match })
com_id && Object.assign(whereOpt, { com_id })
gateway_id && Object.assign(whereOpt, { gateway_id })
rank && Object.assign(whereOpt, { rank })
const res = await Terminal.update(whereOpt, {
where: {
device_id,
},
})
return res
} else {
const res = await Terminal.create({
device_id,
switch_state,
temperuature,
current,
voltage,
online_or_not,
registration_info_match,
com_id,
rank,
gateway_id,
})
return res.dataValues
}
}
async updateTerminalSwitch(switch_state, terminal_id) {
const res = await Terminal.update(
{
switch_state,
},
{
where: {
id: terminal_id,
},
},
)
// 需要向网关发送通断指令。
// TODO
// createClientToSendData({})
return res
}
}
module.exports = new TerminalService()

58
src/tcp/controller/tcp.controller.js

@ -1,58 +0,0 @@
const {
getGatewayInfo,
addGatewayOne,
updateGatewayInfo,
saveOtherWatchDataList,
} = require("../../service/gateway.service");
const Response = require("../../utils/response");
const {
saveTerminalInfoError,
addGatewayOneError,
} = require("../../constant/err.type");
class TcpController {
// 5.1 终端建立TCP连接后上报终端名称
async addOrUpdateSingleGateway({ TerminalName, TerminalID }) {
// 查询该网关是否存在
const gatewayInfo = await getGatewayInfo({ gateway_number: TerminalID });
let res = null;
if (gatewayInfo) {
// 存在该网关则修改信息
if (gatewayInfo.gateway_name != TerminalName) {
res = await updateGatewayInfo(TerminalName, TerminalID);
}
} else {
// 不存在则新增
res = await addGatewayOne(TerminalName, TerminalID);
}
return Response(0, "网关信息更新完毕", res);
}
// 5.2 5min主动向服务器上传一次监测数据
async addOrUpdateWatchData({ TerminalName, TerminalID, States }) {
// 查询该网关是否存在
try {
const gatewayInfo = await getGatewayInfo({ gateway_number: TerminalID });
let gatewayRes = null;
if (gatewayInfo) {
// 存在该网关则修改信息
if (gatewayInfo.gateway_name != TerminalName) {
gatewayRes = await updateGatewayInfo(TerminalName, TerminalID);
}
} else {
// 不存在则新增
gatewayRes = await addGatewayOne(TerminalName, TerminalID);
}
} catch (error) {
return addGatewayOneError;
}
try {
const res = saveOtherWatchDataList(TerminalID, States);
return Response(0, "更新网关及接线盒信息完毕", res);
} catch (error) {
return saveTerminalInfoError;
}
}
}
module.exports = new TcpController();

40
src/tcp/forwardCommand.js

@ -1,40 +0,0 @@
const {
addOrUpdateSingleGateway,
addOrUpdateWatchData,
} = require("./controller/tcp.controller");
const {
JUNCTION_BOX_SWITCH_STATE_RECEIPT,
RESET_THE_GATEWAY_NAME,
RECEIPT_ALL_JUNCTION_BOXES,
RECEIPT_CONTROL_JUNCTION_BOX_SWITCH,
RECEIPT_QUERY_ALL_JUNCTION_BOXES,
} = require("../constant/command.type");
const forwardCommand = (command, data) => {
switch (command) {
case JUNCTION_BOX_SWITCH_STATE_RECEIPT:
// 5.2 5min主动向服务器上传一次监测数据
addOrUpdateWatchData(data);
break;
case RECEIPT_ALL_JUNCTION_BOXES:
// 5.4 全部注册
addOrUpdateWatchData(data);
break;
case RECEIPT_QUERY_ALL_JUNCTION_BOXES:
addOrUpdateWatchData(data);
break;
case RECEIPT_CONTROL_JUNCTION_BOX_SWITCH:
addOrUpdateWatchData(data);
break;
case RESET_THE_GATEWAY_NAME:
// 5.3 设置网关名称
addOrUpdateSingleGateway(data);
break;
default:
// 5.1 终端建立TCP连接后上报终端名称
addOrUpdateSingleGateway(data);
break;
}
};
module.exports = forwardCommand;

5
src/tcp/server.js

@ -1,15 +1,10 @@
const net = require("net");
const forwardCommand = require("./forwardCommand");
const { isJsonString } = require("../utils/common");
const server = net.createServer(function (socket) {
//监听data事件
socket.on("data", function (data) {
if (data.toString() && isJsonString(data.toString())) {
const { Command, ...res } = JSON.parse(data.toString());
// 对res进行处理并转发到相应的接口
// 根据不同的Command类型处理不同的数据
forwardCommand(Command, res);
}
});
socket.on("error", (err) => {

70
src/test/tcpClient.js

@ -1,70 +0,0 @@
// 模拟网关
const createClientToSendData = require("../tcp/client");
const addGateway = () => {
const data = {
MessageID: "xxxafdafd-adfasdfasd-fdafasdfas-fdadffasd",
TimePoint: 123124,
TerminalName: "北京北京昌平一号",
TerminalID: "AJKM-MBK3-9AQR-1OFD",
};
createClientToSendData(data);
};
const getJunctionBoxSwitchsStateReceipt = () => {
const data = {
MessageID: "xxxafdafd-adfasdfasd-fdafasdfas-fdadffasd",
TimePoint: 123124,
TerminalName: "北京北京昌平一2号",
TerminalID: "AJKM-MBK3-9AQR-1OFD",
Command: "command,getJunctionBoxSwitchsStateReceipt",
States: [
{
SwitchChannel: 3,
JunctionBoxs: [
{
DeviceID: 12,
SwitchState: true,
Temperuature: 18,
Current: 3.1,
Voltage: 55.2,
OnlineOrNot: true,
RegistrationInfoMatch: true,
},
],
},
{
SwitchChannel: 1,
JunctionBoxs: [
{
DeviceID: 13,
SwitchState: true,
Temperuature: 18,
Current: 3.1,
Voltage: 55.2,
OnlineOrNot: true,
RegistrationInfoMatch: true,
},
],
},
],
};
createClientToSendData(data);
};
// 5.3 设置网关名称
const setTheGatewayName = () => {
const data = {
MessageID: "xxxafdafd-adfasdfasd-fdafasdfas-fdadffasd",
TimePoint: 123124,
TerminalName: "北京北京昌平shi号",
TerminalID: "AJKM-MBK3-9AQR-1OFD",
Command: "SetTheGatewayName",
};
createClientToSendData(data);
};
// setTheGatewayName();
// getJunctionBoxSwitchsStateReceipt();
// addGateway();
Loading…
Cancel
Save