package com.zy.asrs.task.handler; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.baomidou.mybatisplus.plugins.Page; import com.zy.asrs.entity.ApiLog; import com.zy.asrs.service.ApiLogService; import com.zy.asrs.task.AbstractHandler; import com.zy.asrs.task.core.ReturnT; import com.zy.common.utils.DingDingPush; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.interceptor.TransactionAspectSupport; @Slf4j @Service @Transactional public class ExceptionNoticeHandler extends AbstractHandler { @Autowired private ApiLogService apiLogService; @Transactional public ReturnT start() { try { EntityWrapper wrapper = new EntityWrapper<>(); wrapper.eq("result", 0).isNull("memo").orderBy("create_time", false); Page page = apiLogService.selectPage(new Page<>(1, 1), wrapper); if (page.getRecords() != null && !page.getRecords().isEmpty()) { ApiLog item = page.getRecords().get(0); StringBuilder sb = new StringBuilder(); sb.append("异常告警-ERROR").append("\n"); sb.append("时间: ").append(item.getCreateTime$()).append("\n"); sb.append("接口: ").append(nvl(item.getNamespace())).append(" ").append(nvl(item.getUrl())).append("\n"); sb.append("相关信息: ").append(nvl(item.getClientIp())).append("\n"); sb.append("请求: ").append(cut(nvl(item.getRequest()), 500)).append("\n"); sb.append("响应: ").append(cut(nvl(item.getResponse()), 500)).append("\n"); DingDingPush.send(sb.toString()); item.setMemo("PUSHED"); apiLogService.updateById(item); } } catch (Exception e) { e.printStackTrace(); TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return FAIL.setMsg(e.getMessage()); } return SUCCESS; } private String nvl(String s) { return s == null ? "" : s; } private String cut(String s, int max) { if (s == null) { return ""; } return s.length() > max ? s.substring(0, max) : s; } }