package com.mes.device.mapper;
|
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
import com.mes.device.entity.DeviceStatus;
|
import org.apache.ibatis.annotations.Mapper;
|
import org.apache.ibatis.annotations.Param;
|
import org.apache.ibatis.annotations.Select;
|
import org.apache.ibatis.annotations.Update;
|
|
import java.util.Date;
|
import java.util.List;
|
|
/**
|
* 设备状态Mapper
|
*/
|
@Mapper
|
public interface DeviceStatusMapper extends BaseMapper<DeviceStatus> {
|
|
/**
|
* 根据设备ID获取最新的设备状态
|
*/
|
@Select("SELECT * FROM device_status WHERE device_id = #{deviceId} " +
|
"ORDER BY id DESC LIMIT 1")
|
DeviceStatus getLatestByDeviceId(@Param("deviceId") String deviceId);
|
|
/**
|
* 更新设备状态(更新最新记录)
|
*/
|
@Update("UPDATE device_status ds1 " +
|
"INNER JOIN (" +
|
" SELECT MAX(id) as max_id FROM device_status WHERE device_id = #{deviceId}" +
|
") ds2 ON ds1.id = ds2.max_id " +
|
"SET ds1.status = #{status}, ds1.last_heartbeat = #{lastHeartbeat} " +
|
"WHERE ds1.device_id = #{deviceId}")
|
int updateLatestStatus(@Param("deviceId") String deviceId,
|
@Param("status") String status,
|
@Param("lastHeartbeat") Date lastHeartbeat);
|
|
/**
|
* 根据设备ID列表获取最新的设备状态
|
*/
|
@Select("<script>" +
|
"SELECT ds1.* FROM device_status ds1 " +
|
"INNER JOIN (" +
|
" SELECT device_id, MAX(id) as max_id " +
|
" FROM device_status " +
|
" WHERE device_id IN " +
|
" <foreach collection='deviceIds' item='deviceId' open='(' separator=',' close=')'>" +
|
" #{deviceId}" +
|
" </foreach>" +
|
" GROUP BY device_id" +
|
") ds2 ON ds1.device_id = ds2.device_id AND ds1.id = ds2.max_id" +
|
"</script>")
|
List<DeviceStatus> getLatestByDeviceIds(@Param("deviceIds") List<String> deviceIds);
|
}
|