package com.zy.integration.iot.publish.impl; import com.core.common.Cools; import com.zy.integration.iot.client.IotMqttClient; import com.zy.integration.iot.publish.IotPublishService; import com.zy.iot.constant.IotConstants; import com.zy.iot.entity.IotPublishRecord; import com.zy.iot.service.IotPublishRecordService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.Date; /** * IoT 统一发布器。 * 这里只处理 MQTT 传输结果,业务成功与否由指令处理阶段决定。 */ @Slf4j @Service public class IotPublishServiceImpl implements IotPublishService { @Autowired private IotPublishRecordService iotPublishRecordService; @Autowired private IotMqttClient iotMqttClient; /** * 立即发布指定记录;若网络发送失败,仅更新状态,后续由调度器重试。 */ @Override public void publishRecordNow(Long recordId) { if (recordId == null) { return; } IotPublishRecord record = iotPublishRecordService.selectById(recordId); if (record == null || Cools.isEmpty(record.getPublishTopic()) || Cools.isEmpty(record.getPublishPayload())) { return; } Date now = new Date(); try { iotMqttClient.publish(record.getPublishTopic(), record.getPublishPayload()); record.setPublishStatus(IotConstants.PUBLISH_STATUS_SUCCESS); record.setUpdateTime(now); iotPublishRecordService.updateById(record); } catch (Exception e) { record.setPublishStatus(IotConstants.PUBLISH_STATUS_FAILURE); record.setErrorMessage(truncate(e.getMessage(), 500)); record.setUpdateTime(now); iotPublishRecordService.updateById(record); log.error("publish iot message failed, recordId={}", recordId, e); } } private String truncate(String message, int maxLength) { if (message == null || message.length() <= maxLength) { return message; } return message.substring(0, maxLength); } }