package com.mes.job; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.mes.common.config.Const; import com.mes.downglassinfo.entity.DownGlassInfo; import com.mes.downglassinfo.entity.DownGlassTask; import com.mes.downglassinfo.service.DownGlassInfoService; import com.mes.downglassinfo.service.DownGlassTaskService; import com.mes.downstorage.entity.DownStorageCageDetails; import com.mes.downstorage.service.DownStorageCageDetailsService; import com.mes.downstorage.service.DownStorageCageService; import com.mes.downworkstation.entity.DownWorkstation; import com.mes.downworkstation.service.DownWorkstationService; import com.mes.downworkstation.service.DownWorkstationTaskService; import com.mes.glassinfo.entity.GlassInfo; import com.mes.glassinfo.service.GlassInfoService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.util.List; /** * @Author : zhoush * @Date: 2024/5/8 8:17 * @Description: */ @Component @Slf4j public class DownCacheGlassTask { @Autowired DownGlassTaskService downGlassTaskService; @Autowired GlassInfoService glassInfoService; @Autowired DownStorageCageDetailsService downStorageCageDetailsService; @Autowired DownStorageCageService downStorageCageService; @Autowired DownWorkstationService downWorkstationService; @Autowired DownGlassInfoService downGlassInfoService; @Autowired private DownWorkstationTaskService downWorkstationTaskService; // @Value("${mes.threshold}") private int threshold; @Scheduled(fixedDelay = 1000) public void autoBindRack() { log.info("根据缓存中已经进片的玻璃种数量最多的流程卡号自动绑定一个启用状态的空架子"); List Details = downStorageCageService.selectCacheMax(); if (Details.size() > 0) { DownStorageCageDetails downStorageCageDetails = Details.get(0); String flowCardId = downStorageCageDetails.getFlowCardId(); int glassInfoCount = glassInfoService.getGlassInfoCountByFlowCardId(flowCardId); DownWorkstation downWorkstation = downWorkstationService.getOne(new LambdaQueryWrapper().eq(DownWorkstation::getFlowCardId, null)); List downWorkstations = downWorkstationService.list(new LambdaQueryWrapper() .eq(DownWorkstation::getEnableState, 1)); if (!downWorkstations.stream().anyMatch(workstation -> workstation.getFlowCardId().equals(flowCardId))) { downWorkstationService.updateFlowCardIdAndCount(flowCardId, glassInfoCount, downWorkstation.getWorkstationId()); } } } // @Scheduled(fixedDelay = 1000) public void plcdownGlassTask() { // PlcParameterObject plcParameterObject = S7object.getinstance().PlcMesObject; // String taskRequestTypeValue = plcParameterObject.getPlcParameter("A06_request_word").getValue(); // String glassIdeValue = plcParameterObject.getPlcParameter("A05_scanning_ID").getValue(); // String confirmationWrodValue = plcParameterObject.getPlcParameter("MES_confirmation_word").getValue(); // String outGlassstate = plcParameterObject.getPlcParameter("A09_glass_status").getValue(); // String MESSendingWord = plcParameterObject.getPlcParameter("MES_confirmation_word").getAddress(); // String G06RobotTaskRequestWord = plcParameterObject.getPlcParameter("G06RobotTaskRequestWord").getAddress(); String taskRequestTypeValue = "0"; String glassIdeValue = "NG24041101C002-2-6-1-6"; String confirmationWrodValue = "1"; String outGlassstate = "1"; String MESSendingWord = "1"; String G11RobotTaskRequestWord = "0"; String G06RobotTaskRequestWord = "0"; String G13RobotTaskRequestWord = "0"; log.info("1、获取到的请求字为:{},获取到的扫描ID为:{},获取到的确认字为:{},获取到的出片状态为:{}", taskRequestTypeValue, glassIdeValue, confirmationWrodValue, outGlassstate); // if ("0".equals(taskRequestTypeValue)) { // if ("0".equals(confirmationWrodValue)) { // log.info("2、获取到的请求字为0,且确认字为0,不执行任务"); // return; // } // log.info("2、获取到的请求字为0,将确认字改为0"); // S7object.getinstance().plccontrol.WriteWord(MESSendingWord, (short) 0); // return; // } // if (!"0".equals(confirmationWrodValue)) { // log.info("2、获取到的请求字不为0,将确认字改为0"); // S7object.getinstance().plccontrol.WriteWord(MESSendingWord, (short) 0); // return; // } if ("1".equals(taskRequestTypeValue)) { log.info("3、进片请求,且确认字为0,执行进片任务"); inTo(glassIdeValue, MESSendingWord); } else if ("2".equals(taskRequestTypeValue)) { log.info("3、出片请求,且确认字为0,执行进片任务"); outTo(MESSendingWord); } else if ("3".equals(taskRequestTypeValue)) { log.info("3、进片和出片都空闲,执行出片任务"); if (outTo(MESSendingWord)) { inTo(glassIdeValue, MESSendingWord); } } if (("0".equals(G11RobotTaskRequestWord) || "0".equals(G06RobotTaskRequestWord)) || "0".equals(G13RobotTaskRequestWord)) { log.info("4、有下片完成信号更新落架数量"); insertdownglassinfo(); } } /** * 进片任务 * * @param glassId * @param MESSendingWord * @param */ private void inTo(String glassId, String MESSendingWord) { log.info("1、按照玻璃id:{}获取玻璃小片信息", glassId); GlassInfo glassInfo = glassInfoService.getOne(new LambdaQueryWrapper().eq(GlassInfo::getGlassId, glassId)); if (glassInfo == null) { log.info("2、此玻璃编号不存在"); return; } log.info("2、获取到的玻璃信息为{}", glassInfo); if (downStorageCageDetailsService.DirectConnection(glassInfo)) { //直通 //log.info("3、如果当前玻璃属于版图id和片序的顺序则直通,执行下片任务"); log.info("3、如果当前玻璃属于流程卡中的片序的顺序则直通,执行下片任务"); DownWorkstation downWorkstation = downWorkstationService.getOne(new LambdaQueryWrapper().eq(DownWorkstation::getFlowCardId, glassInfo.getFlowCardId())); int WorkstationId = downWorkstation.getWorkstationId(); DownGlassTask downGlassTask = downStorageCageService.createDownGlassTask(glassInfo, "0", String.valueOf(WorkstationId), "3"); downGlassTaskService.insertCacheTask(downGlassTask); } else { // log.info("4、如果不属于版图id和片序的顺序执行进片任务"); log.info("4、如果不属于流程卡中的片序的顺序执行进片任务"); //添加进片任务 查找空格 List list = downStorageCageService.selectCacheEmpty(); if (list.size() > 0) { DownStorageCageDetails item = list.get(0); log.info("5、查询卧式理片笼里面的空格:{}", list); log.info("6、将玻璃信息插入卧式理片笼,当前玻璃信息:{}", glassInfo); DownStorageCageDetails details = new DownStorageCageDetails(); BeanUtils.copyProperties(glassInfo, details); details.setState(Const.GLASS_STATE_IN); details.setGlassId(glassInfo.getGlassId()); details.setSlot(item.getSlot()); details.setDeviceId(item.getDeviceId()); downStorageCageDetailsService.save(details); log.info("7、玻璃信息已存入理片笼详情表,玻璃信息为{}", details); DownGlassTask downGlassTask = downStorageCageService.createDownGlassTask(glassInfo, "0", item.getSlot() + "", "1"); //添加进片任务 log.info("8、生成进片任务信息存入任务表{}", downGlassTask); downGlassTaskService.insertCacheTask(downGlassTask); } } log.info("9、发送确认字完成"); //S7object.getinstance().plccontrol.WriteWord(MESSendingWord, (short) 1); } /** * 出片任务 * * @param MESSendingWord */ private Boolean outTo(String MESSendingWord) { // log.info("单片情况根据传入的料架号 查询符合按照版图id和片序出片,并且优先出满架的小片"); log.info("单片情况根据传入的料架号 查询符合按照流程卡中顺序出片,并且优先出满架的小片"); // List list1to3 = downStorageCageDetailsService.CacheOut1(1, 3); // List list4to6 = downStorageCageDetailsService.CacheOut1(4, 6); List list1to6 = downStorageCageDetailsService.CacheOut2(1, 6); DownStorageCageDetails selectedItem = null; String endCell = ""; // 优先 超出尺寸优先人工出片 人工处理 if (!list1to6.isEmpty()) { DownStorageCageDetails item3 = list1to6.get(0); //后期有生产规则 if (item3.getHeight() >= 2500 && item3.getWidth() >= 2660) { log.info("人工处理"); selectedItem = item3; } else if (!!list1to6.isEmpty()) { log.info("前后端都空闲优先满架"); selectedItem = list1to6.get(0); } } // 按照版图id和片序符合前端出片 // if (selectedItem == null && !list1to3.isEmpty()) { // log.info("前端出片"); // selectedItem = list1to3.get(0); // } // // // 按照版图id和片序符合后端出片 // if (selectedItem == null && !list4to6.isEmpty()) { // log.info("后端出片"); // selectedItem = list4to6.get(0); // } if (selectedItem != null) { DownWorkstation downWorkstation = downWorkstationService.getOne( new LambdaQueryWrapper() .eq(DownWorkstation::getFlowCardId, selectedItem.getFlowCardId()) ); endCell = String.valueOf(downWorkstation.getWorkstationId()); if (endCell.isEmpty()) { endCell = "7"; } DownGlassTask downGlassTask = downStorageCageService.createDownGlassTask(selectedItem, "9", endCell, "2"); downGlassTaskService.insertCacheTask(downGlassTask); LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(DownStorageCageDetails::getGlassId, selectedItem.getGlassId()); DownStorageCageDetails updateDetail = new DownStorageCageDetails(); updateDetail.setState(Const.GLASS_STATE_OUT); downStorageCageDetailsService.update(updateDetail, wrapper); log.info("更新出片玻璃的状态为{}", Const.GLASS_STATE_OUT); // S7object.getinstance().plccontrol.WriteWord(MESSendingWord, (short) 2); return true; } // 返回结果 return false; } // public void insertdownglassinfo() { try { List taskdownGlassInf = downGlassTaskService.getUnloadingTaskState(); if (taskdownGlassInf != null && !taskdownGlassInf.isEmpty()) { for (DownGlassTask downGlassInfo : taskdownGlassInf) { // 创建新的 DownGlassInfo 对象并设置相关属性 DownGlassInfo newdownGlassInfo = new DownGlassInfo(); Integer maxSequence = downGlassInfoService.getMaxSequenceByFlowCardId(downGlassInfo.getFlowCardId()); // 初始化顺序字段值 int sequence = maxSequence != null ? maxSequence + 1 : 1; BeanUtils.copyProperties(downGlassInfo, newdownGlassInfo); // 设置顺序字段值 newdownGlassInfo.setSequence(sequence); // 插入数据到下片玻璃信息表 downGlassInfoService.insertDownGlassInfo(newdownGlassInfo); log.info("插入数据到下片玻璃信息表"); DownWorkstation downWorkstation1 = downWorkstationService.selectByFlowCardId(downGlassInfo.getFlowCardId()); downWorkstationService.updateracksnumber(downGlassInfo.getFlowCardId(), downWorkstation1.getRacksnumber() + 1); log.info("更新落架数量"); // LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); // wrapper.eq(DownGlassTask::getGlassId, newdownGlassInfo.getGlassId()); // DownGlassTask updateDetail = new DownGlassTask(); // updateDetail.setTaskStauts(2); // downGlassTaskService.update(updateDetail, wrapper); sequence++; // 递增顺序字段值 } } } catch (Exception e) { // 打印异常信息 e.printStackTrace(); // 或者可以进行其他异常处理,比如记录日志或者返回特定的错误信息 } } }