From 1e1e9bb19e595f65e35de48d91ae436a89147ec9 Mon Sep 17 00:00:00 2001
From: zhangc <zc@123>
Date: 星期五, 03 一月 2025 16:32:11 +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