diff --git a/src/main/java/com/zjyr/beidouservice/mapper/SensorTaskMapper.java b/src/main/java/com/zjyr/beidouservice/mapper/SensorTaskMapper.java new file mode 100644 index 0000000..5070bb4 --- /dev/null +++ b/src/main/java/com/zjyr/beidouservice/mapper/SensorTaskMapper.java @@ -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 selectAll(); + + int addNewSensorTaskData(@Param("sensor") SensorTask sensorTask); + + int addNewSensorTaskDatas(@Param("taskLists") List taskLists); +} diff --git a/src/main/java/com/zjyr/beidouservice/pojo/entry/ControlDevice.java b/src/main/java/com/zjyr/beidouservice/pojo/entry/ControlDevice.java index ccf5864..3057841 100644 --- a/src/main/java/com/zjyr/beidouservice/pojo/entry/ControlDevice.java +++ b/src/main/java/com/zjyr/beidouservice/pojo/entry/ControlDevice.java @@ -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 { diff --git a/src/main/java/com/zjyr/beidouservice/pojo/entry/ControlDeviceType.java b/src/main/java/com/zjyr/beidouservice/pojo/entry/ControlDeviceType.java index e6305eb..26b9512 100644 --- a/src/main/java/com/zjyr/beidouservice/pojo/entry/ControlDeviceType.java +++ b/src/main/java/com/zjyr/beidouservice/pojo/entry/ControlDeviceType.java @@ -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 { diff --git a/src/main/java/com/zjyr/beidouservice/pojo/entry/SensorData.java b/src/main/java/com/zjyr/beidouservice/pojo/entry/SensorData.java index 3d5b65f..94eabec 100644 --- a/src/main/java/com/zjyr/beidouservice/pojo/entry/SensorData.java +++ b/src/main/java/com/zjyr/beidouservice/pojo/entry/SensorData.java @@ -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; diff --git a/src/main/java/com/zjyr/beidouservice/pojo/entry/SensorTask.java b/src/main/java/com/zjyr/beidouservice/pojo/entry/SensorTask.java new file mode 100644 index 0000000..771045d --- /dev/null +++ b/src/main/java/com/zjyr/beidouservice/pojo/entry/SensorTask.java @@ -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; +} diff --git a/src/main/java/com/zjyr/beidouservice/service/SensorTaskService.java b/src/main/java/com/zjyr/beidouservice/service/SensorTaskService.java new file mode 100644 index 0000000..7292459 --- /dev/null +++ b/src/main/java/com/zjyr/beidouservice/service/SensorTaskService.java @@ -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); +} diff --git a/src/main/java/com/zjyr/beidouservice/service/impl/BaidouSocketAdapterServiceImpl.java b/src/main/java/com/zjyr/beidouservice/service/impl/BaidouSocketAdapterServiceImpl.java index 1378a65..ffe1161 100644 --- a/src/main/java/com/zjyr/beidouservice/service/impl/BaidouSocketAdapterServiceImpl.java +++ b/src/main/java/com/zjyr/beidouservice/service/impl/BaidouSocketAdapterServiceImpl.java @@ -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 implements BaidouAdapterService, ApplicationListener { private final ConcurrentHashMap ctxMap = new ConcurrentHashMap<>(); @@ -44,6 +45,9 @@ public class BaidouSocketAdapterServiceImpl implemen @Resource SensorDataService sensorDataService; + @Resource + SensorTaskService sensorTaskService; + @Resource private TcpServer tcpServer; @@ -72,6 +76,11 @@ public class BaidouSocketAdapterServiceImpl 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 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()); } diff --git a/src/main/java/com/zjyr/beidouservice/service/impl/SensorTaskServiceImpl.java b/src/main/java/com/zjyr/beidouservice/service/impl/SensorTaskServiceImpl.java new file mode 100644 index 0000000..ec88878 --- /dev/null +++ b/src/main/java/com/zjyr/beidouservice/service/impl/SensorTaskServiceImpl.java @@ -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 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); + } +} diff --git a/src/main/resources/mappers/ControlDeviceType.xml b/src/main/resources/mappers/ControlDeviceType.xml index 1f5b677..ac2ae18 100644 --- a/src/main/resources/mappers/ControlDeviceType.xml +++ b/src/main/resources/mappers/ControlDeviceType.xml @@ -13,7 +13,7 @@ - INSERT IGNORE INTO control_device_type(type) + INSERT IGNORE INTO control_dev_type(type) VALUES (#{itme.type}) diff --git a/src/main/resources/mappers/SensorTask.xml b/src/main/resources/mappers/SensorTask.xml new file mode 100644 index 0000000..4db6f55 --- /dev/null +++ b/src/main/resources/mappers/SensorTask.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + INSERT INTO sensor_task(taskId, + sensorId, + deviceId, + taskResult, + reportTime) + VALUES (#{sensor.taskId}, + #{sensor.sensorId}, + #{sensor.deviceId}, + #{sensor.taskResult}, + TIMESTAMP(#{sensor.reportTime})) + + + + INSERT INTO sensor_task(taskId, + sensorId, + deviceId, + taskResult, + reportTime) + VALUES + + (#{itme.taskId}, + #{itme.sensorId}, + #{itme.deviceId}, + #{itme.taskResult}, + TIMESTAMP(#{itme.reportTime})) + + + \ No newline at end of file