package com.mes.downstorage.service.impl; import com.github.yulichang.query.MPJQueryWrapper; import com.mes.common.PLCAutoMes; import com.mes.common.S7control; import com.mes.device.PlcParameterObject; import com.mes.downglassinfo.entity.DownGlassTask; import com.mes.downglassinfo.service.DownGlassTaskService; import com.mes.downstorage.entity.DownStorageCage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.mes.downstorage.entity.DownStorageCageDetails; import com.mes.downstorage.mapper.DownStorageCageDetailsMapper; import com.mes.downstorage.mapper.DownStorageCageMapper; import com.mes.downstorage.service.DownStorageCageDetailsService; import com.mes.downstorage.service.DownStorageCageService; import com.mes.glassinfo.entity.GlassInfo; import com.mes.glassinfo.service.GlassInfoService; import com.mes.tools.WebSocketServer; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; import java.util.Map; /** *

* 服务实现类 *

* * @author zhoush * @since 2024-03-27 */ @Slf4j @Service public class DownStorageCageServiceImpl extends ServiceImpl implements DownStorageCageService { @Autowired private DownStorageCageMapper downStorageCageMapper; @Autowired private DownStorageCageDetailsMapper downStorageCageDetailsMapper; @Autowired private GlassInfoService glassInfoService; @Autowired private DownGlassTaskService downGlassTaskService; @Autowired private DownStorageCageDetailsService downStorageCageDetailsService; @Override public List gettask(){ downStorageCageMapper.selectList(null); // downStorageCageMapper.selectJoin(); return null; }; @Override public List getCacheLeisure() { log.info(" 查询笼子内空闲"); List list = downStorageCageMapper.selectJoinList( DownStorageCageDetails.class, new MPJQueryWrapper() .select("escd.*") .leftJoin("down_storage_cage_details escd on t.slot = escd.slot") .isNull("escd.slot") .orderByAsc("escd.slot") ); return list; } @Override public List selectCacheEmpty(){ return baseMapper.selectJoinList( Map.class,new MPJQueryWrapper().selectAll(DownStorageCage.class) .select("escd.glass_id","escd.flow_card_id","escd.width","escd.height") .leftJoin("down_storage_cage_details escd on t.device_id=escd.device_id and t.slot=escd.slot") .isNull("escd.slot") ); } @Override public List getCacheOut(int start, int end) { log.info("根据传入的工位查询符合按照顺序和大小出片的小片"); return downStorageCageMapper.selectJoinList( DownStorageCageDetails.class, new MPJQueryWrapper() .select("escd.*") .leftJoin("down_storage_cage_details escd on t.slot = escd.slot") .leftJoin("down_workstation dw on escd.flow_card_id = dw.flow_card_id") .leftJoin("glass_info gi on dw.flow_card_id = gi.flowcard_id and gi.flowcard_id=escd.flow_card_id ") .isNotNull("escd.slot") .between("dw.workstation_id", start, end) .orderByDesc("escd.width") .orderByDesc("escd.height") ); } @Override public List getCacheInfo() { log.info(" 查询笼子内信息"); return downStorageCageMapper.selectJoinList( Map.class, new MPJQueryWrapper() .select("escd.*") .leftJoin("down_storage_cage_details escd on t.slot = escd.slot") .orderByAsc("t.slot") ); } @Override public List getIsExistIntoCacheByLayoutAndSequence(Integer tempering_layout_id, Integer tempering_feed_sequence, double width) { log.info(" 查询可进此片玻璃的栅格号 找到相同版图id并且大于前面的顺序的空格"); List list = downStorageCageMapper.selectJoinList( DownStorageCageDetails.class, new MPJQueryWrapper() .select("escd.*") .leftJoin("down_storage_cage_details escd on t.slot = escd.slot") .isNotNull("escd.slot") .eq("escd.tempering_layout_id", tempering_layout_id) .lt("escd.tempering_feed_sequence", tempering_feed_sequence) .gt("t.remain_width", width) .orderByAsc("escd.tempering_feed_sequence") ); return list; } @Override public List IsExistIntoCacheByflowcardid(String flowcardid, double width) { log.info(" 查询可进此片玻璃的栅格号"); return downStorageCageMapper.selectJoinList( DownStorageCageDetails.class, new MPJQueryWrapper() .select("escd.*") .leftJoin("down_storage_cage_details escd on t.slot = escd.slot") .isNotNull("escd.slot") .lt("escd.flow_card_id", flowcardid) // 条件 t.remain_width - width > 0 .apply("t.remain_width - " + width + " > 0") .orderByDesc("escd.tempering_layout_id, escd.tempering_feed_sequence") ); } @Override public List getIsExistIntoCacheByLayout(Integer tempering_layout_id, double width) { log.info(" 查询可进此片玻璃的栅格号"); return downStorageCageMapper.selectJoinList( DownStorageCageDetails.class, new MPJQueryWrapper() .select("escd.*") .leftJoin("down_storage_cage_details escd on t.slot = escd.slot") .isNotNull("escd.slot") .lt("escd.tempering_layout_id", tempering_layout_id) // 条件 t.remain_width - width > 0 .apply("t.remain_width - " + width + " > 0") .orderByDesc("escd.tempering_layout_id, escd.tempering_feed_sequence") ); } @Override public List getIsExistIntoCacheByflowcardid(String flowcardid, double width) { log.info(" 单片情况 查询可进此片玻璃的栅格号 找到相同流程卡号的空格"); return downStorageCageMapper.selectJoinList( DownStorageCageDetails.class, new MPJQueryWrapper() .select("escd.*") .leftJoin("down_storage_cage_details escd on t.slot = escd.slot") .isNotNull("escd.slot") .eq("escd.flow_card_id", flowcardid) .gt("t.remain_width", width) .orderByAsc("escd.sequence") ); } public DownGlassTask createDownGlassTask(GlassInfo glassInfo, String startCell, String endCell,String taskType ) { DownGlassTask downGlassTask = new DownGlassTask(); downGlassTask.setId(glassInfo.getId()); downGlassTask.setStartCell(startCell); downGlassTask.setTaskType(taskType); downGlassTask.setEndCell(endCell); downGlassTask.setWidth(glassInfo.getWidth()); downGlassTask.setHeight(glassInfo.getHeight()); downGlassTask.setFilmsid(String.valueOf(glassInfo.getFilmsid())); downGlassTask.setThickness(glassInfo.getThickness()); downGlassTask.setFlowCardId(glassInfo.getFlowcardId()); return downGlassTask; } public DownGlassTask createDownGlassTask(DownStorageCageDetails glassInfo, String startCell, String endCell,String taskType ) { DownGlassTask downGlassTask = new DownGlassTask(); downGlassTask.setId(glassInfo.getId()); downGlassTask.setStartCell(startCell); downGlassTask.setTaskType(taskType); downGlassTask.setEndCell(endCell); downGlassTask.setWidth(glassInfo.getWidth()); downGlassTask.setHeight(glassInfo.getHeight()); downGlassTask.setFilmsid(String.valueOf(glassInfo.getFilmsid())); downGlassTask.setThickness(glassInfo.getThickness()); downGlassTask.setFlowCardId(glassInfo.getFlowCardId()); return downGlassTask; } @Override public boolean processInto(String Number) { //按id查询玻璃信息表里的玻璃 GlassInfo GlassInfo = glassInfoService.selectGlassId(Number); PlcParameterObject plcmes = PLCAutoMes.PlcMesObject; //存在此玻璃编号 if (GlassInfo != null) { //同找到同流程卡附近空格 List list = getIsExistIntoCacheByflowcardid(GlassInfo.getFlowcardId(), GlassInfo.getWidth()); List selectCacheEmpty=selectCacheEmpty(); // list list=selectCacheEmpty(); // list = downStorageCageService.selectCacheEmpty(); if (selectCacheEmpty.size() > 0) { //存在空格 //1.生成任务: 起始位置0 结束位置this.slot 任务类型 1 (进片任务) //2.回复 1进片 DownStorageCageDetails item = list.get(0); //selectInfo.insertCacheTask(GlassInfo.getId() + "", "0", item.getSlot() + "", "1", GlassInfo.getWidth(), GlassInfo.getHeight(), GlassInfo.getFilmsid(), GlassInfo.getThickness(), GlassInfo.getFlowcardId()); DownGlassTask downGlassTask = createDownGlassTask(GlassInfo,"0",item.getSlot()+"","1"); downGlassTaskService.insertCacheTask(downGlassTask); S7control.getinstance().WriteWord(plcmes.getPlcParameter("MESToGaStatus").getAddress(), (short) 1); //完成后插入小片数据到缓存表 return true; } } else { // ID编号不存在 不处理/回复PLC 进行报警提示 } //返回结果 return false; } /** * 理片 出 * @return */ // @Override public boolean processOut() { // 查询任务 PlcParameterObject plcmes = PLCAutoMes.PlcMesObject; List list = downStorageCageDetailsService.CacheOut(1, 5); List list2 = downStorageCageDetailsService.CacheOut(6, 10); List list3 = downStorageCageDetailsService.CacheOut(1, 10); //自动绑定架子 // 优先 超出尺寸优先人工出片 人工处理 if (!list3.isEmpty()) { DownStorageCageDetails item3 = list3.get(0); if (item3.getHeight() >= 1 && item3.getWidth() >= 1) { String endcell = "13"; String SendEndcell = "1"; // selectInfo.insertCacheTask(item3.getGlassId() + "", "0", endcell, "2", item3.getWidth(), item3.getHeight(), item3.getFilmsid(), item3.getThickness(), item3.getFlowCardId()); DownGlassTask downGlassTask =createDownGlassTask(item3,"0",endcell,"2"); downGlassTaskService.insertCacheTask(downGlassTask); S7control.getinstance().writeString(plcmes.getPlcParameter("DB14.28").getAddress(), SendEndcell); S7control.getinstance().writeString(plcmes.getPlcParameter("DB14.20").getAddress(), "1"); return true; } } //如果同时前后端都空闲 优先后端出片并且优先满架 else if (!list2.isEmpty()) { DownStorageCageDetails item3 = list2.get(0); String endcell = "11"; String SendEndcell = "1"; // selectInfo.insertCacheTask(item3.getGlassId() + "", "0", endcell, "2", item3.getWidth(), item3.getHeight(), item3.getFilmsid(), item3.getThickness(), item3.getFlowCardId()); DownGlassTask downGlassTask =createDownGlassTask(item3,"0",endcell,"2"); downGlassTaskService.insertCacheTask(downGlassTask); S7control.getinstance().writeString(plcmes.getPlcParameter("DB14.28").getAddress(), SendEndcell); S7control.getinstance().writeString(plcmes.getPlcParameter("DB14.20").getAddress(), "1"); return true; } // 按照大小符合前端出片 else if (!list.isEmpty()) { DownStorageCageDetails item = list.get(0); // 出到 G06 //selectInfo.insertCacheTask(item.getGlassId() + "", "0", "06", "2", item.getWidth(), item.getHeight(), item.getFilmsid(), item.getThickness(), item.getFlowCardId()); DownGlassTask downGlassTask =createDownGlassTask(item,"0","06","2"); S7control.getinstance().writeString(plcmes.getPlcParameter("DB14.28").getAddress(), "1"); S7control.getinstance().writeString(plcmes.getPlcParameter("DB14.20").getAddress(), "1"); return true; // 按照大小符合后端出片 } else if (!list2.isEmpty()) { DownStorageCageDetails item2 = list2.get(0); // 出到 G11 // selectInfo.insertCacheTask(item2.getGlassId() + "", "0", "11", "2", item2.getWidth(), item2.getHeight(), item2.getFilmsid(), item2.getThickness(), item2.getFlowCardId()); DownGlassTask downGlassTask =createDownGlassTask(item2,"0","11","2"); downGlassTaskService.insertCacheTask(downGlassTask); S7control.getinstance().writeString(plcmes.getPlcParameter("DB14.28").getAddress(), "2"); S7control.getinstance().writeString(plcmes.getPlcParameter("DB14.20").getAddress(), "1"); return true; } // 返回结果 return false; } }