#
luxiaotao1123
2024-10-28 209c77e72cee736f65c7471b5cfb81c07f32b965
#
2个文件已修改
85 ■■■■ 已修改文件
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/AllocateService.java 83 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/ValidService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/AllocateService.java
@@ -4,13 +4,10 @@
import com.zy.acs.framework.common.Cools;
import com.zy.acs.manager.common.utils.LocUtils;
import com.zy.acs.manager.core.domain.Lane;
import com.zy.acs.manager.manager.entity.Agv;
import com.zy.acs.manager.manager.entity.AgvModel;
import com.zy.acs.manager.manager.entity.Task;
import com.zy.acs.manager.manager.entity.*;
import com.zy.acs.manager.manager.enums.TaskStsType;
import com.zy.acs.manager.manager.service.AgvModelService;
import com.zy.acs.manager.manager.service.AgvService;
import com.zy.acs.manager.manager.service.TaskService;
import com.zy.acs.manager.manager.enums.TaskTypeType;
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;
@@ -29,11 +26,19 @@
    @Autowired
    private AgvService agvService;
    @Autowired
    private AgvDetailService agvDetailService;
    @Autowired
    private AgvModelService agvModelService;
    @Autowired
    private ConfigService configService;
    @Autowired
    private TaskService taskService;
    @Autowired
    private CodeService codeService;
    @Autowired
    private StaService staService;
    @Autowired
    private LocService locService;
    @Autowired
    private LaneService laneService;
@@ -136,7 +141,7 @@
        actualAvailableAgvNos.sort(new Comparator<String>() {
            @Override
            public int compare(String agvNo1, String agvNo2) {
                return calcAllocateWeight(agvNo2, task) - calcAllocateWeight(agvNo1, task);
                return calcAllocateWeight(agvNo1, task) - calcAllocateWeight(agvNo2, task);
            }
        });
@@ -164,18 +169,6 @@
        }).distinct().collect(Collectors.toList());
    }
    // calculate wight
    private int calcAllocateWeight(String agvNo, Task task) {
        int weight = 0;
        Agv agv = agvService.selectByUuid(agvNo);
        List<Task> runningTasks = taskService.findRunningTasksByAgv(agv.getId());
        if (!Cools.isEmpty(runningTasks)) {
            weight = weight + runningTasks.size() * 10;
        }
        return weight;
    }
    private List<String> validBackpackLimit(List<String> agvNoList) {
        if (Cools.isEmpty(agvNoList)) {
            return new ArrayList<>();
@@ -188,6 +181,58 @@
        }).collect(Collectors.toList());
    }
    // calculate wight = backpack + distance
    private int calcAllocateWeight(String agvNo, Task task) {
        int weight = 0;
        Agv agv = agvService.selectByUuid(agvNo);
        // backpack
        List<Task> runningTasks = taskService.findRunningTasksByAgv(agv.getId());
        if (!Cools.isEmpty(runningTasks)) {
            weight = weight + runningTasks.size() * 100000;
        }
        // distance
        // from
        AgvDetail agvDetail = agvDetailService.selectByAgvId(agv.getId());
        Code agvCurrCode = codeService.getById(agvDetail.getRecentCode());
        Double[] fromPosition = new Double[]{agvCurrCode.getX(), agvCurrCode.getY()};
        // to
        Code firstCode = null;
        TaskTypeType typeType = TaskTypeType.get(task.getTaskTypeEl());
        switch (Objects.requireNonNull(typeType)) {
            case LOC_TO_LOC:
            case LOC_TO_STA:
                Loc oriLoc = locService.getById(task.getOriLoc());
                firstCode = codeService.getById(oriLoc.getCode());
                break;
            case STA_TO_LOC:
            case STA_TO_STA:
                Sta oriSta = staService.getById(task.getOriSta());
                firstCode = codeService.getById(oriSta.getCode());
                break;
            case TO_CHARGE:
            case TO_STANDBY:
            case MOVE:
                firstCode = codeService.getById(task.getDestCode());
                break;
            default:
                firstCode = codeService.getById(task.getDestCode());
                break;
        }
        assert null != firstCode;
        Double[] toPosition = new Double[]{firstCode.getX(), firstCode.getY()};
        // calculate distance
        weight = weight + this.calcPositionDistance(fromPosition, toPosition);
        // return opposite
        return -weight;
    }
    private int calcPositionDistance(Double[] from, Double[] to) {
        return (int) (Math.abs(to[0] - from[0]) + Math.abs(to[1] - from[1]));
    }
    public synchronized Agv execute(Task task, Map<String, List<Long>> taskAllot, List<Long> taskIds) {
        String oriLocNo = task.getOriLoc$();
        int oriLocRow = LocUtils.getRow(oriLocNo);
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/ValidService.java
@@ -56,6 +56,7 @@
                    throw new BusinessException("oriLoc: " + taskDto.getOriLoc() + " doesn't exist!");
                }
                task.setOriLoc(oriLoc.getId());
//                task.setOriCode(oriLoc.getCode());
            }
            if (!Cools.isEmpty(taskDto.getOriSta())) {
                Sta oriSta = staService.selectByStaNo(taskDto.getOriSta());
@@ -63,6 +64,7 @@
                    throw new BusinessException("oriSta: " + taskDto.getOriSta() + " doesn't exist!");
                }
                task.setOriSta(oriSta.getId());
//                task.setOriCode(oriSta.getCode());
            }
            // dest --------------------------
            if (!Cools.isEmpty(taskDto.getDestLoc())) {