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.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 GlassInfoService glassInfoService; @Autowired private DownStorageCageService downStorageCageService; @Autowired private DownGlassTaskService downGlassTaskService; @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 getCacheOut(int start, int end) { // log.info(" 根据传入的工位查询符合按照顺序和大小出片的小片"); // List map = downStorageCageMapper.selectJoinList( // Map.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") // .isNotNull("escd.slot") // .between("dw.workstation_id", start, end) // .orderByAsc("escd.tempering_layout_id, escd.tempering_feed_sequence") // ); // return map; // } @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") ); } // @Override // public List Out() { // 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") // .isNotNull("escd.slot") // // .orderByDesc("escd.width") // .orderByDesc("escd.height") // ); // } 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; } @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()); if (list.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 = getCacheOut(1, 5); List list2 = getCacheOut(6, 10); List list3 = getCacheOut(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 = new DownGlassTask(); downGlassTask.setId(item3.getId()); // 设置玻璃ID downGlassTask.setStartCell("0"); downGlassTask.setEndCell(endcell); downGlassTask.setTaskType("2"); downGlassTask.setWidth(item3.getWidth()); // 设置玻璃宽度 downGlassTask.setHeight(item3.getHeight()); // 设置玻璃高度 downGlassTask.setFilmsid(item3.getFilmsid()+""); // 设置膜ID downGlassTask.setThickness(item3.getThickness()); // 设置玻璃厚度 downGlassTask.setFlowCardId(item3.getFlowCardId()); // 设置流程卡号 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 (!list3.isEmpty()) { DownStorageCageDetails item3 = list3.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 = new DownGlassTask(); downGlassTask.setId(item3.getId()); // 设置玻璃ID downGlassTask.setStartCell("0"); downGlassTask.setEndCell(endcell); downGlassTask.setTaskType("2"); downGlassTask.setWidth(item3.getWidth()); // 设置玻璃宽度 downGlassTask.setHeight(item3.getHeight()); // 设置玻璃高度 downGlassTask.setFilmsid(item3.getFilmsid()+""); // 设置膜ID downGlassTask.setThickness(item3.getThickness()); // 设置玻璃厚度 downGlassTask.setFlowCardId(item3.getFlowCardId()); // 设置流程卡号 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 = new DownGlassTask(); downGlassTask.setId(item.getId()); // 设置玻璃ID downGlassTask.setStartCell("0"); downGlassTask.setEndCell("06"); downGlassTask.setTaskType("2"); downGlassTask.setWidth(item.getWidth()); // 设置玻璃宽度 downGlassTask.setHeight(item.getHeight()); // 设置玻璃高度 downGlassTask.setFilmsid(item.getFilmsid()+""); // 设置膜ID downGlassTask.setThickness(item.getThickness()); // 设置玻璃厚度 downGlassTask.setFlowCardId(item.getFlowCardId()); // 设置流程卡号 downGlassTaskService.insertCacheTask(downGlassTask); 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 = new DownGlassTask(); downGlassTask.setId(item2.getId()); // 设置玻璃ID downGlassTask.setStartCell("0"); downGlassTask.setEndCell("11"); downGlassTask.setTaskType("2"); downGlassTask.setWidth(item2.getWidth()); // 设置玻璃宽度 downGlassTask.setHeight(item2.getHeight()); // 设置玻璃高度 downGlassTask.setFilmsid(item2.getFilmsid()+""); // 设置膜ID downGlassTask.setThickness(item2.getThickness()); // 设置玻璃厚度 downGlassTask.setFlowCardId(item2.getFlowCardId()); // 设置流程卡号 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; } }