fix:修改记录查询

hhk
HuangHuiKang 4 weeks ago
parent fa3e8d742b
commit 51a687530f

@ -33,4 +33,8 @@ public interface DeviceOperationRecordMapper extends BaseMapperX<DeviceOperation
IPage<DeviceTotalTimeRecordRespVO> deviceOperationPage(Page<DeviceTotalTimeRecordRespVO> page,@Param("pageReqVO") DeviceTotalTimeRecordReqVO pageReqVO);
List<DeviceOperationRecordDO> selectLatestByDeviceAndRule(@Param("deviceIds") List<Long> deviceIds, @Param("ruleCodes") List<String> ruleCodes);
}

@ -328,12 +328,14 @@ public class DeviceServiceImpl implements DeviceService {
.map(DeviceStatusEnum::getCode)
.collect(Collectors.toList());
List<DeviceOperationRecordDO> operationRecords = deviceOperationRecordMapper.selectList(
Wrappers.<DeviceOperationRecordDO>lambdaQuery()
.in(DeviceOperationRecordDO::getDeviceId, deviceIds)
.in(DeviceOperationRecordDO::getRule, ruleCodes)
.orderByDesc(DeviceOperationRecordDO::getCreateTime)
);
// List<DeviceOperationRecordDO> operationRecords = deviceOperationRecordMapper.selectList(
// Wrappers.<DeviceOperationRecordDO>lambdaQuery()
// .in(DeviceOperationRecordDO::getDeviceId, deviceIds)
// .in(DeviceOperationRecordDO::getRule, ruleCodes)
// .orderByDesc(DeviceOperationRecordDO::getCreateTime)
// );
List<DeviceOperationRecordDO> operationRecords = deviceOperationRecordMapper.selectLatestByDeviceAndRule(deviceIds,ruleCodes);
// 按 deviceId 分组,取最新一条
Map<Long, DeviceOperationRecordDO> latestRecordMap = operationRecords.stream()

@ -40,4 +40,37 @@
GROUP BY ide.id, ide.device_code, ide.device_name
ORDER BY ide.device_code
</select>
<select id="selectLatestByDeviceAndRule"
resultType="cn.iocoder.yudao.module.iot.dal.dataobject.deviceoperationrecord.DeviceOperationRecordDO">
SELECT *
FROM (
SELECT t.*,
ROW_NUMBER() OVER (
PARTITION BY t.device_id
ORDER BY t.create_time DESC
) AS rn
FROM iot_device_operation_record t
WHERE t.deleted = 0
<!-- deviceIds 条件 -->
<if test="deviceIds != null and deviceIds.size() > 0">
AND t.device_id IN
<foreach collection="deviceIds" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</if>
<!-- ruleCodes 条件 -->
<if test="ruleCodes != null and ruleCodes.size() > 0">
AND t.rule IN
<foreach collection="ruleCodes" item="rule" open="(" separator="," close=")">
#{rule}
</foreach>
</if>
) tmp
WHERE tmp.rn = 1
</select>
</mapper>
Loading…
Cancel
Save