#
luxiaotao1123
2025-01-08 aa6f20d98b5d8e18ae56f9562a78d403a5417b48
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;
@@ -66,7 +65,6 @@
    @Override
    public void run() {
        try {
            FakeProcessor.AGV_PROCESSING_MAP.put(agv.getId(), true);
            String qrCode = null;
            for (Action action : actionList) {
                processAction(agv, action);
@@ -81,15 +79,11 @@
    }
    private void processAction(Agv agv, Action action) throws InterruptedException {
        AgvDetail agvDetail = agvDetailService.selectByAgvId(agv.getId());
        if (agvDetail == null) {
            return;
        }
        switch (Objects.requireNonNull(ActionTypeType.get(action.getActionTypeEl()))) {
            case TurnCorner:
                simulateWalking(agv, agvDetail, action);
                simulateRotating(agv, agvDetail, action);
                simulateWalking(agv, action);
                simulateRotating(agv, action);
                break;
            case StraightBackUnturnable:
            case StraightBackTurnable:
@@ -97,7 +91,7 @@
            case StraightAheadTurnable:
            case FinishPath:
            case DockingCharge:
                simulateWalking(agv, agvDetail, action);
                simulateWalking(agv, action);
                break;
            case ReadyTakeFromShelvesLoc:
            case ReadyReleaseToShelvesLoc:
@@ -109,16 +103,17 @@
    }
    private void simulateWalking(Agv agv, AgvDetail agvDetail, Action action) throws InterruptedException {
        Code code = codeService.selectByData(action.getCode());
        agvDetail.setPos(1);
        agvDetail.setCode(code.getId());
    private void simulateWalking(Agv agv, Action action) throws InterruptedException {
        Code code = codeService.getCacheByData(action.getCode());
//        agvDetail.setPos(1);
//        agvDetail.setCode(code.getId());
        // 模拟电量消耗
//        agvDetail.setVol(agvDetail.getVol() - 0.1 * distanceToMove); // 根据距离消耗电量
        Thread.sleep(ACTION_DURING_TIME);
        Thread.sleep(MapDataWsScheduler.WEBSOCKET_BROADCAST_INTERVAL);
        agvDetailService.updateById(agvDetail);
        agvDetailService.updatePosCodeByAgvId(agv.getId(), code.getId());
//        agvDetailService.updateById(agvDetail);
        mapService.unlockPath(agv.getUuid(), code.getData());
        jamService.checkIfFinish(agv.getId(), code.getData());
@@ -131,17 +126,16 @@
     * 模拟AGV旋转
     *
     * @param agv        当前AGV
     * @param agvDetail  AGV详细信息
     * @param action     当前动作
     */
    private void simulateRotating(Agv agv, AgvDetail agvDetail, Action action) throws InterruptedException {
    private void simulateRotating(Agv agv, Action action) throws InterruptedException {
        double actionAngle = Double.parseDouble(action.getParams());
        agvDetail.setAgvAngle(actionAngle);
//        agvDetail.setAgvAngle(actionAngle);
        // 模拟电量消耗?
//        agvDetail.setVol(agvDetail.getVol() - 0.05 * (angleToRotate / 15.0)); // 根据角度消耗电量
        Thread.sleep(ACTION_DURING_TIME);
        agvDetailService.updateById(agvDetail);
        Thread.sleep(MapDataWsScheduler.WEBSOCKET_BROADCAST_INTERVAL);
        agvDetailService.updateAngleByAgvId(agv.getId(), actionAngle);
        action.setActionSts(ActionStsType.FINISH.val());
        actionService.updateById(action);
    }