#
luxiaotao1123
2024-11-15 5c79d2221f27d384b97e0808e18d32fd29326dc5
#
9个文件已修改
2个文件已删除
410 ■■■■ 已修改文件
zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/MapDataWsScheduler.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MockService.java 281 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/TrafficService.java 31 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/astart/AStarNavigateService.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/fake/AgvSimulatorTask.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/controller/MockController.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/Jam.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/mapper/JamMapper.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/JamService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/JamServiceImpl.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/resources/mapper/manager/JamMapper.xml 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/MapDataWsScheduler.java
@@ -31,6 +31,8 @@
@Component
public class MapDataWsScheduler {
    public static final int WEBSOCKET_BROADCAST_INTERVAL = 500;
    private ExecutorService singleThreadExecutor;
    @Autowired
@@ -54,7 +56,7 @@
                MapWsVo mapWsVo = new MapWsVo();
                mapWsVo.setAgvVos(syncAgv());
                MapWebSocket.broadcast(GsonUtils.toJson(mapWsVo));
                try { Thread.sleep(500); } catch (InterruptedException ignore) {}
                try { Thread.sleep(WEBSOCKET_BROADCAST_INTERVAL); } catch (InterruptedException ignore) {}
            }
        });
    }
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MockService.java
File was deleted
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/TrafficService.java
@@ -1,6 +1,7 @@
package com.zy.acs.manager.core.service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.zy.acs.common.utils.GsonUtils;
import com.zy.acs.common.utils.RedisSupport;
import com.zy.acs.framework.common.Cools;
import com.zy.acs.framework.common.SnowflakeIdWorker;
@@ -98,6 +99,8 @@
                    }
                }
            }
            // dead lane
            if (jamService.count(new LambdaQueryWrapper<Jam>()
                    .eq(Jam::getJamAgv, agv.getId())
                    .eq(Jam::getJamSeg, segment.getId())
@@ -196,14 +199,17 @@
        String agvNo = agv.getUuid();
        Date now = new Date();
        Jam jam = jamService.getJam(agv.getId(), startCode.getId(), segment.getId());
        // judge avoid of jam
        List<Jam> unfinishedOriginJamByCurrAgv = jamService.hasUnfinishedOriginJamByAvo(agv.getId(), startCode.getId(), segment.getId());
        List<String> blackPath = this.getBlackPathList(unfinishedOriginJamByCurrAgv);
        // 结果集
        List<String> pathList = new ArrayList<>();
        // 无障碍解
        List<String> unlockPathList = mapService.checkoutPath(agvNo, startCode, endCode, false);
        List<String> unlockPathList = mapService.checkoutPath(agvNo, startCode, endCode, false, blackPath);
        // 避让解
        List<String> lockPathList = mapService.checkoutPath(agvNo, startCode, endCode, true);
        List<String> lockPathList = mapService.checkoutPath(agvNo, startCode, endCode, true, blackPath);
        if (!Cools.isEmpty(lockPathList) && // 存在避让解
            Math.abs(lockPathList.size() - unlockPathList.size()) <= Arrays.stream(mapDataDispatcher.getCodeMatrix(lev)).mapToInt(row -> row.length).sum() / 10
@@ -246,7 +252,8 @@
                    Integer maxJamTimeoutFactor = null;
                    // persist jam data
                    jam = this.createOrUpdateJam(agv, startCode, segment, jam);
                    ArrayList<String> jamPath = new ArrayList<>(unlockPathList);
                    jam = this.createOrUpdateJam(agv, startCode, segment, jam, jamPath);
                    // ? has unAvoidable block vehicles
                    if (blockVehicleList.stream().anyMatch(blockVehicleDto -> !blockVehicleDto.isAvoidable())) {
@@ -290,7 +297,7 @@
                                }
                                // notify block vehicle to avoid
                                if (this.notifyVehicleAvoid(blockAgvNo, blockAgvCode, unlockPathList, agvNo, jam)) {
                                if (this.notifyVehicleAvoid(blockAgvNo, blockAgvCode, jamPath, agvNo, jam)) {
                                    if (jam.getCycleAvo() == 1) {
                                        jam.setCycleCode(endCode.getId());
                                    }
@@ -465,13 +472,14 @@
        return true;
    }
    private Jam createOrUpdateJam(Agv agv, Code startCode, Segment segment, Jam jam) {
    private Jam createOrUpdateJam(Agv agv, Code startCode, Segment segment, Jam jam, List<String> jamPath) {
        if (jam == null) {
            jam = new Jam();
            jam.setUuid(String.valueOf(snowflakeIdWorker.nextId()).substring(3));
            jam.setJamAgv(agv.getId());
            jam.setJamCode(startCode.getId());
            jam.setJamSeg(segment.getId());
            jam.setJamPath(GsonUtils.toJson(jamPath));
            jam.setStartTime(new Date());
            jam.setState(JamStateType.RUNNING.toString());
            if (!jamService.save(jam)) {
@@ -487,4 +495,17 @@
        return jam;
    }
    private List<String> getBlackPathList(List<Jam> unfinishedOriginJamByCurrAgv) {
        List<String> blackPathList = new ArrayList<>();
        if (!Cools.isEmpty(unfinishedOriginJamByCurrAgv)) {
            for (Jam jam : unfinishedOriginJamByCurrAgv) {
                if (!Cools.isEmpty(jam.getJamPath())) {
                    List<String> list = GsonUtils.fromJsonToList(jam.getJamPath(), String.class);
                    blackPathList.addAll(list);
                }
            }
        }
        return blackPathList.stream().distinct().collect(Collectors.toList());
    }
}
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/astart/AStarNavigateService.java
@@ -83,6 +83,10 @@
//                    }
//                }
                if (!Cools.isEmpty(blackList) && blackList.contains(node.getCodeData())) {
                    continue;
                }
                // 节点被占用
                DynamicNode dynamicNode = dynamicMatrix[node.getX()][node.getY()];
                String vehicle = dynamicNode.getVehicle();
@@ -90,9 +94,6 @@
                if (!vehicle.equals(DynamicNodeType.ACCESS.val)) {
                    if (!vehicle.equals(agvNo)) {
                        if (!Cools.isEmpty(blackList) && blackList.contains(vehicle)) {
                            continue;
                        }
                        if (lock) {
                            continue;
                        }
@@ -107,9 +108,6 @@
                    List<String> otherWaveList = MapDataUtils.hasOtherWave(waveNodeList, agvNo);
                    if (!Cools.isEmpty(otherWaveList)) {
                        if (!Cools.isEmpty(blackList) && 0 < Cools.getIntersection(otherWaveList, blackList).size()) {
                            continue;
                        }
                        if (lock) {
                            continue;
zy-acs-manager/src/main/java/com/zy/acs/manager/fake/AgvSimulatorTask.java
@@ -5,6 +5,7 @@
import com.zy.acs.common.domain.protocol.AGV_11_UP;
import com.zy.acs.common.enums.AgvCompleteType;
import com.zy.acs.common.utils.RedisSupport;
import com.zy.acs.manager.core.scheduler.MapDataWsScheduler;
import com.zy.acs.manager.core.service.MapService;
import com.zy.acs.manager.manager.entity.Action;
import com.zy.acs.manager.manager.entity.Agv;
@@ -26,8 +27,6 @@
 */
@Slf4j
public class AgvSimulatorTask implements Runnable {
    public static final int ACTION_DURING_TIME = 500;
    private final Agv agv;
    private final AgvDetailService agvDetailService;
@@ -116,7 +115,7 @@
        // 模拟电量消耗
//        agvDetail.setVol(agvDetail.getVol() - 0.1 * distanceToMove); // 根据距离消耗电量
        Thread.sleep(ACTION_DURING_TIME);
        Thread.sleep(MapDataWsScheduler.WEBSOCKET_BROADCAST_INTERVAL);
        agvDetailService.updateById(agvDetail);
@@ -140,7 +139,7 @@
        // 模拟电量消耗?
//        agvDetail.setVol(agvDetail.getVol() - 0.05 * (angleToRotate / 15.0)); // 根据角度消耗电量
        Thread.sleep(ACTION_DURING_TIME);
        Thread.sleep(MapDataWsScheduler.WEBSOCKET_BROADCAST_INTERVAL);
        agvDetailService.updateById(agvDetail);
        action.setActionSts(ActionStsType.FINISH.val());
        actionService.updateById(action);
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/controller/MockController.java
File was deleted
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/Jam.java
@@ -58,6 +58,12 @@
    private Long jamSeg;
    /**
     * 阻塞路径
     */
    @ApiModelProperty(value= "阻塞路径")
    private String jamPath;
    /**
     * 避让车辆
     */
    @ApiModelProperty(value= "避让车辆")
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/mapper/JamMapper.java
@@ -2,7 +2,12 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.zy.acs.manager.manager.entity.Jam;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface JamMapper extends BaseMapper<Jam> {
    List<Jam> selectUnfinishedJamByAvo(@Param("avoAgv")Long avoAgv, @Param("currCode")Long currCode, @Param("currSeg")Long currSeg);
}
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/JamService.java
@@ -10,6 +10,8 @@
    Jam getJam(Long agvId, Long jamCode, Long jamSeg);
    List<Jam> hasUnfinishedOriginJamByAvo(Long avoAgv, Long currCode, Long currSeg);
    Jam getCycleJam(Long jamAgv, Long jamSeg, String avoAgvNo);
    List<Jam> queryByAvoid(Long avoAgv, JamStateType jamState);
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/JamServiceImpl.java
@@ -40,6 +40,15 @@
        return null;
    }
    /**
     * 因为你而阻塞的车,现在你已经在避让点了
     * 你的下一个segment是不是又会导致阻塞
     */
    @Override
    public List<Jam> hasUnfinishedOriginJamByAvo(Long avoAgv, Long currCode, Long currSeg) {
        return this.baseMapper.selectUnfinishedJamByAvo(avoAgv, null, null);
    }
    @Override
    public Jam getCycleJam(Long jamAgv, Long jamSeg, String avoAgvNo) {
        List<Jam> jams = this.list(new LambdaQueryWrapper<Jam>()
zy-acs-manager/src/main/resources/mapper/manager/JamMapper.xml
@@ -23,4 +23,22 @@
        </where>
    </sql>
    <select id="selectUnfinishedJamByAvo" resultType="com.zy.acs.manager.manager.entity.Jam">
        SELECT
        mj.*
        FROM man_jam mj
        LEFT JOIN man_segment jam_seg ON mj.jam_seg = jam_seg.id
        LEFT JOIN man_segment avo_seg ON mj.avo_seg = avo_seg.id
        WHERE 1=1
        AND jam_seg.state in ('INIT', 'WAITING')
        AND avo_seg.state not in ('INIT', 'WAITING')
        AND mj.avo_agv = #{avoAgv}
        <if test="currSeg != null">
            AND mj.avo_seg = #{currSeg}
        </if>
        <if test="currCode != null">
            AND mj.avo_code = #{currCode}
        </if>
    </select>
</mapper>