package com.dji.sample.manage.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.dji.sample.common.model.Pagination; import com.dji.sample.common.model.PaginationData; import com.dji.sample.component.mqtt.model.ChannelName; import com.dji.sample.component.mqtt.model.CommonTopicReceiver; import com.dji.sample.component.mqtt.model.MapKeyConst; import com.dji.sample.component.mqtt.model.TopicConst; import com.dji.sample.component.redis.RedisConst; import com.dji.sample.component.redis.RedisOpsUtils; import com.dji.sample.component.websocket.config.ConcurrentWebSocketSession; import com.dji.sample.component.websocket.model.BizCodeEnum; import com.dji.sample.component.websocket.model.CustomWebSocketMessage; import com.dji.sample.component.websocket.service.impl.SendMessageServiceImpl; import com.dji.sample.component.websocket.service.impl.WebSocketManageServiceImpl; import com.dji.sample.manage.dao.IDeviceHmsMapper; import com.dji.sample.manage.model.common.HmsJsonUtil; import com.dji.sample.manage.model.common.HmsMessage; import com.dji.sample.manage.model.dto.DeviceDTO; import com.dji.sample.manage.model.dto.DeviceHmsDTO; import com.dji.sample.manage.model.dto.TelemetryDTO; import com.dji.sample.manage.model.entity.DeviceHmsEntity; import com.dji.sample.manage.model.enums.HmsEnum; import com.dji.sample.manage.model.enums.UserTypeEnum; import com.dji.sample.manage.model.param.DeviceHmsQueryParam; import com.dji.sample.manage.model.receiver.DeviceHmsReceiver; import com.dji.sample.manage.model.receiver.HmsArgsReceiver; import com.dji.sample.manage.service.IDeviceHmsService; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.integration.annotation.ServiceActivator; import org.springframework.integration.mqtt.support.MqttHeaders; import org.springframework.messaging.MessageHeaders; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.StringUtils; import java.time.Instant; import java.time.LocalDateTime; import java.time.ZoneId; import java.util.*; import java.util.stream.Collectors; /** * @author sean * @version 1.1 * @date 2022/7/6 */ @Service @Transactional public class DeviceHmsServiceImpl implements IDeviceHmsService { @Autowired private IDeviceHmsMapper mapper; @Autowired private ObjectMapper objectMapper; @Autowired private RedisOpsUtils redisOps; @Autowired private SendMessageServiceImpl sendMessageService; @Autowired private WebSocketManageServiceImpl webSocketManageService; @Override @ServiceActivator(inputChannel = ChannelName.INBOUND_EVENTS_HMS) public void handleHms(CommonTopicReceiver receiver, MessageHeaders headers) { } @Override public PaginationData getDeviceHmsByParam(DeviceHmsQueryParam param) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper() .and(wrapper -> param.getDeviceSn().forEach(sn -> wrapper.eq(DeviceHmsEntity::getSn, sn).or())) .between(param.getBeginTime() != null && param.getEndTime() != null, DeviceHmsEntity::getCreateTime, param.getBeginTime(), param.getEndTime()) .eq(param.getUpdateTime() != null, DeviceHmsEntity::getUpdateTime, param.getUpdateTime()) .eq(param.getLevel() != null, DeviceHmsEntity::getLevel, param.getLevel()) .like(StringUtils.hasText(param.getMessage()) && HmsEnum.MessageLanguage.ZH.getLanguage().equals(param.getLanguage()), DeviceHmsEntity::getMessageZh, param.getMessage()) .like(StringUtils.hasText(param.getMessage()) && HmsEnum.MessageLanguage.EN.getLanguage().equals(param.getLanguage()), DeviceHmsEntity::getMessageEn, param.getMessage()) .orderByDesc(DeviceHmsEntity::getCreateTime); if (param.getPage() == null || param.getPageSize() == null) { param.setPage(1L); param.setPageSize(Long.valueOf(mapper.selectCount(queryWrapper))); } Page pagination = mapper.selectPage(new Page<>(param.getPage(), param.getPageSize()), queryWrapper); List deviceHmsList = pagination.getRecords().stream().map(this::entity2Dto).collect(Collectors.toList()); return new PaginationData(deviceHmsList, new Pagination(pagination)); } @Override public void updateUnreadHms(String deviceSn) { mapper.update(DeviceHmsEntity.builder().updateTime(System.currentTimeMillis()).build(), new LambdaUpdateWrapper() .eq(DeviceHmsEntity::getSn, deviceSn) .eq(DeviceHmsEntity::getUpdateTime, 0L)); redisOps.del(RedisConst.HMS_PREFIX + deviceSn); } private DeviceHmsDTO entity2Dto(DeviceHmsEntity entity) { if (entity == null) { return null; } return DeviceHmsDTO.builder() .bid(entity.getBid()) .tid(entity.getTid()) .createTime(LocalDateTime.ofInstant(Instant.ofEpochMilli(entity.getCreateTime()), ZoneId.systemDefault())) .updateTime(entity.getUpdateTime().intValue() == 0 ? null : LocalDateTime.ofInstant(Instant.ofEpochMilli(entity.getUpdateTime()), ZoneId.systemDefault())) .sn(entity.getSn()) .hmsId(entity.getHmsId()) .key(entity.getHmsKey()) .level(entity.getLevel()) .module(entity.getModule()) .messageEn(entity.getMessageEn()) .messageZh(entity.getMessageZh()) .build(); } }