From b3814333d786324bb81cca7d1bcf5ac8f2f1a7cf Mon Sep 17 00:00:00 2001
From: zhang <zc857179121@qq.com>
Date: 星期三, 23 七月 2025 08:35:33 +0800
Subject: [PATCH] 保存一个版本

---
 zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/VehFaultRecServiceImpl.java |    9 ++
 zy-acs-manager/src/main/java/com/zy/acs/manager/manager/mapper/VehFaultRecMapper.java            |    3 
 zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/FaultProcessor.java                 |   40 ++++++---
 zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/AgvDataNoCodeService.java           |    1 
 zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/AgvDataService.java                 |    1 
 zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java                    |   80 +++++++++++++++-----
 zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/astart/MapDataDispatcher.java       |   21 +++-
 zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/VehFaultRec.java                  |    6 +
 zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/VehFaultRecService.java          |    3 
 zy-acs-manager/src/main/resources/application.yml                                                |    4 
 zy-acs-manager/src/main/resources/mapper/manager/VehFaultRecMapper.xml                           |   17 ++++
 zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/Task.java                         |    2 
 zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/AgvDataErrorService.java            |   11 +-
 13 files changed, 150 insertions(+), 48 deletions(-)

diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/AgvDataErrorService.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/AgvDataErrorService.java
index c7f16ed..ee61949 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/AgvDataErrorService.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/AgvDataErrorService.java
@@ -6,9 +6,6 @@
 import com.zy.acs.common.domain.protocol.IMessageBody;
 import com.zy.acs.common.enums.error.AgvErrorType;
 import com.zy.acs.common.utils.RedisSupport;
-import com.zy.acs.framework.common.Cools;
-import com.zy.acs.framework.common.DateUtils;
-import com.zy.acs.manager.core.constant.MapDataConstant;
 import com.zy.acs.manager.core.domain.VehicleFaultDto;
 import com.zy.acs.manager.manager.entity.AgvDetail;
 import com.zy.acs.manager.manager.service.*;
@@ -80,8 +77,12 @@
             AgvErrorType errorType = AgvErrorType.query(agv_04_up.getHexFaultId());
             log.info("Agv [{}] 鏁呴殰鏁版嵁鍖� ===>> {}", protocol.getAgvNo(), JSON.toJSONString(agv_04_up));
 
-            // save
-            faultProcessor.execute(new VehicleFaultDto<>(protocol.getAgvNo(), protocol.getTimestamp(), agv_04_up));
+            if (agv_04_up.getFaultId() == 12304 && agv_04_up.getData2() == 4 && agv_04_up.getFlag() == 4) {
+                faultProcessor.reset(agvId);
+            } else {
+                // save
+                faultProcessor.execute(new VehicleFaultDto<>(protocol.getAgvNo(), protocol.getTimestamp(), agv_04_up));
+            }
 
             // detail
             String errorMSg = errorType != null ? errorType.getMsg() : agv_04_up.getHexFaultId();
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/AgvDataNoCodeService.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/AgvDataNoCodeService.java
index 41372de..2c1b00f 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/AgvDataNoCodeService.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/AgvDataNoCodeService.java
@@ -95,6 +95,7 @@
             assert detail.getErrorTime() != null;
             if (DateUtils.diffToSeconds(detail.getErrorTime(), new Date()) > 20) {
                 detail.setError(MapDataConstant.EMPTY_OF_ERROR);
+                faultProcessor.reset(agvId);
             }
         }
         if (!agvDetailService.updateById(detail)) {
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/AgvDataService.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/AgvDataService.java
index c9d1c32..f1f8d0f 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/AgvDataService.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/AgvDataService.java
@@ -101,6 +101,7 @@
             assert detail.getErrorTime() != null;
             if (DateUtils.diffToSeconds(detail.getErrorTime(), new Date()) > 20) {
                 detail.setError(MapDataConstant.EMPTY_OF_ERROR);
+                faultProcessor.reset(agvId);
             }
         }
 
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/FaultProcessor.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/FaultProcessor.java
index 00eed5b..8f4bd5e 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/FaultProcessor.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/FaultProcessor.java
@@ -44,25 +44,37 @@
             AgvErrorType errorType = AgvErrorType.query(agv_04_up.getHexFaultId());
 
             Long agvId = agvService.getAgvId(vehicle);
+            VehFaultRec vehFaultRec = vehFaultRecService.getTopVehFaultRec(agvId, String.valueOf(agv_04_up.getFaultId()));
+            if (null == vehFaultRec) {
+                vehFaultRec = new VehFaultRec();
+                vehFaultRec.setUuid(String.valueOf(snowflakeIdWorker.nextId()).substring(3));
+                vehFaultRec.setAgvId(agvId);
+                vehFaultRec.setFaultNo(String.valueOf(agv_04_up.getFaultId()));
+                vehFaultRec.setFaultHex(agv_04_up.getHexFaultId());
+                vehFaultRec.setFaultName(null != errorType ? errorType.desc : "undefined");
+                vehFaultRec.setFaultLev(agv_04_up.getFaultLevel());
+                vehFaultRec.setFaultData(GsonUtils.toJson(Cools.add("data1", agv_04_up.getData1()).add("data2", agv_04_up.getData2())));
+                vehFaultRec.setHappenTime(new Date());
+                vehFaultRec.setProtocol(RadixTools.bytesToHexStr(agv_04_up.writeToBytes()));
 
-            VehFaultRec vehFaultRec = new VehFaultRec();
-            vehFaultRec.setUuid(String.valueOf(snowflakeIdWorker.nextId()).substring(3));
-            vehFaultRec.setAgvId(agvId);
-            vehFaultRec.setFaultNo(String.valueOf(agv_04_up.getFaultId()));
-            vehFaultRec.setFaultHex(agv_04_up.getHexFaultId());
-            vehFaultRec.setFaultName(null != errorType ? errorType.desc : "undefined");
-            vehFaultRec.setFaultLev(agv_04_up.getFaultLevel());
-            vehFaultRec.setFaultData(GsonUtils.toJson(Cools.add("data1", agv_04_up.getData1()).add("data2", agv_04_up.getData2())));
-            vehFaultRec.setHappenTime(new Date());
-            vehFaultRec.setProtocol(RadixTools.bytesToHexStr(agv_04_up.writeToBytes()));
-
-            if (!vehFaultRecService.save(vehFaultRec)) {
-                log.error("{}鍙疯溅杈嗘晠闅滐紒璁板綍鏁呴殰淇℃伅澶辫触......", dto.getVehicle());
+                if (!vehFaultRecService.save(vehFaultRec)) {
+                    log.error("{}鍙疯溅杈嗘晠闅滐紒璁板綍鏁呴殰淇℃伅澶辫触......", dto.getVehicle());
+                }
+            } else {
+                vehFaultRec.setUpdateTime(new Date());
+                if (!vehFaultRecService.updateById(vehFaultRec)) {
+                    log.error("{}鍙疯溅杈嗘晠闅滐紒鏇存柊鏁呴殰淇℃伅澶辫触......", dto.getVehicle());
+                }
             }
-
         } catch (Exception e) {
             log.error("FaultProcessor", e);
         }
     }
 
+    @Async
+    public void reset(Long agvId) {
+        vehFaultRecService.resetError(agvId);
+    }
+
+
 }
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java
index 1516ccf..2092f91 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java
@@ -96,6 +96,10 @@
     private LaneService laneService;
     @Autowired
     private ActionSorter actionSorter;
+    @Autowired
+    private TaskReportService taskReportService;
+    @Autowired
+    private AgvDurationService agvDurationService;
 
     @SuppressWarnings("all")
     @Transactional
@@ -286,7 +290,9 @@
      */
     @Transactional(propagation = Propagation.REQUIRES_NEW)
     public void buildMajorTask(Long agvId, List<Task> taskList) {
-        if (Cools.isEmpty(agvId, taskList)) { return; }
+        if (Cools.isEmpty(agvId, taskList)) {
+            return;
+        }
         try {
             // valid -----------------------------------------------
             Agv agv = agvService.getById(agvId);
@@ -326,16 +332,18 @@
              * val: new TaskPosDto(taskId, new Double[]{code.getX(), code.getY()}, posType)
              */
             Map<String, List<TaskPosDto>> groups = new HashMap<>();
-            final String sameGroupXy = configService.getVal( "sameGroupXy", String.class);
+            final String sameGroupXy = configService.getVal("sameGroupXy", String.class);
 
             int backpackLev = 0;
             for (Task task : taskList) {
 
-                backpackLev ++;
+                backpackLev++;
                 Code startCode = null;
                 Code endCode = null;
-                Loc oriLoc = null; Loc destLoc = null;
-                Sta oriSta = null; Sta destSta = null;
+                Loc oriLoc = null;
+                Loc destLoc = null;
+                Sta oriSta = null;
+                Sta destSta = null;
                 switch (Objects.requireNonNull(TaskTypeType.get(task.getTaskTypeEl()))) {
                     case LOC_TO_LOC:
                         oriLoc = locService.getById(task.getOriLoc());
@@ -438,7 +446,7 @@
 
             // re-order by agv current position
             Code currCode = codeService.getCacheById(agvDetail.getRecentCode());
-            Double[] currPosition = new Double[] {currCode.getX(), currCode.getY()};
+            Double[] currPosition = new Double[]{currCode.getX(), currCode.getY()};
 
             List<List<TaskPosDto>> pickGroups = new ArrayList<>();
             List<List<TaskPosDto>> dropGroups = new ArrayList<>();
@@ -484,7 +492,7 @@
             List<Segment> segmentList = new ArrayList<>();
             for (List<TaskPosDto> dtoList : list) {
                 for (TaskPosDto taskPosDto : dtoList) {
-                    segSerial ++;
+                    segSerial++;
                     AgvBackpackType backpackType = AgvBackpackDto.find(backpackDtoList, taskPosDto.getTaskId());
                     assert null != backpackType;
 
@@ -532,9 +540,12 @@
     /**
      * 鍏呯數 鍥炲緟鏈轰綅浠诲姟
      */
-    @Transactional(propagation = Propagation.REQUIRES_NEW) // although there is a Transactional here that the lock is isolated, but we can't join the caller's Transactional
+    @Transactional(propagation = Propagation.REQUIRES_NEW)
+    // although there is a Transactional here that the lock is isolated, but we can't join the caller's Transactional
     public boolean buildMinorTask(Long agvId, TaskTypeType taskType, String destination, Jam jam) {
-        if (Cools.isEmpty(agvId, taskType)) { return false; }
+        if (Cools.isEmpty(agvId, taskType)) {
+            return false;
+        }
         try {
             String agvNo = agvService.getAgvNo(agvId);
             if (!agvService.judgeEnable(agvId)) {
@@ -581,7 +592,7 @@
             task.setAgvId(agvId);
             task.setUuid(String.valueOf(snowflakeIdWorker.nextId()).substring(3));
             List<Task> lastTasks = taskService.list(new LambdaQueryWrapper<Task>().orderByDesc(Task::getId));
-            task.setSeqNum(Utils.generateSeqNum(Cools.isEmpty(lastTasks)?null:lastTasks.get(0).getSeqNum()));
+            task.setSeqNum(Utils.generateSeqNum(Cools.isEmpty(lastTasks) ? null : lastTasks.get(0).getSeqNum()));
             task.setOriCode(agvDetail.getCode());
             task.setDestCode(endCode.getId());
             // lane
@@ -589,7 +600,7 @@
             if (null != destLane) {
                 task.setDestLaneHash(destLane.getHashCode());
             }
-            task.setPriority(taskType.equals(TaskTypeType.TO_CHARGE)?2:1);
+            task.setPriority(taskType.equals(TaskTypeType.TO_CHARGE) ? 2 : 1);
             task.setTaskSts(TaskStsType.ASSIGN.val());
             task.setTaskType(taskType.val());
             task.setIoTime(now);
@@ -597,6 +608,7 @@
             if (!taskService.save(task)) {
                 throw new BusinessException(task.getSeqNum() + " failed to save");
             }
+
 
             // generate travel
             Travel travel = new Travel();
@@ -611,13 +623,20 @@
             }
 
             // generate segment
-            int segSerial = 0;     segSerial ++;
+            int segSerial = 0;
+            segSerial++;
             List<Segment> segmentList = new ArrayList<>();
 
             String posType = "";
-            switch (taskType){
+            switch (taskType) {
                 case TO_CHARGE:
                     posType = TaskPosDto.PosType.TO_CHARGE.toString();
+                    //鎻掑叆鍏呯數浠诲姟
+                    AgvDuration agvDuration = new AgvDuration();
+                    agvDuration.setHappenTime(now);
+                    agvDuration.setAgvId(agvId);
+                    agvDuration.setTaskNo(task.getId());
+                    agvDurationService.save(agvDuration);
                     break;
                 case TO_STANDBY:
                     posType = TaskPosDto.PosType.TO_STANDBY.toString();
@@ -687,7 +706,9 @@
     @Transactional
     public synchronized void generateAction(Long agvId, List<Segment> segmentList, List<String> pathList, Date algoStartTime) {
         try {
-            if (Cools.isEmpty(agvId, segmentList)) { return; }
+            if (Cools.isEmpty(agvId, segmentList)) {
+                return;
+            }
             Date now = new Date();
             long actionPrepareSts = ActionStsType.PREPARE.val();
 //            JSONObject storeDirection = configService.getVal("storeDirection", JSONObject.class);
@@ -729,7 +750,9 @@
                     List<String> pathListPart = pathList.subList(pathList.indexOf(lastCode.getData()), pathList.indexOf(code.getData()) + 1);
 
                     for (int i = 0; i < pathListPart.size(); i++) {
-                        if (i == 0) { continue; }
+                        if (i == 0) {
+                            continue;
+                        }
 
                         String next = pathListPart.get(i);
 
@@ -938,7 +961,7 @@
                                 task.getBusId(),    // 鎬荤嚎
                                 task.getId(),    // 浠诲姟
                                 null,    // 鍔ㄤ綔鍙�
-                                 null,    // 浼樺厛绾�
+                                null,    // 浼樺厛绾�
                                 ActionTypeType.ReadyReleaseToShelvesLoc.desc,    // 鍚嶇О
                                 (double) agvDirectionType.val,    // 灞炴�у��
                                 lastCode.getData(),    // 鍦伴潰鐮�
@@ -1439,9 +1462,9 @@
 
                 // segment list
                 List<Segment> segmentList = segmentService.list(new LambdaQueryWrapper<Segment>()
-                        .eq(Segment::getGroupId, serialNo)
+                                .eq(Segment::getGroupId, serialNo)
 //                        .eq(Segment::getState, SegmentStateType.RUNNING.toString())
-                        .orderByAsc(Segment::getSerial)
+                                .orderByAsc(Segment::getSerial)
                 );
 
                 // settlement
@@ -1471,8 +1494,10 @@
         for (Segment segment : segmentList) {
             boolean taskComplete = false;
 
-            Task task = taskService.getById(segment.getTaskId());   assert null != task;
-            TaskTypeType typeType = TaskTypeType.get(task.getTaskTypeEl());     assert null != typeType;
+            Task task = taskService.getById(segment.getTaskId());
+            assert null != task;
+            TaskTypeType typeType = TaskTypeType.get(task.getTaskTypeEl());
+            assert null != typeType;
 
             TaskPosDto.PosType posType = TaskPosDto.queryPosType(segment.getPosType());
             switch (Objects.requireNonNull(posType)) {
@@ -1508,6 +1533,21 @@
                     log.error("Task [{}] 鏇存柊澶辫触 锛侊紒锛�", task.getSeqNum());
                 } else {
                     log.info("Task [{}] 浣滀笟瀹屾瘯 ==========>> ", task.getSeqNum());
+                    // TODO 鎻掑叆涓�鏉′笂鎶ヨ褰�
+                    TaskReport taskReport = new TaskReport();
+                    taskReport.setAgvId(task.getAgvId());
+                    taskReport.setBusNo(task.getBusId$());
+                    taskReport.setCreateTime(new Date());
+                    taskReport.setDestLoc(task.getDestLoc());
+                    taskReport.setDestSta(task.getDestSta());
+                    taskReport.setSeqNum(task.getSeqNum());
+                    taskReport.setTaskSts(task.getTaskSts());
+                    taskReport.setOriLoc(task.getOriLoc());
+                    taskReport.setOriSta(task.getOriSta());
+                    taskReport.setZpallet(task.getZpallet());
+                    if (!taskReportService.save(taskReport)) {
+                        log.info("TaskReport [{}] 鎻掑叆澶辫触 ==========>> ", JSON.toJSONString(taskReport));
+                    }
                 }
 
             }
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/astart/MapDataDispatcher.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/astart/MapDataDispatcher.java
index ea7ac84..b1323c5 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/astart/MapDataDispatcher.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/astart/MapDataDispatcher.java
@@ -16,8 +16,6 @@
 import com.zy.acs.manager.manager.service.RouteService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.event.EventListener;
-import org.springframework.boot.context.event.ApplicationReadyEvent;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.PostConstruct;
@@ -309,11 +307,20 @@
                             turnMatrix[i][j] = TurnNodeType.STRAIGHT.val;
                             break;
                         case 2:
-                            String firstCode = neighborCodeList.get(0); assert !Cools.isEmpty(firstCode);
-                            String secondCode = neighborCodeList.get(1); assert !Cools.isEmpty(secondCode);
+                            String firstCode = neighborCodeList.get(0);
+                            assert !Cools.isEmpty(firstCode);
+                            String secondCode = neighborCodeList.get(1);
+                            assert !Cools.isEmpty(secondCode);
 
                             int[] firstIdx = this.getCodeMatrixIdx(lev, firstCode);
                             int[] secondIdx = this.getCodeMatrixIdx(lev, secondCode);
+
+                            if (firstIdx == null) {
+                                throw new CoolException("涓嶅瓨鍦ㄧ偣浣�:" + firstCode);
+                            }
+                            if (secondIdx == null) {
+                                throw new CoolException("涓嶅瓨鍦ㄧ偣浣�:" + secondCode);
+                            }
 
                             if (firstIdx[0] != secondIdx[0] && firstIdx[1] != secondIdx[1]) {
                                 turnMatrix[i][j] = TurnNodeType.TURN.val;
@@ -335,7 +342,7 @@
 
         return turnMatrix;
     }
-    
+
 
     public synchronized int[][] initMapMatrix(Integer lev) {
         log.info("There is initializing Map Matrix......");
@@ -418,7 +425,9 @@
         for (Code code : codeList) {
             Double x = code.getX();
             Double y = code.getY();
-            if (null == x || null == y) { continue; }
+            if (null == x || null == y) {
+                continue;
+            }
             if (!xIdxList.contains(x)) {
                 xIdxList.add(x);
             }
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/Task.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/Task.java
index af1c34c..5c057d9 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/Task.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/Task.java
@@ -74,7 +74,7 @@
     private Long agvId;
 
     /**
-     * 宸ヤ綔鏃堕棿
+     * 宸ヤ綔鏃堕棿銆佷换鍔″垎閰嶆椂闂�
      */
     @ApiModelProperty(value= "宸ヤ綔鏃堕棿")
     private Date ioTime;
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/VehFaultRec.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/VehFaultRec.java
index 0cca695..fe01b35 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/VehFaultRec.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/VehFaultRec.java
@@ -98,6 +98,12 @@
     private Date resetTime;
 
     /**
+     * 鎸佺画鏃堕棿
+     */
+    @ApiModelProperty(value= "鎸佺画鏃堕棿")
+    private Long duration;
+
+    /**
      * 杩涘害
      */
     @ApiModelProperty(value= "杩涘害")
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/mapper/VehFaultRecMapper.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/mapper/VehFaultRecMapper.java
index 896eecc..be37e83 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/mapper/VehFaultRecMapper.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/mapper/VehFaultRecMapper.java
@@ -5,4 +5,7 @@
 
 public interface VehFaultRecMapper extends BaseMapper<VehFaultRec> {
 
+    VehFaultRec getTopVehFaultRec(Long agvId, String faultNo);
+
+    int resetError(Long agvId);
 }
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/VehFaultRecService.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/VehFaultRecService.java
index dff1d2d..3266d8b 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/VehFaultRecService.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/VehFaultRecService.java
@@ -5,4 +5,7 @@
 
 public interface VehFaultRecService extends IService<VehFaultRec> {
 
+    VehFaultRec getTopVehFaultRec(Long agvId, String faultNo);
+
+    int resetError(Long agvId);
 }
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/VehFaultRecServiceImpl.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/VehFaultRecServiceImpl.java
index 0fff936..704c4bd 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/VehFaultRecServiceImpl.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/VehFaultRecServiceImpl.java
@@ -9,4 +9,13 @@
 @Service("vehFaultRecService")
 public class VehFaultRecServiceImpl extends ServiceImpl<VehFaultRecMapper, VehFaultRec> implements VehFaultRecService {
 
+    @Override
+    public VehFaultRec getTopVehFaultRec(Long agvId, String faultNo) {
+        return baseMapper.getTopVehFaultRec(agvId, faultNo);
+    }
+
+    @Override
+    public int resetError(Long agvId) {
+        return baseMapper.resetError(agvId);
+    }
 }
diff --git a/zy-acs-manager/src/main/resources/application.yml b/zy-acs-manager/src/main/resources/application.yml
index 994414c..cbd4597 100644
--- a/zy-acs-manager/src/main/resources/application.yml
+++ b/zy-acs-manager/src/main/resources/application.yml
@@ -7,7 +7,7 @@
     static-path-pattern: /**
   datasource:
     driver-class-name: com.mysql.jdbc.Driver
-    url: jdbc:mysql://localhost:3306/jbly?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
+    url: jdbc:mysql://10.10.10.200:3306/jbly?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
     username: root
     password: xltys1995
     type: com.alibaba.druid.pool.DruidDataSource
@@ -42,7 +42,7 @@
     enabled: false
 
 redis:
-  host: localhost
+  host: 10.10.10.200
   password: xltys1995
   port: 6379
   max: 30
diff --git a/zy-acs-manager/src/main/resources/mapper/manager/VehFaultRecMapper.xml b/zy-acs-manager/src/main/resources/mapper/manager/VehFaultRecMapper.xml
index 4f1113c..9a7c1aa 100644
--- a/zy-acs-manager/src/main/resources/mapper/manager/VehFaultRecMapper.xml
+++ b/zy-acs-manager/src/main/resources/mapper/manager/VehFaultRecMapper.xml
@@ -23,4 +23,21 @@
         </where>
     </sql>
 
+    <update id="resetError">
+        UPDATE man_veh_fault_rec
+        SET reset_time = now(),
+            duration = (UNIX_TIMESTAMP(reset_time) - UNIX_TIMESTAMP(happen_time))
+        WHERE agv_id = #{agvId}
+          and reset_time is null
+    </update>
+
+    <select id="getTopVehFaultRec" resultType="com.zy.acs.manager.manager.entity.VehFaultRec">
+        SELECT *
+        FROM man_veh_fault_rec
+        WHERE agv_id = #{agvId}
+          and fault_no = #{faultNo}
+          and reset_time is null
+        ORDER BY happen_time DESC LIMIT 1
+    </select>
+
 </mapper>

--
Gitblit v1.9.1