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;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
|
||||
import com.zjyr.beidouservice.common.impl.BeidouAdapterTypeName;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
|
@ -18,8 +16,6 @@ import javax.persistence.Table;
|
|||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Builder
|
||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||
@JsonPropertyOrder(alphabetic = true)
|
||||
@Table(name = "control_device")
|
||||
@NameStyle(Style.normal)
|
||||
public class ControlDevice {
|
||||
|
|
|
@ -1,7 +1,5 @@
|
|||
package com.zjyr.beidouservice.pojo.entry;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
|
@ -17,8 +15,6 @@ import javax.persistence.Table;
|
|||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Builder
|
||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||
@JsonPropertyOrder(alphabetic = true)
|
||||
@Table(name = "sonsor_data")
|
||||
@NameStyle(Style.normal)
|
||||
public class ControlDeviceType {
|
||||
|
|
|
@ -18,15 +18,13 @@ import javax.persistence.Table;
|
|||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Builder
|
||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||
@JsonPropertyOrder(alphabetic = true)
|
||||
@Table(name = "sonsor_data")
|
||||
@NameStyle(Style.normal)
|
||||
public class SensorData {
|
||||
@Id
|
||||
@KeySql(useGeneratedKeys = true)
|
||||
private Long id;
|
||||
private Integer deviceId;
|
||||
private Long deviceId;
|
||||
private SensorControlTunnelName channelType;
|
||||
private Integer command;
|
||||
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.binary.ControllerStatus;
|
||||
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.BaidouAdapterService;
|
||||
import com.zjyr.beidouservice.service.SensorDataService;
|
||||
import com.zjyr.beidouservice.service.SensorTaskService;
|
||||
import io.netty.channel.Channel;
|
||||
import jakarta.annotation.Nonnull;
|
||||
import jakarta.annotation.Resource;
|
||||
|
@ -31,7 +33,6 @@ import static com.zjyr.beidouservice.common.impl.SocketEventName.SOCKET_EVT_CONN
|
|||
|
||||
@Service
|
||||
@Slf4j
|
||||
|
||||
public class BaidouSocketAdapterServiceImpl<T extends ApplicationEvent> implements BaidouAdapterService, ApplicationListener<T> {
|
||||
|
||||
private final ConcurrentHashMap<Long, ControlAdapterSocketCtx> ctxMap = new ConcurrentHashMap<>();
|
||||
|
@ -44,6 +45,9 @@ public class BaidouSocketAdapterServiceImpl<T extends ApplicationEvent> implemen
|
|||
@Resource
|
||||
SensorDataService sensorDataService;
|
||||
|
||||
@Resource
|
||||
SensorTaskService sensorTaskService;
|
||||
|
||||
@Resource
|
||||
private TcpServer tcpServer;
|
||||
|
||||
|
@ -72,6 +76,11 @@ public class BaidouSocketAdapterServiceImpl<T extends ApplicationEvent> implemen
|
|||
public void onApplicationEvent(@Nonnull T evtContent) {
|
||||
if (evtContent instanceof SocketNotifyEvent event) {
|
||||
InetSocketAddress sa = (InetSocketAddress) event.getCtxChannel().remoteAddress();
|
||||
Long devId = Optional.ofNullable(getAdapterByAddr(sa.getAddress().getHostAddress()))
|
||||
.orElse(BeidouAdapterDevice.builder()
|
||||
.id(-1)
|
||||
.build())
|
||||
.getId();
|
||||
switch (event.getSocketEvent()) {
|
||||
case SOCKET_EVT_CONNECT, SOCKET_EVT_IDLE_TIMEOUT -> {
|
||||
sendCommond(event.getCtxChannel(), adapterProtocolService.createHeartProtocol());
|
||||
|
@ -113,14 +122,10 @@ public class BaidouSocketAdapterServiceImpl<T extends ApplicationEvent> implemen
|
|||
.telphoneStatus(status.getTelphoneStatus().getValue())
|
||||
.build();
|
||||
addNewBeidouAdapter(a);
|
||||
} /*else if (event.getEvtMessage() instanceof SensorCotrolAck ack) {
|
||||
log.info("+++{}, {}, {}, {}, {}",
|
||||
ack.getSendStatus(),
|
||||
ack.getBeidouStatus(),
|
||||
ack.getWirelessStatus(),
|
||||
ack.getTelphoneStatus(),
|
||||
HelperUtils.bytesToHexString(ack.getBeidouFreq()));
|
||||
}*/ else if (event.getEvtMessage() instanceof SensorStatusAck ack) {
|
||||
} else if (event.getEvtMessage() instanceof SensorTaskAck ack) {
|
||||
log.info("+++{}, {}, {}", ack.getTaskId(), ack.getAckTimestamp(), ack.getSensorStatus().size());
|
||||
sensorTaskService.addSensorTaskResponse(devId, ack);
|
||||
} else if (event.getEvtMessage() instanceof SensorStatusAck ack) {
|
||||
log.info("+++Total Sensors: {}", ack.getSensorStatus().size());
|
||||
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"
|
||||
parameterType="com.zjyr.beidouservice.pojo.entry.ControlDeviceType">
|
||||
INSERT IGNORE INTO control_device_type(type)
|
||||
INSERT IGNORE INTO control_dev_type(type)
|
||||
VALUES
|
||||
<foreach collection="typeLists" item="itme" separator=",">
|
||||
(#{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