From 12bea86c9cb51f98fd5f2de904bb6a8d30e9e0e8 Mon Sep 17 00:00:00 2001 From: luxiaotao1123 <t1341870251@163.com> Date: 星期四, 11 四月 2024 14:37:06 +0800 Subject: [PATCH] # --- zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/impl/MainServiceImpl.java | 105 ++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 101 insertions(+), 4 deletions(-) diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/impl/MainServiceImpl.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/impl/MainServiceImpl.java index a5288f4..6901e42 100644 --- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/impl/MainServiceImpl.java +++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/impl/MainServiceImpl.java @@ -1,19 +1,27 @@ package com.zy.asrs.wcs.core.service.impl; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.zy.asrs.framework.common.Cools; import com.zy.asrs.framework.common.SnowflakeIdWorker; import com.zy.asrs.wcs.core.entity.*; import com.zy.asrs.wcs.core.kernel.AnalyzeService; +import com.zy.asrs.wcs.core.model.MapNode; import com.zy.asrs.wcs.core.model.enums.DeviceCtgType; import com.zy.asrs.wcs.core.model.enums.MotionStsType; import com.zy.asrs.wcs.core.model.enums.TaskStsType; import com.zy.asrs.wcs.core.service.*; +import com.zy.asrs.wcs.core.utils.RedisUtil; +import com.zy.asrs.wcs.core.utils.ShuttleDispatcher; import com.zy.asrs.wcs.core.utils.Utils; import com.zy.asrs.wcs.rcs.News; import com.zy.asrs.wcs.rcs.cache.SlaveConnection; +import com.zy.asrs.wcs.rcs.constant.DeviceRedisConstant; import com.zy.asrs.wcs.rcs.entity.Device; import com.zy.asrs.wcs.rcs.entity.DeviceType; +import com.zy.asrs.wcs.rcs.model.enums.ShuttleProtocolStatusType; import com.zy.asrs.wcs.rcs.model.enums.SlaveType; import com.zy.asrs.wcs.rcs.model.protocol.ShuttleProtocol; import com.zy.asrs.wcs.rcs.model.protocol.StaProtocol; @@ -28,9 +36,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; +import java.util.*; /** * 绔嬩綋浠撳簱WCS绯荤粺涓绘祦绋嬩笟鍔� @@ -61,6 +67,10 @@ private TaskCtgService taskCtgService; @Autowired private DictService dictService; + @Autowired + private ShuttleDispatcher shuttleDispatcher; + @Autowired + private RedisUtil redisUtil; /** * 缁勬墭 @@ -68,6 +78,86 @@ */ public synchronized void generateInboundWrk() { + } + + /** + * 鍒濆鍖栧疄鏃跺湴鍥� + */ + public synchronized void initRealtimeBasMap() { + try { + List<Dict> dicts = dictService.list(new LambdaQueryWrapper<Dict>() + .like(Dict::getFlag, "map") + .eq(Dict::getStatus, 1)); + + TreeMap<Integer, ArrayList<ArrayList<MapNode>>> levData = new TreeMap<>(); + for (Dict dict : dicts) { + String[] split = dict.getFlag().split("-"); + int lev = Integer.parseInt(split[1]); + + TreeMap<Integer, List<JSONObject>> rows = new TreeMap<>(); + //鎺掑簭Row + JSONArray value = JSON.parseArray(dict.getValue()); + for (Object o : value) { + JSONObject item = JSON.parseObject(o.toString()); + if (item.getString("type").equals("SHELF")) { + JSONObject property = JSON.parseObject(item.getString("property")); + Integer row1 = property.getInteger("row"); + ArrayList<JSONObject> bays = new ArrayList<>(); + if (rows.containsKey(row1)) { + bays.addAll(rows.get(row1)); + } + bays.add(property); + rows.put(row1, bays); + } + } + + ArrayList<ArrayList<MapNode>> list = new ArrayList<>(); + //鎺掑簭Bay + for (Map.Entry<Integer, List<JSONObject>> entry : rows.entrySet()) { + ArrayList<MapNode> nodes = new ArrayList<>(); + for (JSONObject object : entry.getValue()) { + MapNode mapNode = new MapNode(); + mapNode.setValue(object.getInteger("value")); + mapNode.setTop(object.getInteger("top")); + mapNode.setBottom(object.getInteger("bottom")); + mapNode.setLeft(object.getInteger("left")); + mapNode.setRight(object.getInteger("right")); + mapNode.setRow(object.getInteger("row")); + mapNode.setBay(object.getInteger("bay")); + mapNode.setNo(object.getString("row") + "-" + object.getString("bay")); + nodes.add(mapNode); + } + + Collections.sort(nodes, new Comparator<MapNode>() { + @Override + public int compare(MapNode o1, MapNode o2) { + return Integer.compare(o1.getBay(), o2.getBay()); + } + }); + + list.add(nodes); + } + + levData.put(lev, list); + } + + for (Map.Entry<Integer, ArrayList<ArrayList<MapNode>>> entry : levData.entrySet()) { + ArrayList<ArrayList<MapNode>> lists = entry.getValue();//鑾峰彇鍦板浘 + + Integer lev = entry.getKey(); + Date now = new Date(); + HashMap<String, Object> map = new HashMap<>(); + map.put("data", JSON.toJSONString(lists)); + map.put("create_time", now); + map.put("update_time", now); + map.put("lev", lev); + + //灏嗗湴鍥炬暟鎹瓨鍏edis + redisUtil.set(DeviceRedisConstant.MAP + lev, JSON.toJSONString(map)); + } + } catch (Exception e) { + e.printStackTrace(); + } } // 瑙f瀽鍏ュ簱宸ヤ綔妗� @@ -188,6 +278,10 @@ ShuttleProtocol shuttleProtocol = shuttleThread.getStatus(); if (shuttleProtocol == null) { + continue; + } + + if (!shuttleProtocol.getProtocolStatusType().equals(ShuttleProtocolStatusType.IDLE)) { continue; } @@ -351,6 +445,9 @@ continue; } + //鑾峰彇閬胯浣嶇疆 + String standByLocNo = shuttleDispatcher.searchStandByLocNo(Integer.valueOf(device.getDeviceNo()), device.getHostId(), shuttleThread.getStatus().getCurrentLocNo()); + Task task = new Task(); task.setUuid(String.valueOf(snowflakeIdWorker.nextId())); task.setTaskNo(String.valueOf(Utils.getTaskNo("MOVE"))); @@ -360,7 +457,7 @@ task.setOriginSite(null); task.setOriginLoc(null); task.setDestSite(null); - task.setDestLoc("1-1-1"); // 鏆傛椂鏈畾 + task.setDestLoc(standByLocNo); // 閬胯浣嶇疆 task.setIoTime(new Date()); task.setStartTime(new Date()); task.setHostId(device.getHostId()); -- Gitblit v1.9.1