1. 增加 Sensor task 数据库,服务以及协议解析

This commit is contained in:
HuangXin 2023-08-21 21:52:32 +08:00
parent d97abd5e16
commit 4af0ab0f9e
10 changed files with 159 additions and 21 deletions

View File

@ -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);
}

View File

@ -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 {

View File

@ -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 {

View File

@ -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;

View File

@ -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;
}

View File

@ -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);
}

View File

@ -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());
} }

View File

@ -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);
}
}

View File

@ -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})

View File

@ -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>