From badc6b0a84fd57360341eca49839d074b355c588 Mon Sep 17 00:00:00 2001 From: Junjie <fallin.jie@qq.com> Date: 星期日, 15 十月 2023 13:47:13 +0800 Subject: [PATCH] #plc2 --- src/main/java/com/zy/asrs/controller/ConsoleController.java | 48 ++ src/main/webapp/views/index.html | 1 src/main/java/com/zy/core/thread/SiemensDevpThread2.java | 318 +++++++++++++++++ src/main/webapp/views/plc2.html | 661 ++++++++++++++++++++++++++++++++++++ src/main/resources/plc2.json | 1 src/main/resources/application.yml | 7 src/main/java/com/zy/core/ServerBootstrap.java | 12 7 files changed, 1,045 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/zy/asrs/controller/ConsoleController.java b/src/main/java/com/zy/asrs/controller/ConsoleController.java index 1983b70..a88397f 100644 --- a/src/main/java/com/zy/asrs/controller/ConsoleController.java +++ b/src/main/java/com/zy/asrs/controller/ConsoleController.java @@ -41,6 +41,10 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.InputStreamReader; import java.util.*; /** @@ -322,6 +326,50 @@ } /** + * 鑾峰彇PLC2鏁版嵁 + */ + @GetMapping("/plc2/auth") + @ManagerAuth + public R getMapFromPlc2() { + try { + String mapFilename = "plc2.json"; + String fileName = this.getClass().getClassLoader().getResource(mapFilename).getPath();//鑾峰彇鏂囦欢璺緞 + File file = new File(fileName); + StringBuffer stringBuffer = new StringBuffer(); + if (file.isFile() && file.exists()) { + InputStreamReader isr = new InputStreamReader(new FileInputStream(file), "GBK"); + BufferedReader br = new BufferedReader(isr); + String lineTxt = null; + while ((lineTxt = br.readLine()) != null) { + stringBuffer.append(lineTxt); + } + br.close(); + } + + NavigateMapData navigateMapData = new NavigateMapData(); + + //瑙f瀽json鍦板浘鏁版嵁 + ArrayList arrayList = JSON.parseObject(stringBuffer.toString(), ArrayList.class); + List<List<MapNode>> lists = new ArrayList<>(); + //閲嶅缓鏁版嵁鏍煎紡 + for (int i = 0; i < arrayList.size(); i++) { + Object obj = arrayList.get(i); + List<MapNode> list = JSON.parseArray(obj.toString(), MapNode.class); + for (int j = 0; j < list.size(); j++) { + MapNode mapNode = list.get(j); + list.set(j, mapNode); + } + lists.add(list); + } + return R.ok().add(lists); + } catch (Exception e) { + e.printStackTrace(); + } + + return R.error(); + } + + /** * 閲嶇疆redis涓殑鍦板浘锛屽皢鍗犵敤鐨勫簱浣嶅叏閮ㄨВ闄� */ @GetMapping("/map/resetMap/auth") diff --git a/src/main/java/com/zy/core/ServerBootstrap.java b/src/main/java/com/zy/core/ServerBootstrap.java index 781ce85..e8e5600 100644 --- a/src/main/java/com/zy/core/ServerBootstrap.java +++ b/src/main/java/com/zy/core/ServerBootstrap.java @@ -79,9 +79,15 @@ // 鍒濆鍖栬緭閫佺嚎绾跨▼ News.info("鍒濆鍖栬緭閫佺嚎绾跨▼..................................................."); for (DevpSlave devp : slaveProperties.getDevp()) { - DevpThread devpThread = new SiemensDevpThread(devp); - new Thread((Runnable) devpThread).start(); - SlaveConnection.put(SlaveType.Devp, devp.getId(), devpThread); + if (devp.getId() == 1) { + DevpThread devpThread = new SiemensDevpThread(devp); + new Thread((Runnable) devpThread).start(); + SlaveConnection.put(SlaveType.Devp, devp.getId(), devpThread); + }else { + DevpThread devpThread = new SiemensDevpThread2(devp); + new Thread((Runnable) devpThread).start(); + SlaveConnection.put(SlaveType.Devp, devp.getId(), devpThread); + } } // 鍒濆鍖栨彁鍗囨満 News.info("鍒濆鍖栨彁鍗囨満........................................................"); diff --git a/src/main/java/com/zy/core/thread/SiemensDevpThread2.java b/src/main/java/com/zy/core/thread/SiemensDevpThread2.java new file mode 100644 index 0000000..d967224 --- /dev/null +++ b/src/main/java/com/zy/core/thread/SiemensDevpThread2.java @@ -0,0 +1,318 @@ +package com.zy.core.thread; + +import HslCommunication.Core.Types.OperateResult; +import HslCommunication.Core.Types.OperateResultExOne; +import HslCommunication.Profinet.Siemens.SiemensPLCS; +import HslCommunication.Profinet.Siemens.SiemensS7Net; +import com.alibaba.fastjson.JSON; +import com.core.common.Cools; +import com.core.common.DateUtils; +import com.core.common.SpringUtils; +import com.zy.asrs.entity.BasDevp; +import com.zy.asrs.service.BasDevpService; +import com.zy.core.DevpThread; +import com.zy.core.News; +import com.zy.core.cache.MessageQueue; +import com.zy.core.cache.OutputQueue; +import com.zy.core.cache.SlaveConnection; +import com.zy.core.enums.SlaveType; +import com.zy.core.model.DevpSlave; +import com.zy.core.model.Task; +import com.zy.core.model.protocol.StaProtocol; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +import java.text.MessageFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * 杈撻�佺嚎绾跨▼ + * Created by vincent on 2020/8/4 + */ +@Data +@Slf4j +public class SiemensDevpThread2 implements Runnable, DevpThread { + + private DevpSlave slave; + private SiemensS7Net siemensS7Net; + private Map<Integer, StaProtocol> station = new ConcurrentHashMap<>(); + private short heartBeatVal = 1; + private int barcodeSize = 1; + public static final ArrayList<Integer> staNos = new ArrayList<Integer>() {{ + add(106);add(107); + add(108);add(209); + add(210);add(347); + add(348);add(349); + }}; + + public SiemensDevpThread2(DevpSlave slave) { + this.slave = slave; + } + + @Override + @SuppressWarnings("InfiniteLoopStatement") + public void run() { + connect(); + while (true) { + try { + int step = 1; + Task task = MessageQueue.poll(SlaveType.Devp, slave.getId()); + if (task != null) { + step = task.getStep(); + } + switch (step) { + // 璇绘暟鎹� + case 1: + read(); + break; + // 鍐欐暟鎹� ID+鐩爣绔� + case 2: + write((StaProtocol) task.getData()); + read(); + break; + default: + break; + } + // 蹇冭烦 +// heartbeat(); + Thread.sleep(400); + } catch (Exception e) { + e.printStackTrace(); + } + + } + } + + @Override + public boolean connect() { + boolean result = false; + siemensS7Net = new SiemensS7Net(SiemensPLCS.S1200, slave.getIp()); + siemensS7Net.setRack(slave.getRack().byteValue()); + siemensS7Net.setSlot(slave.getSlot().byteValue()); + OperateResult connect = siemensS7Net.ConnectServer(); + if(connect.IsSuccess){ + result = true; + OutputQueue.DEVP.offer(MessageFormat.format( "銆恵0}銆戣緭閫佺嚎plc杩炴帴鎴愬姛 ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot())); + News.info("杈撻�佺嚎plc杩炴帴鎴愬姛 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); + } else { + OutputQueue.DEVP.offer(MessageFormat.format( "銆恵0}銆戣緭閫佺嚎plc杩炴帴澶辫触锛侊紒锛� ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot())); + News.error("杈撻�佺嚎plc杩炴帴澶辫触锛侊紒锛� ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); + } + siemensS7Net.ConnectClose(); + return result; + } + + /** + * 璇诲彇鐘舵�� ====> 鏁村潡plc + */ + private void read() throws InterruptedException { + OperateResultExOne<byte[]> result = siemensS7Net.Read("DB1000.0", (short) (staNos.size()*4)); + if (result.IsSuccess) { + for (int i = 0; i < staNos.size(); i++) { + Integer siteId = staNos.get(i); // 绔欑偣缂栧彿 + StaProtocol staProtocol = station.get(siteId); + if (null == staProtocol) { + staProtocol = new StaProtocol(); + staProtocol.setSiteId(siteId); + station.put(siteId, staProtocol); + } + staProtocol.setWorkNo(siemensS7Net.getByteTransform().TransInt16(result.Content, i*4)); // 宸ヤ綔鍙� + staProtocol.setStaNo(siemensS7Net.getByteTransform().TransInt16(result.Content, i*4+2)); // 鐩爣绔� + } + } + Thread.sleep(200); + OperateResultExOne<byte[]> result1 = siemensS7Net.Read("DB1001.0", (short) (staNos.size()*2)); + if (result1.IsSuccess) { + for (int i = 0; i < staNos.size(); i++) { + Integer siteId = staNos.get(i); // 绔欑偣缂栧彿 + boolean[] status = siemensS7Net.getByteTransform().TransBool(result1.Content, i*2, 1); + StaProtocol staProtocol = station.get(siteId); + staProtocol.setAutoing(status[0]); // 鑷姩 + staProtocol.setLoading(status[1]); // 鏈夌墿 + staProtocol.setInEnable(status[2]); // 鍙叆 + staProtocol.setOutEnable(status[3]);// 鍙嚭 + staProtocol.setEmptyMk(status[4]); // 绌烘澘淇″彿 + staProtocol.setFullPlt(status[5]); // 婊℃墭鐩� + staProtocol.setLiftArrival(status[6]); // 鎻愬崌鏈哄埌浣嶄俊鍙� + staProtocol.setShuttleTakeEnable(status[7]); // 鎻愬崌鏈哄彲鍙栦俊鍙� + + if (!staProtocol.isPakMk() && !staProtocol.isLoading()) { + staProtocol.setPakMk(true); + } + } + } + + if (result.IsSuccess && result1.IsSuccess) { + OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛",DateUtils.convert(new Date()), slave.getId())); + + // 鏍规嵁瀹炴椂淇℃伅鏇存柊鏁版嵁搴� + try { + List<BasDevp> basDevps = new ArrayList<>(); + for (Integer siteId : staNos) { + StaProtocol staProtocol = station.get(siteId); + basDevps.add(staProtocol.toSqlModel()); + } + BasDevpService basDevpService = SpringUtils.getBean(BasDevpService.class); + if (!basDevpService.updateBatchById(basDevps)) { + throw new Exception("鏇存柊鏁版嵁搴撴暟鎹け璐�"); + } + } catch (Exception e) { + OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戞洿鏂版暟鎹簱鏁版嵁澶辫触 ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot())); + News.error("鏇存柊鏁版嵁搴撴暟鎹け璐� ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()); + } + + } else { + OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戣鍙栬緭閫佺嚎plc鐘舵�佷俊鎭け璐� ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot())); +// News.error("璇诲彇杈撻�佺嚎plc鐘舵�佷俊鎭け璐� ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()); + } + } + + /** + * 鍐欏叆 ID+鐩爣绔� =====> 鍗曠珯鐐瑰啓鍏� + */ + private void write(StaProtocol staProtocol) throws InterruptedException { + if (null == staProtocol) { + return; + } + int index = staNos.indexOf(staProtocol.getSiteId()); + short[] array = new short[2]; + array[0] = staProtocol.getWorkNo(); + array[1] = staProtocol.getStaNo(); +// OperateResult write = siemensS7Net.Write("DB100." + index*4, staProtocol.getWorkNo()); // 宸ヤ綔鍙� +// Thread.sleep(500); +// OperateResult write1 = siemensS7Net.Write("DB100." + (index*4+2), staProtocol.getStaNo()); // 鐩爣绔� + + OperateResult writeResult; + //浠诲姟涓嬪彂娆℃暟 + int writeCount = 0; + //浠诲姟涓嬪彂鎴愬姛鏍囪瘑 + boolean writeFlag = false; + while(writeCount < 5){ + writeResult = siemensS7Net.Write("DB1000." + index*4, array); // 宸ヤ綔鍙枫�佺洰鏍囩珯 + if(writeResult.IsSuccess){ + Thread.sleep(200); + OperateResultExOne<byte[]> readResult = siemensS7Net.Read("DB1000." + index*4, (short)4); + if(readResult.IsSuccess){ + short workNo = siemensS7Net.getByteTransform().TransInt16(readResult.Content, 0); + short staNo = siemensS7Net.getByteTransform().TransInt16(readResult.Content, 2); + if(staProtocol.getWorkNo().equals(workNo) && staProtocol.getStaNo().equals(staNo)){ + //浠诲姟鍛戒护鍐欏叆鎴愬姛 + writeFlag = true; + log.info("鍐欏叆杈撻�佺嚎鍛戒护鍚庤繑鍥炴垚鍔燂紝骞朵笖鍥炶鎴愬姛銆傝緭閫佺嚎plc缂栧彿={}锛寋}锛屽啓鍏ユ鏁�={}", slave.getId(), JSON.toJSON(staProtocol), writeCount); + break; + } else {//杩斿洖缁撴灉鏄垚鍔熶簡锛屼絾鏄湡瀹炲�间笉鐩稿悓 + writeCount++; + OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎鍛戒护鍚庤繑鍥炴垚鍔燂紝浣嗘槸璇诲彇浠诲姟鍊间笉涓�鑷淬�傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2},鍐欏叆娆℃暟={3}", + slave.getId(), JSON.toJSON(staProtocol),writeCount)); + log.error("鍐欏叆杈撻�佺嚎鍛戒护鍚庤繑鍥炴垚鍔燂紝浣嗘槸璇诲彇浠诲姟鍊间笉涓�鑷淬�傝緭閫佺嚎plc缂栧彿={}锛寋}锛屽啓鍏ユ鏁�={}", slave.getId(), JSON.toJSON(staProtocol), writeCount); + } + } else { + writeCount++; + OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎鍛戒护鍚庤鍙栧け璐ャ�傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2},鍐欏叆娆℃暟={3}", + slave.getId(), JSON.toJSON(staProtocol), writeCount)); + log.error("鍐欏叆杈撻�佺嚎鍛戒护鍚庤鍙栧け璐ャ�傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={},鍐欏叆娆℃暟={}", slave.getId(), JSON.toJSON(staProtocol), writeCount); + } + } else { + writeCount++; + OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎鍛戒护澶辫触銆傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2},鍐欏叆娆℃暟={3}", + slave.getId(), JSON.toJSON(staProtocol),writeCount)); + log.error("鍐欏叆杈撻�佺嚎鍛戒护澶辫触銆傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={},鍐欏叆娆℃暟={}", slave.getId(), JSON.toJSON(staProtocol), writeCount); + } + Thread.sleep(200); + } + + //鍐欏懡浠ゅ皾璇曚簡5娆¤繕鏄け璐ヤ簡 + if(!writeFlag){ + staProtocol = station.get(staProtocol.getSiteId()); + if (staProtocol.getWorkNo() == 0 && staProtocol.getStaNo() ==0) { + staProtocol.setPakMk(true); + } + OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎鍛戒护灏濊瘯5娆″け璐ャ�傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2}", slave.getId(), JSON.toJSON(staProtocol))); + log.error("鍐欏叆杈撻�佺嚎鍛戒护灏濊瘯5娆″け璐ャ�傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={}", slave.getId(), JSON.toJSON(staProtocol)); + + //閲嶆柊娣诲姞鏁版嵁鍒颁换鍔¢槦鍒� + boolean result = MessageQueue.offer(SlaveType.Devp, slave.getId(), new Task(2, staProtocol)); + read();//璇诲彇1娆¤澶囩姸鎬� + return; + } else { + OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆� 杈撻�佺嚎鍛戒护涓嬪彂鎴愬姛 [id:{1}] >>>>> {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(staProtocol))); + log.info("杈撻�佺嚎鍛戒护涓嬪彂 [id:{}] >>>>> 鍛戒护涓嬪彂鎴愬姛锛� {}", slave.getId(), JSON.toJSON(staProtocol)); + + Integer siteId = staProtocol.getSiteId(); + staProtocol = station.get(siteId); + if ((siteId == 101 || siteId == 201)&&(staProtocol.getWorkNo() == 0 && staProtocol.getStaNo() ==0)) { + staProtocol.setPakMk(true); + } + } + } + + /** + * 蹇冭烦 + */ + private void heartbeat(){ + if (heartBeatVal == 1) { + heartBeatVal = 2; + } else { + heartBeatVal = 1; + } + OperateResult write = siemensS7Net.Write("DB100.50", heartBeatVal); + if (!write.IsSuccess) { + News.error("杈撻�佺嚎plc缂栧彿={} 蹇冭烦澶辫触", slave.getId()); + } + } + + /** + * 璁剧疆鍏ュ簱鏍囪 + */ + @Override + public void setPakMk(Integer siteId, boolean pakMk) { + StaProtocol staProtocol = station.get(siteId); + if (null != staProtocol) { + staProtocol.setPakMk(pakMk); + } + } + + @Override + public void close() { + siemensS7Net.ConnectClose(); + } + + public static void main(String[] args) { +// System.out.println(staNos.indexOf(129)); + System.out.println(staNos.size()); + for (int i = 0; i<staNos.size(); i++) { +// System.out.println(i*2); +// System.out.println(i*2 + 200); +// System.out.println(i); + } +// int index = staNos.indexOf(128); +// System.out.println(index*2); +// System.out.println(index*2 + 200); + } + +// public static void main(String[] args) throws Exception { +// DevpSlave slave = new DevpSlave(); +// slave.setIp("192.168.2.125"); +// SiemensDevpThread devpThread = new SiemensDevpThread(slave); +// devpThread.connect(); +// devpThread.read(); +// // 鍐� +// StaProtocol staProtocol = devpThread.getStation().get(1); +// staProtocol.setWorkNo((short) 232); +// staProtocol.setStaNo((short) 6); +// staProtocol.setAutoing(true); +// staProtocol.setEmptyMk(true); +// staProtocol.setInEnable(true); +// devpThread.write(staProtocol); +// System.out.println("----------------------------------------"); +// // 璇� +// devpThread.read(); +// System.out.println(JSON.toJSONString(devpThread.station)); +// +// } + +} diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index b9f5cba..80560d9 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -293,6 +293,13 @@ # row: 4 # bay: 6 # lev: 6 + # 杈撻�佺嚎2 + devp[1]: + id: 2 + ip: 10.10.10.58 + port: 102 + rack: 0 + slot: 0 # 鏉$爜鎵弿浠� barcode[0]: diff --git a/src/main/resources/plc2.json b/src/main/resources/plc2.json new file mode 100644 index 0000000..cc2ae1d --- /dev/null +++ b/src/main/resources/plc2.json @@ -0,0 +1 @@ +[ [ { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 } ], [ { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": 4, "data": "106", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": 4, "data": "107", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": 4, "data": "108", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": 4, "data": "210", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": 4, "data": "209", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": 4, "data": "349", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": 4, "data": "348", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 } ], [ { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 }, { "value": -1, "data": "", "top": 1000, "bottom": 1000, "left": 1000, "right": 1000 } ] ] \ No newline at end of file diff --git a/src/main/webapp/views/index.html b/src/main/webapp/views/index.html index e9c8b09..4dba389 100644 --- a/src/main/webapp/views/index.html +++ b/src/main/webapp/views/index.html @@ -23,6 +23,7 @@ <li><a id="lift" onclick="nav(this.id)" class="nav-unselect" href="#">鎻愬崌鏈�</a></li> <!-- <li><a id="ste" onclick="nav(this.id)" class="nav-unselect" href="#">绌挎杞�</a></li>--> <li><a id="shuttle" onclick="nav(this.id)" class="nav-unselect" href="#">鍥涘悜绌挎杞�</a></li> + <li><a id="plc2" onclick="nav(this.id)" class="nav-unselect" href="#">PLC2</a></li> </ul> </div> </div> diff --git a/src/main/webapp/views/plc2.html b/src/main/webapp/views/plc2.html new file mode 100644 index 0000000..f20589d --- /dev/null +++ b/src/main/webapp/views/plc2.html @@ -0,0 +1,661 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="UTF-8"> + <title>WCS鎺у埗涓績</title> + <link rel="stylesheet" href="../static/css/animate.min.css"> + <link rel="stylesheet" href="../static/vue/element/element.css"> + <link rel="stylesheet" href="../static/css/console_vue.css"> + <link rel="stylesheet" href="../static/css/toggle-switch.css"> + <script type="text/javascript" src="../static/js/jquery/jquery-3.3.1.min.js"></script> + <script type="text/javascript" src="../static/layui/layui.js"></script> + <script type="text/javascript" src="../static/js/handlebars/handlebars-v4.5.3.js"></script> + <script type="text/javascript" src="../static/js/common.js"></script> + <script type="text/javascript" src="../static/vue/js/vue.min.js"></script> + <script type="text/javascript" src="../static/vue/element/element.js"></script> +</head> +<body> +<div id="app"> + <div style="display: flex;justify-content: center;align-items: center;width: 100%;margin-top: 150px;"> + <div id="mapDataId" style="zoom: 0.7;position: relative;"> + <div class="pointContainer" v-for="(row,index) in map" :key="index"> + <div v-for="(col,idx) in row" :key="idx"> + <div v-if="col.value == 0"> + <!-- 瀛愯建閬� 璺緞涓虹┛姊溅棰勮璺緞鍒欐樉绀虹┛姊溅棰滆壊鍜岀┛姊溅鍙� --> + <div :style="{background: checkAdvancePath(index,idx).length == 0 ? '':shuttleColorList[checkAdvancePath(index,idx)[0]]}" class="item" v-if="col.data.length > 0">{{col.data}}</div> + <div :style="{background: checkAdvancePath(index,idx).length == 0 ? '':shuttleColorList[checkAdvancePath(index,idx)[0]]}" class="item" v-else>{{checkAdvancePath(index,idx).length == 0 ? idx:checkAdvancePath(index,idx)}}</div> + </div> + <div v-else-if="col.value == 3"> + <!-- 姣嶈建閬� 璺緞涓虹┛姊溅棰勮璺緞鍒欐樉绀虹┛姊溅棰滆壊鍜岀┛姊溅鍙� --> + <div :style="{background: checkAdvancePath(index,idx).length == 0 ? '#5af':shuttleColorList[checkAdvancePath(index,idx)[0]]}" class="item">{{checkAdvancePath(index,idx).length == 0 ? '⇅⇄':checkAdvancePath(index,idx)}}</div> + </div> + <div v-else-if="col.value == 4"> + <!-- 绔欑偣 --> + <div class="site" :id="'site-' + col.data" @click="openSite(col.data)">{{col.data}}</div> + </div> + <div v-else-if="col.value == 5"> + <!-- 鍏呯數妗� --> + <div class="item" style="font-size: 24px">⚡</div> + </div> + <div v-else-if="col.value == -999"> + <!-- 璺緞鍗犵敤鍖哄煙 --> + <div class="item" style="background:#f83333;color: #fff;">{{idx}}</div> + </div> + <div v-else-if="col.value < 0"> + <!-- 绂佹鏄剧ず鍖哄煙 --> + <div class="item" style="visibility: hidden">{{idx}}</div> + </div> + <div v-else> + <div class="item" v-if="col.data.length > 0">{{col.data}}</div> + <div class="item" v-else>{{idx}}-{{col.value}}</div> + </div> + </div> + </div> + + </div> + </div> + + <div class="footer"> + <!-- 鎬诲紑鍏� --> + <div class="line-status"> + <div class="body-head">鎬诲紑鍏�</div> + <div class="switch" @click="systemSwitch"> + <label id="system-toggle" class="toggle-switch" style="margin-left: 20px;"> + <input id="system-toggle-checked" disabled type="checkbox"> + <div class="button"> + <div class="light"></div> + <div class="dots"></div> + <div class="characters"></div> + <div class="shine"></div> + <div class="shadow"></div> + </div> + </label> + + <div class="switch_r"> + <p>绯荤粺鐘舵��</p> + <p id="system-run-desc">绯荤粺杩愯涓�</p> + </div> + </div> + </div> + <!-- 鍥涘悜绌挎杞︾姸鎬� --> + <div class="line-status"> + <div class="body-head">绌挎杞︾姸鎬�</div> + <div class="shuttle-status-box"> + <div v-for="(item,idx) in shuttleList" class="state"> + <span :style="{color: shuttleColorList[item.shuttleNo]}">鍥涘悜绌挎杞� {{item.shuttleNo}}</span> + <span v-if="item.protocolStatus == 1" + class="state-ss shuttle-idle">{{item.protocolStatus$}}</span> + <span v-else-if="item.protocolStatus == 2" + class="state-ss shuttle-working">{{item.protocolStatus$}}</span> + <span v-else-if="item.protocolStatus == 3" + class="state-ss shuttle-waiting">{{item.protocolStatus$}}</span> + <span v-else-if="item.protocolStatus == 4" + class="state-ss shuttle-charging">{{item.protocolStatus$}}</span> + <span v-else-if="item.protocolStatus == 5" + class="state-ss shuttle-charging-waiting">{{item.protocolStatus$}}</span> + <span v-else-if="item.protocolStatus == 6" + class="state-ss shuttle-fixing">{{item.protocolStatus$}}</span> + <span v-else-if="item.protocolStatus == 7" + class="state-ss shuttle-offline">{{item.protocolStatus$}}</span> + <span v-else class="state-ss shuttle-offline">{{item.protocolStatus$}}</span> + </div> + </div> + <div class="allStatus"><span>鎵�鏈夌姸鎬�</span></div> + <div class="allStatus item-group"> + <span class="shuttle-idle">绌洪棽</span> + <span class="shuttle-working">浣滀笟涓�</span> + <span class="shuttle-waiting">绛夊緟纭</span> + <span class="shuttle-charging">鍏呯數涓�</span> + <span class="shuttle-charging-waiting">鍏呯數浠诲姟绛夊緟纭</span> + <span class="shuttle-fixing">鏁呴殰淇涓�</span> + <span class="shuttle-offline">绂荤嚎</span> + </div> + </div> + <!-- 鎻愬崌鏈虹姸鎬� --> + <div class="line-status"> + <div class="body-head">鎻愬崌鏈虹姸鎬�</div> + <div class="lift-status-box"> + <div v-for="(item,idx) in liftList" class="state states"> + <span>鎻愬崌鏈� {{item.liftNo}}</span> + <span v-if="item.protocolStatus == 1" + class="state-ss lift-idle">{{item.protocolStatus$}}</span> + <span v-else-if="item.protocolStatus == 2" + class="state-ss lift-working">{{item.protocolStatus$}}</span> + <span v-else-if="item.protocolStatus == 3" + class="state-ss lift-waiting">{{item.protocolStatus$}}</span> + <span v-else-if="item.protocolStatus == 4" + class="state-ss lift-offline">{{item.protocolStatus$}}</span> + <span v-else class="state-ss lift-offline">{{item.protocolStatus$}}</span> + </div> + </div> + <div class="allStatus"><span>鎵�鏈夌姸鎬�</span></div> + <div class="allStatus item-group"> + <span class="lift-idle">绌洪棽</span> + <span class="lift-working">浣滀笟涓�</span> + <span class="lift-waiting">绛夊緟纭</span> + <span class="lift-offline">绂荤嚎</span> + </div> + </div> + <!-- 杈撻�佺嚎鐘舵�� --> + <div class="line-status"> + <div class="body-head">杈撻�佺嚎鐘舵��</div> + <div class="state states"> + <span>杩愯緭绾挎�绘暟</span> + <span class="line-ss">9</span> + </div> + <div class="allStatus"><span>鎵�鏈夌姸鎬�</span></div> + <div class="allStatus item-group"> + <span class="site-auto-run-id">鑷姩+鏈夌墿+ID</span> + <span class="site-auto-run">鑷姩+鏈夌墿</span> + <span class="site-auto-id">鑷姩+ID</span> + <span class="site-auto">鑷姩</span> + <span class="site-unauto">闈炶嚜鍔�/鎵嬪姩</span> + </div> + </div> + <!-- 鏉$爜琛ㄦ牸 --> + <div class="bar-code"> + <div class="body-head" id="code">鏉$爜鎵弿鍣�</div> + <div class="tablebox"> + <div class="table-head"> + <li><span>鏉$爜鍚嶇О</span><span class="right">鎵爜鏃堕棿</span></li> + </div> + <div id="barcode1" class="table-body"> + <li v-for="(item,index) in codeList1" :key="index"><span>{{item.barcode}}</span><span class="right">{{item.time}}</span></li> + </div> + </div> + <div class="tablebox"> + <div class="table-head"> + <li><span>鏉$爜鍚嶇О</span><span class="right">鎵爜鏃堕棿</span></li> + </div> + <div id="barcode2" class="table-body"> + <li v-for="(item,index) in codeList2" :key="index"><span>{{item.barcode}}</span><span class="right">{{item.time}}</span></li> + </div> + </div> + </div> + </div> + + <!-- 杈撻�佽澶囧脊绐� --> + <div id="siteWindow" :style="{display:siteWindow?'block':'none'}" class="animate__animated animate__fadeIn"> + <!-- 琛ㄥご --> + <div id="siteWindow-head"> + <div class="detailed"></div> + <button @click="siteWindow = false"></button> + </div> + <!-- 琛ㄥ唴瀹� --> + <div class="siteWindow-body"> + <form> + <!-- 璁惧鍙� --> + <div class="form-item"> + <div class="form-item-label"> + <span>璁惧鍙凤細</span> + </div> + <div class="form-item-input"> + <input type="text" name="siteId" value=""> + </div> + </div> + <!-- 宸ヤ綔鍙� --> + <div class="form-item"> + <div class="form-item-label"> + <span>宸ヤ綔鍙凤細</span> + </div> + <div class="form-item-input"> + <input type="text" name="workNo" value=""> + </div> + </div> + <!-- 宸ヤ綔鐘舵�� --> + <div class="form-item"> + <div class="form-item-label"> + <span>宸ヤ綔鐘舵�侊細</span> + </div> + <div class="form-item-input"> + <input type="text" name="wrkSts" value=""> + </div> + </div> + <div class="form-item"> + <!-- 鑷姩 --> + <div class="form-item-checkbox"> + <div class="form-item-label-checkbox"> + <span>鑷姩</span> + </div> + <div class="form-item-input-checkbox"> + <input type="checkbox" name="autoing"> + </div> + </div> + <!-- 鏈夌墿 --> + <div class="form-item-checkbox"> + <div class="form-item-label-checkbox"> + <span>鏈夌墿</span> + </div> + <div class="form-item-input-checkbox"> + <input type="checkbox" name="loading"> + </div> + </div> + <!-- 鑳藉叆 --> + <div class="form-item-checkbox"> + <div class="form-item-label-checkbox"> + <span>鑳藉叆</span> + </div> + <div class="form-item-input-checkbox"> + <input type="checkbox" name="canining"> + </div> + </div> + <!-- 鑳藉嚭 --> + <div class="form-item-checkbox"> + <div class="form-item-label-checkbox"> + <span>鑳藉嚭</span> + </div> + <div class="form-item-input-checkbox"> + <input type="checkbox" name="canouting"> + </div> + </div> + </div> + <!-- 鍑哄叆绫诲瀷 --> + <div class="form-item"> + <div class="form-item-label"> + <span>鍑哄叆绫诲瀷锛�</span> + </div> + <div class="form-item-input"> + <input type="text" name="ioType" value=""> + </div> + </div> + <!-- 婧愮珯 --> + <div class="form-item"> + <div class="form-item-label"> + <span>婧愮珯锛�</span> + </div> + <div class="form-item-input"> + <input type="text" name="sourceStaNo" value=""> + </div> + </div> + <!-- 鐩爣绔� --> + <div class="form-item"> + <div class="form-item-label"> + <span>鐩爣绔欙細</span> + </div> + <div class="form-item-input"> + <input type="text" name="staNo" value=""> + </div> + </div> + <!-- 婧愬簱浣� --> + <div class="form-item"> + <div class="form-item-label"> + <span>婧愬簱浣嶏細</span> + </div> + <div class="form-item-input"> + <input type="text" name="sourceLocNo" value=""> + </div> + </div> + <!-- 鐩爣搴撲綅 --> + <div class="form-item"> + <div class="form-item-label"> + <span>鐩爣搴撲綅锛�</span> + </div> + <div class="form-item-input"> + <input type="text" name="locNo" value=""> + </div> + </div> + </form> + </div> + </div> + +</div> +<script> + var app = new Vue({ + el: '#app', + data: { + map: [],//鍦板浘鏁版嵁 + currentLev: 1,//鍦板浘褰撳墠妤煎眰 + siteWindow: false, //绔欑偣寮圭獥鏄剧ず榛樿涓嶆樉绀� + floorList: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], //褰撳墠椤圭洰妤煎眰 + shuttleList: [], //鍥涘悜绌挎杞﹂泦鍚� + currentLevShuttleList: [],//褰撳墠妤煎眰鍥涘悜绌挎杞﹂泦鍚� + shuttleColorList: [],//鍥涘悜绌挎杞﹂鑹查泦鍚� + liftList: [], //鎻愬崌鏈洪泦鍚� + systemStatus: true,//绯荤粺杩愯鐘舵�� + consoleInterval: null,//瀹氭椂鍣ㄥ瓨鍌ㄥ彉閲� + codeList1: [],//鏉$爜List + codeList2: [],//鏉$爜List + }, + created() { + this.init() + }, + watch: { + + }, + methods: { + init() { + this.getMap(this.currentLev) + this.getSystemRunningStatus() //鑾峰彇绯荤粺杩愯鐘舵�� + + this.consoleInterval = setInterval(() => { + this.getShuttleStateInfo() //鑾峰彇鍥涘悜绌挎杞︿俊鎭� + this.getLiftStateInfo() //鑾峰彇鎻愬崌鏈轰俊鎭� + this.getSiteInfo() //鑾峰彇杈撻�佺珯鐐规暟鎹� + this.getMap(this.currentLev) //鑾峰彇瀹炴椂鍦板浘鏁版嵁 + this.getCodeData()//鑾峰彇鏉$爜 + }, 1000) + }, + //鑾峰彇鍦板浘鏁版嵁 + getMap(lev) { + $.ajax({ + type: "get", + url: baseUrl + "/console/plc2/auth", + headers: { + 'token': localStorage.getItem('token') + }, + success: (res) => { + let data = res.data + let tmp = [] + for (let i = 1; i < data.length - 1; i++) { + tmp.push(data[i]) + } + // console.log(tmp) + this.map = tmp + } + }) + }, + openSite(id) { + this.siteWindow = true; //鎵撳紑绔欑偣淇℃伅寮圭獥 + $(".detailed").empty(); + $('.detailed').append(id + '绔欑偣璇︾粏淇℃伅'); + $.ajax({ + url: baseUrl + "/console/site/detail", + headers: { + 'token': localStorage.getItem('token') + }, + data: { + siteId: id + }, + method: 'post', + success: function(res) { + for (var val in res.data) { + var find = $("#siteWindow").find(":input[name='" + val + "']"); + if (find[0].type === 'text') { + find.val(res.data[val]); + } else if (find[0].type === 'checkbox') { + find.attr("checked", res.data[val] === 'Y'); + } + } + } + + }) + }, + getSiteInfo() { + //鑾峰彇杈撻�佺珯鐐规暟鎹� + $.ajax({ + url: baseUrl+ "/console/latest/data/site", + headers: {'token': localStorage.getItem('token')}, + method: 'POST', + success: function (res) { + if (res.code === 200){ + var sites = res.data; + for (var i = 0; i < sites.length; i++){ + var siteEl = $("#site-"+sites[i].siteId); + siteEl.attr("class", "site " + sites[i].siteStatus); + if (sites[i].workNo != null && sites[i].workNo>0) { + siteEl.html(sites[i].siteId + "[" + sites[i].workNo + "]"); + } else { + siteEl.html(sites[i].siteId); + } + } + } else if (res.code === 403){ + parent.location.href = baseUrl+"/login"; + } else { + console.log(res.msg); + } + } + }); + }, + changFloor(lev) { + this.currentLev = lev + this.currentLevShuttleList = [] + this.getMap(lev) + }, + getShuttleStateInfo() { + // 鍥涘悜绌挎杞︿俊鎭〃鑾峰彇 + let that = this + $.ajax({ + url: baseUrl + "/shuttle/table/shuttle/state", + headers: { + 'token': localStorage.getItem('token') + }, + method: 'POST', + success: function(res) { + if (res.code == 200) { + let currentLevShuttle = []//褰撳墠妤煎眰灏忚溅闆嗗悎 + res.data.forEach((item,idx) => { + if (item != null && item.point != undefined && item.point != null) { + if (item.point.z == that.currentLev) { + currentLevShuttle.push(item); + } + } + }) + that.currentLevShuttleList = currentLevShuttle + that.shuttleList = res.data + + if (that.shuttleColorList.length == 0) { + let colorList = []//闅忔満灏忚溅棰滆壊 + res.data.forEach((item,idx) => { + colorList[item.shuttleNo] = that.colorRGB() + }) + that.shuttleColorList = colorList + } + } + } + }); + }, + getLiftStateInfo() { + // 鎻愬崌鏈轰俊鎭〃鑾峰彇 + let that = this + $.ajax({ + url: baseUrl + "/lift/table/lift/state", + headers: { + 'token': localStorage.getItem('token') + }, + method: 'POST', + success: function(res) { + if (res.code == 200) { + that.liftList = res.data + } + } + }); + }, + systemSwitch() { + // 绯荤粺寮�鍏� + let that = this + if (this.systemStatus) { + this.$prompt('璇疯緭鍏ュ彛浠わ紝骞跺仠姝CS绯荤粺', '鎻愮ず', { + confirmButtonText: '纭畾', + cancelButtonText: '鍙栨秷', + }).then(({ + value + }) => { + that.doSwitch(0, value) + }).catch(() => { + + }); + } else { + this.doSwitch(1) + } + }, + doSwitch(operatorType, password) { + let that = this + $.ajax({ + url: baseUrl + "/console/system/switch", + headers: { + 'token': localStorage.getItem('token') + }, + data: { + operatorType: operatorType, + password: password + }, + method: 'POST', + success: function(res) { + if (res.code === 200) { + if (res.data.status) { + $('#system-toggle-checked').attr("checked", true); + $('#system-run-desc').html("绯荤粺杩愯涓�..."); + that.systemStatus = true; + parent.systemRunning = true; + } else { + $('#system-toggle-checked').attr("checked", false); + $('#system-run-desc').html("绯荤粺宸插仠姝�!"); + that.systemStatus = false; + parent.systemRunning = false; + } + } else if (res.code === 403) { + parent.location.href = baseUrl + "/login"; + } else { + that.$message({ + message: res.msg, + type: 'error' + }); + } + } + }); + }, + getSystemRunningStatus() { + // 鑾峰彇wcs绯荤粺杩愯鐘舵�� + let that = this + $.ajax({ + url: baseUrl + "/console/system/running/status", + headers: { + 'token': localStorage.getItem('token') + }, + method: 'POST', + success: function(res) { + if (res.code === 200) { + if (res.data.status) { + $('#system-toggle-checked').attr("checked", true); + $('#system-run-desc').html("绯荤粺杩愯涓�..."); + that.systemStatus = true; + parent.systemRunning = true; + } else { + $('#system-toggle-checked').attr("checked", false); + $('#system-run-desc').html("绯荤粺宸插仠姝�!"); + that.systemStatus = false; + parent.systemRunning = false; + } + } else if (res.code === 403) { + parent.location.href = baseUrl + "/login"; + } else { + that.$message({ + message: res.msg, + type: 'error' + }); + } + } + }); + }, + getCarPosition(x,y) { + //璁$畻鍥涘悜绌挎杞﹀浘鏍囦綅缃� + let top = (x * 35 - 35) + "px" //闇�瑕佸噺鍘诲皬杞﹁嚜宸辨墍鍗犻珮搴� + let left = (y * 35) + "px" //闇�瑕佸噺鍘诲皬杞﹁嚜宸辨墍鍗犲搴� + return [top,left]; + }, + testMove() { + let that = this + clearInterval(this.consoleInterval)//娓呯悊瀹氭椂鍣� + + let shuttleList = this.currentLevShuttleList + $.ajax({ + url: baseUrl + "/static/testMoveData.json", + headers: { + 'token': localStorage.getItem('token') + }, + method: 'GET', + success: function(res) { + shuttleList[0].moveAdvancePath = res + that.currentLevShuttleList = shuttleList + + let index = 0 + let tmp = null + tmp = setInterval(() => { + if (index < res.length) { + that.currentLevShuttleList[0].wcsPoint.y = res[index].y + that.currentLevShuttleList[0].wcsPoint.x = res[index].x + index++ + }else { + clearInterval(tmp) + that.init() + } + },1000) + } + }); + }, + colorRGB(){ + //闅忔満棰滆壊 + const r = Math.floor(Math.random()*256); + const g = Math.floor(Math.random()*256); + const b = Math.floor(Math.random()*256); + return `rgb(${r},${g},${b})`; + }, + checkAdvancePath(x,y) { + //妫�娴嬭矾寰勬槸鍚︿负绌挎杞﹂璁¤矾寰勶紝濡倄鍜寉璺緞鏄┛姊溅棰勮璺緞锛屽垯杩斿洖灏忚溅鍙� + this.currentLevShuttleList.forEach((item,idx) => { + if (item.moveAdvancePath != null) { + item.moveAdvancePath.forEach((path,index) => { + if (path.x === x && path.y === y) { + return item.shuttleNo; + } + }) + } + }) + let data = [] + let shuttleList = this.currentLevShuttleList; + for (var i = 0; i < shuttleList.length; i++) { + let shuttle = shuttleList[i] + let moveAdvancePath = shuttle.moveAdvancePath + if (moveAdvancePath != null) { + for (var j = 0; j < moveAdvancePath.length; j++) { + let path = moveAdvancePath[j] + if (path.x-1 === x && path.y === y) {//璺緞绗﹀悎 + data.push(shuttle.shuttleNo) + continue; + } + } + } + } + return data;//杩斿洖灏忚溅鍙烽泦鍚� + }, + resetMap() { + //閲嶇疆鍦板浘 + let that = this + $.ajax({ + url:baseUrl+"/console/map/resetMap/auth", + headers:{ + 'token': localStorage.getItem('token') + }, + data:{}, + method:'get', + success:function (res) { + that.$message({ + message: '閲嶇疆瀹屾垚', + type: 'success' + }); + } + }) + }, + getCodeData(){ + let that = this + $.ajax({ + url:baseUrl +'/console/barcode/output/site', + method:'GET', + success:function (res) { + if(res.code === 200){ + let data = JSON.parse(res.data) + if(data.length<=5){ + that.codeList1 = data + } else { + tData1 = data.slice(0,5) + tData2 = data.splice(5,10) + } + } + } + }) + } + } + }) +</script> +</body> +</html> -- Gitblit v1.9.1