#
luxiaotao1123
2025-01-03 86620f192814851deb88c1a1bc78ba8555966cda
#
12个文件已修改
104 ■■■■■ 已修改文件
version/db/sqlIndex 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-flow/src/map/constants.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/MapDataWsScheduler.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MapService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/PatrolService.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/astart/AStarNavigateService.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/mapper/AgvDetailMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/AgvDetailService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/AgvDetailServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/AgvServiceImpl.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/resources/mapper/manager/AgvDetailMapper.xml 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
version/db/sqlIndex
@@ -1,17 +1,34 @@
# man_action
CREATE INDEX idx_agv_action ON man_action(agv_id, action_sts);
CREATE INDEX idx_group_io_time ON man_action(group_id, io_time);
CREATE INDEX idx_priority ON man_action(priority);
CREATE INDEX idx_action_sts ON man_action(action_sts);
# man_action_sts
CREATE INDEX idx_action_sts_uuid ON man_action_sts(uuid);
# man_action_type
CREATE INDEX idx_action_type_uuid ON man_action_type(uuid);
# man_agv_model
CREATE INDEX idx_agv_model_type ON man_agv_model(type);
# man_bus_sts
CREATE INDEX idx_bus_sts_uuid ON man_bus_sts(uuid);
# man_loc_sts
CREATE INDEX idx_loc_sts_uuid ON man_loc_sts(uuid);
# man_task_sts
CREATE INDEX idx_task_sts_uuid ON man_task_sts(uuid);
# man_task_type
CREATE INDEX idx_task_type_uuid ON man_task_type(uuid);
# man_task
CREATE INDEX idx_task_seq_num ON man_task(seq_num);
CREATE INDEX idx_task_agv_id ON man_task(agv_id);
CREATE INDEX idx_task_agv_id_task_sts ON man_task(agv_id, task_sts);
# man_zone
CREATE INDEX idx_zone_uuid ON man_zone(uuid);
# man_agv_detail
CREATE INDEX idx_agv_detail_agv_id ON man_agv_detail(agv_id);
CREATE INDEX idx_agv_id_code_pos ON man_agv_detail(agv_id, code, pos);
# man_agv
CREATE INDEX idx_agv_uuid ON man_agv(uuid);
CREATE INDEX idx_agv_deleted_uuid ON man_agv (deleted, uuid);
# sys_config
CREATE INDEX idx_config_flag ON sys_config(flag);
CREATE INDEX idx_config_deleted_flag ON sys_config(deleted, flag);
zy-acs-flow/src/map/constants.js
@@ -1,5 +1,5 @@
export const ANIMATE_DURING_TIME = 300;
export const ANIMATE_DURING_TIME = 800;
export const MAP_DEFAULT_ROTATION = 270;
zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/MapDataWsScheduler.java
@@ -33,7 +33,7 @@
@Component
public class MapDataWsScheduler {
    public static final int WEBSOCKET_BROADCAST_INTERVAL = 300;
    public static final int WEBSOCKET_BROADCAST_INTERVAL = 800;
    private ExecutorService singleThreadExecutor;
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java
@@ -658,7 +658,6 @@
            assert agvSpeedType != null;
            AgvDetail agvDetail = agvDetailService.selectByAgvId(agvId);
            assert agvDetail != null;
            List<Action> actionList = new ArrayList<>();
            // start node
@@ -697,7 +696,7 @@
                            nextDirection = workDirection;
                            reverse = true;
                        }
                        if (!lastDirection.equals(nextDirection) || actionList.size() == 0) {
                        if (!lastDirection.equals(nextDirection) || actionList.isEmpty()) {
                            // turn
                            actionList.add(new Action(
                                    null,    // 编号
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MapService.java
@@ -58,7 +58,9 @@
        AStarNavigateNode startNode = new AStarNavigateNode(startMapIdx[0], startMapIdx[1], startCode.getData());
        AStarNavigateNode endNode = new AStarNavigateNode(endMapIdx[0], endMapIdx[1], endCode.getData());
//        long startTime = System.currentTimeMillis();
        AStarNavigateNode finishNode = aStarNavigateService.execute(agvNo, startNode, endNode, lock, blackList, segment);
//        System.out.println("A Star Spend time :" + (System.currentTimeMillis() - startTime));
        if (null == finishNode) {
            return new ArrayList<>();
        }
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/PatrolService.java
@@ -34,7 +34,7 @@
@Service
public class PatrolService {
    private static final int SCHEDULE_TIME_INTERVAL = 300;
    private static final int SCHEDULE_TIME_INTERVAL = 100;
    public static final Map<String, ScheduledFuture<?>> AGV_PATROL_MAP = new ConcurrentHashMap<>();
@@ -67,14 +67,11 @@
    private void patrolOfMove(String agvNo) {
        Agv agv = agvService.selectByUuid(agvNo);
        AgvDetail agvDetail = agvDetailService.selectByAgvId(agv.getId());
        AgvDetail agvDetail = agvDetailService.selectMajorByAgvId(agv.getId());
        if (taskService.count(new LambdaQueryWrapper<Task>()
                .eq(Task::getAgvId, agv.getId())
                .and(i -> {
                    i.eq(Task::getTaskSts, TaskStsType.WAITING.val())
                            .or().eq(Task::getTaskSts, TaskStsType.ASSIGN.val())
                            .or().eq(Task::getTaskSts, TaskStsType.PROGRESS.val());
                })) > 0) {
                .in(Task::getTaskSts, TaskStsType.ASSIGN.val(), TaskStsType.PROGRESS.val())
                ) > 0) {
            return;
        }
        if (!agvService.judgeEnable(agv.getId())) {
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/astart/AStarNavigateService.java
@@ -15,7 +15,6 @@
import org.springframework.stereotype.Service;
import java.util.*;
import java.util.concurrent.CopyOnWriteArrayList;
/**
 * Created by vincent on 6/12/2024
@@ -63,15 +62,23 @@
        String[][] codeMatrix = mapDataDispatcher.getCodeMatrix(null);
        DynamicNode[][] dynamicMatrix = mapDataDispatcher.getDynamicMatrix(null);
        String[][] waveMatrix = mapDataDispatcher.getWaveMatrix(null);
        long getNeighborNodesTime = 0;
        int getNeighborNodesCount = 0;
        while (!openQueue.isEmpty()) {
            // 取优先队列顶部元素并且把这个元素从Open表中删除,取F值最小的节点
            AStarNavigateNode currentNode = openQueue.poll();
            // 终点
            if (currentNode.getX() == end.getX() && currentNode.getY() == end.getY()) {
//                System.out.println("getNeighborNodes spend time: " + getNeighborNodesTime +", count: " + getNeighborNodesCount);
                return currentNode;
            }
            long currentTime = System.currentTimeMillis();
            List<AStarNavigateNode> neighbourNodes = this.getNeighborNodes(currentNode, mapMatrix, existNodes);
            getNeighborNodesTime += System.currentTimeMillis() - currentTime;
            getNeighborNodesCount ++;
            for (AStarNavigateNode node : neighbourNodes) {
                node.setCodeData(codeMatrix[node.getX()][node.getY()]);
@@ -97,6 +104,9 @@
                assert !vehicle.equals(DynamicNodeType.BLOCK.val);
                if (!vehicle.equals(DynamicNodeType.ACCESS.val)) {
                    if (!vehicle.equals(agvNo)) {
                        if (lock) {
                            continue;
                        }
                        // 如果存在车辆,则增加权重 2 或者 3,因为拐点会增加权重 1
                        // vehicle已经为当前segment做过了避让,且避让任务已完成,则权重值增加
@@ -107,10 +117,6 @@
                                weight += (WEIGHT_CALC_FACTOR * 2);
                            }
                        }
                        if (lock) {
                            continue;
                        }
                    }
                }
@@ -120,7 +126,6 @@
                if (!waveNode.equals(WaveNodeType.ENABLE.val)) {
                    List<String> waveNodeList = MapDataUtils.parseWaveNode(waveNode);
                    List<String> otherWaveList = MapDataUtils.hasOtherWave(waveNodeList, agvNo);
                    if (!Cools.isEmpty(otherWaveList)) {
                        if (lock) {
@@ -178,7 +183,7 @@
//                existNodes.add(node);
            }
        }
//        System.out.println("getNeighborNodes spend time: " + getNeighborNodesTime +", count: " + getNeighborNodesCount);
        return null;
    }
@@ -191,14 +196,8 @@
        int y = currentNode.getY();
        AStarNavigateNode parent = currentNode.getParent();
        List<AStarNavigateNode> neighbourNodes = new CopyOnWriteArrayList<>();
//        List<AStarNavigateNode> possibleNodes = Arrays.asList(
//                new AStarNavigateNode(x, y + 1), // right
//                new AStarNavigateNode(x, y - 1), // left
//                new AStarNavigateNode(x - 1, y), // up
//                new AStarNavigateNode(x + 1, y)  // down
//        );
//        List<AStarNavigateNode> neighbourNodes = new CopyOnWriteArrayList<>();
        List<AStarNavigateNode> neighbourNodes = new ArrayList<>();
        List<AStarNavigateNode> possibleNodes = new ArrayList<>();
        for (int[] d: DIRECTIONS) {
@@ -211,10 +210,17 @@
            possibleNodes.add(new AStarNavigateNode(nx, ny));
        }
        possibleNodes.parallelStream()
                .map(extendNode -> extendNeighborNodes(currentNode, extendNode, mapMatrix, existNodes, null, null))
                .filter(Objects::nonNull)
                .forEach(neighbourNodes::add);
//        possibleNodes.parallelStream()
//                .map(extendNode -> extendNeighborNodes(currentNode, extendNode, mapMatrix, existNodes, null, null))
//                .filter(Objects::nonNull)
//                .forEach(neighbourNodes::add);
        for (AStarNavigateNode pn : possibleNodes) {
            AStarNavigateNode next = extendNeighborNodes(currentNode, pn, mapMatrix, existNodes, null, null);
            if (next != null) {
                neighbourNodes.add(next);
            }
        }
        return neighbourNodes;
    }
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/mapper/AgvDetailMapper.java
@@ -6,6 +6,8 @@
public interface AgvDetailMapper extends BaseMapper<AgvDetail> {
    AgvDetail selectMajorByAgvId(@Param("agvId") Long agvId);
    int updatePosCode(@Param("id") Long id, @Param("codeId") Long codeId);
    int updateUnPosCode(@Param("id") Long id, @Param("lastCode") Long lastCode);
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/AgvDetailService.java
@@ -7,6 +7,8 @@
public interface AgvDetailService extends IService<AgvDetail> {
    AgvDetail selectMajorByAgvId(Long agvId);
    AgvDetail selectByAgvId(Long agvId);
    AgvDetail selectByAgvNo(String agvNo);
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/AgvDetailServiceImpl.java
@@ -21,6 +21,11 @@
    private AgvModelService agvModelService;
    @Override
    public AgvDetail selectMajorByAgvId(Long agvId) {
        return this.baseMapper.selectMajorByAgvId(agvId);
    }
    @Override
    public AgvDetail selectByAgvId(Long agvId) {
        return this.getOne(new LambdaQueryWrapper<AgvDetail>().eq(AgvDetail::getAgvId, agvId));
    }
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/AgvServiceImpl.java
@@ -77,10 +77,7 @@
        AgvModel agvModel = agvModelService.getById(agv.getAgvModel());
        if (0 < segmentService.count(new LambdaQueryWrapper<Segment>()
                        .eq(Segment::getAgvId, agvId)
                        .and( i -> {
//                    i.eq(Segment::getState, SegmentStateType.WAITING.toString()).or()
                            i.eq(Segment::getState, SegmentStateType.RUNNING.toString());
                        })
                        .eq(Segment::getState, SegmentStateType.RUNNING.toString())
        )) {
            log.warn("[{}]号Agv正在忙碌 - segment......", agv.getUuid());
            return false;
@@ -89,7 +86,7 @@
            log.warn("[{}]号Agv不是在线状态......", agv.getUuid());
            return false;
        }
        AgvDetail agvDetail = agvDetailService.selectByAgvId(agv.getId());
        AgvDetail agvDetail = agvDetailService.selectMajorByAgvId(agv.getId());
        if (null == agvDetail) {
            log.warn("[{}]号Agv未收到状态包......", agv.getUuid());
            return false;
zy-acs-manager/src/main/resources/mapper/manager/AgvDetailMapper.xml
@@ -26,6 +26,13 @@
        </where>
    </sql>
    <select id="selectMajorByAgvId" resultType="com.zy.acs.manager.manager.entity.AgvDetail">
        SELECT id, agv_id, pos, code, last_code, agv_angle, vol, backpack, status, deleted
        FROM man_agv_detail
        WHERE agv_id = #{agvId}
        LIMIT 1
    </select>
    <update id="updatePosCode">
        update man_agv_detail
        set code = #{codeId},