package com.mes.common; import cn.hutool.core.date.DateTime; import cn.hutool.json.JSONObject; import com.github.yulichang.wrapper.MPJLambdaWrapper; import com.mes.edgstoragecage.entity.EdgStorageCage; import com.mes.edgstoragecage.entity.EdgStorageCageDetails; import com.mes.edgstoragecage.mapper.EdgStorageCageDetailsMapper; import com.mes.edgstoragecage.service.EdgStorageCageDetailsService; import com.mes.edgstoragecage.service.EdgStorageCageService; import com.mes.glassinfo.entity.GlassInfo; import com.mes.glassinfo.service.GlassInfoService; import com.mes.taskcache.entity.TaskCache; import com.mes.taskcache.service.TaskCacheService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @Service @Slf4j public class PlcHomeEdg extends Thread { @Autowired TaskCacheService taskCacheService; @Autowired GlassInfoService glassInfoService; @Autowired EdgStorageCageService edgStorageCageService; @Autowired EdgStorageCageDetailsService edgStorageCageDetailsService; @Resource private EdgStorageCageDetailsMapper edgStorageCageDetailsMapper; private Map mapParameter = new HashMap(); private Map mapValue = new HashMap(); private Map mapType = new HashMap(); private Map mapSettings = new HashMap(); private void initialize() { // mapParameter.put("A06_request_word", "DB11.0"); //work // mapParameter.put("A05_scanning_ID", "DB11.2"); // mapParameter.put("MES_confirmation_word", "DB11.40"); // mapParameter.put("A09_glass_status", "DB11.70"); // //mapParameter.put("A10_glass_status", "DB11.72"); // mapParameter.put("A09_prohibit_film_production", "DB11.74"); // mapParameter.put("A10_prohibit_film_production", "DB11.76"); // mapSettings.put("territoryPoor", 3); // mapType.put("A06_request_word", "Word"); // mapType.put("A05_scanning_ID", "String"); // mapType.put("MES_confirmation_word", "Word"); // mapType.put("A09_glass_status", "Word"); // //mapType.put("A10_glass_status", "Word"); // mapType.put("A09_prohibit_film_production", "Word"); // mapType.put("A10_prohibit_film_production", "Word"); mapValue.put("A06_request_word","1");//请求字 mapValue.put("A05_scanning_ID","11111111111");//请求ID mapValue.put("MES_confirmation_word","0");//MES发送字 mapValue.put("A09_glass_status","0");//A09玻璃状态 mapValue.put("A10_glass_status","0");//A09玻璃状态 mapValue.put("A09_prohibit_film_production","0");//A9禁止出片 mapValue.put("A10_prohibit_film_production","0");//A10禁止出片 } private void inTo() { List glassInfos = glassInfoService.selectId(mapValue.get("A05_scanning_ID")); if (glassInfos.size() < 1) { log.info("此玻璃编号不存在"); } else if (glassInfos.size() == 1) { //添加进片任务 查找空格 log.info("正常"); List list = edgStorageCageService.selectCacheEmpty(); if (list.size() > 1) { EdgStorageCageDetails edgStorageCageDetails = edgStorageCageDetailsMapper.selectOne(new MPJLambdaWrapper() .eq(EdgStorageCageDetails::getGlassId, glassInfos.get(0).getGlassId())); edgStorageCageDetails.setState(200); TaskCache taskCache = new TaskCache(); EdgStorageCage edgStorageCage = list.get(0); taskCache.setGlassId(glassInfos.get(0).getGlassId()); taskCache.setTaskStatus(0); taskCache.setStartCell(0); taskCache.setEndCell(edgStorageCage.getSlot()); taskCache.setTaskType(1); taskCache.setCreateTime(new DateTime()); edgStorageCageDetailsMapper.updateById(edgStorageCageDetails); taskCacheService.insertTaskCache(taskCache); S7object.getinstance().plccontrol.WriteWord(mapParameter.get("MES_confirmation_word"), (short)1); } else { log.info("不存在空格"); } } else { log.info("此玻璃编号存在多个"); } } private void outTo(int line) { int endcell = 0; EdgStorageCageDetails outEdgStorageCageDetails = new EdgStorageCageDetails(); TaskCache taskCacheA09 = taskCacheService.selectLastOutCacheInfo(""); TaskCache taskCacheA10 = taskCacheService.selectLastOutCacheInfo(""); //两线各自要出的玻璃 EdgStorageCageDetails glassInfo09 = edgStorageCageDetailsService.selectConformGlass(taskCacheA09.getGlassId(), (int) mapSettings.get("territoryPoor")); EdgStorageCageDetails glassInfo10 = edgStorageCageDetailsService.selectConformGlass(taskCacheA10.getGlassId(), (int) mapSettings.get("territoryPoor")); //决定线路 if (line == 1) { endcell = 9000; outEdgStorageCageDetails = glassInfo09; } else if (line == 2) { endcell = 1000; outEdgStorageCageDetails = glassInfo10; } else if (line == 3) { endcell = 9000;//默认走一号线 优化方向可根据 对比两线速度/两线当前任务情况做 outEdgStorageCageDetails = glassInfo09; } if (outEdgStorageCageDetails != null && endcell > 0) { TaskCache taskCache = new TaskCache(); taskCache.setGlassId(outEdgStorageCageDetails.getGlassId()); taskCache.setTaskStatus(0); taskCache.setStartCell(outEdgStorageCageDetails.getSlot()); taskCache.setEndCell(endcell); taskCache.setTaskType(2); taskCache.setCreateTime(new DateTime()); taskCacheService.insertTaskCache(taskCache); S7object.getinstance().plccontrol.WriteWord(mapParameter.get("MES_confirmation_word"), (short)1); } } @Override public void run() { boolean start = true; initialize(); log.info("当前参数值:{}", mapValue); while (this != null && start) { JSONObject jsonObject = new JSONObject(); for (String key : mapParameter.keySet()) { String value = ""; if ("String".equals(mapType.get(key))) { value = S7object.getinstance().plccontrol.readString(mapParameter.get(key)); } else { value = S7object.getinstance().plccontrol.readWord(mapParameter.get(key)) + ""; } mapValue.put(key, value); } try { Thread.sleep(1000); taskCacheService = WebSocketServer.applicationContext.getBean(TaskCacheService.class); glassInfoService = WebSocketServer.applicationContext.getBean(GlassInfoService.class); edgStorageCageService = WebSocketServer.applicationContext.getBean(EdgStorageCageService.class); edgStorageCageDetailsMapper = WebSocketServer.applicationContext.getBean(EdgStorageCageDetailsMapper.class); // initialize();//初始化数据 if ("0".equals(mapValue.get("A06_request_word"))) { //清除 S7object.getinstance().plccontrol.WriteWord(mapParameter.get("MES_confirmation_word"), (short) 0); } else if ("1".equals(mapValue.get("A06_request_word")) && "0".equals(mapValue.get("MES_confirmation_word"))) { inTo(); } else if ("2".equals(mapValue.get("A06_request_word")) && "0".equals(mapValue.get("MES_confirmation_word")) && !"0".equals(mapValue.get("A09_glass_status"))) { //09空闲 :1 10空闲 :2 都空闲:3 其他0 outTo(Integer.parseInt(mapValue.get("A09_glass_status"))); } else if ("3".equals(mapValue.get("A06_request_word")) && "0".equals(mapValue.get("MES_confirmation_word"))) { if ("0".equals(mapValue.get("A09_glass_status")) || "0".equals(mapValue.get("A10_glass_status"))) { outTo(Integer.parseInt(mapValue.get("A09_glass_status"))); } else { inTo(); } } } catch (InterruptedException e) { e.printStackTrace(); } // log.info("推数据"); // jsonObject.append("params", new short[] { 30, 40, }); ArrayList sendwServer = WebSocketServer.sessionMap.get("Home"); if (sendwServer != null) { for (WebSocketServer webserver : sendwServer) { webserver.sendMessage(jsonObject.toString()); if (webserver != null) { List messages = webserver.getMessages(); if (!messages.isEmpty()) { // // 将最后一个消息转换为整数类型的列表 webserver.clearMessages(); } } } } } } }