#
luxiaotao1123
2025-01-04 9fb7c7678174c0fea9bf7c96dca8c24b165d0a48
#
12个文件已修改
2个文件已删除
240 ■■■■ 已修改文件
zy-acs-manager/src/main/java/com/zy/acs/manager/common/utils/MapDataUtils.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/AgvDataService.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/AllocateService.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/FaultProcessor.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/PatrolService.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/TrafficService.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/astart/NavigateNode.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/astart/NavigateNodeFactory.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/astart/NavigateNodePool.java 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/AgvService.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/ActionServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/AgvDetailServiceImpl.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/AgvServiceImpl.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/JamServiceImpl.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/common/utils/MapDataUtils.java
@@ -1,7 +1,6 @@
package com.zy.acs.manager.common.utils;
import com.alibaba.fastjson.JSON;
import com.zy.acs.common.utils.GsonUtils;
import com.zy.acs.framework.common.Cools;
import java.util.*;
@@ -36,10 +35,10 @@
    }
    public static String generateWaveNode(String originStr, String waveNode) {
        List<String> originNode = GsonUtils.fromJsonToList(originStr, String.class);
        List<String> originNode = JSON.parseArray(originStr, String.class);
        Set<String> set = new HashSet<>(originNode);
        set.add(waveNode);
        return GsonUtils.toJson(set);
        return JSON.toJSONString(set);
    }
    public static Double getVehicleWaveSafeDistance(Integer diameter, Double factor) {
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/AgvDataService.java
@@ -12,7 +12,6 @@
import com.zy.acs.manager.core.constant.MapDataConstant;
import com.zy.acs.manager.core.domain.BackpackDto;
import com.zy.acs.manager.core.domain.VehicleFaultDto;
import com.zy.acs.manager.manager.entity.Agv;
import com.zy.acs.manager.manager.entity.AgvDetail;
import com.zy.acs.manager.manager.entity.Code;
import com.zy.acs.manager.manager.service.*;
@@ -64,15 +63,15 @@
        IMessageBody msgBody = protocol.getMessageBody();
        assert msgBody != null;
        Agv agv = agvService.selectByUuid(protocol.getAgvNo());
        if (null == agv) {
        Long agvId = agvService.getAgvId(protocol.getAgvNo());
        if (null == agvId) {
            log.warn("Agv [{}] 尚未鉴权 !!!", protocol.getAgvNo());
            return;
        }
        AgvDetail detail = agvDetailService.selectByAgvId(agv.getId());
        AgvDetail detail = agvDetailService.selectByAgvId(agvId);
        if (null == detail) {
            detail = new AgvDetail();
            detail.setAgvId(agv.getId());
            detail.setAgvId(agvId);
            if (!agvDetailService.save(detail)) {
                log.error("Agv [{}] 详情更新失败 !!!", protocol.getAgvNo());
                return;
@@ -89,7 +88,7 @@
                mapService.unlockPath(protocol.getAgvNo(), agv_12_up.getQrCode());
            });
            // finish jam
            threadPoolRegulator.getInstance().execute(() -> jamService.checkIfFinish(agv.getId(), agv_12_up.getQrCode()));
            threadPoolRegulator.getInstance().execute(() -> jamService.checkIfFinish(agvId, agv_12_up.getQrCode()));
//            websocketService.agvInfoBroadcastOnPos(new WebsocketDto<AGV_12_UP>("agv", agv.getUuid(), agv_12_up));
            this.sync(agv_12_up, detail);
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/AllocateService.java
@@ -187,17 +187,17 @@
    // calculate wight = backpack + distance
    private int calcAllocateWeight(String agvNo, Task task) {
        int weight = 0;
        Agv agv = agvService.selectByUuid(agvNo);
        Long agvId = agvService.getAgvId(agvNo);
        // backpack
        List<Task> transportTasks = taskService.findTransportTasksByAgv(agv.getId());
        List<Task> transportTasks = taskService.findTransportTasksByAgv(agvId);
        if (!Cools.isEmpty(transportTasks)) {
            weight = weight + transportTasks.size() * 100000;
        }
        // distance
        // from
        AgvDetail agvDetail = agvDetailService.selectByAgvId(agv.getId());
        AgvDetail agvDetail = agvDetailService.selectByAgvId(agvId);
        Code agvCurrCode = codeService.getById(agvDetail.getRecentCode());
        Double[] fromPosition = new Double[]{agvCurrCode.getX(), agvCurrCode.getY()};
        // to
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/FaultProcessor.java
@@ -7,7 +7,6 @@
import com.zy.acs.framework.common.RadixTools;
import com.zy.acs.framework.common.SnowflakeIdWorker;
import com.zy.acs.manager.core.domain.VehicleFaultDto;
import com.zy.acs.manager.manager.entity.Agv;
import com.zy.acs.manager.manager.entity.VehFaultRec;
import com.zy.acs.manager.manager.service.AgvDetailService;
import com.zy.acs.manager.manager.service.AgvService;
@@ -44,11 +43,11 @@
            AgvErrorType errorType = AgvErrorType.query(agv_04_up.getHexFaultId());
            Agv agv = agvService.selectByUuid(vehicle);
            Long agvId = agvService.getAgvId(vehicle);
            VehFaultRec vehFaultRec = new VehFaultRec();
            vehFaultRec.setUuid(String.valueOf(snowflakeIdWorker.nextId()).substring(3));
            vehFaultRec.setAgvId(agv.getId());
            vehFaultRec.setAgvId(agvId);
            vehFaultRec.setFaultNo(String.valueOf(agv_04_up.getFaultId()));
            vehFaultRec.setFaultHex(agv_04_up.getHexFaultId());
            vehFaultRec.setFaultName(null != errorType ? errorType.desc : "undefined");
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/PatrolService.java
@@ -66,17 +66,18 @@
    }
    private void patrolOfMove(String agvNo) {
        Agv agv = agvService.selectByUuid(agvNo);
        AgvDetail agvDetail = agvDetailService.selectMajorByAgvId(agv.getId());
        Long agvId = agvService.getAgvId(agvNo);
        AgvDetail agvDetail = agvDetailService.selectMajorByAgvId(agvId);
        if (taskService.count(new LambdaQueryWrapper<Task>()
                .eq(Task::getAgvId, agv.getId())
                .eq(Task::getAgvId, agvId)
                .in(Task::getTaskSts, TaskStsType.ASSIGN.val(), TaskStsType.PROGRESS.val())
                ) > 0) {
            return;
        }
        if (!agvService.judgeEnable(agv.getId())) {
        if (!agvService.judgeEnable(agvId)) {
            return;
        }
        Agv agv = agvService.getById(agvId);
        Code destinationCode = this.getDestinationCode(agv, agvDetail);
        if (null == destinationCode) {
            return;
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/TrafficService.java
@@ -304,25 +304,25 @@
                            } else {
                                // block vehicle info
                                Agv blockAgv = agvService.selectByUuid(blockAgvNo);
                                String blockAgvCode = codeService.getById(agvDetailService.selectByAgvId(blockAgv.getId()).getRecentCode()).getData();
                                Long blockAgvId = agvService.getAgvId(blockAgvNo);
                                String blockAgvCode = codeService.getById(agvDetailService.selectByAgvId(blockAgvId).getRecentCode()).getData();
                                // create new jam if already notify the avoid vehicle
                                if (!Cools.isEmpty(jam.getAvoAgv(), jam.getAvoSeg()) && !blockAgv.getId().equals(jam.getAvoAgv())) {
                                if (!Cools.isEmpty(jam.getAvoAgv(), jam.getAvoSeg()) && !blockAgvId.equals(jam.getAvoAgv())) {
                                    jam = this.setupNewJam(jam, agv, startCode, segment, draftPath);
                                }
                                do {
                                    // 阻塞车辆正在原地作业,等待 ===>> 超过等待时间,绕路
                                    List<Segment> runningSegList = segmentService.getByAgvAndState(blockAgv.getId(), SegmentStateType.RUNNING.toString());
                                    List<Segment> runningSegList = segmentService.getByAgvAndState(blockAgvId, SegmentStateType.RUNNING.toString());
                                    if (!Cools.isEmpty(runningSegList)) {
                                        maxJamTimeoutFactor = 1;
                                        break;
                                    }
                                    // 判断下个任务是否为原地任务,如果是则等待 ===>> 超过等待时间,绕路;如果不是,让阻塞车辆避让
                                    List<Segment> waitingSegList = segmentService.getJustWaitingSeg(blockAgv.getId());
                                    List<Segment> waitingSegList = segmentService.getJustWaitingSeg(blockAgvId);
                                    if (null != waitingSegList
                                            && waitingSegList.stream().anyMatch(
                                            waitingSeg -> waitingSeg.getEndNode().equals(codeService.selectByData(blockAgvCode).getId())
@@ -336,7 +336,7 @@
                                        if (jam.getCycleAvo() == 1) {
                                            jam.setCycleCode(endCode.getId());
                                        }
                                        jam.setAvoAgv(blockAgv.getId());
                                        jam.setAvoAgv(blockAgvId);
                                        jam.setNotifyTime(new Date());
                                        if (!jamService.updateById(jam)) {
                                            throw new CoolException(jam.getUuid() + "-jam failed to update!!!");
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/astart/NavigateNode.java
@@ -4,10 +4,9 @@
import java.io.Serializable;
import java.util.Objects;
import java.util.Optional;
/**
 * A*寻路算法Node节点
 * Node节点
 */
@Data
public class NavigateNode implements Comparable<NavigateNode>, Cloneable, Serializable {
@@ -19,14 +18,8 @@
    private int z;  //坐标z(高度)
    private int F;  //综合花费的步数
    private int G;  //已经花费的步数
    private int H;  //将要花费的步数
    private NavigateNode parent;    //父节点
    private Boolean turningPoint;   //是否为拐点
    private String direction;   //行走方向
    private Integer lastDistance;   // 距离上个节点距离
    private Integer moveDistance;   // 总行走距离
    private Integer weight;        // G 权重
    private String codeData;
@@ -40,25 +33,6 @@
        this.x = x;
        this.y = y;
        this.codeData = codeData;
    }
    //通过结点的坐标和目标结点的坐标可以计算出F, G, H三个属性
    //需要传入这个节点的上一个节点和最终的结点
    public void initNode(NavigateNode father, NavigateNode end) {
        this.parent = father;
        if (this.parent != null) {
            //走过的步数等于父节点走过的步数加一
            this.G = father.G
                    + Optional.ofNullable(this.lastDistance).orElse(0)
                    + Optional.ofNullable(this.weight).orElse(0);
        } else { //父节点为空代表它是第一个结点
            this.G = 0;
        }
        //以下计算方案为算法原始方案,没有去拐点方案。已被Solution计算时自动覆盖。
        //计算通过现在的结点的位置和最终结点的位置计算H值(曼哈顿法:坐标分别取差值相加)
        this.H = Math.abs(this.x - end.x) + Math.abs(this.y - end.y);
        this.F = this.G + this.H;
    }
    @Override
@@ -87,19 +61,6 @@
    @Override
    public int hashCode() {
        return Objects.hash(x, y);
    }
    public void reset() {
        this.F = 0;
        this.G = 0;
        this.H = 0;
        this.parent = null;
        this.turningPoint = null;
        this.direction = null;
        this.lastDistance = null;
        this.moveDistance = null;
        this.weight = null;
        this.codeData = null;
    }
}
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/astart/NavigateNodeFactory.java
File was deleted
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/astart/NavigateNodePool.java
File was deleted
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/AgvService.java
@@ -7,7 +7,6 @@
import com.zy.acs.manager.core.domain.VehicleDto;
import com.zy.acs.manager.manager.controller.result.AgvResult;
import com.zy.acs.manager.manager.entity.Agv;
import com.zy.acs.manager.manager.entity.Task;
import java.util.List;
@@ -23,7 +22,9 @@
    Agv selectByUuid(String uuid);
    Agv queryIdle(Task task);
    Long getAgvId(String uuid);
    String getAgvNo(Long agvId);
    Boolean judgeEnable(Long agvId);
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/ActionServiceImpl.java
@@ -2,7 +2,6 @@
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.zy.acs.manager.manager.entity.Action;
import com.zy.acs.manager.manager.entity.Agv;
import com.zy.acs.manager.manager.enums.ActionStsType;
import com.zy.acs.manager.manager.enums.ActionTypeType;
import com.zy.acs.manager.manager.mapper.ActionMapper;
@@ -108,8 +107,8 @@
    @Override
    public List<String> getPathListByAgv(String agvNo) {
        Agv agv = agvService.selectByUuid(agvNo);
        return this.baseMapper.selectSortCodeByAgv(agv.getId());
        Long agvId = agvService.getAgvId(agvNo);
        return this.baseMapper.selectSortCodeByAgv(agvId);
    }
    @Override
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/AgvDetailServiceImpl.java
@@ -32,8 +32,7 @@
    @Override
    public AgvDetail selectByAgvNo(String agvNo) {
        Agv agv = agvService.selectByUuid(agvNo);
        return this.selectByAgvId(agv.getId());
        return this.selectByAgvId(agvService.getAgvId(agvNo));
    }
    @Override
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/AgvServiceImpl.java
@@ -11,7 +11,10 @@
import com.zy.acs.manager.common.domain.PageResult;
import com.zy.acs.manager.core.domain.VehicleDto;
import com.zy.acs.manager.manager.controller.result.AgvResult;
import com.zy.acs.manager.manager.entity.*;
import com.zy.acs.manager.manager.entity.Agv;
import com.zy.acs.manager.manager.entity.AgvDetail;
import com.zy.acs.manager.manager.entity.AgvModel;
import com.zy.acs.manager.manager.entity.Segment;
import com.zy.acs.manager.manager.enums.SegmentStateType;
import com.zy.acs.manager.manager.mapper.AgvMapper;
import com.zy.acs.manager.manager.service.*;
@@ -20,8 +23,11 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * 字典数据Service实现
@@ -34,6 +40,10 @@
public class AgvServiceImpl extends ServiceImpl<AgvMapper, Agv> implements AgvService {
    private final RedisSupport redis = RedisSupport.defaultRedisSupport;
    private static final Map<String, Long> AGV_ID_MAP = new HashMap<>();
    private static final Map<Long, String> AGV_NO_MAP = new HashMap<>();
    @Autowired
    private AgvDetailService agvDetailService;
@@ -48,6 +58,14 @@
    @Autowired
    private TaskService taskService;
    @PostConstruct
    public void init() {
        for (Agv agv : this.list()) {
            AGV_ID_MAP.put(agv.getUuid(), agv.getId());
            AGV_NO_MAP.put(agv.getId(), agv.getUuid());
        }
    }
    @Override
    public PageResult<AgvResult> pageRel(PageParam<Agv, BaseParam> pageParam) {
        return new PageResult<>(this.baseMapper.selectPageRel(pageParam, pageParam.checkoutMap()), pageParam.getTotal());
@@ -59,12 +77,21 @@
    }
    @Override
    public Agv queryIdle(Task task) {
        if (Cools.isEmpty(task)) {
    public Long getAgvId(String uuid) {
        if (Cools.isEmpty(uuid)) {
            return null;
        }
        return AGV_ID_MAP.get(uuid);
    }
    @Override
    public String getAgvNo(Long agvId) {
        if (Cools.isEmpty(agvId)) {
        return null;
    }
        return AGV_NO_MAP.get(agvId);
    }
    @Override
    public Boolean judgeEnable(Long agvId) {
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/JamServiceImpl.java
@@ -3,7 +3,6 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.zy.acs.framework.common.Cools;
import com.zy.acs.manager.manager.entity.Agv;
import com.zy.acs.manager.manager.entity.Code;
import com.zy.acs.manager.manager.entity.Jam;
import com.zy.acs.manager.manager.entity.Segment;
@@ -56,7 +55,7 @@
        List<Jam> jams = this.list(new LambdaQueryWrapper<Jam>()
                .eq(Jam::getJamAgv, jamAgv)
                .eq(Jam::getJamSeg, jamSeg)
                .eq(Jam::getAvoAgv, agvService.selectByUuid(avoAgvNo).getId())
                .eq(Jam::getAvoAgv, agvService.getAgvId(avoAgvNo))
                .eq(Jam::getCycleAvo, 1)
                .ne(Jam::getState, JamStateType.DEPRECATED.toString())
//                .eq(Jam::getState, JamStateType.RUNNING.toString())
@@ -69,14 +68,14 @@
    @Override
    public List<Jam> getJamFromSegmentByAvo(Segment jamSeg, String avoAgvNo) {
        Agv avoAgv = agvService.selectByUuid(avoAgvNo);
        return this.baseMapper.selectJamFromSegmentByAvo(jamSeg.getId(), avoAgv.getId());
        Long avoAgvId = agvService.getAgvId(avoAgvNo);
        return this.baseMapper.selectJamFromSegmentByAvo(jamSeg.getId(), avoAgvId);
    }
    @Override
    public List<Jam> getUnfinishedAvoSegByAvo(String avoAgvNo, Segment currSeg) {
        Agv avoAgv = agvService.selectByUuid(avoAgvNo);
        return this.baseMapper.selectUnfinishedAvoSegByAvo(avoAgv.getId(), null);
        Long agvId = agvService.getAgvId(avoAgvNo);
        return this.baseMapper.selectUnfinishedAvoSegByAvo(agvId, null);
    }
    @Override