#
luxiaotao1123
2024-12-17 d3d3857cda8b4307d8f03bf15ec9fb2c98c34b64
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/AllocateService.java
@@ -4,6 +4,7 @@
import com.zy.acs.framework.common.Cools;
import com.zy.acs.manager.common.utils.CommonUtil;
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.StatusType;
import com.zy.acs.manager.manager.enums.TaskStsType;
@@ -86,7 +87,7 @@
    public synchronized Agv execute(Task task) {
        List<Agv> availableAgvList = getAvailableAgv();
        if (Cools.isEmpty(availableAgvList)) {
            log.warn("No available agv to assign the task[{}]", task.getSeqNum());
//            log.warn("No available agv to assign the task[{}]", task.getSeqNum());
            return null;
        }
        List<String> availableAgvNos = availableAgvList.stream().map(Agv::getUuid).distinct().collect(Collectors.toList());
@@ -247,4 +248,51 @@
    }
    // The Permutations and combinations for task
    public Double[] pac(Double[] currPosition, List<List<TaskPosDto>> list) {
        List<TaskPosDto> theFirstOne = list.get(0);
        List<TaskPosDto> theLastOne = list.get(list.size() - 1);
        if (list.size() == 1) {
            TaskPosDto head = theFirstOne.get(0);
            TaskPosDto tail = theFirstOne.get(theFirstOne.size() - 1);
            int distanceByHead = CommonUtil.calcDistance(currPosition, head.getXy());
            int distanceByTail = CommonUtil.calcDistance(currPosition, tail.getXy());
            if (distanceByTail < distanceByHead) {
                Collections.reverse(theFirstOne);
            }
        } else {
            TaskPosDto headOfFirst = theFirstOne.get(0);
            TaskPosDto tailOfFirst = theFirstOne.get(theFirstOne.size() - 1);
            TaskPosDto headOfLast = theLastOne.get(0);
            TaskPosDto tailOfLast = theLastOne.get(theLastOne.size() - 1);
            int distanceByHeadOfFirst = CommonUtil.calcDistance(currPosition, headOfFirst.getXy());
            int distanceByTailOfFirst = CommonUtil.calcDistance(currPosition, tailOfFirst.getXy());
            int distanceByHeadOfLast = CommonUtil.calcDistance(currPosition, headOfLast.getXy());
            int distanceByTailOfLast = CommonUtil.calcDistance(currPosition, tailOfLast.getXy());
            if (Math.min(distanceByHeadOfLast, distanceByTailOfLast) < Math.min(distanceByHeadOfFirst, distanceByTailOfFirst)) {
                Collections.reverse(list);
                if (distanceByTailOfLast < distanceByHeadOfLast) {
                    Collections.reverse(theLastOne);
                }
            } else {
                if (distanceByTailOfFirst < distanceByHeadOfFirst) {
                    Collections.reverse(theFirstOne);
                }
            }
        }
        theLastOne = list.get(list.size() - 1);
        return theLastOne.get(theLastOne.size() - 1).getXy();
    }
}