#
vincentlu
2025-12-31 5b7abad9f80bb0b4c9d0bb2d85e0368a92888b30
#
8个文件已修改
124 ■■■■ 已修改文件
version/doc/RCS输送线逻辑梳理.xmind 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/AllocateService.java 41 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/AllocateSupport.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java 39 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/TransferStationHandler.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/Segment.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/SegmentService.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/SegmentServiceImpl.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
version/doc/RCSÊäËÍÏßÂß¼­ÊáÀí.xmind
Binary files differ
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/AllocateService.java
@@ -4,19 +4,17 @@
import com.zy.acs.framework.common.Cools;
import com.zy.acs.manager.common.utils.CommonUtil;
import com.zy.acs.manager.core.domain.AgvCntDto;
import com.zy.acs.manager.core.domain.Lane;
import com.zy.acs.manager.core.domain.FilterLaneDto;
import com.zy.acs.manager.core.domain.Lane;
import com.zy.acs.manager.core.domain.TaskPosDto;
import com.zy.acs.manager.manager.entity.*;
import com.zy.acs.manager.manager.enums.StaTypeType;
import com.zy.acs.manager.manager.enums.StatusType;
import com.zy.acs.manager.manager.enums.TaskStsType;
import com.zy.acs.manager.manager.enums.TaskTypeType;
import com.zy.acs.manager.manager.enums.*;
import com.zy.acs.manager.manager.service.*;
import com.zy.acs.manager.system.service.ConfigService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import java.util.stream.Collectors;
@@ -91,12 +89,13 @@
        return result;
    }
    @Transactional(rollbackFor = Exception.class)
    public synchronized String execute(Task task, AllocateSupport inbound, AllocateSupport normal) {
        // inbound roller station
        Sta rollerOriSta = getInboundRollerSta(task);
        String inboundAgv = tryAllocateForRoller(task, rollerOriSta, true);
        if (!Cools.isEmpty(inboundAgv)) {
            inbound.success(task, inboundAgv);
            inbound.success(task, inboundAgv, rollerOriSta);
            return inboundAgv;
        }
@@ -104,13 +103,13 @@
        Sta rollerDestSta = getOutboundRollerSta(task);
        String outboundAgv = tryAllocateForRoller(task, rollerDestSta, false);
        if (!Cools.isEmpty(outboundAgv)) {
            normal.success(task, outboundAgv);
            normal.success(task, outboundAgv, rollerDestSta);
            return outboundAgv;
        }
        String normalAgv = this.normalExecute(task);
        if (!Cools.isEmpty(normalAgv)) {
            normal.success(task, normalAgv);
            normal.success(task, normalAgv, null);
            return normalAgv;
        }
@@ -206,17 +205,21 @@
            }
            // has running task and within oriSta
//            List<Segment> currSeg = segmentService.getByAgvAndState(agvId, SegmentStateType.WAITING.toString());
            int taskCnt = taskService.count(new LambdaQueryWrapper<Task>()
                    .eq(Task::getAgvId, agvId)
                    .eq(Task::getOriSta, sta.getId())
                    .and(wrapper -> wrapper
                            .eq(Task::getTaskSts, TaskStsType.ASSIGN.val())
                            .or()
                            .eq(Task::getTaskSts, TaskStsType.PROGRESS.val())
                    )
            );
            if (taskCnt == 0) {
//            int taskCnt = taskService.count(new LambdaQueryWrapper<Task>()
//                    .eq(Task::getAgvId, agvId)
//                    .eq(Task::getOriSta, sta.getId())
//                    .and(wrapper -> wrapper
//                            .eq(Task::getTaskSts, TaskStsType.ASSIGN.val())
//                            .or()
//                            .eq(Task::getTaskSts, TaskStsType.PROGRESS.val())
//                    )
//            );
//            if (taskCnt == 0) {
//                continue;
//            }
            // in TransferStationHandler.hasDelayAtSta
            Segment currSeg = segmentService.getRollerWaiting(agvId, sta.getCode(), TaskPosDto.PosType.ORI_STA);
            if (null == currSeg) {
                continue;
            }
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/AllocateSupport.java
@@ -1,9 +1,10 @@
package com.zy.acs.manager.core.service;
import com.zy.acs.manager.manager.entity.Sta;
import com.zy.acs.manager.manager.entity.Task;
public interface AllocateSupport {
    void success(Task task, String agvNo);
    void success(Task task, String agvNo, Sta sta);
}
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java
@@ -245,19 +245,44 @@
                return;
            }
            List<Long> taskIds = taskList.stream().map(Task::getId).distinct().collect(Collectors.toList());
//            List<Long> taskIds = taskList.stream().map(Task::getId).distinct().collect(Collectors.toList());
            for (Task t : taskList) {
                String resultAgvNo = allocateService.execute(t
                        // inbound
                        , (task, agvNo) -> {
                        , (task, agvNo, sta) -> {
                            Long agvId = agvService.getAgvId(agvNo);
                            List<Travel> travelList = travelService.list(new LambdaQueryWrapper<Travel>()
                                    .eq(Travel::getAgvId, agvId)
                                    .eq(Travel::getState, TravelStateType.RUNNING.toString())
                                    .orderByDesc(Travel::getCreateTime));
                            if (Cools.isEmpty(travelList)) {
                                throw new BusinessException("[Agv: " + agvNo + "]allocate inbound failed to find travel");
                            }
                            Travel travel = travelList.get(0);
                            List<Segment> currSegments = segmentService.list(new LambdaQueryWrapper<Segment>()
                                    .eq(Segment::getAgvId, agvId)
                                    .eq(Segment::getTravelId, travel.getId())
                            );
                            // load segment
                            Segment currSeg = segmentService.getRollerWaiting(agvId, sta.getCode(), TaskPosDto.PosType.ORI_STA);
                            // place segment
                            task.setAgvId(agvId);
                            task.setTaskSts(TaskStsType.ASSIGN.val());
                            task.setIoTime(now);
                            task.setUpdateTime(now);
                            if (!taskService.updateById(task)) {
                                throw new BusinessException("seqNum: " + task.getSeqNum() + " failed to update");
                            }
                        }
                        // normal
                        , (task, agvNo) -> {
                            if (Cools.isEmpty(agvNo)) {
                                return;
                            }
                            task.setAgvId(agvService.getAgvId(agvNo));
                        , (task, agvNo, sta) -> {
                            Long agvId = agvService.getAgvId(agvNo);
                            task.setAgvId(agvId);
                            task.setTaskSts(TaskStsType.WAITING.val());
                            task.setIoTime(now);
                            task.setUpdateTime(now);
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/TransferStationHandler.java
@@ -12,7 +12,8 @@
import java.util.Objects;
// man_segment: start_time, end_time
// man_segment: start_time, end_time, alter table man_segment
//    add roller_waiting int(1) default 0 null comment '滚筒线等待' after end_time;
/**
 * alter table man_sta
 *     add capacity int null comment '槽位数' after angle;
@@ -87,6 +88,12 @@
                return false;
            }
            // sign waiting
            if (currSeg.getRollerWaiting() == 0) {
                currSeg.setRollerWaiting(1);
                segmentService.updateById(currSeg);
            }
            // timeout
            return (now - preEndTime) < LOAD_DELAY_MS;
        }
@@ -102,6 +109,12 @@
                return false;
            }
            // sign waiting
            if (currSeg.getRollerWaiting() == 0) {
                currSeg.setRollerWaiting(1);
                segmentService.updateById(currSeg);
            }
            // timeout
            return (now - preEndTime) < PLACE_DELAY_MS;
        }
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/Segment.java
@@ -107,6 +107,12 @@
    private Date endTime;
    /**
     * æ»šç­’线等待 1: æ˜¯  0: å¦
     */
    @ApiModelProperty(value= "滚筒线等待 1: æ˜¯  0: å¦  ")
    private Integer rollerWaiting;
    /**
     * è¿›åº¦
     */
    @ApiModelProperty(value= "进度")
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/SegmentService.java
@@ -1,6 +1,7 @@
package com.zy.acs.manager.manager.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.zy.acs.manager.core.domain.TaskPosDto;
import com.zy.acs.manager.manager.entity.Segment;
import com.zy.acs.manager.manager.enums.SegmentStateType;
@@ -30,4 +31,6 @@
    int countRemainingBackpack(Long travelId, Long agvId);
    Segment getRollerWaiting(Long agvId, Long codeId, TaskPosDto.PosType posType);
}
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/SegmentServiceImpl.java
@@ -4,6 +4,7 @@
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.zy.acs.framework.common.Cools;
import com.zy.acs.framework.exception.CoolException;
import com.zy.acs.manager.core.domain.TaskPosDto;
import com.zy.acs.manager.manager.entity.Segment;
import com.zy.acs.manager.manager.entity.Task;
import com.zy.acs.manager.manager.enums.ActionStsType;
@@ -168,4 +169,20 @@
        return this.baseMapper.countRemainingBackpack(agvId, travelId);
    }
    @Override
    public Segment getRollerWaiting(Long agvId, Long codeId, TaskPosDto.PosType posType) {
        List<Segment> segments = this.list(new LambdaQueryWrapper<Segment>()
                .eq(Segment::getAgvId, agvId)
                .eq(Segment::getState, SegmentStateType.WAITING.toString())
                .eq(Segment::getEndNode, codeId)
                .eq(Segment::getPosType, posType.toString())
                .eq(Segment::getRollerWaiting, 1)
                .orderByDesc(Segment::getId)
        );
        if (Cools.isEmpty(segments)) {
            return null;
        }
        return segments.get(0);
    }
}