From ebd2f4397a92c6a5096de1b86d59154363344720 Mon Sep 17 00:00:00 2001 From: vincentlu <t1341870251@gmail.com> Date: 星期二, 13 五月 2025 08:48:15 +0800 Subject: [PATCH] # --- zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/AgvServiceImpl.java | 105 ++++++++++++++++++++++++++++++++++++---------------- 1 files changed, 72 insertions(+), 33 deletions(-) diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/AgvServiceImpl.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/AgvServiceImpl.java index b3ec895..1a08ec2 100644 --- a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/AgvServiceImpl.java +++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/AgvServiceImpl.java @@ -9,9 +9,13 @@ import com.zy.acs.manager.common.domain.BaseParam; import com.zy.acs.manager.common.domain.PageParam; import com.zy.acs.manager.common.domain.PageResult; +import com.zy.acs.manager.core.cache.CoreCache; import com.zy.acs.manager.core.domain.VehicleDto; import com.zy.acs.manager.manager.controller.result.AgvResult; -import com.zy.acs.manager.manager.entity.*; +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.Segment; import com.zy.acs.manager.manager.enums.SegmentStateType; import com.zy.acs.manager.manager.mapper.AgvMapper; import com.zy.acs.manager.manager.service.*; @@ -20,8 +24,11 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import javax.annotation.PostConstruct; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; /** * 瀛楀吀鏁版嵁Service瀹炵幇 @@ -34,6 +41,10 @@ public class AgvServiceImpl extends ServiceImpl<AgvMapper, Agv> implements AgvService { private final RedisSupport redis = RedisSupport.defaultRedisSupport; + + private static final Map<String, Long> AGV_ID_MAP = new HashMap<>(); + + private static final Map<Long, String> AGV_NO_MAP = new HashMap<>(); @Autowired private AgvDetailService agvDetailService; @@ -48,6 +59,14 @@ @Autowired private TaskService taskService; + @PostConstruct + public void init() { + for (Agv agv : this.list()) { + AGV_ID_MAP.put(agv.getUuid(), agv.getId()); + AGV_NO_MAP.put(agv.getId(), agv.getUuid()); + } + } + @Override public PageResult<AgvResult> pageRel(PageParam<Agv, BaseParam> pageParam) { return new PageResult<>(this.baseMapper.selectPageRel(pageParam, pageParam.checkoutMap()), pageParam.getTotal()); @@ -59,12 +78,31 @@ } @Override - public Agv queryIdle(Task task) { - if (Cools.isEmpty(task)) { - return null; + public Long getAgvId(String uuid) { + if (Cools.isEmpty(uuid)) { + Agv agv = this.selectByUuid(uuid); + if (agv != null) { + AGV_ID_MAP.put(uuid, agv.getId()); + } else { + return null; + } } - return null; + return AGV_ID_MAP.get(uuid); } + + @Override + public String getAgvNo(Long agvId) { + if (Cools.isEmpty(agvId)) { + Agv agv = this.getById(agvId); + if (agv != null) { + AGV_NO_MAP.put(agvId, agv.getUuid()); + } else { + return null; + } + } + return AGV_NO_MAP.get(agvId); + } + @Override public Boolean judgeEnable(Long agvId) { @@ -72,62 +110,52 @@ } @Override - public Boolean judgeEnable(Long agvId, Boolean withBattery) { - Agv agv = this.getById(agvId); - AgvModel agvModel = agvModelService.getById(agv.getAgvModel()); + public Boolean judgeEnable(Long agvId, Boolean isLowBattery) { + String agvNo = this.getAgvNo(agvId); + AgvModel agvModel = agvModelService.getByAgvId(agvId); if (0 < segmentService.count(new LambdaQueryWrapper<Segment>() .eq(Segment::getAgvId, agvId) - .and( i -> { -// i.eq(Segment::getState, SegmentStateType.WAITING.toString()).or() - i.eq(Segment::getState, SegmentStateType.RUNNING.toString()); - }) + .eq(Segment::getState, SegmentStateType.RUNNING.toString()) )) { - log.warn("[{}]鍙稟gv姝e湪蹇欑 - segment......", agv.getUuid()); +// log.warn("[{}]鍙稟gv姝e湪蹇欑 - segment......", agvNo); return false; } -// if (0 < taskService.count(new LambdaQueryWrapper<Task>() -// .eq(Task::getAgvId, agvId) -// .eq(Task::getTaskType, TaskTypeType.TO_CHARGE.val()) -// .in(Task::getTaskSts, TaskStsType.ASSIGN.val(), TaskStsType.PROGRESS.val()) -// )){ -// log.warn("[{}]鍙稟gv姝e湪鍘诲厖鐢� - task......", agv.getUuid()); -// return false; -// } - if (!this.judgeOnline(agv.getId())) { - log.warn("[{}]鍙稟gv涓嶆槸鍦ㄧ嚎鐘舵��......", agv.getUuid()); + if (!this.judgeOnline(agvId)) { +// log.warn("[{}]鍙稟gv涓嶆槸鍦ㄧ嚎鐘舵��......", agvNo); return false; } - AgvDetail agvDetail = agvDetailService.selectByAgvId(agv.getId()); + AgvDetail agvDetail = agvDetailService.selectMajorByAgvId(agvId); if (null == agvDetail) { - log.warn("[{}]鍙稟gv鏈敹鍒扮姸鎬佸寘......", agv.getUuid()); + log.warn("[{}]鍙稟gv鏈敹鍒扮姸鎬佸寘......", agvNo); return false; } if (agvDetail.getVol() == 0) { return false; } if (!agvDetail.getAgvStatus().equals(AgvStatusType.IDLE) && !agvDetail.getAgvStatus().equals(AgvStatusType.CHARGE)) { - log.warn("[{}]鍙稟gv涓嶆槸绌洪棽鐘舵��......", agv.getUuid()); + log.warn("[{}]鍙稟gv涓嶆槸绌洪棽鐘舵��......", agvNo); return false; } if (agvDetail.getAgvStatus().equals(AgvStatusType.CHARGE)) { - if (agvDetail.getVol() <= agvModel.getQuaBattery()) { + if (agvDetail.getVol() < agvModel.getQuaBattery()) { return false; } } if (!agvDetail.getAgvStatus().equals(AgvStatusType.CHARGE)) { if (agvDetail.getPos() != 1) { - log.warn("[{}]鍙稟gv褰撳墠涓嶅湪瀹氫綅......", agv.getUuid()); + log.warn("[{}]鍙稟gv褰撳墠涓嶅湪瀹氫綅......", agvNo); return false; } if (null == agvDetail.getRecentCode()) { - log.warn("[{}]鍙稟gv褰撳墠涓嶅湪瀹氫綅......", agv.getUuid()); + log.warn("[{}]鍙稟gv褰撳墠涓嶅湪瀹氫綅......", agvNo); return false; } } // with battery - if (withBattery) { + if (isLowBattery) { + Agv agv = this.getById(agvId); if (agvDetailService.isPowerLoss(agv, agvDetail, agvModel)) { - log.warn("[{}]鍙稟gv鐢甸噺涓嶈冻......", agv.getUuid()); + log.warn("[{}]鍙稟gv鐢甸噺涓嶈冻......", agvNo); return false; } } @@ -154,7 +182,7 @@ AgvDetail detail = agvDetailService.selectByAgvId(agv.getId()); VehicleDto dto = new VehicleDto(); dto.setVehicle(agv.getUuid()); - dto.setPosCode(codeService.getById(detail.getRecentCode()).getData()); + dto.setPosCode(codeService.getCacheById(detail.getRecentCode()).getData()); res.add(dto); } return res; @@ -165,7 +193,7 @@ // if (null != agv.getStage()) { // return agv.getStage(); // } - AgvModel agvModel = agvModelService.getById(agv.getAgvModel()); + AgvModel agvModel = agvModelService.getByAgvId(agv.getId()); assert null != agvModel; return agvModel.getBackpack(); } @@ -190,4 +218,15 @@ return null; } + @Override + public int getBackpackRemainingCapacity(Long agvId) { + Integer usedSlots = CoreCache.AGV_BACKPACK_USED_CACHE.get(agvId); + if (null == usedSlots) { + usedSlots = taskService.findTransportTasksCountByAgv(agvId); + } + + AgvModel agvModel = agvModelService.getByAgvId(agvId); + return Math.max(agvModel.getBackpack() - usedSlots, 0); // if less than zero, then return zero + } + } -- Gitblit v1.9.1