package com.battery.business.mapper; import java.util.Date; import java.util.List; import org.apache.ibatis.annotations.Param; import com.battery.business.domain.TDeviceIngestRecord; import com.battery.business.domain.vo.TDeviceIngestChannel; /** * 推式来源落地表的读写:接收端点写入厂商原始行,适配器读回统一观测(ADR-0065)。 * *
写入一律用 insert ignore 与来源行身份唯一键:重复推送不改动既有事实,
* 由调用方比较内容摘要判定"同内容重复"与"同身份不同内容"。
*/
public interface TDeviceIngestRecordMapper
{
int insertIngestRecord(TDeviceIngestRecord record);
/** 心跳行按来源唯一,用 upsert 覆盖接收时间:它承载"取数程序还在推"这一条事实。 */
int upsertHeartbeat(TDeviceIngestRecord record);
/**
* 拓扑行是**声明**而不是设备事实,按来源通道唯一并刷新声明内容:
* 重复上报补上来源自己的通道号时不追加新行,也不需要把已声明过的通道清掉重来。
* 设备数据行(SAMPLE)仍然只追加、不改写。
*/
int upsertTopology(TDeviceIngestRecord record);
/** 返回该来源行已落库的内容摘要(小写十六进制);没有这一行时为空。 */
String selectIngestRecordHashByKey(@Param("adapterCode") String adapterCode,
@Param("payloadKind") String payloadKind, @Param("recordKey") String recordKey);
/** 该来源最近一次收到推送的时间;从未收到推送时为空。 */
Date selectHeartbeatAt(@Param("adapterCode") String adapterCode);
/** 拓扑上报声明的通道清单,每条附带其最近一次采样行的设备时间。 */
List 推式来源没有设备侧工步层,工步与循环由这些采样行按「来源库 + 循环号 + 工步号」分段推导
* (ADR-0067);读取范围限于一个来源库,也就是一次厂商测试,不随落地表无限增长。
*/
List