zhang
2025-05-20 1313906bb1eb983d3beece810035e7fc28d6a92f
zy-acs-manager/src/main/java/com/zy/acs/manager/core/constant/AgvAreaDispatcher.java
@@ -1,8 +1,15 @@
package com.zy.acs.manager.core.constant;
import org.springframework.stereotype.Component;
import com.zy.acs.manager.manager.entity.Loc;
import com.zy.acs.manager.manager.entity.Sta;
import com.zy.acs.manager.manager.entity.Task;
import com.zy.acs.manager.manager.service.LocService;
import com.zy.acs.manager.manager.service.StaService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
@@ -10,11 +17,16 @@
import static com.zy.acs.manager.core.constant.AreaConstant.*;
import static com.zy.acs.manager.core.constant.AreaDisableConstant.*;
@Component
@Service
public class AgvAreaDispatcher {
    public static final Map<String, List<String>> AGV_AREA = new ConcurrentHashMap<>();
    public static final Map<String, List<String>> AGV_DISABLE_AREA = new ConcurrentHashMap<>();
    @Autowired
    private LocService locService;
    @Autowired
    private StaService staService;
    @PostConstruct
    public void init() {
@@ -23,112 +35,132 @@
    }
    public void initEnableArea() {
        AGV_AREA.put("1", FAR_LEFT_AREA);
        AGV_AREA.put("102", FAR_LEFT_AREA);
        AGV_AREA.put("3", FAR_LEFT_AREA);
        AGV_AREA.put("4", FAR_LEFT_AREA);
        AGV_AREA.put("5", FAR_LEFT_AREA);
        AGV_AREA.put("6", FAR_LEFT_AREA);
        AGV_AREA.put("7", FAR_LEFT_AREA);
        AGV_AREA.put("8", FAR_LEFT_AREA);
        AGV_AREA.put("9", FAR_LEFT_AREA);
        AGV_AREA.put("10", FAR_LEFT_AREA);
        AGV_AREA.put("11", LEFT_AREA);
        AGV_AREA.put("12", LEFT_AREA);
        AGV_AREA.put("13", LEFT_AREA);
        AGV_AREA.put("14", LEFT_AREA);
        AGV_AREA.put("15", LEFT_AREA);
        AGV_AREA.put("16", LEFT_AREA);
        AGV_AREA.put("17", LEFT_AREA);
        AGV_AREA.put("18", LEFT_AREA);
        AGV_AREA.put("19", LEFT_AREA);
        AGV_AREA.put("20", LEFT_AREA);
        AGV_AREA.put("21", MIDDLE_AREA);
        AGV_AREA.put("22", MIDDLE_AREA);
        AGV_AREA.put("23", MIDDLE_AREA);
        AGV_AREA.put("24", MIDDLE_AREA);
        AGV_AREA.put("25", MIDDLE_AREA);
        AGV_AREA.put("26", MIDDLE_AREA);
        AGV_AREA.put("27", MIDDLE_AREA);
        AGV_AREA.put("28", MIDDLE_AREA);
        AGV_AREA.put("29", MIDDLE_AREA);
        AGV_AREA.put("30", MIDDLE_AREA);
        AGV_AREA.put("31", RIGHT_AREA);
        AGV_AREA.put("32", RIGHT_AREA);
        AGV_AREA.put("33", RIGHT_AREA);
        AGV_AREA.put("34", RIGHT_AREA);
        AGV_AREA.put("35", RIGHT_AREA);
        AGV_AREA.put("36", RIGHT_AREA);
        AGV_AREA.put("37", RIGHT_AREA);
        AGV_AREA.put("38", RIGHT_AREA);
        AGV_AREA.put("39", RIGHT_AREA);
        AGV_AREA.put("40", RIGHT_AREA);
        AGV_AREA.put("41", FAR_RIGHT_AREA);
        AGV_AREA.put("42", FAR_RIGHT_AREA);
        AGV_AREA.put("43", FAR_RIGHT_AREA);
        AGV_AREA.put("44", FAR_RIGHT_AREA);
        AGV_AREA.put("45", FAR_RIGHT_AREA);
        AGV_AREA.put("46", FAR_RIGHT_AREA);
        AGV_AREA.put("47", FAR_RIGHT_AREA);
        AGV_AREA.put("48", FAR_RIGHT_AREA);
        AGV_AREA.put("49", FAR_RIGHT_AREA);
        AGV_AREA.put("50", FAR_RIGHT_AREA);
        for (String agv : AgvGroupConstant.FIRST_AGV_GROUP) {
            AGV_AREA.put(agv, FAR_LEFT_AREA);
        }
        for (String agv : AgvGroupConstant.SECOND_AGV_GROUP) {
            AGV_AREA.put(agv, LEFT_AREA);
        }
        for (String agv : AgvGroupConstant.THIRD_AGV_GROUP) {
            AGV_AREA.put(agv, MIDDLE_AREA);
        }
        for (String agv : AgvGroupConstant.FOURTH_AGV_GROUP) {
            AGV_AREA.put(agv, RIGHT_AREA);
        }
        for (String agv : AgvGroupConstant.FIFTH_AGV_GROUP) {
            AGV_AREA.put(agv, FAR_RIGHT_AREA);
        }
    }
    public void initDisableArea() {
        AGV_DISABLE_AREA.put("1", FAR_LEFT_DISABLE_AREA);
        AGV_DISABLE_AREA.put("102", FAR_LEFT_DISABLE_AREA);
        AGV_DISABLE_AREA.put("3", FAR_LEFT_DISABLE_AREA);
        AGV_DISABLE_AREA.put("4", FAR_LEFT_DISABLE_AREA);
        AGV_DISABLE_AREA.put("5", FAR_LEFT_DISABLE_AREA);
        AGV_DISABLE_AREA.put("6", FAR_LEFT_DISABLE_AREA);
        AGV_DISABLE_AREA.put("7", FAR_LEFT_DISABLE_AREA);
        AGV_DISABLE_AREA.put("8", FAR_LEFT_DISABLE_AREA);
        AGV_DISABLE_AREA.put("9", FAR_LEFT_DISABLE_AREA);
        AGV_DISABLE_AREA.put("10", FAR_LEFT_DISABLE_AREA);
        AGV_DISABLE_AREA.put("11", LEFT_DISABLE_AREA);
        AGV_DISABLE_AREA.put("12", LEFT_DISABLE_AREA);
        AGV_DISABLE_AREA.put("13", LEFT_DISABLE_AREA);
        AGV_DISABLE_AREA.put("14", LEFT_DISABLE_AREA);
        AGV_DISABLE_AREA.put("15", LEFT_DISABLE_AREA);
        AGV_DISABLE_AREA.put("16", LEFT_DISABLE_AREA);
        AGV_DISABLE_AREA.put("17", LEFT_DISABLE_AREA);
        AGV_DISABLE_AREA.put("18", LEFT_DISABLE_AREA);
        AGV_DISABLE_AREA.put("19", LEFT_DISABLE_AREA);
        AGV_DISABLE_AREA.put("20", LEFT_DISABLE_AREA);
        AGV_DISABLE_AREA.put("21", MIDDLE_DISABLE_AREA);
        AGV_DISABLE_AREA.put("22", MIDDLE_DISABLE_AREA);
        AGV_DISABLE_AREA.put("23", MIDDLE_DISABLE_AREA);
        AGV_DISABLE_AREA.put("24", MIDDLE_DISABLE_AREA);
        AGV_DISABLE_AREA.put("25", MIDDLE_DISABLE_AREA);
        AGV_DISABLE_AREA.put("26", MIDDLE_DISABLE_AREA);
        AGV_DISABLE_AREA.put("27", MIDDLE_DISABLE_AREA);
        AGV_DISABLE_AREA.put("28", MIDDLE_DISABLE_AREA);
        AGV_DISABLE_AREA.put("29", MIDDLE_DISABLE_AREA);
        AGV_DISABLE_AREA.put("30", MIDDLE_DISABLE_AREA);
        AGV_DISABLE_AREA.put("31", RIGHT_DISABLE_AREA);
        AGV_DISABLE_AREA.put("32", RIGHT_DISABLE_AREA);
        AGV_DISABLE_AREA.put("33", RIGHT_DISABLE_AREA);
        AGV_DISABLE_AREA.put("34", RIGHT_DISABLE_AREA);
        AGV_DISABLE_AREA.put("35", RIGHT_DISABLE_AREA);
        AGV_DISABLE_AREA.put("36", RIGHT_DISABLE_AREA);
        AGV_DISABLE_AREA.put("37", RIGHT_DISABLE_AREA);
        AGV_DISABLE_AREA.put("38", RIGHT_DISABLE_AREA);
        AGV_DISABLE_AREA.put("39", RIGHT_DISABLE_AREA);
        AGV_DISABLE_AREA.put("40", RIGHT_DISABLE_AREA);
        AGV_DISABLE_AREA.put("41", FAR_RIGHT_DISABLE_AREA);
        AGV_DISABLE_AREA.put("42", FAR_RIGHT_DISABLE_AREA);
        AGV_DISABLE_AREA.put("43", FAR_RIGHT_DISABLE_AREA);
        AGV_DISABLE_AREA.put("44", FAR_RIGHT_DISABLE_AREA);
        AGV_DISABLE_AREA.put("45", FAR_RIGHT_DISABLE_AREA);
        AGV_DISABLE_AREA.put("46", FAR_RIGHT_DISABLE_AREA);
        AGV_DISABLE_AREA.put("47", FAR_RIGHT_DISABLE_AREA);
        AGV_DISABLE_AREA.put("48", FAR_RIGHT_DISABLE_AREA);
        AGV_DISABLE_AREA.put("49", FAR_RIGHT_DISABLE_AREA);
        AGV_DISABLE_AREA.put("50", FAR_RIGHT_DISABLE_AREA);
        for (String agv : AgvGroupConstant.FIRST_AGV_GROUP) {
            AGV_DISABLE_AREA.put(agv, FAR_LEFT_DISABLE_AREA);
        }
        for (String agv : AgvGroupConstant.SECOND_AGV_GROUP) {
            AGV_DISABLE_AREA.put(agv, LEFT_DISABLE_AREA);
        }
        for (String agv : AgvGroupConstant.THIRD_AGV_GROUP) {
            AGV_DISABLE_AREA.put(agv, MIDDLE_DISABLE_AREA);
        }
        for (String agv : AgvGroupConstant.FOURTH_AGV_GROUP) {
            AGV_DISABLE_AREA.put(agv, RIGHT_DISABLE_AREA);
        }
        for (String agv : AgvGroupConstant.FIFTH_AGV_GROUP) {
            AGV_DISABLE_AREA.put(agv, FAR_RIGHT_DISABLE_AREA);
        }
    }
    public List<String> getAgvNosByTask(Task task) {
        if (null == task) {
            return null;
        }
        Loc oriLoc = null;
        Sta oriSta = null;
        Loc destLoc = null;
        Sta destSta = null;
        if (null != task.getOriLoc()) {
            oriLoc = locService.getById(task.getOriLoc());
            return this.getAgvNosByRow(oriLoc.getRow());
        }
        if (null != task.getOriSta()) {
            oriSta = staService.getById(task.getOriSta());
            return this.getAgvNosByStaNo(oriSta.getStaNo());
        }
        if (null != task.getDestLoc()) {
            destLoc = locService.getById(task.getDestLoc());
            return this.getAgvNosByRow(destLoc.getRow());
        }
        if (null != task.getDestSta()) {
            destSta = staService.getById(task.getDestSta());
            return this.getAgvNosByStaNo(destSta.getStaNo());
        }
        return null;
    }
    public List<String> getAgvNosByRow(Integer row) {
        if (LocGroupConstant.FAR_LEFT_LOC_ROW_LIST.contains(row)) {
            return AgvGroupConstant.FIRST_AGV_GROUP;
        }
        if (LocGroupConstant.LEFT_LOC_ROW_LIST.contains(row)) {
            return AgvGroupConstant.SECOND_AGV_GROUP;
        }
        if (LocGroupConstant.MIDDLE_LOC_ROW_LIST.contains(row)) {
            return AgvGroupConstant.THIRD_AGV_GROUP;
        }
        if (LocGroupConstant.RIGHT_LOC_ROW_LIST.contains(row)) {
            return AgvGroupConstant.FOURTH_AGV_GROUP;
        }
        if (LocGroupConstant.FAR_RIGHT_LOC_ROW_LIST.contains(row)) {
            return AgvGroupConstant.FIFTH_AGV_GROUP;
        }
        return null;
    }
    public List<String> getAgvNosByStaNo(String staNo) {
        if (StaGroupConstant.FAR_LEFT_STA_ROW_LIST.contains(staNo)) {
            return AgvGroupConstant.FIRST_AGV_GROUP;
        }
        if (StaGroupConstant.LEFT_STA_ROW_LIST.contains(staNo)) {
            return AgvGroupConstant.SECOND_AGV_GROUP;
        }
        if (StaGroupConstant.MIDDLE_STA_ROW_LIST.contains(staNo)) {
            return AgvGroupConstant.THIRD_AGV_GROUP;
        }
        if (StaGroupConstant.RIGHT_STA_ROW_LIST.contains(staNo)) {
            return AgvGroupConstant.FOURTH_AGV_GROUP;
        }
        if (StaGroupConstant.FAR_RIGHT_STA_ROW_LIST.contains(staNo)) {
            return AgvGroupConstant.FIFTH_AGV_GROUP;
        }
        return null;
    }
    public List<String> getAreaCodeListByAgvNo(String agvNo) {
        List<String> areaCodeList = new ArrayList<>();
        if (null == agvNo) {
            return areaCodeList;
        }
        if (AgvGroupConstant.FIRST_AGV_GROUP.contains(agvNo)) {
            areaCodeList = FAR_LEFT_AREA;
            areaCodeList.addAll(FAR_LEFT_DISABLE_AREA);
        }
        if (AgvGroupConstant.SECOND_AGV_GROUP.contains(agvNo)) {
            areaCodeList = LEFT_AREA;
            areaCodeList.addAll(LEFT_DISABLE_AREA);
        }
        if (AgvGroupConstant.THIRD_AGV_GROUP.contains(agvNo)) {
            areaCodeList = MIDDLE_AREA;
            areaCodeList.addAll(MIDDLE_DISABLE_AREA);
        }
        if (AgvGroupConstant.FOURTH_AGV_GROUP.contains(agvNo)) {
            areaCodeList = RIGHT_AREA;
            areaCodeList.addAll(RIGHT_DISABLE_AREA);
        }
        if (AgvGroupConstant.FIFTH_AGV_GROUP.contains(agvNo)) {
            areaCodeList = FAR_RIGHT_AREA;
            areaCodeList.addAll(FAR_RIGHT_DISABLE_AREA);
        }
        return areaCodeList;
    }
}