package com.example.springboot.component; import cn.hutool.json.JSONObject; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Map; import com.example.springboot.service.*; import org.apache.poi.ss.usermodel.Workbook; import org.springframework.beans.factory.annotation.Autowired; import com.example.springboot.entity.Flowcard; import com.example.springboot.entity.Glass; import com.example.springboot.entity.GlassInfo; import com.example.springboot.entity.MeasureSetting; import com.example.springboot.entity.OutTask; import com.example.springboot.entity.Out_slice; import com.example.springboot.entity.Queue; import com.example.springboot.entity.StorageCage; import com.example.springboot.entity.StorageTask; import com.example.springboot.entity.alarmmg; import com.example.springboot.entity.north_glass_buffer1; import com.example.springboot.entity.device.PlcParameterObject; import com.example.springboot.mapper.HomeMapper; import com.example.springboot.mapper.GlassInfoMapper; import com.example.springboot.mapper.MeasureSettingMapper; import com.example.springboot.mapper.QueueMapper; import com.example.springboot.mapper.SpianMapper; public class Plchome extends Thread { @Autowired private HomeMapper homeMapper; @Autowired private HomeService HomeService; @Autowired private GlassInfoMapper glassInfoMapper; private QueueMapper QueueMapper; private OutSliceServive outSliceServive; // 出片队列是否允许出片 public static Boolean isAllowQueue = true; public static Boolean isAllowReordering = true; // 出片队列警告 public static Boolean isQueueWarning = true; // 铝框id public static String FrameNo = ""; // 是否需要手动确认玻璃 public static Boolean isConfirm = false; // 待确认的出片队列 public static List AluminumFrame; // private Configuration config; private StorageCageService storageCageService; public static Boolean FeedState = false; // public Plchome() throws IOException { // config = new Configuration("config.properties"); // } // public static Map b=new HashMap<>(); // b.put() public double carstart = 200; public double carend = 20000; @Override public void run() { while (this != null) { JSONObject jsonObject = new JSONObject(); try { Thread.sleep(500); // 注入mapper HomeService = WebSocketServer.applicationContext.getBean(HomeService.class); QueueMapper = WebSocketServer.applicationContext.getBean(QueueMapper.class); homeMapper = WebSocketServer.applicationContext.getBean(HomeMapper.class); outSliceServive = WebSocketServer.applicationContext.getBean(OutSliceServive.class); storageCageService = WebSocketServer.applicationContext.getBean(StorageCageService.class); glassInfoMapper = WebSocketServer.applicationContext.getBean(GlassInfoMapper.class); // 获取其车的位置 if (S7control.getinstance().CheckConnected() == true && false) { double carposition = 0; float car = S7control.getinstance().readFloat32("DB10.1992"); carposition = (-40 + (car / (carend - carstart) * 595)); jsonObject.append("carposition", carposition); } // 笼子使用情况 List tableData = homeMapper.selectAlls(); jsonObject.append("tableData", tableData); // 格理片笼格子状态 List cagelist1 = storageCageService.SelectStorageCageByCage(1); List cagelist2 = storageCageService.SelectStorageCageByCage(2); List cagelist3 = storageCageService.SelectStorageCageByCage(3); List cagelist4 = storageCageService.SelectStorageCageByCage(4); jsonObject.append("cagelist1", cagelist1); jsonObject.append("cagelist2", cagelist2); jsonObject.append("cagelist3", cagelist3); jsonObject.append("cagelist4", cagelist4); // 进出片任务 List tasklist1 = homeMapper.selectinout(3); List tasklist2 = homeMapper.selectinout(2); jsonObject.append("tasklist1", tasklist1); jsonObject.append("tasklist2", tasklist2); // 查询报警信息 List alarmmg = homeMapper.SelectAlarmmgInfo(); jsonObject.append("alarmmg", alarmmg); // 获取出片队列信息 List listoutslice = outSliceServive.SelectProductionqueue(); jsonObject.append("listoutslice", listoutslice); // 获取当前出片队列出片状态 jsonObject.append("isAllowQueue", Plchome.isAllowQueue); // 获取出片队列警告状态 jsonObject.append("isQueueWarning", Plchome.isQueueWarning); // 获取当前出片队列调序状态 jsonObject.append("isAllowReordering", Plchome.isAllowReordering); // 是否需要人工确认上片玻璃 jsonObject.append("isConfirm", isConfirm); // 查询当前铝框信息 // Out_slice CurrentFrame = outSliceServive.SelectCurrentFrame(); // jsonObject.append("CurrentFrame", CurrentFrame); // 读取DB105区文件 PlcParameterObject plcmes = PLCAutoMes.PlcMesObject; // if(plcmes.==null){ // } // 获取测量的长,宽 boolean istest = true; // String PlcRequest = "1"; // String MesSend = "0"; // double width = 727; // double height = 414; // 匹配 // System.err.println(PlcRequest+","+MesSend+","+width+","+height); if (plcmes.getPlcParameter("GaToMES").getValue() != null) { String PlcRequest = plcmes.getPlcParameter("GaToMES").getValue();// plc请求字 String MesSend = plcmes.getPlcParameter("MESToGaStatus").getValue();// mes发送字 String A01ToMES = plcmes.getPlcParameter("A01ToMES").getValue();// 扫码请求 String MESToA01 = plcmes.getPlcParameter("MESToA01").getValue();// 确认扫码 String Layer = plcmes.getPlcParameter("Layer").getValue();// 层号 String Mateid = plcmes.getPlcParameter("A01MateID").getValue();// 配对号 String Order = plcmes.getPlcParameter("A01OrderID").getValue();// 订单号 double width = Double.valueOf(plcmes.getPlcParameter("width").getValue());// // 宽 double height = Double.valueOf(plcmes.getPlcParameter("Height").getValue());// 高 String celanedOrders = Order.replaceAll("[^a-zA-Z0-9.]", "").trim().split("\\.")[0]; String cleanedMateids = Mateid.replaceAll("[^0-9.]", "").trim().split("\\.")[0]; // 移除所有非数字字符 String cleanedLayers = Layer.replaceAll("[^0-9.]", "").trim().split("\\.")[0]; // String celanedOrder = celanedOrders.isEmpty() ? "" : celanedOrders; String cleanedMateid = cleanedMateids.isEmpty() ? "" : cleanedMateids; String cleanedLayer = cleanedLayers.isEmpty() ? "" : cleanedLayers; if ("4".equals(PlcRequest)) { S7control.getinstance().WriteWord(plcmes.getPlcParameter("MESToGaStatus").getAddress(),(short) 0); System.out.println("收四归零"); } // 扫码请求时 if ("1".equals(A01ToMES) && "0".equals(MESToA01)&&"0".equals(MesSend)&&"0".equals(PlcRequest)) { if(cleanedMateid==""||cleanedLayer==""){ cleanedMateid="0"; cleanedLayer="0"; } int cont = storageCageService.ScanMatch(celanedOrder, Integer.parseInt(cleanedMateid),Integer.parseInt(cleanedLayer)); if (cont > 0) { System.out.println("扫码成功"); System.out.println( "Order:" + celanedOrder + " Mateid:" + cleanedMateid + " Layer:" + cleanedLayer); S7control.getinstance().WriteWord(plcmes.getPlcParameter("MESToA01").getAddress(), (short) 1); S7control.getinstance().WriteWord(plcmes.getPlcParameter("MESToGaStatus").getAddress(), (short) 1); } else { // QueueMapper.insertMatchFailure(1000, 1000, -1); System.out.println( "Order:" + celanedOrder + " Mateid:" + cleanedMateid + " Layer:" + cleanedLayer); System.out.println("扫码添加失败"); } } // 请求归零时 if ("4".equals(A01ToMES)) { System.out.println("扫码归零成功"); S7control.getinstance().WriteWord(plcmes.getPlcParameter("MESToA01").getAddress(), (short) 0); } // 测量请求时 if ("1".equals(PlcRequest) && "0".equals(MesSend)) { boolean is = HomeService.Normal(width, height, "1"); if (is && istest) { // 测量成功 S7control.getinstance().WriteWord(plcmes.getPlcParameter("MESToGaStatus").getAddress(), (short) 1); } else if (istest) { // 匹配失败 S7control.getinstance().WriteWord(plcmes.getPlcParameter("MESToGaStatus").getAddress(), (short) 4); } } } // S7control.getinstance().WriteWord("DB14.170", (short)0); // 正在上片订单中的所有小片信息 List glassInfoFlowCard = glassInfoMapper.selectOrderState(1); jsonObject.append("glassInfoFlowCard", glassInfoFlowCard); Queue LastQueue = QueueMapper.selectLastQueue2(); if (LastQueue == null) { Queue nullQueue = new Queue(); nullQueue.setglassId(""); nullQueue.setglassheight(0); nullQueue.setglasswidth(0); nullQueue.setglassheightmm(0); nullQueue.setglasstype(0); nullQueue.setglasswidthmm(0); jsonObject.append("LastQueue", nullQueue); } else { if (LastQueue.getstate() < 1) { LastQueue.setglasswidth(LastQueue.getglasswidthmm()); LastQueue.setglassheight(LastQueue.getglassheightmm()); } jsonObject.append("LastQueue", LastQueue); } // String E01id = new String( S7controlLK.getinstance().ReadByte("DB17.0",16)); // String J01id = new String( S7controlLK.getinstance().ReadByte("DB17.22",14)); // 查询理片笼信息 List StorageCageInfo = storageCageService.SelectStorageCageInfo(); jsonObject.append("StorageCageInfo", StorageCageInfo); // 查询当前进片任务 List StoragTaskeTaskFeed = storageCageService.SelectStorageTask(0); jsonObject.append("StoragTaskeTaskFeed", StoragTaskeTaskFeed); // 查询当前出片任务 List StoragTaskeTaskOut = storageCageService.SelectStorageTask(1); jsonObject.append("StoragTaskeTaskOut", StoragTaskeTaskOut); // 查询当前出片队列 List OutTask = storageCageService.SelectOutTask(); jsonObject.append("OutTask", OutTask); // 查询最后6次出片记录 List OutLog = storageCageService.SelectOutLog(); jsonObject.append("OutLog", OutLog); // 查询所有玻璃厚度和膜系 List SelectMeasure = storageCageService.SelectMeasure(); jsonObject.append("SelectMeasure", SelectMeasure); // 查询当前膜系厚度 MeasureSetting SelectSetting = storageCageService.SelectSetting(); jsonObject.append("SelectSetting", SelectSetting); // 查询现在的玻璃厚度和膜系 Map StorageCageForm = storageCageService.StorageCageForm(); jsonObject.append("StorageCageForm", StorageCageForm); // //查询当前订单任务 List OrderTask = storageCageService.SelectOrderTask(); jsonObject.append("OrderTask", OrderTask); // jsonObject.append("params", new short[] { 30, 40, }); // System.out.println("jsonObject:" + jsonObject); ArrayList sendwServer = WebSocketServer.sessionMap.get("Home"); if (sendwServer != null) { Iterator iterator = sendwServer.iterator(); while (iterator.hasNext()) { WebSocketServer webserver = iterator.next(); webserver.sendMessage(jsonObject.toString()); List messages = webserver.getMessages(); if (!messages.isEmpty()) { // // 将最后一个消息转换为整数类型的列表 webserver.clearMessages(); } } } // 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(); // } // } // } // } } catch (InterruptedException e) { e.printStackTrace(); } } } }