package com.ld.igds.warn.service; import com.bstek.bdf2.core.model.DefaultUser; import com.ld.igds.constant.BizType; import com.ld.igds.constant.Constant; import com.ld.igds.constant.NoticeType; import com.ld.igds.io.constant.OrderRespEnum; import com.ld.igds.models.MWarnConf; import com.ld.igds.warn.WarnUtils; import com.ld.igds.warn.data.WarnData; import com.ld.igds.websocket.WebSocketPacket; import com.ld.igds.websocket.WebSocketServer; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import java.util.Calendar; import java.util.Date; import java.util.List; import java.util.concurrent.Callable; /** * @Desc: 新增警告和通知作为异步处理方式 * @author: andy.jia * @update-time: 2023/2/10 17:54 */ @Slf4j public class WarnNoticeTask implements Callable { private CoreWarnServiceImpl coreWarnService; private WarnData warnData; private WarnUtils warnUtils; private String warnTag; private String interfaceId; public WarnNoticeTask() { super(); } public WarnNoticeTask(CoreWarnServiceImpl coreWarnService, WarnData warnData, String interfaceId, String warnTag, WarnUtils warnUtils) { super(); this.coreWarnService = coreWarnService; this.warnData = warnData; this.interfaceId = interfaceId; this.warnTag = warnTag; this.warnUtils = warnUtils; } @Override public String call() { //获取通知配置信息 MWarnConf conf = coreWarnService.getCacheWarnConf(warnData.getCompanyId(), warnData.getDeptId()); warnData.setNoticeResult("推送失败"); try { if (null == conf) { log.info("未获取到通知配置,不推送"); warnData.setRemark("未获取到通知配置"); coreWarnService.addWarn(warnData); return "SUCCESS"; } if (Constant.YN_N.equals(conf.getVal())) { log.info("警告通知未启用,不推送"); warnData.setRemark("警告通知未启用"); coreWarnService.addWarn(warnData); return "SUCCESS"; } //判断通知时段 Calendar calendar = Calendar.getInstance(); calendar.setTime(new Date()); int hour = calendar.get(Calendar.HOUR_OF_DAY); if (hour < conf.getStart() || conf.getEnd() < hour) { log.info("当前警告时间不在警告通知时段内,告警时段为:{}时,通知时段为:{}时~{}时", hour, conf.getStart(), conf.getEnd()); warnData.setRemark("当前警告时间不在警告通知时段内,告警时段为:" + hour + "时,通知时段为:" + conf.getStart() + "时~" + conf.getEnd() + "时"); coreWarnService.addWarn(warnData); return "SUCCESS"; } //系统模块警告开启 if (StringUtils.isNotEmpty(warnTag) && Constant.MODEL_SYS.equals(warnTag) && Constant.YN_Y.equals(conf.getSystemTag())) { warnData = noticeWarn(warnData, interfaceId, conf); coreWarnService.addWarn(warnData); return "SUCCESS"; } //粮情模块警告开启 if (StringUtils.isNotEmpty(warnTag) && Constant.MODEL_GRAIN.equals(warnTag) && Constant.YN_Y.equals(conf.getGrainTag())) { warnData = noticeWarn(warnData, interfaceId, conf); coreWarnService.addWarn(warnData); return "SUCCESS"; } //出入库模块警告开启 if (StringUtils.isNotEmpty(warnTag) && Constant.MODEL_INOUT.equals(warnTag) && Constant.YN_Y.equals(conf.getInoutTag())) { warnData = noticeWarn(warnData, interfaceId, conf); coreWarnService.addWarn(warnData); return "SUCCESS"; } //安防模块警告开启 if (StringUtils.isNotEmpty(warnTag) && Constant.MODEL_SECURITY.equals(warnTag) && Constant.YN_Y.equals(conf.getSecurityTag())) { warnData = noticeWarn(warnData, interfaceId, conf); coreWarnService.addWarn(warnData); return "SUCCESS"; } //数量监测模块警告开启 if (StringUtils.isNotEmpty(warnTag) && Constant.MODEL_QUANTITY.equals(warnTag) && Constant.YN_Y.equals(conf.getQuantityTag())) { warnData = noticeWarn(warnData, interfaceId, conf); coreWarnService.addWarn(warnData); return "SUCCESS"; } log.info("业务模块通知未启用,不推送"); warnData.setRemark("业务模块通知未启用"); coreWarnService.addWarn(warnData); return "SUCCESS"; } catch (Exception e) { log.error("-----推送异常-----,原因={}", e.toString()); //保存警告信息 coreWarnService.addWarn(warnData); return "SUCCESS"; } } /** * 不同方式通知警告 * * @param warnData * @param interfaceId * @param warnConf * @return */ private WarnData noticeWarn(WarnData warnData, String interfaceId, MWarnConf warnConf) { //默认系统推送 WebSocketPacket packet = new WebSocketPacket(); packet.setDeptId(warnData.getDeptId()); packet.setCompanyId(warnData.getCompanyId()); packet.setBizType(BizType.SYS.getCode()); packet.setBizTag("common"); packet.setOrderResp(OrderRespEnum.MSG_ERROR.getCode()); packet.setData(warnData.getInfo()); WebSocketServer.sendByPocket(packet); //微信通知 if (NoticeType.WECHAT.getCode().equals(warnConf.getNoticeType())) { List listUsers = warnUtils.getWarnUserByWarnConf(warnConf, warnData.getDepotId()); warnData = warnUtils.setPhoneByWeChat(warnData, listUsers); String msg = coreWarnService.sendByWeChat(warnData, interfaceId, warnData.getCompanyId()); if ("SUCCESS".equals(msg)) { log.error("-----微信推送成功-----,推送信息={}", warnData); warnData.setNoticeResult("推送成功"); } else { warnData.setNoticeResult(warnData.getNoticeResult() + ",原因:" + msg); } } return warnData; } }