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;
}
}