#
luxiaotao1123
2024-11-20 c514b7d8ad8a3f89b81c949e265446b4f09a4bb5
#
3个文件已修改
119 ■■■■■ 已修改文件
zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/MapDataWsScheduler.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java 90 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/AgvServiceImpl.java 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/MapDataWsScheduler.java
@@ -15,6 +15,7 @@
import com.zy.acs.manager.manager.service.AgvService;
import com.zy.acs.manager.manager.service.CodeService;
import com.zy.acs.manager.manager.websocket.MapWebSocket;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -28,6 +29,7 @@
/**
 * Created by vincent on 10/14/2024
 */
@Slf4j
@Component
public class MapDataWsScheduler {
@@ -52,11 +54,14 @@
        this.singleThreadExecutor.execute(() -> {
            try { Thread.sleep(200); } catch (InterruptedException ignore) {}
            while (!Thread.currentThread().isInterrupted()) {
                try {
                MapWsVo mapWsVo = new MapWsVo();
                mapWsVo.setAgvVos(syncAgv());
                MapWebSocket.broadcast(GsonUtils.toJson(mapWsVo));
                try { Thread.sleep(WEBSOCKET_BROADCAST_INTERVAL); } catch (InterruptedException ignore) {}
                    Thread.sleep(WEBSOCKET_BROADCAST_INTERVAL);
                } catch (Exception e) {
                    log.error("MapDataWsScheduler.init", e);
                }
            }
        });
    }
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java
@@ -22,7 +22,6 @@
import com.zy.acs.manager.common.domain.TaskDto;
import com.zy.acs.manager.common.domain.param.HandlerPublishParam;
import com.zy.acs.manager.common.exception.BusinessException;
import com.zy.acs.manager.common.utils.CommonUtil;
import com.zy.acs.manager.core.domain.AgvBackpackDto;
import com.zy.acs.manager.core.domain.Lane;
import com.zy.acs.manager.core.domain.TaskPosDto;
@@ -221,7 +220,7 @@
            for (Task task : taskList) {
                Agv agv = allocateService.execute(task);
                if (null == agv) {
                    log.warn("Task[{}] has an issue, because it failed to checkout agv which is idle...", task.getSeqNum());
//                    log.warn("Task[{}] has an issue, because it failed to checkout agv which is idle...", task.getSeqNum());
                    continue;
                }
                task.setAgvId(agv.getId());
@@ -249,7 +248,8 @@
            // valid -----------------------------------------------
            Agv agv = agvService.getById(agvId);
            if (!agvService.judgeEnable(agv.getId(), true)) {
                throw new CoolException("AGV[" + agv.getUuid() + "]当前不可用...");
                return;
//                throw new CoolException("AGV[" + agv.getUuid() + "]当前不可用...");
            }
            if (!Cools.isEmpty(taskService.selectInSts(agvId, TaskStsType.ASSIGN, TaskStsType.PROGRESS))) {
                throw new CoolException("AGV[" + agv.getUuid() + "]分配任务失败,已存在执行任务...");
@@ -387,48 +387,48 @@
            }
            // re-order by agv current position
            Code currCode = codeService.getById(agvDetail.getRecentCode());
            Double[] currPosition = new Double[] {currCode.getX(), currCode.getY()};
            List<TaskPosDto> theFirstOne = list.get(0);
            List<TaskPosDto> theLastOne = list.get(list.size() - 1);
            if (list.size() == 1) {
                TaskPosDto head = theFirstOne.get(0);
                TaskPosDto tail = theFirstOne.get(theFirstOne.size() - 1);
                int distanceByHead = CommonUtil.calcDistance(currPosition, head.getXy());
                int distanceByTail = CommonUtil.calcDistance(currPosition, tail.getXy());
                if (distanceByTail < distanceByHead) {
                    Collections.reverse(theFirstOne);
                }
            } else {
                TaskPosDto headOfFirst = theFirstOne.get(0);
                TaskPosDto tailOfFirst = theFirstOne.get(theFirstOne.size() - 1);
                TaskPosDto headOfLast = theLastOne.get(0);
                TaskPosDto tailOfLast = theLastOne.get(theLastOne.size() - 1);
                int distanceByHeadOfFirst = CommonUtil.calcDistance(currPosition, headOfFirst.getXy());
                int distanceByTailOfFirst = CommonUtil.calcDistance(currPosition, tailOfFirst.getXy());
                int distanceByHeadOfLast = CommonUtil.calcDistance(currPosition, headOfLast.getXy());
                int distanceByTailOfLast = CommonUtil.calcDistance(currPosition, tailOfLast.getXy());
                if (Math.min(distanceByHeadOfLast, distanceByTailOfLast) < Math.min(distanceByHeadOfFirst, distanceByTailOfFirst)) {
                    Collections.reverse(list);
                    if (distanceByTailOfLast < distanceByHeadOfLast) {
                        Collections.reverse(theLastOne);
                    }
                } else {
                    if (distanceByTailOfFirst < distanceByHeadOfFirst) {
                        Collections.reverse(theFirstOne);
                    }
                }
            }
//            Code currCode = codeService.getById(agvDetail.getRecentCode());
//            Double[] currPosition = new Double[] {currCode.getX(), currCode.getY()};
//
//            List<TaskPosDto> theFirstOne = list.get(0);
//            List<TaskPosDto> theLastOne = list.get(list.size() - 1);
//
//            if (list.size() == 1) {
//                TaskPosDto head = theFirstOne.get(0);
//                TaskPosDto tail = theFirstOne.get(theFirstOne.size() - 1);
//
//                int distanceByHead = CommonUtil.calcDistance(currPosition, head.getXy());
//                int distanceByTail = CommonUtil.calcDistance(currPosition, tail.getXy());
//
//                if (distanceByTail < distanceByHead) {
//                    Collections.reverse(theFirstOne);
//                }
//
//            } else {
//                TaskPosDto headOfFirst = theFirstOne.get(0);
//                TaskPosDto tailOfFirst = theFirstOne.get(theFirstOne.size() - 1);
//
//                TaskPosDto headOfLast = theLastOne.get(0);
//                TaskPosDto tailOfLast = theLastOne.get(theLastOne.size() - 1);
//
//                int distanceByHeadOfFirst = CommonUtil.calcDistance(currPosition, headOfFirst.getXy());
//                int distanceByTailOfFirst = CommonUtil.calcDistance(currPosition, tailOfFirst.getXy());
//
//                int distanceByHeadOfLast = CommonUtil.calcDistance(currPosition, headOfLast.getXy());
//                int distanceByTailOfLast = CommonUtil.calcDistance(currPosition, tailOfLast.getXy());
//
//                if (Math.min(distanceByHeadOfLast, distanceByTailOfLast) < Math.min(distanceByHeadOfFirst, distanceByTailOfFirst)) {
//                    Collections.reverse(list);
//
//                    if (distanceByTailOfLast < distanceByHeadOfLast) {
//                        Collections.reverse(theLastOne);
//                    }
//                } else {
//                    if (distanceByTailOfFirst < distanceByHeadOfFirst) {
//                        Collections.reverse(theFirstOne);
//                    }
//                }
//            }
            // generate travel
            Travel travel = new Travel();
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/AgvServiceImpl.java
@@ -45,6 +45,8 @@
    private CodeService codeService;
    @Autowired
    private SegmentService segmentService;
    @Autowired
    private TaskService taskService;
    @Override
    public PageResult<AgvResult> pageRel(PageParam<Agv, BaseParam> pageParam) {
@@ -73,16 +75,24 @@
    public Boolean judgeEnable(Long agvId, Boolean withBattery) {
        Agv agv = this.getById(agvId);
        AgvModel agvModel = agvModelService.getById(agv.getAgvModel());
        if (segmentService.count(new LambdaQueryWrapper<Segment>()
        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());
                        })
        ) > 0) {
        )) {
            log.warn("[{}]号Agv正在忙碌 -segment......", agv.getUuid());
            return false;
        }
//        if (0 < taskService.count(new LambdaQueryWrapper<Task>()
//                .eq(Task::getAgvId, agvId)
//                .eq(Task::getTaskType, TaskTypeType.TO_CHARGE.val())
//                .in(Task::getTaskSts, TaskStsType.ASSIGN.val(), TaskStsType.PROGRESS.val())
//        )){
//            log.warn("[{}]号Agv正在去充电 - task......", agv.getUuid());
//            return false;
//        }
        if (!this.judgeOnline(agv.getId())) {
            log.warn("[{}]号Agv不是在线状态......", agv.getUuid());
            return false;
@@ -148,9 +158,9 @@
    @Override
    public Integer getBackpack(Agv agv) {
        if (null != agv.getStage()) {
            return agv.getStage();
        }
//        if (null != agv.getStage()) {
//            return agv.getStage();
//        }
        AgvModel agvModel = agvModelService.getById(agv.getAgvModel());
        assert null != agvModel;
        return agvModel.getBackpack();