#
vincentlu
2025-01-20 800418710e803ef898f7f364ba9d6293cc3a4967
#
7个文件已修改
2个文件已添加
112 ■■■■ 已修改文件
zy-acs-manager/src/main/java/com/zy/acs/manager/core/cache/CoreCache.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/core/domain/CodeStepDto.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/core/domain/type/JobType.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/PatrolService.java 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/fake/AgvSimulatorTask.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/fake/FakeProcessor.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/AgvDetailService.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/AgvDetailServiceImpl.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/core/cache/CoreCache.java
@@ -1,5 +1,7 @@
package com.zy.acs.manager.core.cache;
import com.zy.acs.manager.core.domain.CodeStepDto;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
@@ -7,4 +9,6 @@
    public static final Map<Long, Integer> AGV_BACKPACK_USED_CACHE = new ConcurrentHashMap<>();
    public static final Map<Long, CodeStepDto> AGV_MOCK_STEP_CACHE = new ConcurrentHashMap<>();
}
zy-acs-manager/src/main/java/com/zy/acs/manager/core/domain/CodeStepDto.java
New file
@@ -0,0 +1,29 @@
package com.zy.acs.manager.core.domain;
import com.zy.acs.manager.core.domain.type.JobType;
import lombok.Data;
import java.io.Serializable;
@Data
public class CodeStepDto implements Serializable {
    private static final long serialVersionUID = 5750534229295043118L;
    private String codeData;
    private JobType jobType;
    public CodeStepDto() {
    }
    public CodeStepDto(String codeData, JobType jobType) {
        this.codeData = codeData;
        this.jobType = jobType;
    }
    public static CodeStepDto build(String codeData, JobType jobType) {
        return new CodeStepDto(codeData, jobType);
    }
}
zy-acs-manager/src/main/java/com/zy/acs/manager/core/domain/type/JobType.java
New file
@@ -0,0 +1,21 @@
package com.zy.acs.manager.core.domain.type;
@SuppressWarnings("all")
public enum JobType {
    CONVEYOR_PICK(3000),
    CONVEYOR_DROP(3000),
    LOC_PICK(1500),
    LOCK_DROP(1500),
    ;
    public static void main(String[] args) {
        System.out.println();
    }
    public long waitTime;
    JobType(long waitTime) {
        this.waitTime = waitTime;
    }
}
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java
@@ -1050,9 +1050,9 @@
                action.setStartTime(now);
                action.setIoTime(now);
                action.setUpdateTime(now);
                if (!actionService.updateById(action)) {
                    throw new BusinessException(action.getPriority() + " - " + action.getName() + "动作更新失败");
                }
            if (!actionService.updateBatchById(actionList)) {
                throw new BusinessException("failed to update action batch !!!");
            }
            // task
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/PatrolService.java
@@ -5,7 +5,12 @@
import com.zy.acs.framework.common.Cools;
import com.zy.acs.framework.common.R;
import com.zy.acs.manager.core.cache.CoreCache;
import com.zy.acs.manager.manager.entity.*;
import com.zy.acs.manager.core.domain.CodeStepDto;
import com.zy.acs.manager.core.domain.type.JobType;
import com.zy.acs.manager.manager.entity.Agv;
import com.zy.acs.manager.manager.entity.AgvDetail;
import com.zy.acs.manager.manager.entity.Code;
import com.zy.acs.manager.manager.entity.Travel;
import com.zy.acs.manager.manager.enums.StatusType;
import com.zy.acs.manager.manager.enums.TaskTypeType;
import com.zy.acs.manager.manager.enums.TravelStateType;
@@ -49,13 +54,6 @@
    }};
    private Map<String, JobType> agvJobMap = new ConcurrentHashMap<>();
    public enum JobType {
        CONVEYOR_PICK,
        CONVEYOR_DROP,
        LOC_PICK,
        LOCK_DROP,
        ;
    }
    @Autowired
    private AgvService agvService;
@@ -130,6 +128,8 @@
        if (mainLockWrapService.buildMinorTask(agvId, TaskTypeType.MOVE, destinationCodeData, null)) {
            log.info( "{}开始作业演示...", agvNo);
            CoreCache.AGV_MOCK_STEP_CACHE.put(agvId, CodeStepDto.build(destinationCodeData, jobType));
            switch (jobType) {
                case LOC_PICK:
                    Integer usedSlotsByLocPick = CoreCache.AGV_BACKPACK_USED_CACHE.get(agvId);
@@ -319,6 +319,7 @@
        if (cancelled) {
            AGV_PATROL_MAP.remove(agvNo);
            CoreCache.AGV_BACKPACK_USED_CACHE.remove(agvId);
            CoreCache.AGV_MOCK_STEP_CACHE.remove(agvId);
            this.agvJobMap.remove(agvNo);
            log.info("已停止AGV " + agvNo + " 的跑库任务。");
            return R.ok("已停止AGV " + agvNo + " 的跑库任务。");
zy-acs-manager/src/main/java/com/zy/acs/manager/fake/AgvSimulatorTask.java
@@ -1,16 +1,16 @@
package com.zy.acs.manager.fake;
import com.zy.acs.common.constant.RedisConstant;
import com.zy.acs.common.domain.AgvProtocol;
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.cache.CoreCache;
import com.zy.acs.manager.core.domain.CodeStepDto;
import com.zy.acs.manager.core.scheduler.MapDataWsScheduler;
import com.zy.acs.manager.core.service.MainService;
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;
import com.zy.acs.manager.manager.entity.Code;
import com.zy.acs.manager.manager.enums.ActionStsType;
import com.zy.acs.manager.manager.enums.ActionTypeType;
@@ -145,7 +145,15 @@
    }
    private void finishActionList(String qrCode) {
        // 1.complete data
        // 1.show effect
        CodeStepDto codeStepDto = CoreCache.AGV_MOCK_STEP_CACHE.get(this.agv.getId());
        if (null != codeStepDto && qrCode.equals(codeStepDto.getCodeData())) {
//            Code currentCode = agvDetailService.getCurrentCode(this.agv.getId());
            try { Thread.sleep(codeStepDto.getJobType().waitTime); } catch (InterruptedException ignore) {}
            CoreCache.AGV_MOCK_STEP_CACHE.remove(this.agv.getId());
        }
        // 2.complete data
        AGV_11_UP agv_11_up = new AGV_11_UP();
        agv_11_up.setSerialNo(groupId);
        agv_11_up.setCompleteCode(AgvCompleteType.ENTIRE_PATH_COMPLETE.getCode());
zy-acs-manager/src/main/java/com/zy/acs/manager/fake/FakeProcessor.java
@@ -126,9 +126,9 @@
                        for (Agv agv : agvList) {
                            if (!AGV_PROCESSING_MAP.get(agv.getId())) {
                                AGV_PROCESSING_MAP.put(agv.getId(), true);
                                List<Action> actionList = actionService.queryLatestGroup(agv.getId(), ActionStsType.ISSUED);
                                if (!Cools.isEmpty(actionList)) {
                                    AGV_PROCESSING_MAP.put(agv.getId(), true);
                                    executorService.submit(new AgvSimulatorTask(
                                            agv
                                            , redis
@@ -140,6 +140,8 @@
                                            , mainService
                                            , actionList
                                    ));
                                } else {
                                    AGV_PROCESSING_MAP.put(agv.getId(), false);
                                }
                            }
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/AgvDetailService.java
@@ -4,6 +4,7 @@
import com.zy.acs.manager.manager.entity.Agv;
import com.zy.acs.manager.manager.entity.AgvDetail;
import com.zy.acs.manager.manager.entity.AgvModel;
import com.zy.acs.manager.manager.entity.Code;
public interface AgvDetailService extends IService<AgvDetail> {
@@ -25,4 +26,6 @@
    Boolean isPowerLoss(Agv agv, AgvDetail agvDetail, AgvModel agvModel);
    Code getCurrentCode(Long agvId);
}
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/AgvDetailServiceImpl.java
@@ -5,10 +5,12 @@
import com.zy.acs.manager.manager.entity.Agv;
import com.zy.acs.manager.manager.entity.AgvDetail;
import com.zy.acs.manager.manager.entity.AgvModel;
import com.zy.acs.manager.manager.entity.Code;
import com.zy.acs.manager.manager.mapper.AgvDetailMapper;
import com.zy.acs.manager.manager.service.AgvDetailService;
import com.zy.acs.manager.manager.service.AgvModelService;
import com.zy.acs.manager.manager.service.AgvService;
import com.zy.acs.manager.manager.service.CodeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -19,6 +21,8 @@
    private AgvService agvService;
    @Autowired
    private AgvModelService agvModelService;
    @Autowired
    private CodeService codeService;
    @Override
    public AgvDetail selectMajorByAgvId(Long agvId) {
@@ -63,7 +67,7 @@
    @Override
    public Boolean isPowerLoss(Agv agv, AgvDetail agvDetail, AgvModel agvModel) {
        if (null == agvDetail) {
            agvDetail = this.selectByAgvId(agv.getId());
            agvDetail = this.selectMajorByAgvId(agv.getId());
        }
        if (null == agvModel) {
            agvModel = agvModelService.getByAgvId(agv.getId());
@@ -75,4 +79,14 @@
        }
    }
    @Override
    public Code getCurrentCode(Long agvId) {
        AgvDetail agvDetail = this.selectMajorByAgvId(agvId);
        Long recentCode = agvDetail.getRecentCode();
        if (null == recentCode) {
            return null;
        }
        return codeService.getById(recentCode);
    }
}