package com.szwl.handle.response; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.qiniu.util.Auth; import com.szwl.constant.ConfigConsts; import com.szwl.constant.OperationType; import com.szwl.model.entity.MessageLog; import com.szwl.model.entity.TEquipment; import com.szwl.model.utils.PushUtils; import com.szwl.service.TEquipmentService; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; @Slf4j @Component public class LogMessageProcessor implements ResponseProcessor { @Resource private TEquipmentService equipmentService; private final ExecutorService sendExecutor = Executors.newSingleThreadExecutor(); // 独立发送线程 @Override public void process(MessageLog messageLog) { Integer statusCode = messageLog.getStatusCode(); if (statusCode == 200) { Integer direction = messageLog.getDirection(); String clientId = messageLog.getClientId(); String day = messageLog.getResponseContent(); // 查询设备 LambdaQueryWrapper query = Wrappers.lambdaQuery(); query.eq(TEquipment::getClientId, clientId); TEquipment equipment = equipmentService.getOne(query); if (equipment != null) { String kind = day + "-" + clientId; String key = "log/" + kind + ".txt"; // 生成Token Auth auth = Auth.create(ConfigConsts.QINIU_CLOUD_ACCESS_KEY, ConfigConsts.QINIU_CLOUD_SECRET_KEY); String upToken = auth.uploadToken(ConfigConsts.QINIU_CLOUD_BUCKET, key); // 生成发送消息 String message = PushUtils.buildJsonLog(OperationType.LOG.getCode(), kind, upToken, key).toString(); sendExecutor.execute(() -> { // 推送消息 try { // equipmentService.sendRemoteMessage(clientId, OperationType.LOG, message, equipment.getAdminId()); equipmentService.responseSendMessage(messageLog, message, equipment.getAdminId()); } catch (Exception e) { e.printStackTrace(); log.info("--发送消息失败:{}", e.getMessage()); } }); } } } @Override public String getSupportedOperationType() { return OperationType.LOG.getCode(); } }