1. 增加 Sensor task 数据库,服务以及协议解析
This commit is contained in:
parent
d97abd5e16
commit
4af0ab0f9e
|
@ -0,0 +1,16 @@
|
||||||
|
package com.zjyr.beidouservice.mapper;
|
||||||
|
|
||||||
|
import com.zjyr.beidouservice.pojo.entry.SensorTask;
|
||||||
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Mapper
|
||||||
|
public interface SensorTaskMapper {
|
||||||
|
List<SensorTask> selectAll();
|
||||||
|
|
||||||
|
int addNewSensorTaskData(@Param("sensor") SensorTask sensorTask);
|
||||||
|
|
||||||
|
int addNewSensorTaskDatas(@Param("taskLists") List<SensorTask> taskLists);
|
||||||
|
}
|
|
@ -1,7 +1,5 @@
|
||||||
package com.zjyr.beidouservice.pojo.entry;
|
package com.zjyr.beidouservice.pojo.entry;
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
|
||||||
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
|
|
||||||
import com.zjyr.beidouservice.common.impl.BeidouAdapterTypeName;
|
import com.zjyr.beidouservice.common.impl.BeidouAdapterTypeName;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Builder;
|
import lombok.Builder;
|
||||||
|
@ -18,8 +16,6 @@ import javax.persistence.Table;
|
||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
@Builder
|
@Builder
|
||||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
|
||||||
@JsonPropertyOrder(alphabetic = true)
|
|
||||||
@Table(name = "control_device")
|
@Table(name = "control_device")
|
||||||
@NameStyle(Style.normal)
|
@NameStyle(Style.normal)
|
||||||
public class ControlDevice {
|
public class ControlDevice {
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
package com.zjyr.beidouservice.pojo.entry;
|
package com.zjyr.beidouservice.pojo.entry;
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
|
||||||
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
|
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Builder;
|
import lombok.Builder;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
@ -17,8 +15,6 @@ import javax.persistence.Table;
|
||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
@Builder
|
@Builder
|
||||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
|
||||||
@JsonPropertyOrder(alphabetic = true)
|
|
||||||
@Table(name = "sonsor_data")
|
@Table(name = "sonsor_data")
|
||||||
@NameStyle(Style.normal)
|
@NameStyle(Style.normal)
|
||||||
public class ControlDeviceType {
|
public class ControlDeviceType {
|
||||||
|
|
|
@ -18,15 +18,13 @@ import javax.persistence.Table;
|
||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
@Builder
|
@Builder
|
||||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
|
||||||
@JsonPropertyOrder(alphabetic = true)
|
|
||||||
@Table(name = "sonsor_data")
|
@Table(name = "sonsor_data")
|
||||||
@NameStyle(Style.normal)
|
@NameStyle(Style.normal)
|
||||||
public class SensorData {
|
public class SensorData {
|
||||||
@Id
|
@Id
|
||||||
@KeySql(useGeneratedKeys = true)
|
@KeySql(useGeneratedKeys = true)
|
||||||
private Long id;
|
private Long id;
|
||||||
private Integer deviceId;
|
private Long deviceId;
|
||||||
private SensorControlTunnelName channelType;
|
private SensorControlTunnelName channelType;
|
||||||
private Integer command;
|
private Integer command;
|
||||||
private Integer startAddr;
|
private Integer startAddr;
|
||||||
|
|
|
@ -0,0 +1,30 @@
|
||||||
|
package com.zjyr.beidouservice.pojo.entry;
|
||||||
|
|
||||||
|
import com.zjyr.beidouservice.common.impl.TaskResultName;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import tk.mybatis.mapper.annotation.KeySql;
|
||||||
|
import tk.mybatis.mapper.annotation.NameStyle;
|
||||||
|
import tk.mybatis.mapper.code.Style;
|
||||||
|
|
||||||
|
import javax.persistence.Id;
|
||||||
|
import javax.persistence.Table;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
@Builder
|
||||||
|
@Table(name = "sensor_task")
|
||||||
|
@NameStyle(Style.normal)
|
||||||
|
public class SensorTask {
|
||||||
|
@Id
|
||||||
|
@KeySql(useGeneratedKeys = true)
|
||||||
|
private Long id;
|
||||||
|
private Integer taskId;
|
||||||
|
private Long sensorId;
|
||||||
|
private Long deviceId;
|
||||||
|
private TaskResultName taskResult;
|
||||||
|
private String reportTime;
|
||||||
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
package com.zjyr.beidouservice.service;
|
||||||
|
|
||||||
|
import com.zjyr.beidouservice.pojo.vo.binary.SensorTaskAck;
|
||||||
|
|
||||||
|
public interface SensorTaskService {
|
||||||
|
void addSensorTaskResponse(Long controlId, SensorTaskAck sensorTaskAck);
|
||||||
|
}
|
|
@ -10,9 +10,11 @@ import com.zjyr.beidouservice.pojo.po.BeidouAdapterDevice;
|
||||||
import com.zjyr.beidouservice.pojo.vo.ControlAdapterSocketCtx;
|
import com.zjyr.beidouservice.pojo.vo.ControlAdapterSocketCtx;
|
||||||
import com.zjyr.beidouservice.pojo.vo.binary.ControllerStatus;
|
import com.zjyr.beidouservice.pojo.vo.binary.ControllerStatus;
|
||||||
import com.zjyr.beidouservice.pojo.vo.binary.SensorStatusAck;
|
import com.zjyr.beidouservice.pojo.vo.binary.SensorStatusAck;
|
||||||
|
import com.zjyr.beidouservice.pojo.vo.binary.SensorTaskAck;
|
||||||
import com.zjyr.beidouservice.service.AdapterProtocolService;
|
import com.zjyr.beidouservice.service.AdapterProtocolService;
|
||||||
import com.zjyr.beidouservice.service.BaidouAdapterService;
|
import com.zjyr.beidouservice.service.BaidouAdapterService;
|
||||||
import com.zjyr.beidouservice.service.SensorDataService;
|
import com.zjyr.beidouservice.service.SensorDataService;
|
||||||
|
import com.zjyr.beidouservice.service.SensorTaskService;
|
||||||
import io.netty.channel.Channel;
|
import io.netty.channel.Channel;
|
||||||
import jakarta.annotation.Nonnull;
|
import jakarta.annotation.Nonnull;
|
||||||
import jakarta.annotation.Resource;
|
import jakarta.annotation.Resource;
|
||||||
|
@ -31,7 +33,6 @@ import static com.zjyr.beidouservice.common.impl.SocketEventName.SOCKET_EVT_CONN
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
@Slf4j
|
@Slf4j
|
||||||
|
|
||||||
public class BaidouSocketAdapterServiceImpl<T extends ApplicationEvent> implements BaidouAdapterService, ApplicationListener<T> {
|
public class BaidouSocketAdapterServiceImpl<T extends ApplicationEvent> implements BaidouAdapterService, ApplicationListener<T> {
|
||||||
|
|
||||||
private final ConcurrentHashMap<Long, ControlAdapterSocketCtx> ctxMap = new ConcurrentHashMap<>();
|
private final ConcurrentHashMap<Long, ControlAdapterSocketCtx> ctxMap = new ConcurrentHashMap<>();
|
||||||
|
@ -44,6 +45,9 @@ public class BaidouSocketAdapterServiceImpl<T extends ApplicationEvent> implemen
|
||||||
@Resource
|
@Resource
|
||||||
SensorDataService sensorDataService;
|
SensorDataService sensorDataService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
SensorTaskService sensorTaskService;
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private TcpServer tcpServer;
|
private TcpServer tcpServer;
|
||||||
|
|
||||||
|
@ -72,6 +76,11 @@ public class BaidouSocketAdapterServiceImpl<T extends ApplicationEvent> implemen
|
||||||
public void onApplicationEvent(@Nonnull T evtContent) {
|
public void onApplicationEvent(@Nonnull T evtContent) {
|
||||||
if (evtContent instanceof SocketNotifyEvent event) {
|
if (evtContent instanceof SocketNotifyEvent event) {
|
||||||
InetSocketAddress sa = (InetSocketAddress) event.getCtxChannel().remoteAddress();
|
InetSocketAddress sa = (InetSocketAddress) event.getCtxChannel().remoteAddress();
|
||||||
|
Long devId = Optional.ofNullable(getAdapterByAddr(sa.getAddress().getHostAddress()))
|
||||||
|
.orElse(BeidouAdapterDevice.builder()
|
||||||
|
.id(-1)
|
||||||
|
.build())
|
||||||
|
.getId();
|
||||||
switch (event.getSocketEvent()) {
|
switch (event.getSocketEvent()) {
|
||||||
case SOCKET_EVT_CONNECT, SOCKET_EVT_IDLE_TIMEOUT -> {
|
case SOCKET_EVT_CONNECT, SOCKET_EVT_IDLE_TIMEOUT -> {
|
||||||
sendCommond(event.getCtxChannel(), adapterProtocolService.createHeartProtocol());
|
sendCommond(event.getCtxChannel(), adapterProtocolService.createHeartProtocol());
|
||||||
|
@ -113,14 +122,10 @@ public class BaidouSocketAdapterServiceImpl<T extends ApplicationEvent> implemen
|
||||||
.telphoneStatus(status.getTelphoneStatus().getValue())
|
.telphoneStatus(status.getTelphoneStatus().getValue())
|
||||||
.build();
|
.build();
|
||||||
addNewBeidouAdapter(a);
|
addNewBeidouAdapter(a);
|
||||||
} /*else if (event.getEvtMessage() instanceof SensorCotrolAck ack) {
|
} else if (event.getEvtMessage() instanceof SensorTaskAck ack) {
|
||||||
log.info("+++{}, {}, {}, {}, {}",
|
log.info("+++{}, {}, {}", ack.getTaskId(), ack.getAckTimestamp(), ack.getSensorStatus().size());
|
||||||
ack.getSendStatus(),
|
sensorTaskService.addSensorTaskResponse(devId, ack);
|
||||||
ack.getBeidouStatus(),
|
} else if (event.getEvtMessage() instanceof SensorStatusAck ack) {
|
||||||
ack.getWirelessStatus(),
|
|
||||||
ack.getTelphoneStatus(),
|
|
||||||
HelperUtils.bytesToHexString(ack.getBeidouFreq()));
|
|
||||||
}*/ else if (event.getEvtMessage() instanceof SensorStatusAck ack) {
|
|
||||||
log.info("+++Total Sensors: {}", ack.getSensorStatus().size());
|
log.info("+++Total Sensors: {}", ack.getSensorStatus().size());
|
||||||
sensorDataService.addNewSensor(ack.getSensorStatus());
|
sensorDataService.addNewSensor(ack.getSensorStatus());
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,37 @@
|
||||||
|
package com.zjyr.beidouservice.service.impl;
|
||||||
|
|
||||||
|
import com.zjyr.beidouservice.mapper.SensorTaskMapper;
|
||||||
|
import com.zjyr.beidouservice.pojo.entry.SensorTask;
|
||||||
|
import com.zjyr.beidouservice.pojo.vo.binary.SensorTaskAck;
|
||||||
|
import com.zjyr.beidouservice.service.SensorTaskService;
|
||||||
|
import jakarta.annotation.Resource;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Service
|
||||||
|
@Slf4j
|
||||||
|
public class SensorTaskServiceImpl implements SensorTaskService {
|
||||||
|
@Resource
|
||||||
|
private SensorTaskMapper sensorTaskMapper;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addSensorTaskResponse(Long controlId, SensorTaskAck sensorTaskAck) {
|
||||||
|
List<SensorTask> sensorTasks = new ArrayList<>();
|
||||||
|
Date timeStamp = new Date(sensorTaskAck.getAckTimestamp() * 1000L);
|
||||||
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
||||||
|
|
||||||
|
for (var v : sensorTaskAck.getSensorStatus()) {
|
||||||
|
sensorTasks.add(SensorTask.builder().taskId(sensorTaskAck.getTaskId())
|
||||||
|
.deviceId(controlId)
|
||||||
|
.sensorId((long) v.getSensorId()).deviceId(0L).taskResult(
|
||||||
|
v.getTaskResult()).reportTime(sdf.format(timeStamp)).build());
|
||||||
|
}
|
||||||
|
|
||||||
|
sensorTaskMapper.addNewSensorTaskDatas(sensorTasks);
|
||||||
|
}
|
||||||
|
}
|
|
@ -13,7 +13,7 @@
|
||||||
|
|
||||||
<insert id="addDeviceTypes" useGeneratedKeys="true" keyProperty="id"
|
<insert id="addDeviceTypes" useGeneratedKeys="true" keyProperty="id"
|
||||||
parameterType="com.zjyr.beidouservice.pojo.entry.ControlDeviceType">
|
parameterType="com.zjyr.beidouservice.pojo.entry.ControlDeviceType">
|
||||||
INSERT IGNORE INTO control_device_type(type)
|
INSERT IGNORE INTO control_dev_type(type)
|
||||||
VALUES
|
VALUES
|
||||||
<foreach collection="typeLists" item="itme" separator=",">
|
<foreach collection="typeLists" item="itme" separator=",">
|
||||||
(#{itme.type})
|
(#{itme.type})
|
||||||
|
|
|
@ -0,0 +1,53 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
|
<mapper namespace="com.zjyr.beidouservice.mapper.SensorTaskMapper">
|
||||||
|
<resultMap id="sensor_task" type="com.zjyr.beidouservice.pojo.entry.SensorTask">
|
||||||
|
<id column="id" property="id"/>
|
||||||
|
<result column="taskId" property="taskId"/>
|
||||||
|
<result column="sensorId" property="sensorId"/>
|
||||||
|
<result column="deviceId" property="deviceId"/>
|
||||||
|
<result column="taskResult" property="taskResult"/>
|
||||||
|
<result column="reportTime" property="reportTime"/>
|
||||||
|
</resultMap>
|
||||||
|
|
||||||
|
<select id="selectAll" resultMap="sensor_task">
|
||||||
|
SELECT id,
|
||||||
|
taskId,
|
||||||
|
sensorId,
|
||||||
|
deviceId,
|
||||||
|
taskResult,
|
||||||
|
reportTime
|
||||||
|
FROM sensor_task
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<insert id="addNewSensorTaskData" useGeneratedKeys="true" keyProperty="id"
|
||||||
|
parameterType="com.zjyr.beidouservice.pojo.entry.SensorTask">
|
||||||
|
INSERT INTO sensor_task(taskId,
|
||||||
|
sensorId,
|
||||||
|
deviceId,
|
||||||
|
taskResult,
|
||||||
|
reportTime)
|
||||||
|
VALUES (#{sensor.taskId},
|
||||||
|
#{sensor.sensorId},
|
||||||
|
#{sensor.deviceId},
|
||||||
|
#{sensor.taskResult},
|
||||||
|
TIMESTAMP(#{sensor.reportTime}))
|
||||||
|
</insert>
|
||||||
|
|
||||||
|
<insert id="addNewSensorTaskDatas" useGeneratedKeys="true" keyProperty="id"
|
||||||
|
parameterType="com.zjyr.beidouservice.pojo.entry.SensorTask">
|
||||||
|
INSERT INTO sensor_task(taskId,
|
||||||
|
sensorId,
|
||||||
|
deviceId,
|
||||||
|
taskResult,
|
||||||
|
reportTime)
|
||||||
|
VALUES
|
||||||
|
<foreach collection="taskLists" item="itme" separator=",">
|
||||||
|
(#{itme.taskId},
|
||||||
|
#{itme.sensorId},
|
||||||
|
#{itme.deviceId},
|
||||||
|
#{itme.taskResult},
|
||||||
|
TIMESTAMP(#{itme.reportTime}))
|
||||||
|
</foreach>
|
||||||
|
</insert>
|
||||||
|
</mapper>
|
Loading…
Reference in New Issue