From 35dca726bf82b7d9a77fee5157d9143bd9dde3ea Mon Sep 17 00:00:00 2001 From: zhangc <zc@123> Date: 星期二, 14 一月 2025 14:57:06 +0800 Subject: [PATCH] 添加AGV告警处理及回调接口 --- src/main/java/com/zy/asrs/entity/AgvWarn.java | 50 +++++ src/main/java/com/zy/asrs/entity/AgvWarnLog.java | 42 ++++ src/main/java/com/zy/asrs/service/impl/AgvWarnLogServiceImpl.java | 21 ++ src/main/java/com/zy/asrs/task/AgvWarnScheduler.java | 124 +++++++++++++ src/main/java/com/zy/asrs/service/AgvWarnLogService.java | 10 + src/main/resources/mapper/AgvWarnMapper.xml | 7 src/main/java/com/zy/asrs/task/handler/AgvWarnHandler.java | 37 ++++ src/main/resources/mapper/AgvWarnLogMapper.xml | 7 src/main/java/com/zy/asrs/mapper/AgvWarnMapper.java | 16 + src/main/java/com/zy/asrs/mapper/AgvWarnLogMapper.java | 15 + src/main/java/com/zy/asrs/controller/AgvWarnController.java | 123 +++++++++++++ src/main/java/com/zy/asrs/entity/param/AgvWarnCallBackParam.java | 22 ++ src/main/java/com/zy/asrs/entity/param/AgvWarnBody.java | 19 ++ src/main/java/com/zy/asrs/service/impl/AgvWarnServiceImpl.java | 21 ++ src/main/java/com/zy/asrs/service/AgvWarnService.java | 9 + 15 files changed, 523 insertions(+), 0 deletions(-) diff --git a/src/main/java/com/zy/asrs/controller/AgvWarnController.java b/src/main/java/com/zy/asrs/controller/AgvWarnController.java new file mode 100644 index 0000000..676e4d4 --- /dev/null +++ b/src/main/java/com/zy/asrs/controller/AgvWarnController.java @@ -0,0 +1,123 @@ +package com.zy.asrs.controller; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.mapper.EntityWrapper; +import com.core.annotations.AppAuth; +import com.core.common.Cools; +import com.zy.asrs.entity.AgvWarn; +import com.zy.asrs.entity.AgvWrkMast; +import com.zy.asrs.entity.param.AgvWarnBody; +import com.zy.asrs.entity.param.AgvWarnCallBackParam; +import com.zy.asrs.service.AgvWarnService; +import com.zy.asrs.service.AgvWrkMastService; +import com.zy.asrs.service.ApiLogService; +import com.zy.common.web.BaseController; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; +import java.util.*; + +/** + * 涓婃姤浜嬩欢绫诲瀷锛坋ventType锛夛細 + * 飦� task锛氫笂鎶ヤ换鍔$姸鎬併�� + * 飦� task_allocated: 涓婃姤浠诲姟鍒嗛厤缁欐満鍣ㄤ汉銆� + * 飦� tote_load锛氫笂鎶ュ彇绠辩姸鎬併�� + * 飦� tote_unload锛氫笂鎶ユ斁绠辩姸鎬併�� + * 飦� robot_reach锛氭満鍣ㄤ汉鍒拌揪宸ヤ綔绔欍�� + * 飦� weight锛氱О閲嶄簨浠跺洖璋冦�� + * 飦� rfid锛歊FID璇嗗埆浜嬩欢鍥炶皟銆� + * + * 浠诲姟鐘舵�侊紙status锛夛細 + * 飦� success锛氭垚鍔熴�� + * 飦� fail锛氬け璐ャ�� + * 飦� cancel锛氬彇娑堛�� + * 飦� suspend锛氭寕璧枫�� + */ +@Slf4j +@RestController +public class AgvWarnController extends BaseController { + + + @Autowired + private ApiLogService apiLogService; + + @Autowired + private AgvWarnService agvWarnService; + + + @Autowired + private AgvWrkMastService agvWrkMastService; + + + @PostMapping("/service/rest/agvCallbackService/warnCallback") + @AppAuth(memo = "AGV鍛婅鍥炶皟") + public Object taskEventStaus(@RequestBody AgvWarnCallBackParam param, HttpServletRequest request) { + log.info("AGV鍛婅鍥炶皟:{}", JSON.toJSONString(param)); + List<AgvWarnBody> data = param.getData(); + AgvWarn agvWarn = null; + List<AgvWarn> agvWarns = new ArrayList<>(); + List<AgvWarn> updates = new ArrayList<>(); + for (AgvWarnBody body : data) { + List<AgvWarn> agvWarnList = agvWarnService.selectList(new EntityWrapper<AgvWarn>().eq("robot_code", body.getRobotCode()).eq("begin_time", body.getBeginTime())); + if (Cools.isEmpty(agvWarnList)) { + agvWarn = new AgvWarn(); + agvWarn.setBeginTime(body.getBeginTime()); + agvWarn.setAppeTime(new Date()); + agvWarn.setTimes(0); + agvWarn.setRobotCode(body.getRobotCode()); + agvWarn.setWarnContent(body.getWarnContent()); + if (body.getTaskCode() != null) { + AgvWrkMast agvWrkMast = agvWrkMastService.selectById(body.getTaskCode()); + if (agvWrkMast != null) { + agvWarn.setLocNo(agvWrkMast.getLocNo()); + agvWarn.setSourceLocNo(agvWrkMast.getSourceLocNo()); + } + } + agvWarns.add(agvWarn); + } else { + agvWarn = agvWarnList.get(0); + agvWarn.setWarnContent(agvWarn.getWarnContent().contains(body.getWarnContent()) ? body.getWarnContent() : agvWarn.getWarnContent() + "銆�" + body.getWarnContent()); + agvWarn.setModiTime(new Date()); + if (body.getTaskCode() != null) { + AgvWrkMast agvWrkMast = agvWrkMastService.selectById(body.getTaskCode()); + if (agvWrkMast != null) { + agvWarn.setLocNo(agvWrkMast.getLocNo()); + agvWarn.setSourceLocNo(agvWrkMast.getSourceLocNo()); + } + } + updates.add(agvWarn); + } + } + if (!Cools.isEmpty(agvWarns)) { + agvWarnService.insertBatch(agvWarns); + } + if (!Cools.isEmpty(updates)) { + agvWarnService.updateBatchById(updates); + } + Map<String, Object> result = new HashMap<>(); + logPost(param, JSONObject.toJSONString(result), true); + result.put("code", 0); + result.put("message", "鎴愬姛"); + result.put("reqCode", param.getReqCode()); + return result; + } + + private void logPost(AgvWarnCallBackParam param, String response, boolean success) { + apiLogService.save( + "ESS浠诲姟鍥炶皟", + "/phyzwms/agv/task/event/status", + null, + null, + JSONObject.toJSONString(param), + response, + success + ); + } +} + + diff --git a/src/main/java/com/zy/asrs/entity/AgvWarn.java b/src/main/java/com/zy/asrs/entity/AgvWarn.java new file mode 100644 index 0000000..44b4738 --- /dev/null +++ b/src/main/java/com/zy/asrs/entity/AgvWarn.java @@ -0,0 +1,50 @@ +package com.zy.asrs.entity; + +import com.baomidou.mybatisplus.annotations.TableField; +import com.baomidou.mybatisplus.annotations.TableId; +import com.baomidou.mybatisplus.annotations.TableName; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +@Data +@TableName("agv_warn") +public class AgvWarn implements Serializable { + private static final long serialVersionUID = 1L; + + @TableField("id") + @TableId + private Long id; + + /** + * 涓婃姤娆℃暟 + */ + @TableField("times") + private Integer times; + + @TableField("robot_code") + private String robotCode; + + @TableField("begin_time") + private String beginTime; + + @TableField("warn_content") + private String warnContent; + + @TableField("task_code") + private String taskCode; + + @TableField("loc_no") + private String locNo; + + @TableField("source_locNo") + private String sourceLocNo; + + @TableField("appe_time") + private Date appeTime; + + @TableField("modi_time") + private Date modiTime; + +} diff --git a/src/main/java/com/zy/asrs/entity/AgvWarnLog.java b/src/main/java/com/zy/asrs/entity/AgvWarnLog.java new file mode 100644 index 0000000..1b015f5 --- /dev/null +++ b/src/main/java/com/zy/asrs/entity/AgvWarnLog.java @@ -0,0 +1,42 @@ +package com.zy.asrs.entity; + +import com.baomidou.mybatisplus.annotations.TableField; +import com.baomidou.mybatisplus.annotations.TableName; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +@Data +@TableName("agv_warn_log") +public class AgvWarnLog implements Serializable { + private static final long serialVersionUID = 1L; + + @TableField("id") + private Long id; + + @TableField("robot_code") + private String robotCode; + + @TableField("begin_time") + private String beginTime; + + @TableField("warnContent") + private String warn_content; + + @TableField("task_code") + private String taskCode; + + @TableField("loc_no") + private String locNo; + + @TableField("source_locNo") + private String sourceLocNo; + + @TableField("appe_time") + private Date appeTime; + + @TableField("modi_time") + private Date modiTime; + +} diff --git a/src/main/java/com/zy/asrs/entity/param/AgvWarnBody.java b/src/main/java/com/zy/asrs/entity/param/AgvWarnBody.java new file mode 100644 index 0000000..3625548 --- /dev/null +++ b/src/main/java/com/zy/asrs/entity/param/AgvWarnBody.java @@ -0,0 +1,19 @@ +package com.zy.asrs.entity.param; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class AgvWarnBody implements Serializable { + private static final long serialVersionUID = 1L; + + private String robotCode; + + private String beginTime; + + private String warnContent; + + private String taskCode; + +} diff --git a/src/main/java/com/zy/asrs/entity/param/AgvWarnCallBackParam.java b/src/main/java/com/zy/asrs/entity/param/AgvWarnCallBackParam.java new file mode 100644 index 0000000..b680451 --- /dev/null +++ b/src/main/java/com/zy/asrs/entity/param/AgvWarnCallBackParam.java @@ -0,0 +1,22 @@ +package com.zy.asrs.entity.param; + +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +@Data +public class AgvWarnCallBackParam implements Serializable { + private static final long serialVersionUID = 1L; + + private String reqCode; + + private String reqTime; + + private String clientCode; + + private String tokenCode; + + private List<AgvWarnBody> data; + +} diff --git a/src/main/java/com/zy/asrs/mapper/AgvWarnLogMapper.java b/src/main/java/com/zy/asrs/mapper/AgvWarnLogMapper.java new file mode 100644 index 0000000..27747bc --- /dev/null +++ b/src/main/java/com/zy/asrs/mapper/AgvWarnLogMapper.java @@ -0,0 +1,15 @@ +package com.zy.asrs.mapper; + +import com.baomidou.mybatisplus.mapper.BaseMapper; +import com.zy.asrs.entity.AgvWarnLog; +import com.zy.asrs.entity.AgvWrkDetlLog; +import org.apache.ibatis.annotations.Insert; +import org.apache.ibatis.annotations.Mapper; +import org.springframework.stereotype.Repository; + +@Mapper +@Repository +public interface AgvWarnLogMapper extends BaseMapper<AgvWarnLog> { + + +} diff --git a/src/main/java/com/zy/asrs/mapper/AgvWarnMapper.java b/src/main/java/com/zy/asrs/mapper/AgvWarnMapper.java new file mode 100644 index 0000000..2bcb70a --- /dev/null +++ b/src/main/java/com/zy/asrs/mapper/AgvWarnMapper.java @@ -0,0 +1,16 @@ +package com.zy.asrs.mapper; + +import com.baomidou.mybatisplus.mapper.BaseMapper; +import com.zy.asrs.entity.AgvWarn; +import com.zy.asrs.entity.AgvWrkDetlLog; +import org.apache.ibatis.annotations.Insert; +import org.apache.ibatis.annotations.Mapper; +import org.springframework.stereotype.Repository; + +@Mapper +@Repository +public interface AgvWarnMapper extends BaseMapper<AgvWarn> { + + + +} diff --git a/src/main/java/com/zy/asrs/service/AgvWarnLogService.java b/src/main/java/com/zy/asrs/service/AgvWarnLogService.java new file mode 100644 index 0000000..40583e7 --- /dev/null +++ b/src/main/java/com/zy/asrs/service/AgvWarnLogService.java @@ -0,0 +1,10 @@ +package com.zy.asrs.service; + +import com.baomidou.mybatisplus.service.IService; +import com.zy.asrs.entity.AgvWarnLog; +import com.zy.asrs.entity.ManLocDetl; + +public interface AgvWarnLogService extends IService<AgvWarnLog> { + + +} diff --git a/src/main/java/com/zy/asrs/service/AgvWarnService.java b/src/main/java/com/zy/asrs/service/AgvWarnService.java new file mode 100644 index 0000000..e651a3d --- /dev/null +++ b/src/main/java/com/zy/asrs/service/AgvWarnService.java @@ -0,0 +1,9 @@ +package com.zy.asrs.service; + +import com.baomidou.mybatisplus.service.IService; +import com.zy.asrs.entity.AgvWarn; + +public interface AgvWarnService extends IService<AgvWarn> { + + +} diff --git a/src/main/java/com/zy/asrs/service/impl/AgvWarnLogServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/AgvWarnLogServiceImpl.java new file mode 100644 index 0000000..6b5cec6 --- /dev/null +++ b/src/main/java/com/zy/asrs/service/impl/AgvWarnLogServiceImpl.java @@ -0,0 +1,21 @@ +package com.zy.asrs.service.impl; + +import com.baomidou.mybatisplus.service.impl.ServiceImpl; +import com.zy.asrs.entity.AgvWarnLog; +import com.zy.asrs.mapper.AgvWarnLogMapper; +import com.zy.asrs.service.AgvWarnLogService; +import com.zy.asrs.service.AgvWarnService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +/** + * Created by vincent on 2020/6/11 + */ +@Slf4j +@Service +@Transactional +public class AgvWarnLogServiceImpl extends ServiceImpl<AgvWarnLogMapper, AgvWarnLog> implements AgvWarnLogService { + + +} diff --git a/src/main/java/com/zy/asrs/service/impl/AgvWarnServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/AgvWarnServiceImpl.java new file mode 100644 index 0000000..c259245 --- /dev/null +++ b/src/main/java/com/zy/asrs/service/impl/AgvWarnServiceImpl.java @@ -0,0 +1,21 @@ +package com.zy.asrs.service.impl; + +import com.baomidou.mybatisplus.service.impl.ServiceImpl; +import com.zy.asrs.entity.AgvWarn; +import com.zy.asrs.mapper.AgvWarnMapper; +import com.zy.asrs.service.AgvWarnLogService; +import com.zy.asrs.service.AgvWarnService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +/** + * Created by vincent on 2020/6/11 + */ +@Slf4j +@Service +@Transactional +public class AgvWarnServiceImpl extends ServiceImpl<AgvWarnMapper, AgvWarn> implements AgvWarnService { + + +} diff --git a/src/main/java/com/zy/asrs/task/AgvWarnScheduler.java b/src/main/java/com/zy/asrs/task/AgvWarnScheduler.java new file mode 100644 index 0000000..e55d588 --- /dev/null +++ b/src/main/java/com/zy/asrs/task/AgvWarnScheduler.java @@ -0,0 +1,124 @@ +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.AgvWarn; +import com.zy.asrs.service.AgvWarnService; +import com.zy.asrs.task.handler.AgvWarnHandler; +import com.zy.common.utils.HttpHandler; +import com.zy.system.entity.Config; +import com.zy.system.service.ConfigService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import java.io.IOException; +import java.util.Date; +import java.util.HashMap; +import java.util.List; + +/** + * Created by vincent on 2020/7/7 + */ +@Component +public class AgvWarnScheduler { + + private static final Logger log = LoggerFactory.getLogger(AgvWarnScheduler.class); + + @Autowired + private AgvWarnHandler agvWarnHandler; + + @Autowired + private AgvWarnService agvWarnService; + + @Autowired + private ConfigService configService; + + /** + * 瓒呰繃 + */ + @Scheduled(fixedDelay = 30000) + 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)); + for (AgvWarn agvWarn : agvWarnList) { + agvWarnHandler.start(agvWarn); + } + } + + @Scheduled(fixedDelay = 10000) + private void report() { + List<Config> config = configService.selectList(new EntityWrapper<Config>().eq("code", "AGV_WARN_REPORT_URL")); + List<AgvWarn> agvWarnList = agvWarnService.selectList(new EntityWrapper<AgvWarn>()); + StringBuffer buffer; + 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())) { + buffer = new StringBuffer(); + buffer.append(agvWarn.getRobotCode() + "鍙稟GV灏忚溅鎶ヨ:"); + buffer.append(agvWarn.getWarnContent()); + 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); + String response = null; + try { + response = new HttpHandler.Builder() + .setUri(config.get(0).getValue()) + .setJson(JSON.toJSONString(param)) + .setHttps(true) + .build() + .doPost(); + } catch (IOException e) { + throw new RuntimeException(e); + } + JSONObject jsonObject = JSON.parseObject(response); + if (jsonObject.get("errmsg").equals("ok")) { + return;//鍙戦�佹垚鍔� + } + } + } + } + + /** + * 鑻ユ湭閰嶇疆鏁版嵁锛屽垯5鍒嗛挓涓�娆� + * @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()); + } else { + return Integer.parseInt(split[times]); + } + } + } + return 5; + } catch (Exception e) { + return 5; + } + } + + +} diff --git a/src/main/java/com/zy/asrs/task/handler/AgvWarnHandler.java b/src/main/java/com/zy/asrs/task/handler/AgvWarnHandler.java new file mode 100644 index 0000000..f2e2669 --- /dev/null +++ b/src/main/java/com/zy/asrs/task/handler/AgvWarnHandler.java @@ -0,0 +1,37 @@ +package com.zy.asrs.task.handler; + +import cn.hutool.core.bean.BeanUtil; +import com.zy.asrs.entity.AgvWarn; +import com.zy.asrs.entity.AgvWarnLog; +import com.zy.asrs.mapper.AgvWarnLogMapper; +import com.zy.asrs.mapper.AgvWarnMapper; +import com.zy.asrs.task.AbstractHandler; +import com.zy.asrs.task.core.ReturnT; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +/** + * Created by vincent on 2020/7/7 + */ +@Service +public class AgvWarnHandler extends AbstractHandler<String> { + + @Autowired + private AgvWarnMapper agvWarnMapper; + + @Autowired + private AgvWarnLogMapper agvWarnLogMapper; + + + @Transactional + public ReturnT<String> start(AgvWarn agvWarn) { + AgvWarnLog agvWarnLog = new AgvWarnLog(); + BeanUtil.copyProperties(agvWarn, agvWarnLog); + agvWarnLog.setId(null); + agvWarnMapper.deleteById(agvWarn.getId()); + agvWarnLogMapper.insert(agvWarnLog); + return SUCCESS; + } + +} diff --git a/src/main/resources/mapper/AgvWarnLogMapper.xml b/src/main/resources/mapper/AgvWarnLogMapper.xml new file mode 100644 index 0000000..ada11f2 --- /dev/null +++ b/src/main/resources/mapper/AgvWarnLogMapper.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="com.zy.asrs.mapper.AgvWarnLogMapper"> + + + +</mapper> diff --git a/src/main/resources/mapper/AgvWarnMapper.xml b/src/main/resources/mapper/AgvWarnMapper.xml new file mode 100644 index 0000000..a8bb119 --- /dev/null +++ b/src/main/resources/mapper/AgvWarnMapper.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="com.zy.asrs.mapper.AgvWarnMapper"> + + + +</mapper> -- Gitblit v1.9.1