package com.mes.job;
|
|
import cn.hutool.core.collection.CollectionUtil;
|
import cn.hutool.core.lang.Assert;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.mes.common.S7object;
|
import com.mes.common.config.Const;
|
import com.mes.device.PlcParameterObject;
|
import com.mes.downglassinfo.entity.DownGlassInfo;
|
import com.mes.downglassinfo.mapper.DownGlassInfoMapper;
|
import com.mes.downglassinfo.service.DownGlassInfoService;
|
import com.mes.downstorage.entity.DownStorageCage;
|
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.entity.DownWorkstationTask;
|
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 com.mes.downglassinfo.entity.DownGlassTask;
|
import com.mes.downglassinfo.service.DownGlassTaskService;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.beans.BeanUtils;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.scheduling.annotation.Scheduled;
|
import org.springframework.stereotype.Component;
|
|
import java.util.Date;
|
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 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 confirmationWrodAddress = plcParameterObject.getPlcParameter("MES_confirmation_word").getAddress();
|
// String G06RobotTaskRequestWord = plcParameterObject.getPlcParameter("G06RobotTaskRequestWord").getAddress();
|
|
|
String taskRequestTypeValue ="3";
|
String glassIdeValue ="NG24041101C002-2-6-1-6";
|
String confirmationWrodValue ="1";
|
String outGlassstate="1";
|
String confirmationWrodAddress="1";
|
String G11RobotTaskRequestWord ="1";
|
String G06RobotTaskRequestWord ="1";
|
String G13RobotTaskRequestWord ="1";
|
|
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(confirmationWrodAddress, (short) 0);
|
// return;
|
// }
|
// if (!"0".equals(confirmationWrodValue)) {
|
// log.info("2、获取到的请求字不为0,将确认字改为0");
|
// S7object.getinstance().plccontrol.WriteWord(confirmationWrodAddress, (short) 0);
|
// return;
|
// }
|
|
if ("1".equals(taskRequestTypeValue)) {
|
log.info("3、进片请求,且确认字为0,执行进片任务");
|
inTo(glassIdeValue, confirmationWrodAddress);
|
} else if ("2".equals(taskRequestTypeValue)) {
|
|
log.info("3、出片请求,且确认字为0,执行进片任务");
|
outTo( confirmationWrodAddress);
|
|
} else if ("3".equals(taskRequestTypeValue)) {
|
log.info("3、进片和出片都空闲,执行出片任务");
|
if (outTo(confirmationWrodAddress)) {
|
inTo(glassIdeValue, confirmationWrodAddress);
|
|
|
}
|
}
|
|
if (("1".equals(G11RobotTaskRequestWord) || "1".equals(G06RobotTaskRequestWord)) || "1".equals(G13RobotTaskRequestWord)) {
|
log.info("4、有机器人下片请求,执行下片任务");
|
insertdownglassinfo();
|
}
|
|
//自动绑定架子,如果工位表没有绑定架子,默认将笼子中数量最多的流程卡号绑定机器手2的空架子
|
|
|
|
}
|
|
/**
|
* 进片任务
|
* @param glassId
|
* @param confirmationWrodAddress
|
* @param
|
*/
|
private void inTo(String glassId, String confirmationWrodAddress) {
|
log.info("1、按照玻璃id:{}获取玻璃小片信息", glassId);
|
GlassInfo glassInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, glassId));
|
if (glassInfo == null) {
|
log.info("2、此玻璃编号不存在");
|
return;
|
}
|
log.info("2、获取到的玻璃信息为{}", glassInfo);
|
|
// if(glassInfo.getFlowCardId()=){
|
//
|
// }
|
//添加进片任务 查找空格
|
List<DownStorageCageDetails> list = downStorageCageService.selectCacheEmpty();
|
if(list.size()>0){
|
DownStorageCageDetails item = list.get(0);
|
|
|
|
log.info("3、查询卧式理片笼里面的空格:{}", list);
|
log.info("4、将玻璃信息插入卧式理片笼,当前玻璃信息:{}", glassInfo);
|
DownStorageCageDetails details = new DownStorageCageDetails();
|
BeanUtils.copyProperties(glassInfo, details);
|
details.setState(1);
|
details.setGlassId(glassInfo.getGlassId());
|
details.setSlot(item.getSlot());
|
details.setDeviceId(item.getDeviceId());
|
downStorageCageDetailsService.save(details);
|
log.info("5、玻璃信息已存入理片笼详情表,玻璃信息为{}", details);
|
|
DownGlassTask downGlassTask = downStorageCageService.createDownGlassTask(glassInfo, "0", item.getSlot() + "", "1");
|
//添加进片任务
|
log.info("6、生成进片任务信息存入任务表{}", downGlassTask);
|
downGlassTaskService.insertCacheTask(downGlassTask);
|
}
|
//S7object.getinstance().plccontrol.WriteWord(confirmationWrodAddress, (short) 1);
|
log.info("7、发送确认字完成");
|
|
|
}
|
|
/**
|
* 出片任务
|
*
|
* @param confirmationWrodAddress
|
*
|
*/
|
private Boolean outTo( String confirmationWrodAddress) {
|
log.info("单片情况根据传入的料架号 查询符合按照版图id和片序出片,并且优先出满架的小片");
|
List<DownStorageCageDetails> list = downStorageCageDetailsService.CacheOut1(1,3);
|
|
List<DownStorageCageDetails> list2 = downStorageCageDetailsService.CacheOut1(4,6);
|
|
List<DownStorageCageDetails> list3 = downStorageCageDetailsService.CacheOut1(1,6);
|
// 优先 超出尺寸优先人工出片 人工处理
|
if (!list3.isEmpty()) {
|
|
DownStorageCageDetails item3 = list3.get(0);
|
if (item3.getHeight() >= 2500 && item3.getWidth() >= 2660) {
|
log.info("人工处理");
|
String endcell = "7";
|
|
|
DownGlassTask downGlassTask = downStorageCageService.createDownGlassTask(item3, "9", endcell, "2");
|
downGlassTaskService.insertCacheTask(downGlassTask);
|
// S7object.getinstance().plccontrol.WriteWord(confirmationWrodAddress, (short) 2);
|
|
return true;
|
}
|
else if (!list2.isEmpty() && !list3.isEmpty()) {
|
log.info("前后端都空闲 优先后端出片并且优先满架");
|
DownStorageCageDetails item4 = list2.get(0);
|
|
DownWorkstation downWorkstation = downWorkstationService.getOne(new LambdaQueryWrapper<DownWorkstation>().eq(DownWorkstation::getFlowCardId, item4.getFlowCardId()));
|
String endcell = String.valueOf(downWorkstation.getWorkstationId());
|
|
DownGlassTask downGlassTask = downStorageCageService.createDownGlassTask(item4, "9", endcell, "2");
|
downGlassTaskService.insertCacheTask(downGlassTask);
|
|
//S7object.getinstance().plccontrol.WriteWord(confirmationWrodAddress, (short) 2);
|
|
return true;
|
|
}
|
// 按照版图id和片序符合前端出片
|
else if (!list.isEmpty()) {
|
log.info("前端出片");
|
DownStorageCageDetails item = list.get(0);
|
DownWorkstation downWorkstation = downWorkstationService.getOne(new LambdaQueryWrapper<DownWorkstation>().eq(DownWorkstation::getFlowCardId, item.getFlowCardId()));
|
String endcell = String.valueOf(downWorkstation.getWorkstationId());
|
// 出到 G06
|
DownGlassTask downGlassTask = downStorageCageService.createDownGlassTask(item, "9", endcell, "2");
|
downGlassTaskService.insertCacheTask(downGlassTask);
|
// S7object.getinstance().plccontrol.WriteWord(confirmationWrodAddress, (short) 2);
|
|
|
return true;
|
// 按照版图id和片序符合后端出片
|
} else if (!list2.isEmpty()) {
|
log.info("后端出片");
|
DownStorageCageDetails item2 = list2.get(0);
|
DownWorkstation downWorkstation = downWorkstationService.getOne(new LambdaQueryWrapper<DownWorkstation>().eq(DownWorkstation::getFlowCardId, item2.getFlowCardId()));
|
String endcell = String.valueOf(downWorkstation.getWorkstationId());
|
// 出到 G11
|
DownGlassTask downGlassTask = downStorageCageService.createDownGlassTask(item2, "9", endcell, "2");
|
downGlassTaskService.insertCacheTask(downGlassTask);
|
// S7object.getinstance().plccontrol.WriteWord(confirmationWrodAddress, (short) 2);
|
return true;
|
}
|
}
|
//如果同时前后端都空闲 优先后端出片并且优先满架
|
|
// 返回结果
|
return false;
|
}
|
|
|
//
|
public void insertdownglassinfo() {
|
try {
|
|
List<DownGlassTask> 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("更新落架数量");
|
sequence++; // 递增顺序字段值
|
|
|
}
|
}
|
} catch (Exception e) {
|
// 打印异常信息
|
e.printStackTrace();
|
// 或者可以进行其他异常处理,比如记录日志或者返回特定的错误信息
|
}
|
|
|
}
|
|
|
}
|