#
vincentlu
23 小时以前 6bde5b6f7f4ad8c1bac3732e46cf8d966deab845
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/GuaranteeRuntimeService.java
@@ -2,18 +2,14 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.zy.acs.common.enums.AgvStatusType;
import com.zy.acs.manager.manager.entity.Agv;
import com.zy.acs.manager.manager.entity.AgvDetail;
import com.zy.acs.manager.manager.entity.Guarantee;
import com.zy.acs.manager.manager.entity.Task;
import com.zy.acs.manager.manager.enums.GuaranteeScopeType;
import com.zy.acs.manager.manager.enums.StatusType;
import com.zy.acs.manager.manager.enums.TaskStsType;
import com.zy.acs.manager.manager.enums.TaskTypeType;
import com.zy.acs.manager.manager.entity.*;
import com.zy.acs.manager.manager.enums.*;
import com.zy.acs.manager.manager.service.AgvDetailService;
import com.zy.acs.manager.manager.service.AgvService;
import com.zy.acs.manager.manager.service.SegmentService;
import com.zy.acs.manager.manager.service.TaskService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
@@ -25,6 +21,9 @@
@Slf4j
@Service
public class GuaranteeRuntimeService {
    @Autowired
    private SegmentService segmentService;
    private final AgvService agvService;
    private final AgvDetailService agvDetailService;
@@ -53,7 +52,10 @@
        List<ChargeCandidate> candidates = new ArrayList<>();
        for (Agv agv : scopedAgvList) {
            AgvDetail detail = agvDetailService.selectMajorByAgvId(agv.getId());
            if (detail == null || detail.getSoc() == null) {
            if (null == detail || null == detail.getSoc() || null == detail.getAgvStatus()) {
                continue;
            }
            if (detail.getAgvStatus().equals(AgvStatusType.CHARGE)) {
                continue;
            }
            if (!isIdle(agv, detail)) {
@@ -67,7 +69,7 @@
            }
        }
        if (available >= requiredCount) {
            log.debug("Guarantee[{}] already has {} vehicles >= {}% SOC for {}", plan.getName(), available, minSoc, targetTime);
//            log.debug("Guarantee[{}] already has {} vehicles >= {}% SOC for {}", plan.getName(), available, minSoc, targetTime);
            return;
        }
        int shortage = requiredCount - available;
@@ -95,13 +97,31 @@
        if (detail.getAgvStatus() != null && detail.getAgvStatus().equals(AgvStatusType.CHARGE)) {
            return false;
        }
        long busyCount = taskService.count(new LambdaQueryWrapper<Task>()
        if (0 < taskService.count(new LambdaQueryWrapper<Task>()
                .eq(Task::getAgvId, agv.getId())
//                .and(i -> {
//                    i.eq(Task::getTaskSts, TaskStsType.WAITING.val())
//                            .or().eq(Task::getTaskSts, TaskStsType.ASSIGN.val())
//                            .or().eq(Task::getTaskSts, TaskStsType.PROGRESS.val());
//                })
                .in(Task::getTaskSts,
                        TaskStsType.WAITING.val(),
                        TaskStsType.ASSIGN.val(),
                        TaskStsType.PROGRESS.val()));
        return busyCount == 0;
                        TaskStsType.PROGRESS.val())
        )) {
            return false;
        }
        if (0 < segmentService.count(new LambdaQueryWrapper<Segment>()
                        .eq(Segment::getAgvId, agv.getId())
                        .and( i -> {
//                                i.eq(Segment::getState, SegmentStateType.WAITING.toString()).or()
                            i.eq(Segment::getState, SegmentStateType.RUNNING.toString());
                        })
        )) {
            return false;
        }
        return true;
    }
    private List<Agv> findScopedAgvList(Guarantee plan) {