#
vincentlu
2025-12-31 4dec9b5fe50a366b14910b7f1ae057e5be6e1366
#
7个文件已修改
92 ■■■■■ 已修改文件
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/AllocateService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java 70 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/TransferStationHandler.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/mapper/SegmentMapper.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/SegmentService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/SegmentServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/resources/mapper/manager/SegmentMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/AllocateService.java
@@ -225,8 +225,8 @@
            // has enough backpack space to load
            Integer backpack = agvService.getBackpack(agvId);
            int countRemainingBackpack = segmentService.countRemainingBackpack(null, agvId);
            if (countRemainingBackpack >= backpack) {
            List<Integer> usedBackpacks = segmentService.selectUsedBackpacks(null, agvId);
            if (usedBackpacks.size() >= backpack) {
                continue;
            }
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java
@@ -253,27 +253,45 @@
                        , (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())
                            );
//                            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);
                            if (null == currSeg) {
                                throw new BusinessException("[Agv:" + agvNo + "] allocate inbound failed: no roller waiting segment");
                            }
                            // get backpack lev
                            int backpackLev = 0;
                            int backpack = agvService.getBackpack(agvId);
                            List<Integer> usedBackpacks = segmentService.selectUsedBackpacks(currSeg.getTravelId(), agvId);
                            for (int lev = 0; lev < backpack; lev++) {
                                if (!usedBackpacks.contains(lev)) {
                                    backpackLev = lev;
                                    break;
                                }
                            }
                            if (backpackLev == 0) {
                                throw new BusinessException("[Agv:" + agvNo + "] backpack full, can't allocate inbound");
                            }
                            // update curr seg
                            currSeg.setState(SegmentStateType.INIT.toString());
                            currSeg.setUpdateTime(now);
                            if (!segmentService.updateById(currSeg)) {
                                log.error("Segment [{}] failed to update !!!", currSeg.getGroupId() + " - " + currSeg.getSerial());
                            }
                            // new oriSta seg
                            Segment loadSeg = new Segment();
@@ -285,22 +303,30 @@
                            loadSeg.setEndNode(sta.getCode());
                            loadSeg.setPosType(TaskPosDto.PosType.ORI_STA.toString());
                            loadSeg.setState(SegmentStateType.WAITING.toString());
                            loadSeg.setBackpack(backpackLev);
                            loadSeg.setCreateTime(now);
                            loadSeg.setUpdateTime(now);
                            if (!segmentService.save(loadSeg)) {
                                log.error("Segment [{}] failed to save !!!", loadSeg.getTravelId() + " - " + loadSeg.getSerial());
                            }
                            // place segment
                            TaskTypeType taskType = Objects.requireNonNull(TaskTypeType.get(task.getTaskTypeEl()));
                            TaskPosDto.PosType posType = null;
                            TaskPosDto.PosType posType;
                            Code endCode;
                            switch (taskType) {
                                case STA_TO_LOC:
                                    posType = TaskPosDto.PosType.DEST_LOC;
                                    Loc destLoc = locService.getById(task.getDestLoc());
                                    endCode = codeService.getCacheById(destLoc.getCode());
                                    break;
                                case STA_TO_STA:
                                    posType = TaskPosDto.PosType.DEST_STA;
                                    Sta destSta = staService.getById(task.getDestSta());
                                    endCode = codeService.getCacheById(destSta.getCode());
                                    break;
                                default:
                                    throw new BusinessException("[Agv: " + agvNo + "]allocate inbound failed to find travel");
                                    throw new BusinessException("[Agv:" + agvNo + "] allocate inbound only supports STA_TO_LOC/STA_TO_STA");
                            }
                            Segment placeSeg = new Segment();
@@ -308,14 +334,18 @@
                            placeSeg.setTravelId(currSeg.getTravelId());
                            placeSeg.setAgvId(agvId);
                            placeSeg.setTaskId(task.getId());
                            placeSeg.setSerial(currSeg.getSerial() - 1);
                            placeSeg.setEndNode(sta.getCode());
                            placeSeg.setSerial();
                            placeSeg.setEndNode(endCode.getId());
                            placeSeg.setPosType(posType.toString());
                            placeSeg.setState(SegmentStateType.INIT.toString());
                            loadSeg.setBackpack(backpackLev);
                            placeSeg.setCreateTime(now);
                            placeSeg.setUpdateTime(now);
                            if (!segmentService.save(placeSeg)) {
                                log.error("Segment [{}] failed to save !!!", placeSeg.getTravelId() + " - " + placeSeg.getSerial());
                            }
                            // update task
                            task.setAgvId(agvId);
                            task.setTaskSts(TaskStsType.ASSIGN.val());
                            task.setIoTime(now);
@@ -548,6 +578,8 @@
            travel.setTaskContent(JSON.toJSONString(list));
            travel.setTaskIds(JSON.toJSONString(taskList.stream().map(Task::getId).collect(Collectors.toList())));
            travel.setState(TravelStateType.RUNNING.toString());
            travel.setCreateTime(now);
            travel.setUpdateTime(now);
            if (!travelService.save(travel)) {
                throw new BusinessException("任务组保存失败");
            }
@@ -571,6 +603,8 @@
                    segment.setPosType(taskPosDto.getPosType().toString());
                    segment.setBackpack(backpackType.lev);
                    segment.setState(SegmentStateType.INIT.toString());
                    segment.setCreateTime(now);
                    segment.setUpdateTime(now);
                    segmentList.add(segment);
                }
            }
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/TransferStationHandler.java
@@ -10,6 +10,7 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Objects;
// man_segment: start_time, end_time, alter table man_segment
@@ -83,8 +84,8 @@
            // 背篓未满才等
            Integer backpack = agvService.getBackpack(agvId);
            int countRemainingBackpack = segmentService.countRemainingBackpack(currSeg.getTravelId(), agvId);
            if (countRemainingBackpack >= backpack) {
            List<Integer> usedBackpacks = segmentService.selectUsedBackpacks(currSeg.getTravelId(), agvId);
            if (usedBackpacks.size() >= backpack) {
                return false;
            }
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/mapper/SegmentMapper.java
@@ -10,6 +10,6 @@
    List<String> getGroupNo(@Param("state")String state, @Param("agvId")Long agvId, @Param("groupNo")String groupNo);
    int countRemainingBackpack(@Param("travelId") Long travelId, @Param("agvId") Long agvId);
    List<Integer> selectUsedBackpacks(@Param("travelId") Long travelId, @Param("agvId") Long agvId);
}
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/SegmentService.java
@@ -29,7 +29,7 @@
    Segment getCurrRunningSeg(Long agvId, Long codeId);
    int countRemainingBackpack(Long travelId, Long agvId);
    List<Integer> selectUsedBackpacks(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
@@ -165,8 +165,8 @@
    }
    @Override
    public int countRemainingBackpack(Long travelId, Long agvId) {
        return this.baseMapper.countRemainingBackpack(agvId, travelId);
    public List<Integer> selectUsedBackpacks(Long travelId, Long agvId) {
        return this.baseMapper.selectUsedBackpacks(agvId, travelId);
    }
    @Override
zy-acs-manager/src/main/resources/mapper/manager/SegmentMapper.xml
@@ -23,9 +23,9 @@
        </where>
    </sql>
    <select id="countRemainingBackpack" resultType="int">
    <select id="selectUsedBackpacks" resultType="java.lang.Integer">
        SELECT
            COUNT(DISTINCT backpack)
        DISTINCT backpack
        FROM man_segment
        WHERE 1=1
        AND agv_id = #{agvId}
@@ -37,6 +37,7 @@
        AND backpack IS NOT NULL
        AND backpack > 0
        AND state != 'FINISH'
        ORDER BY backpack ASC
    </select>
    <select id="getGroupNo" resultType="java.lang.String">