#
luxiaotao1123
2024-11-12 ce7cab3f73e46f76b10efd7f8ff8dd5ce712482b
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.service.MapService;
import com.zy.acs.manager.manager.entity.Action;
import com.zy.acs.manager.manager.entity.Agv;
import com.zy.acs.manager.manager.entity.AgvDetail;
@@ -14,6 +15,7 @@
import com.zy.acs.manager.manager.service.ActionService;
import com.zy.acs.manager.manager.service.AgvDetailService;
import com.zy.acs.manager.manager.service.CodeService;
import com.zy.acs.manager.manager.service.JamService;
import lombok.extern.slf4j.Slf4j;
import java.util.List;
@@ -29,6 +31,8 @@
    private final AgvDetailService agvDetailService;
    private final ActionService actionService;
    private final CodeService codeService;
    private final MapService mapService;
    private final JamService jamService;
    private final List<Action> actionList;
    private final RedisSupport redis;
@@ -41,6 +45,8 @@
            , AgvDetailService agvDetailService
            , ActionService actionService
            , CodeService codeService
            , MapService mapService
            , JamService jamService
            , List<Action> actionList
    ) {
        this.agv = agv;
@@ -48,6 +54,8 @@
        this.agvDetailService = agvDetailService;
        this.actionService = actionService;
        this.codeService = codeService;
        this.mapService = mapService;
        this.jamService = jamService;
        this.actionList = actionList;
        this.groupId = actionList.get(0).getGroupId();
@@ -108,13 +116,15 @@
        // 模拟电量消耗
//        agvDetail.setVol(agvDetail.getVol() - 0.1 * distanceToMove); // 根据距离消耗电量
        Thread.sleep(1000);
        agvDetailService.updateById(agvDetail);
        Thread.sleep(1000);
        mapService.unlockPath(agv.getUuid(), code.getData());
        jamService.checkIfFinish(agv.getId(), code.getData());
        action.setActionSts(ActionStsType.FINISH.val());
        actionService.updateById(action);
    }
@@ -126,34 +136,37 @@
     * @param action     当前动作
     */
    private void simulateRotating(Agv agv, AgvDetail agvDetail, Action action) throws InterruptedException {
//        Double agvAngle = agvDetail.getAgvAngle();
//        double actionAngle = Double.parseDouble(action.getParams());
//        double totalAngle = Double.parseDouble(action.getParams());
//        double stepAngle = 90.0;
//        double actionProgress = 0.0;
//
//        while (actionProgress < totalAngle) {
//            double angleToRotate = Math.min(stepAngle, totalAngle - actionProgress);
//            // 更新AGV的角度
//            double newAngle = (agvDetail.getAgvAngle() + angleToRotate) % 360;
//            agvDetail.setAgvAngle(newAngle);
//
//            // 模拟电量消耗
////            agvDetail.setVol(agvDetail.getVol() - 0.05 * (angleToRotate / 15.0)); // 根据角度消耗电量
//
//            agvDetailService.updateById(agvDetail);
//
//            Thread.sleep(1000);
//
//            actionProgress += angleToRotate;
//        }
        double actionAngle = Double.parseDouble(action.getParams());
        double totalAngle = Double.parseDouble(action.getParams()); // 假设Action有angle属性
        double stepAngle = 45.0; // 每秒旋转15度,具体值根据需求调整
        double actionProgress = 0.0;
        double newAngle = (agvDetail.getAgvAngle() + actionAngle) % 360;
        while (actionProgress < totalAngle) {
            double angleToRotate = Math.min(stepAngle, totalAngle - actionProgress);
            // 更新AGV的角度
            double newAngle = (agvDetail.getAgvAngle() + angleToRotate) % 360;
            agvDetail.setAgvAngle(newAngle);
        agvDetail.setAgvAngle(newAngle);
            // 模拟电量消耗
//            agvDetail.setVol(agvDetail.getVol() - 0.05 * (angleToRotate / 15.0)); // 根据角度消耗电量
        Thread.sleep(1000);
            // 更新AGV详细信息
            agvDetailService.updateById(agvDetail);
        agvDetailService.updateById(agvDetail);
            // 模拟实际执行时间
            Thread.sleep(1000); // 每秒执行一次
            actionProgress += angleToRotate;
        }
        // 动作完成,更新状态
        action.setActionSts(ActionStsType.FINISH.val());
        actionService.updateById(action);
    }