自动化立体仓库 - WMS系统
1
ZY
2025-03-31 9ed4cb53a2c643b879f993537f5a2793fba56ba1
src/main/java/com/zy/asrs/task/AgvWarnScheduler.java
@@ -1,12 +1,15 @@
package com.zy.asrs.task;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.common.Cools;
import com.zy.asrs.entity.Agv;
import com.zy.asrs.entity.AgvWarn;
import com.zy.asrs.entity.AgvWarnLog;
import com.zy.asrs.mapper.AgvBasMapper;
import com.zy.asrs.service.AgvWarnLogService;
import com.zy.asrs.service.AgvWarnService;
import com.zy.asrs.task.handler.AgvWarnHandler;
import com.zy.common.utils.HttpHandler;
@@ -38,56 +41,97 @@
    private AgvWarnService agvWarnService;
    @Autowired
    private AgvWarnLogService agvWarnLogService;
    @Autowired
    private ConfigService configService;
    @Autowired
    private AgvBasMapper agvBasMapper;
    /**
     * 超过
     *  删除告警日志
     */
    @Scheduled(fixedDelay = 30000)
    @Scheduled(cron = "0 0 1 * * ? ")
    private void delWarnLog() {
        String format = DateUtil.format(DateUtil.offsetMonth(new Date(), -1), "yyyy-MM-dd HH:mm:ss");
        List<AgvWarnLog> agvWarnList = agvWarnLogService.selectList(new EntityWrapper<AgvWarnLog>().le("modi_time", format));
        for (AgvWarnLog agvWarn : agvWarnList) {
            agvWarnLogService.deleteById(agvWarn);
        }
    }
    /**
     * 超过一分钟没更新的,删除
     */
    @Scheduled(fixedDelay = 10000)
    private void del() {
        String format = DateUtil.format(DateUtil.offsetMinute(new Date(), -3), "yyyy-MM-dd HH:mm:ss");
        List<AgvWarn> agvWarnList = agvWarnService.selectList(new EntityWrapper<AgvWarn>().ge("modi_time", format));
        String format = DateUtil.format(DateUtil.offsetMinute(new Date(), -1), "yyyy-MM-dd HH:mm:ss");
        List<AgvWarn> agvWarnList = agvWarnService.selectList(new EntityWrapper<AgvWarn>().le("modi_time", format));
        for (AgvWarn agvWarn : agvWarnList) {
            agvWarnHandler.start(agvWarn);
        }
    }
    @Scheduled(fixedDelay = 10000)
    @Scheduled(fixedDelay = 20000)
    private void report() {
        List<Config> config = configService.selectList(new EntityWrapper<Config>().eq("code", "AGV_WARN_REPORT_URL"));
        List<Agv> agvs = agvBasMapper.selectList(new EntityWrapper<Agv>());
        Config first = configService.selectOne(new EntityWrapper<Config>().eq("code", "AGV_WARN_RATE1"));
        Config second = configService.selectOne(new EntityWrapper<Config>().eq("code", "AGV_WARN_RATE2"));
        Config third = configService.selectOne(new EntityWrapper<Config>().eq("code", "AGV_WARN_RATE3"));
        Config url = configService.selectOne(new EntityWrapper<Config>().eq("code", "AGV_WARN_REPORT_URL"));
        List<AgvWarn> agvWarnList = agvWarnService.selectList(new EntityWrapper<AgvWarn>());
        StringBuffer buffer;
        HashMap<String, Object> sendData = new HashMap<>();
        for (AgvWarn agvWarn : agvWarnList) {
            Integer warnTime = getWarnTime(agvWarn.getTimes());
            DateTime begin = DateUtil.parse(agvWarn.getBeginTime(), "yyyy-MM-dd HH:mm:ss");
            if (DateUtil.offsetMinute(begin, warnTime).after(new Date())) {
            Integer warnTime = getWarnTime(agvWarn.getTimes(), first.getValue(), second.getValue(), third.getValue());
            Date begin = DateUtil.parse(agvWarn.getBeginTime(), "yyyy-MM-dd HH:mm:ss");
            if (DateUtil.offsetMinute(agvWarn.getAppeTime(), -3).after(begin)) {
                begin = agvWarn.getAppeTime();
            }
            if (DateUtil.offsetMinute(new Date(), -warnTime).after(begin)) {
                buffer = new StringBuffer();
                buffer.append(agvWarn.getRobotCode() + "号AGV小车报警:");
                buffer.append(agvWarn.getWarnContent());
                String s = processRegion(agvs, agvWarn.getRobotCode());
                if (s == null) {
                    continue;
                }
                buffer.append(s + "[" + agvWarn.getRobotCode() + "]号AGV小车报警了\n");
                buffer.append("报警类型:" + agvWarn.getWarnContent() + "\n");
                if (!Cools.isEmpty(agvWarn.getSourceLocNo())) {
                    buffer.append("从:[" + agvWarn.getSourceLocNo() + "]到[" + agvWarn.getLocNo() + "]\n");
                }
                //buffer.append("报警开始时间:" + agvWarn.getBeginTime() + "\n");
                buffer.append("报警开始时间:" + DateUtil.formatDateTime(begin) + "\n");
                buffer.append("当前时间:" + DateUtil.formatDateTime(new Date()));
                //int i = agvWarn.getTimes() + 1;
                //buffer.append("第[" + i + "]次报警");
                HashMap<String, Object> param = new HashMap<>();
                HashMap<String, Object> data = new HashMap<>();
                data.put("content", buffer.toString());
                param.put("msgtype", "text");
                param.put("text", data);
                sendData.put(agvWarn.getRobotCode() + agvWarn.getWarnContent(), param);
            }
            for (HashMap.Entry<String, Object> entry : sendData.entrySet()) {
                log.info("发送报警信息:{}", JSON.toJSONString(entry.getValue()));
                String response = null;
                try {
                    response = new HttpHandler.Builder()
                            .setUri(config.get(0).getValue())
                            .setJson(JSON.toJSONString(param))
                            .setHttps(true)
                            .build()
                            .doPost();
                    response = new HttpHandler.Builder().setUri(url.getValue()).setJson(JSON.toJSONString(entry.getValue())).setHttps(true).build().doPost();
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
                JSONObject jsonObject = JSON.parseObject(response);
                if (jsonObject.get("errmsg").equals("ok")) {
                    //发送成功
                    return;
                    agvWarn.setTimes(agvWarn.getTimes() + 1);
                    agvWarn.setModiTime(new Date());
                    agvWarnService.updateById(agvWarn);
                } else {
                    log.error("发送失败,错误信息:{}", jsonObject.get("errmsg"));
                }
            }
        }
    }
@@ -96,32 +140,32 @@
     * @param times
     * @return
     */
    private Integer getWarnTime(Integer times) {
        try {
            List<Config> config = configService.selectList(new EntityWrapper<Config>().eq("code", "AGV_WARN_RATE1"));
            if (!Cools.isEmpty(config)) {
                String value = config.get(0).getValue();
                if (Cools.isEmpty(value)) {
                    return 5;
                } else {
                    String[] split = value.split(",");
                    if (split.length < times + 1) {
                        Config config2 = configService.selectOne(new EntityWrapper<Config>().eq("code", "AGV_WARN_RATE2"));
                        int t = 0;
                        for (String s : split) {
                            t = t + Integer.parseInt(s);
                        }
                        return t + Integer.parseInt(config2.getValue()) * (times + 1 - split.length);
                    } else {
                        return Integer.parseInt(split[times]);
                    }
                }
            }
            return 5;
        } catch (Exception e) {
            return 5;
    private Integer getWarnTime(Integer times, String first, String second, String thrid) {
        switch (times) {
            case 0:
                return Integer.parseInt(first);
            case 1:
                return Integer.parseInt(first) + Integer.parseInt(second);
            case 2:
                return Integer.parseInt(first) + Integer.parseInt(second) + Integer.parseInt(thrid);
            default:
                return (times - 2) * Integer.parseInt(thrid) + Integer.parseInt(first) + Integer.parseInt(second) + Integer.parseInt(thrid);
        }
    }
    private String processRegion(List<Agv> agvs, String agvNo) {
        if (agvNo == null) {
            return "未知小车";
        }
        for (Agv agv : agvs) {
            if (agv.getAgvNo() != null && agv.getAgvNo().equals(agvNo)) {
                if (!Cools.isEmpty(agv.getFlag()) && agv.getFlag() == 1) {
                    return null;
                }
                return agv.getRegion();
            }
        }
        return "未知";
    }
}