package com.mes.downstorage.service.impl; import com.github.yulichang.toolkit.JoinWrappers; import com.github.yulichang.wrapper.MPJLambdaWrapper; 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.pp.entity.OptimizeDetail; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; 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(required=false) private DownStorageCageMapper downStorageCageMapper; @Autowired private GlassInfoService glassInfoService; @Autowired private DownGlassTaskService downGlassTaskService; @Autowired private DownStorageCageDetailsService downStorageCageDetailsService; @Autowired private DownStorageCageDetailsMapper downStorageCageDetailsMapper; public DownGlassTask createDownGlassTask(GlassInfo glassInfo, String startCell, String endCell,String taskType ) { DownGlassTask downGlassTask = new DownGlassTask(); BeanUtils.copyProperties(glassInfo,downGlassTask); downGlassTask.setStartCell(startCell); downGlassTask.setTaskType(taskType); downGlassTask.setEndCell(endCell); return downGlassTask; } public DownGlassTask createDownGlassTask(DownStorageCageDetails glassInfo, String startCell, String endCell,String taskType ) { DownGlassTask downGlassTask = new DownGlassTask(); BeanUtils.copyProperties(glassInfo,downGlassTask); downGlassTask.setStartCell(startCell); downGlassTask.setTaskType(taskType); downGlassTask.setEndCell(endCell); return downGlassTask; } @Override public boolean processInto(String Number) { //按id查询玻璃信息表里的玻璃 GlassInfo GlassInfo = glassInfoService.selectGlassId(Number); PlcParameterObject plcmes = PLCAutoMes.PlcMesObject; //存在此玻璃编号 if (GlassInfo != null) { //同找到同流程卡附近空格 List list = selectCacheEmpty(); 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 = 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"; 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()&&!list3.isEmpty()) { DownStorageCageDetails item3 = list2.get(0); String endcell = "11"; String SendEndcell = "1"; 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 DownGlassTask downGlassTask =createDownGlassTask(item,"0","06","2"); 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 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; } //找到空格子 @Override public List selectCacheEmpty() { return baseMapper.selectJoinList(DownStorageCageDetails.class, JoinWrappers.lambda(DownStorageCage.class) .selectAll(DownStorageCage.class) .select(DownStorageCageDetails::getWidth, DownStorageCageDetails::getHeight, DownStorageCageDetails::getGlassId) .leftJoin(DownStorageCageDetails.class, on -> on .eq(DownStorageCageDetails::getDeviceId, DownStorageCage::getDeviceId) .eq(DownStorageCageDetails::getSlot, DownStorageCage::getSlot)) .isNull(DownStorageCageDetails::getSlot) ); } /** * 修改理片笼信息 功能:对笼内栅格玻璃 【启用/禁用】 * @param downStorageCage * @return */ @Override public boolean updateDownStorageCage(DownStorageCage downStorageCage){ DownStorageCage downItem=baseMapper.selectById(downStorageCage.getId()); downItem.setEnableState(downStorageCage.getEnableState()); baseMapper.updateById(downItem); return true; } /** *修改理片笼信息 功能:对笼内栅格玻璃 【添加/删除/更换】 * @param downStorageCageId * @param downStorageCageDetails * @return */ @Override public boolean updateDownStorageCageDetails(int downStorageCageId,DownStorageCageDetails downStorageCageDetails){ DownStorageCage downItem=baseMapper.selectById(downStorageCageId); log.info("正常"+downItem); DownStorageCageDetails edgDItem=downStorageCageDetailsMapper.selectById(downStorageCageDetails.getId()); if (downItem!=null){ //移除 DownStorageCageDetails result=downStorageCageDetailsMapper.selectOne(new MPJLambdaWrapper().eq(DownStorageCageDetails::getSlot,downStorageCageId)); if (result!=null){ result.setSlot(0); downStorageCageDetailsMapper.updateById(result); } //添加 if(edgDItem!=null){ //只传格子 :移除玻璃 DownStorageCageDetails newresult=downStorageCageDetailsMapper.selectById(downStorageCageDetails.getId()); newresult.setSlot(downItem.getSlot()); downStorageCageDetailsMapper.updateById(newresult); } } return true; } }