From bcbb624e1621fcd82ca081009a4d8097c662feac Mon Sep 17 00:00:00 2001 From: luxiaotao1123 <t1341870251@163.com> Date: 星期一, 28 十月 2024 09:36:34 +0800 Subject: [PATCH] # --- zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/Task.java | 12 ++++++ zy-acs-manager/src/main/java/com/zy/acs/manager/core/domain/Lane.java | 2 + zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/AllocateService.java | 17 ++++++-- zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/LaneService.java | 43 ++++++++++++++++++++- 4 files changed, 67 insertions(+), 7 deletions(-) diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/domain/Lane.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/domain/Lane.java index 123b768..02ac5f5 100644 --- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/domain/Lane.java +++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/domain/Lane.java @@ -13,6 +13,8 @@ private String laneId; + private String hashCode; + private List<String> codes = new ArrayList<>(); public Lane() { diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/AllocateService.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/AllocateService.java index 3ec330b..8f144e5 100644 --- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/AllocateService.java +++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/AllocateService.java @@ -15,10 +15,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Map; +import java.util.*; /** * Created by vincent on 8/12/2024 @@ -72,9 +69,21 @@ 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()); return null; } + Integer maxAgvCountInLane = configService.getVal("maxAgvCountInLane", Integer.class); + + + /** + * 1. 鍒ゆ柇task鐨勮捣濮嬬偣鍜岀洰鐨勭偣鎵�鍦ㄧ殑宸烽亾鎵胯浇浠诲姟鏁伴噺锛� + * 濡傛灉鏁伴噺宸茬粡杈惧埌璐熻浇锛屽垯鍒ゆ柇璐熻浇浠诲姟鐨凙GV鏄惁杩樻湁绌鸿儗绡擄紝濡傛灉鏈夊垯浼樺厛娲惧彂缁欏畠锛� + * 濡傛灉娌℃湁浜嗭紝閭d箞鍒欓樆濉炰换鍔★紝鐩村埌璇ュ贩閬撻噴鏀� + * + * 2. 杞绌洪棽灏忚溅锛岀洰鏍囨槸璁╂瘡鍙板皬杞﹂兘鍔ㄨ捣鏉� + * 鍒ゆ柇閫昏緫锛氳儗绡撴暟閲忔渶灏戠殑灏忚溅杞鐨勬椂鍊欙紝浼樺厛绾ф渶楂� + */ return null; } diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/LaneService.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/LaneService.java index cffcd15..9eb7351 100644 --- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/LaneService.java +++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/LaneService.java @@ -1,17 +1,21 @@ package com.zy.acs.manager.core.service; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.zy.acs.common.utils.GsonUtils; import com.zy.acs.framework.common.Cools; import com.zy.acs.framework.common.SnowflakeIdWorker; import com.zy.acs.manager.core.domain.Lane; import com.zy.acs.manager.manager.entity.Code; import com.zy.acs.manager.manager.service.CodeService; import com.zy.acs.manager.manager.service.RouteService; +import com.zy.acs.manager.system.service.ConfigService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.annotation.PostConstruct; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; import java.util.*; import java.util.stream.Collectors; @@ -34,6 +38,8 @@ private RouteService routeService; @Autowired private SnowflakeIdWorker snowflakeIdWorker; + @Autowired + private ConfigService configService; public Boolean isInitialized() { return this.initialized; @@ -53,7 +59,7 @@ @PostConstruct public synchronized void init() { - log.info("the rcs system is starting to initialze lane data..."); + log.info("the rcs system is starting to initialize lane data..."); List<Code> codeList = codeService.list(new LambdaQueryWrapper<Code>().eq(Code::getStatus, 1)); this.fillAdjacencyCodeMap(codeList); @@ -66,8 +72,12 @@ this.filterLanesWithFewPoints(); + this.generateLaneHash(); + this.initialized = Boolean.TRUE; - log.info("the lane data initialzation has been completed in rcs system."); + log.info("the lane data initialization has been completed in rcs system."); + + System.out.println(GsonUtils.toJson(this.lanes)); } private void fillAdjacencyCodeMap(List<Code> codeList) { @@ -259,7 +269,34 @@ } private void filterLanesWithFewPoints() { - this.lanes.removeIf(next -> next.getCodes().size() <= 2); + Integer maxAgvCountInLane = configService.getVal("maxAgvCountInLane", Integer.class); + this.lanes.removeIf(next -> next.getCodes().size() <= Optional.ofNullable(maxAgvCountInLane).orElse(2)); + } + + + private void generateLaneHash() { + for (Lane lane : this.lanes) { + String hashCode = generateDigest(lane.getCodes()); + lane.setHashCode(hashCode); + } + } + + public static String generateDigest(List<String> list) { + MessageDigest md = null; + try { + md = MessageDigest.getInstance("SHA-256"); + } catch (NoSuchAlgorithmException e) { + log.error("generateDigest", e); + throw new RuntimeException(e); + } + String combined = list.stream().sorted().collect(Collectors.joining(",")); + byte[] hashBytes = md.digest(combined.getBytes()); + + StringBuilder sb = new StringBuilder(); + for (byte b : hashBytes) { + sb.append(String.format("%02x", b)); + } + return sb.toString(); } } diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/Task.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/Task.java index 6f11eef..7c84e2a 100644 --- a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/Task.java +++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/Task.java @@ -116,6 +116,12 @@ private Long oriCode; /** + * 璧峰宸烽亾鍝堝笇 + */ + @ApiModelProperty(value= "璧峰宸烽亾鍝堝笇") + private Long oriLaneHash; + + /** * 鐩爣绔� */ @ApiModelProperty(value= "鐩爣绔�") @@ -134,6 +140,12 @@ private Long destCode; /** + * 鐩爣宸烽亾鍝堝笇 + */ + @ApiModelProperty(value= "鐩爣宸烽亾鍝堝笇") + private Long destLaneHash; + + /** * 绌烘澘 */ @ApiModelProperty(value= "绌烘澘") -- Gitblit v1.9.1